更改内容:1、优化ADC采样逻辑,更改在ADC中断中采样为在主程序中轮询采样,减小系统开销;

2、更改NTC保护相关逻辑,由ADC电压值更改为ADC码值;
3、优化Boost放电逻辑;
4、更改灯效显示功能;
5、优化双向通讯功能;
6、其它优化。
This commit is contained in:
Alex xu 2024-12-27 11:05:00 +08:00
parent 4ce02a9f64
commit 075256bef7
31 changed files with 1697 additions and 1336 deletions

Binary file not shown.

View File

@ -1,949 +0,0 @@
:03000000022C9D32
:0F2C9D0075FE7275FF00758E007581B0022CE711
:0F35A7001231F3D2AED2BE122E1C12310080F4BC
:10228F004100F20002AF000002AB000002A9000003
:10229F004100F300029D000002A3000002AD000008
:1022AF0002A7000002A50000029F000002A100008B
:10006E0075FE3175FF8175FE0E43FF107DAB7F303F
:0C007E0012361E75FE3243FF03D2BD2275
:10342600900000EFF04408FD7F311232BA900000A0
:0F343600E09000F3F075A38175FE3243FF012291
:0A35FB0075A38275FE3243FF022221
:03006B000228D98F
:1028D900C0E0C0F0C083C082C0D075D000C000C0C5
:0D28E90001C002C003C004C005C006C00746
:1028F600900048E4F0E5FEF0E5A420E0030229E9B3
:102906007F3512362578AB760008A6077F36123655
:1029160025EF540378AB46F608E6F618E6FE08E619
:10292600FF7C097DC4121FA8780A121F4678ABA641
:102936000608A6079000F3E0121F82295D002970A1
:1029460001297902298C03299F0429B20529C50684
:1029560029D407000029E978ABE6FE08E67802CE1E
:10296600C313CE13D8F9799E807578ACE625E07945
:10297600B0805378ABE6FE08E67803C333CE33CE99
:10298600D8F979A4805978ABE6FE08E67802C33315
:10299600CE33CED8F979AE804678ABE6FE08E67837
:1029A60002C333CE33CED8F979A8803378ABE6FEAE
:1029B60008E67802C333CE33CED8F979A6802078DC
:1029C600ACE625E079A0F718E63319F7801578AB61
:1029D600E6FE08E67802CEC313CE13D8F979A2F73D
:1029E600EE19F7E5A430E1347F3712362578A9765B
:1029F6000008A6077F38123625EF540378A946F655
:102A060008E6F618E6FE08E6FF7C097DC4121FA854
:102A1600780A121F4678A9A60608A60775A40F907D
:052A26000048E0F5FE90
:102A2B00D007D006D005D004D003D002D001D000FF
:0B2A3B00D0D0D082D083D0F0D0E032A9
:0722BF00C11EC11F010D0348
:10350500E4780FF67811F6780DE67810F6781276ED
:08351500047D207F400232BA60
:10276600E4FE78A9E6FC08E6FDC39460EC94094013
:10277600037F0022EF700302287ED3ED9477EC945A
:1027860007400302285CED94EFEC94015003022805
:102796005CD3ED947FEC94064022D21C780DE6FFC4
:1027A600137810F6301D11D3ED94B3EC9406400463
:1027B600C21D80047810A607E4FE8070D3ED947FD6
:1027C600EC94065043ED94F7EC9402403BD21D780E
:1027D6000DE6FF7810F6301C13D3ED9449EC940601
:1027E6005004C21C8006EFC3137810F678127604E4
:1027F600300F11D3ED9437EC94035004C20F8004CC
:1028060078127601E4FE8024D3ED94F7EC9402501E
:102816001BD20F78127601301D10ED94CEEC940287
:102826005004C21D800478127604E4FE301A11C3E7
:10283600ED9431EC94075006C21AE4FE80027E0144
:10284600301B2FD3ED941CEC94024006C21BE4FE11
:1028560080207E01801CD3ED9477EC94074006D24D
:102866001A7E01800DD3ED94EFEC94015004D21B37
:102876007E01C218C2198058C21AC21BD3ED94D762
:10288600EC94085031ED9413EC9401402930181063
:10289600ED9493EC94085006C218E4FE80027E0183
:1028A60030192DD3ED943EEC94014006C219E4FE96
:1028B600801E7E01801AD3ED94D7EC94084004D292
:1028C60018800BC3ED9413EC94015002D2197E01CB
:0228D600AF064B
:0128D80022DD
:102E85009000EBE05463600CE4FF1233C2E4780E6B
:102E9500F6C21E227F01122766EF6008E4FF123397
:102EA500C2D21F22C21F9000ECE05407FFBF0607E5
:102EB500D21E780E7602227810E6FD7F221232BAF3
:102EC5007812E6FD7F211232BA780FE6C454F07805
:102ED5001146FD7F231232BA7F011233C2780E7676
:042EE50001C21E22E6
:0422C600C139C13A1F
:10300C009000EBE0FF30E603C23922EF30E205C25C
:10301C0039D23A22304008E4FF1233E4C23922900C
:10302C0000EBE030E503C23922E4FF122766EF60C3
:10303C000AC239E4FF1233E4D21F22C21FD2393044
:10304C003A19780EE6B40113C378B0E6941018E67A
:0C305C00940E4005D239C23A22C239223B
:1034EC00426F78204F70656E2E0D0A00426F782067
:0934FC00436C6F73652E0D0A008C
:0822CA00C13BC13C4100F5FFDE
:1030B700E4900000F09000ECE0FF5420FE90000048
:1030C700F09000F5E06E6030EF30E50E9000F4749C
:1030D70001F07BFF7A3479EC800BE49000F4F07B0D
:1030E700FF7A3479F812198FD23BD23CD23590004F
:0830F70000E09000F5F0D23D6D
:0130FF0022AE
:10322A006C6F6E672032732070726573730D0A00BB
:10323A00737570706572206C6F6E672038732070BA
:10324A00726573730D0A0073686F72742070726509
:05325A0073730D0A0072
:1022D200C127C126C1250118004100EF004100EECF
:0622E200004200F00000C4
:1025DB009000ECE030E4379000F0E475F001121E4F
:1025EB004E9000F0E0FEA3E0FFC39464EE94004035
:1025FB0007202314D2238010C3EF9490EE94014054
:10260B0007202404D224D225D220C221803A3020A4
:10261B0030D23DC220D221C2249000F0E0FEA3E0D4
:10262B00FFD39419EE94005008D227D222D23580D2
:10263B0010C3EF94FAEE94005007302304C223D258
:10264B0026E49000F0F0A3F030213FC22130261495
:10265B00C22678187602E49000EFF07BFF7A32798D
:10266B002A12198F30250FC225781876037BFF7A33
:10267B0032793A12198F302215C222781876017BE3
:10268B00FF7A32795112198F8004E47818F6900092
:10269B00F4E0640160030227657818E664026003C6
:1026AB0002272C9000EFE0C3940150107D017F01B5
:1026BB00122441E4900075F0A3F080529000EEE0FC
:1026CB00D394054004E4F08039900076E0B4010F18
:1026DB00E4FD7F021224419000767402F0802F906B
:1026EB000076E064027027900075E0601A7D017F30
:1026FB0002122441E4900075F0A3F09000EFF07803
:10270B0018F67F03022D2CE4FD7F0112244190006B
:10271B00EFE0D3941440349000EEE004F0E4A3F027
:10272B00227818E6640370329000EFE0FFC3941E2A
:10273B005020EF540125E060047D0180099000EFEB
:10274B00E030E007E4FD7F031224419000EFE0044A
:0A275B00F022E47818F69000EFF089
:012765002251
:1022E80041007E0041007D0041007F0041007C00EC
:0F35B60075FE0B75FF0FC290C291C293C2922295
:1034B800EF14600D14600D14600D2403700BD2908E
:0A34C80022D29122D29222D2932246
:05344500900000E0FF13
:10344A00EF14600D14600D14600D2403700BC2900C
:0A345A0022C29122C29222C29322E4
:102F4C00E4FF74802FF582E43400F583E4F074849C
:102F5C002FF582E43400F583E4F0EF25E02488F5C6
:102F6C0082E43400F583E4F0A3F0EF25E02490F53F
:102F7C0082E43400F583E4F0A3F0EF25E02498F527
:102F8C0082E43400F583E4F0A3F0EF25E024A0F50F
:0F2F9C0082E43400F583E4F0A3F00FEFB404A354
:012FAB002203
:102EE900AC0774802CF582E43400F583EDF0EAC375
:102EF90013FEEB13FFEC25E02488F582E43400F59A
:102F090083EEF0A3EFF0AF03EC25E02490F582E423
:102F19003400F583EAF0A3EFF0900005E0FEA3E0AA
:102F2900FFEC25E02498F582E43400F583EEF0A364
:102F3900EFF0EC25E024A0F582E43400F583E4F019
:032F4900A3F022D0
:10317F0074802FF582E43400F583EDF074842FF51D
:10318F0082E43400F583EBF0EF25E02488F582E448
:10319F003400F583E4F0A37469F0EF25E024A0F583
:0B31AF0082E43400F583E4F0A3F0227A
:1015B700E4900000F0F0900000E0FFC394044003C3
:1015C7000218F974802FF582E43400F583E0602275
:1015D70024FE60241470030216C114700302173826
:1015E70024036003021895900000E0FF1234B8024C
:1015F7001895123445021895900000E0FF25E02465
:1016070088F582E43400F583E0FCA3E0FDEF25E0F4
:1016170024A0F582E43400F583E0FEA3E0C39DEE49
:101627009C50051234B88003123445900000E0FF47
:1016370025E02490F582E43400F583E0FCA3E0FD87
:10164700EF25E024A0F582E43400F583E0FEA3E073
:10165700C39DEE9C5003021895900000E025E024FE
:10166700A0F582E43400F583E4F0A3F0EF25E0244D
:1016770098F582E43400F583E0FEA3E0D39400EE0E
:1016870094004016900000E025E02498F582E434A9
:1016970000F58374FFF5F0121E4E900000E0FF2561
:1016A700E02498F582E43400F583E0FCA3E04C6085
:1016B7000302189574802F021754900000E0FF254D
:1016C700E02488F582E43400F583E0FCA3E0FDEF35
:1016D70025E024A0F582E43400F583E0FEA3E0D3FF
:1016E7009DEE9C50051234B88003123445900000DB
:1016F700E0FF25E02490F582E43400F583E0FCA3C5
:10170700E0FDEF25E024A0F582E43400F583E0FE58
:10171700A3E0C39DEE9C5003021895900000E025BE
:10172700E024A0F582E43400F583E4F0A3F0021886
:1017370095900000E0FF2484F582E43400F583E00F
:101747007017123406C241900000E02480F582E44D
:101757003400F583E4F0021895900000E0FF24843C
:10176700F582E43400F583E0FE6402704B204114F7
:10177700D241EF25E02488F582E43400F583E4F0D4
:10178700A37469F0900000E0FF25E02488F582E467
:101797003400F583E475F001121E4EEF25E024882E
:1017A700F582E43400F583E0FCA3E0C394FEEC94F7
:1017B70000500302187F804EEE6401705A204117D3
:1017C700D241900000E025E02488F582E43400F55A
:1017D70083E4F0A374FEF0900000E0FF25E0248886
:1017E700F582E43400F58374FFF5F0121E4EEF2501
:1017F700E02488F582E43400F583E0FEA3E0D39487
:1018070069EE94005072900000E02484F582E4347D
:1018170000F583E4F08061900000E0FF2484F58206
:10182700E43400F583E06403704EEF25E02488F587
:1018370082E43400F583E0FEA3E0FFC394FEEE9458
:10184700004004D241800BD3EF946AEE940050021B
:10185700C241900000E025E0248830410DF582E484
:101867003400F58374FFF5F0800BF582E43400F55E
:1018770083E475F001121E4E900000E0FF25E0247E
:1018870088F582E43400F583A3E0FD123068900008
:1018970000E0FF701174802FF582E43400F583E0D7
:1018A70090007EF08043900000E0B401102480F5A2
:1018B70082E43400F583E090007DF0802C900000F6
:1018C700E0B402102480F582E43400F583E0900050
:1018D7007FF08015900000E0B4030E2480F582E4C9
:1018E7003400F583E090007CF0900000E004F00203
:1018F70015BDE4900000F0900000E0FFC394045091
:101907001BEF25E024A0F582E43400F583E475F0AD
:0C19170001121E4E900000E004F080DB86
:0119230022A1
:1022F800C13E4100E0004200E100004100E30F411F
:0523080000DF00C13DF3
:10354A00D2AC759A03D2BCD2BDD2A9D2AB75FE3029
:04355A0043FF802289
:10355E00C2ACE4F59AC2BCC2BDC2A9C2AB75FE3004
:04356E0053FF7F2266
:10325F00303E21302C27C22C9000DFE004F0E0C379
:10326F0094054019E4A3F07DAA7F4F1232BAE4907F
:0E327F0000DFF02212355E43870212354A222C
:10357200780EE664016006200E03303D04C23DC3AE
:0335820022D3222F
:1031F3001233111235971235E2E4F58612006E7D13
:10320300087F7612361ED2A8D2AF1235057D697FAC
:10321300031235341235B6122F4C12000E12328DB2
:073223009000D47401F022B9
:0300030002362C96
:06362C00D23D75E20F32F1
:10230D002040290000000000000000000000000037
:10231D0000000000000000000000000000000000B0
:10232D0000000000000000000000000000000000A0
:10233D000000000000000000000000000000000090
:07234D00000000C138C13798
:1033110075FE0443FF0C75FE0343FF0C75FE0E534F
:10332100FFF043FF09D2DF43878075BA0375AADC3A
:06333100759852D2AC2297
:0631BA00900043121F7992
:1031C000E4900046F05398EFF0900046E0C39FE48F
:1031D0009E501C2036FDD236900043E475F001125B
:1031E0001F62121D7FF599900046E004F080DA43DB
:0231F000981035
:0131F20022BA
:03002300022A4668
:102A4600C0E0C0F0C083C082C0D075D000C000C056
:072A560002C003C006C00727
:102A5D00309904C299C236209803022B1BC298D21A
:102A6D003D9000E4E014602114604D2402600302E7
:102A7D002B1BE5999000E4B4550D7401F0A3E4F01F
:102A8D00A3F09000E580138027AF997E00BE551D01
:102A9D00BFAA1A9000E47402F0A3A3E02429F8A6BB
:102AAD00999000E5E475F001121E4E80619000E4EE
:102ABD00E4F0A3F0A3F080569000E5A3E02429F8FC
:102ACD00A6999000E5E475F001121E4E9000E5E028
:102ADD00FAA3E0FB64074A700D782BE62404FEE4AC
:102AED0033A3F0A3CEF09000E7E06A7003A3E06B90
:102AFD00600FD39000E6E094409000E5E094004034
:0E2B0D000D9000E5E4F0A3F09000E4F0D23863
:102B1B00D007D006D003D002D000D0D0D082D08343
:052B2B00D0F0D0E03203
:0E35D40090002BEFF012360E90002BE0FF223D
:1035970075F10A759F03759EFD759692759A0222BD
:08360E002037FDD2378F97220F
:03008B0002351D1E
:10351D00C0E0E59630E1055396FDC237E59630E003
:07352D00035396FED0E032CB
:102354004300D40402024100D200C135C13441001B
:0E236400D3004100D7004100D0004100D1005D
:10333700E4FB7D04FF12317FE4FB7D047F01123142
:103347007FE4FB7D047F0212317FE4FB7D047F0372
:0333570002317FC1
:10123B00201F06200B030212D9203007D230D235E3
:10124B000212D690007EE06403601A900005E4F071
:10125B00A3740AF07B147A007D02E4FF122EE9904E
:10126B00007E7403F090007DE06403601A9000052B
:10127B00E4F0A3740AF07B147A007D027F01122E36
:10128B00E990007D7403F090007FE06403601A9096
:10129B000005E4F0A3740AF07B147A007D027F0250
:1012AB00122EE990007F7403F090007CE0640360E1
:1012BB001A900005E4F0A3740AF07B147A007D0207
:1012CB007F03122EE990007C7403F0D23D22303064
:1012DB0008C230C232C231D234780EE664016003E8
:1012EB000213E6301E5C203205D232123337E49003
:1012FB000005F0A3F0FBFA7D01FF122EE9E490004C
:10130B0005F0A3F0FBFA7D017F01122EE9E49000BA
:10131B0005F0A3F0FBFA7D017F02122EE9E49000A9
:10132B0005F0A3F0FBFA7D017F03122EE990007EFE
:10133B007401F090007DF090007FF090007CF00243
:10134B0013DD20310CD231D235E49000D7F00213EB
:10135B00DD9000D2E0C394015057E004F09000D729
:10136B00E014601A14602714603424037064900036
:10137B007EE06404605C7B017D04E4FF802E9000C2
:10138B007DE06404604C7B017D047F01801E900036
:10139B007FE06404603C7B017D047F02800E900043
:1013AB007CE06404602C7B017D047F0312317F8021
:1013BB00219000D2E0C3940F5005E004F08013E4B9
:1013CB009000D2F09000D7E004F0E0C39404400208
:1013DB00E4F0C23CC20CC227D2332230310AC231F4
:1013EB00123337D235D23422303549E49000D2F063
:1013FB00C235900005F0A3F0FBFAFDFF122EE9E4D5
:10140B00900005F0A3F0FBFAFD7F01122EE9E490AA
:10141B000005F0A3F0FBFAFD7F02122EE9E4900029
:10142B0005F0A3F0FBFAFD7F03122EE990007E740A
:10143B000202159E203C0C203309200C06202703AA
:10144B000215B69000D2E0FFC394015004E004F003
:10145B0022EFC3946440030215AC9000D2E004F079
:10146B007814E6C39419503790007EE06403700340
:10147B000215B6E4900005F0A3F07B64FA7D03FF40
:10148B00122EE990007E7404F0E4900005F0A3F0B6
:10149B00FBFAFD7F01122EE990007D7402803278F9
:1014AB0014E6C394325041E4900005F0A3F0FBFA2C
:1014BB007D01FF122EE990007E7401F0E49000058F
:1014CB00F0A3F0FBFA7D017F01122EE990007D74F1
:1014DB0001F0E4900005F0A3F0FBFAFD7F02122E61
:1014EB00E990007F740280487814E6C3944B505700
:1014FB00E4900005F0A3F0FBFA7D01FF122EE990BA
:10150B00007E7401F0E4900005F0A3F0FBFA7D017E
:10151B007F01122EE990007D7401F0E4900005F03C
:10152B00A3F0FBFA7D017F02122EE990007F74017C
:10153B00F0E4900005F0A3F0FBFAFD7F03122EE917
:10154B0090007C7402F0227814E6C39464505CE43F
:10155B00900005F0A3F0FBFA7D01FF122EE9E49059
:10156B000005F0A3F0FBFA7D017F01122EE9E49058
:10157B000005F0A3F0FBFA7D017F02122EE9E49047
:10158B000005F0A3F0FBFA7D017F03122EE990001A
:10159B007E7401F090007DF090007FF090007CF065
:0B15AB0022C23CC233C20CC227D23562
:0115B6002212
:103482009000F2E0FF04F01234269000F2E0C394C0
:0B349200084005E4F07F01227F0022CB
:10346400122E8512300C1230B71225DB1232E630E0
:0E347400280BC228122BF212123B121FD52277
:093605007B017A0079E9022FAC87
:102B3000E4900000F09000D4E0FFA3E0FE6F60415D
:102B4000A3EEF09000D4E0A3F024FD602F240260F7
:102B500003022BF1900005E4F0A37403F07B647A88
:102B6000007D02E4FF122EE9900005E4F0A3740357
:102B7000F07B647A007D027F01022EE99000E38001
:102B8000529000D5E024FE602D146031146054246E
:102B900003705E9000D0E004F0E0C39408405290CF
:102BA00000D47402F0E49000D0F07815E670429002
:102BB00000D47404F0229000D47403F022302C313D
:102BC000C22C9000E3E0D39400400CE014F0303DC0
:102BD00020C23D740FF0229000D47404F0E4900001
:102BE000DFF022123572500302325F9000D474027B
:012BF000F0F4
:012BF10022C1
:10310000302B36C22B9000D1E0FF04F0EF14601298
:103110001460141460161460182404701C12348295
:10312000801712360580121235FB800D1234648030
:1031300008122B30E49000D1F0302D05C22D12156D
:02314000B722B4
:100BAE00426F7820436C6F73652E0D0A00426F788A
:100BBE00204F70656E2E0D0A004F70656E20426FCD
:100BCE007820434D44205458204F7665722E0D0ADE
:100BDE00004F70656E20426F7820416E6420456133
:100BEE007270686F6E6520476574496E2E0D0A002F
:100BFE00436C6F736520426F7820416E6420466FA0
:100C0E0072636520566F6C746167652055702E0D8A
:100C1E000A00564F58204348472046756C6C2E0DDF
:100C2E000A00564F582047657420496E746F205342
:100C3E006C6565702E0D0A00466F6C6C6F772043E5
:100C4E00484720496E697453746120536574204D72
:100C5E0061782056706D69642E28566F785F7374B4
:100C6E00613A3078257829286C696E653A256429B1
:100C7E000D0A00466F6C6C6F772043484720496E13
:100C8E0069745374612E28566F785F7374613A30AD
:100C9E0078257829286C696E653A2564290D0A0035
:100CAE00466F6C6C6F772043484720537461312C2C
:100CBE004E6F2045617250686F6E6520496E2042FE
:100CCE006F782E286C696E653A2564290D0A0046E8
:100CDE006F6C6C6F772043484720537461312C56EC
:100CEE004F5220436867696E672849766F723A25BE
:100CFE00646D41292E286C696E653A2564290D0AAA
:100D0E0000466F6C6C6F77204348472053746131F7
:100D1E002C564F4C20436867696E672849766F6C76
:100D2E003A25646D41292E286C696E653A25642931
:100D3E000D0A00466F6C6C6F772043484720537442
:100D4E0061322C4765742049564F523A25646D41E5
:100D5E002E286C696E653A2564290D0A00466F6C63
:100D6E006C6F772043484720537461322C4765746B
:100D7E002049564F4C3A25646D412E286C696E659C
:100D8E003A2564290D0A00466F6C6C6F7720434834
:100D9E004720537461332C564F58204368672052B6
:100DAE0065496E69742E286C696E653A2564290D45
:100DBE000A00466F6C6C6F7720434847205374616E
:100DCE0033284356292C564F522056706D69642095
:100DDE004164645374612849766F723A25646D419B
:100DEE00292E286C696E653A2564290D0A00466F16
:100DFE006C6C6F77204348472053746133284356F9
:100E0E00292C564F522056706D69642053756253CB
:100E1E0074612849766F723A25646D41292E286CCB
:100E2E00696E653A2564290D0A00466F6C6C6F7702
:100E3E00204348472053746133284343292C564F8F
:100E4E00522056706D69642053756253746128493F
:100E5E00766F723A25646D41292E286C696E653A5B
:100E6E002564290D0A00466F6C6C6F772043484746
:100E7E002053746133284343292C564F5220567009
:100E8E006D6964204164645374612849766F723AC7
:100E9E0025646D41292E286C696E653A2564290DED
:100EAE000A00466F6C6C6F7720434847205374617D
:100EBE0033284356292C564F4C2056706D696420AA
:100ECE004164645374612849766F6C3A25646D41B0
:100EDE00292E286C696E653A2564290D0A00466F25
:100EEE006C6C6F7720434847205374613328435608
:100EFE00292C564F4C2056706D69642053756253E1
:100F0E0074612849766F6C3A25646D41292E286CE0
:100F1E00696E653A2564290D0A00466F6C6C6F7711
:100F2E00204348472053746133284343292C564F9E
:100F3E004C2056706D696420537562537461284954
:100F4E00766F6C3A25646D41292E286C696E653A70
:100F5E002564290D0A00466F6C6C6F772043484755
:100F6E002053746133284343292C564F4C2056701E
:100F7E006D6964204164645374612849766F6C3ADC
:100F8E0025646D41292E286C696E653A2564290DFC
:100F9E000A00466F6C6C6F7720434847205374618C
:100FAE00342C564F782056706D696420416464531A
:100FBE00746128566F75743A307825782C49766F9F
:100FCE006C3A25646D412C49766F723A25646D41F9
:100FDE0029286C696E653A2564292E0D0A00466F24
:100FEE006C6C6F772043484720537461342C564FF6
:100FFE0078204368696E6728566F75743A30782585
:10100E00782C49766F6C3A25646D412C49766F7257
:10101E003A25646D4129286C696E653A2564292E3E
:10102E000D0A00466F6C6C6F77204348472053744F
:10103E0061342C564F522056706D696420416464A1
:10104E0053746128566F75743A307825782C49762A
:10105E006F723A25646D4129286C696E653A256474
:10106E00292E0D0A00466F6C6C6F7720434847207F
:10107E00537461342C564F52204368696E6728565C
:10108E006F75743A307825782C49766F723A2564EC
:10109E006D4129286C696E653A2564292E0D0A006A
:1010AE00466F6C6C6F772043484720537461342C25
:1010BE00564F4C2056706D696420416464537461C0
:1010CE0028566F75743A307825782C49766F6C3ABD
:1010DE0025646D4129286C696E653A2564292E0DAB
:1010EE000A00466F6C6C6F7720434847205374613B
:1010FE00342C564F4C204368696E6728566F7574B2
:10110E003A307825782C49766F6C3A25646D4129F2
:10111E00286C696E653A2564292E0D0A00466F6C9F
:10112E006C6F7720434847205375625374612C5679
:10113E004F4C2F564F52286C696E653A2564292EF6
:10114E000D0A00466F6C6C6F77204348472053752D
:10115E00625374612C564F52286C696E653A256441
:10116E00292E0D0A00466F6C6C6F7720434847207E
:10117E005375625374612C564F4C286C696E653AE8
:10118E002564292E0D0A00466F6C6C6F772043483C
:10119E0047205375625374612C285354413A30786A
:1011AE0025782C56706D69643A3078257829286C2C
:1011BE00696E653A2564290D0A00466F6C6C6F776F
:1011CE0020434847204164645374612C2853544192
:1011DE003A307825782C56706D69643A30782578D7
:1011EE0029286C696E653A2564290D0A00000000F5
:1011FE0000000000000000000000000000000000E1
:10120E0000000000000000000000000000000000D0
:10121E0000000000000000000000000000000000C0
:0D122E0000000000000000000000000000B3
:10237200C10EC10CC10D410077FFC10B42004F00DD
:102382000042004D00004200750000420072000051
:10239200420078000041007B00106900000000004C
:1023A200000000000000000000000020247900006E
:1023B200000000000000000000000000000000001B
:1023C200000000000000000000000000000000000B
:0623D20000004100740050
:052D2C00900043EFF0F0
:102D3100E4A3F0A3F07F27123142900044EFF07F2B
:102D410037123142900045EFF0900043E024FD60DE
:102D51001B14602424FE602824057035900045E092
:102D61004494F0900044E04498F08025900044E0C1
:102D71004406F054E7F08019900045E054FD8009C5
:102D8100900045E04402F054FEF0900044E054E12C
:102D9100F0900044E0FD7F271232BA900045E0FD3B
:052DA1007F370232BA89
:101FD5009000EBE054186003D20B22C20B203903AA
:101FE50002224B303B65200D0D7F3C1234D27F0120
:101FF5001233E4D20D227F03122D2CE490004CF015
:1020050090004AF0A3F0C2009000F4E0702AC20CE0
:10201500D201D202C203C207C208C209900075F0FC
:10202500A3F0D20EC234900070F0A3F090007AF0C5
:102035007BFF7A0B79AE800EC201C202D203C205C4
:102045007BFF7A0B79BB12198FC23B200303022158
:102055000190004AE0C3940550030221EF90004B24
:10206500E0C39405500A7F06122D2C90004B802A60
:1020750020004990004CE0FFD3940B5022EF75F0FF
:102085000384E5F07003FD800990004CE020E00733
:102095007D017F0612244190004CE004F0805D7FB5
:1020A50004122D2CE490004CF0D200D204C20DC2D3
:1020B5000E7BFF7A0B79C712198F8040300404C25A
:1020C50004802F9000EDE0540CFBE4FAF9F8900041
:1020D50049E0FFE4FCFDFEC3121F35601F9000EDD3
:1020E500E0540C600DD20CD2357BFF7A0B79DF12F0
:1020F500198F9000EDE0540C900049F02001030287
:102105002248303438200D237F011233E4D20DD21A
:102115000EE4900070F0A3F090007AF090004BF080
:1021250090004AF090004CF0C207227F03122D2C3C
:102135007BFF7A0B79FE12198FC234803590004AE5
:10214500E0D3940350030221EF90004BE0FFD394BA
:102155000B501FEF75F00384E5F07003FD800990C7
:10216500004BE020E0077D017F8112244190004B68
:10217500807890004CE0FFD39432501FEF75F00348
:1021850084E5F07003FD800990004CE020E0077DB8
:10219500017F0712244190004C804F3002077F03D6
:1021A500122D2CC202900071E0700C7B017A00792F
:1021B5005112008E0222482007489000EDE054306D
:1021C500FFE4FCFDFE7B30FAF9F8C3121F35601100
:1021D5009000EDE0540CFFE4FCFDFEEF6003303FA2
:1021E5006290004AE0C394325004E004F0227BFF81
:1021F5007A0C792012198FD207C20D7F04122D2C6B
:10220500804190004CE0FFD3940B5022EF75F00312
:1022150084E5F07003FD800990004CE020E0077D27
:10222500017F8012244190004CE004F080152008C5
:1022350012D2087F04122D2CC20E7BFF7A0C793046
:1022450012198FC20622200614D2067F04122D2CE5
:10225500C20E9000EDE0540C900049F0229000ED84
:10226500E0540CFBE4FAF9F8900049E0FFE4FCFDCA
:10227500FEC3121F3560129000EDE0540CFF6004A0
:09228500D20CD235900049EFF0B3
:01228E00222D
:06008E00900000121F7932
:1000940090007AE01470030201AB1470030202DCD6
:1000A40014700302038614700302065E24046003C2
:1000B400020932900000121F59900020121D98600E
:1000C4000302093290007BE0D3940A5046E004F026
:1000D40090001BE475F03C121F08300A0302093239
:1000E400900000121F5990001B121E64FF1234D29C
:1000F4007BFF7A0C79469000EDE0FF900006E4F077
:10010400A3EFF0A37403F0A3744BF012198FD20A77
:10011400020932E490007BF0C20A900000121F59D9
:10012400900016E4121DD7900015E4121DD790001C
:1001340013E4121DD7900012E4121DD7900011E4AD
:10014400121DD7900010E4121DD7900018E4121D60
:10015400D7900017E4121DD790000EE4F5F0121F9B
:100164000890000CE4F5F0121F08900019E4F5F073
:10017400121F0890001DE475F03C121F0890007ACD
:100184007401F0E490004FF0A3F07BFF7A0C7981C6
:100194009000EDE0FF900006E4F0A3EFF0A37403F9
:1001A400F0A374720203FF9000EDE0FB5420FFE41F
:1001B400FCFDFEEF602BEB5410FF60259000001255
:1001C4001F599000207401121DD7E490007AF07B2F
:1001D400FF7A0C79AE9000067403F0A374810203D5
:1001E400FF9000EDE05420FFE4FCEF706278A1E69C
:1001F400FE08E6FF900000121F59900002EE8FF0F7
:10020400121F087D05121DF9EF7802C333CE33CED9
:10021400D8F9FF900000121F59900006EE8FF012DB
:100224001F0878A1E6FC08E6FD25E0FFEC3390000A
:100234000A8FF0121F087BFF7A0C79DD900006EC20
:10024400F0A3EDF0A37403F0A3748FF012198F9050
:1002540000EDE05410FFE4FCFDEF7065789DE6FED0
:1002640008E6FF900000121F59EE8FF0121EE918E5
:10027400E6FE08E6FF7D05121DF9EF7802C333CED2
:1002840033CED8F9FF900000121F59900004EE8F6E
:10029400F0121F08789DE6FC08E6FD25E0FFEC332C
:1002A4009000088FF0121F087BFF7A0D790F9000E1
:1002B40006ECF0A3EDF0A37403F0A3749CF0121900
:1002C4008F900000121F5990001F7401121DD790C7
:1002D400007A7402F0020932D3900050E094059041
:1002E400004FE094005003020395E490004FF0A304
:1002F400F09000EDE05420FFE4FCFDEF703778A1AE
:10030400E6FE08E6FF900000121F5990000EEE8FE3
:10031400F0121F089000187401121DD77BFF7A0D8C
:100324007941900006EEF0A3EFF0A37403F0A374F8
:10033400B8F012198F9000EDE05410FFE4FCFDEFCB
:100344007037789DE6FE08E6FF900000121F599072
:10035400000CEE8FF0121F089000177401121DD7C5
:100364007BFF7A0D796B900006EEF0A3EFF0A37497
:1003740003F0A374C2F012198F90007A7403F00290
:100384000932D3900050E0940290004FE094005062
:100394000AE475F001121E4E020932E490004FF097
:1003A400A3F0900000121F5990000A121E64FFAEC1
:1003B400F090000E121E64D39FE5F09E501C900036
:1003C40000121F59900008121E64FFAEF090000C3A
:1003D400121E64D39FE5F09E4025E490007AF090CD
:1003E4000000121F5990001FE4121DD77BFF7A0DE5
:1003F40079959000067403F0A374DCF002092F9041
:100404000000121F59900018121D98640160030225
:10041400052F90000E121E64D39414E5F09400404E
:10042400030204AE9000EDE030E54B900016740139
:10043400121DD790001B121E64C3943CE5F0940077
:10044400400D900000121F59900018E4121DD7901F
:100454000000121F5990000E121E64FF900006E562
:10046400F0F0A3EFF0A37403F0A374EEF07BFF7A33
:100474000D79C002052C900000121F5990001374CE
:1004840001121DD7900000121F5990000E121E6415
:10049400FF900006E5F0F0A3EFF0A37403F0A3745B
:1004A400F5F07BFF7A0D79FC807E900000121F59D5
:1004B400900006121E64FFAEF090000E121E64D36C
:1004C4009FE5F09E9000004030121F599000137475
:1004D40001121DD7900000121F5990000E121E64C5
:1004E400FF900006E5F0F0A3EFF0A37403F0A3740B
:1004F400FFF0FB7A0E7938802F121F599000167482
:1005040001121DD7900000121F5990000E121E6494
:10051400FF900006E5F0F0A3EFF0A37404F0A374D9
:1005240006F07BFF7A0E797412198F900000121F67
:1005340059900017121D986401600302093290005B
:100544000C121E64D39414E5F0940040030205DBFE
:100554009000EDE030E44B9000157401121DD7902B
:10056400001B121E64C3943CE5F09400400D9000FF
:1005740000121F59900017E4121DD7900000121F9B
:100584005990000C121E64FF900006E5F0F0A3EFF2
:10059400F0A37404F0A37419F07BFF7A0E79B0020F
:1005A400092F900000121F599000127401121DD7D8
:1005B400900000121F5990000C121E64FF90000658
:1005C400E5F0F0A3EFF0A37404F0A37420F07BFF34
:1005D4007A0E79EC02092F900000121F5990000442
:1005E400121E64FFAEF090000C121E64D39FE5F05F
:1005F4009E9000004032121F599000127401121D87
:10060400D7900000121F5990000C121E64FF900036
:1006140006E5F0F0A3EFF0A37404F0A3742AF07BD2
:10062400FF7A0F792802092F121F599000157401BF
:10063400121DD7900000121F5990000C121E64FF67
:10064400900006E5F0F0A3EFF0A37404F0A3743176
:10065400F07BFF7A0F796402092FD3900050E09465
:100664001490004FE09400502FE475F001121E4ED8
:1006740078A1E6FE08E6FF900000121F5990000ED4
:10068400EE8FF0121F08789DE6FF08E690000CCF6D
:100694008FF0121F08020932E490004FF0A3F0908B
:1006A4000000121F59900018121D98640160030283
:1006B40007C0900017121D98640160030207C090E0
:1006C4000006121E64FFAEF090000E121E64FDAC14
:1006D400F0C39FEC9E4018900000121F5990000A2E
:1006E400121E64FFD3ED9FEC95F050030207819036
:1006F4000000121F59900004121E64FFAEF0900017
:100704000C121E64FDACF0C39FEC9E4015900000DB
:10071400121F59900008121E64FFD3ED9FEC95F050
:10072400405B900000121F599000167401121DD7EF
:100734009000157401121DD790007A7402F0900095
:1007440000121F5990001B121E64FF900006E5F072
:10075400F0A3EFF0789DE6FF08E6A3CFF0A3EFF057
:1007640078A1E6FF08E6A3CFF0A3EFF0A37404F0AA
:10077400A37458F07BFF7A0F79A002092F90000030
:10078400121F5990001B121E64FF900006E5F0F042
:10079400A3EFF0789DE6FF08E6A3CFF0A3EFF0788F
:1007A400A1E6FF08E6A3CFF0A3EFF0A37404F0A33F
:1007B400745FF07BFF7A0F79EC02092F900000122E
:1007C4001F59900018121D98640160030208799063
:1007D4000006121E64FFAEF090000E121E64FDAC03
:1007E400F0C39FEC9E4015900000121F5990000A20
:1007F400121E64FFD3ED9FEC95F04046900000126A
:100804001F599000167401121DD790007A7402F0DB
:10081400900000121F5990001B121E64FF900006E6
:10082400E5F0F0A3EFF078A1E6FF08E6A3CFF0A38C
:10083400EFF0A37404F0A37472F07BFF7A107931A3
:100844008030900000121F5990001B121E64FF900C
:100854000006E5F0F0A3EFF078A1E6FF08E6A3CFE9
:10086400F0A3EFF0A37404F0A37478F07BFF7A1084
:10087400797312198F900000121F59900017121DDE
:100884009864016003020932900008121E64FFAEEE
:10089400F090000C121E64FDACF0D39FEC9E50153A
:1008A400900000121F59900004121E64FFC3ED9FB4
:1008B400EC95F05046900000121F599000157401F9
:1008C400121DD790007A7402F0900000121F599004
:1008D400001B121E64FF900006E5F0F0A3EFF07811
:1008E4009DE6FF08E6A3CFF0A3EFF0A37404F0A302
:1008F4007486F07BFF7A1079AE8030900000121F6E
:100904005990001B121E64FF900006E5F0F0A3EF5F
:10091400F0789DE6FF08E6A3CFF0A3EFF0A37404FC
:10092400F0A3748CF07BFF7A1079F012198F900089
:1009340000121F59900018121D98FF6401600D9059
:100944000017121D9864016003020B9490001312A7
:100954001D98FE6401600D900012121D98640160E0
:1009640003020ACFEF64017031900017121D98B48E
:100974000128EEB40124900013121D98B4011B90B9
:1009840000147401121DD77BFF7A11792B90000695
:100994007404F0A374A4F012198F900000121F596C
:1009A400900018121D986401702A900017121D9867
:1009B4007022900013121D98640170539000140467
:1009C400121DD77BFF7A1179519000067404F0A3AD
:1009D40074AE8037900000121F59900018121D98B1
:1009E400702D900017121D98B40124900012121D4E
:1009F40098B4011B9000147401121DD77BFF7A1167
:100A040079739000067404F0A374B9F012198F90EE
:100A14000000121F59900013E4121DD7900012E435
:100A2400121DD7900014121D9864016003020BADCF
:100A3400900000121F5990001B121E64D39400E50D
:100A4400F09400400B90001B74FF75F0FE121E9C86
:100A5400900019121E64FFAEF090001B121E64D3A6
:100A64009FE5F09E5017900000121F5990001BEE56
:100A74008FF0121F0890007A7404F0800690007AB8
:100A84007402F0E490004FF0A3F0900000121F599C
:100A9400900014E4121DD790007AE0FF900006E461
:100AA400F0A3EFF0900000121F5990001B121E6477
:100AB400FF900008E5F0F0A3EFF0A37404F0A37432
:100AC400D8F07BFF7A117995020B81900000121FF8
:100AD40059900016121D986401600D900015121DA6
:100AE4009864016003020BAD900016E4121DD790C8
:100AF4000015E4121DD790001B121E64C3943CE53C
:100B0400F094005010900000121F5990001BE475DF
:100B1400F002121E9C90007A7404F0900000121FE0
:100B24005990001D121E64FFAEF090001B121E644B
:100B3400C39FE5F09E4015900000121F5990001BC2
:100B4400EE8FF0121F0890007A7401F090007AE0A2
:100B5400FF900006E4F0A3EFF0900000121F5990FC
:100B6400001B121E64FF900008E5F0F0A3EFF0A351
:100B74007404F0A374F5F07BFF7A1179C812198F0D
:100B8400900000121F5990001B121E64FF0234D201
:100B940090007AE0D394024010E4F0900000121F19
:090BA400599000207401121DD7C4
:010BAD002225
:0B002600900043121F79900046EDF09F
:10003100E4FE900046E0FD14F0ED6029900043E4F9
:1000410075F001121F62121D7F6EFEE4FFEFC39473
:100051000850DFEE30E007C313648CFE8004EEC36A
:0700610013FE0F80E8AF065B
:010068002275
:08244100900000EFF0A3EDF0A4
:10244900E4A3F078037C007D017BFF7A1179FBFE20
:102459007F40121D59E4900003F0A37455F0A37452
:10246900AAF0900000E0FE900007F0900001E0FD66
:10247900900077F0EE121F82249A0124C9022518D0
:1024890003252506252507256A8025728100002553
:10249900809000067402F0ED700E9000087402F04E
:1024A900E4900075F0022580900001E0640160036A
:1024B90002258090000804F0E4900076F00225805F
:1024C900900006741BF07F05900001E075F012A4DE
:1024D90024792FF8E6FE74032FF582E43400F5839E
:1024E900EEF00FEFB412E17F17EFC3940840030237
:1024F9002580900001E075F008A424692FF8E6FE14
:1025090074032FF582E43400F583EEF00F80DA903E
:1025190000067402F090000804F0805B90000674D5
:1025290005F09000087401F07814E6A3F0A3742074
:10253900F0900001E0FF700D900072E07002800FD2
:102549009000738015EFB4012E900073E07008902D
:10255900000B74FFF08020900072E090000BF08077
:10256900169000067401F0800E9000067402F09037
:102579000074E0900008F0900006E02404FF900049
:1025890002F0FD7B017A007903120026900002E037
:102599002403F582E43400F583EFF07F01122D2C3A
:1025A900900001E0FF700B75FE0E53FFF043FF082A
:1025B900800DEFB4010975FE0E53FFF043FF019042
:1025C9000002E02401FFE433FE7B017A0079030273
:0225D90031BA15
:102DA600EF24FA605014604D24067069E4FE742D19
:102DB6002EF8E6FF900077E075F012A424792EF83D
:102DC600A6070EEEB412E7E4FE743F2EF8E6FF9077
:102DD6000077E075F008A424692EF8A6070EEEB475
:102DE60008E7900077E0700690007504F0229000E6
:102DF600767401F022782DE6B4E30D90004D74014F
:102E0600F008E6900072F02290004E7401F0782EE1
:052E1600E6900073F0DE
:012E1B002294
:1032E600E4FF900000F0303821C238FB7A007929DB
:1032F600782BE62403FD120026782BE6242CF8E62C
:0A330600B50707782CE6FF122DA68C
:01331000229A
:1023D800011500011400C13FC140011350602800DD
:1023E800A80BB80BEA0C1C0C800CB20CE40D160DF3
:1023F800480D7A0DAC0DF70E420E880ED80F0A0F55
:092408003C0F870FD2101D106873
:102BF200E4FF780EE6B40122EF25E024A8F582E492
:102C02003400F583E0FCA3E02432FDE43CFCC3780D
:102C1200B0E69D18E69C501B801EEF25E024A8F527
:102C220082E43400F583E0FCA3E0D378B096EC189C
:102C32009650050FEFB414BA7815E6FEEFD39E78DE
:102C4200134003068001169000ECE030E30A781589
:102C5200EFF675F005A418F67813E6FED3949650B5
:102C620006EEC3940A500D7815EFF675F005A41818
:102C7200F61876507815E6FFD394005004D24080BF
:102C820008EFD394014002C240EFD394015003D223
:0A2C92003F22EFD394024002C23F3C
:012C9C002215
:102411004100DB004100DE004100DA004200D8004B
:10242100004100DC00C12AC12BC12DC129C128C135
:092431002C4100DD00C12EC12F79
:102E1C009000DDE06062E4F0D22A9000DBE004F088
:102E2C00E0C394054004E4F0D22B9000DEE004F003
:102E3C00E0C3940A4004E4F0D22D9000D8E475F07D
:102E4C0001121E4EC39000D9E094649000D8E09417
:102E5C00004006E4F0A3F0D2289000DAE004F0E0A1
:102E6C00C394FA4013E4F0D2299000DCE004F0E0C3
:092E7C0094044004E4F0D22C227D
:03000B0002335A63
:10335A00C0E0C083C082C0D074FC258CF58C746632
:10336A00258AF58A9000DD7401F0D0D0D082D0830E
:03337A00D0E0326E
:0E35E200758901758CFC758A66D2A9D28C227F
:1034060075FE0FEF25E0FE7403A806088002C3339D
:10341600D8FCF452FFEFB4040675FE0FE4F5FF2264
:1035340075FE11EF5407F5FF75FE12AF058FFF7589
:06354400FE1075FF0122DC
:1030680075FE0FEF25E0FE7403A806088002C3333F
:10307800D8FCF452FF7401A806088002C333D8FCB8
:1030880042FF75FE0B7401A807088002C333D8FC01
:1030980042FFEF70038DCE22EFB401038DCF22EFF4
:0F30A800B402038DDE22EFB40304AF058FDF22E5
:033FFD00010102BD
:06243A000116000117006D
:10328D00D28075FE0443FF0175FE0343FF0175FEF9
:10329D000243FF01D28175FE0443FF0275FE034315
:0D32AD00FF0275FE0243FF02781676012233
:0C358500C280123591D281123591D280A3
:05359100E4FF0FDFFE66
:013596002212
:10349D00D281D2801235912081037F0022C2811208
:0B34AD0035913081037F00227F012257
:0F35C500C280C28112358CD281123591023591AC
:08361600123585C280023591D6
:0B35F000123585123591C28002359122
:0233A000AE0776
:1033A2007D08AF051DEF6015C280EE30E704D281C3
:0F33B2008002C281EE25E0FE12358C80E5C280DC
:0133C10022E9
:10337D007E08E4FDD281AF061EEF6012ED25E0FD63
:10338D00C28012358C3081EEED4401FD80E8C280A3
:02339D00AF057A
:01339F00220B
:10000E007D087F351232BA7D0A7F7612361E7D0448
:05001E007F200232BA50
:102FAC00900000121F797F10123142900000121F06
:102FBC0059EF121DC57F11123142900000121F599A
:102FCC00900001EF121DD77F1212314290000012B7
:102FDC001F59900002EF121DD77F1312314290003F
:102FEC0000121F59900003EF121DD77F14123142AB
:102FFC00900000121F59900004EF121DD77F002281
:0533C200900000EFF097
:1033C700E47F20123142900000E06006EF4401FFE5
:0D33D7008004EF54FEFFAD077F200232BAE4
:0533E400900000EFF075
:1033E900E47F27123142900000E06006EF4401FFBC
:0D33F9008004EF54FEFFAD077F270232BABB
:0534D200900003EFF083
:1034D700E47F25123142EF54C0FF900003E04FFD17
:0534E7007F250232BA4E
:07361E008FFEAF058FFF22B4
:063625008FFEAEFFAF06B0
:01362B00227C
:1032BA00900046EFF0A3EDF012349D7F0C1233A07C
:1032CA001235F0900046E0FF1233A01235F090005C
:0C32DA0047E0FF1233A01235F00235C5AA
:05314200900046EFF0D3
:10314700E4A3F012349D7F0C1233A01235F09000E7
:1031570046E0FF1233A01235F012349D7F0D123373
:10316700A01235F012337D900047EFF01236161299
:0731770035C5900047E0FFA1
:01317E00222E
:102CAC000235A7E493A3F8E493A34003F68001F262
:102CBC0008DFF48029E493A3F85407240CC8C33329
:102CCC00C4540F4420C8834004F456800146F6DFF8
:102CDC00E4800B010204081020408090228FE47ED7
:102CEC00019360BCA3FF543F30E509541FFEE493ED
:102CFC00A360010ECF54C025E060A840B8E493A3B4
:102D0C00FAE493A3F8E493A3C8C582C8CAC583CADE
:102D1C00F0A3C8C582C8CAC583CADFE9DEE780BE96
:01244000009B
:101C8900E709F608DFFA8046E709F208DFFA803E3D
:101C990088828C83E709F0A3DFFA8032E309F6082A
:101CA900DFFA8078E309F208DFFA807088828C8392
:101CB900E309F0A3DFFA806489828A83E0A3F60846
:101CC900DFFA805889828A83E0A3F208DFFA804C20
:101CD90080D280FA80C680D4806980F280338010F7
:101CE90080A680EA809A80A880DA80E280CA803360
:101CF90089828A83ECFAE493A3C8C582C8CCC583D8
:101D0900CCF0A3C8C582C8CCC583CCDFE9DEE780A7
:101D19000D89828A83E493A3F608DFF9ECFAA9F026
:101D2900EDFB2289828A83ECFAE0A3C8C582C8CC7C
:101D3900C583CCF0A3C8C582C8CCC583CCDFEADE95
:101D4900E880DB89828A83E493A3F208DFF980CCF7
:101D590088F0EF60010E4E60C388F0ED2402B404F0
:101D69000050B9F582EB2402B4040050AF23234597
:061D79008223901CD973C7
:101D7F00BB010689828A83E0225002E722BBFE0262
:091D8F00E32289828A83E4932295
:101D9800BB010CE58229F582E5833AF583E0225000
:101DA80006E92582F8E622BBFE06E92582F8E2224A
:0D1DB800E58229F582E5833AF583E4932264
:101DC500BB010689828A83F0225002F722BBFE01FD
:021DD500F322F7
:101DD700F8BB010DE58229F582E5833AF583E8F042
:101DE700225006E92582C8F622BBFE05E92582C8EE
:021DF700F222D6
:101DF900BC000BBE0029EF8DF084FFADF022E4CCCE
:101E0900F875F008EF2FFFEE33FEEC33FCEE9DEC96
:101E1900984005FCEE9DFE0FD5F0E9E4CEFD22EDDC
:101E2900F8F5F0EE8420D21CFEADF075F008EF2F26
:101E3900FFED33FD4007985006D5F0F222C398FD17
:051E49000FD5F0EA22B4
:101E4E00C5F0F8A3E028F0C5F0F8E582158270021F
:061E5E001583E038F022BC
:101E6400BB0110E58229F582E5833AF583E0F5F0BC
:101E7400A3E0225009E92582F886F008E622BBFE99
:101E84000AE92582F8E2F5F008E222E5832AF583DF
:081E9400E993F5F0A3E99322A4
:101E9C00BB010DC58229C582C5833AC583021E4E7E
:101EAC005011C58229F808E5F026F618F5F0E58200
:101EBC0036F622BBFE11C58229F808E225F0F5F0B2
:101ECC00F218E23582F222F8E58229F582E5832ABE
:0D1EDC00F58374019325F0F5F0E4933822AE
:101EE900BB010A89828A83F0E5F0A3F0225006F744
:0F1EF90009A7F01922BBFE06F3E5F009F3192241
:101F0800F8BB0111E58229F582E5833AF583E8F00B
:101F1800E5F0A3F0225009E92582C8F608A6F022C8
:0D1F2800BBFE09E92582C8F2E5F008F222AF
:101F3500EB9FF5F0EA9E42F0E99D42F0E89C45F002
:011F45002279
:101F4600E8600FECC313FCED13FDEE13FEEF13FF79
:031F5600D8F1229D
:091F5900E0FBA3E0FAA3E0F92289
:101F6200F8E0FBA3A3E0F925F0F0E5821582700208
:071F72001583E0FA38F022AC
:091F7900EBF0A3EAF0A3E9F02269
:101F8200D083D082F8E4937012740193700DA3A3EE
:101F920093F8740193F5828883E473740293686002
:061FA200EFA3A3A380DF02
:101FA800EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02DC6
:101FB800FDE43CFCE8A42EC8C5F03DFDE43CFCEF84
:0D1FC800A4FFE5F028FEE43DFDE43CFC2212
:10192400E5082406F582E43400F583E005082290F6
:101934000003301603900006E475F001121F6202E2
:101944001D7F200FE97F2ED20F8018EF540F2490B3
:10195400D43440D4FF30130BEF24BFB41A00500327
:101964002461FFE50960021509050CE50C70020508
:101974000B30160E900003E475F001121F62EF02A3
:101984001DC50235D47403D2168003E4C216F508CB
:10199400900003121F79E4F509F50BF50CE50960D5
:1019A400077F2012196780F5750AFFC210C20FC2A3
:1019B40011C212C214C215C217121933FF700D30AE
:1019C40016057F00121978AF0CAE0B22B4255FC246
:1019D400D5C213121933FF24D0B40A00501A75F07B
:1019E4000A780930D50508B6FF0106C6A426F620F4
:1019F400D5047002D21280D924CFB41A00EF500457
:101A0400C2E5D213021B79D21080C6D20F80C0D295
:101A14001180BCD2D580BAD21480B47F2012196749
:101A24002011077401B5090040F1121924FF12199D
:101A3400670219A1D217D2158095121924FB121925
:101A440024FA121924F94A4B7006794A7A1C7BFF4E
:101A540020112EE509602A7E008E82758300121DF6
:101A64009860060EEE650A70F0C2D5EBC0E0EAC0DD
:101A7400E0E9C0E0EE121BC0D0E0F9D0E0FAD0E01B
:101A8400FB121D7FFF60AAEBC0E0EAC0E0E9C0E002
:101A9400121967D0E02401F9D0E03400FAD0E0FB59
:101AA400E50A0460DCD50AD980877BFF7A1B79BC00
:101AB400D211809C791080027908C215C21780085F
:101AC400D2D5790A8004790AC2D5E50A047002F5F0
:101AD4000AE4FAFDFEFF121924FC7B0820101312FD
:101AE4001924FD7B10300F0A121924FE121924FF49
:101AF4007B20EC3382D592D55013C3E4300F069F7C
:101B0400FFE49EFEE42010039DFDE49CFCE4CBF87E
:101B1400C210EC700CCFCECDCCE824F8F870F38072
:101B240017C3EF33FFEE33FEED33FDEC33FCEB3341
:101B3400FB994002FB0FD8E9EB301005F8D0E0C464
:101B440048B210C0E00AEC4D4E4F78207B0070C2C2
:101B5400EAB50A0040BCC0E0121BC2D0F0D0E020BD
:101B64001004C4C0E0C4B210C0F0121950D0F0D5B3
:101B7400F0EB0219A1121F821A3E531AB8581A0F19
:101B84004C1A0B421ABC4F1AC4441AC4491A2443AF
:081B94001ACA551AAE461AAE3A
:101B9C00451AAE471C6A501A132D1A172E1A3A2BD7
:101BAC001A1B231A38201C532A19D34800001A3246
:101BBC003F3F3F00790AA2D5201214301409B91006
:101BCC00020404B9080104A2D52015025001042016
:101BDC0011689211B509005034C0E07F2030121901
:101BEC007F30A21172157214500F121C19C211C23F
:101BFC0015C214C2177F30800F301403E9C0E012F5
:101C0C001967301403D0E0F9D0E0B509CC301417C3
:101C1C007F30B9100C1219677F583013077F78800A
:101C2C0003B908031219673011057F2D0219677F5C
:101C3C00202017F87F2B2015F322921180CF286ECD
:101C4C00756C6C2900D2101219243010F8C210785F
:101C5C000930D50108F60219D32D504349581219F1
:101C6C00242403B405004001E4901C659312195818
:0D1C7C00743A121958D212750904021AB8F0
:00000001FF

