更改内容:1、优化代码,全局变量在定义时不赋初值,减小ROM占用;2、将显示UI模块化,单独成文件displayui.c和display_ui.h;3、将部分功能模块的状态位、标志位变量和配置参数置于congfig.h;

This commit is contained in:
Alex xu 2025-01-21 14:27:57 +08:00
parent 056fa5dab8
commit 62a82c651c
42 changed files with 1720 additions and 1577 deletions

Binary file not shown.

View File

@ -1,830 +0,0 @@
:030000000226CA0B
:1026CA00758E3075D20078FFE4F6D8FD9000007F51
:1026DA00007E01E4F0A3DFFCDEFA7581880227257B
:0F2EFF0053797374656D20496E69742E0D0A0046
:102EAC00122A507BFF7A2E79FF121412D2AED2BEA8
:082EBC00122862122CCD80F4F3
:10217F00010D0001140001130001120001110001F3
:10218F0010004100BC00020E00004200B6000042E9
:10219F0000BA00004200AF00004200B10000420050
:1021AF00B800004200B400004100B3004100BD0080
:0221BF00C14617
:102B490075FE0F43FF8075FE2975FFB575A52175C3
:102B5900FE1E43FF01E5A3540F24F8780DF6E5A303
:102B6900C4540F7814F6E5AD540F24F875F00AA48F
:102B79007810F67812A6ABE5ADC4540F24F875F0B9
:0B2B89000AA418F67813A6ACD2BD22F7
:1019BD00900085EFF0204603021BD79000B6E0FEA5
:1019CD00A3E07803CEC313CE13D8F9F0EE9000B692
:1019DD00F09000B3E024FD6048147003021AA214C5
:1019ED007003021B1624FE7003021B862405600380
:1019FD00021BD4780DE6FF3395E0FEC39000B7E0EF
:101A0D009FFF9000B6E09EFE9000BAF0A3EFF0C3EA
:101A1D00EE648094804003021BD4E49000BA021B54
:101A2D00D19000B6E0FEA3E0FF7C097DC4120B054A
:101A3D00780A120A8F9000B6EEF0A3EFF07810E658
:101A4D00FD3395E0FCC3EF9DFFEE9CFE3395E0FD6D
:101A5D00FCE47B64FAF9F8120A2FC006C00778126D
:101A6D00E675F002A424F4FFE5F03401AB07FA3378
:101A7D0095E0F9F8D007D006122BD89000AFEEF014
:101A8D00A3EFF0C3EE648094804003021BD4E49076
:101A9D0000AF021BD19000B6E0FEA3E0FF7C097DF4
:101AAD00C4120B05780A120A8F9000B6EEF0A3EF60
:101ABD00F07811E6FD3395E0FCC3EF9DFFEE9CFE43
:101ACD003395E0FDFCE47B64FAF9F8120A2FC006A9
:101ADD00C0077813E675F002A424F4FFE5F0340195
:101AED00AB07FA3395E0F9F8D007D006122BD89052
:101AFD0000B1EEF0A3EFF0C3EE64809480400302DA
:101B0D001BD4E49000B1021BD19000B6E0FEA3E01F
:101B1D00FF7C097DC4120B05780A120A8F9000B65E
:101B2D00EEF0A3EFF0E025E0FE9000B6E03390007C
:101B3D00B8F0A3CEF09000B8E0FEA3E07802C33376
:101B4D00CE33CED8F9FDAC067814E6FF3395E0FE22
:101B5D00EF24F8FFEE34FFFE12094D7C037DE812F1
:101B6D00095F9000B8EE8FF0120995C39000B8E0B0
:101B7D00648094805051E4804B780DE6FF3395E0FE
:101B8D00FEC39000B7E09FFF9000B6E09EFEE4FC20
:101B9D00FD7BC47A09F9F8120A2F780A120AA2906D
:101BAD0000B6EEF0A3EFF0E025E0FF9000B6E033D5
:101BBD00FE9000B4F0A3EFF0C3EE64809480500764
:101BCD00E49000B4F0A3F0C24622900085E09000AE
:101BDD00B3F0C454F04401F5A5E49000B6F0A3F0C1
:051BED009000BDF02294
:03006B000228CB9D
:1028CB00C0E0C0F0C083C082C0D075D000C000C0D3
:1028DB0006C007E5F330E038AFA1780E760008A606
:1028EB0007E5A254031846F608E6F69000BDE0C3D0
:1028FB009408501718E6FE08E6FF9000B6EE8FF02E
:10290B001209959000BDE004F08005D24653A5FE58
:10291B0075F301D007D006D000D0D0D082D083D0B1
:04292B00F0D0E032D6
:0521C100C1230115031C
:102CFF0075FE8743FF2075FE7043FF1853B3F143F2
:102D0F00B302E47817F67819F67815E67818F6789E
:102D1F001A76017917E718461846F5B175B20122F0
:10232B00E4FE9000BAE0FCA3E0FDC394D8EC940368
:10233B0040037F0022EF7003022444D3ED940FEC93
:10234B0094034003022422ED94CBEC94005003023F
:10235B002422D3ED94AAEC94024022D2217815E6E4
:10236B00FF137818F6302211D3ED94BFEC94024092
:10237B0004C22280047818A607E4FE8070D3ED9483
:10238B00AAEC94025043ED9437EC9401403BD222DB
:10239B007815E6FF7818F6302113D3ED9493EC946F
:1023AB00025004C2218006EFC3137818F6781A7610
:1023BB0001301C11D3ED9451EC94015004C21C80DC
:1023CB0004E4781AF6E4FE8024D3ED9437EC940100
:1023DB00501BD21CE4781AF6302210ED9426EC94A4
:1023EB00015004C2228004781A7601E4FE301F11DA
:1023FB00C3ED94F3EC94025006C21FE4FE80027E00
:10240B000130202FD3ED94DDEC94004006C220E484
:10241B00FE80207E01801CD3ED940FEC94034006CC
:10242B00D21F7E01800DD3ED94CBEC94005004D2DF
:10243B00207E01C21DC21E8058C21FC220D3ED9444
:10244B009FEC94035031ED9471EC94004029301DB6
:10245B0010ED9484EC94035006C21DE4FE80027EC2
:10246B0001301E2DD3ED9482EC94004006C21EE485
:10247B00FE801E7E01801AD3ED949FEC94034004E2
:10248B00D21D800BC3ED9471EC94005002D21E7ED2
:08249B0001781AE6F5B2AF0664
:0124A3002216
:1024A400E4FBFAE5E65480FFE4FCFDFEEF7007531D
:1024B400B3FE7816F62278167601E5E830E5057560
:1024C400E820800FE5E530E1028008E5F230E50719
:1024D40075F22053B3FE22E5F2540C601353B3FE9D
:1024E400E5F354C0700302257F75F20C75F3C02226
:1024F40075F3C07F0112232BEF600653B3FED22382
:1025040022C223E5F230E432781AE6B401067A10E6
:102514007B6880047A0F7BA0EB246AFFEA34FFFE19
:10252400C39000B9E09F9000B8E09E500575F2108A
:10253400800353B3FE78167603227917E778194699
:102544001846F5B1781AE6F5B243B311781CE6FFE4
:10255400D394014002C23DEFD394034002C239EF49
:10256400D394074002C23BEFD3940C4002C23AEF2B
:0B257400D394114002C23C781676029E
:01257F002239
:0621C600C13EC13FC14013
:10000E00303F10EFB4010475B5C02253B5BFED44B7
:04001E0080F5B52292
:102EEE00E5B55480FFEF6008303F05E4F5B5C23F0D
:012EFE0022B1
:1029F200C23FE5E520E156E5E230E703D24022E5B9
:102A0200E830E00D30254675E8017D3FE4FF020025
:102A12000EE4FF12232BEF6006122EEED23E22C2EC
:102A22003E303D03022EEED23F3040217816E6B40E
:102A3200021BC39000B9E094109000B8E064809447
:0E2A42008E4005D23FC24022122EEEC23F222D
:0821CC00C144C1454100D4FFEC
:102D2F00E5E25408FF9000D4E06F6021E5E230E364
:102D3F00089000D37401F08005E49000D3F0D244E2
:0D2D4F00C210D245D2389000D4EFF0D24827
:012D5C002254
:1021D400C132C131C130011D004100CE004100D2E5
:0E21E400004100CD004200CF00004100D100BC
:101FC400E5E25402FFE4FCFDFEEF70319000CF75B2
:101FD400F0011209959000CFE0FEA3E0FFC394172F
:101FE400EE94024004D230800EC3EF9487EE940046
:101FF4004005202F02D22FD22CC22D8040302C3607
:10200400D248E4781DF6C22CD22D9000D1F0900075
:10201400CFE0FEA3E0FFD3941EEE94005008D2322A
:10202400D22ED238800EC3EF944FEE940150053077
:102034002F02D231C22FE49000CFF0A3F0302D62F2
:10204400303F5F30312720100280287F03122AA7F7
:102054009000D1E0D39423500302216BC231781D48
:102064007602E49000CEF090002BF0A3F0303029FB
:1020740020100A7D3FE4FF12000ED210227F0312CB
:102084002AA79000D1E0D39423500302216BC230DD
:10209400E49000D2F0781D7603302E02C22EC22DB9
:1020A400C2109000D3E06401600302217E781DE633
:1020B400640260030221409000CEE0C394015010FA
:1020C4007D017F01121DEEE490002BF0A3F08054FB
:1020D4009000CDE0D394054003E4803990002CE0D7
:1020E400B4010FE4FD7F02121DEE90002C7402F087
:1020F400803290002CE06402702A90002BE0601D76
:102104007D017F02121DEEE490002BF0A3F09000FD
:10211400CEF09000CDF0781DF6D2118058E4FD7F0A
:1021240001121DEE9000CEE0D39414400A9000CD2D
:10213400E004F0E4A3F0229000CE802B781DE66446
:102144000370379000D2E0FFC394B4501EEF540FD5
:1021540070047D0180099000D2E054077006FD7F71
:1021640003121DEE9000D2E004F022E4781DF6D2B2
:0A217400119000D2F07F04122AA798
:01217E00223E
:1021F20041003100410030004100320041002F0017
:102DDA0075FE0675FF3C75FE0E53FF0F75FE0F5309
:102DEA00FFF075FE0375FFFFC282C283C285C284EB
:012DFA0022B6
:102E7800EF14600D14600D14600D2403700BD282E2
:0A2E880022D28322D28422D28522B6
:052E3B00900085E0FF9E
:102E4000EF14600D14600D14600D2403700BC2822A
:0A2E500022C28322C28422C285221E
:10299200E4FF74332FF582E43400F583E4F07437F6
:1029A2002FF582E43400F583E4F0EF25E0243BF5D3
:1029B20082E43400F583E4F0A3F0EF25E02443F54C
:1029C20082E43400F583E4F0A3F0EF25E0244BF534
:1029D20082E43400F583E4F0A3F0EF25E02453F51C
:0F29E20082E43400F583E4F0A3F00FEFB404A314
:0129F10022C3
:10292F00AC0774332CF582E43400F583EDF0EAC381
:10293F0013FEEB13FFEC25E0243BF582E43400F5A6
:10294F0083EEF0A3EFF0AF03EC25E02443F582E430
:10295F003400F583EAF0A3EFF090008AE0FEA3E0E5
:10296F00FFEC25E0244BF582E43400F583EEF0A371
:10297F00EFF0EC25E02453F582E43400F583E4F026
:03298F00A3F02290
:102C5F0074332FF582E43400F583EDF074372FF5DC
:102C6F0082E43400F583EBF0EF25E0243BF582E4BA
:102C7F003400F583E4F0A37469F0EF25E02453F5F5
:0B2C8F0082E43400F583E4F0A3F0229F
:10103A00E4900085F0F0900085E0FFC3940440033B
:10104A0002137C74332FF582E43400F583E06022C6
:10105A0024FE60241470030211441470030211BBAD
:10106A0024036003021318900085E0FF122E780211
:10107A001318122E3B021318900085E0FF25E02476
:10108A003BF582E43400F583E0FCA3E0FDEF25E0C4
:10109A002453F582E43400F583E0FEA3E0C39DEE19
:1010AA009C5005122E788003122E3B900085E0FF9B
:1010BA0025E02443F582E43400F583E0FCA3E0FD57
:1010CA00EF25E02453F582E43400F583E0FEA3E043
:1010DA00C39DEE9C5003021318900085E025E0247E
:1010EA0053F582E43400F583E4F0A3F0EF25E0241D
:1010FA004BF582E43400F583E0FEA3E0D39400EEDE
:10110A0094004016900085E025E0244BF582E434F3
:10111A0000F58374FFF5F0120995900085E0FF252C
:10112A00E0244BF582E43400F583E0FCA3E04C6054
:10113A000302131874332F0211D7900085E0FF259C
:10114A00E0243BF582E43400F583E0FCA3E0FDEF04
:10115A0025E02453F582E43400F583E0FEA3E0D3CE
:10116A009DEE9C5005122E788003122E3B9000852E
:10117A00E0FF25E02443F582E43400F583E0FCA394
:10118A00E0FDEF25E02453F582E43400F583E0FE28
:10119A00A3E0C39DEE9C5003021318900085E0253E
:1011AA00E02453F582E43400F583E4F0A3F002135B
:1011BA0018900085E0FF2437F582E43400F583E0D7
:1011CA007017122B94C247900085E02433F582E40D
:1011DA003400F583E4F0021318900085E0FF243709
:1011EA00F582E43400F583E0FE6402704B20471474
:1011FA00D247EF25E0243BF582E43400F583E4F09E
:10120A00A37469F0900085E0FF25E0243BF582E4B1
:10121A003400F583E475F001120995EF25E0243BCB
:10122A00F582E43400F583E0FCA3E0C394FEEC9479
:10123A00005003021302804EEE6401705A204717D1
:10124A00D247900085E025E0243BF582E43400F59E
:10125A0083E4F0A374FEF0900085E0FF25E0243BD0
:10126A00F582E43400F58374FFF5F0120995EF2551
:10127A00E0243BF582E43400F583E0FEA3E0D39456
:10128A0069EE94005072900085E02437F582E434C8
:10129A0000F583E4F08061900085E0FF2437F58251
:1012AA00E43400F583E06403704EEF25E0243BF557
:1012BA0082E43400F583E0FEA3E0FFC394FEEE94DB
:1012CA00004004D247800BD3EF946AEE9400500298
:1012DA00C247900085E025E0243B30470DF582E4C3
:1012EA003400F58374FFF5F0800BF582E43400F5E1
:1012FA0083E475F001120995900085E0FF25E0244A
:10130A003BF582E43400F583A3E0FD122AF890004D
:10131A0085E0FF701174332FF582E43400F583E021
:10132A00900031F08043900085E0B401102433F539
:10133A0082E43400F583E0900030F0802C90008540
:10134A00E0B402102433F582E43400F583E090001F
:10135A0032F08015900085E0B4030E2433F582E460
:10136A003400F583E090002FF0900085E004F0024D
:10137A001040E4900085F0900085E0FFC39404508B
:10138A001BEF25E02453F582E43400F583E475F07D
:0C139A0001120995900085E004F080DB52
:0113A6002224
:062202004100D70FC148A6
:102D8B0075FE1E43FF0275FE2143FF0875D4867541
:102D9B00FE2143FF0475FE2143FF02300F0775FE32
:0C2DAB002453FFC32275FE2443FF3C228A
:10005600D2AC759A01D2B9D2BDD2A9D2AB75FE295E
:0400660043FFB02282
:10006E00C2ACE4F59AD2B9C2BDC2A9C2AB75FE2923
:04007E0053FF4F22BB
:092F440012006E438702020056E0
:102EDA00E5E25401FFEF7006201203304804C248AD
:042EEA00C322D3220A
:102A500075FE01E4F5FF122E92122F37122F1CE49F
:102A6000F58675B7C375FE6A75FF0475FE6C43FF86
:102A70000B122B4975FE8043FF0275FE0E53FFFCBF
:102A800043FF0175FE1775FF3CD2A8D2AF122CFF91
:102A90007D697F03122EC4122DDA122992122D8B1A
:072AA0009000C27401F02256
:03000300020006F2
:03000600D24832AB
:03004B00022F552C
:062F550075EB3CD248328E
:03005300022F5B1E
:062F5B0075F302D24832BA
:10220800202069000000000000000000000000001D
:1022180000000000000000000000000000000000B6
:0F222800000000C143C1424100D5004100D60073
:0E2F0E009000AEEFF0122F4D9000AEE0FF22CB
:082F4D002041FDD2418F9922C1
:102E920075FE0E53FFF343FF04D2DF43878075BAFA
:0A2EA2000375AAFD759852D2AC2208
:03002300022F2A7F
:0D2F2A00309904C299C241309802C2983219
:0D2F370075BB03759DDC759B92439A0122CA
:062C9A009000A9120AD609
:102CA000E49000ACF0F09000ACE0C39FE49E501CB8
:102CB0002042FDD2429000A9E475F001120ABF1231
:0C2CC00008B2F59C9000ACE004F080DA53
:012CCC0022E5
:03008300022580D3
:10258000C0E0C083C082C0D075D000C000C005C00C
:1025900006C007E59B30E105539BFDC242E59B3039
:1025A000E076539BFED2489000D5E0146019146089
:1025B0003424027063E59C9000D5B455087401F092
:1025C000A3E4F0800E8018E59C9000D5B4AA1074A6
:1025D00002F0A3E0FF04F074692FF8A69C8039E4B0
:1025E000F0A3F080339000D6E0FF04F074692FF878
:1025F000A69C786BE62404FFE433FEE0FDC39FEE67
:102600006480F87480985005ED9420400B9000D6BB
:10261000E4F09000D5F0D243D007D006D005D0002A
:09262000D0D0D082D083D0E0328A
:10262900536C65657020537461746520286C696EFC
:10263900653A2564290D0A004348475F5354413AD6
:1026490025642C53545F564F583A307825782C53CB
:102659005441303A307825782C535441313A307806
:1026690025782C535441323A307825782C535441EB
:10267900333A307825782C535441343A30782578D8
:102689002E4465635F536C6565703A25640D0A00D5
:102699004465636E745F536C65657044656C6179FC
:1026A9002052656C6F61642E0D0A00456E74657267
:1026B900205374616E646279204D6F6465210D0A3F
:0126C9000010
:102237004300C20402024100BF004100C000C13890
:0E224700C1374100C1004100C5004100BE008A
:10002600E4FB7D04FF122C5FE4FB7D047F01122CB0
:100036005FE4FB7D047F02122C5FE4FB7D047F03FB
:03004600022C5F2A
:100C6700303859C238E49000C0F0781BF690008AFB
:100C7700F0A3F0FBFAFDFF12292FE490008AF0A3FE
:100C8700F0FBFAFD7F0112292FE490008AF0A3F010
:100C9700FBFAFD7F0212292FE490008AF0A3F0FBF4
:100CA700FAFD7F0312292F9000317402F090003073
:100CB700F0900032F090002FF0D2482220230F202E
:100CC7003E0C200D03020D7C300F03020D7C2033F8
:100CD70005D233D23822900031E06402601A9000C6
:100CE7008AE4F0A3740AF07B147A007D02E4FF1211
:100CF700292F9000317403F0900030E06402601AED
:100D070090008AE4F0A3740AF07B147A007D027FD6
:100D17000112292F9000307403F0900032E0640232
:100D2700601A90008AE4F0A3740AF07B147A007DBD
:100D3700027F0212292F9000327403F090002FE0F7
:100D47006402601A90008AE4F0A3740AF07B147AB4
:100D5700007D027F0312292F90002F7403F0200DCE
:100D6700030210399000C0E0C394285003020EB765
:100D7700D20FD2382230330CC233C235C234C24507
:100D8700C20ED2377816E6FF7003020E9164037025
:100D97005E203507D235C234020026E490008AF07F
:100DA700A3F0FBFA7D01FF12292FE490008AF0A33C
:100DB700F0FBFA7D017F0112292FE490008AF0A34E
:100DC700F0FBFA7D017F0212292FE490008AF0A33D
:100DD700F0FBFA7D017F0312292F9000317401F097
:100DE700900030F0900032F090002FF0020E882033
:100DF700340ED234C235D238E49000C5F0020E88E2
:100E07009000C0E0C394015057E004F09000C5E0A3
:100E170014601A146027146034240370649000313E
:100E2700E06404605C7B017D04E4FF802E90003069
:100E3700E06404604C7B017D047F01801E900032DA
:100E4700E06404603C7B017D047F02800E90002FEC
:100E5700E06404602C7B017D047F03122C5F8021FA
:100E67009000C0E0C3940F5005E004F08013E490B5
:100E770000C0F09000C5E004F0E0C394044002E431
:100E8700F0C245C20EC232D2362230340AC2341200
:100E97000026D238D2372220450C203609200E06EC
:100EA7002032030210399000C0E0FFC394015004C0
:100EB700E004F022EFC394644003020FE49000C003
:100EC700E004F0303B37900031E064037003021018
:100ED70039E490008AF0A3F07B64FA7D03FF1229BE
:100EE7002F9000317404F0E490008AF0A3F0FBFA2D
:100EF700FD7F0112292F9000307402802D303A4176
:100F0700E490008AF0A3F0FBFA7D01FF12292F90ED
:100F170000317401F0E490008AF0A3F0FBFA7D0140
:100F27007F0112292F9000307401F0E490008AF0BD
:100F3700A3F0FBFAFD7F0212292F90003274028082
:100F470043E490008A303C53F0A3F0FBFA7D01FFA5
:100F570012292F9000317401F0E490008AF0A3F079
:100F6700FBFA7D017F0112292F9000307401F0E414
:100F770090008AF0A3F0FBFA7D017F0212292F90DF
:100F870000327401F0E490008AF0A3F0FBFAFD7FD1
:100F97000312292F90002F7402F022F0A3F0FBFA1E
:100FA7007D01FF12292FE490008AF0A3F0FBFA7D60
:100FB700017F0112292FE490008AF0A3F0FBFA7D4C
:100FC700017F0212292FE490008AF0A3F0FBFA7D3B
:100FD700017F0312292F90003174018048C245C256
:100FE70036C20EC232E490008AF0A3F0FBFAFDFF8E
:100FF70012292FE490008AF0A3F0FBFAFD7F01127B
:10100700292FE490008AF0A3F0FBFAFD7F02122952
:101017002FE490008AF0A3F0FBFAFD7F0312292F3B
:101027009000317402F0900030F0900032F09000A0
:021037002FF098
:011039002294
:102DFB009000BCE0FF04F01219BD9000BCE0B406DB
:102E0B000204F09000BCE0C3940840037402F0226B
:102E5A00122D2F121FC4122D5D302411C2241224E8
:0E2E6A00A41229F212276A120C6712170C220A
:101BF200E4900085F09000C2E0FFA3E0FE6F606C0D
:101C0200A3EEF09000C2E0A3F024FE60351460421F
:101C120014604624036003021DED90008AE4F0A3E1
:101C22007403F07B647A007D02E4FF12292F900096
:101C32008AE4F0A37403F07B647A007D027F0102E0
:101C4200292F200F03021DEDD24475E80CC20DC2EC
:101C52000F229000D7740FF0227BFF7A2679299009
:101C620000897402F0A3741FF0021D749000C3E097
:101C720024FE6035146076147003021D872403600D
:101C820003021DED9000BEE004F0E0C3940850038F
:101C9200021DED9000C27402F0E49000BEF0781CC8
:101CA200E66003021DED021D80E5F6700CE5F8709A
:101CB20008E5FA7004E5E1602D9000C27403F0E5D6
:101CC200F6540FFFE4FCFDFE7B08FAF9F8C3120A92
:101CD2007E70069000C27404F075E11F75F60F75F0
:101CE200F8FC75FABC229000C27403F0222028038B
:101CF200021DEDC22875FE6E900085E5FFF07BFFA8
:101D02007A2679417816E6FF900089E4F0A3EFF095
:101D1200900085E0FF90008BE4F0A3EFF0AFE2A328
:101D2200E4F0A3EFF0AFE3A3E4F0A3EFF0AFE4A39A
:101D3200E4F0A3EFF0AFE5A3E4F0A3EFF0AFE6A386
:101D4200E4F0A3EFF09000D7E0FF900097E4F0A357
:101D5200EFF01214129000D7E0D394004017E01471
:101D6200F0204803021DEDC248740FF07BFF7A2673
:101D720079990214127BFF7A2679B4121412900018
:101D8200C27404F022122EDA505B122D8B7F0412E1
:101D92002AA7122EEEE490008AF0A3F0FBFAFDFFD0
:101DA20012292FE490008AF0A3F0FBFAFD7F0112C2
:101DB200292FE490008AF0A3F0FBFAFD7F0212299A
:101DC2002FE490008AF0A3F0FBFAFD7F0312292F83
:101DD2009000317402F0900030F0900032F09000E8
:0B1DE2002FF0022F449000C27402F0AA
:011DED0022D3
:102CCD00302726C2279000BFE0FF04F0EF14600C00
:102CDD0014600E24027012122DFB800D122E5A80DC
:102CED0008121BF2E49000BFF0302905C229121022
:022CFD003A2279
:102E1B0000000000000000000000000000000000A7
:102E2B000000000000000000000000000000000097
:10225500C112C10EC11041002DFFC10D4200070082
:1022650000420005000042002B000041002A00C189
:102275000FC1111A2A000000000000000000000034
:102285000000000000000000000000000000002029
:1022950024440000000000000000000000000000D1
:1022A5000000000000000000000000000000000029
:0E22B500000000000000420028000001680048
:102AA700EF24FE601E14602814602F24FE60352476
:102AB70005703D43BD8853BDBB75FE6F53FFF243A1
:102AC700FF092243BDCC75FE6F53FFFE43FF0C2267
:102AD70053BD7753B7CF43B7302253B7CF43B7036D
:102AE70053BD772253B7CC53BD7775FE6A43FF308A
:012AF70022BC
:10170C00203F0302198430445920100A7D3FE4FF26
:10171C0012000ED210227F03122AA7E4900003F0CD
:10172C00900001F0A3F0C200C201D20B9000D3E0F4
:10173C007020C20ED202D203C205C208C204C20972
:10174C00C20AD212C237900026F0A3F090002EF0FD
:10175C008008C202C203D205C206C210C20DC20F5B
:10176C00C244900001E0C394055003021924300BCD
:10177C0005C20B0218F820002ED200E5E354A0603D
:10178C0021E5E354A0FFE4FCFDFE7BA0FAF9F8C3CD
:10179C00120A7E90002A70057402F0800A7401F01F
:1017AC008005E490002AF020050302183C9000020A
:1017BC00E0C3940550077F06122AA7802620013A21
:1017CC00900003E0FFD39414501EEF54037003FDFC
:1017DC008009900003E020E0077D017F06121DEEDA
:1017EC00900003E004F080487F04122AA7E49000E4
:1017FC0003F0D201D211C2128036781DE67031305E
:10180C001104C2118022E5E354A0FBE4FAF9F8902C
:10181C000000E0FFE4FCFDFEC3120A7E6012E5E36B
:10182C0054A06004D20ED238E5E354A0900000F02E
:10183C0020020302198130373F2010237D3FE4FF43
:10184C0012000ED210D212E4900026F0A3F09000F9
:10185C002EF0900001F0C208D20BC200D204227FFD
:10186C0003122AA7C210D203900001E0D3940350B4
:10187C0003021924C237804D20044A900002E0FF75
:10188C00D39414501BEF54037003FD800990000295
:10189C00E020E0077D017F81121DEE900002807830
:1018AC00900003E0FFD39414501BEF54037003FD1E
:1018BC008009900003E020E0077D017F07121DEEF8
:1018CC009000038053E5E8540C6026200F1E900016
:1018DC0003E004F0E0C3940550030219BCE4F07576
:1018EC00E80C7F03122AA7D20DC212227F04022A0F
:1018FC00A7C20DC20F3003097F03122AA7C20380AF
:10190C007420083DE5E354AC64AC6003303921909D
:10191C000001E0D394285004E004F022D208E490B3
:10192C000004F0900001F0C2097F04122AA7804540
:10193C00900027E0703F7B017A00790912008680C5
:10194C0034900004E0FFD39414501EEF5403700342
:10195C00FD8009900004E020E0077D017F80121DCE
:10196C00EE900004E004F0800C200909D2097F04F9
:10197C00122AA7C212C2072220070BD2077F041219
:10198C002AA7C2128022E5E354A0FBE4FAF9F890EE
:10199C000000E0FFE4FCFDFEC3120A7E6012E5E3EA
:1019AC0054A06004D20ED238E5E354A0900000F0AD
:0119BC002208
:06008600900085120AD66D
:10008C0090002EE01470030201631470030202420C
:10009C001470030202B314700302041F24046003DF
:1000AC0002059F900085120AB690001E1208CB60C4
:1000BC000302059F7868E6D3940A50260690001A2E
:1000CC00743F12092B300C0302059F900085120A15
:1000DC00B690001A1208CBFDE4FF12000ED20C02EF
:1000EC00059FE47868F6C20C900085120AB6900061
:1000FC0016E412092B900015E412092B900013E45E
:10010C0012092B900012E412092B900011E4120931
:10011C002B900010E412092B900018E412092B907C
:10012C000017E412092B90000EE4F5F0120A02906D
:10013C00000CE4F5F0120A02900019E412092B905D
:10014C00001B743F12092B90002E7401F0E49000F8
:10015C0007F0A3F002059FE5E35408FFE4FCEF6011
:10016C001CE5E354046016900085120AB690001E3C
:10017C00740112092BE490002EF002059FE5E35464
:10018C0008FFE4FCEF704A9000B1E0FEA3E0FF90A2
:10019C000085120AB6900002EE8FF0120A027D055D
:1001AC0012095FEF7802C333CE33CED8F9FF90003B
:1001BC0085120AB6900006EE8FF0120A029000B279
:1001CC00E025E0FF9000B1E03390000A8FF0120AB6
:1001DC0002E5E35404FFE4FCEF704F9000AFE0FE47
:1001EC00A3E0FF900085120AB6EE8FF01209E3909F
:1001FC0000AFE0FEA3E0FF7D0512095FEF7802C3BC
:10020C0033CE33CED8F9FF900085120AB690000495
:10021C00EE8FF0120A029000B0E025E0FF9000AFE4
:10022C00E0339000088FF0120A02900085120AB693
:10023C0090001D020594D3900008E09405900007EF
:10024C00E094005002806FE4900007F0A3F0E5E327
:10025C005408FFEF701F9000B1E0FEA3E0FF900088
:10026C0085120AB690000EEE8FF0120A029000185A
:10027C00740112092BE5E35404FFE4FCEF701F90AA
:10028C0000AFE0FEA3E0FF900085120AB690000CD0
:10029C00EE8FF0120A02900017740112092B9000D5
:1002AC002E7403F002059FD3900008E09402900096
:1002BC0007E09400500AE475F00112099502059FBD
:1002CC00E4900007F0A3F0900085120AB690000AA3
:1002DC001209ABFFAEF090000E1209ABD39FE5F004
:1002EC009E501C900085120AB69000081209ABFFB4
:1002FC00AEF090000C1209ABD39FE5F09E4011E4D8
:10030C0090002EF0900085120AB690001D0203E1B9
:10031C00900085120AB69000181208CB6401706D1B
:10032C0090000E1209ABFFAEF0D39414EE94005073
:10033C0031E5E330E31F900016740112092B900095
:10034C001A1208CBC3943F4044900085120AB69011
:10035C000018E48035900085120AB69000137401E1
:10036C008028900085120AB69000061209ABFDD3C6
:10037C00EF9DEE95F09000854008120AB6900013A0
:10038C008006120AB6900016740112092B90008593
:10039C00120AB69000171208CB6401600302059F85
:1003AC0090000C1209ABFFAEF0D39414EE940050F5
:1003BC0034E5E330E222900015740112092B900011
:1003CC001A1208CBC3943F500302059F900085126C
:1003DC000AB6900017E48035900085120AB690009A
:1003EC001274018028900085120AB690000412093C
:1003FC00ABFDD3EF9DEE95F09000854008120AB648
:10040C009000128006120AB6900015740112092B86
:10041C0002059FD3900008E09414900007E094002C
:10042C005031E475F0011209959000B1E0FEA3E0A3
:10043C00FF900085120AB690000EEE8FF0120A02A1
:10044C009000AFE0FFA3E090000CCF8FF0120A02F7
:10045C0002059FE4900007F0A3F0900085120AB605
:10046C009000181208CB640160030204FD90001781
:10047C001208CB6401707A9000061209ABFFAEF043
:10048C0090000E1209ABFDACF0C39FEC9E4018908F
:10049C000085120AB690000A1209ABFFD3ED9FEC4F
:1004AC0095F0500302059F900085120AB690000447
:1004BC001209ABFFAEF090000C1209ABFDACF0C30F
:1004CC009FEC9E4018900085120AB6900008120905
:1004DC00ABFFD3ED9FEC95F0500302059F90008588
:1004EC00120AB6900016740112092B900015020521
:1004FC0094900085120AB69000181208CB64017013
:10050C00419000061209ABFFAEF090000E1209AB41
:10051C00FDACF0C39FEC9E4015900085120AB6907E
:10052C00000A1209ABFFD3ED9FEC95F0401490003C
:10053C0085120AB6900016740112092B90002E74C5
:10054C0002F0900085120AB69000171208CB6401D5
:10055C0070419000081209ABFFAEF090000C12092C
:10056C00ABFDACF0D39FEC9E5015900085120AB6F3
:10057C009000041209ABFFC3ED9FEC95F050149062
:10058C000085120AB6900015740112092B90002EEA
:10059C007402F0900085120AB69000181208CBFF76
:1005AC006401600D9000171208CB64016003020710
:1005BC00A29000131208CBFE6401600D9000121281
:1005CC0008CB6401600302071CEFB4011E900017F6
:1005DC001208CBB40115EEB401119000131208CB24
:1005EC00B40108900014740112092B900018120821
:1005FC00CBFFB401189000171208CB7010900013A9
:10060C001208CB6401702390001404801AEF701A46
:10061C009000171208CBB401119000121208CBB441
:10062C000108900014740112092B900013E41209B4
:10063C002B900012E412092B9000141208CB6401C9
:10064C0060030207BB900085120AB690001A1208CC
:10065C00CBD39400400890001A74FE1208F8900056
:10066C00191208CBFF90001A1208CBD39F4021908F
:10067C0000B9E024C8FF9000B8E03400FEC390003D
:10068C00B5E09FEE6480F89000B4E0648098504828
:10069C00900085120AB69000191208CBFF90001A30
:1006AC001208CBD39F9000855013120AB690001AF3
:1006BC00EF12092B90001CE412092B8013120AB6BE
:1006CC0090001C740112092B90001A74021208F885
:1006DC0090002E7404F0801390002E7402F09000A1
:1006EC0085120AB690001CE412092BE4900007F066
:1006FC00A3F0900085120AB6900014E412092B9016
:10070C00001C1208CBFF90001A1208CBFD02079FA9
:10071C00900085120AB69000161208CB6401600D89
:10072C009000151208CB640160030207BB90001601
:10073C00E412092B900015E412092B90001A1208F0
:10074C00CBC3943F500E900085120AB690001A74D9
:10075C00021208F890002E7404F0900085120AB66C
:10076C0090001B1208CBFF90001A1208CBC39F40BD
:10077C0013900085120AB690001AEF12092B900004
:10078C002E7401F0900085120AB690001A1208CB54
:10079C00FDE4FF02000E90002EE0D394024010E422
:0F07AC00F0900085120AB690001E740112092BFE
:0107BB00221B
:0B2C1C009000A9120AD69000ACEDF069
:102C2700E4FE9000ACE0FD14F0ED60299000A9E40B
:102C370075F001120ABF1208B26EFEE4FFEFC394EB
:102C47000850DFEE30E007C313648CFE8004EEC348
:072C570013FE0F80E8AF0639
:012C5E002253
:081DEE00900085EFF0A3EDF079
:101DF600E4A3F0A3F078897C007D017BFF7A2E793D
:101E06001BFE7F2012088CE4900089F0A37455F025
:101E1600A374AAF0900085E0FE90008DF0900086F5
:101E2600E0FD90002DF0EE120ADF1E49011E780239
:101E36001EC7031ED4061ED4071F1D801F25810042
:101E4600001F3390008C7402F0ED700E90008E74BB
:101E560002F0E490002BF0021F33900086E064014C
:101E66006003021F3390008E04F0E490002CF00211
:101E76001F3390008C7420F07F05900086E075F08B
:101E860012A424442FF8E6FE74892FF582E4340068
:101E9600F583EEF00FEFB412E17F17EFC3940D4018
:101EA60003021F33900086E075F00DA4242A2FF854
:101EB600E6FE74892FF582E43400F583EEF00F8098
:101EC600DA90008C7402F090008E04F0805F90002F
:101ED6008C7405F090008E7401F0781CE675F005A0
:101EE600A4A3F0A37420F0900086E0FF700D90008C
:101EF60028E07002800F9000298015EFB4012E9023
:101F06000029E0700890009174FFF080209000286E
:101F1600E0900091F0801690008C7401F0800E9095
:101F2600008C7402F090002AE090008EF090008CF5
:101F3600E02404FFE433900087F0A3EFF07B017AFE
:101F4600007989FD122C1C900087E0FCA3E024890F
:101F5600F58274003CF583EFF07F01122AA790000A
:101F660086E0FF700843BD0253BDFE8016EFB40144
:101F76000843BD2053BDEF800AEFB4FF0643BD22E0
:101F860053BDEE900088E02402FF900087E0340005
:101F9600FE7B017A007989122C9A900086E0FF7008
:101FA6000753BDFD43BD0122EFB4010753BDDF4317
:0D1FB600BD1022EFB4FF0653BDDF43BD1187
:011FC30022FB
:1027EC00EF24FA605014604D24067069E4FE746D99
:1027FC002EF8E6FF90002DE075F012A424442EF87C
:10280C00A6070EEEB412E7E4FE747F2EF8E6FF90F6
:10281C00002DE075F00DA4242A2EF8A6070EEEB4B8
:10282C0008E790002DE0700690002B04F022900039
:10283C002C7401F022786DE6B4E30D900005740160
:10284C00F008E6900028F0229000067401F0786EF3
:05285C00E6900029F0E8
:012861002254
:102D5D00E4FFFE900085F0304323C243FB7A0079F7
:102D6D0069786BE62403FD122C1C7E00786BE6243B
:0D2D7D006CF8E6B50707786CE6FF1227EC4E
:012D8A002226
:1022C300011C00C139C13DC13BC13AC13C011B697D
:1022D300602A005B0BB80BEA0C1C0C800CB20CE4FC
:1022E3000D160D480D7A0DAC0E100E420E740EA68F
:0E22F3000ED80F0A0F3C0F870FD2101D106877
:10276A00E4FFEF25E0245BF582E43400F583E0FC26
:10277A00A3E0FDC39000B9E09D9000B8E09C40053D
:10278A000FEFB415DD781CE6FEEFD39E4004180661
:10279A008003781B16E5E16007E4F5E1781CA607DB
:1027AA00781BE6FED394C85006EEC3940A50077805
:1027BA001CA607187669781CE6FFD394005002D24B
:1027CA003DEFD394015002D239EFD394055002D28F
:1027DA003BEFD3940A5002D23AEFD3940F5002D26D
:0127EA003CB2
:0127EB0022CB
:102301004100C9004100CC004100C8004200C600A4
:10231100004100CA00C126C127C129C125C124C16C
:09232100284100CB00C12AC12BA8
:102862009000CBE06062E4F0D2269000C9E004F070
:10287200E0C394054004E4F0D2279000CCE004F0D9
:10288200E0C3940A4004E4F0D2299000C6E475F053
:1028920001120995C39000C7E094649000C6E094C9
:1028A200004006E4F0A3F0D2249000C8E004F0E077
:1028B200C394FA4013E4F0D2259000CAE004F0E099
:0928C20094044004E4F0D2282241
:03000B00022DB70C
:102DB700C0E0C083C082C0D074FC258CF58C7466DB
:102DC700258AF58A9000CB7401F0D0D0D082D083C9
:032DD700D0E03217
:0E2F1C00758901758CFC758A66D2A9D28C224B
:102B9400EFD39401501675FE0EEF25E02404FE7465
:102BA40003A806088002C333D8FC801475FE0FEF17
:102BB40024FE25E0FE7403A806088002C333D8FC73
:102BC400F452FFEFB4040C75FE0F53FFF075FE0EC4
:042BD40053FF0F227A
:102EC40075FE54EF5407F5FF75FE56AF058FFF7579
:062ED400FE5375FF012210
:102AF800EFD39401501875FE0EEF25E02404FE7400
:102B080003A806088002C333D8FC42FF801675FE6E
:102B18000FEF24FE25E0FE7403A806088002C333E5
:102B2800D8FC42FFEF70038DCE22EFB401038DCFA6
:102B380022EFB402038DDE22EFB40304AF058FDF6A
:012B4800226A
:032FFD00010102CD
:1026EA00022EACE493A3F8E493A34003F68001F22C
:1026FA0008DFF48029E493A3F85407240CC8C333F1
:10270A00C4540F4420C8834004F456800146F6DFBF
:10271A00E4800B010204081020408090217FE47EAF
:10272A00019360BCA3FF543F30E509541FFEE493B4
:10273A00A360010ECF54C025E060A840B8E493A37B
:10274A00FAE493A3F8E493A3C8C582C8CAC583CAA6
:10275A00F0A3C8C582C8CAC583CADFE9DEE780BE5E
:01232A0000B2
:1007BC00E709F608DFFA8046E709F208DFFA803E1F
:1007CC0088828C83E709F0A3DFFA8032E309F6080C
:1007DC00DFFA8078E309F208DFFA807088828C8374
:1007EC00E309F0A3DFFA806489828A83E0A3F60828
:1007FC00DFFA805889828A83E0A3F208DFFA804C02
:10080C0080D280FA80C680D4806980F280338010D8
:10081C0080A680EA809A80A880DA80E280CA803341
:10082C0089828A83ECFAE493A3C8C582C8CCC583B9
:10083C00CCF0A3C8C582C8CCC583CCDFE9DEE78089
:10084C000D89828A83E493A3F608DFF9ECFAA9F008
:10085C00EDFB2289828A83ECFAE0A3C8C582C8CC5E
:10086C00C583CCF0A3C8C582C8CCC583CCDFEADE77
:10087C00E880DB89828A83E493A3F208DFF980CCD9
:10088C0088F0EF60010E4E60C388F0ED2402B404D2
:10089C000050B9F582EB2402B4040050AF23234579
:0608AC00822390080C738A
:1008B200BB010689828A83E0225002E722BBFE0244
:0908C200E32289828A83E4932277
:1008CB00BB010CE58229F582E5833AF583E02250E2
:1008DB0006E92582F8E622BBFE06E92582F8E2222C
:0D08EB00E58229F582E5833AF583E4932246
:1008F800BB010FF8E58229F582E5833AF583E02804
:10090800F0225009C58229F8E58226F622BBFE09A5
:10091800C58229F8E22582F222F8EA2583F583E9DF
:03092800932822EF
:10092B00F8BB010DE58229F582E5833AF583E8F002
:10093B00225006E92582C8F622BBFE05E92582C8AE
:02094B00F22296
:10094D00EF8DF0A4A8F0CF8CF0A428CE8DF0A42EBE
:02095D00FE2278
:10095F00C2D5EC30E709B2D5E4C39DFDE49CFCEEB3
:10096F0030E715B2D5E4C39FFFE49EFE120B44C3DC
:10097F00E49DFDE49CFC8003120B4430D507C3E4D7
:06098F009FFFE49EFE2222
:10099500C5F0F8A3E028F0C5F0F8E58215827002ED
:0609A5001583E038F0228A
:1009AB00BB0110E58229F582E5833AF583E0F5F08A
:1009BB00A3E0225009E92582F886F008E622BBFE67
:1009CB000AE92582F8E2F5F008E222E5832AF583AD
:0809DB00E993F5F0A3E9932272
:1009E300BB010A89828A83F0E5F0A3F0225006F75F
:0F09F30009A7F01922BBFE06F3E5F009F319225C
:100A0200F8BB0111E58229F582E5833AF583E8F026
:100A1200E5F0A3F0225009E92582C8F608A6F022E3
:0D0A2200BBFE09E92582C8F2E5F008F222CA
:100A2F00E88FF0A4CC8BF0A42CFCE98EF0A42CFC66
:100A3F008AF0EDA42CFCEA8EF0A4CDA8F08BF0A4E4
:100A4F002DCC3825F0FDE98FF0A42CCD35F0FCEB43
:100A5F008EF0A4FEA9F0EB8FF0A4CFC5F02ECD3908
:0F0A6F00FEE43CFCEAA42DCE35F0FDE43CFC2275
:102BD800C2D5E830E70FB2D5E4C39BFBE49AFAE428
:102BE80099F9E498F8EC30E717B2D5122C0E120BCD
:102BF800D5E4C39BFBE49AFAE499F9E498F88003D6
:102C0800120BD530D50DE4C39FFFE49EFEE49DFD75
:042C1800E49CFC221A
:100A7E00EB9FF5F0EA9E42F0E99D42F0E89C45F0CE
:010A8E002245
:100A8F00E8600FECC313FCED13FDEE13FEEF13FF45
:030A9F00D8F12269
:100AA200E86010ECA2E713FCED13FDEE13FEEF136A
:040AB200FFD8F02257
:090AB600E0FBA3E0FAA3E0F92241
:100ABF00F8E0FBA3A3E0F925F0F0E58215827002C0
:070ACF001583E0FA38F02264
:090AD600EBF0A3EAF0A3E9F02221
:100ADF00D083D082F8E4937012740193700DA3A3A6
:100AEF0093F8740193F5828883E4737402936860BA
:060AFF00EFA3A3A380DFBA
:100B0500EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02D7D
:100B1500FDE43CFCE8A42EC8C5F03DFDE43CFCEF3B
:0D0B2500A4FFE5F028FEE43DFDE43CFC22C9
:1013A700E5082489F582E43400F583E005082290F6
:1013B7000086301A03900089E475F001120ABF0213
:1013C70008B22013E97F2ED2138018EF540F249010
:1013D700D43440D4FF30170BEF24BFB41A005003A6
:1013E7002461FFE50960021509050CE50C7002058B
:1013F7000B301A0E900086E475F001120ABFEF0257
:101407000B32022F0E7403D21A8003E4C21AF508B6
:10141700900086120AD6E4F509F50BF50CE509608C
:10142700077F201213EA80F5750AFFC214C213C2A0
:1014370015C216C218C219C21B1213B6FF700D309F
:101447001A057F001213FBAF0CAE0B22B4255FC247
:10145700D5C2171213B6FF24D0B40A00501A75F07C
:101467000A780930D50508B6FF0106C6A426F62076
:10147700D5047002D21680D924CFB41A00EF5004D5
:10148700C2E5D2170215FCD21480C6D21380C0D28F
:101497001580BCD2D580BAD21880B47F201213EA47
:1014A7002015077401B5090040F11213A7FF1213A5
:1014B700EA021424D21BD21980951213A7FB121328
:1014C700A7FA1213A7F94A4B700679CD7A167BFF54
:1014D70020152EE509602A7E008E8275830012088A
:1014E700CB60060EEE650A70F0C2D5EBC0E0EAC02D
:1014F700E0E9C0E0EE121643D0E0F9D0E0FAD0E020
:10150700FB1208B2FF60AAEBC0E0EAC0E0E9C0E066
:101517001213EAD0E02401F9D0E03400FAD0E0FB5E
:10152700E50A0460DCD50AD980877BFF7A16793F04
:10153700D215809C791080027908C219C21B8008D5
:10154700D2D5790A8004790AC2D5E50A047002F572
:101557000AE4FAFDFEFF1213A7FC7B0820141312FE
:1015670013A7FD7B1030130A1213A7FE1213A7FF50
:101577007B20EC3382D592D55013C3E43013069FFA
:10158700FFE49EFEE42014039DFDE49CFCE4CBF8FD
:10159700C214EC700CCFCECDCCE824F8F870F380F1
:1015A70017C3EF33FFEE33FEED33FDEC33FCEB33C4
:1015B700FB994002FB0FD8E9EB301405F8D0E0C4E3
:1015C70048B214C0E00AEC4D4E4F78207B0070C241
:1015D700EAB50A0040BCC0E0121645D0F0D0E020C2
:1015E7001404C4C0E0C4B214C0F01213D3D0F0D5B1
:1015F700F0EB021424120ADF14C153153B5814925E
:101607004C148E42153F4F15474415474914A743BD
:08161700154D55153146153142
:10161F004515314716ED5014962D149A2E14BD2BE7
:10162F00149E2314BB2016D62A145648000014B556
:10163F003F3F3F00790AA2D5201614301809B91080
:10164F00020404B9080104A2D52019025001042094
:10165F0015689215B509005034C0E07F2030161977
:10166F007F30A21572197218500F12169CC215C234
:10167F0019C218C21B7F30800F301803E9C0E01267
:10168F0013EA301803D0E0F9D0E0B509CC301817C1
:10169F007F30B9100C1213EA7F583017077F78800C
:1016AF0003B908031213EA3015057F2D0213EA7FE1
:1016BF0020201BF87F2B2019F322921580CF286E44
:1016CF00756C6C2900D2141213A73014F8C2147859
:1016DF000930D50108F60214562D504349581213FC
:1016EF00A72403B405004001E49016E8931213DB1E
:0D16FF00743A1213DBD21675090402153B74
:100B3200BB010689828A83F0225002F722BBFE01A2
:020B4200F3229C
:100B4400BC000BBE0029EF8DF084FFADF022E4CC95
:100B5400F875F008EF2FFFEE33FEEC33FCEE9DEC5E
:100B6400984005FCEE9DFE0FD5F0E9E4CEFD22EDA4
:100B7400F8F5F0EE8420D21CFEADF075F008EF2FEE
:100B8400FFED33FD4007985006D5F0F222C398FDDF
:050B94000FD5F0EA227C
:100B990075F008758200EF2FFFEE33FECD33CDCC13
:100BA90033CCC58233C5829BED9AEC99E582984096
:100BB9000CF582EE9BFEED9AFDEC99FC0FD5F0D673
:100BC900E4CEFBE4CDFAE4CCF9A88222B800C1B99D
:100BD9000059BA002DEC8BF084CFCECDFCE5F0CBDB
:100BE900F97818EF2FFFEE33FEED33FDEC33FCEB14
:100BF90033FB10D703994004EB99FB0FD8E5E4F9CF
:100C0900FA227818EF2FFFEE33FEED33FDEC33FCBB
:100C1900C933C910D7059BE99A4007EC9BFCE99AAF
:100C2900F90FD8E0E4C9FAE4CCFB2275F010EF2FF4
:100C3900FFEE33FEED33FDCC33CCC833C810D707F4
:100C49009BEC9AE899400AED9BFDEC9AFCE899F82F
:0E0C59000FD5F0DAE4CDFBE4CCFAE4C8F922C2
:00000001FF