Binary file not shown.

View File

@ -0,0 +1,968 @@
:03000000022AEDE4
:102AED0075FE7275FF00758E009000007F007E03ED
:0D2AFD00E4F0A3DFFCDEFA7581BA022B4580
:0F36560053797374656D20496E69742E0D0A00E7
:103576001232357BFF7A367956120F49D2AED2BE59
:08358600122DF912317780F4D7
:10215F004100EB004100EC0002B9000002B50000A5
:10216F0002B300004100ED0002A7000002AD000025
:10217F0002B7000002B1000002AF000002A9000088
:04218F0002AB00009F
:10334A00EF540346FE08E6FF18EEF608EFF6FF9084
:10335A0000EBE0FD3395E0FCC3EF9D2278B5E6FE75
:05336A0008E6780222D4
:1034BA0075FE3175FF8175FE0E43FF107DAB7F30BF
:0D34CA001236E575FE599000EBE5FFF0228B
:102A0200900000EFF0E5A420E003022AD575A401AE
:102A12007F351236EC78B5760008A6077F36123677
:102A2200EC78B512334AFFEE9CFE7C097DC4121588
:102A320048780A1214E678B5A60608A6079000EDB3
:102A4200E01215222A62002A70012A79022A8C03D6
:102A52002A9A042AA8052AB6062AC50700002AD5FA
:102A6200123366CEC313CE13D8F979A8806178B633
:102A7200E625E079BA804478B5E6FE08E67803C335
:102A820033CE33CED8F979AE8045123366C333CE16
:102A920033CED8F979B88037123366C333CE33CE0A
:102AA200D8F979B28029123366C333CE33CED8F93E
:102AB20079B0801B78B6E625E079AAF718E63319D3
:102AC200F78010123366CEC313CE13D8F979ACF760
:102AD200EE19F7900000E04408FD7F311232F790C2
:0B2AE2000000E09000EDF075A38122E1
:10332300E5A430E11E75A4027F371236EC78B3763C
:103333000008A6077F381236EC78B312334AF6EE4C
:073343009C18F675A382221D
:05219300C12F010D0346
:10361000E4780FF67811F6780DE67810F6781276E1
:02362000042282
:10266400E4FE78B3E6FC08E6FDC394D8EC9403409A
:10267400037F0022EF700302277CD3ED940FEC94C8
:1026840003400302275AED94CBEC94005003022735
:102694005AD3ED94AAEC94024022D22D780DE6FF91
:1026A400137810F6302E11D3ED94BFEC940240044D
:1026B400C22E80047810A607E4FE8070D3ED94AA9D
:1026C400EC94025043ED9437EC9401403BD22E78C5
:1026D4000DE6FF7810F6302D13D3ED9493EC9402AD
:1026E4005004C22D8006EFC3137810F678127604D6
:1026F400301011D3ED9451EC94015004C2108004B5
:1027040078127601E4FE8024D3ED9437EC940150E2
:102714001BD21078127601302E10ED9426EC940121
:102724005004C22E800478127604E4FE302B11C3C8
:10273400ED94F3EC94025006C22BE4FE80027E0179
:10274400302C2FD3ED94DDEC94004006C22CE4FE33
:1027540080207E01801CD3ED940FEC94034006D2BC
:102764002B7E01800DD3ED94CBEC94005004D22C3D
:102774007E01C229C22A8058C22BC22CD3ED949F59
:10278400EC94035031ED9471EC94004029302910FD
:10279400ED9484EC94035006C229E4FE80027E0189
:1027A400302A2DD3ED9482EC94004006C22AE4FE34
:1027B400801E7E01801AD3ED949FEC94034004D2D2
:1027C40029800BC3ED9471EC94005002D22A7E014F
:0227D400AF064E
:0127D60022E0
:102E62009000E8E05463600AE4FF1233D7E4780E7E
:102E7200F622780E76017F01122664EF6008E4FFE5
:102E82001233D7D22F22C22F9000E9E05407FFBF9E
:102E92000605780E7603227810E6FD7F221232F7BD
:102EA2007812E6FD7F211232F7780FE6C454F078EB
:102EB2001146FD7F231232F77F011233D7780E7647
:022EC2000222EA
:04219800C139C13A4E
:102F2000C2399000E8E020E65130E203D23A223084
:102F30004004E4FF80119000E8E030E50D30223AD3
:102F40007F3C1235437F010233F9E4FF122664EF20
:102F50006008E4FF1233F9D22F22C22FD239303A5F
:102F600019780EE6B40213C378BAE6941018E69402
:0B2F70000E4005D239C23A22C23922BD
:10355D00426F78204F70656E2E0D0A00426F7820F5
:09356D00436C6F73652E0D0A001A
:08219C00C13BC13C4100EFFF13
:102FD600E4900000F09000E9E0FF5420FE9000002D
:102FE600F09000EFE06E6032EF30E50E9000EE7488
:102FF60001F07BFF7A35795D800BE49000EEF07B83
:10300600FF7A357969120F49D23BC20DD23CD235CF
:0A301600900000E09000EFF0D23DC2
:01302000228D
:10290700426F6F7374204F70656E204B65792E2868
:102917006C696E653A2564290D0A006C6F6E672035
:1029270032732070726573730D0A0073757070656A
:1029370072206C6F6E672038732070726573730D29
:102947000A0073686F72742070726573730D0A00E2
:102957004B6579205061697220545820564F522890
:102967006C696E653A2564292E0D0A004B6579203E
:10297700506169722054696D654F7574286C696E72
:10298700653A2564292E0D0A004B65792050616947
:10299700722047657420564F52286C696E653A2538
:1029A70064292E0D0A004B65792050616972204712
:1029B700657420564F4C286C696E653A2564292E3C
:1029C7000D0A004B657920506169722054582056D2
:1029D7004F4C286C696E653A2564292E0D0A004B09
:1029E7006579205061697220436E743A25642E28F8
:0B29F7006C696E653A2564290D0A002A
:1021A400C120C11FC11E0118004100DC004100E034
:0E21B400004100DB004200DD00004100DF00C2
:103622007BFF9000067401F0A3227BFF900006F05E
:02363200A322D1
:101B2D009000E9E030E4379000DDE475F001121427
:101B3D003B9000DDE0FEA3E0FFC39464EE94004013
:101B4D0007201C14D21C8010C3EF9490EE9401401A
:101B5D0007201D04D21DD21ED219C21A804230197F
:101B6D0038D23DE47818F6C219D21A9000DFF0C2CF
:101B7D001D9000DDE0FEA3E0FFD39419EE9400501C
:101B8D0008D220D21BD2358010C3EF94FAEE940008
:101B9D005007301C04C21CD21FE49000DDF0A3F0EE
:101BAD00301A75303972200D147F011233F9D20DB0
:101BBD007A297907E412362C74B4021CFA7F0312C9
:101BCD002CA29000DFE0D3940A5003021D2E301F8B
:101BDD001AC21F78187602E49000DCF0900071F0C4
:101BED00A3F07BFF7A297922120F49301E14C21EF1
:101BFD00E49000E0F0781876037BFF7A29793212B1
:101C0D000F49301B0FC21B781876017BFF7A29799B
:101C1D0049120F49C21AC20D9000EEE06401600333
:101C2D00021D417818E664026003021D039000DC7A
:101C3D00E0C3940150147F01121D427BFF7A297974
:101C4D005704900006F0A3021CCA9000DBE0D39469
:101C5D00054010E4121D4F7A297973123622741142
:101C6D00021CFA900072E0B40119E4FD7F02122407
:101C7D00D19000727402F07A2979901412362C7476
:101C8D001F803A900072E064027036900071E0603F
:101C9D001A7F02121D429000DCF09000DB121D4FE6
:101CAD007A2979AD12362274388042E4FD7F011213
:101CBD0024D17BFF7A2979CA1236247442F0120F8F
:101CCD00499000DCE0D3941440279000DBE004F051
:101CDD00E4A3F07BFF7A2979E69000DBE0FF90002A
:101CED0006E4F0A3EFF0A37401F0A37450F0020F1B
:101CFD00499000DC802B7818E6640370379000E083
:101D0D00E0FFC3941E501EEF540360047D01800953
:101D1D009000E0E030E007E4FD7F031224D1900055
:101D2D00E0E004F022E47818F6D20E9000E0F07FA7
:041D3D0004122CA2BE
:101D4100227D011224D1E4900071F0A3F022F078F9
:0A1D510018F6D20E7F04122CA22215
:1021C20041007A004100790041007B004100780023
:102D1C00900000E0FF25E02484F582E43400F58384
:102D2C0022900000E0FF25E0248CF582E43400F5CD
:102D3C0083E0FCA3E0FDEF25E0249CF582E4340065
:102D4C00F58322747C2FF582E43400F58322E4F0C1
:102D5C00A3F0EF25E02494F582E43400F58322906F
:102D6C000000E0FF2480F582E43400F58322E0FECD
:102D7C00A3E0C39DEE9C2225E0248CF582E4340074
:032D8C00F58322AA
:0F36650075FE0B75FF0FC290C291C293C29222E5
:10352900EF14600D14600D14600D2403700BD2901C
:0A35390022D29122D29222D29322D4
:05345E00900000E0FFFA
:10346300EF14600D14600D14600D2403700BC290F3
:0A34730022C29122C29222C29322CB
:10326C00E4FF122D4FE4F074802F122D72E4F0EF76
:10327C00122D21E4F0A3F0EF122D83122D5AE4F05D
:0E328C00A3F0122D42E4F0A3F00FEFB404D42F
:01329A002211
:1031B900AC07747C2C122D52EDF0EAC313FEEB130D
:1031C900FFEC122D21EEF0A3EFF0AF03EC122D83EB
:1031D900EAF0A3EFF0900005E0FEA3E0FFEC122D6A
:0F31E9005FEEF0A3EFF0EC122D43E4F0A3F02221
:10347D00122D4FEDF074802F122D72EBF0EF122DF7
:0F348D0021E4F0A37469F0122D42E4F0A3F022C1
:101D5B00E4900000F0F0900000E0FFC39404400317
:101D6B00021F50122D4FE0601F24FE60211460787B
:101D7B00147003021E2424036003021EFF90000054
:101D8B00E0FF123529021EFF12345E021EFF122DD8
:101D9B001C122D3D122D7A50051235298003123459
:101DAB005E122D2D122D7A5003021EFF900000E0C3
:101DBB00122D43122D5AE0FEA3E0D39400EE9400B3
:101DCB00400E900000E0122D5F74FFF5F012143BF3
:101DDB00900000E0FF122D5FE0FCA3E04C600302DB
:101DEB001EFF747C2F021E35122D1C122D3DE0FEA2
:101DFB00A3E0D39DEE9C5005123529800312345E6F
:101E0B00122D2D122D7A5003021EFF900000E012AE
:101E1B002D43E4F0A3F0021EFF122D6BE0701312A2
:101E2B0035A5C241900000E0247C122D52E4F00253
:101E3B001EFF122D6BE0FE6402702E20410CD2416E
:101E4B00EF122D21E4F0A37469F0122D1CE475F050
:101E5B000112143BEF122D21E0FCA3E0C394FEEC26
:101E6B0094005003021EF68031EE6401703720415E
:101E7B000FD241900000E0122D21E4F0A374FEF08C
:101E8B00122D1C74FFF5F012143BEF122D21E0FE06
:101E9B00A3E0D39469EE94005051900000E0122D12
:101EAB0070E4F08046122D6BE06403703EEF122D50
:101EBB0021E0FEA3E0FFC394FEEE94004004D24168
:101ECB00800BD3EF946AEE94005002C24190000055
:101EDB00E025E02484304109122D2574FFF5F080B4
:101EEB0007122D25E475F00112143B122D1CA3E0F3
:101EFB00FD123021900000E0FF700A122D4FE09090
:101F0B00007AF08037900000E0B4010C247C122D95
:101F1B0052E0900079F08024900000E0B4020C2491
:101F2B007C122D52E090007BF08011900000E0B409
:101F3B00030A247C122D52E0900078F0900000E010
:101F4B0004F0021D61E4900000F0900000E0FFC37C
:101F5B0094045012122D42E475F00112143B9000C0
:061F6B0000E004F080E438
:011F7100224D
:102F7B00456E74657220536869704D6F64652128C6
:102F8B006C696E653A2564290D0A004E6F742047F3
:102F9B00657420496E746F20536C656570284368A7
:102FAB00675374617475733A25642C566F785F564A
:102FBB006F75743A25642C526573746172745F4635
:0B2FCB006C61673A2564292E0D0A0096
:1021D200C13E4100E2004200E300004100E50F4140
:0521E20000E100C13D19
:0A36C200E4FF33A3CFF0A3EFF022E2
:1035E800D2AC759A03D2BCD2BDD2A9D2AB75FE308B
:0435F80043FF8022EB
:1035FC00C2ACE4F59AC2BCC2BDC2A9C2AB75FE3066
:04360C0053FF7F22C7
:1030AC00303E3730253DC2259000E1E004F0E0C30E
:1030BC0094054010E4A3F07DAA7F4F1232F7E49000
:1030CC0000E1F0229000E1E0B404187BFF7A2F7944
:1030DC007B90000674DCF0020F491235FC4387022A
:0430EC001235E8228F
:10329B00780EE6FF64026006200F03303D1F7BFFB4
:1032AB007A2F7996900006E4F0A3EFF0A20F123676
:0F32BB00C2A23D1236C2120F49C23DC322D32216
:103235001234F3123646123691E4F5861232CA126A
:1032450034BA7D087F761236E5D2A8D2AF12361091
:103255007D697F031235D212366512326C12000E6B
:073265009000D07401F0227B
:030003000236F3CF
:0636F300D23D75E20F322A
:1021E700204029000000000000000000000000005F
:1021F70000000000000000000000000000000000D8
:1022070000000000000000000000000000000000C7
:1022170000000000000000000000000000000000B7
:0F222700000000C1384100F0004100F100C13754
:0B36AC00E0FF04F074292FF8A699221B
:1034F30075FE0443FF0CD2DF43878075BA0375AAB8
:0B350300DC759852D299D298D2AC220D
:0630670090004312151950
:10306D00E4900046F075FE0443FF0C75FE0353FF1C
:10307D00F3F0900046E0C39FE49E501C2036FDD235
:10308D0036900043E475F001121502121339F599CB
:0E309D00900046E004F080DA75FE0453FFF365
:0130AB002202
:03002300022B8A23
:102B8A00C0E0C083C082C0D075D000C000C005C0FC
:102B9A0006C007309904C299C236309867C298D2E3
:102BAA003D9000F0E014601914602D24027055E580
:102BBA00999000F0B455087401F0A3E4F0800E80F7
:102BCA0011E5999000F0B4AA097402F0A31236AC88
:102BDA008032E4F0A3F0802C9000F11236AC782B0E
:102BEA00E62404FFE433FEE0FDC39FEE6480F8743C
:102BFA0080985005ED9440400B9000F1E4F090006D
:102C0A00F0F0D238D007D006D005D000D0D0D0828C
:052C1A00D083D0E03280
:0E36830090002BEFF01236D590002BE0FF22C6
:1036460075F10A759F03759EFD759692759A02220D
:0836D5002037FDD2378F972248
:03008B0002358EAD
:10358E00C0E0E59630E1055396FDC237E59630E092
:07359E00035396FED0E0325A
:1027D700506F776572204F6E20537461746521487E
:1027E700616C6C28307825782920286C696E653AE9
:1027F7002564290D0A004177616B65205374617464
:102807006520286C696E653A2564290D0A004E6FAC
:10281700726D616C20537461746520286C696E65F4
:102827003A2564290D0A00536C656570205374615D
:10283700746520286C696E653A2564290D0A005372
:102847005441303A307825782C535441313A307816
:1028570025782C535441323A307825782C436869CF
:10286700705F5354413A307825782C564F585F5350
:1028770054413A307825782E4465635F536C65651B
:10288700703A25640D0A00566E74633A25642C4924
:10289700766F6C3A25642C566261743A25642C561F
:1028A700696E3A25642C56706D69643A25642C5616
:1028B7006F723A25642C566F6C3A25642C56646403
:1028C7003A25642C49766F723A25642E0D0A004426
:1028D70065636E745F536C65657044656C617920E0
:1028E70052656C6F61642E0D0A00456E7465722027
:1028F7005374616E646279204D6F6465210D0A001F
:102236004300D00402024100CD004100CE00C1356A
:0E224600C1344100CF004100D3004100CC0064
:10002600E6FF08A3E6CFF0A3EFF022900005E4F088
:10003600A3740AF07B147A007D02227BFFE0900015
:1000460006FFE4F0A3EFF02290007AF0900079F03A
:1000560090007BF0900078F022F0E4900005F0A389
:10006600F0FBFA22900005E4F0A37403F07B647AB7
:10007600007D02227BFF9000067402F0A322FFE4BB
:05008600F0A3EFF022E1
:10343D00E4FBFF1234547F0112347DE4FB7F021252
:10344D0034547F0302347D7D0412347DE4FB7D040E
:01345D00224C
:10157500303518C235E49000CEF01217E4FD7F0334
:101585001231B9740212004ED23D22202F03300BC6
:101595005F203005D230D2352290007AE0640260B7
:1015A5000E120031E4FF1231B990007A7403F09005
:1015B5000079E06402600E1200317F011231B990AA
:1015C50000797403F090007BE06402600912003139
:1015D50012184C7403F0900078E06402700302174F
:1015E500AA1200317F031231B99000787403F022FA
:1015F50030300CC230C232C231C23CC20CD2347857
:101605000EE6FF70030216C66403701A203205D277
:101615003202343D1217AB7D017F031231B97401DB
:1016250012004E0216BD20310ED231C232D235E43F
:101635009000D3F00216BD9000CEE0C39401505740
:10164500E004F09000D3E014601A146027146034AD
:101655002403706490007AE06404605C7B017D047F
:10166500E4FF802E900079E06404604C7B017D04EA
:101675007F01801E90007BE06404603C7B017D045B
:101685007F02800E900078E06404602C7B017D046D
:101695007F0312347D80219000CEE0C3940F500566
:1016A500E004F08013E49000CEF09000D3E004F065
:1016B500E0C394044002E4F0C23CC20CC220D23321
:1016C5002230310AC23112343DD235D23422203C87
:1016D5000C203309200C062020030217AA9000CE07
:1016E500E0FFC394015004E004F022EFC39464408A
:1016F500030217959000CEE004F07814E6C3941920
:10170500503090007AE0640370030217AAE4900059
:1017150005F0A3F07B64FA7D03FF1231B990007ADE
:10172500740412005FFD7F011231B99000797402D3
:1017350080107814E6C39432501312181912183811
:10174500740112005FFD12184C7402801F7814E6B4
:10175500C3944B5027121819121838740112005FE0
:101765007D017F021231B990007B740112005FFD8B
:101775007F031231B99000787402F0227814E6C321
:10178500946450211217AB7D011218437401801225
:10179500C23CC233C20CC220E41217E4FD12184346
:0517A500740212005166
:1017AA0022E4900005F0A3F0FBFA7D01FF1231B9A3
:1017BA00E4900005F0A3F0FBFA7D017F011231B934
:1017CA00E4900005F0A3F0FBFA7D017F021231B923
:1017DA00E4900005F0A3F0FBFA22900005F0A3F0D4
:1017EA00FBFAFDFF1231B9E4900005F0A3F0FBFA11
:1017FA00FD7F011231B9E4900005F0A3F0FBFAFD78
:10180A007F021231B9E4900005F0A3F0FBFA22E45A
:10181A00900005F0A3F0FBFA7D01FF1231B99000A8
:10182A007A7401F0E4900005F0A3F0FBFA227D013E
:10183A007F011231B9900079227F031231B99000E9
:0B184A007A227F021231B990007B224D
:1035BC009000ECE0FF04F0122A029000ECE0C394BF
:0635CC00084002E4F022B9
:10349C00122FD6121B2D1230F0302111C221122EF8
:0E34AC0062122F20122C1F12157512185522B5
:0936CC007B017A0079E6022EC4AC
:10232F00E4900000F09000D0E0FFA3E0FE6F60713A
:10233F00A3EEF09000D0E0A3F024FE6030146043D1
:10234F00146051240360030224D012006AE4FF12C8
:10235F0031B912006A7F011231B97A2779D790000B
:10236F00EE120041A37401F0A374F080307F0112CC
:10237F00341B7BFF7A2779FD9000067401F0A3745C
:10238F00FC801A9000E5740FF07A28791512007A04
:10239F00740880097A28792E12007A7413F00224B7
:1023AF009B9000D1E024FE603914603D147003024D
:1023BF0024B3240360030224D09000CCE004F0E0A7
:1023CF00C3940850030224D09000D07402F0E4901C
:1023DF0000CCF07815E660030224D09000D074048E
:1023EF00F0229000D07403F0222025030224D0C2E3
:1023FF00257A2879469000E61200419000E7E09098
:10240F0000081200479000E8E090000A1200849044
:10241F0000E9E090000C1200849000EAE0FF9000C9
:10242F000EE4F0A3EFF09000E5E0FF900010E4F071
:10243F00A3EFF0120F497BFF7A28798E78B3E6FF6E
:10244F000890000612002A78A712002678B9120009
:10245F002678AD12002678B712002678B112002622
:10246F0078AF12002678A912002678AB1200261238
:10247F000F499000E5E0D394004014E014F0303D94
:10248F0040C23D740FF07BFF7A2879D6020F497B4B
:10249F00FF7A2879F1120F499000D07404F0E4907C
:1024AF0000E1F02212329B50127F04122CA2E4FFA3
:1024BF001233F9E4FF12341B0230AC9000D07402D7
:0124CF00F01C
:0124D00022E9
:10317700302436C2249000CDE0FF04F0EF14601233
:103187001460141460161460182404701C1235BCE3
:1031970080171236CC8012123323800D12349C8094
:1031A7000812232FE49000CDF0302605C226121D09
:0231B7005B2299
:10008E00426F6F7374204F70656E2E286C696E65AB
:10009E003A2564290D0A00426F7820436C6F736510
:1000AE002E286C696E653A2564290D0A00426F7818
:1000BE00204F70656E2E286C696E653A2564290D89
:1000CE000A004F70656E20426F7820434D442054D5
:1000DE0058204F7665722E0D0A004F70656E2042C5
:1000EE006F7820416E642045617270686F6E652076
:1000FE00476574496E284E756D3A25642928566FEA
:10010E00785374613A30782578292E0D0A00436CA5
:10011E006F736520426F7820416E6420466F726364
:10012E006520566F6C746167652055702E0D0A2020
:10013E0000564F5820566F757420355628564F5816
:10014E005F5354413A307825782C6C696E653A25A8
:10015E0064292E0D0A00564F5820434847204675F5
:10016E006C6C2E0D0A00564F582047657420496E50
:10017E00746F20536C6565702E0D0A00466F6C6CA3
:10018E006F772043484720496E697453746120533A
:10019E006574204D61782056706D69642E28566FF7
:1001AE00785F7374613A3078257829286C696E65AA
:1001BE003A2564290D0A00466F6C6C6F7720434810
:1001CE004720496E69745374612E28566F785F7399
:1001DE0074613A3078257829286C696E653A256401
:1001EE00290D0A00466F6C6C6F77204348472053E9
:1001FE007461312C4E6F2045617250686F6E6520B0
:10020E00496E20426F782E286C696E653A256429F6
:10021E000D0A00466F6C6C6F77204348472053746D
:10022E0061312C564F5220436867696E67284976B4
:10023E006F723A25646D41292E286C696E653A25D8
:10024E0064290D0A00466F6C6C6F77204348472077
:10025E00537461312C564F4C20436867696E672882
:10026E0049766F6C3A25646D41292E286C696E654E
:10027E003A2564290D0A00466F6C6C6F772043484F
:10028E004720537461322C4765742049564F523AB9
:10029E0025646D412E286C696E653A2564290D0A18
:1002AE0000466F6C6C6F7720434847205374613261
:1002BE002C4765742049564F4C3A25646D412E28C3
:1002CE006C696E653A2564290D0A00466F6C6C6F79
:1002DE00772043484720537461332C564F582043A0
:1002EE006867205265496E69742E286C696E653A8E
:1002FE002564290D0A00466F6C6C6F7720434847C2
:10030E002053746133284356292C564F5220567071
:10031E006D6964204164645374612849766F723A42
:10032E0025646D41292E286C696E653A2564290D68
:10033E000A00466F6C6C6F772043484720537461F8
:10034E0033284356292C564F522056706D6964201F
:10035E005375625374612849766F723A25646D4104
:10036E00292E286C696E653A2564290D0A00466FA0
:10037E006C6C6F7720434847205374613328434396
:10038E00292C564F522056706D6964205375625356
:10039E0074612849766F723A25646D41292E286C56
:1003AE00696E653A2564290D0A00466F6C6C6F778D
:1003BE00204348472053746133284343292C564F1A
:1003CE00522056706D6964204164645374612849EB
:1003DE00766F723A25646D41292E286C696E653AE6
:1003EE002564290D0A00466F6C6C6F7720434847D1
:1003FE002053746133284356292C564F4C20567087
:10040E006D6964204164645374612849766F6C3A57
:10041E0025646D41292E286C696E653A2564290D77
:10042E000A00466F6C6C6F77204348472053746107
:10043E0033284356292C564F4C2056706D69642034
:10044E005375625374612849766F6C3A25646D4119
:10045E00292E286C696E653A2564290D0A00466FAF
:10046E006C6C6F77204348472053746133284343A5
:10047E00292C564F4C2056706D696420537562536B
:10048E0074612849766F6C3A25646D41292E286C6B
:10049E00696E653A2564290D0A00466F6C6C6F779C
:1004AE00204348472053746133284343292C564F29
:1004BE004C2056706D696420416464537461284900
:1004CE00766F6C3A25646D41292E286C696E653AFB
:1004DE002564290D0A00466F6C6C6F7720434847E0
:1004EE0020537461342C564F782056706D696420F9
:1004FE0041646453746128566F75743A3078257868
:10050E002C49766F6C3A25646D412C49766F723AA0
:10051E0025646D4129286C696E653A2564292E0D76
:10052E000A00466F6C6C6F77204348472053746106
:10053E00342C564F78204368696E6728566F757451
:10054E003A307825782C49766F6C3A25646D412CBB
:10055E0049766F723A25646D4129286C696E653A49
:10056E002564292E0D0A00466F6C6C6F7720434868
:10057E004720537461342C564F522056706D696467
:10058E002041646453746128566F75743A3078252F
:10059E00782C49766F723A25646D4129286C696E04
:1005AE00653A2564292E0D0A00466F6C6C6F772014
:1005BE0043484720537461342C564F522043686988
:1005CE006E6728566F75743A307825782C49766F99
:1005DE00723A25646D4129286C696E653A25642945
:1005EE002E0D0A00466F6C6C6F77204348472053E0
:1005FE007461342C564F4C2056706D6964204164E2
:10060E006453746128566F75743A307825782C4986
:10061E00766F6C3A25646D4129286C696E653A25B2
:10062E0064292E0D0A00466F6C6C6F772043484785
:10063E0020537461342C564F4C204368696E6728E2
:10064E00566F75743A307825782C49766F6C3A254A
:10065E00646D4129286C696E653A2564292E0D0A50
:10066E0000466F6C6C6F772043484720537562537A
:10067E0074612C564F4C2F564F52286C696E653A4A
:10068E002564292E0D0A00466F6C6C6F7720434847
:10069E0047205375625374612C564F52286C696E05
:1006AE00653A2564292E0D0A00466F6C6C6F772013
:1006BE00434847205375625374612C564F4C286C37
:1006CE00696E653A2564292E0D0A00466F6C6C6FB3
:1006DE007720434847205375625374612C28535436
:1006EE00413A307825782C56706D69643A30782509
:1006FE007829286C696E653A2564290D0A00466FC3
:10070E006C6C6F7720434847204164645374612CAE
:10071E00285354413A307825782C56706D69643AD6
:10072E003078257829286C696E653A2564290D0A7A
:10073E00005258305F4275666665725B305D3A30C6
:10074E007825782C5258305F4275666665725B313B
:10075E005D3A307825782C5258305F427566666562
:10076E00725B325D3A307825782C5258305F427584
:10077E00666665725B335D3A307825782C52583058
:10078E005F4275666665725B345D3A307825782C0B
:10079E005258305F4275666665725B355D3A3078E9
:1007AE0025782C5258305F4275666665725B365DF1
:1007BE003A307825782C5258305F427566666572ED
:1007CE005B375D3A307825782C6C696E653A256416
:1007DE000D0A0000000000000000000000000000F4
:1007EE0000000000000000000000000000000000FB
:1007FE0000000000000000000000000000000000EB
:10080E0000000000000000000000000000000000DA
:03081E00000000D7
:10225400C10FC10CC10D410073FFC10B42004E0000
:102264000042004C000042007100001A69000000A6
:10227400000000000000000000000000000000005A
:102284000000000000000020248300000000000083
:10229400000000000000000000000000000000003A
:1022A40000000000000000000000000000004100E9
:1022B400700042006E00004200740000C10E410034
:0222C4007700A1
:101F720090001574011213C47402900076F0900060
:101F8200000214F990000E121451FF900006E5F0C1
:101F9200F0A3EFF0A37404F0A322E6FFE4F0A3EFB2
:101FA200F008E6FFA3E4F0A3EFF008E6FFA3E4F0F5
:101FB200A3EFF008E6A3FFE4F0A3EFF02290001AEB
:101FC200121352900006F078A7E6FF08E6A3CF228C
:101FD2007BFF9000067404F0A322900006121451B5
:101FE20090000EFFAEF00214517BFF9000EAE0FF7A
:101FF200E4900006F0A3EFF0A3229000151213C4A0
:1020020090001A0213527BFF900006ECF0A322907C
:102012000004121451FFAEF090000C021451900013
:102022000C8FF00214A89000EAE0540CFBE4FAF9D9
:10203200F8900048E0FFE4FCFDFEC30214D59000D6
:102042000A121451D3FFED9FEC95F022EE8FF0901F
:10205200000E0214A8900017021352900013E4120B
:1020620013C4E49000120213C47BFF900006F0A395
:102072002290001AEF1213C49000762290001802E8
:1020820013522FF8E6FE74032FF582E43400F58331
:10209200229000141213C47BFF229000EAE0540C39
:1020A20022FF900008E4F0A3EFF022E490004EF04B
:1020B200A322E6FC08E6FD25E0FFEC338FF00214D4
:1020C200A874019000160213C4C3FDACF09FEC9EED
:1020D2002290004BE0FFD3941522FFE4FCFDFEFAB0
:1020E200F9F8C30214D5E0FFE4900006F0A3EF2252
:1020F20078ABE6FE08E6FF229000EAE05410FFE427
:10210200FCFDEF2290006CF0A3F0900076F022E448
:102112009000180213C4E49000170213C4EDF0A358
:102122007403F0A322E490004BF0900049F0229057
:1021320000EAE05420FFE4FC22EE8FF00214A890A3
:10214200004EE09400229000130213529000067495
:0D21520002F0222EF8E6FF900073E0A422B8
:052CA200900043EFF07B
:102CA700E4A3F0A3F07F271231F8900044EFF07F00
:102CB700371231F8900045EFF0900043E024FD60B3
:102CC7001B14602424FE602824057035900045E01D
:102CD7004494F0900044E04498F08025900044E04C
:102CE7004406F054E7F08019900045E054FD800950
:102CF700900045E04402F054FEF0900044E054E1B7
:102D0700F0900044E0FD7F271232F7900045E0FD88
:052D17007F370232F7D6
:101855009000E8E054186003D20B22C20B20390334
:10186500021B04303B72200D207F3C1235437F0163
:101875001233F9D20D7A00798E740112206B74CF70
:10188500F0120F497F03022CA2122127A3F0C200F8
:101895009000EEE07023C20CD201D202C204C2074E
:1018A500C203C208C209D20FC2341221067A0079D6
:1018B500A50412206B74FC8017C201C202D204C2B7
:1018C500057BFF7A0079BB9000067402F0A37409CA
:1018D500F0120F49C20DC23B2004030219CD90003E
:1018E50049E0C394055003021A9D90004AE0C39451
:1018F50005500A7F06122CA290004A802120004044
:101905001220D3501FEF54037003FD800990004B44
:10191500E020E0077D017F061224D190004BE00412
:10192500F00219CD7F04122CA2E490004BF0D200F6
:10193500D20EC20F7BFF7A0079D0120F490219CD62
:101945007818E660030219CD300E2EC20E9000EA1B
:10195500E0FF540C900048F06018EF540C7B0C121B
:1019650020DC90007070067402F00219CD7401F04D
:101975008056E4900070F0804F122028604A1220B3
:101985009CFF601ED20CD235E4FCFDFE7B0CF8C337
:101995001214D590007070057402F0800A7401F07D
:1019A5008005E4900070F07BFF7A0079E890007084
:1019B500E0900006121FB89000EAE01220A3120F73
:1019C5004912209C900048F0200103021B0130348D
:1019D5002D200D167F011233F9D20DD20FE41221FD
:1019E50006900049F0C207D203227F03122CA27B86
:1019F500FF7A01791C120F49C20DC23480552003AC
:101A050052900049E0D394035003021A9D90004A76
:101A1500E0FFD39415501CEF54037003FD8009902B
:101A2500004AE020E0077D017F811224D190004A21
:101A3500021A9D1220D3501BEF54037003FD800939
:101A450090004BE020E0077D017F071224D1900034
:101A55004B804530021B7F03122CA27A01793F127D
:101A65001FEB7402F0A374E7F0120F49C202021BC8
:101A7500012007509000EAE054307B301220DC60F2
:101A85000E12209CFFE4FCFDFEEF6003303F249026
:101A95000049E0D394325004E004F0227BFF7A0140
:101AA5007964120F49D207122127C2087F04122C2C
:101AB500A2804990006DE070437B017A0079501255
:101AC500082180381220D3501EEF54037003FD8087
:101AD5000990004BE020E0077D017F801224D19022
:101AE500004BE004F08015200812D2087F04122C68
:101AF500A2C20F7BFF7A017974120F49C206222018
:101B05000611D2067F04122CA2C20F12209C90004F
:101B150048F022122028600F12209CFF6004D20C8E
:071B2500D235900048EFF0FB
:011B2C002296
:0608210090000012151901
:10082700900076E01470030208F51470030209CCF7
:10083700147003020A3C147003020BEE24046003D5
:10084700020D3F121F8090001D1213526003020D0C
:100857003F900077E0D3940A5031E004F090001AFB
:10086700743C1213C4300A03020D3F121F8012207A
:1008770002FF1235437A01798A121FEB7403F0A342
:10088700747FF0120F49D20A020D3FE4900077F00F
:10089700C20A121F80E41220C5900015E41213C487
:1008A70012205D900011E41213C4900010E412139B
:1008B700C4122111122118E4F5F012205190000CF6
:1008C700E4F5F01214A8900019E41213C490001B69
:1008D700743C1220777401F01220ADF07BFF7A018F
:1008E70079C5121FED7403F0A374A6020A8F900056
:1008F700EAE0FB5420FFE4FCFDFEEF6028EB541018
:10090700FF6022121F8090001D74011213C4E4902F
:100917000076F07BFF7A0179F29000067403F0A36A
:1009270074B5020A8F122131EF703D1220F2121FA7
:100937008090000212213B7D051213E6EF7802C377
:1009470033CE33CED8F9FF121F8090000612213B19
:1009570078AB90000A1220B47A027921122008128B
:10096700211F74C3F0120F491220FA704778A7E6C7
:10097700FE08E6FF121F80EE8FF012148918E6FEBC
:1009870008E6FF7D051213E6EF7802C333CE33CEB8
:10099700D8F9FF121F8090000412213B78A790001E
:1009A700081220B47A02795312200812211F74D03A
:1009B700F0120F49121F8090001C740112207774E7
:1009C70002F0020D3FD390004FE0940512214150F1
:1009D70003020A481220ADF0122131FDEF702212F6
:1009E70020F2121F8012204E74011221127BFF7A0F
:1009F700027985EE121FF37403F0A374ECF0120F63
:100A0700491220FA702678A7E6FE08E6FF121F8033
:100A1700EE12202074011221197BFF7A0279AFEEC2
:100A27001220EB12212074F6F0120F499000767411
:100A370003F0020D3FD390004FE094021221415082
:100A47000AE475F00112143B020D3F1220AD121F8C
:100A57007F90000A121FDFD39FE5F09E5016121FEA
:100A67008090000812145190000C121FE5D39FE5E7
:100A7700F09E4018E4121F7C90001CE41213C47A05
:100A87000279D9121FD27410F0020D3C121F801286
:100A9700207E64016003020B3C90000E121451D3B8
:100AA7009414E5F0940050499000EAE030E5259071
:100AB70000167401121FFFC3943C4006121F8012D8
:100AC7002111121F80121F867422F07BFF7A03798F
:100AD70004020B39121F8090001374011213C41201
:100AE7001F80121F867429F07BFF7A037940020B5F
:100AF70039121F80121FDCD39FE5F09E9000004043
:100B07001C1214F990001374011213C4121F8012DF
:100B17001F867433F07BFF7A03797C80151214F9F2
:100B27001220C3121F80121F86743AF07BFF7A03CC
:100B370079B8120F49121F8012205764016003020F
:100B47000D3F12201AD39414E5F0940050499000F9
:100B5700EAE030E4257401121FFCC3943C400612FE
:100B67001F80122118121F8090000C121F89744DCC
:100B7700F07BFF7A0379F4020D3C121F8074011297
:100B87002065121F8090000C121F897454F07BFFA0
:100B97007A047930020D3C121F80122011D39FE591
:100BA700F09E90000040201214F990001274011278
:100BB70013C4121F8090000C121F89745EF07BFF14
:100BC7007A04796C020D3C1214F990001574011225
:100BD70013C4121F8090000C121F897465F07BFFED
:100BE7007A0479A8020D3CD390004FE094141221A7
:100BF70041501DE475F00112143B1220F2121F80C0
:100C070012204E78A7E6FF08E6CF122020020D3FFC
:100C17001220AD121F7F12207E6401706F122057C1
:100C270064017068121FDC1220CB4008121F80126B
:100C37002040403A121F801220111220CB400B1285
:100C47001F809000081220434024121F801220C3E7
:100C5700121F72121FBFF0A3EFF078AB121FCB1257
:100C67001F92748CF07BFF7A0479E4020D3C121F0B
:100C770080121FBFF0A3EFF078AB121FCB121F92A9
:100C87007493F07BFF7A057930020D3C121F8012B6
:100C9700207E64017051121FDC1220CB4008121F06
:100CA700801220404023121F80900016121F7512D9
:100CB7002002900006F078AB121FCB121F9274A689
:100CC700F07BFF7A057975801B121F801220029036
:100CD7000006F078AB121FCB121F9274ACF07BFFAB
:100CE7007A0579B7120F49121F80122057640170D5
:100CF70047900008122014D31220CC500F121F80E7
:100D0700900004121451C31220475017121F80126B
:100D17001F72121FBF121F9274BAF07BFF7A0579F8
:100D2700F28012121F80121FBF121F9274C0F07B35
:100D3700FF7A067934120F49121F8012207EFF6452
:100D470001600A12205764016003020EC81221488D
:100D5700FE6401600D9000121213526401600302D9
:100D67000E50EF64017025122057B4011FEEB40135
:100D77001B122148B4011590001474011213C47A90
:100D870006796F121FD274D8F0120F49121F801202
:100D9700207E6401701B12205770161221486401CF
:100DA7007038041220937A067995121FD474E28062
:100DB70025121F8012207E7021122057B4011B902C
:100DC7000012121352B4011274011220937A067999
:100DD700B7121FD474EDF0120F49121F8012205D55
:100DE70090001412135264016003020EDD121F807B
:100DF700122002D39400400890001A74FE12137F49
:100E0700900019121352FF122002D39F500B121F8A
:100E1700801220737404F080069000767402F0123A
:100E270020AD121F7F900014E41220771220E812E1
:100E37001F7F1220021220A3A37405F0A3740CF0E5
:100E47007BFF7A0679D9020EBB121F80900016121B
:100E570013526401600A90001512135264017076F0
:100E6700900016E41213C4E4121FFCC3943C500B09
:100E7700121F8090001A740212137F7404121F7CD1
:100E870090001B121352FF122002C39F4009121F2A
:100E9700801220737401F09000761220E8121F7FF1
:100EA7001220021220A3A37405F0A37429F07BFF7C
:100EB7007A07790C120F49121F80122002FF0235A0
:100EC70043900076E0D39402400CE4121F7F900019
:060ED7001D74011213C49A
:010EDD0022F2
:0B313400900043121519900046EDF0CA
:10313F00E4FE900046E0FD14F0ED6029900043E4BA
:10314F0075F0011215021213396EFEE4FFEFC394EE
:10315F000850DFEE30E007C313648CFE8004EEC32B
:07316F0013FE0F80E8AF061C
:013176002236
:0824D100900000EFF0A3EDF014
:1024D900E4A3F078037C007D017BFF7A0779E1FEB4
:1024E9007F40121313E4900003F0A37455F0A37412
:1024F900AAF0900000E0FE900007F0900001E0FDD6
:10250900900073F0EE121522252A01255602258C1A
:102519000325960625960725DB8025E381000025FE
:10252900EE12214EED700E9000087402F0E4900056
:1025390071F00225EE900001E0640160030225EECE
:1025490090000804F0E4900072F00225EE90000675
:102559007420F07F05900001E075F012A424831225
:102569002084EEF00FEFB412EC7F17EFC3940D50F7
:1025790074900001E075F00DA42469122084EEF036
:102589000F80E812214E90000804F0805890000650
:102599007405F09000087401F07814E6A3F0A374B0
:1025A90020F0900001E0FF700D90006EE070028055
:1025B9000F90006F8015EFB4012B90006FE0700849
:1025C90090000B74FFF0801D90006EE090000BF0FE
:1025D90080139000067401F0800B12214E90007058
:1025E900E0900008F0900006E02404FF900002F05B
:1025F900FD7B017A007903123134900002E0240353
:1026090012208BEFF07F01122CA2900001E0FFB4A1
:10261900010B75FE0E53FFF043FF08800CEF7009A4
:1026290075FE0E53FFF043FF01900002E02402FF04
:10263900E433FE7B017A007903123067900001E0F0
:10264900FFB4010A75FE0353FFF343FF0822EF703D
:0A2659000975FE0353FFF343FF046D
:012663002254
:102D8F00EF24FA60441460412406705DE4FE742D54
:102D9F0075F01212215524832EF8A6070EEEB412E9
:102DAF00EDE4FE743F75F00D12215524692EF8A63F
:102DBF00070EEEB408ED900073E0700690007104FA
:102DCF00F0229000727401F022782DE6B4E30D909A
:102DDF00004C7401F008E690006EF02290004D74E4
:092DEF0001F0782EE690006FF06F
:012DF80022B8
:1030F000303840C2387BFF7A07793F782990000644
:10310000121F9C08A3121F9CA37406F0A37499F0CD
:10311000120F497B007A007929782BE62403FD12EF
:103120003134782BE6242CF8E6B50707782CE6FF37
:03313000122D8FCE
:013133002279
:1022C600011500011400C13FC140011350602800F0
:1022D600A40BB80BEA0C1C0C800CB20CE40D160D0A
:1022E600480D7A0DAC0DF70E420E880ED80F0A0F68
:0922F6003C0F870FD2101D106887
:1034D700EF25E024A4F582E43400F583E0FCA3E0C3
:0C34E700227815EFF675F005A418F62207
:102C1F00E4FF780EE6B402151234D72432FDE43CFB
:102C2F00FCC378BAE69D18E69C500E80111234D77B
:102C3F00D378BA96EC189650050FEFB414D47815D4
:102C4F00E6FEEFD39E78134003068001169000E94D
:102C5F00E030E3031234E87813E6FED3949650067F
:102C6F00EEC3940A50061234E81876507815E6FF32
:102C7F00D394005004D2408008EFD394014002C295
:102C8F0040EFD394015003D23F22EFD3940240027E
:022C9F00C23F32
:012CA1002210
:1022FF004100D7004100DA004100D6004200D4006F
:10230F00004100D800C123C124C126C122C121C16F
:09231F00254100D900C127C128A5
:102DF9009000D9E06062E4F0D2239000D7E004F0BB
:102E0900E0C394054004E4F0D2249000DAE004F031
:102E1900E0C3940A4004E4F0D2269000D4E475F0AB
:102E29000112143BC39000D5E094649000D4E0945F
:102E3900004006E4F0A3F0D2219000D6E004F0E0CF
:102E4900C394FA4013E4F0D2229000D8E004F0E0F1
:092E590094044004E4F0D22522A7
:03000B0002336F4E
:10336F00C0E0C083C082C0D074FC258CF58C74661D
:10337F00258AF58A9000D97401F0D0D0D082D083FD
:03338F00D0E03259
:0E369100758901758CFC758A66D2A9D28C22CF
:0D369F0075FE0FEF25E0FE7403A80608225B
:1035A50012369F8002C333D8FCF452FFEFB40406F1
:0735B50075FE0FE4F5FF2293
:1035D20075FE11EF5407F5FF75FE12AF058FFF75EB
:0635E200FE1075FF01223E
:1030210012369F8002C333D8FCF452FF7401A80604
:10303100088002C333D8FC42FF75FE0B7401A80758
:10304100088002C333D8FC42FFEF70038DCE22EF1C
:10305100B401038DCF22EFB402038DDE22EFB4035E
:0630610004AF058FDF2221
:033FFD00010102BD
:0623280001160001170080
:1032CA00D28075FE0443FF0175FE0343FF0175FEBC
:1032DA000243FF01D28175FE0443FF0275FE0343D8
:0D32EA00FF0275FE0243FF027816760122F6
:0C363400C280123640D281123640D28093
:05364000E4FF0FDFFEB6
:013645002262
:10350E00D281D2801236402081037F0022C28112E6
:0B351E0036403081037F00227F012235
:0F367400C280C28112363BD281123640023640EC
:0836DD00123634C280023640AF
:0B36B700123634123640C2800236404A
:0233B500AE0761
:1033B7007D08AF051DEF6015C280EE30E704D281AE
:0F33C7008002C281EE25E0FE12363B80E5C28017
:0133D60022D4
:103392007E08E4FDD281AF061EEF6012ED25E0FD4E
:1033A200C28012363B3081EEED4401FD80E8C280DE
:0233B200AF0565
:0133B40022F6
:10000E007D087F351232F77D0A7F761236E57D0444
:05001E007F200232F713
:102EC4009000001215197F10122F0CEF1213B27F0D
:102ED40011122F0C900001EF1213C47F12122F163F
:102EE400900002EF1213C47F13122F16900003EF09
:102EF4001213C47F141231F89000001214F99000D8
:102F040004EF1213C47F00221231F890000012144F
:0C2F1400F9221231F89000001214F9228A
:0533D700900000EFF082
:1033DC00E47F201231F8900000E06006EF4401FF1A
:0D33EC008004EF54FEFFAD077F200232F792
:0533F900900001EFF05F
:1033FE00E47F271231F8900001E06006EF4401FFF0
:0D340E008004EF54FEFFAD077F270232F768
:05354300900003EFF011
:10354800E47F251231F8EF54C0FF900003E04FFDEF
:053558007F250232F79F
:05341B00900001EFF03C
:10342000E47F201231F8900001E06006EF54FBFFCA
:0D3430008004EF4404FFAD077F200232F757
:0736E5008FFEAF058FFF22ED
:0636EC008FFEAEFFAF06E9
:0136F20022B5
:1032F700900046EFF0A3EDF012350E7F0C1233B5B8
:103307001236B7900046E0FF1233B51236B7900079
:0C33170047E0FF1233B51236B7023674DF
:0531F800900046EFF01D
:1031FD00E4A3F012350E7F0C1233B51236B79000E2
:10320D0046E0FF1233B51236B712350E7F0D12336D
:10321D00B51236B7123392900047EFF01236DD1229
:07322D003674900047E0FF3A
:013234002277
:102B0A00023576E493A3F8E493A34003F68001F236
:102B1A0008DFF48029E493A3F85407240CC8C333CC
:102B2A00C4540F4420C8834004F456800146F6DF9B
:102B3A00E4800B010204081020408090215FE47EAB
:102B4A00019360BCA3FF543F30E509541FFEE49390
:102B5A00A360010ECF54C025E060A840B8E493A357
:102B6A00FAE493A3F8E493A3C8C582C8CAC583CA82
:102B7A00F0A3C8C582C8CAC583CADFE9DEE780BE3A
:01232E0000AE
:10124300E709F608DFFA8046E709F208DFFA803E8D
:1012530088828C83E709F0A3DFFA8032E309F6087A
:10126300DFFA8078E309F208DFFA807088828C83E2
:10127300E309F0A3DFFA806489828A83E0A3F60896
:10128300DFFA805889828A83E0A3F208DFFA804C70
:1012930080D280FA80C680D4806980F28033801047
:1012A30080A680EA809A80A880DA80E280CA8033B0
:1012B30089828A83ECFAE493A3C8C582C8CCC58328
:1012C300CCF0A3C8C582C8CCC583CCDFE9DEE780F8
:1012D3000D89828A83E493A3F608DFF9ECFAA9F077
:1012E300EDFB2289828A83ECFAE0A3C8C582C8CCCD
:1012F300C583CCF0A3C8C582C8CCC583CCDFEADEE6
:10130300E880DB89828A83E493A3F208DFF980CC47
:1013130088F0EF60010E4E60C388F0ED2402B40440
:101323000050B9F582EB2402B4040050AF232345E7
:0613330082239012937367
:10133900BB010689828A83E0225002E722BBFE02B2
:09134900E32289828A83E49322E5
:10135200BB010CE58229F582E5833AF583E0225050
:1013620006E92582F8E622BBFE06E92582F8E2229A
:0D137200E58229F582E5833AF583E49322B4
:10137F00BB010FF8E58229F582E5833AF583E02872
:10138F00F0225009C58229F8E58226F622BBFE0914
:10139F00C58229F8E22582F222F8EA2583F583E94E
:0313AF009328225E
:1013B200BB010689828A83F0225002F722BBFE011A
:0213C200F32214
:1013C400F8BB010DE58229F582E5833AF583E8F05F
:1013D400225006E92582C8F622BBFE05E92582C80B
:0213E400F222F3
:1013E600BC000BBE0029EF8DF084FFADF022E4CCEB
:1013F600F875F008EF2FFFEE33FEEC33FCEE9DECB4
:10140600984005FCEE9DFE0FD5F0E9E4CEFD22EDF9
:10141600F8F5F0EE8420D21CFEADF075F008EF2F43
:10142600FFED33FD4007985006D5F0F222C398FD34
:051436000FD5F0EA22D1
:10143B00C5F0F8A3E028F0C5F0F8E582158270023C
:06144B001583E038F022D9
:10145100BB0110E58229F582E5833AF583E0F5F0D9
:10146100A3E0225009E92582F886F008E622BBFEB6
:101471000AE92582F8E2F5F008E222E5832AF583FC
:08148100E993F5F0A3E99322C1
:10148900BB010A89828A83F0E5F0A3F0225006F7AE
:0F14990009A7F01922BBFE06F3E5F009F31922AB
:1014A800F8BB0111E58229F582E5833AF583E8F076
:1014B800E5F0A3F0225009E92582C8F608A6F02233
:0D14C800BBFE09E92582C8F2E5F008F2221A
:1014D500EB9FF5F0EA9E42F0E99D42F0E89C45F06D
:0114E50022E4
:1014E600E8600FECC313FCED13FDEE13FEEF13FFE4
:0314F600D8F12208
:0914F900E0FBA3E0FAA3E0F922F4
:10150200F8E0FBA3A3E0F925F0F0E5821582700272
:071512001583E0FA38F02216
:09151900EBF0A3EAF0A3E9F022D3
:10152200D083D082F8E4937012740193700DA3A358
:1015320093F8740193F5828883E47374029368606C
:06154200EFA3A3A380DF6C
:10154800EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02D30
:10155800FDE43CFCE8A42EC8C5F03DFDE43CFCEFEE
:0D156800A4FFE5F028FEE43DFDE43CFC227C
:100EDE00E5082406F582E43400F583E00508229047
:100EEE000003301703900006E475F001121502029C
:100EFE0013392010E97F2ED2108018EF540F249052
:100F0E00D43440D4FF30140BEF24BFB41A00500376
:100F1E002461FFE50960021509050CE50C70020558
:100F2E000B30170E900003E475F001121502EF025C
:100F3E0013B20236837403D2178003E4C217F50886
:100F4E00900003121519E4F509F50BF50CE509608F
:100F5E00077F20120F2180F5750AFFC211C210C241
:100F6E0012C213C215C216C218120EEDFF700D304A
:100F7E0017057F00120F32AF0CAE0B22B4255FC2E5
:100F8E00D5C214120EEDFF24D0B40A00501A75F01B
:100F9E000A780930D50508B6FF0106C6A426F62044
:100FAE00D5047002D21380D924CFB41A00EF5004A6
:100FBE00C2E5D214021133D21180C6D21080C0D233
:100FCE001280BCD2D580BAD21580B47F20120F21E8
:100FDE002012077401B5090040F1120EDEFF120F48
:100FEE0021020F5BD218D2168095120EDEFB120E66
:100FFE00DEFA120EDEF94A4B700679047A127BFF86
:10100E0020122EE509602A7E008E8275830012134F
:10101E005260060EEE650A70F0C2D5EBC0E0EAC073
:10102E00E0E9C0E0EE12117AD0E0F9D0E0FAD0E0BB
:10103E00FB121339FF60AAEBC0E0EAC0E0E9C0E0A2
:10104E00120F21D0E02401F9D0E03400FAD0E0FBF9
:10105E00E50A0460DCD50AD980877BFF7A117976A0
:10106E00D212809C791080027908C216C2188008AC
:10107E00D2D5790A8004790AC2D5E50A047002F540
:10108E000AE4FAFDFEFF120EDEFC7B08201113129D
:10109E000EDEFD7B1030100A120EDEFE120EDEFF8B
:1010AE007B20EC3382D592D55013C3E43010069FCB
:1010BE00FFE49EFEE42011039DFDE49CFCE4CBF8CE
:1010CE00C211EC700CCFCECDCCE824F8F870F380C2
:1010DE0017C3EF33FFEE33FEED33FDEC33FCEB3392
:1010EE00FB994002FB0FD8E9EB301105F8D0E0C4B4
:1010FE0048B211C0E00AEC4D4E4F78207B0070C212
:10110E00EAB50A0040BCC0E012117CD0F0D0E0205D
:10111E001104C4C0E0C4B211C0F0120F0AD0F0D551
:10112E00F0EB020F5B1215220FF8531072580FC915
:10113E004C0FC54210764F107E44107E490FDE4391
:08114E0010845510684610687A
:10115600451068471224500FCD2D0FD12E0FF42BBA
:101166000FD5230FF220120D2A0F8D4800000FEC29
:101176003F3F3F00790AA2D5201314301509B91054
:10118600020404B9080104A2D52016025001042065
:1011960012689212B509005034C0E07F203013194E
:1011A6007F30A21272167215500F1211D3C212C2DC
:1011B60016C215C2187F30800F301503E9C0E01241
:1011C6000F21301503D0E0F9D0E0B509CC30151762
:1011D6007F30B9100C120F217F583014077F7880AA
:1011E60003B90803120F213012057F2D020F217F4C
:1011F600202018F87F2B2016F322921280CF286E1B
:10120600756C6C2900D211120EDE3011F8C21178FD
:101216000930D50108F6020F8D2D50434958120E9C
:10122600DE2403B405004001E490121F93120F124E
:0D123600743A120F12D213750904021072DF
:00000001FF

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -314,7 +314,7 @@
<uAregs>0</uAregs>
<UseInterruptVector>1</UseInterruptVector>
<Fuzzy>3</Fuzzy>
<Optimize>8</Optimize>
<Optimize>9</Optimize>
<WarningLevel>2</WarningLevel>
<SizeSpeed>0</SizeSpeed>
<ObjectExtend>1</ObjectExtend>

View File

@ -35,7 +35,7 @@ XDATASTART EQU 0
;
; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
; <i> The length of XDATA memory in bytes.
XDATALEN EQU 0;300H;TP3315
XDATALEN EQU 300H;TP3315
;
; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
; <i> The absolute start address of PDATA memory

View File

@ -66,7 +66,7 @@ extern idata uint16_t g_pmu_Adc_Ivor;
typedef enum {
ADC_PMU_CH0 = 0x00,
ADC_PMU_CH0 = 0x01,
ADC_NTC_CH1,

View File

@ -23,7 +23,6 @@
#include "define.h"
extern bit Charger_Done;
#ifdef NTC_ENABLE
extern bit NTC_Pro_Flag;
@ -31,10 +30,13 @@ extern bit NTC_Pro_Flag;
// 充电状态定义
typedef enum
{
CHG_NONE=0x00,
CHG_NONE = 0x00,
CHG_PROTECT,
CHG_STA_ING, // 充电中
CHG_STA_COMPLETED, // 充电完成
CHG_STA_PULLOUT, // 充电器拔出
} TE_CHG_STA;
@ -42,8 +44,6 @@ extern idata TE_CHG_STA ChgStatus; // ϵͳ״̬
#if CHARGER_ENABLE
/* Charger Current Setting */
typedef struct {
uint8_t nTrickle_Cur; //Set Trickle Current Trickle charge 电流配置step 10mA;

View File

@ -114,46 +114,55 @@
#endif
#else
/*2.5V上拉LDO下接 104K NTC(3950K) 电阻串联一个100K电阻后得到的电压值,Value=2500 * Rntc/(Rntc + 100k)*/
#define T_N20C 2263 //-20℃ NTC:953K
/*2.5V上拉LDO下接 104K NTC(3950K) 电阻串联一个100K电阻后得到的电压值,Value=1024 * Rntc/(Rntc + 100k) */
/* 具体公式:( LSB = 2500/1024 )
NTC Pin实际电压Vntc = Rntc/R总 * 2500
NTC = Vntc / LSB = (Rntc / R总 * 2500) / (2500 / 1024)
= Rntc / R总 * 1024
使2.5V的上拉LDO有温漂误差使
#define T_N17C 2223 //-17℃ NTC:804K
*/
#define NONE_NTC 984 //NTC引脚悬空码值
#define T_N15C 2195 //-15℃ NTC:719K
#define T_N20C 927 //-20℃ NTC:953K
#define T_N13C 2164 //-13℃ NTC:644K
#define T_N17C 911 //-17℃ NTC:804K
#define T_N10C 2114 //-10℃ NTC:547K
#define T_N15C 900 //-15℃ NTC:719K
#define T_0C 1911 //-0℃ NTC:325K
#define T_N13C 887 //-13℃ NTC:644K
#define T_3C 1841 //3℃ NTC:293K
#define T_N10C 866 //-10℃ NTC:547K
#define T_5C 1792 //5℃ NTC:253K
#define T_0C 783 //-0℃ NTC:325K
#define T_8C 1715 //8℃ NTC:218K
#define T_3C 755 //3℃ NTC:293K
#define T_10C 1663 //10℃ NTC:198K
#define T_5C 734 //5℃ NTC:253K
#define T_12C 1609 //12℃ NTC:180K
#define T_8C 703 //8℃ NTC:218K
#define T_15C 1527 //15℃ NTC:157K
#define T_10C 682 //10℃ NTC:198K
#define T_18C 1444 //18℃ NTC:137K
#define T_12C 659 //12℃ NTC:180K
#define T_42C 823 //42℃ NTC:49K
#define T_15C 626 //15℃ NTC:157K
#define T_45C 759 //45℃ NTC:43.6K
#define T_18C 592 //18℃ NTC:137K
#define T_47C 718 //47℃ NTC:40K
#define T_42C 337 //42℃ NTC:49K
#define T_57C 540 //57℃ NTC:27.6K
#define T_45C 311 //45℃ NTC:43.6K
#define T_60C 495 //60℃ NTC:24.7K
#define T_47C 294 //47℃ NTC:40K
#define T_75C 318 //75℃ NTC:14.6K
#define T_57C 221 //57℃ NTC:27.6K
#define T_80C 275 //80℃ NTC:12.4K
#define T_60C 203 //60℃ NTC:24.7K
#define T_75C 130 //75℃ NTC:14.6K
#define T_80C 113 //80℃ NTC:12.4K
#endif

View File

@ -50,7 +50,7 @@
#define VOX_ENABLE 1 //1080Bytes
#define VOX_FOLLOW_CHG 1
#define VOX_FOLLOW_CHG 1 //1701Bytes
#if VOX_FOLLOW_CHG
@ -62,8 +62,6 @@
#define VOX_TX //959Bytes
#define VOX_TX_RST_PATTERN //BES Reset Pattern (118Bytes)
#define VOX_RX //739Bytes
#endif
@ -94,16 +92,17 @@
#ifdef _DEBUG_ALL
// #define _DEBUG_MAIN
#define _DEBUG_MAIN
#define _DEBUG_PMU
#define _DEBUG_KEY
#define _DEBUG_VOX
#define _DEBUG_FOLLOW
#define _DEBUG_HALL
// #define _DEBUG_ADC
// #define _DEBUG_DISCHARGE
// #define _DEBUG_CHARGER
// #define _DEBUG_SLEEP
#define _DEBUG_BAT
#define _DEBUG_SLEEP
// #define _DEBUG_BAT
//#define TEST_MODE

View File

@ -108,6 +108,9 @@ sfr ADC_IntFlag =0xA4;
#define ADC_CH4_L 0x3D
#define ADC_CH4_H 0x3E
#define ADC_OFFSET 0x59
#define ADC_GAIN 0x5A
/*-------- SYS Registers --------*/
#define LDO08_CTL 0x50
#define LDO15_CTL0 0x51

View File

@ -25,7 +25,7 @@
#include "define.h"
#ifdef LED_DISPLAY
#ifdef _DEBUG_LED
#define _DEBUG_LED_1
@ -61,6 +61,8 @@ sbit pin_LED_4 = P1^3;
#define LEDB_OFF() pin_LED_4 = 0 //LED_4_OFF()
#define LEDB_TOG() pin_LED_4 = !pin_LED_4 //LED_4_RUN()
#ifdef LED_DISPLAY
/******************************************************************************\
Typedef definitions
\******************************************************************************/

View File

@ -475,6 +475,8 @@ extern void Set_PMU_Boost(uint8_t Boost_En);
extern void Set_PMU_Boost_Vout(uint8_t Boost_Vout);
extern void Set_PMU_StandbyMode_Set(uint8_t LDO_En);
extern HAL_StatusTypeDef Set_PMU_VOX_Config( g_PMU_Vox_Cfg *n_PMU_Vox_Cfg );
#endif

View File

@ -114,10 +114,15 @@ SFRDATA |= (VOX_LIGHT_TO_HAVEY_128 << 2) | VOX_HAVEY_TO_LIGHT_8;
#define BOXHEADER 0x55AA //VOX通讯数据包头
#define EARPHONE_HEADER_HIGH 0x55
#define EARPHONE_HEADER_LOW 0xAA
#define BOXIDCODE 0xFF //VOX通讯耳机->仓数据包头
#define Vox_TX_Interval 2 //Vox定时发送指令时间间隔
#define Vox_TX_Interval_2 4
#define TIM_SHUTDOWN_DEBOUNCE 600 //关机前debounce时间
/******************************************************************************\
@ -195,7 +200,6 @@ typedef enum {
}e_Vox_Follow_Chg_Sta;
/* VOX Enable Type */
typedef enum {
@ -215,9 +219,12 @@ typedef enum {
} VOX_Enable_Mode_e;
extern bit Cover_Open_Flag;
extern bit Boost_Open_Flag;
extern bit OpenCover_TX_Cmd_Flag;
#ifdef VOX_RX
extern xdata uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态VOL:低4bitVOR:高4bit。0是无效1是正在配对2是配对成功3不处理保持当前状态。
@ -226,6 +233,8 @@ extern xdata uint8_t Vox_Get_BES_Addr_Flag[2] ;
#endif
#if VOX_FOLLOW_CHG
typedef struct {
uint16_t IVox_Init[VOX_MAX_CHAN]; //跟随充Vox初始化电流值。
@ -246,11 +255,11 @@ typedef struct {
uint8_t Vox_InBox_Sta[VOX_MAX_CHAN]; //耳机在盒标志
uint16_t Vpmid_Threshold_Neg; //Vpmid电压下降阈值
uint8_t Vpmid_Threshold_Neg; //Vpmid电压下降阈值
uint16_t Vpmid_Threshold_At_Present; //Vpmid电压当前值
uint8_t Vpmid_Threshold_At_Present; //Vpmid电压当前值
uint16_t Vpmid_Threshold_Pos; //Vpmid电压上升阈值
uint8_t Vpmid_Threshold_Pos; //Vpmid电压上升阈值
uint8_t Vox_Follow_Start; //跟随充启动标志
@ -260,6 +269,8 @@ typedef struct {
extern g_Vox_Fllow_Chg_Cfg xdata Vox_Fllow_Chg;
#endif
//extern uint8_t Box_To_Bes_Comm_Debounce;
/******************************************************************************\
@ -269,9 +280,9 @@ extern g_Vox_Fllow_Chg_Cfg xdata Vox_Fllow_Chg;
extern void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select);
extern void Vox_Det_Machine(void);
#if VOX_FOLLOW_CHG
extern void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg );
#endif
extern void VOX_EN_Type(VOX_Enable_Mode_e VOX_Enable_Mode);
#ifdef VOX_RX

View File

@ -31,6 +31,10 @@
/******************************************************************************\
Variables definitions
\******************************************************************************/
int8_t ADC_Offset_Error = 0; //ADC Offset Error 校准值寄存器
//int8_t ADC_Gain_Error = 0; //ADC Gain Error 校准值寄存器
uint8_t ADC_Chn_Num = 0;
idata uint16_t Vbat_Adc = 0;
@ -88,10 +92,16 @@ void Adc_Init(void)
ExtSfr_Write(ADC_CTL0,0xAB); //0B10101001,0xA9--ADC EN;Average time:16; Single mode; ADC CLK divided by 24=460k
SFRADDR = ADC_IntEn; //Enable ADC Interrupt.b[4:0]:ADC4-ADC0
SFRDATA |= 0x03;
// SFRADDR = ADC_IntEn; //Enable ADC Interrupt.b[4:0]:ADC4-ADC0
// SFRDATA |= 0x03;
EX6 = 1; //ADC IRQ Enable
SFRADDR = ADC_OFFSET;
ADC_Offset_Error = SFRDATA;
#if 0
SFRADDR = ADC_GAIN;
ADC_Gain_Error = SFRDATA;
#endif
// EX6 = 1; //ADC IRQ Enable
}
/*
@ -110,63 +120,14 @@ void Adc_Init(void)
*/
void PMU_ADC_Chn_Data(PMU_ADC_CHANNELS_E pmu_Adc_Chn)
{
I2cSfr_Write( XSEN_CTRL , (0x08 | pmu_Adc_Chn) );
g_PMU_ADC_Chn = pmu_Adc_Chn;
ADC_CTL1 = 0x81; //ADC Start Enable,Set Channel N Enabel.
SFRADDR = ADC_IntEn; //Enable ADC Interrupt.b[4:0]:ADC4-ADC0
SFRDATA |= 0x01;
}
/*
*******************************************************************************
* void ADC_NTC_Data(void)
*
* Description : »ñÈ¡NTC ADCÖµ
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void ADC_NTC_Data(void)
{
ADC_CTL1 = 0x80 | ( ADC_NTC_CH1 + 1 ); //ADC Start Enable,Set Channel N Enabel.
SFRADDR = ADC_IntEn; //Enable ADC Interrupt.b[4:0]:ADC4-ADC0
SFRDATA |= ( ADC_NTC_CH1 + 1 );
}
/*
*******************************************************************************
* void EX6_ADC_isr(void ) interrupt Interrupt_Vector_IE6
*
* Description : System External Intterupt 6 adc Interrupt.
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void EX6_ADC_isr(void) interrupt Interrupt_Vector_IE6
{
uint8_t reg_addr_bk = 0;
reg_addr_bk = SFRADDR;
if(ADC_IntFlag & 0x01)
if( ADC_IntFlag & 0x01 )
{
ADC_IntFlag = 0x01;
g_Vpmu_Adc = ExtSfr_Read(ADC_CH0_L);
g_Vpmu_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH0_H) & 0x03 ) << 8 );
g_Vpmu_Adc = ((uint32_t)g_Vpmu_Adc * 2500) >> 10 ; //ADCµÄLSB = 2500mV / 1024 = 2.44mV
g_Vpmu_Adc = ((uint32_t)( g_Vpmu_Adc - ADC_Offset_Error ) * 2500) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV
/*»ñÈ¡xSen¶ÔÓ¦µÄADCÖµ*/
switch (g_PMU_ADC_Chn)
@ -207,12 +168,126 @@ void EX6_ADC_isr(void) interrupt Interrupt_Vector_IE6
}
}
if(ADC_IntFlag & 0x02)
I2cSfr_Write( XSEN_CTRL , (0x08 | pmu_Adc_Chn) );
g_PMU_ADC_Chn = pmu_Adc_Chn;
ADC_CTL1 = 0x80 | ( ADC_PMU_CH0 ); //ADC Start Enable,Set Channel N Enabel.
#if 0
SFRADDR = ADC_IntEn; //Enable ADC Interrupt.b[4:0]:ADC4-ADC0
SFRDATA |= 0x01;
#endif
}
/*
*******************************************************************************
* void ADC_NTC_Data(void)
*
* Description : NTC ADC值
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void ADC_NTC_Data(void)
{
if( ADC_IntFlag & 0x02 ) //获取NTC ADC 码值
{
ADC_IntFlag = 0x02;
g_Vntc_Adc = ExtSfr_Read(ADC_CH1_L);
g_Vntc_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH1_H) & 0x03 ) << 8 );
g_Vntc_Adc = ((uint32_t)g_Vntc_Adc * 2500) >> 10 ; //ADCµÄLSB = 2500mV / 1024 = 2.44mV
g_Vntc_Adc = g_Vntc_Adc - ADC_Offset_Error ;
}
ADC_CTL1 = 0x80 | ( ADC_NTC_CH1 ); //ADC Start Enable,Set Channel N Enabel.
#if 0
SFRADDR = ADC_IntEn; //Enable ADC Interrupt.b[4:0]:ADC4-ADC0
SFRDATA |= ( ADC_NTC_CH1 + 1 );
#endif
}
/*
*******************************************************************************
* void EX6_ADC_isr(void ) interrupt Interrupt_Vector_IE6
*
* Description : System External Intterupt 6 adc Interrupt.
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void EX6_ADC_isr(void) interrupt Interrupt_Vector_IE6
{
uint8_t reg_addr_bk = 0;
reg_addr_bk = SFRADDR;
if(ADC_IntFlag & 0x01)
{
g_Vpmu_Adc = ExtSfr_Read(ADC_CH0_L);
g_Vpmu_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH0_H) & 0x03 ) << 8 );
g_Vpmu_Adc = ((uint32_t)( g_Vpmu_Adc - ADC_Offset_Error ) * 2500) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV
/*获取xSen对应的ADC值*/
switch (g_PMU_ADC_Chn)
{
case pmu_ADC_IVOL:
g_pmu_Adc_Ivol = g_Vpmu_Adc >> 2; //采样比例4mV/mA
break;
case pmu_ADC_VBAT:
Vbat_Adc = g_Vpmu_Adc << 1; //vbat的2分压
break;
case pmu_ADC_VIN:
g_pmu_Adc_Vin = g_Vpmu_Adc << 3; //vin的8分压
break;
case pmu_ADC_VPMID:
g_pmu_Adc_Vpmid = g_Vpmu_Adc << 2; //PMID的4分压
break;
case pmu_ADC_VOR:
g_pmu_Adc_Vor = g_Vpmu_Adc << 2; //vor的4分压
break;
case pmu_ADC_VOL:
g_pmu_Adc_Vol = g_Vpmu_Adc << 2; //vol的4分压
break;
case pmu_ADC_VDD:
g_pmu_Adc_Vdd = g_Vpmu_Adc << 1; //vdd的2分压
break;
case pmu_ADC_IVOR:
g_pmu_Adc_Ivor = g_Vpmu_Adc >> 2; //采样比例4mV/mA
break;
default:
break;
}
}
if(ADC_IntFlag & 0x02) //获取NTC ADC 码值
{
g_Vntc_Adc = ExtSfr_Read(ADC_CH1_L);
g_Vntc_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH1_H) & 0x03 ) << 8 );
g_Vntc_Adc = g_Vntc_Adc - ADC_Offset_Error ;
}
#if 0
@ -220,18 +295,24 @@ void EX6_ADC_isr(void) interrupt Interrupt_Vector_IE6
{
g_Vbjt_Adc = ExtSfr_Read(ADC_CH2_L);
g_Vbjt_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH2_H) & 0x03 ) << 8 );
g_Vbjt_Adc = g_Vbjt_Adc - ADC_Offset_Error ;
}
if(ADC_IntFlag & 0x08)
{
g_Vp13_Adc = ExtSfr_Read(ADC_CH3_L);
g_Vp13_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH3_H) & 0x03 ) << 8 );
g_Vp13_Adc = g_Vp13_Adc - ADC_Offset_Error ;
}
if(ADC_IntFlag & 0x10)
{
g_Vref_Adc = ExtSfr_Read(ADC_CH4_L);
g_Vref_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH4_H) & 0x03 ) << 8 );
g_Vref_Adc = g_Vref_Adc - ADC_Offset_Error ;
}
#endif
@ -240,6 +321,7 @@ void EX6_ADC_isr(void) interrupt Interrupt_Vector_IE6
SFRADDR = reg_addr_bk;
}
#endif
#endif