Binary file not shown.

View File

@ -0,0 +1,809 @@
:03000000022517BF
:10251700758E3075D20078FFE4F6D8FD9000007F05
:10252700007E01E4F0A3DFFCDEFA758188022572E4
:102D4B0053797374656D20496E69742E5665723AAA
:0C2D5B002532782532782532780D0A00E8
:102C7E0012289D7BFF7A2D794B900089E4F0A304F6
:102C8E00F0A3E4F0A304F0A3E4F0A37402F0121492
:0D2C9E000DD2AED2BE1226AF122BF080F484
:1029960075FE0F43FF8075FE2975FFB575A5217578
:1029A600FE1E43FF01E5A3540F24F8780DF6E5A3B8
:1029B600C4540F7814F6E5AD540F24F875F00AA444
:1029C6007810F67812A6ABE5ADC4540F24F875F06E
:0B29D6000AA418F67813A6ACD2BD22AC
:1019B800900085EFF0204403021BD29000B6E0FEB1
:1019C800A3E07803CEC313CE13D8F9F0EE9000B697
:1019D800F09000B3E024FD6048147003021A9D14CF
:1019E8007003021B1124FE7003021B81240560038F
:1019F800021BCF780DE6FF3395E0FEC39000B7E0F9
:101A08009FFF9000B6E09EFE9000BAF0A3EFF0C3EF
:101A1800EE648094804003021BCFE49000BA021B5E
:101A2800CC9000B6E0FEA3E0FF7C097DC4120B0554
:101A3800780A120A8F9000B6EEF0A3EFF07810E65D
:101A4800FD3395E0FCC3EF9DFFEE9CFE3395E0FD72
:101A5800FCE47B64FAF9F8120A2FC006C007781272
:101A6800E675F002A424F4FFE5F03401AB07FA337D
:101A780095E0F9F8D007D006122A259000AFEEF0CD
:101A8800A3EFF0C3EE648094804003021BCFE49080
:101A980000AF021BCC9000B6E0FEA3E0FF7C097DFE
:101AA800C4120B05780A120A8F9000B6EEF0A3EF65
:101AB800F07811E6FD3395E0FCC3EF9DFFEE9CFE48
:101AC8003395E0FDFCE47B64FAF9F8120A2FC006AE
:101AD800C0077813E675F002A424F4FFE5F034019A
:101AE800AB07FA3395E0F9F8D007D006122A25900B
:101AF80000B1EEF0A3EFF0C3EE64809480400302DF
:101B08001BCFE49000B1021BCC9000B6E0FEA3E02E
:101B1800FF7C097DC4120B05780A120A8F9000B663
:101B2800EEF0A3EFF0E025E0FE9000B6E033900081
:101B3800B8F0A3CEF09000B8E0FEA3E07802C3337B
:101B4800CE33CED8F9FDAC067814E6FF3395E0FE27
:101B5800EF24F8FFEE34FFFE12094D7C037DE812F6
:101B6800095F9000B8EE8FF0120995C39000B8E0B5
:101B7800648094805051E4804B780DE6FF3395E003
:101B8800FEC39000B7E09FFF9000B6E09EFEE4FC25
:101B9800FD7BC47A09F9F8120A2F780A120AA29072
:101BA80000B6EEF0A3EFF0E025E0FF9000B6E033DA
:101BB800FE9000B4F0A3EFF0C3EE64809480500769
:101BC800E49000B4F0A3F0C24422900085E09000B5
:101BD800B3F0C454F04401F5A5E49000B6F0A3F0C6
:051BE8009000BDF02299
:03006B0002271851
:10271800C0E0C0F0C083C082C0D075D000C000C087
:1027280006C007E5F330E038AFA1780E760008A6BA
:1027380007E5A254031846F608E6F69000BDE0C384
:102748009408501718E6FE08E6FF9000B6EE8FF0E2
:102758001209959000BDE004F08005D24453A5FE0F
:1027680075F301D007D006D000D0D0D082D083D066
:04277800F0D0E0328B
:102B240075FE8743FF207815760375FE7043FF1802
:102B340053B3F143B302E47817F67819F67815E63F
:102B44007818F6781A76017917E718461846F5B119
:042B540075B2012233
:10217900E4FE9000BAE0FCA3E0FDC394E8EC94030C
:1021890040037F0022EF7003022292D3ED940FECFB
:1021990094034003022270ED94CBEC9400500302A7
:1021A9002270D3ED94AAEC94024022D2207815E64D
:1021B900FF137818F6302111D3ED94BFEC94024047
:1021C90004C22180047818A607E4FE8070D3ED9438
:1021D900AAEC94025043ED9437EC9401403BD22190
:1021E9007815E6FF7818F6302013D3ED9493EC9424
:1021F900025004C2208006EFC3137818F6781A76C5
:1022090001301B11D3ED9451EC94015004C21B8091
:1022190004E4781AF6E4FE8024D3ED9437EC9401B3
:10222900501BD21BE4781AF6302110ED9426EC9459
:10223900015004C2218004781A7601E4FE301E118F
:10224900C3ED94F3EC94025006C21EE4FE80027EB4
:1022590001301F2FD3ED94DDEC94004006C21FE43A
:10226900FE80207E01801CD3ED940FEC9403400680
:10227900D21E7E01800DD3ED94CBEC94005004D294
:102289001F7E01C21CC21D8058C21EC21FD3ED94FD
:102299009FEC94035031ED9471EC94004029301C6B
:1022A90010ED9484EC94035006C21CE4FE80027E77
:1022B90001301D2DD3ED9482EC94004006C21DE43B
:1022C900FE801E7E01801AD3ED949FEC9403400496
:1022D900D21C800BC3ED9471EC94005002D21D7E88
:0822E90001781AE6F5B2AF0618
:0122F10022CA
:1022F200E4FBFAE5E65480FFE4FCFDFEEF700753D1
:10230200B3FE7816F62278167601E5E830E5057513
:10231200E8208005E5E530E10453B3FE22E5F23022
:10232200E50475F22022E5F2540C601353B3FEE586
:10233200F354C070030223CC75F20C75F3C02275FE
:10234200F3C07F01122179EF600653B3FED222223D
:10235200C222E5F230E432781AE6B401067A107B42
:102362006880047A0F7BA0EB246AFFEA34FFFEC385
:102372009000B9E09F9000B8E09E500575F2108081
:102382000353B3FE78167603227917E778194618B5
:1023920046F5B1781AE6F5B243B311781CE6FFD3DD
:1023A20094014002C23DEFD394034002C239EFD3FD
:1023B20094074002C23BEFD3940C4002C23AEFD3DF
:0A23C20094114002C23C7816760226
:0123CC0022EE
:10000E00303F10EFB4010475B5C02253B5BFED44B7
:04001E0080F5B52292
:102DC500E5B55480FFEF6008303F05E4F5B5C23F37
:012DD50022DB
:10283F00C23FE5E520E156E5E230E703D24022E56D
:10284F00E830E00D30244675E8017D3FE4FF0200DB
:10285F000EE4FF122179EF6006122DC5D23E22C27F
:10286F003E303D03022DC5D23F3040217816E6B4ED
:10287F00021BC39000B9E094109000B8E0648094FC
:0E288F008E4005D23FC24022122DC5C23F220C
:102C2200E5E25408FF9000D1E06F6021E5E230E375
:102C3200089000D07401F08005E49000D0F0D245F5
:0D2C4200C20FD22FD2319000D1EFF0D24757
:012C4F002262
:101FBE00E5E25402FFE4FCFDFEEF70319000C775C0
:101FCE00F0011209959000C7E0FEA3E0FFC394173D
:101FDE00EE94024004D237800EC3EF9487EE940045
:101FEE004005203602D236D233C2348040303336EA
:101FFE00D247E4781DF6C233D2349000C9F0900077
:10200E00C7E0FEA3E0FFD3941EEE94005008D23238
:10201E00D235D231800EC3EF944FEE94015005307D
:10202E003602D238C236E49000C7F0A3F0303462E4
:10203E00303F5F303827200F0280287F031228F4AC
:10204E009000C9E0D394235003022165C238781D55
:10205E007602E49000C6F090002BF0A3F030372902
:10206E00200F0A7D3FE4FF12000ED20F227F0312D3
:10207E0028F49000C9E0D394235003022165C2379F
:10208E00E49000CAF0781D7603303502C235C234B2
:10209E00C20F9000D0E064016003022178781DE643
:1020AE006402600302213A9000C6E0C3940150100E
:1020BE00E4FD7F01121DE8E490002BF0A3F08054A4
:1020CE009000C5E0D394054003E4803990002CE0E5
:1020DE00B4010FE4FD7F02121DE890002C7402F093
:1020EE00803290002CE06402702A90002BE0601D7C
:1020FE007D017F02121DE8E490002BF0A3F090000A
:10210E00C6F09000C5F0781DF6D2108058E4FD7F21
:10211E0001121DE89000C6E0D39414400A9000C549
:10212E00E004F0E4A3F0229000C6802B781DE66454
:10213E000370379000CAE0FFC394B4501EEF540FE3
:10214E0070047D0180099000CAE054077006FD7F7F
:10215E0003121DE89000CAE004F022E4781DF6D2C6
:0A216E00109000CAF07F041228F45C
:012178002244
:102BBE0075FE0675FF3C75FE0E53FF0F75FE0F5327
:102BCE00FFF075FE0375FFAAE4900031F09000301F
:102BDE00F0900032F090002FF0C282C283C285C204
:022BEE0084223F
:102D6700EF14600D14600D14600D2403700BD282F4
:0A2D770022D28322D28422D28522C8
:052D0E00900085E0FFCC
:102D1300EF14600D14600D14600D2403700BC28258
:0A2D230022C28322C28422C285224C
:1027DF00E4FF74332FF582E43400F583E4F07437AB
:1027EF002FF582E43400F583E4F0EF25E0243BF588
:1027FF0082E43400F583E4F0A3F0EF25E02443F501
:10280F0082E43400F583E4F0A3F0EF25E0244BF5E8
:10281F0082E43400F583E4F0A3F0EF25E02453F5D0
:0F282F0082E43400F583E4F0A3F00FEFB404A3C8
:01283E002277
:10277C00AC0774332CF582E43400F583EDF0EAC336
:10278C0013FEEB13FFEC25E0243BF582E43400F55B
:10279C0083EEF0A3EFF0AF03EC25E02443F582E4E5
:1027AC003400F583EAF0A3EFF090008AE0FEA3E09A
:1027BC00FFEC25E0244BF582E43400F583EEF0A326
:1027CC00EFF0EC25E02453F582E43400F583E4F0DB
:0327DC00A3F02245
:102AE90074332FF582E43400F583EDF074372FF554
:102AF90082E43400F583EBF0EF25E0243BF582E432
:102B09003400F583E4F0A37469F0EF25E02453F56C
:0B2B190082E43400F583E4F0A3F02216
:10103500E4900085F0F0900085E0FFC39404400340
:1010450002137774332FF582E43400F583E06022D0
:1010550024FE602414700302113F1470030211B6BC
:1010650024036003021313900085E0FF122D67022D
:101075001313122D0E021313900085E0FF25E024B3
:101085003BF582E43400F583E0FCA3E0FDEF25E0C9
:101095002453F582E43400F583E0FEA3E0C39DEE1E
:1010A5009C5005122D678003122D0E900085E0FFE0
:1010B50025E02443F582E43400F583E0FCA3E0FD5C
:1010C500EF25E02453F582E43400F583E0FEA3E048
:1010D500C39DEE9C5003021313900085E025E02488
:1010E50053F582E43400F583E4F0A3F0EF25E02422
:1010F5004BF582E43400F583E0FEA3E0D39400EEE3
:1011050094004016900085E025E0244BF582E434F8
:1011150000F58374FFF5F0120995900085E0FF2531
:10112500E0244BF582E43400F583E0FCA3E04C6059
:101135000302131374332F0211D2900085E0FF25AB
:10114500E0243BF582E43400F583E0FCA3E0FDEF09
:1011550025E02453F582E43400F583E0FEA3E0D3D3
:101165009DEE9C5005122D678003122D0E90008573
:10117500E0FF25E02443F582E43400F583E0FCA399
:10118500E0FDEF25E02453F582E43400F583E0FE2D
:10119500A3E0C39DEE9C5003021313900085E02548
:1011A500E02453F582E43400F583E4F0A3F0021360
:1011B50013900085E0FF2437F582E43400F583E0E1
:1011C50070171229E1C246900085E02433F582E4C8
:1011D5003400F583E4F0021313900085E0FF243713
:1011E500F582E43400F583E0FE6402704B2046147A
:1011F500D246EF25E0243BF582E43400F583E4F0A4
:10120500A37469F0900085E0FF25E0243BF582E4B6
:101215003400F583E475F001120995EF25E0243BD0
:10122500F582E43400F583E0FCA3E0C394FEEC947E
:101235000050030212FD804EEE6401705A204617DD
:10124500D246900085E025E0243BF582E43400F5A4
:1012550083E4F0A374FEF0900085E0FF25E0243BD5
:10126500F582E43400F58374FFF5F0120995EF2556
:10127500E0243BF582E43400F583E0FEA3E0D3945B
:1012850069EE94005072900085E02437F582E434CD
:1012950000F583E4F08061900085E0FF2437F58256
:1012A500E43400F583E06403704EEF25E0243BF55C
:1012B50082E43400F583E0FEA3E0FFC394FEEE94E0
:1012C500004004D246800BD3EF946AEE940050029E
:1012D500C246900085E025E0243B30460DF582E4CA
:1012E5003400F58374FFF5F0800BF582E43400F5E6
:1012F50083E475F001120995900085E0FF25E0244F
:101305003BF582E43400F583A3E0FD122945900006
:1013150085E0FF701174332FF582E43400F583E026
:10132500900031F08043900085E0B401102433F53E
:1013350082E43400F583E0900030F0802C90008545
:10134500E0B402102433F582E43400F583E0900024
:1013550032F08015900085E0B4030E2433F582E465
:101365003400F583E090002FF0900085E004F00252
:10137500103BE4900085F0900085E0FFC394045095
:101385001BEF25E02453F582E43400F583E475F082
:0C13950001120995900085E004F080DB57
:0113A1002229
:102B580075FE1E43FF0275FE2143FF0875D4867576
:102B6800FE2143FF0475FE2143FF02300E0875FE67
:102B78002453FFC3800675FE2443FF3C9000D6749F
:032B88000FF02229
:10005600D2AC759A01D2B9D2BDD2A9D2AB75FE295E
:0400660043FFB02282
:10006E00C2ACE4F59AD2B9C2BDC2A9C2AB75FE2923
:04007E0053FF4F22BB
:092E0C0012006E43870202005619
:102DB100E5E25401FFEF7006201103304704C247DA
:042DC100C322D32234
:10289D0075FE01E4F5FF122D81122DFF122DE4E4DA
:1028AD00F58675B7C375FE6A75FF0475FE6C43FF3B
:1028BD000B12299675FE8043FF0275FE0E53FFFC29
:1028CD0043FF0175FE1775FF3CD2A8D2AF122B2422
:1028DD007D697F03122D9B122BBE1227DF122B5801
:0728ED009000CD7401F02200
:03000300020006F2
:03000600D24732AC
:03004B00022E1D65
:062E1D0075EB3CD24732C8
:03005300022E2357
:062E230075F302D24732F4
:0E2DD6009000AEEFF0122E159000AEE0FF223E
:082E15002041FDD2418F9922FA
:102D810075FE0E53FFF343FF04D2DF43878075BA0C
:0A2D91000375AAFD759852D2AC221A
:03002300022DF2B9
:0D2DF200309904C299C241309802C2983253
:0D2DFF0075BB03759DDC759B92439A012204
:062B8B009000A9120AD619
:102B9100E49000ACF0F09000ACE0C39FE49E501CC8
:102BA1002042FDD2429000A9E475F001120ABF1241
:0C2BB10008B2F59C9000ACE004F080DA63
:012BBD0022F5
:030083000223CD88
:1023CD00C0E0C083C082C0D075D000C000C005C0C1
:1023DD0006C007E59B30E105539BFDC242E59B30EE
:1023ED00E076539BFED2479000D2E0146019146042
:1023FD003424027063E59C9000D2B455087401F04A
:10240D00A3E4F0800E8018E59C9000D2B4AA10745D
:10241D0002F0A3E0FF04F074692FF8A69C8039E464
:10242D00F0A3F080339000D3E0FF04F074692FF82F
:10243D00A69C786BE62404FFE433FEE0FDC39FEE1B
:10244D006480F87480985005ED9420400B9000D373
:10245D00E4F09000D2F0D243D007D006D005D000E2
:09246D00D0D0D082D083D0E0323F
:10247600536C65657020537461746520286C696EB1
:10248600653A2564290D0A004348475F5354413A8B
:1024960025642C53545F564F583A307825782C5380
:1024A6005441303A307825782C535441313A3078BB
:1024B60025782C535441323A307825782C535441A0
:1024C600333A307825782C535441343A307825788D
:1024D6002E4465635F536C6565703A25640D0A008A
:1024E6004465636E745F536C65657044656C6179B1
:1024F6002052656C6F61642E0D0A00456E7465721C
:10250600205374616E646279204D6F6465210D0AF3
:0125160000C4
:062AAC004300CD0402020C
:102CCE009000BCE0FF04F01219B89000BCE0B4060E
:102CDE000204F09000BCE0C3940840037402F0229A
:102D2D00122C22121FBE122C50302311C22312223C
:0E2D3D00F212283F1225B7120C671217072258
:101BED00E4900085F09000CDE0FFA3E0FE6F606B08
:101BFD00A3EEF09000CDE0A3F024FE60351460421A
:101C0D0014604624036003021DE790008AE4F0A3EC
:101C1D007403F07B647A007D02E4FF12277C900050
:101C2D008AE4F0A37403F07B647A007D027F0102E5
:101C3D00277C200E03021DE7D24575E80CC20DC2AC
:101C4D000E229000D6740FF0227BFF7A24797690C5
:101C5D000089E4F0A374D9F0021D6E9000CEE0244B
:101C6D00FE6035146076147003021D812403600339
:101C7D00021DE79000CBE004F0E0C394085003028E
:101C8D001DE79000CD7402F0E49000CBF0781CE6D7
:101C9D006003021DE7021D7AE5F6700CE5F8700889
:101CAD00E5FA7004E5E1602D9000CD7403F0E5F6E2
:101CBD00540FFFE4FCFDFE7B08FAF9F8C3120A7E0F
:101CCD0070069000CD7404F075E11F75F60F75F870
:101CDD00FC75FABC229000CD7403F022202703027C
:101CED001DE7C22775FE6E900085E5FFF07BFF7A3C
:101CFD0024798E7816E6FF900089E4F0A3EFF0903A
:101D0D000085E0FF90008BE4F0A3EFF0AFE2A3E4D9
:101D1D00F0A3EFF0AFE3A3E4F0A3EFF0AFE4A3E49F
:101D2D00F0A3EFF0AFE5A3E4F0A3EFF0AFE6A3E48B
:101D3D00F0A3EFF09000D6E0FF900097E4F0A3EF52
:101D4D00F012140D9000D6E0D394004017E014F07B
:101D5D00204703021DE7C247740FF07BFF7A2479F9
:101D6D00E602140D7BFF7A25790112140D9000CD3A
:101D7D007404F022122DB1505B122B587F041228DF
:101D8D00F4122DC5E490008AF0A3F0FBFAFDFF12CA
:101D9D00277CE490008AF0A3F0FBFAFD7F01122767
:101DAD007CE490008AF0A3F0FBFAFD7F0212277C01
:101DBD00E490008AF0A3F0FBFAFD7F0312277C90DC
:101DCD0000317402F0900030F0900032F090002F4E
:0A1DDD00F0022E0C9000CD7402F00D
:011DE70022D9
:102BF000302626C2269000CCE0FF04F0EF14600CD3
:102C000014600E24027012122CCE800D122D2D8015
:102C100008121BEDE49000CCF0302805C2281210F9
:022C200035225B
:102CEE0000000000000000000000000000000000D6
:102CFE0000000000000000000000000000000000C6
:032AB200016800B8
:1028F400EF24FE601E14602814602F24FE6035242B
:1029040005703D43BD8853BDBB75FE6F53FFF24355
:10291400FF092243BDCC75FE6F53FFFE43FF0C221B
:1029240053BD7753B7CF43B7302253B7CF43B70321
:1029340053BD772253B7CC53BD7775FE6A43FF303E
:012944002270
:10170700203F0302197F304559200F0A7D3FE4FF30
:1017170012000ED20F227F031228F4E4900003F088
:10172700900001F0A3F0C200C201D20B9000D0E0FC
:101737007020C230D202D203C205C208C204C20955
:10174700C20AD211C248900026F0A3F090002EF0F2
:101757008008C202C203D205C206C20FC20DC20E62
:10176700C245900001E0C39405500302191F300BD6
:1017770005C20B0218F320002ED200E5E354A06047
:1017870021E5E354A0FFE4FCFDFE7BA0FAF9F8C3D2
:10179700120A7E90002A70057402F0800A7401F024
:1017A7008005E490002AF020050302183790000214
:1017B700E0C3940550077F061228F4802620013ADB
:1017C700900003E0FFD39414501EEF54037003FD01
:1017D7008009900003E020E0077D017F06121DE8E5
:1017E700900003E004F080487F041228F4E490009E
:1017F70003F0D201D210C2118036781DE670313065
:101807001004C2108022E5E354A0FBE4FAF9F89033
:101817000000E0FFE4FCFDFEC3120A7E6012E5E370
:1018270054A06004D230D231E5E354A0900000F018
:1018370020020302197C30483F200F237D3FE4FF3D
:1018470012000ED20FD211E4900026F0A3F0900000
:101857002EF0900001F0C208D20BC200D204227F02
:10186700031228F4C20FD203900001E0D39403506F
:101877000302191FC248804D20044A900002E0FF6E
:10188700D39414501BEF54037003FD80099000029A
:10189700E020E0077D017F81121DE890000280783B
:1018A700900003E0FFD39414501BEF54037003FD23
:1018B7008009900003E020E0077D017F07121DE803
:1018C7009000038053E5E8540C6026200E1E90001C
:1018D70003E004F0E0C3940550030219B7E4F07580
:1018E700E80C7F031228F4D20DC211227F040228CC
:1018F700F4C20DC20E3003097F031228F4C203801D
:101907007420083DE5E354AC64AC600330392190A2
:101917000001E0D394285004E004F022D208E490B8
:101927000004F0900001F0C2097F041228F48045FA
:10193700900027E0703F7B017A00790912008680CA
:1019470034900004E0FFD39414501EEF5403700347
:10195700FD8009900004E020E0077D017F80121DD3
:10196700E8900004E004F0800C200909D2097F0404
:101977001228F4C211C2072220070BD2077F0412D4
:1019870028F4C2118022E5E354A0FBE4FAF9F890A9
:101997000000E0FFE4FCFDFEC3120A7E6012E5E3EF
:1019A70054A06004D230D231E5E354A0900000F097
:0119B700220D
:06008600900085120AD66D
:10008C0090002EE01470030201631470030202420C
:10009C001470030202B314700302041F24046003DF
:1000AC0002059F900085120AB690001E1208CB60C4
:1000BC000302059F7868E6D3940A50260690001A2E
:1000CC00743F12092B300C0302059F900085120A15
:1000DC00B690001A1208CBFDE4FF12000ED20C02EF
:1000EC00059FE47868F6C20C900085120AB6900061
:1000FC0016E412092B900015E412092B900013E45E
:10010C0012092B900012E412092B900011E4120931
:10011C002B900010E412092B900018E412092B907C
:10012C000017E412092B90000EE4F5F0120A02906D
:10013C00000CE4F5F0120A02900019E412092B905D
:10014C00001B743F12092B90002E7401F0E49000F8
:10015C0007F0A3F002059FE5E35408FFE4FCEF6011
:10016C001CE5E354046016900085120AB690001E3C
:10017C00740112092BE490002EF002059FE5E35464
:10018C0008FFE4FCEF704A9000B1E0FEA3E0FF90A2
:10019C000085120AB6900002EE8FF0120A027D055D
:1001AC0012095FEF7802C333CE33CED8F9FF90003B
:1001BC0085120AB6900006EE8FF0120A029000B279
:1001CC00E025E0FF9000B1E03390000A8FF0120AB6
:1001DC0002E5E35404FFE4FCEF704F9000AFE0FE47
:1001EC00A3E0FF900085120AB6EE8FF01209E3909F
:1001FC0000AFE0FEA3E0FF7D0512095FEF7802C3BC
:10020C0033CE33CED8F9FF900085120AB690000495
:10021C00EE8FF0120A029000B0E025E0FF9000AFE4
:10022C00E0339000088FF0120A02900085120AB693
:10023C0090001D020594D3900008E09405900007EF
:10024C00E094005002806FE4900007F0A3F0E5E327
:10025C005408FFEF701F9000B1E0FEA3E0FF900088
:10026C0085120AB690000EEE8FF0120A029000185A
:10027C00740112092BE5E35404FFE4FCEF701F90AA
:10028C0000AFE0FEA3E0FF900085120AB690000CD0
:10029C00EE8FF0120A02900017740112092B9000D5
:1002AC002E7403F002059FD3900008E09402900096
:1002BC0007E09400500AE475F00112099502059FBD
:1002CC00E4900007F0A3F0900085120AB690000AA3
:1002DC001209ABFFAEF090000E1209ABD39FE5F004
:1002EC009E501C900085120AB69000081209ABFFB4
:1002FC00AEF090000C1209ABD39FE5F09E4011E4D8
:10030C0090002EF0900085120AB690001D0203E1B9
:10031C00900085120AB69000181208CB6401706D1B
:10032C0090000E1209ABFFAEF0D39414EE94005073
:10033C0031E5E330E31F900016740112092B900095
:10034C001A1208CBC3943F4044900085120AB69011
:10035C000018E48035900085120AB69000137401E1
:10036C008028900085120AB69000061209ABFDD3C6
:10037C00EF9DEE95F09000854008120AB6900013A0
:10038C008006120AB6900016740112092B90008593
:10039C00120AB69000171208CB6401600302059F85
:1003AC0090000C1209ABFFAEF0D39414EE940050F5
:1003BC0034E5E330E222900015740112092B900011
:1003CC001A1208CBC3943F500302059F900085126C
:1003DC000AB6900017E48035900085120AB690009A
:1003EC001274018028900085120AB690000412093C
:1003FC00ABFDD3EF9DEE95F09000854008120AB648
:10040C009000128006120AB6900015740112092B86
:10041C0002059FD3900008E09414900007E094002C
:10042C005031E475F0011209959000B1E0FEA3E0A3
:10043C00FF900085120AB690000EEE8FF0120A02A1
:10044C009000AFE0FFA3E090000CCF8FF0120A02F7
:10045C0002059FE4900007F0A3F0900085120AB605
:10046C009000181208CB640160030204FD90001781
:10047C001208CB6401707A9000061209ABFFAEF043
:10048C0090000E1209ABFDACF0C39FEC9E4018908F
:10049C000085120AB690000A1209ABFFD3ED9FEC4F
:1004AC0095F0500302059F900085120AB690000447
:1004BC001209ABFFAEF090000C1209ABFDACF0C30F
:1004CC009FEC9E4018900085120AB6900008120905
:1004DC00ABFFD3ED9FEC95F0500302059F90008588
:1004EC00120AB6900016740112092B900015020521
:1004FC0094900085120AB69000181208CB64017013
:10050C00419000061209ABFFAEF090000E1209AB41
:10051C00FDACF0C39FEC9E4015900085120AB6907E
:10052C00000A1209ABFFD3ED9FEC95F0401490003C
:10053C0085120AB6900016740112092B90002E74C5
:10054C0002F0900085120AB69000171208CB6401D5
:10055C0070419000081209ABFFAEF090000C12092C
:10056C00ABFDACF0D39FEC9E5015900085120AB6F3
:10057C009000041209ABFFC3ED9FEC95F050149062
:10058C000085120AB6900015740112092B90002EEA
:10059C007402F0900085120AB69000181208CBFF76
:1005AC006401600D9000171208CB64016003020710
:1005BC00A29000131208CBFE6401600D9000121281
:1005CC0008CB6401600302071CEFB4011E900017F6
:1005DC001208CBB40115EEB401119000131208CB24
:1005EC00B40108900014740112092B900018120821
:1005FC00CBFFB401189000171208CB7010900013A9
:10060C001208CB6401702390001404801AEF701A46
:10061C009000171208CBB401119000121208CBB441
:10062C000108900014740112092B900013E41209B4
:10063C002B900012E412092B9000141208CB6401C9
:10064C0060030207BB900085120AB690001A1208CC
:10065C00CBD39400400890001A74FE1208F8900056
:10066C00191208CBFF90001A1208CBD39F4021908F
:10067C0000B9E024C8FF9000B8E03400FEC390003D
:10068C00B5E09FEE6480F89000B4E0648098504828
:10069C00900085120AB69000191208CBFF90001A30
:1006AC001208CBD39F9000855013120AB690001AF3
:1006BC00EF12092B90001CE412092B8013120AB6BE
:1006CC0090001C740112092B90001A74021208F885
:1006DC0090002E7404F0801390002E7402F09000A1
:1006EC0085120AB690001CE412092BE4900007F066
:1006FC00A3F0900085120AB6900014E412092B9016
:10070C00001C1208CBFF90001A1208CBFD02079FA9
:10071C00900085120AB69000161208CB6401600D89
:10072C009000151208CB640160030207BB90001601
:10073C00E412092B900015E412092B90001A1208F0
:10074C00CBC3943F500E900085120AB690001A74D9
:10075C00021208F890002E7404F0900085120AB66C
:10076C0090001B1208CBFF90001A1208CBC39F40BD
:10077C0013900085120AB690001AEF12092B900004
:10078C002E7401F0900085120AB690001A1208CB54
:10079C00FDE4FF02000E90002EE0D394024010E422
:0F07AC00F0900085120AB690001E740112092BFE
:0107BB00221B
:0B2A69009000A9120AD69000ACEDF01E
:102A7400E4FE9000ACE0FD14F0ED60299000A9E4C0
:102A840075F001120ABF1208B26EFEE4FFEFC394A0
:102A94000850DFEE30E007C313648CFE8004EEC3FD
:072AA40013FE0F80E8AF06EE
:012AAB002208
:081DE800900085EFF0A3EDF07F
:101DF000E4A3F0A3F078897C007D017BFF7A2C7945
:101E0000EEFE7F2012088CE4900089F0A37455F058
:101E1000A374AAF0900085E0FE90008DF0900086FB
:101E2000E0FD90002DF0EE120ADF1E43011E72024B
:101E30001EC1031ECE061ECE071F17801F1F810066
:101E4000001F2D90008C7402F0ED700E90008E74C7
:101E500002F0E490002BF0021F2D900086E0640158
:101E60006003021F2D90008E04F0E490002CF0021D
:101E70001F2D90008C7420F07F05900086E075F097
:101E800012A424442FF8E6FE74892FF582E434006E
:101E9000F583EEF00FEFB412E17F17EFC3940D401E
:101EA00003021F2D900086E075F00DA4242A2FF860
:101EB000E6FE74892FF582E43400F583EEF00F809E
:101EC000DA90008C7402F090008E04F0805F900035
:101ED0008C7405F090008E7401F0781CE675F005A6
:101EE000A4A3F0A37420F0900086E0FF700D900092
:101EF00028E07002800F9000298015EFB4012E9029
:101F00000029E0700890009174FFF0802090002874
:101F1000E0900091F0801690008C7401F0800E909B
:101F2000008C7402F090002AE090008EF090008CFB
:101F3000E02404FFE433900087F0A3EFF07B017A04
:101F4000007989FD122A69900087E0FCA3E02489CA
:101F5000F58274003CF583EFF07F011228F49000C5
:101F600086E0FF700843BD0253BDFE8016EFB4014A
:101F70000843BD2053BDEF800AEFB4FF0643BD22E6
:101F800053BDEE900088E02402FF900087E034000B
:101F9000FE7B017A007989122B8B900086E0FF701E
:101FA0000753BDFD43BD0122EFB4010753BDDF431D
:0D1FB000BD1022EFB4FF0653BDDF43BD118D
:011FBD002201
:10263900EF24FA605014604D24067069E4FE746D4D
:102649002EF8E6FF90002DE075F012A424442EF830
:10265900A6070EEEB412E7E4FE747F2EF8E6FF90AB
:10266900002DE075F00DA4242A2EF8A6070EEEB46D
:1026790008E790002DE0700690002B04F0229000EE
:102689002C7401F022786DE6B4E30D900005740115
:10269900F008E6900028F0229000067401F0786EA8
:0526A900E6900029F09D
:0126AE002209
:102C5000E4FFFE900085F0304323C243FB7A007905
:102C600069786BE62403FD122A697E00786BE624FE
:0D2C70006CF8E6B50707786CE6FF12263910
:012C7D002234
:102AB500011C00C139602A005B0BB80BEA0C1C0C29
:102AC500800CB20CE40D160D480D7A0DAC0E100EEF
:102AD500420E740EA60ED80F0A0F3C0F870FD210A8
:032AE5001D106859
:1025B700E4FFEF25E0245BF582E43400F583E0FCDB
:1025C700A3E0FDC39000B9E09D9000B8E09C4005F2
:1025D7000FEFB415DD781CE6FEEFD39E4004180616
:1025E7008003781B16E5E16007E4F5E1781CA60790
:1025F700781BE6FED394BE5006EEC3940A500778C4
:102607001CA607187664781CE6FFD394005002D204
:102617003DEFD394015002D239EFD394055002D243
:102627003BEFD3940A5002D23AEFD3940F5002D221
:012637003C66
:01263800227F
:1026AF009000C3E06062E4F0D2259000C1E004F036
:1026BF00E0C394054004E4F0D2269000C4E004F097
:1026CF00E0C3940A4004E4F0D2289000BEE475F011
:1026DF0001120995C39000BFE094649000BEE0948E
:1026EF00004006E4F0A3F0D2239000C0E004F0E035
:1026FF00C394FA4013E4F0D2249000C2E004F0E057
:09270F0094044004E4F0D22722F6
:03000B00020026CA
:10002600C0E0C083C082C0D074FC258CF58C746699
:10003600258AF58A9000C37401F0D0D0D082D0838F
:03004600D0E032D5
:0E2DE400758901758CFC758A66D2A9D28C2285
:1029E100EFD39401501675FE0EEF25E02404FE741A
:1029F10003A806088002C333D8FC801475FE0FEFCC
:102A010024FE25E0FE7403A806088002C333D8FC27
:102A1100F452FFEFB4040C75FE0F53FFF075FE0E78
:042A210053FF0F222E
:102D9B0075FE54EF5407F5FF75FE56AF058FFF75A3
:062DAB00FE5375FF01223A
:10294500EFD39401501875FE0EEF25E02404FE74B4
:1029550003A806088002C333D8FC42FF801675FE23
:102965000FEF24FE25E0FE7403A806088002C3339A
:10297500D8FC42FFEF70038DCE22EFB401038DCF5B
:1029850022EFB402038DDE22EFB40304AF058FDF1F
:01299500221F
:032FFD00010102CD
:102CAB00E4FB7D04FF122AE9E4FB7D047F01122A79
:102CBB00E9E4FB7D047F02122AE9E4FB7D047F0338
:032CCB00022AE9F1
:100C6700303159C231E49000D4F0781BF690008AF5
:100C7700F0A3F0FBFAFDFF12277CE490008AF0A3B3
:100C8700F0FBFAFD7F0112277CE490008AF0A3F0C5
:100C9700FBFAFD7F0212277CE490008AF0A3F0FBA9
:100CA700FAFD7F0312277C9000317402F090003028
:100CB700F0900032F090002FF0D2472220220F2030
:100CC7003E0C200D03020D7C300E03020D7C202B01
:100CD70005D22BD23122900031E06402601A9000D5
:100CE7008AE4F0A3740AF07B147A007D02E4FF1211
:100CF700277C9000317403F0900030E06402601AA2
:100D070090008AE4F0A3740AF07B147A007D027FD6
:100D17000112277C9000307403F0900032E06402E7
:100D2700601A90008AE4F0A3740AF07B147A007DBD
:100D3700027F0212277C9000327403F090002FE0AC
:100D47006402601A90008AE4F0A3740AF07B147AB4
:100D5700007D027F0312277C90002F7403F0200D83
:100D6700030210349000D4E0C394285003020EB25B
:100D7700D20ED23122302B0CC22BC22DC22CC22F45
:100D8700C230D2487816E6FF7003020E8C640370F7
:100D97005E202D07D22DC22C022CABE490008AF0E6
:100DA700A3F0FBFA7D01FF12277CE490008AF0A3F1
:100DB700F0FBFA7D017F0112277CE490008AF0A303
:100DC700F0FBFA7D017F0212277CE490008AF0A3F2
:100DD700F0FBFA7D017F0312277C9000317401F04C
:100DE700900030F0900032F090002FF0020E832038
:100DF7002C0DD22CC22DD231E49000D5F0807D90FD
:100E070000D4E0C394015055E004F0A3E014601A45
:100E170014602714603424037062900031E0640486
:100E2700605A7B017D04E4FF802E900030E064046B
:100E3700604A7B017D047F01801E900032E06404DC
:100E4700603A7B017D047F02800E90002FE06404EE
:100E5700602A7B017D047F03122AE9801F9000D45A
:100E6700E0C3940F5005E004F08011E49000D4F043
:100E7700A3E004F0E0C394044002E4F0C22FC230C0
:100E8700C232D22E22302C0AC22C122CABD231D233
:100E97004822202F0C202E09203006203203021072
:100EA700349000D4E0FFC394015004E004F022EF33
:100EB700C394644003020FDF9000D4E004F0303B9A
:100EC70037900031E064037003021034E490008A25
:100ED700F0A3F07B64FA7D03FF12277C9000317446
:100EE70004F0E490008AF0A3F0FBFAFD7F011227DB
:100EF7007C9000307402802D303A41E490008AF0F3
:100F0700A3F0FBFA7D01FF12277C9000317401F0FA
:100F1700E490008AF0A3F0FBFA7D017F0112277CA1
:100F27009000307401F0E490008AF0A3F0FBFAFD22
:100F37007F0212277C90003274028043E490008A7B
:100F4700303C53F0A3F0FBFA7D01FF12277C9000A1
:100F5700317401F0E490008AF0A3F0FBFA7D017F81
:100F67000112277C9000307401F0E490008AF0A30E
:100F7700F0FBFA7D017F0212277C9000327401F0AA
:100F8700E490008AF0A3F0FBFAFD7F0312277C9020
:100F9700002F7402F022F0A3F0FBFA7D01FF122765
:100FA7007CE490008AF0A3F0FBFA7D017F01122711
:100FB7007CE490008AF0A3F0FBFA7D017F02122700
:100FC7007CE490008AF0A3F0FBFA7D017F031227EF
:100FD7007C90003174018048C22FC22EC230C232C9
:100FE700E490008AF0A3F0FBFAFDFF12277CE4905F
:100FF700008AF0A3F0FBFAFD7F0112277CE4900042
:101007008AF0A3F0FBFAFD7F0212277CE490008AA6
:10101700F0A3F0FBFAFD7F0312277C9000317402E6
:0D102700F0900030F0900032F090002FF0BB
:011034002299
:10253700022C7EE493A3F8E493A34003F68001F210
:1025470008DFF48029E493A3F85407240CC8C333A5
:10255700C4540F4420C8834004F456800146F6DF74
:10256700E4800B0102040810204080902AACE47E2E
:10257700019360BCA3FF543F30E509541FFEE49369
:10258700A360010ECF54C025E060A840B8E493A330
:10259700FAE493A3F8E493A3C8C582C8CAC583CA5B
:1025A700F0A3C8C582C8CAC583CADFE9DEE780BE13
:012AE80000ED
:1007BC00E709F608DFFA8046E709F208DFFA803E1F
:1007CC0088828C83E709F0A3DFFA8032E309F6080C
:1007DC00DFFA8078E309F208DFFA807088828C8374
:1007EC00E309F0A3DFFA806489828A83E0A3F60828
:1007FC00DFFA805889828A83E0A3F208DFFA804C02
:10080C0080D280FA80C680D4806980F280338010D8
:10081C0080A680EA809A80A880DA80E280CA803341
:10082C0089828A83ECFAE493A3C8C582C8CCC583B9
:10083C00CCF0A3C8C582C8CCC583CCDFE9DEE78089
:10084C000D89828A83E493A3F608DFF9ECFAA9F008
:10085C00EDFB2289828A83ECFAE0A3C8C582C8CC5E
:10086C00C583CCF0A3C8C582C8CCC583CCDFEADE77
:10087C00E880DB89828A83E493A3F208DFF980CCD9
:10088C0088F0EF60010E4E60C388F0ED2402B404D2
:10089C000050B9F582EB2402B4040050AF23234579
:0608AC00822390080C738A
:1008B200BB010689828A83E0225002E722BBFE0244
:0908C200E32289828A83E4932277
:1008CB00BB010CE58229F582E5833AF583E02250E2
:1008DB0006E92582F8E622BBFE06E92582F8E2222C
:0D08EB00E58229F582E5833AF583E4932246
:1008F800BB010FF8E58229F582E5833AF583E02804
:10090800F0225009C58229F8E58226F622BBFE09A5
:10091800C58229F8E22582F222F8EA2583F583E9DF
:03092800932822EF
:10092B00F8BB010DE58229F582E5833AF583E8F002
:10093B00225006E92582C8F622BBFE05E92582C8AE
:02094B00F22296
:10094D00EF8DF0A4A8F0CF8CF0A428CE8DF0A42EBE
:02095D00FE2278
:10095F00C2D5EC30E709B2D5E4C39DFDE49CFCEEB3
:10096F0030E715B2D5E4C39FFFE49EFE120B44C3DC
:10097F00E49DFDE49CFC8003120B4430D507C3E4D7
:06098F009FFFE49EFE2222
:10099500C5F0F8A3E028F0C5F0F8E58215827002ED
:0609A5001583E038F0228A
:1009AB00BB0110E58229F582E5833AF583E0F5F08A
:1009BB00A3E0225009E92582F886F008E622BBFE67
:1009CB000AE92582F8E2F5F008E222E5832AF583AD
:0809DB00E993F5F0A3E9932272
:1009E300BB010A89828A83F0E5F0A3F0225006F75F
:0F09F30009A7F01922BBFE06F3E5F009F319225C
:100A0200F8BB0111E58229F582E5833AF583E8F026
:100A1200E5F0A3F0225009E92582C8F608A6F022E3
:0D0A2200BBFE09E92582C8F2E5F008F222CA
:100A2F00E88FF0A4CC8BF0A42CFCE98EF0A42CFC66
:100A3F008AF0EDA42CFCEA8EF0A4CDA8F08BF0A4E4
:100A4F002DCC3825F0FDE98FF0A42CCD35F0FCEB43
:100A5F008EF0A4FEA9F0EB8FF0A4CFC5F02ECD3908
:0F0A6F00FEE43CFCEAA42DCE35F0FDE43CFC2275
:102A2500C2D5E830E70FB2D5E4C39BFBE49AFAE4DC
:102A350099F9E498F8EC30E717B2D5122A5B120B36
:102A4500D5E4C39BFBE49AFAE499F9E498F880038A
:102A5500120BD530D50DE4C39FFFE49EFEE49DFD2A
:042A6500E49CFC22CF
:100A7E00EB9FF5F0EA9E42F0E99D42F0E89C45F0CE
:010A8E002245
:100A8F00E8600FECC313FCED13FDEE13FEEF13FF45
:030A9F00D8F12269
:100AA200E86010ECA2E713FCED13FDEE13FEEF136A
:040AB200FFD8F02257
:090AB600E0FBA3E0FAA3E0F92241
:100ABF00F8E0FBA3A3E0F925F0F0E58215827002C0
:070ACF001583E0FA38F02264
:090AD600EBF0A3EAF0A3E9F02221
:100ADF00D083D082F8E4937012740193700DA3A3A6
:100AEF0093F8740193F5828883E4737402936860BA
:060AFF00EFA3A3A380DFBA
:100B0500EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02D7D
:100B1500FDE43CFCE8A42EC8C5F03DFDE43CFCEF3B
:0D0B2500A4FFE5F028FEE43DFDE43CFC22C9
:1013A200E5082489F582E43400F583E005082290FB
:1013B2000086301903900089E475F001120ABF0219
:1013C20008B22012E97F2ED2128018EF540F249017
:1013D200D43440D4FF30160BEF24BFB41A005003AC
:1013E2002461FFE50960021509050CE50C70020590
:1013F2000B30190E900086E475F001120ABFEF025D
:101402000B32022DD67403D2198003E4C219F508F7
:10141200900086120AD6E4F509F50BF50CE5096091
:10142200077F201213E580F5750AFFC213C212C2AC
:1014320014C215C217C218C21A1213B1FF700D30AE
:1014420019057F001213F6AF0CAE0B22B4255FC252
:10145200D5C2161213B1FF24D0B40A00501A75F087
:101462000A780930D50508B6FF0106C6A426F6207B
:10147200D5047002D21580D924CFB41A00EF5004DB
:10148200C2E5D2160215F7D21380C6D21280C0D29C
:101492001480BCD2D580BAD21780B47F201213E553
:1014A2002014077401B5090040F11213A2FF1213B0
:1014B200E502141FD21AD21880951213A2FB12133E
:1014C200A2FA1213A2F94A4B700679C87A167BFF68
:1014D20020142EE509602A7E008E82758300120890
:1014E200CB60060EEE650A70F0C2D5EBC0E0EAC032
:1014F200E0E9C0E0EE12163ED0E0F9D0E0FAD0E02A
:10150200FB1208B2FF60AAEBC0E0EAC0E0E9C0E06B
:101512001213E5D0E02401F9D0E03400FAD0E0FB68
:10152200E50A0460DCD50AD980877BFF7A16793A0E
:10153200D214809C791080027908C218C21A8008DD
:10154200D2D5790A8004790AC2D5E50A047002F577
:101552000AE4FAFDFEFF1213A2FC7B082013131209
:1015620013A2FD7B1030120A1213A2FE1213A2FF65
:101572007B20EC3382D592D55013C3E43012069F00
:10158200FFE49EFEE42013039DFDE49CFCE4CBF803
:10159200C213EC700CCFCECDCCE824F8F870F380F7
:1015A20017C3EF33FFEE33FEED33FDEC33FCEB33C9
:1015B200FB994002FB0FD8E9EB301305F8D0E0C4E9
:1015C20048B213C0E00AEC4D4E4F78207B0070C247
:1015D200EAB50A0040BCC0E0121640D0F0D0E020CC
:1015E2001304C4C0E0C4B213C0F01213CED0F0D5BD
:1015F200F0EB02141F120ADF14BC53153658148D77
:101602004C148942153A4F15424415424914A243DB
:08161200154855152C46152C56
:10161A0045152C4716E85014912D14952E14B82B05
:10162A0014992314B62016D12A145148000014B074
:10163A003F3F3F00790AA2D5201514301709B91087
:10164A00020404B9080104A2D5201802500104209A
:10165A0014689214B509005034C0E07F203015197F
:10166A007F30A21472187217500F121697C214C242
:10167A0018C217C21A7F30800F301703E9C0E01270
:10168A0013E5301703D0E0F9D0E0B509CC301717CD
:10169A007F30B9100C1213E57F583016077F788017
:1016AA0003B908031213E53014057F2D0213E57FF1
:1016BA0020201AF87F2B2018F322921480CF286E4C
:1016CA00756C6C2900D2131213A23013F8C2137866
:1016DA000930D50108F60214512D50434958121306
:1016EA00A22403B405004001E49016E3931213D632
:0D16FA00743A1213D6D21575090402153684
:100B3200BB010689828A83F0225002F722BBFE01A2
:020B4200F3229C
:100B4400BC000BBE0029EF8DF084FFADF022E4CC95
:100B5400F875F008EF2FFFEE33FEEC33FCEE9DEC5E
:100B6400984005FCEE9DFE0FD5F0E9E4CEFD22EDA4
:100B7400F8F5F0EE8420D21CFEADF075F008EF2FEE
:100B8400FFED33FD4007985006D5F0F222C398FDDF
:050B94000FD5F0EA227C
:100B990075F008758200EF2FFFEE33FECD33CDCC13
:100BA90033CCC58233C5829BED9AEC99E582984096
:100BB9000CF582EE9BFEED9AFDEC99FC0FD5F0D673
:100BC900E4CEFBE4CDFAE4CCF9A88222B800C1B99D
:100BD9000059BA002DEC8BF084CFCECDFCE5F0CBDB
:100BE900F97818EF2FFFEE33FEED33FDEC33FCEB14
:100BF90033FB10D703994004EB99FB0FD8E5E4F9CF
:100C0900FA227818EF2FFFEE33FEED33FDEC33FCBB
:100C1900C933C910D7059BE99A4007EC9BFCE99AAF
:100C2900F90FD8E0E4C9FAE4CCFB2275F010EF2FF4
:100C3900FFEE33FEED33FDCC33CCC833C810D707F4
:100C49009BEC9AE899400AED9BFDEC9AFCE899F82F
:0E0C59000FD5F0DAE4CDFBE4CCFAE4C8F922C2
:00000001FF

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -392,6 +392,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UsrSrc\display\display_ui.c</PathWithFileName>
<FilenameWithoutPath>display_ui.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