View File

@ -26,8 +26,7 @@
#include "vox_module.h"
#include "led.h"
#include "userapp.h"
bit Charger_Done = 0;
#include "bat.h"
#ifdef NTC_ENABLE
bit NTC_Pro_Flag = 0;
@ -82,7 +81,7 @@ void Charger_Init(void)
gCharge_Cfg.nVFloat = CHG_VFLOAT_4_200V;
I2cSfr_Write( IRQ_EN0, VDPM_IRQ );
//I2cSfr_Write( IRQ_EN0, VDPM_IRQ );
}
#ifdef NTC_ENABLE
@ -128,7 +127,7 @@ uint8_t PMU_NTC_Handle(uint8_t Charge_sta)
NTC_Adc = g_Vntc_Adc;
#endif
if( NTC_Adc >= 2400 ) ////屏蔽NTC功能NTC浮空屏蔽 NTC 功能,并锁定。
if( NTC_Adc >= NONE_NTC ) ////屏蔽NTC功能NTC浮空屏蔽 NTC 功能,并锁定。
{
return FALSE;
}
@ -465,7 +464,6 @@ void Charger_Handler(void)
ChgStatus = CHG_NONE;
Charger_Done = 0;
#ifdef _DEBUG_CHARGER
printf("No Chg\r\n");
#endif
@ -473,6 +471,7 @@ void Charger_Handler(void)
}
/*各项保护都无需软件处理只处理充电超时超时后需要等VBUS重新插拔后才重新开始Charger流程。*/
ChgStatus = CHG_PROTECT;
#ifdef NTC_ENABLE
@ -495,8 +494,6 @@ void Charger_Handler(void)
#ifdef _DEBUG_CHARGER
printf("Chg Done\r\n");
#endif
Charger_Done = 1;
ChgStatus = CHG_STA_COMPLETED;
}
@ -511,10 +508,10 @@ void Charger_Handler(void)
Set_PMU_CHG(ON); //Enable Charger
ChgStatus = CHG_STA_ING;
#ifdef _DEBUG_CHARGER
printf("Chg ing\r\n");
#endif
Charger_Done = 0;
}
}