View File

@ -324,7 +324,7 @@
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath>..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer;..\UsrInc\pmu;..\UsrInc\user</IncludePath>
<IncludePath>..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer;..\UsrInc\pmu;..\UsrInc\user;..\UsrInc\display</IncludePath>
</VariousControls>
</C51>
<Ax51>
@ -471,6 +471,11 @@
<FileType>1</FileType>
<FilePath>..\UsrSrc\InitVars.c</FilePath>
</File>
<File>
<FileName>display_ui.c</FileName>
<FileType>1</FileType>
<FilePath>..\UsrSrc\display\display_ui.c</FilePath>
</File>
</Files>
</Group>
</Groups>

View File

@ -1,5 +1,15 @@
---- _DEBUG_ADC Matches (4 in 2 files) ----
PMU_ADC_Chn_Data in adc.c (UsrSrc\adc) : #ifdef _DEBUG_ADC
PMU_ADC_Chn_Data in adc.c (UsrSrc\adc) : #ifdef _DEBUG_ADC
PMU_ADC_Chn_Data in adc.c (UsrSrc\adc) : #ifdef _DEBUG_ADC
define.h (UsrInc\inc) line 95 : #define _DEBUG_ADC
---- Enter_Sleep_Cnt_Restart_Flag Matches (14 in 8 files) ----
LED_Display_App in display_ui.c (UsrSrc\display) : Enter_Sleep_Cnt_Restart_Flag = 1;
Hall_Handler in hall.c (UsrSrc\hall) : Enter_Sleep_Cnt_Restart_Flag = 1;
Key_Handler in key.c (UsrSrc\key) : Enter_Sleep_Cnt_Restart_Flag = 1;
sleep.c (UsrSrc\sleep) line 37 : bit Enter_Sleep_Cnt_Restart_Flag;
Check_Require_Sleep in sleep.c (UsrSrc\sleep) : if( ( CHIP_STA0 & VIN_PRESENT ) || ( ON == Vox_Vout_Enable ) || Enter_Sleep_Cnt_Restart_Flag ) /*充电中、有中断、耳机处于充电状态情况下Boost重载输出系统不进休眠模式。 */
Check_Require_Sleep in sleep.c (UsrSrc\sleep) : printf("Not Get Into Sleep(ChgStatus:%d,Vox_Vout:%d,Restart_Flag:%d).\r\n",(uint16_t)ChgStatus,(uint16_t)Vox_Vout_Enable,(uint16_t)Enter_Sleep_Cnt_Restart_Flag);
Check_Require_Sleep in sleep.c (UsrSrc\sleep) : Enter_Sleep_Cnt_Restart_Flag = 0;
sleep.h (UsrInc\sleep) line 40 : extern bit Enter_Sleep_Cnt_Restart_Flag;
EX0_isr in system.c (UsrSrc\system) : Enter_Sleep_Cnt_Restart_Flag = 1;
EX2_isr in system.c (UsrSrc\system) : Enter_Sleep_Cnt_Restart_Flag = 1;
EX3_isr in system.c (UsrSrc\system) : Enter_Sleep_Cnt_Restart_Flag = 1;
uart1_Interrupt in uart.c (UsrSrc\uart) : Enter_Sleep_Cnt_Restart_Flag = 1;
SysTem_State_Machine in userapp.c (UsrSrc\userapp) : if(Enter_Sleep_Cnt_Restart_Flag)
SysTem_State_Machine in userapp.c (UsrSrc\userapp) : Enter_Sleep_Cnt_Restart_Flag = 0;