View File

@ -125,19 +125,17 @@ void DisCharge_Handler(void)
#else
gBoost_Prepared_Flag = 0;
/*过温保护 --- 硬件实现*/
if( pmu_Info.pmu_Fault_STA2 & Fault_Sta2_CHIP_OTP )
{
gBoost_Prepared_Flag = 0;
return;
}
/*Boost Input UVLO 硬件实现*/
if( pmu_Info.pmu_Fault_STA2 & Fault_Sta2_BoostUV )
{
gBoost_Prepared_Flag = 0;
gBoost_UVLO_Flag = 1;
return;
@ -149,8 +147,6 @@ void DisCharge_Handler(void)
{
Set_PMU_Boost(OFF);
gBoost_Prepared_Flag = 0;
return;
}
@ -162,23 +158,21 @@ void DisCharge_Handler(void)
#ifdef _DEBUG_DISCHARGE
printf("Boost Pro Output Short!\r\n");
#endif
gBoost_Prepared_Flag = 0;
if( F_sys_tim_250ms )
{
IRQ_FLAG0 = 0x01;
Set_PMU_Boost_Vout(BOOST_VPMID_5_2V); //开关盖Boost输出5.2V,保证耳机一定能被唤醒。
DisCharge_Boost_Open(OFF, Boost_Vout_5_05V); //250ms定时开一次Boost
Set_PMU_Boost(ON); //Boost Enable异常时由硬件主动关闭。开启Boost开启Vox 5v会在开启Boost之后100ms延时//250ms定时开一次Boost
}
return;
}
#ifdef NTC_ENABLE
/*NTC Handle*/ //使能Boost前先检测NTC温度异常就不开放电。
if( PMU_NTC_Handle( DISCHG_ON ) ) //NTC保护不放电。
{
gBoost_Prepared_Flag = 0;
Set_PMU_Boost(OFF);

View File

@ -107,6 +107,8 @@ uint8_t Hall_Sta_bk = 0xff;
CoverEvent_Flg = 1;
Boost_Open_Flag = 0;
CoverEvent_Flg_led = 1;
#ifdef LED_DISPLAY

View File

@ -26,6 +26,7 @@
#include "vox_module.h"
#include "userapp.h"
#include "hall.h"
#include "discharge_module.h"
#if KEY_ENABLE
/******************************************************************************\
@ -39,6 +40,14 @@
#define KEY_PRESS_8S_CNT 400 //按键按下计数8s(调用周期20ms)
#define KEY_TWS_PAIR_TIMER 20
#define KEY_TWS_PAIR_CNT 5
#define KEY_TWS_PAIR_CLEAR_CNT 30
#define KEY_LIFT_CNT 10
/******************************************************************************\
Variables definitions
\******************************************************************************/
@ -50,14 +59,14 @@ bit Key_Press_ll_irq = 0;
idata KEY_EVENT_E Event_key = 0;
uint8_t Key_TWS_Pair_Tim = 0;
uint8_t Key_TWS_Clear_Pair_Tim = 0;
uint8_t Key_TWS_Pair_Cnt = 0;
uint16_t Key_Press_Debounce = 0;
#define KEY_TWS_PAIR_TIMER 20
#define KEY_TWS_PAIR_CNT 5
#define KEY_TWS_PAIR_CLEAR_CNT 30
uint8_t Key_Lift_Debounce = 0;
/******************************************************************************\
Functions definitions
@ -126,10 +135,14 @@ uint16_t Key_Press_Debounce = 0;
Enter_Sleep_Cnt_Restart_Flag = 1;
#endif
Event_key = KEY_EVENT_Empty;
Key_Press_Flag = 0;
Key_Lift_Flag = 1;
Key_Lift_Debounce = 0;
nKey_Press_8s_Flag = 0;
if( (Key_Press_Debounce <= KEY_PRESS_500MS_CNT) ) //松开按键按下时间小于500ms则识别为短按显示电量
@ -156,9 +169,28 @@ uint16_t Key_Press_Debounce = 0;
Key_Press_Debounce = 0;
}
if( Key_Lift_Flag )
if( Key_Lift_Flag && gBoost_Prepared_Flag )
{
Key_Lift_Flag = 0;
if( !Boost_Open_Flag )
{
Set_PMU_Boost(ON);
Boost_Open_Flag = 1;
#ifdef _DEBUG_KEY
printf("Boost Open Key.(line:%d)\r\n",(u16)__LINE__);
#endif
return;
}
VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V
if( Key_Lift_Debounce <= KEY_LIFT_CNT )
{
Key_Lift_Debounce++;
return;
}
if( Key_Press_l_irq )
{
@ -169,6 +201,9 @@ uint16_t Key_Press_Debounce = 0;
Key_TWS_Pair_Tim = 0;
/*耳机配对*/
Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00;
Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00;
#ifdef _DEBUG_KEY
printf("long 2s press\r\n");
@ -178,6 +213,8 @@ uint16_t Key_Press_Debounce = 0;
if( Key_Press_ll_irq )
{
Key_Press_ll_irq = 0;
Key_TWS_Clear_Pair_Tim = 0;
/*todo*/
Event_key = KEY_EVENT_LL_8S;
@ -197,10 +234,10 @@ uint16_t Key_Press_Debounce = 0;
printf("short press\r\n");
#endif
}
}
else
{
Event_key = KEY_EVENT_Empty;
Key_Lift_Flag = 0;
Boost_Open_Flag = 0;
}
#if 1
@ -214,16 +251,28 @@ uint16_t Key_Press_Debounce = 0;
HandleTxCommand(VHOUSE_CMD_PAIR,VOR_CHAN); //右耳发配对指令,区分耳机通道。
#endif
Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00;
Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00;
#ifdef _DEBUG_KEY
printf("Key Pair TX VOR(line:%d).\r\n",(uint16_t)__LINE__);
#endif
}
else
{
if(Key_TWS_Pair_Cnt > KEY_TWS_PAIR_CNT) //耳机蓝牙地址置换超时10s关闭蓝牙地址置换开启VOX 5V。
{
Key_TWS_Pair_Cnt = 0;
Event_key = KEY_EVENT_Empty;
OpenCover_TX_Cmd_Flag = 1;
#if VOX_ENABLE
VOX_EN_Type(VOX_VOUT_Mode);
VOX_EN_Type(VOX_ADT_Mode);
#endif
#ifdef _DEBUG_KEY
printf("Key Pair TimeOut(line:%d).\r\n",(uint16_t)__LINE__);
#endif
return;
}
else
@ -234,6 +283,10 @@ uint16_t Key_Press_Debounce = 0;
HandleTxCommand(VHOUSE_CMD_EXCH_TWS_BTADDR,VOL_CHAN); /*获取到右耳回复的CMD3指令转发给左耳。*/
#endif
Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x02;
#ifdef _DEBUG_KEY
printf("Key Pair Get VOR(line:%d).\r\n",(uint16_t)__LINE__);
#endif
}
else
if( Vox_Get_BES_Addr_Flag[VOR_TYPE] == 0x02 )
@ -247,10 +300,17 @@ uint16_t Key_Press_Debounce = 0;
Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00;
Key_TWS_Pair_Tim = 0;
Key_TWS_Pair_Cnt = 0;
Event_key = KEY_EVENT_Empty;
VOX_EN_Type(VOX_VOUT_Mode);
OpenCover_TX_Cmd_Flag = 1;
VOX_EN_Type(VOX_ADT_Mode);
#ifdef _DEBUG_KEY
printf("Key Pair Get VOL(line:%d).\r\n",(uint16_t)__LINE__);
#endif
return;
}
else
@ -258,6 +318,10 @@ uint16_t Key_Press_Debounce = 0;
#ifdef VOX_TX
HandleTxCommand(VHOUSE_CMD_PAIR,VOL_CHAN);
#endif
#ifdef _DEBUG_KEY
printf("Key Pair TX VOL(line:%d).\r\n",(uint16_t)__LINE__);
#endif
}
}
}
@ -266,7 +330,11 @@ uint16_t Key_Press_Debounce = 0;
if(Key_TWS_Pair_Tim > KEY_TWS_PAIR_TIMER) //3s重发一次。重发5次后超时
{
Key_TWS_Pair_Cnt++;
Key_TWS_Pair_Tim = 0;
#ifdef _DEBUG_KEY
printf("Key Pair Cnt:%d.(line:%d)\r\n",(uint16_t)Key_TWS_Pair_Cnt,(uint16_t)__LINE__);
#endif
}
else
{
@ -276,28 +344,33 @@ uint16_t Key_Press_Debounce = 0;
else
if( Event_key == KEY_EVENT_LL_8S )
{
if( Key_TWS_Pair_Tim < KEY_TWS_PAIR_CLEAR_CNT ) //每隔200ms发送一次持续时间3s。
if( Key_TWS_Clear_Pair_Tim < KEY_TWS_PAIR_CLEAR_CNT ) //每隔200ms发送一次持续时间3s。
{
if( Key_TWS_Pair_Tim % 2*Vox_TX_Interval )
if( Key_TWS_Clear_Pair_Tim % Vox_TX_Interval_2 )
{
#ifdef VOX_TX
HandleTxCommand(VHOUSE_CMD_CLEAR_PAIR,VOR_CHAN);
#endif
}
else
if( Key_TWS_Pair_Tim % Vox_TX_Interval )
if( Key_TWS_Clear_Pair_Tim % Vox_TX_Interval )
{
#ifdef VOX_TX
HandleTxCommand(VHOUSE_CMD_CLEAR_PAIR,VOL_CHAN);
#endif
}
Key_TWS_Pair_Tim++;
Key_TWS_Clear_Pair_Tim++;
}
else
{
Event_key = KEY_EVENT_Empty;
Key_TWS_Pair_Tim = 0;
OpenCover_TX_Cmd_Flag = 1;
Key_TWS_Clear_Pair_Tim = 0;
VOX_EN_Type(VOX_ADT_Mode);
}
}
}