View File

@ -23,23 +23,6 @@
#include "define.h"
#ifdef NTC_ENABLE
extern bit CHG_NTC_Pro_Flag;
#endif
// 充电状态定义
typedef enum
{
CHG_NONE = 0x00,
CHG_PROTECT,
CHG_STA_ING, // 充电中
CHG_STA_COMPLETED, // 充电完成
} TE_CHG_STA;
typedef enum
{
DISCHG_ON = 0,
@ -48,8 +31,6 @@ typedef enum
}g_chg_type;
extern idata TE_CHG_STA ChgStatus; // 系统状态定义
#if CHARGER_ENABLE
/* Charger Current Setting */
@ -201,10 +182,6 @@ typedef struct {
#define STATE_TC_Pos_Msk (0x1UL << STATE_TC_Pos)
#define STATE_TC STATE_TC_Pos_Msk
#define CHG_CONSTANT_CUR_TIM 1
#define DIE_OT_RECOVER_TIM 25 //NTC保护后恢复正常后等待250ms重新开启充电
extern void Charger_Init(void);
extern void Charger_Handler(void);

View File

@ -107,11 +107,6 @@
/******************************************************************************\
Variables definitions
\******************************************************************************/
#ifdef NTC_ENABLE
extern bit Boost_NTC_Pro_Flag;
#endif
extern bit gBoost_Prepared_Flag; //Boost满足开启条件。
/******************************************************************************\
Functions definitions

View File

@ -0,0 +1,44 @@
/*
******************************************************************************
*
* @file display_ui.h
* @brief display ui module
* @ic sy8837
*
* @version 1.0
* @date 2025/01/14 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2025/01/14 Alex build this file
******************************************************************************
*/
#ifndef __DISPLAY_UI_H__
#define __DISPLAY_UI_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
extern uint8_t LED_On_Timer; //ledÁÁʱ¼ä¼ÆÊ±
/******************************************************************************\
Functions definitions
\******************************************************************************/
extern void LED_Display_App(void);
#endif

View File

@ -3,7 +3,7 @@
*
* @file hall.h
* @brief hall module
* @ic sy8835
* @ic sy8837/8
*
* @version 1.0
* @date 2024/11/01 09:59:40
@ -43,7 +43,6 @@ typedef enum{
extern CoverStatus_E CoverStatus;
extern bit CoverEvent_Flg;
extern bit CoverEvent_Flg_led;
extern xdata uint8_t Hall_Sta_bk;

View File

@ -25,7 +25,13 @@
/******************************************************************************\
Macro definitions
\******************************************************************************/
/*Charger Module Config Para Setting*/
/*程序版本第一个数代表在硬件存在改动不能兼容之前版本时加1
1
*/
#define FW_VER0 0x01 //程序版本0:代表在硬件存在改动不能兼容之前版本时加1
#define FW_VER1 0x01 //程序版本1:代表在功能存在改动时加1
#define FW_VER2 0x02 //程序版本2:代表在软件调试出现不同的测试版本时改动时加1
#if 0
#if 0
@ -117,7 +123,7 @@
使2.5V的上拉LDO有温漂误差使
*/
#define NONE_NTC 984 //NTC引脚悬空码值
#define NONE_NTC 1000 //NTC引脚悬空码值
#define T_N20C 927 //-20℃ NTC:953K
@ -160,6 +166,8 @@
#define T_80C 113 //80℃ NTC:12.4K
#endif
/* 功能选择和配置。 */
/* NTC保护标准选择JEITA or IEC.*/
#define NTC_JEITA 1
@ -179,32 +187,32 @@
#elif NTC_JEITA
/* JEITA模式NTC温度保护上下限阈值和迟滞温度。 */
#define JEITA_NTC_CHG_PRO_LOW_TMP T_0C //配置充电NTC保护温度下限值。
#define JEITA_NTC_CHG_PRO_LOW_TMP T_0C //配置充电NTC保护温度下限值。
#define JEITA_NTC_CHG_PRO_HYST_LOW_TMP T_3C //配置充电NTC保护恢复温度下限迟滞值。
#define JEITA_NTC_CHG_PRO_HYST_LOW_TMP T_3C //配置充电NTC保护恢复温度下限迟滞值。
#define JEITA_NTC_CHG_PRO_HIGH_TMP T_60C //配置充电NTC保护温度上限值。
#define JEITA_NTC_CHG_PRO_HIGH_TMP T_60C //配置充电NTC保护温度上限值。
#define JEITA_NTC_CHG_PRO_HYST_HIGH_TMP T_57C //配置充电NTC保护恢复温度上限迟滞值。
#define JEITA_NTC_CHG_PRO_HYST_HIGH_TMP T_57C //配置充电NTC保护恢复温度上限迟滞值。
/* JEITA模式NTC温度冷状态上下限阈值和迟滞温度。 */
#define JEITA_NTC_CHG_COLD_HIGH_TMP T_10C //配置充电NT C冷状态温度上限值。
#define JEITA_NTC_CHG_COLD_HIGH_TMP T_10C //配置充电NT C冷状态温度上限值。
#define JEITA_NTC_CHG_COLD_HYST_HIGH_TMP T_8C //配置充电NTC冷状态恢复温度上限迟滞值。
#define JEITA_NTC_CHG_COLD_HYST_HIGH_TMP T_8C //配置充电NTC冷状态恢复温度上限迟滞值。
/* JEITA模式NTC温度暖状态上下限阈值和迟滞温度。 */
#define JEITA_NTC_CHG_WARM_LOW_TMP T_10C //配置充电NTC暖状态温度下限值。
#define JEITA_NTC_CHG_WARM_LOW_TMP T_10C //配置充电NTC暖状态温度下限值。
#define JEITA_NTC_CHG_WARM_HYST_LOW_TMP T_12C //配置充电NTC暖状态恢复温度下限迟滞值。
#define JEITA_NTC_CHG_WARM_HYST_LOW_TMP T_12C //配置充电NTC暖状态恢复温度下限迟滞值。
#define JEITA_NTC_CHG_WARM_HIGH_TMP T_45C //配置充电NT C暖状态温度上限值。
#define JEITA_NTC_CHG_WARM_HIGH_TMP T_45C //配置充电NT C暖状态温度上限值。
#define JEITA_NTC_CHG_WARM_HYST_HIGH_TMP T_42C //配置充电NTC暖状态恢复温度上限迟滞值。
#define JEITA_NTC_CHG_WARM_HYST_HIGH_TMP T_42C //配置充电NTC暖状态恢复温度上限迟滞值。
/* JEITA模式NTC温度热状态上下限阈值和迟滞温度。 */
#define JEITA_NTC_CHG_HOT_LOW_TMP T_45C //配置充电NTC热状态温度下限值。
#define JEITA_NTC_CHG_HOT_LOW_TMP T_45C //配置充电NTC热状态温度下限值。
#define JEITA_NTC_CHG_HOT_HYST_LOW_TMP T_47C //配置充电NTC热状态恢复温度下限迟滞值。
#define JEITA_NTC_CHG_HOT_HYST_LOW_TMP T_47C //配置充电NTC热状态恢复温度下限迟滞值。
#endif
@ -286,19 +294,19 @@
#define VOX_HAVEY_TO_LIGHT_DEB VOX_HAVEY_TO_LIGHT_8 //配置VOX 重载转轻载滤波时间。
#define VOX_COM_VOLTAGE_SET Vox_COMM_PULL_Vol_3_0 //配置VOX 通讯电平(1.8v/2.5V/3.0V/5.0)。
#define VOX_COMM_VOLTAGE_SET Vox_COMM_PULL_Vol_3_0 //配置VOX 通讯电平(1.8v/2.5V/3.0V/5.0)。
#define VOX_PULL_UP_SET Vox_Pull_Up_50k //配置VOX 通讯上拉电阻。
#define VOX_COMM_PULL_UP_SET Vox_Pull_Up_50k //配置VOX 通讯上拉电阻。
#define VOX_CHG_FULL_5V_LEAST_CNT 40 //配置关盖条件下VOX 耳机充满后VOX输出5V持续时间100ms * 40
#define VOX_OPEN_VOUT_5V_DEBOUNCE 5 //配置开盖动作后VOX 输出5V持续时间100ms * 5单位ms。
#define HALL_OPEN_VOX_5V_DEBOUNCE 5 //配置开盖动作后VOX 输出5V持续时间100ms * 5单位ms。
#define VOX_OPEN_VOUT_0V_DEBOUNCE 5 //配置开盖动作后VOX 输出0V持续时间100ms * 5单位ms。
#define HALL_OPEN_VOX_0V_DEBOUNCE 5 //配置开盖动作后VOX 输出0V持续时间100ms * 5单位ms。
#define VOX_OCP_HICUUP_DEBOUNCE 5 //配置关盖条件下VOX 打嗝时间100ms * 5单位ms。
#define VOX_CLOSE_5V_HOLD_CNT 3 //配置关盖动作后VOX 输出5V持续时间100ms * 3单位ms。
#define HALL_CLOSE_VOX_5V_HOLD_CNT 3 //配置关盖动作后VOX 输出5V持续时间100ms * 3单位ms。
/* 双向通讯协议选择 */
@ -310,6 +318,8 @@
/* Vox跟随充参数设置。(100ms调用周期) */
#define FOLLOW_CHG_EFFICIENCY //配置跟随充类型0、效率优先1、速度优先。
#define VOX_CV_TC_CURRENT 20 //耳机充电处于CV/TC阶段的电流值单位mA。
#define Vox_FOLLOW_CHG_PTM_THD 200 //PTM模式启动阈值VOUT - VBAT单位mV。
@ -326,18 +336,67 @@
#define VOUT_MIN_THD Boost_Vout_3_65V //VOX VOUT输出最小阈值。
#define IVOL_Threshold_Neg(Ivol) ( Ivol / 5 ) << 2 //VOL 调压下限阈值电流80% * IvolIVOL≥这个值则降压。
#define IVOR_Threshold_Neg(Ivor) ( Ivor / 5 ) << 2 //VOR 调压下限阈值电流80% * IvorIVOR≥这个值则降压。
#define IVOL_Threshold_Pos(Ivol) ( Ivol ) << 1 //VOL 调压上限阈值电流2倍 * Ivol当Ivol大于THP阈值电流则说明耳机状态发生改变TC跳转到CC或Recharge复充需要重启跟随充。
#define IVOR_Threshold_Pos(Ivor) ( Ivor ) << 1 //VOR 调压上限阈值电流2倍 * Ivor当Ivor大于THP阈值电流则说明耳机状态发生改变TC跳转到CC或Recharge复充需要重启跟随充。
/* PWM Module Setting */
/*PWM计数器时钟Fre(pwm) = Fre(sys)/PWM_PRE = 11.0592M / n^PWM_PRE = 11.0592M / 8 = 1.38MHz,
PWM_REL = 255 - 1.38M / 10K = 255-138 = 117
nPWM_CMP = 117 + 150 * (1-50%) = 192
*/
#define PWM_CLKFRE_SET 3 //配置PWM计数时钟频率对应寄存器PWM_PREPWM计数器时钟Fre(pwm) = Fre(sys)/PWM_PRE = 12M / n^PWM_PRE = 12M / 8 = 1.5MHz,
#define PWM_RELOAD_SET PWM_REL_VALUE //配置PWM输出占空比对应寄存器PWM_REL需和PWM_CMP配合使用。
/*Sleep Module Setting*/
/*Enter Sleep Time Debounce*/
#define ENTER_STANDBYMODE_CNT 15 //进入Standby Mode 延迟时间,单位:秒
#define STANDBY_TIM_SET STB_TMR_SET_8S //配置Standby定时唤醒时间2s、4s、8s、16s单位
//#define ENTER_STANDBYMODE_CNT 10 //进入Standby Mode 延迟时间,单位:秒
/******************************************************************************\
Variables definitions
\******************************************************************************/
/* 标志位和状态位。 */
/* NTC充放电保护标志位 */
extern bit CHG_NTC_Pro_Flag; //充电NTC保护标志位TRUE有NTC保护:FAULSE:无NTC保护
extern bit Boost_NTC_Pro_Flag; //放电电NTC保护标志位TRUE有NTC保护:FAULSE:无NTC保护
/* Charger状态定义 */
// 充电状态定义
typedef enum
{
CHG_NONE = 0x00,
CHG_PROTECT,
CHG_STA_ING, // 充电中
CHG_STA_COMPLETED, // 充电完成
} TE_CHG_STA;
extern idata TE_CHG_STA ChgStatus; // Charger状态定义
/* Boost相关标志位 */
extern bit gBoost_Prepared_Flag; //Boost满足开启条件TRUE:Boost无保护可以开启FAULSE:Boost有保护无法正常开启。
/* LED UI显示相关标志位 */
extern bit CoverEvent_Flg_led; //Hall开关盖动作标志位用于LED UI显示TRUE:有开关盖动作。
extern bit Earphone_Chg_Flag_led; //耳机出入盒标志位用于LED UI显示TRUE:有耳机入盒动作。
extern bit Key_Press_short_irq_led; //按键短按动作标志位用于LED UI显示TRUE:有按键短按动作。
extern bit LED_On_Flag; //led显示复位标志位TRUE:灯效复位。
/******************************************************************************\
UserCfg.Functions definitions
\******************************************************************************/

View File

@ -49,12 +49,6 @@
#define VOX_FOLLOW_CHG 1 //2111Bytes
#if VOX_FOLLOW_CHG
#define FOLLOW_CHG_EFFICIENCY //跟随充两只类型1、效率优先2、速度优先。
#endif
#if VOX_ENABLE
#define VOX_TX //959Bytes

View File

@ -35,7 +35,6 @@
#if KEY_ENABLE
extern bit Key_Press_short_irq;
extern bit Key_Press_l_irq;
extern bit Key_Press_ll_irq;

View File

@ -112,10 +112,10 @@ typedef struct{
}TS_LED_INFO;
extern volatile uint8_t Display_RSta; // ÏÔʾ״̬
extern volatile uint8_t Display_GSta; // ÏÔʾ״̬
extern volatile uint8_t Display_YSta; // ÏÔʾ״̬
extern volatile uint8_t Display_BSta; // ÏÔʾ״̬
extern uint8_t Display_RSta; // ÏÔʾ״̬
extern uint8_t Display_GSta; // ÏÔʾ״̬
extern uint8_t Display_YSta; // ÏÔʾ״̬
extern uint8_t Display_BSta; // ÏÔʾ״̬
// LED显示相关定义
// LED显示逻辑

View File

@ -40,18 +40,25 @@ typedef enum {
typedef struct {
uint8_t nPWM_PRE; //PWM Clock Precale Set --- clock divide 2^n(n:0-7)
uint8_t nPWM_REL; //PWM counter reload value --- Fre(0-255)
uint8_t nPWM_CMP; //PWM compare value --- duty (0-255)
}s_gPWM_Para_Cfg;
#define PWM_REL_VALUE 105 //Feq:KK ,PWM_REL = 255 - 1.5M / 6K = 255-250 = 5£¬nPWM_CMP = 5 + 250 * (1-50%) = 130¡£
#define PWM_REL_FULL 254
extern void PWM_Enable(void);
extern void PWM_Disable(Pwm_Channels_e nPWM_Ch);
extern void PWM_Init_Set(uint8_t nPWM_PRE,uint8_t nPWM_REL);
extern void PWM_Duty_Set(Pwm_Channels_e nPWM_Ch,uint8_t nPWM_CMP);
extern void HuXi_Led(Pwm_Channels_e nPWM_Ch, uint8_t Delay_Timer);
#endif

View File

@ -175,6 +175,16 @@
#define STB_TMR_SET_8S (2U)
#define STB_TMR_SET_16S (3U)
/* 系统分频分频比为N = 2^n。 */
#define CLK_DIV_0 (0U)
#define CLK_DIV_2 (1U)
#define CLK_DIV_4 (2U)
#define CLK_DIV_8 (3U)
#define CLK_DIV_16 (4U)
#define CLK_DIV_32 (5U)
#define CLK_DIV_64 (6U)
#define CLK_DIV_128 (7U)
/*中断号计算方式:中断向量 = 中断号 * 8 + 3*/
#define Interrupt_Vector_IE0 0 //0x03,SY8836 IE0 use for wakeup
@ -204,5 +214,7 @@
extern void System_Init(void);
extern void Sys_Clk_Adjust(uint8_t Clk_Div);
#endif

View File

@ -59,11 +59,6 @@ extern bit Wkup_Earphone_Flag; //
Global variables and functions
\******************************************************************************/
extern uint8_t LED_On_Timer; //led亮时间计时
extern bit LED_On_Flag;
extern void UserAPP(void);
#endif

View File

@ -36,8 +36,6 @@
extern bit Vox_Vout_Enable;
extern bit Earphone_Chg_Flag; //耳机出入盒标志位
extern bit Vox_Output_Short_Flag;
#define IVOX_THN 20 //耳机跟随充电流下降阈值

View File

@ -22,18 +22,11 @@
/******************************************************************************\
Macro definitions
\******************************************************************************/
/*程序版本第一个数代表在硬件存在改动不能兼容之前版本时加1
1
*/
#define FW_VER0 0x01 //程序版本0:代表在硬件存在改动不能兼容之前版本时加1
#define FW_VER1 0x01 //程序版本1:代表在功能存在改动时加1
#define FW_VER2 0x02 //程序版本2:代表在软件调试出现不同的测试版本时改动时加1
/******************************************************************************\
Variables definitions
\******************************************************************************/
char code Version_Addr[3] = {FW_VER0,FW_VER1,FW_VER2}; //设置ROM绝对地址存放软版本两个参数存于ROM的3070、3071、3072位置处,小端模式存储。
char code Version_Addr[3] = {FW_VER0,FW_VER1,FW_VER2}; //设置ROM绝对地址存放软版本两个参数存于ROM的倒数3Bytes位置处小端模式存储。

View File

@ -34,47 +34,47 @@
\******************************************************************************/
idata int8_t ADC_Offset_Error = 0; //ADC Offset Error У׼ֵ¼Ä´æÆ÷
idata int8_t ADC_Offset_Error; //ADC Offset Error У׼ֵ¼Ä´æÆ÷
idata int8_t Bat_ADC_Offset_Error = 0;
idata int8_t Bat_ADC_Offset_Error;
idata uint8_t Vor_Isense_Gain_Error = 0;
idata uint8_t Vor_Isense_Gain_Error;
idata uint8_t Vol_Isense_Gain_Error = 0;
idata uint8_t Vol_Isense_Gain_Error;
idata int8_t Vor_Isense_Offset_Error = 0;
idata int8_t Vor_Isense_Offset_Error;
idata int8_t Vol_Isense_Offset_Error = 0;
idata int8_t Vol_Isense_Offset_Error;
xdata uint8_t ADC_Chn_Num = 0;
xdata uint8_t ADC_Chn_Num;
idata uint16_t g_Value_Adc = 0;
idata uint16_t g_Value_Adc;
xdata uint16_t g_Value_Adc_Avg = 0;
xdata uint16_t g_Value_Adc_Avg;
#if 0
xdata uint16_t g_Value_Adc0 = 0;
xdata uint16_t g_Value_Adc0;
xdata uint16_t g_Value_Adc1 = 0;
xdata uint16_t g_Value_Adc1;
xdata uint16_t g_Vref_Adc = 0;
xdata uint16_t g_Vref_Adc;
#endif
xdata int16_t g_Vntc_Adc = 0;
xdata int16_t g_Vntc_Adc;
xdata int16_t g_pmu_Adc_Ivol = 0;
xdata int16_t g_pmu_Adc_Ivol;
xdata int16_t g_pmu_Adc_Ivor = 0;
xdata int16_t g_pmu_Adc_Ivor;
xdata int16_t g_Vbat_Adc = 0;
xdata int16_t g_Vbat_Adc;
xdata int16_t g_pmu_Adc_Vout = 0;
xdata int16_t g_pmu_Adc_Vout;
xdata uint8_t g_ADC_Chn = 0;
xdata uint8_t g_ADC_Chn;
xdata uint8_t Adc_Index = 0;
xdata uint8_t Adc_Index;
bit ADC_Cal_Over_Flag = 0;
bit ADC_Cal_Over_Flag;
/******************************************************************************\
Functions definitions
@ -121,8 +121,7 @@ void Adc_Init(void)
Vor_Isense_Offset_Error = (int8_t)( ( IVOX_OFFSET >> 4 ) - 8 ) * 10;
Vor_Isense_Gain_Error = IVOR_GAIN;
//Vol_Isense_Offset_Error = 10;
//Vor_Isense_Offset_Error = 10;
#endif
EX6 = 1; //ADC IRQ Enable
@ -224,8 +223,6 @@ void PMU_ADC_Chn_Data( PMU_ADC_CHANNELS_E pmu_Adc_Chn )
break;
}
//g_Value_Adc_Avg = 0;
ADC_Cal_Over_Flag = 0;
#ifdef _DEBUG_ADC

View File

@ -470,18 +470,18 @@ void Bat_Gauge_Handle(void)
#if BAT_VALUE
#define C_offset_bat_level_MAX 200
#define C_offset_bat_level_MIN 10
#define C_offset_bat_level_MAX 190
#define C_offset_bat_level_MIN 10
bit F_batlevel_protect = 0; //ľÍľçąŁť¤
bit F_batlevel_protect; //µÍµç±£»¤
bit F_batlevel_25p = 0;
bit F_batlevel_25p;
bit F_batlevel_50p = 0;
bit F_batlevel_50p;
bit F_batlevel_75p = 0;
bit F_batlevel_75p;
idata uint8_t offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2;
idata uint8_t offset_bat_level;
/*充电电池电压会浮高,具体电压需要测试。*/
const uint16_t Boost_batlevel_Threshold[C_batLevel_SetMax] =

View File

@ -29,7 +29,7 @@
#include "bat.h"
#ifdef NTC_ENABLE
bit CHG_NTC_Pro_Flag = 0;
bit CHG_NTC_Pro_Flag;
#endif
idata TE_CHG_STA ChgStatus; // CHG状态定义
@ -46,7 +46,7 @@ idata TE_CHG_STA ChgStatus; // CHG״̬
idata uint8_t gConstant_Cur_Max_Setting = CONSTANT_CUR_SET; //Charge最大充电电流。
idata uint8_t gConstant_Cur_Max_Setting; //Charge最大充电电流。
idata s_gCharger_Cfg gCharge_Cfg;
@ -85,6 +85,8 @@ void Charger_Init(void)
#endif
gConstant_Cur_Max_Setting = CONSTANT_CUR_SET;
SFRADDR = REG_CHG0;
SFRDATA |= R_Set0 | R_Set1; //Charger 环路 RC 调零电阻配置00-11 档位逐步增大调零电阻阻值。
@ -490,6 +492,7 @@ uint8_t PMU_NTC_Handle(uint8_t Charge_sta)
void Charger_Handler(void)
{
uint16_t nCVFloat = 0;
if( !(CHIP_STA4 & VIN_PG) ) //未检测到Power good,则关闭Charger使能后返回。
{
CHG_CTL &= ~CHG_EN; //Disable Charger
@ -526,7 +529,7 @@ void Charger_Handler(void)
{
IRQ_FLAG9 = BAT_OverVol;
CHG_CTL &= ~CHG_EN; //Disable Charger
// CHG_CTL &= ~CHG_EN; //Disable Charger
return;
}

View File

@ -27,10 +27,10 @@
#include "bat.h"
#ifdef NTC_ENABLE
bit Boost_NTC_Pro_Flag = 0;
bit Boost_NTC_Pro_Flag;
#endif
bit gBoost_Prepared_Flag = 0; //Boost满足开启条件。
bit gBoost_Prepared_Flag; //Boost满足开启条件。
#if DISCHARGE_ENABLE
/******************************************************************************\
@ -41,7 +41,7 @@ bit gBoost_Prepared_Flag = 0; //Boost
Variables definitions
\******************************************************************************/
bit gBoost_UVLO_Flag = 0;
bit gBoost_UVLO_Flag;
/******************************************************************************\
Functions definitions
@ -158,14 +158,7 @@ void DisCharge_Handler(void)
return;
}
#if 0
/* BAT LOW Interrupt */
if( IRQ_FLAG0 & BAT_Low )
{
return;
}
#endif
/*输出短路保护 (使用中断标志位Boost短路中断发生后会锁存需要写1清零。)-- 短路保护后一直打嗝或者打嗝BOOST_HICCUP_TIM次之后disable boost打嗝时间 250ms软件实现。*/
if( IRQ_FLAG0 & Boost_OutPut_Short )
{

383
UsrSrc/display/display_ui.c Normal file
View File

@ -0,0 +1,383 @@
/*******************************************************************************
*
* @file display_ui.c
* @brief display_ui module
* @ic sy8837/8
*
* @version 1.0
* @date 2025/01/14 15:00:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2025/01/14 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "display_ui.h"
#include "userapp.h"
#include "adc.h"
#include "hall.h"
#include "key.h"
#include "sleep.h"
#include "system.h"
#include "bat.h"
#include "sys_tim.h"
#include "charger_module.h"
#include "discharge_module.h"
#include "led.h"
#include "vox_module.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define LED_ON_CNT 100 //10s电量灯触发后亮的时间。
#define LED_PRO_TIM 40
#define LED_OFF_CNT 1
/******************************************************************************\
Variables definitions
\******************************************************************************/
bit Earphone_Chg_Flag_led; //耳机出入盒标志位
bit CoverEvent_Flg_led; //Hall开关触发事件标志位用于灯效显示。
bit Key_Press_short_irq_led; //按键短按动作标志位用于LED UI显示TRUE:有按键短按动作。
uint8_t LED_On_Timer; //led亮时间计时
bit LED_On_Flag; //led显示复位标志位1灯效复位。
#ifdef PWM_ENABLE
uint8_t Breathing_Light_Cnt; //呼吸灯流水计数器
#endif
/******************************************************************************\
Functions definitions
\******************************************************************************/
#ifdef LED_DISPLAY
/*****************************************************************************
* Function : void LED_Breating_Light_Off(void)
* Description :
* Input : None
* Output : None
* Return : None
* Note : None
*****************************************************************************/
void LED_Breating_Light_Off(void)
{
#ifdef PWM_ENABLE
LED_R_BREATHING_LIGHT(SHOW_NONE);
LED_G_BREATHING_LIGHT(SHOW_NONE);
LED_Y_BREATHING_LIGHT(SHOW_NONE);
LED_B_BREATHING_LIGHT(SHOW_NONE);
#endif
}
/*****************************************************************************
* Function : void LED_Display_App(void)
* Description : 100ms调用周期
* Input : None
* Output : None
* Return : None
* Note : None
*****************************************************************************/
/*
11Hz闪烁
2
1使4s后灭1Hz闪4s后灭
2使4s后灭
34s后灭1Hz闪4s后灭
4
*/
void LED_Display_App(void)
{
#ifdef NTC_ENABLE
static bit LED_On_Flag1;
#endif
static bit LED_On_Chg_Flag;
static bit LED_On_ChgDone_Flag;
static bit Disp_Bat_Lev; //拔出VIN动作标志位。
if( LED_On_Flag )
{
LED_On_Flag = 0;
LED_On_Timer = 0;
offset_bat_level = 0;
Display_AllOff();
#if SLEEP_ENABLE
Enter_Sleep_Cnt_Restart_Flag = 1;
#endif
return;
}
#ifdef NTC_ENABLE
/*NTC保护4灯一直快闪(2Hz)*/
if( CHG_NTC_Pro_Flag || Boost_NTC_Pro_Flag || ( Vox_Output_Short_Flag && !Vox_Ocp_Flag ) )
{
if( !LED_On_Flag1 )
{
LED_On_Flag1 = 1;
LED_On_Flag = 1;
}
else
{
if( Display_RSta != LED_FLASH )
{
Display_Red_Flash(20,10);
}
if( Display_GSta != LED_FLASH )
{
Display_Green_Flash(20,10);
}
if( Display_YSta != LED_FLASH )
{
Display_Yellow_Flash(20,10);
}
if( Display_BSta != LED_FLASH )
{
Display_Blue_Flash(20,10);
}
if( Vox_Output_Short_Flag )
{
if( LED_On_Timer < LED_PRO_TIM )
{
LED_On_Timer++;
}
else
{
Vox_Ocp_Flag = 1;
LED_On_Flag = 1;
}
}
}
return;
}
/* 保护消失后需要开启5V升压一段时间。 */
if( LED_On_Flag1 )
{
LED_On_Flag1 = 0;
LED_On_ChgDone_Flag = 0;
LED_On_Chg_Flag = 0;
CoverEvent_Flg_led = 0;
Earphone_Chg_Flag_led = 0;
Wkup_Earphone_Flag = 1;
}
#endif
if (ChgStatus != CHG_NONE)
{
if ( ChgStatus == CHG_STA_COMPLETED ) // 充电完成4个LED常亮
{
if( !LED_On_ChgDone_Flag )
{
LED_On_ChgDone_Flag = 1;
LED_On_Chg_Flag = 0;
LED_Breating_Light_Off();
return;
}
Display_AllOn();
}
else
{
if( !LED_On_Chg_Flag )
{
LED_On_Chg_Flag = 1;
LED_On_ChgDone_Flag = 0;
LED_On_Flag = 1;
#ifdef PWM_ENABLE
Breathing_Light_Cnt = LED_R;
#endif
}
else
{
#ifdef PWM_ENABLE
if( LED_On_Timer < LED_OFF_CNT )
{
LED_On_Timer++;
switch ( Breathing_Light_Cnt )
{
case LED_R:
if( Display_RSta != LED_BREATHING_LIGHT )
{
LED_R_BREATHING_LIGHT(SLOW_DARK);
}
break;
case LED_G:
if( Display_GSta != LED_BREATHING_LIGHT )
{
LED_G_BREATHING_LIGHT(SLOW_DARK);
}
break;
case LED_Y:
if( Display_YSta != LED_BREATHING_LIGHT )
{
LED_Y_BREATHING_LIGHT(SLOW_DARK);
}
break;
case LED_B:
if( Display_BSta != LED_BREATHING_LIGHT )
{
LED_B_BREATHING_LIGHT(SLOW_DARK);
}
break;
default:
break;
}
}
else
if( LED_On_Timer < 15 ) //LED显示1.5s。
{
LED_On_Timer++;
}
else
{
LED_On_Timer = 0;
Breathing_Light_Cnt++;
if( Breathing_Light_Cnt >= LED_ID_MAX )
{
Breathing_Light_Cnt = LED_R;
}
}
#endif
}
}
CoverEvent_Flg_led = 0;
Earphone_Chg_Flag_led = 0;
Key_Press_short_irq_led = 0;
Disp_Bat_Lev = 1;
}
else
{
if( LED_On_Chg_Flag )
{
LED_On_Chg_Flag = 0;
LED_Breating_Light_Off();
LED_On_Flag = 1;
Wkup_Earphone_Flag = 1;
return;
}
if( CoverEvent_Flg_led || Disp_Bat_Lev || Earphone_Chg_Flag_led || Key_Press_short_irq_led )
{
if( LED_On_Timer < LED_OFF_CNT )
{
LED_On_Timer++;
}
else
if( LED_On_Timer < LED_ON_CNT ) //LED显示10s后灭。
{
LED_On_Timer++;
/*电量显示25%电量左侧第1个灯闪25%-50%电量2个灯常亮50%-75%电量3个灯常亮75%-100%电量4个灯常量。*/
if( F_batlevel_25p )
{
if (Display_RSta != LED_KEEP_FLASHING)
{
Display_Red_KeepFlash(100);
Display_Green_Off();
Display_Yellow_Off();
Display_Blue_Off();
}
}
else
if( F_batlevel_50p )
{
Display_Red_On();
Display_Green_On();
Display_Yellow_Off();
Display_Blue_Off();
}
else
if( F_batlevel_75p )
{
Display_Red_On();
Display_Green_On();
Display_Yellow_On();
Display_Blue_Off();
}
else
{
Display_AllOn();
}
}
else
{
CoverEvent_Flg_led = 0;
Disp_Bat_Lev = 0;
Earphone_Chg_Flag_led = 0;
Key_Press_short_irq_led = 0;
Display_AllOff(); //清LED显示
}
}
}
}
#endif

View File

@ -25,6 +25,7 @@
#include "charger_module.h"
#include "sleep.h"
#include "system.h"
#include "display_ui.h"
/******************************************************************************\
Macro definitions
@ -36,13 +37,11 @@
CoverStatus_E CoverStatus;
bit CoverEvent_Flg = 0; //Hall开关触发事件标志位用于VOX充电。
bit CoverEvent_Flg_led = 0; //Hall开关触发事件标志位用于灯效显示。
bit CoverEvent_Flg; //Hall开关触发事件标志位用于VOX充电。
#if HALL_ENABLE
xdata uint8_t Hall_Sta_bk = 0xff;
xdata uint8_t Hall_Sta_bk;
/******************************************************************************\
Functions definitions
@ -122,6 +121,7 @@ xdata uint8_t Hall_Sta_bk = 0xff;
#endif
Hall_Sta_bk = Hall_Sta;
#if SLEEP_ENABLE
Enter_Sleep_Cnt_Restart_Flag = 1;

View File

@ -27,6 +27,7 @@
#include "userapp.h"
#include "hall.h"
#include "discharge_module.h"
#include "display_ui.h"
#if KEY_ENABLE
/******************************************************************************\
@ -56,23 +57,21 @@
Variables definitions
\******************************************************************************/
bit Key_Press_short_irq = 0;
bit Key_Press_l_irq;
bit Key_Press_l_irq = 0;
bit Key_Press_ll_irq;
bit Key_Press_ll_irq = 0;
idata KEY_EVENT_E Event_key;
idata KEY_EVENT_E Event_key = 0;
uint8_t Key_TWS_Pair_Tim;
uint8_t Key_TWS_Pair_Tim = 0;
uint8_t Key_TWS_Clear_Pair_Tim;
uint8_t Key_TWS_Clear_Pair_Tim = 0;
uint8_t Key_TWS_Pair_Cnt;
uint8_t Key_TWS_Pair_Cnt = 0;
uint16_t Key_Press_Debounce;
uint16_t Key_Press_Debounce = 0;
uint8_t Key_Lift_Debounce = 0;
uint8_t Key_Lift_Debounce;
/******************************************************************************\
Functions definitions
@ -148,7 +147,7 @@ uint8_t Key_Lift_Debounce = 0;
if( (Key_Press_Debounce <= KEY_PRESS_500MS_CNT) ) //松开按键按下时间小于500ms则识别为短按显示电量
{
Key_Press_short_irq = 1;
Key_Press_short_irq_led = 1;
nKey_Press_short_irq = 1;
#ifdef LED_DISPLAY
@ -277,7 +276,7 @@ uint8_t Key_Lift_Debounce = 0;
#if XUANHENG
HandleTxCommand(CMD_TWS_GET_BTADDR,VOR_CHAN);
#else
HandleTxCommand(VHOUSE_CMD_PAIR,VOR_CHAN); //右耳发配对指令,区分耳机通道。
HandleTxCommand(VHOUSE_CMD_PAIR,VOL_CHAN); //右耳发配对指令,区分耳机通道。
#endif
#endif

View File

@ -24,10 +24,13 @@
#ifdef LED_DISPLAY
volatile uint8_t Display_RSta = LED_OFF; // ÏÔʾ״̬
volatile uint8_t Display_GSta = LED_OFF; // ÏÔʾ״̬
volatile uint8_t Display_YSta = LED_OFF; // ÏÔʾ״̬
volatile uint8_t Display_BSta = LED_OFF; // ÏÔʾ״̬
uint8_t Display_RSta; // ÏÔʾ״̬
uint8_t Display_GSta; // ÏÔʾ״̬
uint8_t Display_YSta; // ÏÔʾ״̬
uint8_t Display_BSta; // ÏÔʾ״̬
/******************************************************************************\
Macro definitions
@ -36,7 +39,9 @@ volatile uint8_t Display_BSta = LED_OFF; //
/******************************************************************************\
Variables definitions
\******************************************************************************/
static TS_LED_INFO LED;
/******************************************************************************\
Functions definitions
\******************************************************************************/
@ -51,7 +56,7 @@ static TS_LED_INFO LED;
void LED_Init(void)
/******************************************************************************/
{
SFRADDR = P0_OE;
SFRADDR = P0_OE; //Set P02 - P05 Output.
SFRDATA = 0x3C;
SFRADDR = MFP_CTL0; //Set P02¡¢P03 As GPIO.
@ -60,9 +65,14 @@ void LED_Init(void)
SFRADDR = MFP_CTL1; //Set P06 As Hall.
SFRDATA &=~ 0x0F;
SFRADDR = P0_DRV0; //Set P02 - P05 ÏÞÁ÷µç×è400¦¸
SFRDATA = 0xff;
SFRADDR = P0_DRV0; //Set P02 - P05 ÏÞÁ÷µç×è400¦¸.
SFRDATA = LED_DRV_LIMIT_SET;
Display_RSta = LED_OFF;
Display_GSta = LED_OFF;
Display_YSta = LED_OFF;
Display_BSta = LED_OFF;
LEDR_OFF();
LEDG_OFF();
LEDB_OFF();
@ -97,7 +107,8 @@ static void LED_On(uint8_t LedId)
LEDB_ON();
break;
default: break;
default:
break;
}
}
@ -129,7 +140,8 @@ static void LED_Off(uint8_t LedId)
LEDB_OFF();
break;
default: break;
default:
break;
}
}

View File

@ -47,7 +47,7 @@ void main(void )
#ifdef _DEBUG_MAIN
printf("System Init.\r\n");
printf("System Init.Ver:%2x%2x%2x\r\n",(uint16_t)FW_VER0, (uint16_t)FW_VER1, (uint16_t)FW_VER2);
#endif

View File

@ -32,9 +32,9 @@
Variables definitions
\******************************************************************************/
uint8_t Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
uint8_t Decnt_SleepDelay;
bit Enter_Sleep_Cnt_Restart_Flag = 0;
bit Enter_Sleep_Cnt_Restart_Flag;
/******************************************************************************\
Functions definitions
@ -100,6 +100,8 @@ void WakeUp_Init_Set(void)
#endif
Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
}
/*

View File

@ -84,6 +84,16 @@ void System_Init(void)
#endif
#if WTG_ENABLE
/*
WDT_TM = 012
wdtrel.7=1 Sys_Fre/12*32wdtrel.7=0 Sys_Fre/12*2.
Sys_Fre = 12MHzwdtrel.7=0
(1/Sys_Fre)*12*2*256~(1/Sys_Fre)*12*2*256*128 = 5ms~65ms
Sys_Fre = 12MHzwdtrel.7=1
(1/Sys_Fre)*12*32*256~(1/Sys_Fre)*12*32*256*128 = 80ms~1s
*/
/* 65ms */
WDTREL = 0x00; //WDTPS = 0,wdt_f = wdt_f1/2;WDTPS = 1,wdt_f = wdt_f1/32;
/* 1s */
@ -133,7 +143,7 @@ void System_Init(void)
#endif
#ifdef PWM_ENABLE
PWM_Init_Set(3,PWM_REL_VALUE);
PWM_Init_Set(PWM_CLKFRE_SET,PWM_RELOAD_SET);
#endif
#ifdef LED_DISPLAY
@ -155,6 +165,26 @@ void System_Init(void)
Systerm_State.Next_State = POWER_ON_STATE;
}
#if 0
/*
*******************************************************************************
* void Sys_Clk_Adjust(uint8_t Clk_Div)
*
* Description : System Clock Division Setting.
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Sys_Clk_Adjust(uint8_t Clk_Div)
{
CLKPRE = Clk_Div;
}
#endif
/*
*******************************************************************************
* void EX0_isr(void ) interrupt Interrupt_Vector_IE0
@ -173,9 +203,7 @@ void System_Init(void)
void EX0_isr(void) interrupt Interrupt_Vector_IE0
{
#if SLEEP_ENABLE
Enter_Sleep_Cnt_Restart_Flag = 1;
#endif
}
@ -199,9 +227,7 @@ void EX2_isr(void) interrupt Interrupt_Vector_IE2
IRQ_FLAG3 = 0x3C;
#if SLEEP_ENABLE
Enter_Sleep_Cnt_Restart_Flag = 1;
#endif
}
@ -226,9 +252,7 @@ void EX3_isr(void) interrupt Interrupt_Vector_IE3
IRQ_FLAG10 = Standby_Tmr_WkUp;
#if SLEEP_ENABLE
Enter_Sleep_Cnt_Restart_Flag = 1;
#endif
}

View File

@ -34,23 +34,33 @@
Variables definitions
\******************************************************************************/
uint8_t cnt_sys_tim_5ms = 0;
uint8_t cnt_sys_tim_10ms = 0;
uint8_t cnt_sys_tim_250ms = 0;
uint16_t cnt_sys_tim_100ms = 0;
uint8_t cnt_sys_tim_1s = 0;
uint8_t cnt_sys_tim_5ms;
bit F_sys_tim_1ms = 0;
bit F_sys_tim_5ms = 0;
bit F_sys_tim_10ms = 0;
bit F_sys_tim_250ms = 0;
bit F_sys_tim_100ms = 0;
bit F_sys_tim_1s = 0;
uint8_t cnt_sys_tim_10ms;
uint8_t F_sys_tim_tick = 0;
bit F_sys_tim1_tick = 0;
uint8_t cnt_sys_tim_250ms;
bit F_sys_tim2_tick = 0;
uint16_t cnt_sys_tim_100ms;
uint8_t cnt_sys_tim_1s;
bit F_sys_tim_1ms;
bit F_sys_tim_5ms;
bit F_sys_tim_10ms;
bit F_sys_tim_250ms;
bit F_sys_tim_100ms;
bit F_sys_tim_1s;
uint8_t F_sys_tim_tick;
bit F_sys_tim1_tick;
bit F_sys_tim2_tick;
/******************************************************************************\
Functions definitions

View File

@ -51,9 +51,9 @@ bit Uart0_RX_Finish_Flag = 0;
#if UART1_ENABLE
idata uint8_t RX1_Buffer[COM1_Data_Lenth] = 0; //½ÓÊÕ»º³å
idata uint8_t RX1_Buffer[COM1_Data_Lenth]; //½ÓÊÕ»º³å
bit Uart1_RX_Finish_Flag = 0;
bit Uart1_RX_Finish_Flag;
#endif
@ -100,15 +100,7 @@ void Uart0SendData(uint8_t Txdata)
busy0 = 1;
// SFRADDR = MFP_CTL0; //Set P01 As TX.
// SFRDATA &=~ 0x0C;
// SFRDATA |= 0x04;
S0BUF = Txdata;
// SFRADDR = MFP_CTL0; //Set P01 As RX.
// SFRDATA &=~ 0x0C;
// SFRDATA |= 0x0C;
S0BUF = Txdata;
}
#endif
@ -200,7 +192,7 @@ void uart0_Interrupt(void) interrupt Interrupt_Vector_RI_TI
#if UART1_ENABLE
bit busy1 = 0;
bit busy1;
/*
*******************************************************************************
@ -280,13 +272,13 @@ void Uart1SendString(char *s)
}
#endif
uint8_t Rx1Status = 0;
uint8_t Rx1Status;
uint8_t RX1_Cnt = 0;
uint8_t RX1_Cnt;
#if XUANHENG
uint16_t RX1DataLen = 0;
uint16_t RX1DataLen;
#endif

View File

@ -29,8 +29,11 @@
/******************************************************************************\
Variables definitions
\******************************************************************************/
#if QUEUE
idata SeqQueue Queue;
#endif
/******************************************************************************\
Functions definitions
\******************************************************************************/

View File

@ -30,15 +30,11 @@
#include "discharge_module.h"
#include "led.h"
#include "vox_module.h"
#include "display_ui.h"
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define LED_ON_CNT 100 //10s
#define LED_PRO_TIM 40
#define LED_OFF_CNT 1
/******************************************************************************\
Variables definitions
@ -46,337 +42,16 @@
s_sys_state Systerm_State = {SLEEP_STATE,AWAKE_STATE,AWAKE_STATE};
uint8_t Step_Cnt = 0;
uint8_t Step_Cnt;
uint8_t LED_On_Timer = 0; //led亮时间计时
uint8_t Power_index;
bit LED_On_Flag = 0;
bit Wkup_Earphone_Flag; //保护消失后,需要升压唤醒耳机标志位
bit Wkup_Earphone_Flag = 0; //保护消失后,需要升压唤醒耳机标志位
uint8_t Wkup_Source_Flag = 0; //唤醒源标志
#ifdef PWM_ENABLE
uint8_t Breathing_Light_Cnt = 0;
#endif
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*****************************************************************************
* Function : void LED_Display_App(void)
* Description : 100ms调用周期
* Input : None
* Output : None
* Return : None
* Note : None
*****************************************************************************/
/*
11Hz闪烁
2
1使4s后灭1Hz闪4s后灭
2使4s后灭
34s后灭1Hz闪4s后灭
4
*/
#ifdef LED_DISPLAY
void LED_Breating_Light_Off(void)
{
#ifdef PWM_ENABLE
LED_R_BREATHING_LIGHT(SHOW_NONE);
LED_G_BREATHING_LIGHT(SHOW_NONE);
LED_Y_BREATHING_LIGHT(SHOW_NONE);
LED_B_BREATHING_LIGHT(SHOW_NONE);
#endif
}
void LED_Display_App(void)
{
#ifdef NTC_ENABLE
static bit LED_On_Flag1;
#endif
static bit LED_On_Chg_Flag;
static bit LED_On_ChgDone_Flag;
static bit Disp_Bat_Lev;
if( LED_On_Flag )
{
LED_On_Flag = 0;
LED_On_Timer = 0;
offset_bat_level = 0;
Display_AllOff();
#if SLEEP_ENABLE
Enter_Sleep_Cnt_Restart_Flag = 1;
#endif
return;
}
#ifdef NTC_ENABLE
/*NTC保护4灯一直快闪(2Hz)*/
if( CHG_NTC_Pro_Flag || Boost_NTC_Pro_Flag || ( Vox_Output_Short_Flag && !Vox_Ocp_Flag ) )
{
if( !LED_On_Flag1 )
{
LED_On_Flag1 = 1;
LED_On_Flag = 1;
}
else
{
if( Display_RSta != LED_FLASH )
{
Display_Red_Flash(20,10);
}
if( Display_GSta != LED_FLASH )
{
Display_Green_Flash(20,10);
}
if( Display_YSta != LED_FLASH )
{
Display_Yellow_Flash(20,10);
}
if( Display_BSta != LED_FLASH )
{
Display_Blue_Flash(20,10);
}
if( Vox_Output_Short_Flag )
{
if( LED_On_Timer < LED_PRO_TIM )
{
LED_On_Timer++;
}
else
{
Vox_Ocp_Flag = 1;
LED_On_Flag = 1;
}
}
}
return;
}
/* 保护消失后需要开启5V升压一段时间。 */
if( LED_On_Flag1 )
{
LED_On_Flag1 = 0;
LED_On_ChgDone_Flag = 0;
LED_On_Chg_Flag = 0;
CoverEvent_Flg_led = 0;
Earphone_Chg_Flag = 0;
Wkup_Earphone_Flag = 1;
}
#endif
if (ChgStatus != CHG_NONE)
{
if ( ChgStatus == CHG_STA_COMPLETED ) // 充电完成4个LED常亮
{
if( !LED_On_ChgDone_Flag )
{
LED_On_ChgDone_Flag = 1;
LED_On_Chg_Flag = 0;
LED_Breating_Light_Off();
return;
}
Display_AllOn();
}
else
{
if( !LED_On_Chg_Flag )
{
LED_On_Chg_Flag = 1;
LED_On_ChgDone_Flag = 0;
LED_On_Flag = 1;
#ifdef PWM_ENABLE
Breathing_Light_Cnt = LED_R;
#endif
}
else
{
#ifdef PWM_ENABLE
if( LED_On_Timer < LED_OFF_CNT )
{
LED_On_Timer++;
switch ( Breathing_Light_Cnt )
{
case LED_R:
if( Display_RSta != LED_BREATHING_LIGHT )
{
LED_R_BREATHING_LIGHT(SLOW_DARK);
}
break;
case LED_G:
if( Display_GSta != LED_BREATHING_LIGHT )
{
LED_G_BREATHING_LIGHT(SLOW_DARK);
}
break;
case LED_Y:
if( Display_YSta != LED_BREATHING_LIGHT )
{
LED_Y_BREATHING_LIGHT(SLOW_DARK);
}
break;
case LED_B:
if( Display_BSta != LED_BREATHING_LIGHT )
{
LED_B_BREATHING_LIGHT(SLOW_DARK);
}
break;
default:
break;
}
}
else
if( LED_On_Timer < 15 ) //LED显示1.5s。
{
LED_On_Timer++;
}
else
{
LED_On_Timer = 0;
Breathing_Light_Cnt++;
if( Breathing_Light_Cnt >= LED_ID_MAX )
{
Breathing_Light_Cnt = LED_R;
}
}
#endif
}
}
CoverEvent_Flg_led = 0;
Earphone_Chg_Flag = 0;
Key_Press_short_irq = 0;
Disp_Bat_Lev = 1;
}
else
{
if( LED_On_Chg_Flag )
{
LED_On_Chg_Flag = 0;
LED_Breating_Light_Off();
LED_On_Flag = 1;
Wkup_Earphone_Flag = 1;
return;
}
if( CoverEvent_Flg_led || Disp_Bat_Lev || Earphone_Chg_Flag || Key_Press_short_irq )
{
if( LED_On_Timer < LED_OFF_CNT )
{
LED_On_Timer++;
}
else
if( LED_On_Timer < LED_ON_CNT ) //LED显示10s后灭。
{
LED_On_Timer++;
/*电量显示25%电量左侧第1个灯闪25%-50%电量2个灯常亮50%-75%电量3个灯常亮75%-100%电量4个灯常量。*/
if( F_batlevel_25p )
{
if (Display_RSta != LED_KEEP_FLASHING)
{
Display_Red_KeepFlash(100);
Display_Green_Off();
Display_Yellow_Off();
Display_Blue_Off();
}
}
else
if( F_batlevel_50p )
{
Display_Red_On();
Display_Green_On();
Display_Yellow_Off();
Display_Blue_Off();
}
else
if( F_batlevel_75p )
{
Display_Red_On();
Display_Green_On();
Display_Yellow_On();
Display_Blue_Off();
}
else
{
Display_AllOn();
}
}
else
{
CoverEvent_Flg_led = 0;
Disp_Bat_Lev = 0;
Earphone_Chg_Flag = 0;
Key_Press_short_irq = 0;
Display_AllOff(); //清LED显示
}
}
}
}
#endif
/*
*******************************************************************************
* void ADC_GetValue_Machine(void)
@ -469,7 +144,6 @@ void System_Drivers_Machine(void)
* Return : None
* Note : None
*****************************************************************************/
uint8_t Power_index = 0;
void SysTem_State_Machine(void)
{
@ -636,7 +310,8 @@ void SysTem_State_Machine(void)
#ifdef _DEBUG_MAIN
printf("Decnt_SleepDelay Reload.\r\n");
#endif
}
}
}
else
{
@ -714,6 +389,7 @@ void UserAPP(void)
case 2:
SysTem_State_Machine(); //ÓÃÓÚÓ¦ÓóÌÐò
Step_Cnt = 0;
break;

View File

@ -29,16 +29,15 @@
#include "sys_tim.h"
#include "adc.h"
#include "userapp.h"
#include "display_ui.h"
bit Vox_Vout_Enable = OFF; //Vox功率输出标志位
bit Vox_Vout_Enable; //Vox功率输出标志位
bit Earphone_Chg_Flag = 0; //耳机出入盒标志位
bit Boost_Open_Flag;
bit Boost_Open_Flag = 0;
uint8_t Vox_Type;
uint8_t Vox_Type = 0xFF;
bit Vox_Output_Short_Flag = 0;
bit Vox_Output_Short_Flag;
#if VOX_ENABLE
@ -63,7 +62,7 @@ bit Vox_Output_Short_Flag = 0;
\******************************************************************************/
#if VOX_FOLLOW_CHG
xdata uint16_t Vox_Follow_Chg_Debounce = 0;
xdata uint16_t Vox_Follow_Chg_Debounce;
g_Vox_Fllow_Chg_Cfg xdata Vox_Fllow_Chg;
@ -73,62 +72,62 @@ e_Vox_Follow_Chg_Sta Follow_Chg_Sta;
#ifdef VOX_RX
xdata uint8_t Vox_Get_Vbat_Flag[2] = {0}; //耳机配对状态VOL:低4bitVOR:高4bit。0是无效1是正在配对2是配对成功3不处理保持当前状态。
xdata uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态VOL:低4bitVOR:高4bit。0是无效1是正在配对2是配对成功3不处理保持当前状态。
xdata uint8_t Vox_Get_BES_Addr_Flag[2] = {0};
xdata uint8_t Vox_Get_BES_Addr_Flag[2];
//idata uint8_t BES_Addr[6] = {0}; //蓝牙耳机地址Vox_Bes_Addr[0][6]VOLVox_Bes_Addr[1][6]VOR
#endif
uint8_t EarPhone_Num = 0;
uint8_t EarPhone_Num;
bit Vox_Ocp_Flag = 0;
bit Vox_Ocp_Flag;
bit OpenCover_TX_Cmd_Flag = 0;
bit OpenCover_TX_Cmd_Flag;
#if XUANHENG
idata uint8_t Vox_Pairing_State[2] = {0}; //耳机配对状态0是无效1是正在配对2是配对成功3不处理保持当前状态。
idata uint8_t Vox_Pairing_State[2]; //耳机配对状态0是无效1是正在配对2是配对成功3不处理保持当前状态。
idata uint8_t Vox_Set_BES_Addr_Flag[2] = {0};
idata uint8_t Vox_Set_BES_Addr_Flag[2];
idata uint8_t BES_Addr[6] = {0}; //蓝牙耳机地址Vox_Bes_Addr[0][6]VOLVox_Bes_Addr[1][6]VOR
idata uint8_t BES_Addr[6]; //蓝牙耳机地址Vox_Bes_Addr[0][6]VOLVox_Bes_Addr[1][6]VOR
idata uint8_t Random_Data[8] = {0};
idata uint8_t Random_Data[8];
idata uint8_t Bes_Bet_Level[2] = {0}; //对耳电池电量信息Bes_Bet_Level[0]左耳Bes_Bet_Level[1]:右耳
idata uint8_t Bes_Bet_Level[2]; //对耳电池电量信息Bes_Bet_Level[0]左耳Bes_Bet_Level[1]:右耳
idata uint8_t Bes_Chg_Full[2] = {0}; //对耳硬件是否满电0非满电1满电。
idata uint8_t Bes_Chg_Full[2]; //对耳硬件是否满电0非满电1满电。
idata uint8_t Tws_Paired_Record[2] = {0}; //TWS配对记录0有TWS配对记录1没有TWS配对记录
idata uint8_t Tws_Paired_Record[2]; //TWS配对记录0有TWS配对记录1没有TWS配对记录
idata uint8_t Phone_Paired_Record[2] = {0}; //手机配对记录0有与手机配对记录1没有和手机配对记录。
idata uint8_t Phone_Paired_Record[2]; //手机配对记录0有与手机配对记录1没有和手机配对记录。
idata uint8_t Bes_OTA_State[2] = {0}; //耳机静默升级状态10没有
idata uint8_t Bes_OTA_State[2]; //耳机静默升级状态10没有
idata uint8_t Bes_Set_SN_State[2] = {0}; //耳机应答仓写入SN是否成功。1成功0失败
idata uint8_t Bes_Set_SN_State[2]; //耳机应答仓写入SN是否成功。1成功0失败
idata uint8_t Bes_In_Pair_State[2] = {0}; //耳机进入配对状态标志位
idata uint8_t Bes_In_Pair_State[2]; //耳机进入配对状态标志位
idata uint8_t Vox_Clear_Pair_Flag[2] = {0};
idata uint8_t Vox_Clear_Pair_Flag[2];
bit Vol_Bes_Addr_Flag = 0;
bit Vol_Bes_Addr_Flag;
bit Vor_Bes_Addr_Flag = 0;
bit Vor_Bes_Addr_Flag;
idata uint8_t SN_Num[22] = {0}; //SN码需要从OTP的固定位置获取。
idata uint8_t SN_Num[22]; //SN码需要从OTP的固定位置获取。
idata uint8_t SN_Num_Start = 0; //SN码发送起始位置有开盖动作时清零。
idata uint8_t SN_Num_Start; //SN码发送起始位置有开盖动作时清零。
bit gShip_Mode_Flag = 0; //船运模式标志位0正常关机1船运模式
bit gShip_Mode_Flag; //船运模式标志位0正常关机1船运模式
#else
idata uint8_t Net_Info[2][13] = {0};
idata uint8_t Net_Info[2][13];
idata uint8_t MAC_Addr[2][18] = {0};
idata uint8_t MAC_Addr[2][18];
xdata uint8_t Earphone_Vbat[2] = 0; //对耳电量
xdata uint8_t Earphone_Vbat[2]; //对耳电量
#endif
@ -172,7 +171,7 @@ xdata uint8_t Earphone_Vbat[2] = 0; //
SFRADDR = COMM_CON; //Vox通讯电平选择3.0V打开50K上拉电阻。
SFRDATA &= ~0x0D;
SFRDATA |= VOX_COM_VOLTAGE_SET | VOX_PULL_UP_SET;
SFRDATA |= VOX_COMM_VOLTAGE_SET | VOX_COMM_PULL_UP_SET;
break;
@ -181,7 +180,7 @@ xdata uint8_t Earphone_Vbat[2] = 0; //
COMM_CTL |= Vol_EN_COMR | Vol_SW_MD; //开启VOX通讯使能选择寄存器通讯模式。
SFRADDR = COMM_CON; //Vox通讯电平选择5.0V关闭50K上拉电阻。
SFRDATA &= ~ VOX_PULL_UP_SET;
SFRDATA &= ~ VOX_COMM_PULL_UP_SET;
SFRDATA |= Vox_COMM_PULL_Vol_5_0;
break;
@ -259,7 +258,7 @@ xdata uint8_t Earphone_Vbat[2] = 0; //
SFRADDR = COMM_CON; //Vox通讯电平选择3.0V打开50K上拉电阻。
SFRDATA &= ~0x0D;
SFRDATA |= VOX_COM_VOLTAGE_SET | VOX_PULL_UP_SET;
SFRDATA |= VOX_COMM_VOLTAGE_SET | VOX_COMM_PULL_UP_SET;
break;
@ -268,7 +267,7 @@ xdata uint8_t Earphone_Vbat[2] = 0; //
COMM_CTL |= Vor_EN_COMR | Vor_SW_MD; //开启VOX通讯使能选择寄存器通讯模式。
SFRADDR = COMM_CON; //Vox通讯电平选择5.0V关闭50K上拉电阻。
SFRDATA &= ~ VOX_PULL_UP_SET;
SFRDATA &= ~ VOX_COMM_PULL_UP_SET;
SFRDATA |= Vox_COMM_PULL_Vol_5_0;
break;
@ -346,7 +345,7 @@ xdata uint8_t Earphone_Vbat[2] = 0; //
SFRADDR = COMM_CON; //Vox通讯电平选择3.0V打开50K上拉电阻。
SFRDATA &= ~0x0D;
SFRDATA |= VOX_COM_VOLTAGE_SET | VOX_PULL_UP_SET;
SFRDATA |= VOX_COMM_VOLTAGE_SET | VOX_COMM_PULL_UP_SET;
break;
@ -355,7 +354,7 @@ xdata uint8_t Earphone_Vbat[2] = 0; //
COMM_CTL |= Vor_EN_COMR | Vol_EN_COMR | Vor_SW_MD | Vol_SW_MD; //开启VOX通讯使能选择寄存器通讯模式。
SFRADDR = COMM_CON; //Vox通讯电平选择5.0V关闭50K上拉电阻。
SFRDATA &= ~ VOX_PULL_UP_SET;
SFRDATA &= ~ VOX_COMM_PULL_UP_SET;
SFRDATA |= Vox_COMM_PULL_Vol_5_0;
break;
@ -483,7 +482,7 @@ void Vox_Det_Machine(void)
if( CoverStatus == CLOSE ) //1、关盖关闭COM_CTRL显示灯效。无需查询Loadon、IOFF状态无论耳机是否在仓Vox 5V输出。
{
Earphone_Chg_Flag = 0; //关盖取消耳机入盒灯效,显示关盖灯效。
Earphone_Chg_Flag_led = 0; //关盖取消耳机入盒灯效,显示关盖灯效。
Cover_Close_Flag = 1;
@ -538,7 +537,7 @@ void Vox_Det_Machine(void)
CoverEvent_Flg = 0;
}
/* 开关盖后VOX先升压5.2V 一段时间唤醒耳机后转入ADT获取盒内耳机数量。 */
if( Vox_Voltage_Hold_Timer < VOX_OPEN_VOUT_5V_DEBOUNCE ) //开盖后5V N00ms。
if( Vox_Voltage_Hold_Timer < HALL_OPEN_VOX_5V_DEBOUNCE ) //开盖后5V N00ms。
{
Vox_Voltage_Hold_Timer++;
@ -586,7 +585,7 @@ void Vox_Det_Machine(void)
if( Cover_Open_Flag ) /*开盖后5V持续N00ms后0V持续N00ms保证耳机能被唤醒之后发开盖码。*/
{
#if 1
if( Vox_TX_Timer < VOX_OPEN_VOUT_0V_DEBOUNCE ) //转0V N00ms
if( Vox_TX_Timer < HALL_OPEN_VOX_0V_DEBOUNCE ) //转0V N00ms
{
VOX_EN_Type(VOX_PD1K_Mode);
@ -603,11 +602,8 @@ void Vox_Det_Machine(void)
{
#ifdef VOX_TX
#if JIELI
HandleTxCommand(VHOUSE_CMD_OPEN_BOX,VOL_CHAN); //左耳发开盖指令,区分耳机通道。
HandleTxCommand(VHOUSE_CMD_OPEN_BOX,VOL_CHAN); //左耳发开盖指令,区分耳机通道。
#elif ZHONGKE
HandleTxCommand(VHOUSE_CMD_GET_VBAT,VOL_CHAN); //左耳发开盖指令,区分耳机通道。
#elif XUANHENG
HandleTxCommand(CMD_HEARTBEAT,VOL_CHAN);
@ -619,14 +615,10 @@ void Vox_Det_Machine(void)
{
#ifdef VOX_TX
#if JIELI
HandleTxCommand(VHOUSE_CMD_OPEN_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。
HandleTxCommand(VHOUSE_CMD_OPEN_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。
#elif ZHONGKE
HandleTxCommand(VHOUSE_CMD_GET_VBAT,VOR_CHAN); //右耳发开盖指令,区分耳机通道。
#elif XUANHENG
HandleTxCommand(CMD_HEARTBEAT,VOR_CHAN);
#endif
@ -670,7 +662,7 @@ void Vox_Det_Machine(void)
{
if ( CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ) )
{
Earphone_Chg_Flag = 1;
Earphone_Chg_Flag_led = 1;
#ifdef LED_DISPLAY
LED_On_Flag = 1;
#endif
@ -726,7 +718,7 @@ void Vox_Det_Machine(void)
Cover_Close_Flag1 = 1;
if( Vox_Voltage_Hold_Timer <= VOX_CLOSE_5V_HOLD_CNT ) //关盖Boost VOUT 5V保持时间。
if( Vox_Voltage_Hold_Timer <= HALL_CLOSE_VOX_5V_HOLD_CNT ) //关盖Boost VOUT 5V保持时间。
{
Vox_Voltage_Hold_Timer++;
@ -748,17 +740,11 @@ void Vox_Det_Machine(void)
#ifdef VOX_TX
#if JIELI
HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOL_CHAN); //左耳发开盖指令,区分耳机通道。
HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOL_CHAN); //左耳发开盖指令,区分耳机通道。
#elif ZHONGKE
HandleTxCommand(VHOUSE_CMD_CLOSE_WINDOW,VOL_CHAN); //左耳发开盖指令,区分耳机通道。
HandleTxCommand(VHOUSE_CMD_CLOSE_WINDOW,VOL_CHAN); //左耳发开盖指令,区分耳机通道。
#elif XUANHENG
HandleTxCommand(CMD_HEARTBEAT,VOL_CHAN);
#endif
#endif
@ -769,17 +755,11 @@ void Vox_Det_Machine(void)
#ifdef VOX_TX
#if JIELI
HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。
HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。
#elif ZHONGKE
HandleTxCommand(VHOUSE_CMD_CLOSE_WINDOW,VOR_CHAN); //右耳发开盖指令,区分耳机通道。
HandleTxCommand(VHOUSE_CMD_CLOSE_WINDOW,VOR_CHAN); //右耳发开盖指令,区分耳机通道。
#elif XUANHENG
HandleTxCommand(CMD_HEARTBEAT,VOR_CHAN);
#endif
#endif
@ -797,17 +777,11 @@ void Vox_Det_Machine(void)
#ifdef VOX_TX
#if JIELI
HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOL_CHAN); //左耳发开盖指令,区分耳机通道。
HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOL_CHAN); //左耳发开盖指令,区分耳机通道。
#elif ZHONGKE
HandleTxCommand(VHOUSE_CMD_GET_TWS_BTADDR,VOL_CHAN); //左耳发开盖指令,区分耳机通道。
HandleTxCommand(VHOUSE_CMD_GET_TWS_BTADDR,VOL_CHAN); //左耳发开盖指令,区分耳机通道。
#elif XUANHENG
HandleTxCommand(CMD_TWS_GET_BTADDR,VOL_CHAN);
#endif
#endif
@ -818,17 +792,11 @@ void Vox_Det_Machine(void)
#ifdef VOX_TX
#if JIELI
HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOR_CHAN); //右耳发开盖指令,区分耳机通道。
HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOR_CHAN); //右耳发开盖指令,区分耳机通道。
#elif ZHONGKE
HandleTxCommand(VHOUSE_CMD_GET_TWS_BTADDR,VOR_CHAN); //右耳发开盖指令,区分耳机通道。
HandleTxCommand(VHOUSE_CMD_GET_TWS_BTADDR,VOR_CHAN); //右耳发开盖指令,区分耳机通道。
#elif XUANHENG
HandleTxCommand(CMD_TWS_GET_BTADDR,VOR_CHAN);
#endif
#endif
@ -926,13 +894,9 @@ void Vox_Det_Machine(void)
#ifdef VOX_TX
#if XUANHENG
HandleTxCommand(CMD_SHUT_DOWN,VOL_CHAN); //左耳发关机指令,区分耳机通道。
#else
HandleTxCommand(VHOUSE_CMD_PWROFF,VOL_CHAN); //左耳发关机指令,区分耳机通道。
HandleTxCommand(VHOUSE_CMD_PWROFF,VOL_CHAN); //左耳发关机指令,区分耳机通道。
#endif
#endif
@ -943,13 +907,9 @@ void Vox_Det_Machine(void)
#ifdef VOX_TX
#if XUANHENG
HandleTxCommand(CMD_SHUT_DOWN,VOR_CHAN); //右耳发关机指令,区分耳机通道。
#else
HandleTxCommand(VHOUSE_CMD_PWROFF,VOR_CHAN); //右耳发关机指令,区分耳机通道。
HandleTxCommand(VHOUSE_CMD_PWROFF,VOR_CHAN); //右耳发关机指令,区分耳机通道。
#endif
#endif
@ -997,7 +957,7 @@ void Vox_Det_Machine(void)
{
if( CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ) )
{
Earphone_Chg_Flag = 1;
Earphone_Chg_Flag_led = 1;
#ifdef LED_DISPLAY
LED_On_Flag = 1;
#endif
@ -1110,9 +1070,9 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
{
n_Vox_Fllow_Chg->IVox_Init[VOR_CHAN] = g_pmu_Adc_Ivor;
n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOR_CHAN] = ( g_pmu_Adc_Ivor / 5 ) << 2; //Ivox_Threshold_Neg = IVox_Init * 80%
n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOR_CHAN] = IVOR_Threshold_Neg(g_pmu_Adc_Ivor); //Ivox_Threshold_Neg = IVox_Init * 80%
n_Vox_Fllow_Chg->IVox_Threshold_Pos[VOR_CHAN] = g_pmu_Adc_Ivor << 1; //Ivox_Threshold_Neg = IVox_Init * 2
n_Vox_Fllow_Chg->IVox_Threshold_Pos[VOR_CHAN] = IVOR_Threshold_Pos(g_pmu_Adc_Ivor); //Ivox_Threshold_Neg = IVox_Init * 2
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta1,VOR Chging(Ivor:%dmA).(line:%d)\r\n",(u16)g_pmu_Adc_Ivor,(uint16_t)__LINE__);
#endif
@ -1123,9 +1083,9 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
{
n_Vox_Fllow_Chg->IVox_Init[VOL_CHAN] = g_pmu_Adc_Ivol;
n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOL_CHAN] = ( g_pmu_Adc_Ivol / 5 ) << 2; //Ivox_Threshold_Neg = IVox_Init * 80%
n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOL_CHAN] = IVOL_Threshold_Neg(g_pmu_Adc_Ivol); //Ivox_Threshold_Neg = IVox_Init * 80%
n_Vox_Fllow_Chg->IVox_Threshold_Pos[VOL_CHAN] = g_pmu_Adc_Ivol << 1; //Ivox_Threshold_Neg = IVox_Init * 2
n_Vox_Fllow_Chg->IVox_Threshold_Pos[VOL_CHAN] = IVOL_Threshold_Pos(g_pmu_Adc_Ivol); //Ivox_Threshold_Neg = IVox_Init * 2
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta1,VOL Chging(Ivol:%dmA).(line:%d)\r\n",(u16)g_pmu_Adc_Ivol,(uint16_t)__LINE__);
#endif
@ -1621,7 +1581,9 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select)
{
uint16_t dataLen = 0;
uint8_t tx_pData[COM1_Data_Lenth] = 0;
uint8_t i = 0;
#if JIELI