View File

@ -63,6 +63,10 @@ void pmu_Init(void)
//I2cSfr_Write(IRQ_EN1, 0x00);
// I2cSfr_Write( IRQ_EN0, 0xFF );
// I2cSfr_Write( IRQ_EN1, 0xFF );
/*1、配置HALL、KEY。*/
I2cSfr_Write(I2CR_RST_CFG, 0x08); //HALL开盒退出ShipMode功能KEY长按复位VDD若处于ShipMode模式则退出ShipMode模式
@ -272,6 +276,41 @@ void Set_PMU_Boost_Vout(uint8_t Boost_Vout)
I2cSfr_Write( CHG_VPMID_SET, I2cSfr_Temp | Boost_Vout );
}
/*
*******************************************************************************
* void Set_PMU_StandbyMode_Set(uint8_t LDO_En)
*
* Description : Set PMU Enter ShipMode
*
* Arguments : uint8_t LDO_En:0:LDO Open;1:Bypass Vbat
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void Set_PMU_StandbyMode_Set(uint8_t LDO_En)
{
uint8_t I2cSfr_Temp = 0;
I2cSfr_Temp = I2cSfr_Read( VDPM_VDD_CHG_EN );
if( LDO_En )
{
I2cSfr_Temp &= ~VDD_BYPASS;
}
else
{
I2cSfr_Temp |= VDD_BYPASS;
}
I2cSfr_Write( VDPM_VDD_CHG_EN, I2cSfr_Temp );
}
#if 0
/*
*******************************************************************************
* HAL_StatusTypeDef Set_PMU_VOX_Config( g_PMU_Vox_Cfg *n_PMU_Vox_Cfg )
@ -286,7 +325,7 @@ void Set_PMU_Boost_Vout(uint8_t Boost_Vout)
*
*******************************************************************************
*/
#if 0
HAL_StatusTypeDef Set_PMU_VOX_Config( g_PMU_Vox_Cfg *n_PMU_Vox_Cfg )
{
#if 0

View File

@ -53,7 +53,6 @@
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void System_Init(void)
@ -96,6 +95,8 @@ void System_Init(void)
// WDTREL = 0x80; //WDTPS = 0,wdt_f = wdt_f1/2;WDTPS = 1,wdt_f = wdt_f1/32;
#endif
I2C_GPIOInit();
#if ADC_ENABLE
Adc_Init();
#endif
@ -127,10 +128,7 @@ void System_Init(void)
pmu_Init();
I2C_GPIOInit();
Systerm_State.Next_State = POWER_ON_STATE;
}
/*

View File

@ -47,13 +47,11 @@ bit F_sys_tim_250ms = 0;
bit F_sys_tim_100ms = 0;
bit F_sys_tim_1s = 0;
uint8_t F_sys_tim_tick = 0;
bit F_sys_tim1_tick = 0;
bit F_sys_tim2_tick = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/

View File

@ -21,6 +21,7 @@
#include "system.h"
#include "vox_module.h"
#include "sleep.h"
#include "led.h"
/******************************************************************************\
Macro definitions
@ -73,22 +74,23 @@ bit Uart1_RX_Finish_Flag = 0;
void UART0_Init(void)
{
#if 1
/* vor、vol都使用uart0进行分时通讯。 */
SFRADDR = P0_OE; //Set P02 And P03 As Output.
SFRDATA |= 0x0C;
SFRADDR = P0_IE; //Set P02 And P03 As Input.
SFRDATA |= 0x0C;
// SFRADDR = P0_IE; //Set P02 And P03 As Input.
// SFRDATA |= 0x0C;
// SFRADDR = P0_PU; //Set P02 And P03 30K Pullup.
// SFRDATA |= 0x0C;
SFRADDR = MFP_CTL0; //VOR、VOL都使用UART0进行分时通讯。
SFRDATA &=~ 0x0F;
SFRDATA |= 0x09;
// SFRADDR = MFP_CTL0; //VOR、VOL都使用UART0进行分时通讯。
// SFRDATA &=~ 0x0F;
// SFRDATA |= 0x09;
#else
/* vor、vol使用不同uart进行通讯 */
SFRADDR = P0_OE; //Set P02 As Output.
SFRDATA |= 0x04;
@ -111,6 +113,9 @@ void UART0_Init(void)
S0CON = 0x52; //SCON: MODE 1, 8-bit UART, RI enable
TI0 = 1;
RI0 = 1;
ES0 = 1; //Enable UART0 IRQ
}
@ -134,30 +139,33 @@ void Uart0SendPacket(uint16_t Length,uint8_t *TransBuf)
{
uint8_t i = 0;
S0CON &=~ UART_REC_ENABLE; //Disable UART0's RX
SFRADDR = P0_OE; //Set P02 And P03 As Output.
SFRDATA |= 0x0C;
for(i=0;i<Length;i++)
SFRADDR = P0_IE; //Set P02 And P03 As Input.
SFRDATA &= ~0x0C;
for(i=0; i<Length; i++)
{
while(busy0);
// ACC = *TransBuf++;
busy0 = 1;
S0BUF = *TransBuf++;
}
S0CON |= UART_REC_ENABLE; //Enabel UART0's RX
SFRADDR = P0_OE; //Set P02 And P03 Disable Output.
SFRDATA &= ~0x0C;
}
#endif
#define Vox_Comm_Data_Len 7
#endif
uint8_t Rx0Status = 0;
uint8_t RX0_Cnt = 0;
/*uart0中断处理函数*/
void uart0_Interrupt(void) interrupt Interrupt_Vector_RI_TI
{
static uint8_t Rx0Status;
static uint16_t RX0_Cnt;
static uint16_t RX0DataLen;
/*处理UART0发送中断*/
if(TI0)
{
@ -169,6 +177,7 @@ void uart0_Interrupt(void) interrupt Interrupt_Vector_RI_TI
if(RI0)
{
RI0 = 0;
#if SLEEP_ENABLE
Enter_Sleep_Cnt_Restart_Flag = 1;
#endif
@ -178,15 +187,13 @@ void uart0_Interrupt(void) interrupt Interrupt_Vector_RI_TI
switch(Rx0Status)
{
case 0:
if( S0BUF == (BOXHEADER >> 8) )
if( S0BUF == EARPHONE_HEADER_HIGH )
{
Rx0Status = 1;
RX0_Cnt = 0;
RX0_Buffer[RX0_Cnt] = S0BUF;
RX0_Cnt++;
RX0_Buffer[RX0_Cnt++] = S0BUF;
}
else
{
@ -197,13 +204,11 @@ void uart0_Interrupt(void) interrupt Interrupt_Vector_RI_TI
break;
case 1:
if(S0BUF == BOXHEADER)
if( S0BUF == EARPHONE_HEADER_LOW )
{
Rx0Status = 2;
RX0_Buffer[RX0_Cnt] = S0BUF;
RX0_Cnt++;
RX0_Buffer[RX0_Cnt++] = S0BUF;
}
else
{
@ -212,23 +217,24 @@ void uart0_Interrupt(void) interrupt Interrupt_Vector_RI_TI
RX0_Cnt = 0;
}
break;
case 2:
RX0_Buffer[RX0_Cnt] = S0BUF;
RX0_Cnt++;
if( RX0_Cnt == Vox_Comm_Data_Len )
{
RX0DataLen = RX0_Buffer[2] + 4; //获取数据长度
}
RX0_Buffer[RX0_Cnt++] = S0BUF;
if( (RX0DataLen == RX0_Cnt) || (RX0_Cnt > COM0_Data_Lenth) ) //当接收到的data个数等于RX0DataLen这结束本次传输。
if( ( RX0_Cnt >= ( RX0_Buffer[2] + 4 ) ) || ( RX0_Cnt > COM0_Data_Lenth ) )
{
RX0_Cnt = 0;
Rx0Status = 0;
Uart0_RX_Finish_Flag = 1;
}
}
break;
default:
break;
}
#endif
}
@ -383,17 +389,7 @@ void uart1_Interrupt(void) interrupt Interrupt_Vector_RI1_TI1
RX1_Cnt++;
if( RX1_Cnt == Vox_Comm_Data_Len )
{
RX1DataLen = RX1_Buffer[5] | (RX1_Buffer[6] << 8) + 9; //获取数据长度Headr(1Byte) + Trandsmit Dir(1Byte) + CMD(2Bytes) + datalen(2Bytes) + CRC16(2Bytes)
}
if( (RX1DataLen == RX1_Cnt) || (RX1_Cnt > COM0_Data_Lenth) ) //当接收到的data个数等于RX0DataLen这结束本次传输。
{
RX1_Cnt = 0;
Rx1Status = 0;
Uart1_RX_Finish_Flag = 1;
}
break;
}
#endif

View File

@ -47,6 +47,7 @@
\******************************************************************************/
xdata s_sys_state Systerm_State = {SLEEP_STATE,AWAKE_STATE,AWAKE_STATE};
uint8_t Step_Cnt = 0;
uint8_t LED_On_Timer = 0; //led亮时间计时
@ -114,6 +115,20 @@ void LED_Display_App(void)
static bit Disp_Bat_Lev;
if( LED_On_Flag )
{
LED_On_Flag = 0;
LED_On_Timer = 0;
Display_AllOff();
#if SLEEP_ENABLE
Enter_Sleep_Cnt_Restart_Flag = 1;
#endif
return;
}
#ifdef NTC_ENABLE
/*NTC保护4灯一直快闪(2Hz)*/
if( NTC_Pro_Flag || Vox_Output_Short_Flag )
@ -126,30 +141,27 @@ void LED_Display_App(void)
}
else
{
if( Display_RSta != LED_KEEP_FLASHING )
if( Display_RSta != LED_FLASH )
{
Display_Red_Flash(20,10);
}
if( Display_GSta != LED_KEEP_FLASHING )
if( Display_GSta != LED_FLASH )
{
Display_Green_Flash(20,10);
}
if( Display_YSta != LED_KEEP_FLASHING )
if( Display_YSta != LED_FLASH )
{
Display_Yellow_Flash(20,10);
}
if( Display_BSta != LED_KEEP_FLASHING )
if( Display_BSta != LED_FLASH )
{
Display_Blue_Flash(20,10);
}
}
#if SLEEP_ENABLE
Enter_Sleep_Cnt_Restart_Flag = 1;
#endif
return;
}
@ -162,20 +174,26 @@ void LED_Display_App(void)
LED_On_Chg_Flag = 0;
CoverEvent_Flg_led = 0;
Earphone_Chg_Flag = 0;
Wkup_Earphone_Flag = 1;
}
#endif
if (ChgStatus == CHG_STA_ING) //ChgStatus = CHG_STA_ING
if (ChgStatus != CHG_NONE)
{
if ( Charger_Done ) // 充电完成4个LED常亮
if ( ChgStatus == CHG_STA_COMPLETED ) // 充电完成4个LED常亮
{
if( !LED_On_ChgDone_Flag )
{
LED_On_ChgDone_Flag = 1;
LED_Breating_Light_Off();
return;
}
Display_AllOn();
@ -186,6 +204,8 @@ void LED_Display_App(void)
{
LED_On_Chg_Flag = 1;
LED_On_ChgDone_Flag = 0;
LED_On_Flag = 1;
Breathing_Light_Cnt = LED_R;
@ -280,17 +300,6 @@ void LED_Display_App(void)
return;
}
if( LED_On_Flag )
{
LED_On_Timer = 0;
LED_On_Flag = 0;
Display_AllOff();
return;
}
if( CoverEvent_Flg_led || Disp_Bat_Lev || Earphone_Chg_Flag || Key_Press_short_irq )
{
if( LED_On_Timer < LED_OFF_CNT )
@ -298,7 +307,7 @@ void LED_Display_App(void)
LED_On_Timer++;
}
else
if( LED_On_Timer < LED_ON_CNT ) //LED显示5s后灭。
if( LED_On_Timer < LED_ON_CNT ) //LED显示10s后灭。
{
LED_On_Timer++;
@ -345,7 +354,7 @@ void LED_Display_App(void)
Key_Press_short_irq = 0;
LED_On_Flag = 1; //清LED显示
Display_AllOff(); //清LED显示
}
}
}
@ -355,19 +364,19 @@ void LED_Display_App(void)
/*
*******************************************************************************
* uint8_t PMU_ADC_GetValue_Machine(void)
* void PMU_ADC_GetValue_Machine(void)
*
* Description : PMU(xSen) ADC值获取函数使使UserAPP周期 (5ms调用周期)
*
* Arguments : NONE
* Returns : 1:
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
uint8_t PMU_ADC_GetValue_Machine(void)
void PMU_ADC_GetValue_Machine(void)
{
#ifdef _DEBUG_ADC
printf("adc chn:%d,pmu:%d,Ivol:%d,Vbat:%d,Vin:%d,Vpmid:%d,Vor:%d,Vol:%d,Vdd:%d,Ivor:%d.\r\n",(u16)ADC_Chn_Num,(u16)g_Vpmu_Adc,(u16)g_pmu_Adc_Ivol,(u16)Vbat_Adc,(u16)g_pmu_Adc_Vin,(u16)g_pmu_Adc_Vpmid,(u16)g_pmu_Adc_Vor,(u16)g_pmu_Adc_Vol,(u16)g_pmu_Adc_Vdd,(u16)g_pmu_Adc_Ivor);
@ -378,11 +387,7 @@ uint8_t PMU_ADC_GetValue_Machine(void)
if( ADC_Chn_Num >= pmu_ADC_MAX )
{
ADC_Chn_Num = 0;
return 1;
}
return 0;
}
/*
@ -401,13 +406,6 @@ uint8_t PMU_ADC_GetValue_Machine(void)
*/
void System_Drivers_Machine(void)
{
#if CHARGER_ENABLE
Charger_Handler();
#endif
#if DISCHARGE_ENABLE
DisCharge_Handler();
#endif
#if HALL_ENABLE
Hall_Handler();
@ -424,6 +422,15 @@ void System_Drivers_Machine(void)
if ( F_sys_tim_100ms )
{
F_sys_tim_100ms = 0;
#if CHARGER_ENABLE
Charger_Handler();
#endif
#if DISCHARGE_ENABLE
DisCharge_Handler();
#endif
#if BAT_VALUE
check_bat_level();
#endif
@ -495,6 +502,8 @@ void SysTem_State_Machine(void)
1使
*/
Set_PMU_StandbyMode_Set(ON); //开启LDO
#ifdef _DEBUG_MAIN
printf("Awake State (line:%d)\r\n", (uint16_t)__LINE__);
#endif
@ -518,7 +527,6 @@ void SysTem_State_Machine(void)
1使
*/
#ifdef _DEBUG_MAIN
printf("Sleep State (line:%d)\r\n", (uint16_t)__LINE__);
#endif
@ -575,10 +583,11 @@ void SysTem_State_Machine(void)
#ifdef _DEBUG_MAIN
// printf("STA0:0x%x,STA1:0x%x,STA2:0x%x,Chip_STA:0x%x,VOX_STA:0x%x.Dec_Sleep:%d\r\n",(u16)(pmu_Info.pmu_Fault_STA0),(u16)(pmu_Info.pmu_Fault_STA1),(u16)(pmu_Info.pmu_Fault_STA2),(u16)(pmu_Info.pmu_Chip_STA),(u16)(pmu_Info.pmu_VOX_STA),(u16)Decnt_SleepDelay);
printf("STA0:0x%x,STA1:0x%x,STA2:0x%x,Chip_STA:0x%x,VOX_STA:0x%x.Dec_Sleep:%d\r\n",(u16)(pmu_Info.pmu_Fault_STA0),(u16)(pmu_Info.pmu_Fault_STA1),(u16)(pmu_Info.pmu_Fault_STA2),(u16)(pmu_Info.pmu_Chip_STA),(u16)(pmu_Info.pmu_VOX_STA),(u16)Decnt_SleepDelay);
// printf("Chg Sta:0x%x.,batPec:%d.\r\n",(u16)ChgStatus,(u16)bat_level_Pec);
printf("Vntc:%d,Ivol:%d,Vbat:%d,Vin:%d,Vpmid:%d,Vor:%d,Vol:%d,Vdd:%d,Ivor:%d.\r\n",(u16)g_Vntc_Adc,(u16)g_pmu_Adc_Ivol,(u16)Vbat_Adc,(u16)g_pmu_Adc_Vin,(u16)g_pmu_Adc_Vpmid,(u16)g_pmu_Adc_Vor,(u16)g_pmu_Adc_Vol,(u16)g_pmu_Adc_Vdd,(u16)g_pmu_Adc_Ivor);
#endif
if(Decnt_SleepDelay > 0)
@ -619,17 +628,25 @@ void SysTem_State_Machine(void)
1
2
*/
#if SLEEP_ENABLE
#if 1
if(Check_Require_Sleep())
{
VOX_EN_Type(VOX_ADT_Mode);
Set_PMU_Boost(OFF);
Set_PMU_StandbyMode_Set(OFF); //关闭LDO
Enter_Sleep();
}
else
{
Systerm_State.Next_State = AWAKE_STATE;
}
#else
Systerm_State.Next_State = AWAKE_STATE;
#endif
break;
@ -648,8 +665,6 @@ void SysTem_State_Machine(void)
* Return : None
* Note : None
*****************************************************************************/
uint8_t Step_Cnt = 0;
void UserAPP(void)
{
if(F_sys_tim_5ms)
@ -687,8 +702,9 @@ void UserAPP(void)
if ( F_sys_tim_10ms )
{
F_sys_tim_10ms = 0;
#ifdef LED_DISPLAY
LED_Drv();
#endif
}
}

View File

@ -56,10 +56,7 @@ bit Vox_Output_Short_Flag = 0;
#define BOOST_VOUT_MAX 2 //跟随充Boost输出电压上限值0:4.6V,1:4.7V,2:4.8V,3:5.05V.
#define Vox_TX_Pattern_Tim 11
#define Vox_TX_Interval 2 //Vox定时发送指令时间间隔
#define Vox_TX_Interval_2 3
#define Vox_TX_Pattern_Tim 21
#define VOX_IOFF_HOLD_CNT 50
@ -67,6 +64,8 @@ bit Vox_Output_Short_Flag = 0;
#define VOX_CLOSE_HOLD_CNT 50 //关盖发码前保持时间
#define MAX_PACKET_SIZE 0x20
#if VOX_FOLLOW_CHG
#define VOX_FOLLOW_CHG_INIT_CNT 10
@ -109,9 +108,21 @@ xdata uint8_t Vox_Get_BES_Addr_Flag[2] = {0};
#endif
#ifdef VOX_TX
idata uint8_t Net_Info[2][13] = {0};
idata uint8_t MAC_Addr[2][18] = {0};
uint8_t EarPhone_Num = 0;
#endif
xdata uint8_t Earphone_Vbat[2] = 0; //对耳电量
xdata uint8_t Vox_Online_State[2] = {0}; //耳机在线标志位
bit OpenCover_TX_Cmd_Flag = 0;
#define KEY_TWS_PAIR_TIMER 2
#define KEY_TWS_PAIR_CNT 6
@ -328,8 +339,8 @@ xdata uint8_t Vox_Online_State[2] = {0}; //
case VOX_COMM_Mode_Uart:
VOX_Confg |= VOX_CFG_Comx_Rup_2K |VOX_CFG_Vox_Rup_2K | VOX_CFG_Vox_Vup_VOXS;
VOX_Confg |= VOX_CFG_Comx_Rup_2K | 0<<5 |VOX_CFG_Vox_Rup_2K | VOX_CFG_Vox_Vup_VOXS;
// VOX_Confg |= VOX_CFG_Vox_Vup_VOXS;
Bst_VOX_Comm_EN |= BST_COMM_EN_Gate_Ctrl | ( BST_COMM_EN_Vor_Comm_En | BST_COMM_EN_Vol_Comm_En );
break;
@ -406,9 +417,9 @@ void Vox_Det_Machine(void)
static bit Cover_Close_Flag1;
static bit Cover_Open_Flag;
static bit Cover_Close_Force_Vout_Flag;
static bit TX_Cmd_Flag;
static bit Cover_Open_Flag;
static bit Cover_Open_5V_Flag;
@ -448,12 +459,14 @@ void Vox_Det_Machine(void)
Set_PMU_Boost(ON); //Boost Enable异常时由硬件主动关闭。开启Boost开启Vox 5v会在开启Boost之后100ms延时
Boost_Open_Flag = 1;
#ifdef _DEBUG_VOX
printf("Boost Open.(line:%d)\r\n",(u16)__LINE__);
#endif
VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V
return;
}
VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V
Vox_Output_Debounce = 0;
Vox_Voltage_Hold_Timer = 0; //关盖清0开盖使用
@ -474,14 +487,12 @@ void Vox_Det_Machine(void)
Vox_Chg_Full_Flag = 0;
Cover_Close_Force_Vout_Flag = 0;
Vox_Getinto_Sleep_Flag = 0;
Vox_Chn_Select = 0;
Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00;
Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00;
Vox_Vout_Enable = ON;
Wkup_Earphone_Flag = 0;
@ -494,7 +505,7 @@ void Vox_Det_Machine(void)
Follow_Chg_Sta = Vox_Follow_Chg_InitSta;
#endif
#ifdef _DEBUG_VOX
printf("Box Close.\r\n");
printf("Box Close.(line:%d)\r\n",(u16)__LINE__);
#endif
}
else //2、开盖处理5v 500ms 转0V 500ms后转ADT模式。
@ -507,14 +518,15 @@ void Vox_Det_Machine(void)
Cover_Open_5V_Flag = 0;
#ifdef _DEBUG_VOX
printf("Box Open.\r\n");
printf("Box Open.(line:%d)\r\n",(u16)__LINE__);
#endif
}
Boost_Open_Flag = 0;
CoverEvent_Flg = 0;
}
/* 发送开盖指令*/
if( Cover_Open_Flag ) /*开盖后5V持续N00ms后0V持续N00ms保证耳机能被唤醒之后发开盖码。*/
{
@ -561,9 +573,7 @@ void Vox_Det_Machine(void)
Get_CHIP_STA1_Flag1 = 1;
TX_Cmd_Flag = 1;
Boost_Open_Flag = 0;
OpenCover_TX_Cmd_Flag = 1;
Vox_Vout_Enable = OFF;
#ifdef _DEBUG_VOX
@ -573,35 +583,65 @@ void Vox_Det_Machine(void)
}
else
{
if( TX_Cmd_Flag )
if( Event_key == KEY_EVENT_Empty )
{
TX_Cmd_Flag = 0;
if( OpenCover_TX_Cmd_Flag )
{
OpenCover_TX_Cmd_Flag = 0;
CHIP_STA1_BK = pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn );
if ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) )
{
if ( ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) == ( VOR_LoadOn | VOL_LoadOn ) )
{
EarPhone_Num = 2;
}
else
{
EarPhone_Num = 1;
}
}
else
{
EarPhone_Num = 0;
}
}
else
{
/*耳机出入盒判断*/
if( CHIP_STA1_BK != ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) ) //查询耳机loadon状态loadon状态改变则说明有耳机出入盒。
{
if( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) )
if ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) )
{
Earphone_Chg_Flag = 1;
#ifdef LED_DISPLAY
LED_On_Flag = 1;
#endif
#ifdef _DEBUG_VOX
printf("Open Box And Earphone GetIn.\r\n");
#endif
if ( ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) == ( VOR_LoadOn | VOL_LoadOn ) )
{
EarPhone_Num = 2;
}
else
{
EarPhone_Num = 1;
}
}
else
{
EarPhone_Num = 0;
}
#ifdef _DEBUG_VOX
printf( "Open Box And Earphone GetIn(Num:%d)(VoxSta:0x%x).\r\n",(u16)EarPhone_Num, (u16)(pmu_Info.pmu_VOX_STA) );
#endif
CHIP_STA1_BK = ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) );
}
}
}
}
}
}
if( Cover_Close_Flag )
{
@ -621,25 +661,28 @@ void Vox_Det_Machine(void)
Follow_Chg_Sta = Vox_Follow_Chg_InitSta;
#endif
Vox_TX_Timer = 0;
Vox_Voltage_Hold_Timer = 0;
Vox_Output_Debounce = 0;
Vox_Chg_Full_Flag = 0;
Cover_Close_Force_Vout_Flag = 1;
return;
}
VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V
#ifdef _DEBUG_VOX
printf("Close Box And Force Voltage Up.\r\n");
printf("Close Box And Force Voltage Up.\r\n ");
#endif
Boost_Open_Flag = 0;
Wkup_Earphone_Flag = 0;
}
else
{
if( !Cover_Close_Force_Vout_Flag )
{
if( Vox_Voltage_Hold_Timer <= VOX_VOLTAGE_HOLD_CNT ) //关盖Boost VPMID保持时间。
{
@ -668,9 +711,8 @@ void Vox_Det_Machine(void)
return;
}
}
if( Vox_Output_Debounce <= VOX_CLOSE_HOLD_CNT ) //关盖后5s发送获取电量命令。
if( Vox_Output_Debounce <= Vox_TX_Pattern_Tim ) //关盖后5s发送获取电量命令。
{
if( (Vox_Output_Debounce % Vox_TX_Interval_2) == 0 ) //200ms发送一次
{
@ -690,29 +732,25 @@ void Vox_Det_Machine(void)
return;
}
}
}
/* 发完关盖码后开启VOX VOUT 5V输出。 */
if( Cover_Close_Flag1 )
{
VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V
#ifdef _DEBUG_VOX
printf("VOX Vout 5V(VOX_STA:0x%x,line:%d).\r\n",(uint16_t)(pmu_Info.pmu_VOX_STA), (uint16_t)__LINE__);
#endif
Cover_Close_Flag1 = 0;
}
#if VOX_FOLLOW_CHG
if ( Vox_Fllow_Chg.Vox_Follow_Stop == OFF )
{
Vox_Follow_Chg( &Vox_Fllow_Chg ); //跟随充处理。
}
else
#endif
{
if( !Vox_Chg_Full_Flag )
{
if( ( (pmu_Info.pmu_VOX_STA & ( VOR_Ioff | VOL_Ioff ) ) == ( VOR_Ioff | VOL_Ioff ) )|| !(pmu_Info.pmu_VOX_STA & ( VOL_LoadOn | VOR_LoadOn ) ) || F_batlevel_low ) //耳机充满、VOX无负载、盒子低电则关闭Vout输出通路关闭Boost。
if( ( (pmu_Info.pmu_VOX_STA & ( VOR_Ioff | VOL_Ioff ) ) == ( VOR_Ioff | VOL_Ioff ) )|| !( pmu_Info.pmu_VOX_STA & ( VOL_LoadOn | VOR_LoadOn ) ) || F_batlevel_low ) //耳机充满、VOX无负载、盒子低电则关闭Vout输出通路关闭Boost。
{
if( Vox_Voltage_Hold_Timer < VOX_VOUT_5V_LEAST_CNT ) //重载转轻载延时5s后关闭Boost输出。
if( Vox_Voltage_Hold_Timer <= VOX_VOUT_5V_LEAST_CNT ) //重载转轻载延时5s后关闭Boost输出。
{
Vox_Voltage_Hold_Timer++;
@ -724,10 +762,23 @@ void Vox_Det_Machine(void)
Vox_Chg_Full_Flag = 1;
Boost_Open_Flag = 0;
Vox_Output_Debounce = 0;
Vox_Voltage_Hold_Timer = 0;
Vox_Getinto_Sleep_Flag = 0;
VOX_EN_Type(VOX_ADT_Mode); //VOX Enable ADT
}
else
{
#if VOX_FOLLOW_CHG
if ( Vox_Fllow_Chg.Vox_Follow_Stop == OFF )
{
Vox_Follow_Chg( &Vox_Fllow_Chg ); //跟随充处理。
}
#endif
}
}
else
{
@ -800,6 +851,7 @@ void Vox_Det_Machine(void)
CHIP_STA1_BK = ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) );
}
}
}
#if VOX_FOLLOW_CHG
@ -810,7 +862,7 @@ void Vox_Det_Machine(void)
*
* Description : Vox (40ms调用周期)
*
* Arguments : NONE
* Arguments : g_Vox_Fllow_Chg_Cfg *g_Vox_Fllow_Chg
* Returns : NONE
@ -839,7 +891,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
if( !nVpmid_Value_Setting )
{
Set_PMU_Boost_Vout(n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present);
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG InitSta Set Max Vpmid.(Vox_sta:0x%x)(line:%d)\r\n",(u16)pmu_Info.pmu_VOX_STA, (u16)__LINE__);
#endif
nVpmid_Value_Setting = 1;
@ -848,7 +900,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
else
{
Vox_Follow_Init_Deb = 0;
/* 参数初始化。 */
nVpmid_Value_Setting = 0;
n_Vox_Fllow_Chg->Vpmid_AddSta[VOR_CHAN] = OFF;
@ -878,7 +930,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
Follow_Chg_Sta = Vox_Follow_Chg_Sta1;
Vox_Follow_Chg_Debounce = 0;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG InitSta.(Vox_sta:0x%x)(line:%d)\r\n",(u16)pmu_Info.pmu_VOX_STA, (u16)__LINE__);
#endif
}
@ -893,7 +945,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
n_Vox_Fllow_Chg->Vox_Follow_Stop = ON;
Follow_Chg_Sta = Vox_Follow_Chg_InitSta;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta1,No EarPhone In Box.(line:%d)\r\n",(u16)__LINE__);
#endif
}
@ -907,7 +959,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
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_Pos[VOR_CHAN] = g_pmu_Adc_Ivor << 1; //Ivox_Threshold_Neg = IVox_Init * 2
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta1,VOR Chging(Ivor:%dmA).(line:%d)\r\n",g_pmu_Adc_Ivor,(u16)__LINE__);
#endif
@ -920,7 +972,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
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_Pos[VOL_CHAN] = g_pmu_Adc_Ivol << 1; //Ivox_Threshold_Neg = IVox_Init * 2
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta1,VOL Chging(Ivol:%dmA).(line:%d)\r\n",g_pmu_Adc_Ivol,(u16)__LINE__);
#endif
@ -948,7 +1000,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN] = g_pmu_Adc_Ivor;
n_Vox_Fllow_Chg->Vox_InBox_Sta[VOR_CHAN] = ON; //判断VOR有耳机在盒正常抽电
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta2,Get IVOR:%dmA.(line:%d)\r\n",(u16)g_pmu_Adc_Ivor,(u16)__LINE__);
#endif
}
@ -958,7 +1010,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN] = g_pmu_Adc_Ivol;
n_Vox_Fllow_Chg->Vox_InBox_Sta[VOL_CHAN] = ON; //判断VOL有耳机在盒正常抽电
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta2,Get IVOL:%dmA.(line:%d)\r\n",(u16)g_pmu_Adc_Ivol,(u16)__LINE__);
#endif
}
@ -984,7 +1036,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
Follow_Chg_Sta = Vox_Follow_Chg_InitSta;
n_Vox_Fllow_Chg->Vox_Follow_Start = OFF; //重启动跟随充
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta3,VOX Chg ReInit.(line:%d)\r\n",(u16)__LINE__);
#endif
}
@ -1002,14 +1054,14 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
{
n_Vox_Fllow_Chg->Vox_InBox_Sta[VOR_CHAN] = OFF;
}
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta3(CV),VOR Vpmid AddSta(Ivor:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN],(u16)__LINE__);
#endif
}
else //未检测到Ivor Ioff则Vpmid降档
{
n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] = ON;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta3(CV),VOR Vpmid SubSta(Ivor:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN],(u16)__LINE__);
#endif
}
@ -1019,14 +1071,14 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
if ( n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN] > n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOR_CHAN] )
{
n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] = ON;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta3(CC),VOR Vpmid SubSta(Ivor:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN],(u16)__LINE__);
#endif
}
else
{
n_Vox_Fllow_Chg->Vpmid_AddSta[VOR_CHAN] = ON;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta3(CC),VOR Vpmid AddSta(Ivor:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN],(u16)__LINE__);
#endif
}
@ -1045,14 +1097,14 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
{
n_Vox_Fllow_Chg->Vox_InBox_Sta[VOL_CHAN] = OFF;
}
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta3(CV),VOL Vpmid AddSta(Ivol:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN],(u16)__LINE__);
#endif
}
else //未检测到Ivol Ioff则Vpmid降档
{
n_Vox_Fllow_Chg->Vpmid_SubSta[VOL_CHAN] = ON;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta3(CV),VOL Vpmid SubSta(Ivol:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN],(u16)__LINE__);
#endif
}
@ -1062,14 +1114,14 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
if ( n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN] > n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOL_CHAN] )
{
n_Vox_Fllow_Chg->Vpmid_SubSta[VOL_CHAN] = ON;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta3(CC),VOL Vpmid SubSta(Ivol:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN],(u16)__LINE__);
#endif
}
else
{
n_Vox_Fllow_Chg->Vpmid_AddSta[VOL_CHAN] = ON;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta3(CC),VOL Vpmid AddSta(Ivol:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN],(u16)__LINE__);
#endif
}
@ -1108,12 +1160,12 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
n_Vox_Fllow_Chg->Vpmid_AddSta[VOL_CHAN] = ON;
Follow_Chg_Sta = Vox_Follow_Chg_Sta2;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta4,VOx Vpmid AddSta(Vout:0x%x,Ivol:%dmA,Ivor:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivol,g_pmu_Adc_Ivor,(u16)__LINE__);
#endif
}
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
else
{
printf("Follow CHG Sta4,VOx Ching(Vout:0x%x,Ivol:%dmA,Ivor:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivol,g_pmu_Adc_Ivor,(u16)__LINE__);
@ -1134,11 +1186,11 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
n_Vox_Fllow_Chg->Vpmid_AddSta[VOR_CHAN] = ON;
Follow_Chg_Sta = Vox_Follow_Chg_Sta2;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta4,VOR Vpmid AddSta(Vout:0x%x,Ivor:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivor,(u16)__LINE__);
#endif
}
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
else
{
printf("Follow CHG Sta4,VOR Ching(Vout:0x%x,Ivor:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivor,(u16)__LINE__);
@ -1154,11 +1206,11 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
n_Vox_Fllow_Chg->Vpmid_AddSta[VOL_CHAN] = ON;
Follow_Chg_Sta = Vox_Follow_Chg_Sta2;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG Sta4,VOL Vpmid AddSta(Vout:0x%x,Ivol:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivol,(u16)__LINE__);
#endif
}
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
else
{
printf("Follow CHG Sta4,VOL Ching(Vout:0x%x,Ivol:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivol,(u16)__LINE__);
@ -1184,7 +1236,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
if( ( n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] == ON ) && ( n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] == ON ) )
{
n_Vox_Fllow_Chg->Vpmid_SubSta_Flag = ON;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG SubSta,VOL/VOR(line:%d).\r\n",(u16)__LINE__);
#endif
}
@ -1194,7 +1246,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
if( n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] == ON )
{
n_Vox_Fllow_Chg->Vpmid_SubSta_Flag = ON;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG SubSta,VOR(line:%d).\r\n",(u16)__LINE__);
#endif
}
@ -1205,7 +1257,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
if( n_Vox_Fllow_Chg->Vpmid_SubSta[VOL_CHAN] == ON )
{
n_Vox_Fllow_Chg->Vpmid_SubSta_Flag = ON;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG SubSta,VOL(line:%d).\r\n",(u16)__LINE__);
#endif
}
@ -1236,7 +1288,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
Vox_Follow_Chg_Debounce = 0;
n_Vox_Fllow_Chg->Vpmid_SubSta_Flag = OFF;
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG SubSta,(STA:0x%x,Vpmid:0x%x)(line:%d)\r\n",(u16)Follow_Chg_Sta,(u16)n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,(u16)__LINE__);
#endif
Set_PMU_Boost_Vout( n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present );
@ -1265,7 +1317,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
Follow_Chg_Sta = Vox_Follow_Chg_Sta1;
}
#ifdef _DEBUG_VOX
#ifdef _DEBUG_FOLLOW
printf("Follow CHG AddSta,(STA:0x%x,Vpmid:0x%x)(line:%d)\r\n",(u16)Follow_Chg_Sta,(u16)n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,(u16)__LINE__);
#endif
Set_PMU_Boost_Vout(n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present);
@ -1343,14 +1395,6 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg )
*
*******************************************************************************
*/
idata uint8_t Net_Info[2][8] = {0};
idata uint8_t MAC_Addr[2][18] = {0};
uint8_t EarPhone_Num = 0;
#define MAX_PACKET_SIZE 0x20
void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select)
{
uint8_t dataLen = 0;
@ -1388,14 +1432,14 @@ void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select)
case VHOUSE_CMD_EXCH_TWS_BTADDR:
/*Data Length*/
tx_pData[3] = 0x1B;
tx_pData[3] = MAX_PACKET_SIZE;
for(i=5;i<18;i++)
{
tx_pData[i] = MAC_Addr[nVox_Chn_Select][i];
}
for(i=23;i<8;i++)
for(i=23;i<13;i++)
{
tx_pData[i] = Net_Info[nVox_Chn_Select][i];
}
@ -1467,6 +1511,7 @@ void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select)
tx_pData[dataLen] = Crc8Maxim(tx_pData,dataLen);
#if 0
/* vor、vol使用不同uart进行通讯 */
if(nVox_Chn_Select == VOL_CHAN)
{
@ -1490,17 +1535,18 @@ void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select)
}
#else
/* vor、vol都使用uart0进行分时通讯。 */
VOX_EN_Type( VOX_COMM_Mode_Uart );
if(nVox_Chn_Select == VOL_CHAN)
if(nVox_Chn_Select == VOR_CHAN)
{
SFRADDR = MFP_CTL0; //关闭VOR到UART0的开关配置P02为GPIOP03为UART0。
SFRDATA &=~ 0x0F;
SFRDATA |= 0x08;
}
else
if(nVox_Chn_Select == VOR_CHAN)
if(nVox_Chn_Select == VOL_CHAN)
{
SFRADDR = MFP_CTL0; //关闭VOL到UART0的开关配置P03为GPIOP02为UART0。
SFRDATA &=~ 0x0F;
@ -1508,12 +1554,25 @@ void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select)
}
#if UART0_ENABLE
Uart0SendPacket(dataLen + 1, tx_pData);
Uart0SendPacket(dataLen + 2, tx_pData);
#endif
// VOX_EN_Type( VOX_VOUT_Mode );
if(nVox_Chn_Select == VOR_CHAN)
{
SFRADDR = P0_IE; //Set P03 As Input.
SFRDATA &=~ 0x0C;
SFRDATA |= 0x08;
}
else
if(nVox_Chn_Select == VOL_CHAN)
{
SFRADDR = P0_IE; //Set P02 As Input.
SFRDATA &=~ 0x0C;
SFRDATA |= 0x04;
}
#endif
}
#endif
@ -1621,18 +1680,19 @@ void HandleRxMsg(VOX_BES_COMMAND_E RxCommand)
void HandleVoxCommMsg(void)
{
uint8_t CrcCheckSum = 0;
uint8_t i = 0;
/*RX数据处理*/
if( Uart0_RX_Finish_Flag )
{
Uart0_RX_Finish_Flag = 0;
printf("RX0_Buffer[0]:0x%x,RX0_Buffer[1]:0x%x,RX0_Buffer[2]:0x%x,RX0_Buffer[3]:0x%x,RX0_Buffer[4]:0x%x,RX0_Buffer[5]:0x%x,RX0_Buffer[6]:0x%x,RX0_Buffer[7]:0x%x,line:%d\r\n",(u16)RX0_Buffer[0],(u16)RX0_Buffer[1],(u16)RX0_Buffer[2],(u16)RX0_Buffer[3],(u16)RX0_Buffer[4],(u16)RX0_Buffer[5],(u16)RX0_Buffer[6],(u16)RX0_Buffer[7],(u16)__LINE__);
CrcCheckSum = Crc8Maxim(RX0_Buffer, RX0_Buffer[2] + 3); //求校验和
if( CrcCheckSum == RX0_Buffer[RX0_Buffer[2] + 3] )
{
HandleRxMsg((VOX_BES_COMMAND_E)RX0_Buffer[3]);
HandleRxMsg( (VOX_BES_COMMAND_E)RX0_Buffer[3] );
}
else
{

View File

@ -1,3 +1,10 @@
---- I2C_Ack Matches (2 in 2 files) ----
i2c_simu.c (UsrSrc\i2c_simu) line 135 : void I2C_Ack(void)
i2c_simu.h (UsrInc\i2c_simu) line 85 : void I2C_Ack(void);
---- Boost_Open_Flag Matches (9 in 3 files) ----
Hall_Handler in hall.c (UsrSrc\hall) : Boost_Open_Flag = 0;
vox_module.c (UsrSrc\vox) line 35 : bit Boost_Open_Flag = 0;
Vox_Det_Machine in vox_module.c (UsrSrc\vox) : if( !Boost_Open_Flag )
Vox_Det_Machine in vox_module.c (UsrSrc\vox) : Boost_Open_Flag = 1;
Vox_Det_Machine in vox_module.c (UsrSrc\vox) : Boost_Open_Flag = 0;
Vox_Det_Machine in vox_module.c (UsrSrc\vox) : if( !Boost_Open_Flag )
Vox_Det_Machine in vox_module.c (UsrSrc\vox) : Boost_Open_Flag = 1;
Vox_Det_Machine in vox_module.c (UsrSrc\vox) : Boost_Open_Flag = 0;
vox_module.h (UsrInc\vox) line 224 : extern bit Boost_Open_Flag;