From 4949ba63512b922a178564fc0819c140a1e947c6 Mon Sep 17 00:00:00 2001 From: Alex xu Date: Fri, 14 Feb 2025 11:21:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=86=85=E5=AE=B9=EF=BC=9A1?= =?UTF-8?q?=E3=80=81=E5=B0=86=E5=8F=8C=E5=90=91=E9=80=9A=E4=BF=A1=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=A8=A1=E5=9D=97=E6=8F=90=E5=8F=96=E5=87=BA=E6=9D=A5?= =?UTF-8?q?=EF=BC=9B2=E3=80=81=E4=BC=98=E5=8C=96=E9=83=A8=E5=88=86bug?= =?UTF-8?q?=E5=92=8C=E4=B8=8D=E5=90=88=E7=90=86=E5=A4=84=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Out/8837_EVB_250213_1135.bin | Bin 12288 -> 0 bytes Out/8837_EVB_250213_1135.hex | 753 -------------- Out/8837_EVB_250213_1135_9EC6_010102.bin | Bin 12290 -> 0 bytes Out/8837_EVB_250214_1117.bin | Bin 0 -> 12288 bytes Out/8837_EVB_250214_1117.hex | 746 ++++++++++++++ Out/8837_EVB_250214_1117_5C91_010102.bin | Bin 0 -> 12290 bytes Project/SY8837_Demo.uvgui.GH | 50 +- Project/SY8837_Demo.uvopt | 12 + Project/SY8837_Demo.uvproj | 7 +- .../SY8837_Demo.SearchResults | 24 +- SY8837_Demo.si4project/SY8837_Demo.sip_sym | Bin 369512 -> 387512 bytes SY8837_Demo.si4project/SY8837_Demo.sip_xab | Bin 110592 -> 118784 bytes SY8837_Demo.si4project/SY8837_Demo.sip_xad | Bin 1408 -> 1488 bytes SY8837_Demo.si4project/SY8837_Demo.sip_xm | Bin 164 -> 172 bytes SY8837_Demo.si4project/SY8837_Demo.sip_xsb | Bin 40960 -> 45056 bytes SY8837_Demo.si4project/SY8837_Demo.sip_xsd | Bin 728 -> 768 bytes SY8837_Demo.si4project/SY8837_Demo.siwork | Bin 20415 -> 71480 bytes UsrInc/adc/adc.h | 2 +- UsrInc/charger/charger_module.h | 36 +- UsrInc/comm/vox_comm.h | 190 ++++ UsrInc/discharge/discharge_module.h | 4 +- UsrInc/inc/config.h | 20 +- UsrInc/inc/define.h | 2 +- UsrInc/system/system.h | 68 +- UsrInc/vox/vox_module.h | 354 ++----- UsrSrc/charger/charger_module.c | 30 +- UsrSrc/comm/vox_comm.c | 970 ++++++++++++++++++ UsrSrc/key/key.c | 1 + UsrSrc/system/system.c | 3 + UsrSrc/userapp/userapp.c | 1 + UsrSrc/vox/vox_module.c | 950 +---------------- 31 files changed, 2159 insertions(+), 2064 deletions(-) delete mode 100644 Out/8837_EVB_250213_1135.bin delete mode 100644 Out/8837_EVB_250213_1135.hex delete mode 100644 Out/8837_EVB_250213_1135_9EC6_010102.bin create mode 100644 Out/8837_EVB_250214_1117.bin create mode 100644 Out/8837_EVB_250214_1117.hex create mode 100644 Out/8837_EVB_250214_1117_5C91_010102.bin create mode 100644 UsrInc/comm/vox_comm.h create mode 100644 UsrSrc/comm/vox_comm.c diff --git a/Out/8837_EVB_250213_1135.bin b/Out/8837_EVB_250213_1135.bin deleted file mode 100644 index 4fb8bae3570e63e9f2a082152195086eb1b1b9d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 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 Lfq&cs9LN73{z2jw literal 0 HcmV?d00001 diff --git a/Out/8837_EVB_250214_1117.hex b/Out/8837_EVB_250214_1117.hex new file mode 100644 index 0000000..a79057a --- /dev/null +++ b/Out/8837_EVB_250214_1117.hex @@ -0,0 +1,746 @@ +:0300000002228C4D +:10228C00758E3075D20078FFE4F6D8FD9000007F93 +:10229C00007E01E4F0A3DFFCDEFA75816F0222E719 +:0F2A5D00122550D2AED2BE1224241228E480F4E7 +:1026640075FE0F43FF8075FE2975FFB575A52175AD +:10267400FE1E43FF01E5A3540F24F89001B5F0E5D5 +:10268400A3C4540F9001C9F0E5AD540F24F875F0BC +:102694000AA49001BFF09001C3E5ABF0E5ADC454CA +:1026A4000F24F875F00AA49001C0F09001C6E5ACBF +:0426B400F0D2BD2281 +:10186A00900100EFF0203E03021A8B9001BBE0FECC +:10187A00A3E07803CEC313CE13D8F9F0EE9001BBE0 +:10188A00F09001B8E024FD60491470030219521463 +:10189A0070030219C824FE7003021A392405600372 +:1018AA00021A889001B5E0FF3395E0FEC39001BCAF +:1018BA00E09FFF9001BBE09EFE9001C4F0A3EFF011 +:1018CA00C3EE648094804003021A88E49001C40243 +:1018DA001A859001BBE0FEA3E0FF7C097DC4120BD0 +:1018EA0000780A120A8A9001BBEEF0A3EFF0900189 +:1018FA00BFE0FD3395E0FCC3EF9DFFEE9CFE339500 +:10190A00E0FDFCE47B64FAF9F8120A3BC006C00762 +:10191A009001C3E075F002A424F4FFE5F03401ABB2 +:10192A0007FA3395E0F9F8D007D00612279E9001FE +:10193A00B3EEF0A3EFF0C3EE648094804003021A82 +:10194A0088E49001B3021A859001BBE0FEA3E0FF90 +:10195A007C097DC4120B00780A120A8A9001BBEE38 +:10196A00F0A3EFF09001C0E0FD3395E0FCC3EF9DDA +:10197A00FFEE9CFE3395E0FDFCE47B64FAF9F81275 +:10198A000A3BC006C0079001C6E075F002A424F421 +:10199A00FFE5F03401AB07FA3395E0F9F8D007D048 +:1019AA000612279E9001B6EEF0A3EFF0C3EE648014 +:1019BA0094804003021A88E49001B6021A859001C5 +:1019CA00BBE0FEA3E0FF7C097DC4120B00780A127B +:1019DA000A8A9001BBEEF0A3EFF0E025E0FE900149 +:1019EA00BBE0339001C1F0A3CEF09001C1E0FEA3A9 +:1019FA00E07802C333CE33CED8F9FDAC069001C9E4 +:101A0A00E0FF3395E0FEEF24F8FFEE34FFFE120903 +:101A1A00437C037DE81209559001C1EE8FF012094B +:101A2A008BC39001C1E0648094805052E4804C9052 +:101A3A0001B5E0FF3395E0FEC39001BCE09FFF9043 +:101A4A0001BBE09EFEE4FCFD7BC47A09F9F8120AA8 +:101A5A003B780A120A9D9001BBEEF0A3EFF0E02555 +:101A6A00E0FF9001BBE033FE9001B9F0A3EFF0C3B1 +:101A7A00EE648094805007E49001B9F0A3F0C23E6E +:101A8A0022900100E09001B8F0C454F04401F5A599 +:0C1A9A00E49001BBF0A3F09001C8F02222 +:03006B000223B9B4 +:1023B900C0E0C0F0C083C082C0D075D000C000C0EA +:1023C90006C007E5F330E03FAFA19001BDE4F0A3FB +:1023D900EFF0E5A25403FE9001BDE04EF0A3E0F05A +:1023E9009001C8E0C3940850199001BDE0FEA3E034 +:1023F900FF9001BBEE8FF012098B9001C8E004F049 +:102409008005D23E53A5FE75F301D007D006D00052 +:0B241900D0D0D082D083D0F0D0E032D1 +:1027E2009001F77403F075FE7043FF1853B3F14381 +:1027F200B302E47809F6780BF6E018F6780C760165 +:102802007909E718461846F5B175B201A37410F0BC +:05281200A37468F02230 +:101C7C00E4FE9001C4E0FCA3E0FDC394E8EC940303 +:101C8C0040037F0022EF7003021D92D3ED940FEC02 +:101C9C0094034003021D70ED94CBEC9400500302AE +:101CAC001D70D3ED94AAEC94024021D217780A76D9 +:101CBC0001301814D3ED94BFEC94024004C2188088 +:101CCC00079001F7E0780AF6E4FE806ED3ED94AA53 +:101CDC00EC94025041ED9437EC94014039D21890B9 +:101CEC0001F7E0780AF6301711D3ED9493EC9402D7 +:101CFC005004C2178004780A7601780C76013012F1 +:101D0C0011D3ED9451EC94015004C2128004E47888 +:101D1C000CF6E4FE8024D3ED9437EC9401501BD2E6 +:101D2C0012E4780CF6301810ED9426EC9401500463 +:101D3C00C2188004780C7601E4FE301511C3ED94C2 +:101D4C00F3EC94025006C215E4FE80027E013016BC +:101D5C002FD3ED94DDEC94004006C216E4FE8020F7 +:101D6C007E01801CD3ED940FEC94034006D2157EBB +:101D7C0001800DD3ED94CBEC94005004D2167E016F +:101D8C00C213C2148058C215C216D3ED949FEC94A2 +:101D9C00035031ED9471EC94004029301310ED9404 +:101DAC0084EC94035006C213E4FE80027E013014CE +:101DBC002DD3ED9482EC94004006C214E4FE801EF8 +:101DCC007E01801AD3ED949FEC94034004D21380CF +:101DDC000BC3ED9471EC94005002D2147E01780C7C +:051DEC00E6F5B2AF06B0 +:011DF10022CF +:10206A00E4FBFAE5E65480700753B3FE7808F622DB +:10207A0078087601E5E830E50575E8208005E5E5AC +:10208A0030E10453B3FE22E5F230E50475F2202272 +:10209A00E5F2540C601353B3FEE5F354C070030227 +:1020AA00213575F20C75F3C02275F3C07F01121C3D +:1020BA007CEF600653B3FED21922C219E5F230E46E +:1020CA00289001F8E0FAA3E0246AFFEA34FFFEC38D +:1020DA009001C2E09F9001C1E09E500575F2108008 +:1020EA000353B3FE78087603227909E7780B46187A +:1020FA0046F5B1780CE6F5B243B31190015FE0FF03 +:10210A00D394014002C234EFD394034002C230EFA9 +:10211A00D394074002C232EFD3940C4002C231EF8B +:0B212A00D394114002C2337808760203 +:012135002287 +:10005600303610EFB4010475B5C02253B5BFED4478 +:0400660080F5B5224A +:0F2A6C00E5B554806008303605E4F5B5C2362272 +:1025AF00C236E5E520E156E5E230E703D23722E512 +:1025BF00E830E00D301B4675E8017D3FE4FF020077 +:1025CF0056E4FF121C7CEF6006122A6CD23522C231 +:1025DF0035303403022A6CD2363037217808E6B40E +:1025EF00021BC39001C2E094109001C1E06480947B +:0E25FF008E4005D236C23722122A6CC2362216 +:10291600E5E25408FF9001FBE06F6021E5E230E359 +:10292600089001FA7401F08005E49001FAF0D23FB4 +:0D293600C20FD226D2289001FBEFF0D24153 +:012943002271 +:101AA600E5E2540270319001E275F00112098B9063 +:101AB60001E2E0FEA3E0FFC39417EE94024004D2D5 +:101AC6002E800EC3EF9487EE94004005202D02D29F +:101AD6002DD22AC22B8041302A37D241E49001E52B +:101AE600F0C22AD22B9001E4F09001E2E0FEA3E0DE +:101AF600FFD3941EEE94005008D229D22CD228800F +:101B06000EC3EF944FEE94015005302D02D22FC232 +:101B16002DE49001E2F0A3F0302B38303635302F2B +:101B260029200F0280337F031226B89001E4E0D308 +:101B360094235003021C69C22F9001E57402F0E45D +:101B46009001E1F09001D2F0A3F0302C02C22CC239 +:101B56002BC20F302E2B200F0A7D3FE4FF120056BA +:101B6600D20F227F031226B89001E4E0D3942350CB +:101B760003021C69C22EE49001E6F09001E57403AD +:101B8600F09001FAE064016003021C7B9001E5E03D +:101B960064026003021C3E9001E1E0C39401501010 +:101BA6007D257F37121621E49001D2F0A3F08070D4 +:101BB6009001E0E0D39405401CE4F07D257F1112EE +:101BC60016217D247F11121621E49001E5F0D21032 +:101BD6007F03021C789001D3E0B4010F7D247F0AB5 +:101BE6001216219001D37402F080359001D3E0647F +:101BF60002702D9001D2E060207D257F0A12162109 +:101C0600E49001D2F0A3F09001E1F09001E0F090B1 +:101C160001E5F0D2107F0480597D247F371216210A +:101C26009001E1E0D39414400A9001E0E004F0E46E +:101C3600A3F0229001E1802B9001E5E0640370356A +:101C4600A3E0FFC394B4501FEF540F70047D2580AA +:101C56000A9001E6E0540770077D247F0B121621D7 +:101C66009001E6E004F022E49001E5F0D210A3F042 +:051C76007F041226B8F6 +:011C7B002246 +:1028B20075FE0675FF3C75FE0E53FF0F75FE0F5336 +:1028C200FFF075FE0375FFFFE4900134F0900133D1 +:1028D200F0900135F0900132F0C282C283C285C20B +:0228E20084224E +:102A0700EF14600D14600D14600D2403700BD28257 +:0A2A170022D28322D28422D285222B +:0529CA00900100E0FF98 +:1029CF00EF14600D14600D14600D2403700BC282A0 +:0A29DF0022C28322C28422C2852294 +:1024F000E4FF74362FF582E43401F583E4F0743A96 +:102500002FF582E43401F583E4F0EF25E0243EF575 +:1025100082E43401F583E4F0A3F0EF25E02446F5EE +:1025200082E43401F583E4F0A3F0EF25E0244EF5D6 +:1025300082E43401F583E4F0A3F0EF25E02456F5BE +:0F25400082E43401F583E4F0A3F00FEFB404A3B9 +:01254F002269 +:10248D00AC0774362CF582E43401F583EDF0EAC324 +:10249D0013FEEB13FFEC25E0243EF582E43401F549 +:1024AD0083EEF0A3EFF0AF03EC25E02446F582E4D4 +:1024BD003401F583EAF0A3EFF0900105E0FEA3E00F +:1024CD00FFEC25E0244EF582E43401F583EEF0A314 +:1024DD00EFF0EC25E02456F582E43401F583E4F0C9 +:0324ED00A3F02237 +:10000E0074362FF582E43401F583EDF0743A2FF552 +:10001E0082E43401F583EBF0EF25E0243EF582E433 +:10002E003401F583E4F0A37469F0EF25E02456F56E +:0B003E0082E43401F583E4F0A3F0221B +:10101F00E4900100F0F0900100E0FFC3940440035E +:10102F0002136174362FF582E43401F583E06022F8 +:10103F0024FE60241470030211291470030211A0FE +:10104F00240360030212FD900100E0FF122A070241 +:10105F0012FD1229CA0212FD900100E0FF25E024C3 +:10106F003EF582E43401F583E0FCA3E0FDEF25E0DB +:10107F002456F582E43401F583E0FEA3E0C39DEE30 +:10108F009C5005122A0780031229CA900100E0FF25 +:10109F0025E02446F582E43401F583E0FCA3E0FD6E +:1010AF00EF25E02456F582E43401F583E0FEA3E05A +:1010BF00C39DEE9C50030212FD900100E025E02439 +:1010CF0056F582E43401F583E4F0A3F0EF25E02434 +:1010DF004EF582E43401F583E0FEA3E0D39400EEF5 +:1010EF0094004016900100E025E0244EF582E43490 +:1010FF0001F58374FFF5F012098B900100E0FF25D5 +:10110F00E0244EF582E43401F583E0FCA3E04C606B +:10111F00030212FD74362F0211BC900100E0FF256F +:10112F00E0243EF582E43401F583E0FCA3E0FDEF1B +:10113F0025E02456F582E43401F583E0FEA3E0D3E5 +:10114F009DEE9C5005122A0780031229CA900100B8 +:10115F00E0FF25E02446F582E43401F583E0FCA3AB +:10116F00E0FDEF25E02456F582E43401F583E0FE3F +:10117F00A3E0C39DEE9C50030212FD900100E025F9 +:10118F00E02456F582E43401F583E4F0A3F0021273 +:10119F00FD900100E0FF243AF582E43401F583E08D +:1011AF00701712275AC240900100E02436F582E4EE +:1011BF003401F583E4F00212FD900100E0FF243AC0 +:1011CF00F582E43401F583E0FE6402704B20401495 +:1011DF00D240EF25E0243EF582E43401F583E4F0BC +:1011EF00A37469F0900100E0FF25E0243EF582E44E +:1011FF003401F583E475F00112098BEF25E0243EED +:10120F00F582E43401F583E0FCA3E0C394FEEC9493 +:10121F000050030212E7804EEE6401705A2040170F +:10122F00D240900100E025E0243EF582E43401F540 +:10123F0083E4F0A374FEF0900100E0FF25E0243E6C +:10124F00F582E43401F58374FFF5F012098BEF2575 +:10125F00E0243EF582E43401F583E0FEA3E0D3946D +:10126F0069EE94005072900100E0243AF582E43464 +:10127F0001F583E4F08061900100E0FF243AF582EC +:10128F00E43401F583E06403704EEF25E0243EF56E +:10129F0082E43401F583E0FEA3E0FFC394FEEE94F5 +:1012AF00004004D240800BD3EF946AEE94005002BA +:1012BF00C240900100E025E0243E30400DF582E46D +:1012CF003401F58374FFF5F0800BF582E43401F5FA +:1012DF0083E475F00112098B900100E0FF25E024F3 +:1012EF003EF582E43401F583A3E0FD122709900156 +:1012FF0000E0FF701174362FF582E43401F583E0BE +:10130F00900134F08043900100E0B401102436F5D1 +:10131F0082E43401F583E0900133F0802C900100DA +:10132F00E0B402102436F582E43401F583E0900135 +:10133F0035F08015900100E0B4030E2436F582E4F9 +:10134F003401F583E0900132F0900100E004F002E7 +:10135F001025E4900100F0900100E0FFC3940450C9 +:10136F001BEF25E02456F582E43401F583E475F094 +:0C137F000112098B900100E004F080DBFB +:01138B00223F +:10284C0075FE1E43FF0275FE2143FF0875D4867585 +:10285C00FE2143FF0475FE2143FF02300E0875FE76 +:10286C002453FFC3800675FE2443FF3C9001FE7485 +:03287C000FF02238 +:10006E00D2AC759A01D2B9D2BDD2A9D2AB75FE2946 +:04007E0043FFB0226A +:102A3700C2ACE4F59AD2B9C2BDC2A9C2AB75FE2930 +:042A470053FF4F22C8 +:092A9600122A3743870202006E88 +:102A4B00E5E254017006201103304104C241C32258 +:022A5B00D32284 +:1025500075FE01E4F5FF122A89122A7BE4F58675DF +:10256000B7C375FE6A75FF0475FE6C53FF3043FFF9 +:102570004A12266475FE8043FF0275FE0E53FFFC6F +:1025800043FF0175FE1775FF3CD2A8D2AF1227E2B8 +:102590007D697F03122A211228B21224F012284CDE +:0F25A0009001FE740FF0C20F9001F07401F02251 +:03000300020006F2 +:03000600D24132B2 +:03004B00022A9FE7 +:062A9F0075EB3CD2413250 +:03005300022AA5D9 +:062AA50075F302D241327C +:0D2A890075BB03759DDC759B92439A01227D +:06287F00900126120AD1AF +:10288500E4900129F0F0900129E0C39FE49E501CDB +:102895002039FDD239900126E475F001120ABA12E9 +:0C28A50008A8F59C900129E004F080DAFE +:0128B1002204 +:0300830002213621 +:10213600C0E0C083C082C0D075D000C000C003C05C +:1021460005C006C007E59B30E105539BFDC239E596 +:102156009B30E079539BFED2419001F3E01460235B +:1021660004706AE59C9001F3B4AA127401F0A3E42A +:10217600F0E0FF04F074502FF8A69C8050E4F0A322 +:10218600F0804A9001F4E0FF04F074502FF8A69C0A +:10219600E0FDB407177856E6FEE42409FFE43EFEA8 +:1021A60018E6FBEF4BFFA3EEF0A3EFF0EDFF900177 +:1021B600F5E07003A3E06F60099001F4E0D394208A +:1021C600400B9001F4E4F09001F3F0D23AD007D03E +:1021D60006D005D003D000D0D0D082D083D0E03254 +:062817004301F00402027F +:10298A009001C7E0FF04F012186A9001C7E0B4068C +:10299A000204F09001C7E0C3940840037402F022D5 +:1029E900122916121AA612260D301A11C21A12200D +:0E29F9006A1225AF12232C120C5012138C22DE +:101DF200E4900100F09001F0E0FFA3E0FE6F605577 +:101E0200A3EEF09001F0E0A3F024FE603214603FF4 +:101E120024026003021F53900105E4F0A37403F04F +:101E22007B647A007D02E4FF12248D900105E4F0C8 +:101E3200A37403F07B647A007D027F0102248D206B +:101E42000E03021F53D23F75E80CC20DC20E229040 +:101E520001FE021EE29001F1E024FE60351460678B +:101E6200147003021EED24036003021F539001EE5F +:101E7200E004F0E0C394085003021F539001F07491 +:101E820002F0E49001EEF090015FE06003021F5364 +:101E92008052E5F6700CE5F87008E5FA7004E5E1A9 +:101EA200601E9001F07403F0E5F6540F64087003AD +:101EB2007404F075E11F75F60F75F8FC75FABC2213 +:101EC2009001F07403F022201E03021F53C21E90E1 +:101ED20001FEE0D39400400CE014F0304173C241A3 +:101EE200740FF0229001F07404F022122A4B505B1E +:101EF20012284C7F041226B8122A6CE4900105F0D5 +:101F0200A3F0FBFAFDFF12248DE4900105F0A3F08B +:101F1200FBFAFD7F0112248DE4900105F0A3F0FB92 +:101F2200FAFD7F0212248DE4900105F0A3F0FBFA82 +:101F3200FD7F0312248D9001347402F0900133F07E +:101F4200900135F0900132F0022A969001F074026D +:011F5200F09E +:011F5300226B +:1028E400301D26C21D9001EFE0FF04F0EF14600CD0 +:1028F40014600E2402701212298A800D1229E980B4 +:1029040008121DF2E49001EFF0301F05C21F1210EF +:022914001F2280 +:1026B800EF24FE601E14602814602F24FE60352469 +:1026C80005703D43BDAA53BDAA75FE6F53FFF24383 +:1026D800FF092243BDCC75FE6F53FFFE43FF0C225A +:1026E80053BD7753B7CF43B7302253B7CF43B70360 +:1026F80053BD772253B7CC53BD7775FE6A43FF307D +:0127080022AE +:10138C002036030215F1303F59200F0A7D3FE4FF50 +:10139C00120056D20F227F031226B8E490018DF072 +:1013AC0090018BF0A3F0C200C201D20B9001FAE0C5 +:1013BC007020C227D202D203C205C208C204C209DD +:1013CC00C20AD211C2429001AEF0A3F09001B1F06A +:1013DC008008C202C203D205C206C20FC20DC20EE1 +:1013EC00C23F90018BE0C394055003021590300B63 +:1013FC0005C20B021564200022D200E5E354A06064 +:10140C0015E5E354A064A09001B070057402F0805F +:10141C000A7401F08005E49001B0F030057C900175 +:10142C008CE0C3940550077F061226B88027200154 +:10143C003B90018DE0FFD39414501FEF54037004C4 +:10144C007D24800990018DE020E0077D257F0D1221 +:10145C00162190018DE004F080407F041226B8E440 +:10146C0090018DF0D201D210C211802E9001E5E0D6 +:10147C007028301004C2108019E5E354A0FF9001CD +:10148C008AE06F7001E46012E5E354A06004D22797 +:10149C00D228E5E354A090018AF02002030215EE55 +:1014AC0030423F200F237D3FE4FF120056D20FD273 +:1014BC0011E49001AEF0A3F09001B1F090018BF02B +:1014CC00C208D20BC200D204227F031226B8C20F6C +:1014DC00D20390018BE0D394035003021590C242C7 +:1014EC00804F20044C90018CE0FFD39414501CEFDF +:1014FC00540370047D24800990018CE020E0077D6A +:10150C00257F0D12162190018C807990018DE0FFC2 +:10151C00D39414501CEF540370047D248009900163 +:10152C008DE020E0077D257F3712162190018D80FC +:10153C0053E5E8540C6026200E1E90018DE004F05B +:10154C00E0C394055003021620E4F075E80C7F0309 +:10155C001226B8D20DC211227F040226B8C20DC2C7 +:10156C000E3003097F031226B8C203807520083D94 +:10157C00E5E354AC64AC600330302190018BE0D3D4 +:10158C0094285004E004F022D208E490018EF090EC +:10159C00018BF0C2097F041226B880469001AFE09F +:1015AC0070407B017A017991120086803590018E12 +:1015BC00E0FFD39414501FEF540370047D24800972 +:1015CC0090018EE020E0077D257F05121621900109 +:1015DC008EE004F0800C200909D2097F041226B891 +:1015EC00C211C2072220070BD2077F041226B8C2F1 +:1015FC00118019E5E354A0FF90018AE06F7001E4BB +:10160C006012E5E354A06004D227D228E5E354A08D +:04161C0090018AF0BF +:0116200022A7 +:06008600900100120AD1F6 +:10008C009001B1E014700302016714700302023E88 +:10009C001470030202A914700302041524046003F3 +:1000AC00020595900100120AB190001E1208C16061 +:1000BC00030205959001B2E0D3940A5028E004F0B5 +:1000CC0090001A743F120921300C0302059590011F +:1000DC0000120AB190001A1208C1FDE4FF1200567A +:1000EC00D20C020595E49001B2F0C20C9001001202 +:1000FC000AB1900016E4120921900015E4120921AE +:10010C00900013E4120921900012E41209219000CE +:10011C0011E4120921900010E4120921900018E456 +:10012C00120921900017E412092190000EE4F5F059 +:10013C00120A0E90000CE4F5F0120A0E900019E46D +:10014C0012092190001B743F1209219001B1740116 +:10015C00F0E490018FF0A3F0020595E5E3540860FC +:10016C001CE5E354046016900100120AB190001EC5 +:10017C007401120921E49001B1F0020595E5E354F4 +:10018C0008704C9001B6E0FEA3E0FF900100120A4B +:10019C00B1900002EE8FF0120A0E7C007D05120960 +:1001AC0055EF7802C333CE33CED8F9FF900100124D +:1001BC000AB1900006EE8FF0120A0E9001B7E025FE +:1001CC00E0FF9001B6E03390000A8FF0120A0EE5C2 +:1001DC00E3540470519001B3E0FEA3E0FF900100E2 +:1001EC00120AB1EE8FF01209EF9001B3E0FEA3E01A +:1001FC00FF7C007D05120955EF7802C333CE33CE58 +:10020C00D8F9FF900100120AB1900004EE8FF012A1 +:10021C000A0E9001B4E025E0FF9001B3E0339000AA +:10022C00088FF0120A0E900100120AB190001D0204 +:10023C00058AD3900190E0940590018FE0940050D2 +:10024C00028069E490018FF0A3F0E5E35408701F7D +:10025C009001B6E0FEA3E0FF900100120AB19000FD +:10026C000EEE8FF0120A0E9000187401120921E59F +:10027C00E35404701F9001B3E0FEA3E0FF90010073 +:10028C00120AB190000CEE8FF0120A0E9000177447 +:10029C00011209219001B17403F0020595D390016C +:1002AC0090E0940290018FE09400500AE475F00104 +:1002BC0012098B020595E490018FF0A3F0900100D8 +:1002CC00120AB190000A1209B7FFAEF090000E129C +:1002DC0009B7D39FE5F09E501C900100120AB19013 +:1002EC0000081209B7FFAEF090000C1209B7D39FAB +:1002FC00E5F09E4011E49001B1F0900100120AB1BA +:10030C0090001D0203D7900100120AB19000181240 +:10031C0008C16401706D90000E1209B7FFAEF0D3E6 +:10032C009414EE94005031E5E330E31F9000167402 +:10033C000112092190001A1208C1C3943F40449045 +:10034C000100120AB1900018E48035900100120AE5 +:10035C00B190001374018028900100120AB1900032 +:10036C00061209B7FDD3EF9DEE95F0900100400801 +:10037C00120AB19000138006120AB1900016740193 +:10038C00120921900100120AB19000171208C164E1 +:10039C0001600302059590000C1209B7FFAEF0D373 +:1003AC009414EE94005034E5E330E222900015747E +:1003BC000112092190001A1208C1C3943F50030284 +:1003CC000595900100120AB1900017E48035900158 +:1003DC0000120AB190001274018028900100120AD8 +:1003EC00B19000041209B7FDD3EF9DEE95F090018A +:1003FC00004008120AB19000128006120AB1900057 +:10040C00157401120921020595D3900190E0941402 +:10041C0090018FE094005031E475F00112098B903B +:10042C0001B6E0FEA3E0FF900100120AB190000EAD +:10043C00EE8FF0120A0E9001B3E0FFA3E090000CD7 +:10044C00CF8FF0120A0E020595E490018FF0A3F005 +:10045C00900100120AB19000181208C164016003E7 +:10046C000204F39000171208C16401707A90000620 +:10047C001209B7FFAEF090000E1209B7FDACF0C335 +:10048C009FEC9E4018900100120AB190000A1209CC +:10049C00B7FFD3ED9FEC95F050030205959001004A +:1004AC00120AB19000041209B7FFAEF090000C12C2 +:1004BC0009B7FDACF0C39FEC9E4018900100120AE6 +:1004CC00B19000081209B7FFD3ED9FEC95F05003E3 +:1004DC00020595900100120AB190001674011209E0 +:1004EC002190001502058A900100120AB1900018A3 +:1004FC001208C1640170419000061209B7FFAEF0FA +:10050C0090000E1209B7FDACF0C39FEC9E40159005 +:10051C000100120AB190000A1209B7FFD3ED9FEC4B +:10052C0095F04014900100120AB19000167401125B +:10053C0009219001B17402F0900100120AB19000EF +:10054C00171208C1640170419000081209B7FFAE80 +:10055C00F090000C1209B7FDACF0D39FEC9E501537 +:10056C00900100120AB19000041209B7FFC3ED9F6D +:10057C00EC95F05014900100120AB1900015740122 +:10058C001209219001B17402F0900100120AB1908D +:10059C0000181208C1FF6401600D9000171208C109 +:1005AC00640160030207989000131208C1FE6401F5 +:1005BC00600D9000121208C164016003020712EF73 +:1005CC00B4011E9000171208C1B40115EEB401114C +:1005DC009000131208C1B4010890001474011209A0 +:1005EC00219000181208C1FFB401189000171208CE +:1005FC00C170109000131208C16401702390001494 +:10060C0004801AEF701A9000171208C1B4011190EF +:10061C0000121208C1B401089000147401120921CF +:10062C00900013E4120921900012E41209219000A9 +:10063C00141208C1640160030207B1900100120A90 +:10064C00B190001A1208C1D39400400890001A749B +:10065C00FE1208EE9000191208C1FF90001A120841 +:10066C00C1D39F40219001C2E024C8FF9001C1E09A +:10067C003400FEC39001BAE09FEE6480F89001B99B +:10068C00E06480985048900100120AB19000191251 +:10069C0008C1FF90001A1208C1D39F90010050139B +:1006AC00120AB190001AEF12092190001CE41209F1 +:1006BC00218013120AB190001C74011209219000C0 +:1006CC001A74021208EE9001B17404F080139001B8 +:1006DC00B17402F0900100120AB190001CE41209EE +:1006EC0021E490018FF0A3F0900100120AB1900068 +:1006FC0014E412092190001C1208C1FF90001A1278 +:10070C0008C1FD020795900100120AB19000161263 +:10071C0008C16401600D9000151208C164016003EA +:10072C000207B1900016E4120921900015E4120999 +:10073C002190001A1208C1C3943F500E9001001270 +:10074C000AB190001A74021208EE9001B17404F010 +:10075C00900100120AB190001B1208C1FF90001A00 +:10076C001208C1C39F4013900100120AB190001AE5 +:10077C00EF1209219001B17401F0900100120AB13D +:10078C0090001A1208C1FDE4FF0200569001B1E07E +:10079C00D394024010E4F0900100120AB190001EB4 +:0507AC00740112092197 +:0107B1002225 +:10281D00602A01600BB80BEA0C1C0C800CB20CE4A6 +:10282D000D160D480D7A0DAC0E100E420E740EA63F +:0E283D000ED80F0A0F3C0F870FD2101D106827 +:10232C00E4FFEF25E02460F582E43401F583E0FC62 +:10233C00A3E0FDC39001C2E09D9001C1E09C40056B +:10234C000FEFB415DD90015FE0FEEFD39E90015EC0 +:10235C00E0400404F0800214F0E5E16008E4F5E1EB +:10236C0090015FEFF090015EE0FED394BE5006EE5C +:10237C00C3940A500B90015FEFF090015E7464F00F +:10238C0090015FE0FFD394005002D234EFD394015C +:10239C005002D230EFD394055002D232EFD3940ACC +:0C23AC005002D231EFD3940F5002D23314 +:0123B8002202 +:102424009001ECE06062E4F0D21C9001EAE004F078 +:10243400E0C394054004E4F0D21D9001EDE004F003 +:10244400E0C3940A4004E4F0D21F9001E7E475F07D +:102454000112098BC39001E8E094649001E7E094D1 +:10246400004006E4F0A3F0D21A9001E9E004F0E0A1 +:10247400C394FA4013E4F0D21B9001EBE004F0E0C3 +:0924840094044004E4F0D21E228D +:03000B0002294483 +:10294400C0E0C083C082C0D074FC258CF58C746652 +:10295400258AF58A9001EC7401F0D0D0D082D0831E +:03296400D0E0328E +:0E2A7B00758901758CFC758A66D2A9D28C22F1 +:10275A00EFD39401501675FE0EEF25E02404FE74A3 +:10276A0003A806088002C333D8FC801475FE0FEF55 +:10277A0024FE25E0FE7403A806088002C333D8FCB1 +:10278A00F452FFEFB4040C75FE0F53FFF075FE0E02 +:04279A0053FF0F22B8 +:102A210075FE54EF5407F5FF75FE56AF058FFF7520 +:062A3100FE5375FF0122B7 +:10270900EFD39401501875FE0EEF25E02404FE74F2 +:1027190003A806088002C333D8FC42FF801675FE61 +:102729000FEF24FE25E0FE7403A806088002C333D8 +:10273900D8FC42FFEF70038DCE22EFB401038DCF99 +:1027490022EFB402038DDE22EFB40304AF058FDF5D +:01275900225D +:032FFD00010102CD +:10296700E4FB7D04FF12000EE4FB7D047F011200EF +:102977000EE4FB7D047F0212000EE4FB7D047F035F +:0329870002000E3D +:100C500030285AC228E49001FCF090015EF0900127 +:100C600005F0A3F0FBFAFDFF12248DE4900105F0DE +:100C7000A3F0FBFAFD7F0112248DE4900105F0A39F +:100C8000F0FBFAFD7F0212248DE4900105F0A3F041 +:100C9000FBFAFD7F0312248D9001347402F0900161 +:100CA00033F0900135F0900132F0D2412220190F3B +:100CB00020350C200D03020D66300E03020D662058 +:100CC0002205D222D22822900134E06402601A90D8 +:100CD0000105E4F0A3740AF07B147A007D02E4FFBE +:100CE00012248D9001347403F0900133E0640260AB +:100CF0001A900105E4F0A3740AF07B147A007D02D7 +:100D00007F0112248D9001337403F0900135E0646B +:100D100002601A900105E4F0A3740AF07B147A00D3 +:100D20007D027F0212248D9001357403F090013210 +:100D3000E06402601A900105E4F0A3740AF07B14E9 +:100D40007A007D027F0312248D9001327403F0201B +:100D50000D0302101E9001FCE0C394285003020E04 +:100D60009CD20ED2282230220CC222C224C223C21C +:100D700026C227D2427808E6FF7003020E7664038B +:100D8000705E202407D224C223022967E490010563 +:100D9000F0A3F0FBFA7D01FF12248DE4900105F031 +:100DA000A3F0FBFA7D017F0112248DE4900105F090 +:100DB000A3F0FBFA7D017F0212248DE4900105F07F +:100DC000A3F0FBFA7D017F0312248D90013474019E +:100DD000F0900133F0900135F0900132F0020E6D89 +:100DE00020230DD223C224D228E49001FDF0807D7F +:100DF0009001FCE0C394015055E004F0A3E01460BE +:100E00001A14602714603424037062900134E06483 +:100E100004605A7B017D04E4FF802E900133E0647E +:100E200004604A7B017D047F01801E900135E064EF +:100E300004603A7B017D047F02800E900132E06401 +:100E400004602A7B017D047F0312000E801F900145 +:100E5000FCE0C3940F5005E004F08011E49001FC25 +:100E6000F0A3E004F0E0C394044002E4F0C226C220 +:100E700027C229D2252230230AC223122967D22869 +:100E8000D2422220260C20250920270620290302F1 +:100E9000101E9001FCE0FFC394015004E004F02216 +:100EA000EFC394644003020FC99001FCE004F030EA +:100EB0003237900134E06403700302101EE49001A5 +:100EC00005F0A3F07B64FA7D03FF12248D900134BA +:100ED0007404F0E4900105F0A3F0FBFAFD7F011229 +:100EE000248D9001337402802D303141E49001054E +:100EF000F0A3F0FBFA7D01FF12248D900134740100 +:100F0000F0E4900105F0A3F0FBFA7D017F011224CB +:100F10008D9001337401F0E4900105F0A3F0FBFA29 +:100F2000FD7F0212248D90013574028043E490010C +:100F300005303353F0A3F0FBFA7D01FF12248D90AE +:100F400001347401F0E4900105F0A3F0FBFA7D0197 +:100F50007F0112248D9001337401F0E4900105F0BB +:100F6000A3F0FBFA7D017F0212248D9001357401FC +:100F7000F0E4900105F0A3F0FBFAFD7F0312248D4D +:100F80009001327402F022F0A3F0FBFA7D01FF120F +:100F9000248DE4900105F0A3F0FBFA7D017F01129E +:100FA000248DE4900105F0A3F0FBFA7D017F02128D +:100FB000248DE4900105F0A3F0FBFA7D017F03127C +:100FC000248D90013474018048C226C225C227C2F4 +:100FD00029E4900105F0A3F0FBFAFDFF12248DE453 +:100FE000900105F0A3F0FBFAFD7F0112248DE4903F +:100FF0000105F0A3F0FBFAFD7F0212248DE49001BD +:1010000005F0A3F0FBFAFD7F0312248D90013474E8 +:0E10100002F0900133F0900135F0900132F0C3 +:01101E0022AF +:1029AA00000000000000000000000000000000001D +:1029BA00000000000000000000000000000000000D +:0E21E600900126120AD1900129ECF0A3EDF031 +:1021F40074FFA3F0A3F0A37410F0A37421F0E4A37C +:10220400F090012974FFF5F01209A145F060709077 +:102214000126E475F001120ABA1208A890012FF001 +:10222400E0FE90012BE06EF0A3E0F0E4900130F0CA +:10223400A3F0C3900131E09408900130E094005081 +:10224400C090012BE0FEA3E0FFEE30E719EF25E09C +:10225400FFEE33FEA3E06EFEA3E06FFF90012BEED2 +:10226400F0A3EFF0800D90012CE025E0F090012B1D +:10227400E033F0900130E475F00112098B80B390E3 +:07228400012BE0FEA3E0FFC7 +:01228B002230 +:08162100900100EFF0A3EDF0D1 +:10162900E4A3F0A3F078047C017D017BFF7A29799A +:10163900AAFE7F20120882E4900124F0A3F0900111 +:101649000474AAF0900101E0FE900105F0900100F8 +:10165900E0900106F0A3E4F09001FAE0900108F0AF +:10166900900100E0120ADA16DF0516A20A16F00B3D +:1016790016FA0D17430E17980F16F011186912165E +:101689008F37000017A4E4900109F0A3F07B0678D6 +:1016990040E4F608DBFC0217A4900109740EF0E49B +:1016A900A3F0FB74402BF8E6FD740B2BF582E434B0 +:1016B90001F583EDF00BEBB406E9E4FB74462BF876 +:1016C900E6FD74112BF582E43401F583EDF00BEBA3 +:1016D900B408E90217A49001097401F0E4A3F0A287 +:1016E9003B33A3F00217A4E4900109F0A3F0021719 +:1016F900A49001097405F0E4A3F0A37410F0F0A319 +:101709007401F07808E65402C4333354C0FD9001E3 +:101719005FE075F005A44D90010DF0EEB42405903D +:1017290001DC800A900101E0B425089001DDE09018 +:10173900010EF0E490010FF08061900109740AF044 +:10174900E4A3F07829E6A3F0E4FBEBFF7829E6FDB2 +:101759002FFFE433FED3EF9416EE64809480400F9C +:10176900740C2BF582E43401F58374FFF08013EDDA +:101779002B242AF8E6FF740C2BF582E43401F58357 +:10178900EFF00BEBB409C37829740926F6800C90A5 +:1017990001097401F0E4A3F0A304F090010AE0FE4A +:1017A900900109E0FDED2407FFE43EFE900102F0FF +:1017B900FCA3EFF0FD7B017A0179041221E6900187 +:1017C90024EEF0A3EFF0900124E0FEA3E0FD9001E8 +:1017D90002E0FAA3E02404F58274013AF583EDF0FE +:1017E900EEFF900102E475F00112098BFC740425E7 +:1017F900F0F58274013CF583EFF07F011226B89071 +:101809000101E0FFB4240843BD0253BDFE8016EF79 +:10181900B4250843BD2053BDEF800AEFB421064328 +:10182900BD2253BDEE900103E02402FF900102E0C6 +:101839003400FE7B017A01790412287F900101E0CE +:10184900FFB4240753BDFD43BD0122EFB42507535F +:10185900BDDF43BD1022EFB4210653BDDF43BD11E7 +:01186900225C +:101F54007851E6C4540FFD54036003022069EF1264 +:101F64000ADA1FA90A1FBB0B1FCB0D20360E20480F +:101F74000F205A111F7F3700002069E4FE7855E6D0 +:101F8400FFEEC39F500F74572EF8E6FF74402EF8EF +:101F9400A6070E80E8EDB404069001D202206690F4 +:101FA40001D3022066ED7857B40406E69001D6F01A +:101FB40022E69001D7F022EDB404069001DA022063 +:101FC400669001DB022066ED640478597032E6FE07 +:101FD400547F9001DCF0EEC413131354019001CA32 +:101FE400F008E6784EF6785BE6FE54019001D4F0F2 +:101FF400EEC31354019001DEF008E69001D8F022FC +:10200400E6FE547F9001DDF0EEC4131313540190E7 +:1020140001CBF008E6784FF6785BE6FE54019001B8 +:10202400D5F0EEC31354019001DFF008E69001D916 +:10203400F022ED7857B40406E69001D0F022E69041 +:1020440001D1F022ED7857B40406E69001CCF022D9 +:10205400E69001CDF022EDB404059001CC8003900C +:0520640001CD7401F044 +:012069002254 +:10260D00E4900100F0A3F0A3F0303A4AC23A7856B4 +:10261D00E6FEE42407FFE43EFE18E6FDEF4DFF90D5 +:10262D000101EEF0FCA3EFF0FD7B007A0079501272 +:10263D0021E6AC06AD07900101A3E0FB2452F8E6BC +:10264D00FE74512BF8E6FBEBB5050BEEB5040778E0 +:06265D0052E6FF121F54BB +:012663002254 +:1022AC00022A5DE493A3F8E493A34003F68001F2C1 +:1022BC0008DFF48029E493A3F85407240CC8C33333 +:1022CC00C4540F4420C8834004F456800146F6DF02 +:1022DC00E4800B0102040810204080902817E47E53 +:1022EC00019360BCA3FF543F30E509541FFEE493F7 +:1022FC00A360010ECF54C025E060A840B8E493A3BE +:10230C00FAE493A3F8E493A3C8C582C8CAC583CAE8 +:10231C00F0A3C8C582C8CAC583CADFE9DEE780BEA0 +:01284B00008C +:1007B200E709F608DFFA8046E709F208DFFA803E29 +:1007C20088828C83E709F0A3DFFA8032E309F60816 +:1007D200DFFA8078E309F208DFFA807088828C837E +:1007E200E309F0A3DFFA806489828A83E0A3F60832 +:1007F200DFFA805889828A83E0A3F208DFFA804C0C +:1008020080D280FA80C680D4806980F280338010E2 +:1008120080A680EA809A80A880DA80E280CA80334B +:1008220089828A83ECFAE493A3C8C582C8CCC583C3 +:10083200CCF0A3C8C582C8CCC583CCDFE9DEE78093 +:100842000D89828A83E493A3F608DFF9ECFAA9F012 +:10085200EDFB2289828A83ECFAE0A3C8C582C8CC68 +:10086200C583CCF0A3C8C582C8CCC583CCDFEADE81 +:10087200E880DB89828A83E493A3F208DFF980CCE3 +:1008820088F0EF60010E4E60C388F0ED2402B404DC +:100892000050B9F582EB2402B4040050AF23234583 +:0608A2008223900802739E +:1008A800BB010689828A83E0225002E722BBFE024E +:0908B800E32289828A83E4932281 +:1008C100BB010CE58229F582E5833AF583E02250EC +:1008D10006E92582F8E622BBFE06E92582F8E22236 +:0D08E100E58229F582E5833AF583E4932250 +:1008EE00BB010FF8E58229F582E5833AF583E0280E +:1008FE00F0225009C58229F8E58226F622BBFE09B0 +:10090E00C58229F8E22582F222F8EA2583F583E9E9 +:03091E00932822F9 +:10092100F8BB010DE58229F582E5833AF583E8F00C +:10093100225006E92582C8F622BBFE05E92582C8B8 +:02094100F222A0 +:10094300EF8DF0A4A8F0CF8CF0A428CE8DF0A42EC8 +:02095300FE2282 +:10095500C2D5EC30E709B2D5E4C39DFDE49CFCEEBD +:1009650030E715B2D5E4C39FFFE49EFE120B2DC3FD +:10097500E49DFDE49CFC8003120B2D30D507C3E4F8 +:060985009FFFE49EFE222C +:10098B00C5F0F8A3E028F0C5F0F8E58215827002F7 +:06099B001583E038F02294 +:1009A100A3F8E0C5F025F0F0E58215827002158309 +:0609B100E0C838F0E82266 +:1009B700BB0110E58229F582E5833AF583E0F5F07E +:1009C700A3E0225009E92582F886F008E622BBFE5B +:1009D7000AE92582F8E2F5F008E222E5832AF583A1 +:0809E700E993F5F0A3E9932266 +:1009EF00BB010A89828A83F0E5F0A3F0225006F753 +:0F09FF0009A7F01922BBFE06F3E5F009F3192250 +:100A0E00F8BB0111E58229F582E5833AF583E8F01A +:100A1E00E5F0A3F0225009E92582C8F608A6F022D7 +:0D0A2E00BBFE09E92582C8F2E5F008F222BE +:100A3B00E88FF0A4CC8BF0A42CFCE98EF0A42CFC5A +:100A4B008AF0EDA42CFCEA8EF0A4CDA8F08BF0A4D8 +:100A5B002DCC3825F0FDE98FF0A42CCD35F0FCEB37 +:100A6B008EF0A4FEA9F0EB8FF0A4CFC5F02ECD39FC +:0F0A7B00FEE43CFCEAA42DCE35F0FDE43CFC2269 +:10279E00C2D5E830E70FB2D5E4C39BFBE49AFAE466 +:1027AE0099F9E498F8EC30E717B2D51227D4120B4A +:1027BE00BEE4C39BFBE49AFAE499F9E498F880032B +:1027CE00120BBE30D50DE4C39FFFE49EFEE49DFDCB +:0427DE00E49CFC2259 +:100A8A00E8600FECC313FCED13FDEE13FEEF13FF4A +:030A9A00D8F1226E +:100A9D00E86010ECA2E713FCED13FDEE13FEEF136F +:040AAD00FFD8F0225C +:090AB100E0FBA3E0FAA3E0F92246 +:100ABA00F8E0FBA3A3E0F925F0F0E58215827002C5 +:070ACA001583E0FA38F02269 +:090AD100EBF0A3EAF0A3E9F02226 +:100ADA00D083D082F8E4937012740193700DA3A3AB +:100AEA0093F8740193F5828883E4737402936860BF +:060AFA00EFA3A3A380DFBF +:100B0000EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02D82 +:100B1000FDE43CFCE8A42EC8C5F03DFDE43CFCEF40 +:0D0B2000A4FFE5F028FEE43DFDE43CFC22CE +:100B2D00BC000BBE0029EF8DF084FFADF022E4CCAC +:100B3D00F875F008EF2FFFEE33FEEC33FCEE9DEC75 +:100B4D00984005FCEE9DFE0FD5F0E9E4CEFD22EDBB +:100B5D00F8F5F0EE8420D21CFEADF075F008EF2F05 +:100B6D00FFED33FD4007985006D5F0F222C398FDF6 +:050B7D000FD5F0EA2293 +:100B820075F008758200EF2FFFEE33FECD33CDCC2A +:100B920033CCC58233C5829BED9AEC99E5829840AD +:100BA2000CF582EE9BFEED9AFDEC99FC0FD5F0D68A +:100BB200E4CEFBE4CDFAE4CCF9A88222B800C1B9B4 +:100BC2000059BA002DEC8BF084CFCECDFCE5F0CBF2 +:100BD200F97818EF2FFFEE33FEED33FDEC33FCEB2B +:100BE20033FB10D703994004EB99FB0FD8E5E4F9E6 +:100BF200FA227818EF2FFFEE33FEED33FDEC33FCD3 +:100C0200C933C910D7059BE99A4007EC9BFCE99AC6 +:100C1200F90FD8E0E4C9FAE4CCFB2275F010EF2F0B +:100C2200FFEE33FEED33FDCC33CCC833C810D7070B +:100C32009BEC9AE899400AED9BFDEC9AFCE899F846 +:0E0C42000FD5F0DAE4CDFBE4CCFAE4C8F922D9 +:00000001FF diff --git a/Out/8837_EVB_250214_1117_5C91_010102.bin b/Out/8837_EVB_250214_1117_5C91_010102.bin new file mode 100644 index 0000000000000000000000000000000000000000..27a2031cb6810aa4435ad6e6591cb7af5f171785 GIT binary patch literal 12290 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 literal 0 HcmV?d00001 diff --git a/Project/SY8837_Demo.uvgui.GH b/Project/SY8837_Demo.uvgui.GH index 6452b0e..81369ff 100644 --- a/Project/SY8837_Demo.uvgui.GH +++ b/Project/SY8837_Demo.uvgui.GH @@ -6,7 +6,7 @@
### uVision Project, (C) Keil Software
- E:\todaywork\20241202_tp3410\SY8837_Demo\UsrSrc\display + E:\todaywork\20241202_tp3410\SY8837_Demo\UsrSrc\comm @@ -93,8 +93,8 @@ 2 3 - -32000 - -32000 + -1 + -1 -1 @@ -110,8 +110,8 @@ 0 - 1585 - 010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000001000000100000000F0000000100000036453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF40453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C766F785C766F785F6D6F64756C652E63000000000C766F785F6D6F64756C652E6300000000FFDC7800FFFFFFFF4C453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6469736368617267655C6469736368617267655F6D6F64756C652E6300000000126469736368617267655F6D6F64756C652E6300000000BECEA100FFFFFFFF41453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C757365726170705C757365726170702E630000000009757365726170702E6300000000F0A0A100FFFFFFFF40453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5372635C737461727475705C535441525455502E413531000000000B535441525455502E41353100000000BCA8E100FFFFFFFF3B453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C557372496E635C757365725C757365722E680000000006757365722E68000000009CC1B600FFFFFFFF39453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6B65795C6B65792E6300000000056B65792E6300000000F7B88600FFFFFFFF3C453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C557372496E635C696E635C636F6E6669672E680000000008636F6E6669672E6800000000D9ADC200FFFFFFFF48453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C557372496E635C636861726765725C636861726765725F6D6F64756C652E680000000010636861726765725F6D6F64756C652E6800000000A5C2D700FFFFFFFF40453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C557372496E635C766F785C766F785F6D6F64756C652E68000000000C766F785F6D6F64756C652E6800000000B3A6BE00FFFFFFFF39453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6164635C6164632E6300000000056164632E6300000000EAD6A300FFFFFFFF39453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6C65645C6C65642E6300000000056C65642E6300000000F6FA7D00FFFFFFFF3B453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C68616C6C5C68616C6C2E63000000000668616C6C2E6300000000B5E99D00FFFFFFFF3B453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C756172745C756172742E630000000006756172742E63000000005FC3CF00FFFFFFFF39453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C557372496E635C6164635C6164632E6800000000056164632E6800000000C1838300FFFFFFFF3F453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C73797374656D5C73797374656D2E63000000000873797374656D2E6300000000CACAD500FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F40000006600000080070000C3020000 + 1767 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000012000000030000000100000036453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF40453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C766F785C766F785F6D6F64756C652E63000000000C766F785F6D6F64756C652E6300000000FFDC7800FFFFFFFF4C453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6469736368617267655C6469736368617267655F6D6F64756C652E6300000000126469736368617267655F6D6F64756C652E6300000000BECEA100FFFFFFFF41453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C757365726170705C757365726170702E630000000009757365726170702E6300000000F0A0A100FFFFFFFF40453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5372635C737461727475705C535441525455502E413531000000000B535441525455502E41353100000000BCA8E100FFFFFFFF3B453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C557372496E635C757365725C757365722E680000000006757365722E68000000009CC1B600FFFFFFFF39453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6B65795C6B65792E6300000000056B65792E6300000000F7B88600FFFFFFFF3C453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C557372496E635C696E635C636F6E6669672E680000000008636F6E6669672E6800000000D9ADC200FFFFFFFF48453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C557372496E635C636861726765725C636861726765725F6D6F64756C652E680000000010636861726765725F6D6F64756C652E6800000000A5C2D700FFFFFFFF40453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C557372496E635C766F785C766F785F6D6F64756C652E68000000000C766F785F6D6F64756C652E6800000000B3A6BE00FFFFFFFF39453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6164635C6164632E6300000000056164632E6300000000EAD6A300FFFFFFFF39453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6C65645C6C65642E6300000000056C65642E6300000000F6FA7D00FFFFFFFF3B453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C68616C6C5C68616C6C2E63000000000668616C6C2E6300000000B5E99D00FFFFFFFF3B453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C756172745C756172742E630000000006756172742E63000000005FC3CF00FFFFFFFF39453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C557372496E635C6164635C6164632E6800000000056164632E6800000000C1838300FFFFFFFF3F453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C73797374656D5C73797374656D2E63000000000873797374656D2E6300000000CACAD500FFFFFFFF3F453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C557372496E635C636F6D6D5C766F785F636F6D6D2E68000000000A766F785F636F6D6D2E6800000000C5D4F200FFFFFFFF3F453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C636F6D6D5C766F785F636F6D6D2E63000000000A766F785F636F6D6D2E6300000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F40000006600000080070000C3020000 @@ -1838,7 +1838,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3603,7 +3603,7 @@ 0 100 - 15 + 3 ..\UsrSrc\main.c 0 @@ -3633,9 +3633,9 @@ ..\UsrSrc\userapp\userapp.c - 4 - 121 - 140 + 24 + 109 + 127 1 0 @@ -3661,8 +3661,8 @@ ..\UsrSrc\key\key.c 24 - 246 - 278 + 247 + 279 1 0 @@ -3688,8 +3688,8 @@ ..\UsrInc\vox\vox_module.h 0 - 461 - 491 + 1 + 1 1 0 @@ -3741,9 +3741,27 @@ ..\UsrSrc\system\system.c - 16 + 37 140 - 158 + 159 + 1 + + 0 + + + ..\UsrInc\comm\vox_comm.h + 8 + 122 + 139 + 1 + + 0 + + + ..\UsrSrc\comm\vox_comm.c + 0 + 428 + 429 1 0 diff --git a/Project/SY8837_Demo.uvopt b/Project/SY8837_Demo.uvopt index 0cec4d0..3bdeaca 100644 --- a/Project/SY8837_Demo.uvopt +++ b/Project/SY8837_Demo.uvopt @@ -404,6 +404,18 @@ 0 0 + + 2 + 20 + 1 + 0 + 0 + 0 + ..\UsrSrc\comm\vox_comm.c + vox_comm.c + 0 + 0 + diff --git a/Project/SY8837_Demo.uvproj b/Project/SY8837_Demo.uvproj index 1ef9222..2dc1d48 100644 --- a/Project/SY8837_Demo.uvproj +++ b/Project/SY8837_Demo.uvproj @@ -324,7 +324,7 @@ - ..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer;..\UsrInc\pmu;..\UsrInc\user;..\UsrInc\display + ..\UsrInc\adc;..\UsrInc\charger;..\UsrInc\discharge;..\UsrInc\gpio;..\UsrInc\hall;..\UsrInc\i2c_simu;..\UsrInc\inc;..\UsrInc\key;..\UsrInc\led;..\UsrInc\mtp;..\UsrInc\pwm;..\UsrInc\sleep;..\UsrInc\system;..\UsrInc\uart;..\UsrInc\userapp;..\UsrInc\vox;..\UsrInc\vox_comm;..\UsrInc\watchdog;..\UsrInc\bat;..\UsrInc\timer;..\UsrInc\pmu;..\UsrInc\user;..\UsrInc\display;..\UsrInc\comm @@ -476,6 +476,11 @@ 1 ..\UsrSrc\display\display_ui.c + + vox_comm.c + 1 + ..\UsrSrc\comm\vox_comm.c + diff --git a/SY8837_Demo.si4project/SY8837_Demo.SearchResults b/SY8837_Demo.si4project/SY8837_Demo.SearchResults index 6f22cdc..e4d1a29 100644 --- a/SY8837_Demo.si4project/SY8837_Demo.SearchResults +++ b/SY8837_Demo.si4project/SY8837_Demo.SearchResults @@ -1,20 +1,4 @@ ----- gCharge_Cfg Matches (23 in 1 files) ---- -charger_module.c (UsrSrc\charger) line 51 : s_gCharger_Cfg gCharge_Cfg; -Charger_Init in charger_module.c (UsrSrc\charger) : gCharge_Cfg.nTrickle_Cur = TRICKLE_CUR_SET; -Charger_Init in charger_module.c (UsrSrc\charger) : gCharge_Cfg.nIterm_Cur = ITERM_CUR_SET; -Charger_Init in charger_module.c (UsrSrc\charger) : gCharge_Cfg.nConstant_Cur = gConstant_Cur_Max_Setting; -Charger_Init in charger_module.c (UsrSrc\charger) : gCharge_Cfg.nVFloat = VFLOAT_SET; -Charger_Init in charger_module.c (UsrSrc\charger) : REG_CHG1 = gCharge_Cfg.nTrickle_Cur | gCharge_Cfg.nIterm_Cur | gCharge_Cfg.nConstant_Cur ; //璁剧疆Charger鐨勬稉娴佸厖鐢电數娴併佹埅姝㈠厖鐢电數娴併佹亽娴丆C銆 -Charger_Init in charger_module.c (UsrSrc\charger) : REG_CHG2 = gCharge_Cfg.nVFloat; -PMU_NTC_Handle in charger_module.c (UsrSrc\charger) : gCharge_Cfg.nConstant_Cur = gConstant_Cur_Max_Setting / 2; -PMU_NTC_Handle in charger_module.c (UsrSrc\charger) : gCharge_Cfg.nConstant_Cur = gConstant_Cur_Max_Setting; -PMU_NTC_Handle in charger_module.c (UsrSrc\charger) : gCharge_Cfg.nConstant_Cur = gConstant_Cur_Max_Setting; -PMU_NTC_Handle in charger_module.c (UsrSrc\charger) : gCharge_Cfg.nConstant_Cur = gConstant_Cur_Max_Setting / 2; -PMU_NTC_Handle in charger_module.c (UsrSrc\charger) : gCharge_Cfg.nVFloat = VFLOAT_SET; -PMU_NTC_Handle in charger_module.c (UsrSrc\charger) : gCharge_Cfg.nVFloat = VFLOAT_JEITA_HOT; -PMU_NTC_Handle in charger_module.c (UsrSrc\charger) : gCharge_Cfg.nVFloat = VFLOAT_JEITA_HOT; -PMU_NTC_Handle in charger_module.c (UsrSrc\charger) : gCharge_Cfg.nVFloat = VFLOAT_SET; -PMU_NTC_Handle in charger_module.c (UsrSrc\charger) : REG_CHG2 = gCharge_Cfg.nVFloat; -Charger_Handler in charger_module.c (UsrSrc\charger) : if( gCharge_Cfg.nVFloat == CHG_VFLOAT_4_200V ) -Charger_Handler in charger_module.c (UsrSrc\charger) : REG_CHG1 = gCharge_Cfg.nTrickle_Cur | gCharge_Cfg.nIterm_Cur | gCharge_Cfg.nConstant_Cur ; //璁剧疆Charger鐨勬稉娴佸厖鐢电數娴併佹埅姝㈠厖鐢电數娴併佹亽娴丆C銆 -Charger_Handler in charger_module.c (UsrSrc\charger) : REG_CHG2 = gCharge_Cfg.nVFloat; //璁剧疆CV鐢靛帇闃堝笺 +---- MAX_PACKET_SIZE Matches (3 in 1 files) ---- +vox_comm.c (UsrSrc\comm) line 31 : #define MAX_PACKET_SIZE 0x20 +HandleTxCommand in vox_comm.c (UsrSrc\comm) : tx_pData[3] = MAX_PACKET_SIZE; +HandleTxCommand in vox_comm.c (UsrSrc\comm) : tx_pData[7] = MAX_PACKET_SIZE; //max_packet_size:0x20 diff --git a/SY8837_Demo.si4project/SY8837_Demo.sip_sym b/SY8837_Demo.si4project/SY8837_Demo.sip_sym index b6941c7040a85aed3ec54bdeca4bb8e01469d7ec..a65b76fa37882d39fd61a6d2d7b23a752eab55a9 100644 GIT binary patch delta 16087 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 D^ylQQ delta 11583 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 cJ5=$ROrDv%1K0;xbMFs}kX0XJ=y>;M1& delta 13596 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 diff --git a/SY8837_Demo.si4project/SY8837_Demo.sip_xad b/SY8837_Demo.si4project/SY8837_Demo.sip_xad index bb4f34432e1327902299be25265aed054a6dfb3d..8981593e29d9e615aeda6e409e3823b9b52fca76 100644 GIT binary patch literal 1488 zcmc(fKZp}S6vp2kNzl_Ga&q{uNNKq#0v1abIT=n^#%>(KrhSv0m~@_wGhIA zg&xR)f;P&57J3#2K^qa$SZH;HV0(y_Hh$lm)j7rf9^}p2_kQ_i=FRMG92Mz^hJy4z3l=~<)pei zSZ4f&ZU@{B18d(z3XGs9wZUMO@h7?xxDo?vbqt53tz6jet}wer7k~>GSi@0P7-5kn z?CZ30orwrs#K783&(3>_TnncUyG567dXl=WEP8T)X|6Av56g`2)5Xw>8CZL^XCL+1 zwl?M!OC{))oZfGaO>DHPH6pL+4D<{GYcD*}KVd&|_DWa#vcb|2+|V-gwnvR*A#dpdaDn5NpmtDZ zg!gozyP|p@$t9RKVPNe`wqL#OZcXY;>r|J*+ODy+5hQnlKDrEDcWAWpgcXv+%HClgx~-G literal 1408 zcmc(dv1?ON6vodpc}0Rk6hVg$862cjI&@F_($-*UA59I8$q-4QCc$ z^dC~{;Oca&y-c02T&YG}eMBid#z4`|PB<1lJwG|cWzA=h&v0h#bs+i^&M7l14XyW( zp#)q)$J*P_*2_97?YkYWKBe@*_32pK_4&-LX0yxH=afBgdvvS~9EW<%+;n-Ct6wMs za05ElUif;={J6GKelj!!H*^p_Eytk_6WeQ(?+oYB7d}vD*Ft+AqnIx?SJ$}wl~M#( z^xQ=7zh0@XHI(~JE(RBS?!CP-$s%-nxvks^xh}Y_=RSw_U9o?)g*g&(Kr!Hq=Z-^7 zMKQI`ItlqeNx&tZ<74@YDL8%WdA#-h?niy=QbM4P(L<0okjE%u9AeUeeuoGK_84UM&I?B_=iF?CO+_>FaCknS=#H(e0iwS1Y+VQ`|z3X zcV>ROb35O;$uG#{0-0N&!J@5M+RAmPC&!j#9vx#Em2|;6FaiF?(l*KCeFQwOvcU|> zk8L<=h39IMD|c)*R%ejk?JyB{j5>{leeote#$S#%(BOj9{qR6H`xy8W;7@@+1HK46 zrdP|4#!ngwhf7<|lO-#hX_zK|*xcFLXz`JzteN`S(mE@T-BUQ3J#STCTf`>iUp5~# zQ`-&AtoTNmS84{{Y4D-eMiOS*lH!i>a$8yFvGzHeSYiZck@Wp(Yg&u;;f+Buh2l$p z33jwbJ!*(}Gu3J@F1`YoK-k*{pXbi*B=7T z0S^N|v>pz`6RvB3b@mUUS9}Kx2(;T#Ko>00h+X+O!e3sk4?01968KwEv1>QVeG2sN zKz|za??FGL>Vf|Q7!Iojzpz^GasdZGzXbieL0EKal&H#_XY>$EdBh2;;=s$t}tg44gS(u1lLH6Ti9H@`TY{ zBb^hx(nPd#uLfYmSEWM5cfvM;U+mPK;e}JLIYK)tO%QqC0DeSZDwA2 z>$1-0-p-oNZpgvwmYSO)ag|)%Z1dDR(`L{qC9&6gy!11v`n=wLcaL=3@iK0{9e6Kr z8n^>^pUOf0Ug`H1O;8VfAMh672H>s0+ko#^IB@e1C=G7D5x5CB3A`OR1>6k0L*}ry z_?1(ud|t=dPTAr1vlif8G)%m|IA5OAZ{?)&>xtt3CzU&VQZdA)HXCo(gM-r2M&Z35 z7{hk0bj38q^t>r8F&!}tG5yrEbA1fAUU-0;Q%#P4abjF6-!RWGzaX#tyi`CG9Ukxz anZtt<&9|0rm!!XU|0Lb63IBgA-Tnqa{vjLy delta 1815 zcmZY9%TE(Q7y$6yneJAQN4F^Qh?IvQA`)zrBQZQ|FHi!cZhSD5h;lF#sYV_NTZoSk z4H4$z$uxNJW?|5SF$Ot!RD2@w0TMl!81xT7a7S%A^SQU*eBXRCyYuZtS5b5x#aEqH zAyzcy-&5DvMv6ptM@TVn3Gg1^6-`MK>t!plU&wJxN-^u&)}bBh7ZU6JJ`w@G0DRFl zZO^{Jq8T?4im23WcyXq3hWZSTn#IlvfZ0_z9Ao zjb(3YthKxVu~s2sDgw#Sa5eL_35 zHIwEF;P14^^sq@Y?4*4jW41Hqv@&%?PwcAwSR2W~viA!m+Al?j3*_g5d;`SuK-?|I znWtwm#d|;uQ1WBFUDShNS`Xl(2EWz>=_W?sTC=xif$>fnC6cWGi60rGbE% z1-t`zCvXSY@H?fcPqKmz zg~i=+%=`l8enoU_sMl2`wc7x>;~K^dBf4@pan`}`0C^@{65Q)TZTmHe1@fQU`Lumx z&}-*j5t^LOy$XCyHrpCe)xrr-5Skg4Q8X2;M%9>kqg5(8Xy4tVwJKV+Z-cRQ)mjj` zdpOh^-X(N5_b)Bk-P}y*ZtibFcXNA$=H}i4^XKIG?8oJhgDsA)s&sL@lf|#MIE?@P ZerEKPB6f6Y2(kFNBbd5w6(;VZ(ck{|B2WMT diff --git a/SY8837_Demo.si4project/SY8837_Demo.sip_xsd b/SY8837_Demo.si4project/SY8837_Demo.sip_xsd index aaa1c3d59618f234e6ae58b3823d8007e93644d1..7f90381822110672c480555d4ded60d67792a4ca 100644 GIT binary patch literal 768 zcmbOv!oU#1z`(-5$S|Nl0BHXdrU7*V*m6!F3Bnpc`~~Qy1^QxK8JhgUAW0`i1`ZGn z0#=-yAY}}3q%M2)d_$Y5by{{!HjgtEOrKoE&~w? zKy?Zr1_Z2QK$z#|@8bg!1>0)?RA&HH1f*s#GVs87-ma1HAog1j;Q&8Lg9H+Q>Jnfw3=Epg2=|4A2P5pA08}>t zq0W{a;lB7V{|K-QDC8CZ)h$4%10@4c*t0R`%bpRB)}pU{nK%&45q`Ak+&8CBURm-vCmWV9&*n0AfIZ6f*-Gj2#jl91mhQf`|z~brV1g z2vB1~s0;J=0js+Pk}3eID}X8jQdd|RSYf=d{0gwT=^%jyduA?%hRL^>q<8{=o=6aU I0P-6H0Q+quwEzGB diff --git a/SY8837_Demo.si4project/SY8837_Demo.siwork b/SY8837_Demo.si4project/SY8837_Demo.siwork index c182d2e98541e7cba05edbb55acb06f87bac2089..15554474f42a63d9b38a0f7d942ae52608f28a9f 100644 GIT binary patch literal 71480 zcmeHw3w%_?+4sRq6ILwI1&P+u^@1W|+}xG~ylgHTf`lYOh@g>8NESAb%aSY*Y%5W* zUa3)wZ`${5jiyzq-}g0bZL968rrH83{tUiUt%{AGZMA-VHP#ziFW>(^m)!X``T zOX7KczyF!bGxN-xnK@^knKLuz$YjH)FpQ%n1BOka1bnlr!p(Ix8`d|stggy%XJn=0 z;tz*1v(nvFi^&+=bjbI=xV2?oQ*G6{<~G9L z*j%@^A&?dvl{an5^c2`LOm1zxWxBTg>&zGURN~?Erph#3a96?l4Vd=iOX>^=_RjvHqreJL7lf40v*-?;JfedukI z&w=?!dcSnG5oiksTAEyI>zl$k{_yxpG@`kIus`3o$e&kN*Wxc~s9AYg#^tU#8=rO^4HcPVVL60{2;IGh!xqL`+}X(=GwK1nd&9 zOTaDxy9CB~3A}z}^ah1Gpmc(X${T8w;R0qGM;abwuY}nQv?=#Im}NkbLNB!4`HhB= ze1~D2S8f=O++-L{8x7+KHv)htlSK3BI_PeQyzXMdxaKm$m@7Dvmj`=^!kr5Z{2j6=Crgs3Hf{8Zx{=hX%NGt11CWbYz`Sl zalkN+T`KvMKOX+f3-iWs>Na4r$u0rA1nd&9OTaFHu~P!*k_{qR-I8}wzoYZxoes`h zEC$-nUzKz&=6z_oVHUr>#hI?$8OogvGnBh3X_hi`l$oo{^OSi$Ovb-JnHMV4tIRxQ z=EK}EdsR|_G7FXIQ|4S{&Qs<^%ABvv5@jw>W~nmElv%FKi(hWiD0xOJR17+wHgvCd;WxnU}*1X0J+GrcA#wtCd-!%;n0gRc4(s1Ik>X z%z9<6Qs!!9HYl@EnN7-UR%S?y_E2%ni!CLYZGz z<~Nmjr7|}vvt5~2Df4QWO#d2XZi1OQWw+y6<^Gm3uY=h$u*G@3a^IlL8)34XZ&K#X z%G|8XZ^NW~moiU*$#!|FGEY54y1nP({fGnIR~GS7lJ@Ru#l8Ol5xCgsgkW*SVJ zhF${I2-=S^2(~0>f|~v8il3?A>0><+hGD`2Oj94wwDV7k!R? zKgIHe@h+HMwYW9V(pojQxGFCcD#X-yRY`MgO+!^hpfOZcQMAODRalr7Zp0XGEK>aY z&&(-EAG`NI7VFf$r=gd?(FjUR08UoXT>r7l(KhF4p}W$HAL+J!w9}#3!eGC0D(1bu z0+afhnaJDA3y3;~ndtp7E=e${cbJL1BOvo6nAAngL|z(@3{XEY6Z1a_(DPPaMdG0&$1#{(qB7eosa5ad0jDB)6h`GOIi>q+cersAil1YUzA@oc6Fs8-2bduwyrqZo4K9;{geRp z1A_gxR(nE^bUU~H+wptA1PgnbnuRN4uTVPkv5l7VMepfPSRW zd*su?FVfLczlxQiu3vULum3+XL*z5uj+<8}1#erObp4GoV^j@vhF}$R2Cmen24~0% zc}x1GK1IEY84AI#&wZEBr_9}N_N)q>B_<*0SI9f=iT33HqqjfU?d+c>qf;MZoI|G% z4bD+7Qg@+5k*H7xnIq$&ZfChFVapBWL=*^4Fp9c+Vtzgqh=&mFCeMvRf!GXt;Rq`b zi&|=h?jRKiDql8@_7aHSf#%IBa(|H(h&*>;-q^kW(cXUT{2yEi=&s1DK=l1*xAP6v zUsF2!>w%m0RUpn*N%JF@nJCk&Ko}2qJ3CXY3WR|)%FmG_PZ)O;#4{m;CIWi*}&*o97v4Ec*O} zBHAxJW1P_)lCnmsC*)9i(B4XWJdN_VY4nyr{GQO0?a8!z!qHp9cFu=V0vtl>x%eK; z?0PTTW9bPyZnX}jDbodT1WR&Z=6CNqK`|1g`!7J(Zj4S-o^-I!qMs(6PRDcI&JZ9v zH!vB_h3WNnOtbggU`39 z>={?kP%LE#N$A9?A-L=D7sbbg?db1`F8I0szAEA60arr)bwCI3UEprue&7M%VPG5Z z4DbT*D)1)oF7OF(G)nc$z!bm*oCRb6bAUo%0Z<9}fgrF3xB|EaxEa_2`~bKY=m8!A z9s`~Nb_08WzXERqT#GUe_v-+hz{$WgAPtxWc!7DqLf|r>4rm0{0ULqqfm?y^0o}m= z0)7EJ0t}@t>@ciwK#*-gF&u7%P>npjg67Qi>Y1=F_@mU>A3fhN{?`5ZQ~VV6@@zbA zhd^hq4c4@*475}!Q=f}s>+Yxrn?_#=3`u9tvUT>+SF?7Ghf@ORP9i#c`(546l(#!A zx^$mfrecrld4B|*`Q87r=V66#_H{K}IyI~hiUZ0|kY&VjGU6~U*&{TrYQVN+-ByUKPb zef(6!Cv;xAAm7{leR0oJkDmd0AiwxNsk#py6L8EBZx!#ss_8?yk1tM`J; z95iOs4Xj(w?|c^>XBa=;{I{AXVgDYs8Son^M^=CP6qo&wdCj+Farb`0k2P<3&n~s1 zeXQMG{QHToDHNnVN_GwV!*JlbRIw zLQ#X_9w_dADh8-c@m>?!HAgi_s6xD8yODH>30C?fYaj99lQqlKHFOK;|2A^{%!^`v zn>sYZRYQO6#Hy@*wK9uehFKD3Vy=IL`5E#UPm?Z9%_CnE!?6%GPnR6|3^&8X6E{W% zh~c#O;#-VmLRTd7?zf05Mz!pn0N@$N(`Mza?uPYg!Y-%>pz} zuQVf{;c`tpC}t62xH*81$EQ#e!(9Mq9u{szh~d0|=1q)nLMFnJ7jk%_0DVAeUqu}$0#O_X&>ZIwhG!<_+W-U+ai$YVIR z3C-i#3ncOwj%`Bo)G@n)$8c;Dn#WaeB*tSnwh7JS_=`jy!?8_h9-m4Qc?`!kp?Ufl zA&=qMCN%G>u#?DRI6ldm$1xU(Jci2wH1BJ$lgMMZ*?{J`U?-8saOVM~Gh zi{_mQJBd7o^8%W88tf$U7>?~l^H^Ub@)(ZoMf0Y?PC5c$IKBllu^oYR%eo}d&TuU2 zEX6w$cG6J*!&L+4D<12aL>|Mf05tC`*hzez8LkAlK*eJlAd$y#m4N0kU!*Sq49Cwe zJfnkoWBVYH$8g*Vta*G7lE`B?ZUrWf{^bDkNb=(S*tt`Vhxs{X69kvTZ~EV!aFEaE zjP=NPtgrb1-~RPL8*m+P2k;}{0pM}qS>RP*0N}?!j=jGM%mnyJ>LOq%z)w-@fo}o) z1ocDU=Kw!F?E?A%escN@I2L*1r>3)k*#JK=Edf>n{Iql}@Ezb7q({Qa*zBAvv9lGi zrPCvv2qc|y8!QWwfpg_HSeA=$W{AM765*7hSen8qMe!vooKjS>bb8!U6kny_dfZYJ zi&HqIC}vbRrKkzoDMj(MNN&0m#W$vKN>Qv7;gq8Iz7tLqDnnpP18;(>I~)dNKt%< znXX5Q;&UsUQWPIm;gq8IbPA^w#Rrm3wY{3ppm1g^VyhwaBUp{ct#|Qlq9@{)RzBk1 zj&5i0tr`Xsue41tcK{Q>D+j&<@D<5OxkKI-k2CYRuB)a_Agz`X*jk1qfv4_k2|+Jn zBP+(7;pQQ_&$~7u8O%jghR6pW>|y6)ZB0wKikCEzk73JTKB6*$KIDOK6z_1#gE9uK zwF~lnOXx<@fd;W;+8(|{#AkE9r>k$pqWbs7ze4;fEo*UFMR}~EJXTR2t0;AViE2n5k5v>7FsTOXTX-Sx_(8tDFZEr0#_up89k|di zUYq2(miAPPhbBXfqnRAoX$$m%(W+{ zM}0%LZy;s~aA-)d^WxBl)Q3;eTQ9U8gOM6z7wc72ut7Zf*G%*#kHat?18gSEC zWVaap%YYty#_xOQzr-y?NKBoV?S)A5JCd0jfO}^8y z$=5I~hhQ9iKmCZ)zcspqnIrdhxQkPt7gN&aup#*OLCvRZ&K-0C?LWp&=YaI1jvlqV4(hi!;NmPWi9aPV6L~WL_G|o6iJ6#|xxec`TEWS(zvHJ__IEu$z=qn~ z)k$*HB^Lq+863G$xEN~+A6(2i@8R;MA6t9e;^S5&1&?2qlrtgP^O|$ei#QMdQ!eD9 zOy2ltjS=>#zQ z_iS-;;mU7*dd@>U-pPfb{;r(x{j|IBE&1c{$c{<*A+&WvYdFxTjI>&$Zj)UCqqhX& z_wDJv^jUV_K6-1|&iR2#K#msWwHg80uPk|ci}OsF?xPwEju}5W6<>6{zY=4{XJP+n zg!>hKy|wl$_7o?I-=c8((_A7<>uJzC>o3{qP@zS{SVE=H0`xVZEHP+NO+0$RcsX06B;ambk z=vT65*$2HI&Q)mV?I21ZR=<*(vnq)zMSaG-;sEjGr{HIvuiY}92Z-O`GK>!nLBG-v zsH+0(uH_)=(vEugltBD`1qX=RMZ?jif0 z-sN~9)!IXr|G#L@sHK^ENN?XR$6mwQL-sufIe&ag95>IAWHlo4xHs2Vb~||B*9~u- zyOaIaoMh~K{@~8nXg>k=U!vdQD*BNeK`yTeR{{1266HD;DE@o9sK7UdM^Hn!e|O;+ zK3`@mv|;-m4!#7~Pw3sqUC-`vq`WuiHz{w&>9=<6a-=3(`z-@6!b-e#A+AHo6Dv`w-mw%r3|Ei@Nz!J<;Fk5o90y%hf=T zJI1Tr*7sH<^_8}Mj3!_pfohPiE4)Bx}55SXF zih+pWk+M`n=$TldAIx5rbS~_hK9?K6)}Mk*-}{|&`Ioc}Uz4XekK_ch{>C)6!^0>gCLt%dmp7yHN78Q~4W+;124Bkw|TONbQljcdaF?ie@O{$B*%aAN1 z5QE24{Yfig@YunV>SOS7B+FP8gU3_-NvmV<&XX*oAqI~JPLmpA@VtU!7)>#F`HI&Z zgQx2+6oaSZtr^5)Tj9}oS~==?beH47wL7Sxi61ZD4YRM89}~J`{@bJ${I$S!z;}TT z;7Wkg@H`#A7+~2lZ%m71(VN&vgb$THVPP{97Lg|g77=*isq?}WnfFiDK4MQi!-%ZY z!qfCbV5nBoa;&!S6nVkoDRjcZljDVjr+|w?2Ixa@$G?7(LimI-aH%}_jv1#S+>a-z z`lFqWoR8%b#a#1lNz5Hv0mJgoZRGJuB9V7K!28y`>9CW?V+&zXXr6wO$fGJsS(>Mx zB=WofZ(sBDlSEz~z%tZ4H|!+x@&OjB=IJMiyaIrx=IJMieuV%FU-R^nL|!q#Lf1U~ zB#}1{U_EG_ev-($2w>G{o_>A9tWNU zUIj!Gg((jEmS;4xshH0GX6q16dE7G_gmB6;n%M^ERA+y)+J#e!VoeLDJnos5E1Xgk z?^`&fC{`hy`Z#YsMZzh$%qX4eIBz~t!YLDC6$__Kh_x!5G9ea_aOPGp5rX+94WMj0 z|00KC_rd)R(1)@O&T0}*IK#5e4)suM8PZ_AFCFq>_2z#pw$^8bTAEh{YQt4#Z_BS2 z%OIW5cixUW-|?vY+sK)y)q0>Eci#Kn9g!nO4s_=nxU!Yi0u2D)!B+xoZ5;sL#dibu z18j8<1KWUSfENI^zBhq)flq*=(eC(nk|}@-I19)C_?MDGU;$7G_yPW{WDRfya1C%X zz`vIK0JsU$*zY^MVx zmLA8tEG<2az*b5kk7@9~ftsfanmmqznYQM!m6FKglfyp>Y93oDi9Akcqyn19R!Sm| z14R6=Ai`rSC6UKbz$5u)rkNM}2TJv-(C68(0TVsUBnk13Ov|NCW$5u)rk7=C( zXdYWBi9DutDxi66r6lrL7pDQ5$5u)r@2ddIp1i@W)cY#F;ub$C-YCx^45wvWuVGMq zbmG%8rU8OS{cViRf|D2OZ(|r?N~fIZz+hB5IY)HP2rRY>FF5t12JmwFF5!K#Woe=8RO1QtJ%JWz%=T zEhb#x7n~M=Q^C`{@MgZ}vFSzC*aXlG`!DcPA&u0~ma8ek^^G_qABP_LVY9aZi1M{BqqhX& z4{bBkv&QghlF?gpcFsq#1gPifK|}jCEZ!fq9j^-u90#XI53PyxY{%BRqpXW5+u@h` zC+jAFUT6qjW4D6?g^&Ax+x95>twM|j{(NnR*hbzz!!TB%-$Jkv?YHzc^4h^SVY^3V z3B-SI`?B0)_`Mzf{&TYn>{WoHvTfU$9(oC|pV0kQ=$2iMzMFQ4pKVeCC%dM)4i*bPJ?~cnewQzsq-<1^39vO_<8nhAI7tx zksrhA4S}{UfP%Ma)R#bfT>wXwjo}TEqrL*|8yJxiFzW)w^nOQh(QV?077C{>&^a;s zlQf+mKP>1mZ2Qc9hwI;)`Po7cKW+`cFZJ_3h>h&Z+wxPk-p}x9;eT6y%GQCSYaYaL zGVSj~bpi9|#}vdFSR+3_QYJs_bo?4U^YNRV%!>wj{qXOa@;p0s@u8>-rt3eU=Tz?7 ziw~u5PDgw~-*f-(@hNoG9wDDA8s|aLaXkrLW7AW@kG*d^ErHqv`%=zHA8xBOhf*eX z7*yQhRtN+0o^|j82eKyUO7qa!P*R1hye2S0qQ{4 zqb@IQ{2FihOoK^y z$65S(w7mKtkN7#tt1w1+O-BV0)GY{-IllD4sy9`UiI!K-XZJXhCq~~B`ztTq?$1TS z1RhlZ=EEGHZqjMeNVvTEkKN+p0#Gl8` zw_kSf7!k@R?e9II+gCoq5F|dttS)nW`jhkno@hO~ZoAjXy(UtcY+JF~m(JG(2uP5$ zUTBUlIdan_?TO|q^wLev)G5(?y$M;wU_Dyr%d8i2r6O5Yrxc`_6A zR*pN2cC&AMd$RKhN9VX`J;ob%D_1ek!84u6cxbTP!zEvT$9?gc zW;>;wV?1upB)zCiZrdb1u1rpVkhUt5%PC3R7E0n0OOjWaZOS}bnbhw{la)C^ng5jD z##_qd^GE6zS8SVIGQPek9B64-8ww{Elr31`FDNTLazmhX!s5Jz6>h(;G%vrzmr_}_ z#6PdBsK{Tic%grhuOc}bYY2fW%NF_zit|d7E6YlRWdh|b$Xg;Dlk#iA{=C8hf7yx^ zt%0!L*V5A5GP$z3#Xqk#(9|06&&7Ykr0+2+{gpKhYXkngx>|&2*f+!!Q#`Xg_(wvU z{Zj@fJRYBD{0)J1frgZ3nV*Qq(e-sT;hJMs76fZrRtEe9D^?!eMjwt-3BDUhq2v1< zZ8rzS%J)3f!w=BD-+}*Lv;*RL^dPAiQ>}#Gcff0m!82TVKJZ3QMf^5|XT0QzGF}n< z8WHasG2*3wHwp0`18;D=Z-BQNJXZ{v?<4$F@a~Thk8Q94>2<_N4_&f&#;3z1a9e`9 zPzJ@5ABRNb=NO3|_zm39oOBfQ9!^328i7ARr_8>J)PnJe2YwI0{1wu?8HIWg(1I}6 zfxiNN55PVX{EaA+HiWH42KK^zHRSye_BSE>ZXgf&{RrW&h52{*p9lVnu%ChWr@)_E zos%JZ0mAZscaH-c`~MMsbC?;BXUH4Y7q_-Ve{feQV;dI^Cp!PJ9IwGDx^+678b@o)vziiX}&rOb%HJSFhF;Rxg%)&q5c74=Plv|vKHqLBUM zDyUVO+~MTPa!gx7HAe~7Ke5+(Rr$;rZcf(Lw1lg8NvpkB$tW4FjJo<(SwdA2TcqL= z&RDRfp`nVGwAzG=IkFBepJdOE$8qAfdZq10H-gwF$j^csGMyKEZ_AF$G0hZ`7vSabmSkq1FdAu{vXU>0e~m z=BxH|{&3olcx9M>X^?QuM}B>m&@-iLUQ~ZtVy`WhDqD|~5!CbNvxi$A^P1|zl{GD` z2a}D++cS7jJydOT(~A0)2k}Jf=P|MN#S+!^8l0!vSK)BVQ$0SRhMEn0cxd|9)~6*V zjEzJI(I$n}7OR{U3@2w4w!S7@8?0+y8L=eTr|>RypOSb<>nAyw(38wO)B`Pnm6@68 z*=YwYB_}7d?I5I>f0PnTsD^k)`_@nps&j;(b_?o-KHmpK7_jtBf_rkm1M0Q-*uNa6 z4)2Elj)mJr_#N=9gwE|k_#Hoe%E7U~JwPY05oiP|fGl7QWPAXDF94I^z6a(OU=y$! zs01}zfJcBXpb@wl;5=g{z+;j$M2CSWS2GhiyCTHMv7&AV1vKB zCD7XHZw)rLg#Gm`Yfg}f8^`%-T0+6*CXA|sD@80ln4S_N7RKjw$ElbT$}d^qXXoKx z6bMI3xu~q9r0fz*FUst%t7(Tzbxi#!BXlQN?M7aB8g~>&3 ztT?ZvM9qpEtFn+>iNRLIhEO05R+2Yay-+n?sh7NIxl5w(+lR5rHR4)7lO=17SKx-J?q9{_%sghC( z1GQj@K!pKx4w2Z*fvM<9%PzruPeJi~W;0R(tdQcGrn-hei=MguGE1PSxuKzXJu5Kk z4S9Km6{@@jH%+AWWtk%*I-L|LR6Q9Lsc7?rROD8eWAnsRB)Xn+GI_|kr-(d8)pJmh zMsi64n==0|RH@H|zdzGc-0E3#yh%r@oK!S4dW)vmpq3#k}mkAKJm2UEVy4sz;3_~ zoB-^`JMk8v2p9+S;2rA+rU1|2J$eJc?cB-0Hptur|gHwlC2xb+ewoumU@aMt?4b&2nBXYB$H5_PE4%9HqqRQooy(We zKfcLx-*eut^W1yibM75GZajUEpQtq`zIvl_sA?+J$Qa8WvMe^V7Y$kZwvA!_Ssr7> zR@fmn%(p^61sw-o28PJCgt5o(WbD6d8Jjj}q1xqx`x#5Y{NL*s`w^D+%NhH>g|XoV z#+IfHS(Ym{<5tvXQqbEf8oVx-a5OgwzZ^)MFuF~*FQqETuY%eRbO8fEdBT!?HQkej z;Ud5UkW8%4FrT{1{4hUZ2oPja^;HwR1IWhvvB6Of_5U_$>VWw|q;t?zL|P79j)RbPC37m;?^7(1eoeqv;bznRLF-sbHnroJuFGg8i7v6a+gMy{MU&HIqxuxvb=9nk$#C)ubOCmuL?t zr;tkhIMb6espR}+YS^e8_@U1D`|_&ex4>{QYSL*#W7;}bph-U0^+jEOpzHtX`n0Z3 z==u#^zpCrFt{>Gkwy-7+T?aUeYld9iV9@oK$vE~OU61M75sCJPt#YWZw=>!k77i;N zVU9+xUlwIS;r2E=8k4b3haag;TEcHhUcMFFeRmFXV8OWTp&Xb7P}u z_R&eGKAOez)XO=%z#=)rJ9-9$KN1f2I>V9BE_Jn;7qn!%ME|aSG0@d5%DVflvL_(p z3=P;l&blp|y-t~UEZP*_CETH&_DHxdCm4+hS2Pld?i7yBjvQLh?hFXoW3OwJGl^ky zy$C7=H!E-iC)XjkiSDm#+NlrxhFb!~8D7=gbJh zH{vOTUV_iIASLPh7V)pc_m>5EO4Y5(_(xc=cTqxXwLBd5glX8MB?;+ygimHN_79Z* zE`zZt%txR}-a^Zc-~+J^zCnB-HUfQ^KZ51Yreln_H_^*+jMu>4hWKgdJ*XE$&e!mL z&siz6gI6Jvo`b%OpbZH41mhJbU_{U|*i0zC8RHEoc9M@4@sdUH*nLydZTKK1=_IeM zCHO$Wh7^WRr3S2}$t3LV))rJ?>^zKwk6=g`pfhM35SOr*t8zBENa1pv1q+9Yogz9!l47ZrYL&|h(sXb$`? zXp-d#IE1e+DqN9J#~r%SO08TU9uRf1U)bB*`!p|FM3XeXM|d9Vo-G}W#$&?U6Y0W! z^$&yw!t^mE$)4TD!R?^|`XM1P6Gu6S{UrQuZ&M&UX=bL@X1m8Nd+P7f4R>sm8v=Gg z1Rd^r;h??W=xq^!&A!c!fiw_%?%vM{lQZ9Ruh@LjD9fH=wi&CPSs~u4Ln~xoQ9}C8n0Gr4Mw#slcyUiDoSJOeYxDJ z78rS%YD?wTS9|rG93wZYO`OZ>Pzp@XY&WZiGx++9NVt6~aBru2JP*$EGi%&j%+0CW hh@|p#>BH)?R$iwqsSJLRp>ob2RL@$IrSbPG{S0*sUs?bF diff --git a/UsrInc/adc/adc.h b/UsrInc/adc/adc.h index 31380c2..3551a1e 100644 --- a/UsrInc/adc/adc.h +++ b/UsrInc/adc/adc.h @@ -29,7 +29,7 @@ Macro definitions \******************************************************************************/ -#define VREF 1000 +#define VREF (1000UL) /******************************************************************************\ Variables definitions diff --git a/UsrInc/charger/charger_module.h b/UsrInc/charger/charger_module.h index 1905187..091c0ad 100644 --- a/UsrInc/charger/charger_module.h +++ b/UsrInc/charger/charger_module.h @@ -48,15 +48,15 @@ typedef struct { /* CHG Control Register-CHG_CTL */ #define CHG_END_Sel_Pos (7U) -#define CHG_END_Sel_Pos_Msk (0x1UL << CHG_END_Sel_Pos) +#define CHG_END_Sel_Pos_Msk (0x1U << CHG_END_Sel_Pos) #define CHG_END_Sel CHG_END_Sel_Pos_Msk #define CHG_SafyTmr_EN_Pos (4U) -#define CHG_SafyTmr_EN_Pos_Msk (0x1UL << CHG_SafyTmr_EN_Pos) +#define CHG_SafyTmr_EN_Pos_Msk (0x1U << CHG_SafyTmr_EN_Pos) #define CHG_SafyTmr_EN CHG_SafyTmr_EN_Pos_Msk #define PRECHG_TMR_EN_Pos (3U) -#define PRECHG_TMR_EN_Pos_Msk (0x1UL << PRECHG_TMR_EN_Pos) +#define PRECHG_TMR_EN_Pos_Msk (0x1U << PRECHG_TMR_EN_Pos) #define PRECHG_TMR_EN_2H PRECHG_TMR_EN_Pos_Msk #define PRECHG_TMR_EN_1H 0x00 @@ -66,7 +66,7 @@ typedef struct { #define FASTCHG_TMR_SET_13H 0x03 #define CHG_EN_Pos (0U) -#define CHG_EN_Pos_Msk (0x1UL << CHG_EN_Pos) +#define CHG_EN_Pos_Msk (0x1U << CHG_EN_Pos) #define CHG_EN CHG_EN_Pos_Msk /* Charger Parements Config. */ @@ -126,60 +126,60 @@ typedef struct { /*5、CHG 配置寄存器 - REG_CHG0 */ #define DPM_Sel_Pos (6U) -#define DPM_Sel_Pos_Msk (0x1UL << DPM_Sel_Pos) +#define DPM_Sel_Pos_Msk (0x1U << DPM_Sel_Pos) #define DPM_Sel DPM_Sel_Pos_Msk #define R_Set1_Pos (4U) -#define R_Set1_Pos_Msk (0x1UL << R_Set1_Pos) +#define R_Set1_Pos_Msk (0x1U << R_Set1_Pos) #define R_Set1 R_Set1_Pos_Msk #define R_Set0_Pos (3U) -#define R_Set0_Pos_Msk (0x1UL << R_Set0_Pos) +#define R_Set0_Pos_Msk (0x1U << R_Set0_Pos) #define R_Set0 R_Set0_Pos_Msk #define CHG_VDPM_En_Pos (2U) -#define CHG_VDPM_En_Pos_Msk (0x1UL << CHG_VDPM_En_Pos) +#define CHG_VDPM_En_Pos_Msk (0x1U << CHG_VDPM_En_Pos) #define CHG_VDPM_En CHG_VDPM_En_Pos_Msk #define CHG_TEMP_En_Pos (1U) -#define CHG_TEMP_En_Pos_Msk (0x1UL << CHG_TEMP_En_Pos) +#define CHG_TEMP_En_Pos_Msk (0x1U << CHG_TEMP_En_Pos) #define CHG_TEMP_En CHG_TEMP_En_Pos_Msk #define CHG_CV_En_Pos (0U) -#define CHG_CV_En_Pos_Msk (0x1UL << CHG_CV_En_Pos) +#define CHG_CV_En_Pos_Msk (0x1U << CHG_CV_En_Pos) #define CHG_CV_En CHG_CV_En_Pos_Msk /* Charger 状态寄存器 - CHIP_STA4 */ #define VIN_PG_Pos (7U) -#define VIN_PG_Pos_Msk (0x1UL << VIN_PG_Pos) +#define VIN_PG_Pos_Msk (0x1U << VIN_PG_Pos) #define VIN_PG VIN_PG_Pos_Msk #define STATE_VDPM_Pos (6U) -#define STATE_VDPM_Pos_Msk (0x1UL << STATE_VDPM_Pos) +#define STATE_VDPM_Pos_Msk (0x1U << STATE_VDPM_Pos) #define STATE_VDPM STATE_VDPM_Pos_Msk #define STATE_TPL_Pos (5U) -#define STATE_TPL_Pos_Msk (0x1UL << STATE_TPL_Pos) +#define STATE_TPL_Pos_Msk (0x1U << STATE_TPL_Pos) #define STATE_TPL STATE_TPL_Pos_Msk #define STATE_BATOV_Pos (4U) -#define STATE_BATOV_Pos_Msk (0x1UL << STATE_BATOV_Pos) +#define STATE_BATOV_Pos_Msk (0x1U << STATE_BATOV_Pos) #define STATE_BATOV STATE_BATOV_Pos_Msk #define CHG_END_Pos (3U) -#define CHG_END_Pos_Msk (0x1UL << CHG_END_Pos) +#define CHG_END_Pos_Msk (0x1U << CHG_END_Pos) #define CHG_END CHG_END_Pos_Msk #define STATE_CV_Pos (2U) -#define STATE_CV_Pos_Msk (0x1UL << STATE_CV_Pos) +#define STATE_CV_Pos_Msk (0x1U << STATE_CV_Pos) #define STATE_CV STATE_CV_Pos_Msk #define STATE_CC_Pos (1U) -#define STATE_CC_Pos_Msk (0x1UL << STATE_CC_Pos) +#define STATE_CC_Pos_Msk (0x1U << STATE_CC_Pos) #define STATE_CC STATE_CC_Pos_Msk #define STATE_TC_Pos (0U) -#define STATE_TC_Pos_Msk (0x1UL << STATE_TC_Pos) +#define STATE_TC_Pos_Msk (0x1U << STATE_TC_Pos) #define STATE_TC STATE_TC_Pos_Msk extern void Charger_Init(void); diff --git a/UsrInc/comm/vox_comm.h b/UsrInc/comm/vox_comm.h new file mode 100644 index 0000000..e907738 --- /dev/null +++ b/UsrInc/comm/vox_comm.h @@ -0,0 +1,190 @@ +/* + ****************************************************************************** + * + * @file vox_comm.h + * @brief VOX Communicate module + * @ic sy8837/8/9 + * + * @version 1.0 + * @date 2025/02/13 017:40:40 + * @author Alex Xu + * + * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd. + * All Rights Reserved + * + * History: + * Revision Date Author Desc + * 1.0.0 2025/02/13 Alex build this file + ****************************************************************************** + */ +#ifndef __VOX_COMM_H__ +#define __VOX_COMM_H__ + + /*_____ I N C L U D E S ____________________________________________________*/ + +#include "define.h" + + +/******************************************************************************\ + Macro definitions +\******************************************************************************/ + +/*耳机通道选择*/ + +#define TWS_VOL 0x04 +#define TWS_VOR 0x05 +#define TWS_BOX 0x02 +#define TWS_PC 0x03 + +/******************************************************************************\ + Typedef definitions +\******************************************************************************/ + +#if JIELI + +/*耳机通道选择*/ +typedef enum { + + VOL_CHAN = 0x00, + + VOR_CHAN = 0x01, + + VOX_BOTH = 0xFF, + +}e_Vox_Chan; + +/*耳机和充电仓进行双向通讯的协议命令ID。*/ + typedef enum _VOX_BES_COMMAND_E +{ + + VHOUSE_CMD_PAIR = 0x01, //充电仓发起的配对信息 + + VHOUSE_CMD_EXCH_TWS_BTADDR = 0x02, //交换对耳的蓝牙地址信息。 + + VHOUSE_CMD_CLEAR_PAIR = 0x03, //清配对信息 + + VHOUSE_CMD_OPEN_BOX = 0x06, //开盖获取电量包 + + VHOUSE_CMD_CLOSE_WIN_GET_VBAT = 0x07, //关盖获取电量包 + + VHOUSE_CMD_RST = 0x08, // + + VHOUSE_CMD_PWROFF = 0x80, //关机消息 + + VHOUSE_CMD_CLOSE_BOX = 0x81, + + BES_RESET = 0xE1, + +}VOX_BES_COMMAND_E; + +#elif ZHONGKE + + /*耳机通道选择*/ + typedef enum { + + VOL_CHAN = 0x11, + + VOR_CHAN = 0x22, + + VOX_BOTH = 0xff, + + }e_Vox_Chan; + + /*耳机和充电仓进行双向通讯的协议命令ID。*/ +typedef enum _VOX_BES_COMMAND_E +{ + VHOUSE_CMD_GET_VBAT = 0x01, //获取电池电量,也可作为开始标志 + + VHOUSE_CMD_PAIR, //充电仓发起的配对信息 + + VHOUSE_CMD_GET_TWS_BTADDR, //获取对耳的蓝牙地址信息,充电仓无需使用本命令,本命令为对耳相互转发,充电仓只作转发缓存,收到该命令后,copy给另一只对耳即可。 + + VHOUSE_CMD_CLEAR_PAIR, //清除配对信息 + + VHOUSE_CMD_PWROFF, //关机消息 + + VHOUSE_CMD_ERR, //接收消息错误 + + VHOUSE_CMD_SUCCESS, //成功响应 + + VHOUSE_CMD_CLOSE_WINDOW, //关盖 + + VHOUSE_CMD_OPEN_WINDOW, //开盖 + + VHOUSE_CMD_CLOSE_WIN_GET_VBAT, //关盖获取电量包 + + VHOUSE_CMD_ENABLE_POPUP = 0x80, //开关弹窗功能控制 + + VHOUSE_CMD_CUSTOM_RESV1 = 0xE0, //客户保留指令 + + BES_RESET = 0xE1, + + VHOUSE_CMD_CUSTOM_RESV_END = 0xEF, + + VHOUSE_CMD_SYS_RST = 0xFF, //系统复位指令 + +}VOX_BES_COMMAND_E; + +#elif XUANHENG + + /*耳机通道选择*/ + +#define TWS_VOL 0x04 +#define TWS_VOR 0x05 +#define TWS_BOX 0x02 +#define TWS_PC 0x03 + +typedef enum { + + VOL_CHAN = 0x24, + + VOR_CHAN = 0x25, + + VOX_BOTH = 0x21, + +}e_Vox_Chan; + + /*耳机和充电仓进行双向通讯的协议命令ID。*/ +typedef enum _VOX_BES_COMMAND_E +{ + CMD_SHUT_DOWN = 0x0005, //关机 + + CMD_TWS_GET_BTADDR = 0x0037, //获取对耳MAC地址 + + CMD_TWS_SET_BTADDR = 0x000A, //写入对耳MAC地址 + + CMD_CLEAR_PAIR = 0x000B, //清除配对记录 + + CMD_HEARTBEAT = 0x000D, //心跳包 + + CMD_SN = 0x000E, //写入SN码到耳机 + + CMD_GET_INTO_PAIR = 0x000F, //耳机进入配对状态 + + CMD_PAIRING_IMD = 0x0011, //立即执行TWS配对 + + BES_RESET, //耳机复位Pattern + +}VOX_BES_COMMAND_E; + +#endif + + +/******************************************************************************\ + Global variables and functions +\******************************************************************************/ +#ifdef VOX_RX + +extern uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态,VOL:低4bit;VOR:高4bit。0是无效,1是正在配对,2是配对成功,3不处理,保持当前状态。 + +extern uint8_t Vox_Get_BES_Addr_Flag[2] ; + +#endif + +extern void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select); + + +extern void HandleVoxCommMsg(void); + + +#endif diff --git a/UsrInc/discharge/discharge_module.h b/UsrInc/discharge/discharge_module.h index 753037b..11e4261 100644 --- a/UsrInc/discharge/discharge_module.h +++ b/UsrInc/discharge/discharge_module.h @@ -32,11 +32,11 @@ /* Boost VOUT Control Register */ #define Boost_En_Pos (7U) -#define Boost_En_Msk (0x1UL << Boost_En_Pos) +#define Boost_En_Msk (0x1U << Boost_En_Pos) #define Boost_En Boost_En_Msk #define Boost_DirIn_Pos (6U) -#define Boost_DirIn_Msk (0x1UL << Boost_DirIn_Pos) +#define Boost_DirIn_Msk (0x1U << Boost_DirIn_Pos) #define Boost_DirIn Boost_DirIn_Msk #define Boost_Vout_3_65V (0x00) diff --git a/UsrInc/inc/config.h b/UsrInc/inc/config.h index 9f83173..7903be8 100644 --- a/UsrInc/inc/config.h +++ b/UsrInc/inc/config.h @@ -274,8 +274,12 @@ #define CONSTANT_CUR_SET CHG_ICC_2_00MA //配置恒流充电流。 +#define CONSTANT_JEITA_COLD CHG_ICC_1_00MA //配置JEITA低温限流充电电流。 + #define VFLOAT_SET CHG_VFLOAT_4_200V //配置浮充电压。 +#define VFLOAT_VOLTAGE_SET (4200UL) //配置浮充电压实际电压值,用于仓复充,单位:mv。 + #define PRECHG_TIM_SET PRECHG_TMR_EN_1H //配置涓流充超时时间。 #define FASTCHG_TMR_SET FASTCHG_TMR_SET_5H //配置恒流和恒压超时时间。 @@ -286,13 +290,13 @@ /* Vox Config Setting. */ -#define VOX_ADT_CUR_SET VOX_ADT_Cur_4_5UA //配置VOX负载识别电流阈值。 +#define VOX_ADT_CUR_SET VOX_ADT_CUR_4_5UA //配置VOX负载识别电流阈值。 -#define VOX_IOFF_CUR_SET Vox_Ioff_3mA << 6 //配置VOX IOFF检测阈值。 +#define VOX_IOFF_CUR_SET ( VOX_IOFF_3MA << 6 ) //配置VOX IOFF检测阈值。 -#define VOX_LIGHT_TO_HAVEY_DEB VOX_LIGHT_TO_HAVEY_128 //配置VOX 轻载转重载滤波时间。 +#define VOX_LIGHT_TO_HAVEY_DEB VOX_LIGHT_TO_HAVEY_128MS //配置VOX 轻载转重载滤波时间。 -#define VOX_HAVEY_TO_LIGHT_DEB VOX_HAVEY_TO_LIGHT_8 //配置VOX 重载转轻载滤波时间。 +#define VOX_HAVEY_TO_LIGHT_DEB VOX_HAVEY_TO_LIGHT_8MS //配置VOX 重载转轻载滤波时间。 #define VOX_COMM_VOLTAGE_SET Vox_COMM_PULL_Vol_3_0 //配置VOX 通讯电平(1.8v/2.5V/3.0V/5.0)。 @@ -336,13 +340,13 @@ #define VOUT_MIN_THD Boost_Vout_3_65V //VOX VOUT输出最小阈值。 -#define IVOL_Threshold_Neg(Ivol) ( Ivol / 5 ) << 2 //VOL 调压下限阈值电流,80% * Ivol,IVOL≥这个值,则降压。 +#define IVOL_Threshold_Neg(Ivol) ( ( Ivol / 5 ) << 2 ) //VOL 调压下限阈值电流,80% * Ivol,IVOL≥这个值,则降压。 -#define IVOR_Threshold_Neg(Ivor) ( Ivor / 5 ) << 2 //VOR 调压下限阈值电流,80% * Ivor,IVOR≥这个值,则降压。 +#define IVOR_Threshold_Neg(Ivor) ( ( Ivor / 5 ) << 2 ) //VOR 调压下限阈值电流,80% * Ivor,IVOR≥这个值,则降压。 -#define IVOL_Threshold_Pos(Ivol) ( Ivol ) << 1 //VOL 调压上限阈值电流,2倍 * Ivol,当Ivol大于THP阈值电流,则说明耳机状态发生改变(TC跳转到CC或Recharge复充),需要重启跟随充。 +#define IVOL_Threshold_Pos(Ivol) ( ( Ivol ) << 1 ) //VOL 调压上限阈值电流,2倍 * Ivol,当Ivol大于THP阈值电流,则说明耳机状态发生改变(TC跳转到CC或Recharge复充),需要重启跟随充。 -#define IVOR_Threshold_Pos(Ivor) ( Ivor ) << 1 //VOR 调压上限阈值电流,2倍 * Ivor,当Ivor大于THP阈值电流,则说明耳机状态发生改变(TC跳转到CC或Recharge复充),需要重启跟随充。 +#define IVOR_Threshold_Pos(Ivor) ( ( Ivor ) << 1 ) //VOR 调压上限阈值电流,2倍 * Ivor,当Ivor大于THP阈值电流,则说明耳机状态发生改变(TC跳转到CC或Recharge复充),需要重启跟随充。 /* PWM Module Setting */ /*PWM计数器时钟Fre(pwm) = Fre(sys)/PWM_PRE = 11.0592M / n^PWM_PRE = 11.0592M / 8 = 1.38MHz, diff --git a/UsrInc/inc/define.h b/UsrInc/inc/define.h index 8b3c67e..cb51823 100644 --- a/UsrInc/inc/define.h +++ b/UsrInc/inc/define.h @@ -23,7 +23,7 @@ #include "config.h" /*Function Select,功能选择宏定义*/ -//#define SY8838 //合封芯片SY8838 +//#define SY8837 //合封芯片SY8838 #define TIMER1_ENABLE 0 //Timer1 定时周期1ms。(120Bytes) diff --git a/UsrInc/system/system.h b/UsrInc/system/system.h index e4a1626..df6c503 100644 --- a/UsrInc/system/system.h +++ b/UsrInc/system/system.h @@ -30,144 +30,144 @@ \******************************************************************************/ /* Boost/Hall/Key/VBUS状态寄存器 - CHIP_STA0 */ #define BOOST_BATUV_Pos (7U) -#define BOOST_BATUV_Pos_Msk (0x1UL << BOOST_BATUV_Pos) +#define BOOST_BATUV_Pos_Msk (0x1U << BOOST_BATUV_Pos) #define BOOST_BATUV BOOST_BATUV_Pos_Msk #define BOOST_SHORT_Pos (6U) -#define BOOST_SHORT_Pos_Msk (0x1UL << BOOST_SHORT_Pos) +#define BOOST_SHORT_Pos_Msk (0x1U << BOOST_SHORT_Pos) #define BOOST_SHORT BOOST_SHORT_Pos_Msk #define HALL_STATOK_Pos (4U) -#define HALL_STATOK_Pos_Msk (0x1UL << HALL_STATOK_Pos) +#define HALL_STATOK_Pos_Msk (0x1U << HALL_STATOK_Pos) #define HALL_STATOK HALL_STATOK_Pos_Msk #define HALL_STAT_Pos (3U) -#define HALL_STAT_Pos_Msk (0x1UL << HALL_STAT_Pos) +#define HALL_STAT_Pos_Msk (0x1U << HALL_STAT_Pos) #define HALL_STAT HALL_STAT_Pos_Msk #define HALL_PRE_Pos (2U) -#define HALL_PRE_Pos_Msk (0x1UL << HALL_PRE_Pos) +#define HALL_PRE_Pos_Msk (0x1U << HALL_PRE_Pos) #define HALL_PRE HALL_PRE_Pos_Msk #define KEY_STAT_Pos (1U) -#define KEY_STAT_Pos_Msk (0x1UL << KEY_STAT_Pos) +#define KEY_STAT_Pos_Msk (0x1U << KEY_STAT_Pos) #define KEY_STAT KEY_STAT_Pos_Msk #define VIN_PRESENT_Pos (0U) -#define VIN_PRESENT_Pos_Msk (0x1UL << VIN_PRESENT_Pos) +#define VIN_PRESENT_Pos_Msk (0x1U << VIN_PRESENT_Pos) #define VIN_PRESENT VIN_PRESENT_Pos_Msk /* Abnormal Interrupt Flag Register-IRQ_FLAG0 */ #define DIE_TO_Pos (6U) -#define DIE_TO_Pos_Msk (0x1UL << DIE_TO_Pos) +#define DIE_TO_Pos_Msk (0x1U << DIE_TO_Pos) #define DIE_TO DIE_TO_Pos_Msk #define VBUS_OverVol_Pos (5U) -#define VBUS_OverVol_Pos_Msk (0x1UL << VBUS_OverVol_Pos) +#define VBUS_OverVol_Pos_Msk (0x1U << VBUS_OverVol_Pos) #define VBUS_OverVol VBUS_OverVol_Pos_Msk #define BAT_Low_Pos (4U) -#define BAT_Low_Pos_Msk (0x1UL << BAT_Low_Pos) +#define BAT_Low_Pos_Msk (0x1U << BAT_Low_Pos) #define BAT_Low BAT_Low_Pos_Msk #define VOR_OutPut_Short_Pos (3U) -#define VOR_OutPut_Short_Pos_Msk (0x1UL << VOR_OutPut_Short_Pos) +#define VOR_OutPut_Short_Pos_Msk (0x1U << VOR_OutPut_Short_Pos) #define VOR_OutPut_Short VOR_OutPut_Short_Pos_Msk #define VOL_OutPut_Short_Pos (2U) -#define VOL_OutPut_Short_Pos_Msk (0x1UL << VOL_OutPut_Short_Pos) +#define VOL_OutPut_Short_Pos_Msk (0x1U << VOL_OutPut_Short_Pos) #define VOL_OutPut_Short VOL_OutPut_Short_Pos_Msk #define Boost_UVLO_Pos (1U) -#define Boost_UVLO_Pos_Msk (0x1UL << Boost_UVLO_Pos) +#define Boost_UVLO_Pos_Msk (0x1U << Boost_UVLO_Pos) #define Boost_UVLO Boost_UVLO_Pos_Msk #define Boost_OutPut_Short_Pos (0U) -#define Boost_OutPut_Short_Pos_Msk (0x1UL << Boost_OutPut_Short_Pos) +#define Boost_OutPut_Short_Pos_Msk (0x1U << Boost_OutPut_Short_Pos) #define Boost_OutPut_Short Boost_OutPut_Short_Pos_Msk /* Charger Interrupt Flag Register-IRQ_FALG9 */ #define VIN_DPM_Pos (7U) -#define VIN_DPM_Pos_Msk (0x1UL << VIN_DPM_Pos) +#define VIN_DPM_Pos_Msk (0x1U << VIN_DPM_Pos) #define VIN_DPM VIN_DPM_Pos_Msk #define Temp_Loop_Pos (6U) -#define Temp_Loop_Pos_Msk (0x1UL << Temp_Loop_Pos) +#define Temp_Loop_Pos_Msk (0x1U << Temp_Loop_Pos) #define Temp_Loop Temp_Loop_Pos_Msk #define BAT_OverVol_Pos (5U) -#define BAT_OverVol_Pos_Msk (0x1UL << BAT_OverVol_Pos) +#define BAT_OverVol_Pos_Msk (0x1U << BAT_OverVol_Pos) #define BAT_OverVol BAT_OverVol_Pos_Msk #define CHG_Complete_Pos (4U) -#define CHG_Complete_Pos_Msk (0x1UL << CHG_Complete_Pos) +#define CHG_Complete_Pos_Msk (0x1U << CHG_Complete_Pos) #define CHG_Complete CHG_Complete_Pos_Msk #define CHG_FastChgTmr_Pos (3U) -#define CHG_FastChgTmr_Pos_Msk (0x1UL << CHG_FastChgTmr_Pos) +#define CHG_FastChgTmr_Pos_Msk (0x1U << CHG_FastChgTmr_Pos) #define CHG_FastChgTmr CHG_FastChgTmr_Pos_Msk #define CHG_TricleChgTmr_Pos (2U) -#define CHG_TricleChgTmr_Pos_Msk (0x1UL << CHG_TricleChgTmr_Pos) +#define CHG_TricleChgTmr_Pos_Msk (0x1U << CHG_TricleChgTmr_Pos) #define CHG_TricleChgTmr CHG_TricleChgTmr_Pos_Msk #define VBUS_PG_NEG_Pos (1U) -#define VBUS_PG_NEG_Pos_Msk (0x1UL << VBUS_PG_NEG_Pos) +#define VBUS_PG_NEG_Pos_Msk (0x1U << VBUS_PG_NEG_Pos) #define VBUS_PG_NEG VBUS_PG_NEG_Pos_Msk #define VBUS_PG_POS_Pos (0U) -#define VBUS_PG_POS_Pos_Msk (0x1UL << VBUS_PG_POS_Pos) +#define VBUS_PG_POS_Pos_Msk (0x1U << VBUS_PG_POS_Pos) #define VBUS_PG_POS VBUS_PG_POS_Pos_Msk /* VBUS/HALL and ADC Data Ready Interrupt Flag Register-IRQ_FLAG10 */ #define VBUS_PLUG_OUT_Pos (7U) -#define VBUS_PLUG_OUT_Pos_Msk (0x1UL << VBUS_PLUG_OUT_Pos) +#define VBUS_PLUG_OUT_Pos_Msk (0x1U << VBUS_PLUG_OUT_Pos) #define VBUS_PLUG_OUT VBUS_PLUG_OUT_Pos_Msk #define VBUS_PLUG_IN_Pos (6U) -#define VBUS_PLUG_IN_Pos_Msk (0x1UL << VBUS_PLUG_IN_Pos) +#define VBUS_PLUG_IN_Pos_Msk (0x1U << VBUS_PLUG_IN_Pos) #define VBUS_PLUG_IN VBUS_PLUG_IN_Pos_Msk #define HALL_NEG_Pos (3U) -#define HALL_NEG_Pos_Msk (0x1UL << HALL_NEG_Pos) +#define HALL_NEG_Pos_Msk (0x1U << HALL_NEG_Pos) #define HALL_NEG HALL_NEG_Pos_Msk #define HALL_POS_Pos (2U) -#define HALL_POS_Pos_Msk (0x1UL << HALL_POS_Pos) +#define HALL_POS_Pos_Msk (0x1U << HALL_POS_Pos) #define HALL_POS HALL_POS_Pos_Msk #define Standby_Tmr_WkUp_Pos (1U) -#define Standby_Tmr_WkUp_Msk (0x1UL << Standby_Tmr_WkUp_Pos) +#define Standby_Tmr_WkUp_Msk (0x1U << Standby_Tmr_WkUp_Pos) #define Standby_Tmr_WkUp Standby_Tmr_WkUp_Msk #define ADC_Data_Ready_Pos (0U) -#define ADC_Data_Ready_Msk (0x1UL << ADC_Data_Ready_Pos) +#define ADC_Data_Ready_Msk (0x1U << ADC_Data_Ready_Pos) #define ADC_Data_Ready ADC_Data_Ready_Msk /* Boost/Hall/Key/VBUS Wakeup Flag - WKUP_FLAG0 */ #define TMR_WK_FLAG_Pos (3U) -#define TMR_WK_FLAG_Pos_Msk (0x1UL << TMR_WK_FLAG_Pos) +#define TMR_WK_FLAG_Pos_Msk (0x1U << TMR_WK_FLAG_Pos) #define TMR_WK_FLAG TMR_WK_FLAG_Pos_Msk #define HALL_WK_FLAG_Pos (2U) -#define HALL_WK_FLAG_Pos_Msk (0x1UL << HALL_WK_FLAG_Pos) +#define HALL_WK_FLAG_Pos_Msk (0x1U << HALL_WK_FLAG_Pos) #define HALL_WK_FLAG HALL_WK_FLAG_Pos_Msk #define KEY_WK_FLAG_Pos (1U) -#define KEY_WK_FLAG_Pos_Msk (0x1UL << KEY_WK_FLAG_Pos) +#define KEY_WK_FLAG_Pos_Msk (0x1U << KEY_WK_FLAG_Pos) #define KEY_WK_FLAG KEY_WK_FLAG_Pos_Msk #define VIN_PRESENT_WK_FLAG_Pos (0U) -#define VIN_PRESENT_WK_FLAG_Pos_Msk (0x1UL << VIN_PRESENT_WK_FLAG_Pos) +#define VIN_PRESENT_WK_FLAG_Pos_Msk (0x1U << VIN_PRESENT_WK_FLAG_Pos) #define VIN_PRESENT_WK_FLAG VIN_PRESENT_WK_FLAG_Pos_Msk /* Standby 定时唤醒控制寄存器--STB_TIM_CTL */ #define EN_FORCE_LOSC_Pos (7U) -#define EN_FORCE_LOSC_Pos_Msk (0x1UL << EN_FORCE_LOSC_Pos) +#define EN_FORCE_LOSC_Pos_Msk (0x1U << EN_FORCE_LOSC_Pos) #define EN_FORCE_LOSC EN_FORCE_LOSC_Pos_Msk #define STB_TMR_EN_Pos (2U) -#define STB_TMR_EN_Pos_Msk (0x1UL << STB_TMR_EN_Pos) +#define STB_TMR_EN_Pos_Msk (0x1U << STB_TMR_EN_Pos) #define STB_TMR_EN STB_TMR_EN_Pos_Msk #define STB_TMR_SET_2S (0U) diff --git a/UsrInc/vox/vox_module.h b/UsrInc/vox/vox_module.h index a3942b6..b3f4ef2 100644 --- a/UsrInc/vox/vox_module.h +++ b/UsrInc/vox/vox_module.h @@ -40,21 +40,11 @@ extern bit Vox_Output_Short_Flag; #define IVOX_THP 200 //耳机跟随充电流上升阈值 -#define VOL_TYPE 0x00 +#define VOL_TYPE 0x00 -#define VOR_TYPE 0x01 +#define VOR_TYPE 0x01 -#define VOX_MAX_CHAN 0x02 - - typedef enum { - - VOX_NONE_IN_BOX = 0, //空仓 - - VOX_GET_INTO_BOX, //耳机入仓 - - VOX_STAY_IN_BOX, //耳机在仓 - - }Vox_State_e; +#define VOX_MAX_CHAN 0x02 /*耳机配对状态*/ typedef enum { @@ -79,23 +69,35 @@ extern bit Vox_Output_Short_Flag; }e_Vox_Paired_State; #ifdef VOX_COVER_ENABLE - - extern bit Vox_Vout_Enable; //Vox功率输出标志位 - + +extern bit Vox_Vout_Enable; //Vox功率输出标志位 + +extern uint8_t EarPhone_Num; + #else - - extern bit Vor_Vout_Enable; //Vor功率输出标志位 - - extern bit Vol_Vout_Enable; //Vol功率输出标志位 - - extern bit Vor_GetOut_Box_Flag; - - extern bit Vol_GetOut_Box_Flag; - - extern Vox_State_e Vor_State; - - extern Vox_State_e Vol_State; - + +typedef enum { + + VOX_NONE_IN_BOX = 0, //空仓 + + VOX_GET_INTO_BOX, //耳机入仓 + + VOX_STAY_IN_BOX, //耳机在仓 + +}Vox_State_e; + +extern bit Vor_Vout_Enable; //Vor功率输出标志位 + +extern bit Vol_Vout_Enable; //Vol功率输出标志位 + +extern bit Vor_GetOut_Box_Flag; + +extern bit Vol_GetOut_Box_Flag; + +extern Vox_State_e Vor_State; + +extern Vox_State_e Vol_State; + #endif #if VOX_ENABLE @@ -106,65 +108,65 @@ extern bit Vox_Output_Short_Flag; /*CHIP_STA1*/ #define VOX_Sta_Vol_Output_Short_Pos (0U) -#define VOX_Sta_Vol_Output_Short_Pos_Msk (0x1UL << VOX_Sta_Vol_Output_Short_Pos) +#define VOX_Sta_Vol_Output_Short_Pos_Msk (0x1U << VOX_Sta_Vol_Output_Short_Pos) #define VOL_Output_Short VOX_Sta_Vol_Output_Short_Pos_Msk #define VOX_Sta_Vor_Output_Short_Pos (1U) -#define VOX_Sta_Vor_Output_Short_Pos_Msk (0x1UL << VOX_Sta_Vor_Output_Short_Pos) +#define VOX_Sta_Vor_Output_Short_Pos_Msk (0x1U << VOX_Sta_Vor_Output_Short_Pos) #define VOR_Output_Short VOX_Sta_Vor_Output_Short_Pos_Msk #define VOX_Sta_Vol_Ioff_Pos (2U) -#define VOX_Sta_Vol_Ioff_Pos_Msk (0x1UL << VOX_Sta_Vol_Ioff_Pos) +#define VOX_Sta_Vol_Ioff_Pos_Msk (0x1U << VOX_Sta_Vol_Ioff_Pos) #define VOL_Ioff VOX_Sta_Vol_Ioff_Pos_Msk #define VOX_Sta_Vor_Ioff_Pos (3U) -#define VOX_Sta_Vor_Ioff_Pos_Msk (0x1UL << VOX_Sta_Vor_Ioff_Pos) +#define VOX_Sta_Vor_Ioff_Pos_Msk (0x1U << VOX_Sta_Vor_Ioff_Pos) #define VOR_Ioff VOX_Sta_Vor_Ioff_Pos_Msk #define VOX_Sta_Vol_Loadon_Pos (5U) -#define VOX_Sta_Vol_Loadon_Pos_Msk (0x1UL << VOX_Sta_Vol_Loadon_Pos) +#define VOX_Sta_Vol_Loadon_Pos_Msk (0x1U << VOX_Sta_Vol_Loadon_Pos) #define VOL_LoadOn VOX_Sta_Vol_Loadon_Pos_Msk #define VOX_Sta_Vor_Loadon_Pos (7U) -#define VOX_Sta_Vor_Loadon_Pos_Msk (0x1UL << VOX_Sta_Vor_Loadon_Pos) +#define VOX_Sta_Vor_Loadon_Pos_Msk (0x1U << VOX_Sta_Vor_Loadon_Pos) #define VOR_LoadOn VOX_Sta_Vor_Loadon_Pos_Msk /* VOL/R Control Register - VOX_CTL0 */ #define EN_VOL_ADTL_Pos (0U) -#define EN_VOL_ADTL_Pos_Msk (0x1UL << EN_VOL_ADTL_Pos) +#define EN_VOL_ADTL_Pos_Msk (0x1U << EN_VOL_ADTL_Pos) #define EN_VOL_ADTL EN_VOL_ADTL_Pos_Msk #define EN_VOR_ADTR_Pos (1U) -#define EN_VOR_ADTR_Pos_Msk (0x1UL << EN_VOR_ADTR_Pos) +#define EN_VOR_ADTR_Pos_Msk (0x1U << EN_VOR_ADTR_Pos) #define EN_VOR_ADTR EN_VOR_ADTR_Pos_Msk #define EN_VOL_PU_Pos (2U) -#define EN_VOL_PU_Pos_Msk (0x1UL << EN_VOL_PU_Pos) +#define EN_VOL_PU_Pos_Msk (0x1U << EN_VOL_PU_Pos) #define EN_VOL_PU EN_VOL_PU_Pos_Msk #define EN_VOR_PU_Pos (3U) -#define EN_VOR_PU_Pos_Msk (0x1UL << EN_VOR_PU_Pos) +#define EN_VOR_PU_Pos_Msk (0x1U << EN_VOR_PU_Pos) #define EN_VOR_PU EN_VOR_PU_Pos_Msk #define EN_VOL_VOUT_Pos (4U) -#define EN_VOL_VOUT_Pos_Msk (0x1UL << EN_VOL_VOUT_Pos) +#define EN_VOL_VOUT_Pos_Msk (0x1U << EN_VOL_VOUT_Pos) #define EN_VOL_VOUT EN_VOL_VOUT_Pos_Msk #define EN_VOR_VOUT_Pos (5U) -#define EN_VOR_VOUT_Pos_Msk (0x1UL << EN_VOR_VOUT_Pos) +#define EN_VOR_VOUT_Pos_Msk (0x1U << EN_VOR_VOUT_Pos) #define EN_VOR_VOUT EN_VOR_VOUT_Pos_Msk #define EN_VOL_VDS_Pos (6U) -#define EN_VOL_VDS_Pos_Msk (0x1UL << EN_VOL_VDS_Pos) +#define EN_VOL_VDS_Pos_Msk (0x1U << EN_VOL_VDS_Pos) #define EN_VOL_VDS EN_VOL_VDS_Pos_Msk #define EN_VOR_VDS_Pos (7U) -#define EN_VOR_VDS_Pos_Msk (0x1UL << EN_VOR_VDS_Pos) +#define EN_VOR_VDS_Pos_Msk (0x1U << EN_VOR_VDS_Pos) #define EN_VOR_VDS EN_VOR_VDS_Pos_Msk /* VOL/R ADT Config Register,VOX_CON0<6Ah> */ #define Vox_Pull_Up_Pos (7U) -#define Vox_Pull_Up_Pos_Msk (0x1UL << Vox_Pull_Up_Pos) +#define Vox_Pull_Up_Pos_Msk (0x1U << Vox_Pull_Up_Pos) #define Vox_Pull_Up Vox_Pull_Up_Pos_Msk #define Vox_Pull_Up_Deb_Pos (6U) @@ -176,22 +178,22 @@ extern bit Vox_Output_Short_Flag; #define Vox_Pull_Up_Deb_16Ms (Vox_Pull_Up_Deb_16Ms_Pos_Msk << Vox_Pull_Up_Deb_Pos) #define Vor_Pull_Down_Pos (5U) -#define Vor_Pull_Down_Pos_Msk (0x1UL << Vor_Pull_Down_Pos) +#define Vor_Pull_Down_Pos_Msk (0x1U << Vor_Pull_Down_Pos) #define Vor_Pull_Down Vor_Pull_Down_Pos_Msk #define Vol_Pull_Down_Pos (4U) -#define Vol_Pull_Down_Pos_Msk (0x1UL << Vol_Pull_Down_Pos) +#define Vol_Pull_Down_Pos_Msk (0x1U << Vol_Pull_Down_Pos) #define Vol_Pull_Down Vol_Pull_Down_Pos_Msk /*自动识别负载电流阈值。*/ -#define VOX_ADT_Cur_0_5UA (0x00UL) -#define VOX_ADT_Cur_1_5UA (0x01UL) -#define VOX_ADT_Cur_2_5UA (0x02UL) -#define VOX_ADT_Cur_3_5UA (0x03UL) -#define VOX_ADT_Cur_4_5UA (0x04UL) -#define VOX_ADT_Cur_5_5UA (0x05UL) -#define VOX_ADT_Cur_6_5UA (0x06UL) -#define VOX_ADT_Cur_7_5UA (0x07UL) +#define VOX_ADT_CUR_0_5UA (0x00U) +#define VOX_ADT_CUR_1_5UA (0x01U) +#define VOX_ADT_CUR_2_5UA (0x02U) +#define VOX_ADT_CUR_3_5UA (0x03U) +#define VOX_ADT_CUR_4_5UA (0x04U) +#define VOX_ADT_CUR_5_5UA (0x05U) +#define VOX_ADT_CUR_6_5UA (0x06U) +#define VOX_ADT_CUR_7_5UA (0x07U) /* VOX过流档位设置,在系统初始化中(Vox_init())通过配置VOX_CON0, @@ -204,80 +206,80 @@ SFRDATA |= (VOX_LIGHT_TO_HAVEY_128 << 2) | VOX_HAVEY_TO_LIGHT_8; */ /* VOL/R Misc Config Register,VOX_CON2<6Ch> */ -#define Vox_Ioff_2mA (0x00UL) -#define Vox_Ioff_3mA (0x01UL) -#define Vox_Ioff_4mA (0x02UL) -#define Vox_Ioff_5mA (0x03UL) +#define VOX_IOFF_2MA (0x00U) +#define VOX_IOFF_3MA (0x01U) +#define VOX_IOFF_4MA (0x02U) +#define VOX_IOFF_5MA (0x03U) /*轻载转重载滤波时间配置。*/ -#define VOX_LIGHT_TO_HAVEY_1 (0x00UL) -#define VOX_LIGHT_TO_HAVEY_8 (0x01UL) -#define VOX_LIGHT_TO_HAVEY_128 (0x02UL) -#define VOX_LIGHT_TO_HAVEY_256 (0x03UL) +#define VOX_LIGHT_TO_HAVEY_1MS (0x00U) +#define VOX_LIGHT_TO_HAVEY_8MS (0x01U) +#define VOX_LIGHT_TO_HAVEY_128MS (0x02U) +#define VOX_LIGHT_TO_HAVEY_256MS (0x03U) /*重载转轻载滤波时间配置。*/ -#define VOX_HAVEY_TO_LIGHT_0_125 (0x00UL) -#define VOX_HAVEY_TO_LIGHT_1 (0x01UL) -#define VOX_HAVEY_TO_LIGHT_8 (0x02UL) -#define VOX_HAVEY_TO_LIGHT_64 (0x03UL) +#define VOX_HAVEY_TO_LIGHT_0_125MS (0x00U) +#define VOX_HAVEY_TO_LIGHT_1MS (0x01U) +#define VOX_HAVEY_TO_LIGHT_8MS (0x02U) +#define VOX_HAVEY_TO_LIGHT_64MS (0x03U) /* VOL/R Comm Control Register,COMM_CTL */ #define Vor_EN_COMR_Pos (7U) -#define Vor_EN_COMR_Pos_Msk (0x1UL << Vor_EN_COMR_Pos) +#define Vor_EN_COMR_Pos_Msk (0x1U << Vor_EN_COMR_Pos) #define Vor_EN_COMR Vor_EN_COMR_Pos_Msk #define Vor_SW_MD_Pos (6U) -#define Vor_SW_MD_Pos_Msk (0x1UL << Vor_SW_MD_Pos) +#define Vor_SW_MD_Pos_Msk (0x1U << Vor_SW_MD_Pos) #define Vor_SW_MD Vor_SW_MD_Pos_Msk #define Vor_SWDT_Pos (5U) -#define Vor_SWDT_Pos_Msk (0x1UL << Vor_SWDT_Pos) +#define Vor_SWDT_Pos_Msk (0x1U << Vor_SWDT_Pos) #define Vor_SWDT Vor_SWDT_Pos_Msk #define Vor_SWDR_Pos (4U) -#define Vor_SWDR_Pos_Msk (0x1UL << Vor_SWDR_Pos) +#define Vor_SWDR_Pos_Msk (0x1U << Vor_SWDR_Pos) #define Vor_SWDR Vor_SWDR_Pos_Msk #define Vol_EN_COMR_Pos (3U) -#define Vol_EN_COMR_Pos_Msk (0x1UL << Vol_EN_COMR_Pos) +#define Vol_EN_COMR_Pos_Msk (0x1U << Vol_EN_COMR_Pos) #define Vol_EN_COMR Vol_EN_COMR_Pos_Msk #define Vol_SW_MD_Pos (2U) -#define Vol_SW_MD_Pos_Msk (0x1UL << Vol_SW_MD_Pos) +#define Vol_SW_MD_Pos_Msk (0x1U << Vol_SW_MD_Pos) #define Vol_SW_MD Vol_SW_MD_Pos_Msk #define Vol_SWDT_Pos (1U) -#define Vol_SWDT_Pos_Msk (0x1UL << Vol_SWDT_Pos) +#define Vol_SWDT_Pos_Msk (0x1U << Vol_SWDT_Pos) #define Vol_SWDT Vol_SWDT_Pos_Msk #define Vol_SWDR_Pos (0U) -#define Vol_SWDR_Pos_Msk (0x1UL << Vol_SWDR_Pos) +#define Vol_SWDR_Pos_Msk (0x1U << Vol_SWDR_Pos) #define Vol_SWDR Vol_SWDR_Pos_Msk /* VOL/R Comm TRx Data Register,COMM_DAT */ #define Vor_COMR_RX_Pos (5U) -#define Vor_COMR_RX_Pos_Msk (0x1UL << Vor_COMR_RX_Pos) +#define Vor_COMR_RX_Pos_Msk (0x1U << Vor_COMR_RX_Pos) #define Vor_COMR_RX Vor_COMR_RX_Pos_Msk #define Vol_COML_RX_Pos (4U) -#define Vol_COML_RX_Pos_Msk (0x1UL << Vol_COML_RX_Pos) +#define Vol_COML_RX_Pos_Msk (0x1U << Vol_COML_RX_Pos) #define Vol_COML_RX Vol_COML_RX_Pos_Msk #define Vor_COMR_DT_Pos (1U) -#define Vor_COMR_DT_Pos_Msk (0x1UL << Vor_COMR_DT_Pos) +#define Vor_COMR_DT_Pos_Msk (0x1U << Vor_COMR_DT_Pos) #define Vor_COMR_DT Vor_COMR_DT_Pos_Msk #define Vol_COML_DT_Pos (0U) -#define Vol_COML_DT_Pos_Msk (0x1UL << Vol_COML_DT_Pos) +#define Vol_COML_DT_Pos_Msk (0x1U << Vol_COML_DT_Pos) #define Vol_COML_DT Vol_COML_DT_Pos_Msk /* VOL/R Comm Config Register,COMM_CON<6Fh> */ #define Vox_COMM_PULL_Vol_Pos (2U) -#define Vox_COMM_PULL_Vol_1_8_Pos_Msk (0x00UL) -#define Vox_COMM_PULL_Vol_2_5_Pos_Msk (0x01UL) -#define Vox_COMM_PULL_Vol_3_0_Pos_Msk (0x02UL) -#define Vox_COMM_PULL_Vol_5_0_Pos_Msk (0x03UL) +#define Vox_COMM_PULL_Vol_1_8_Pos_Msk (0x00U) +#define Vox_COMM_PULL_Vol_2_5_Pos_Msk (0x01U) +#define Vox_COMM_PULL_Vol_3_0_Pos_Msk (0x02U) +#define Vox_COMM_PULL_Vol_5_0_Pos_Msk (0x03U) #define Vox_COMM_PULL_Vol_1_8 (Vox_COMM_PULL_Vol_1_8_Pos_Msk << Vox_COMM_PULL_Vol_Pos) #define Vox_COMM_PULL_Vol_2_5 (Vox_COMM_PULL_Vol_2_5_Pos_Msk << Vox_COMM_PULL_Vol_Pos) @@ -285,179 +287,34 @@ SFRDATA |= (VOX_LIGHT_TO_HAVEY_128 << 2) | VOX_HAVEY_TO_LIGHT_8; #define Vox_COMM_PULL_Vol_5_0 (Vox_COMM_PULL_Vol_5_0_Pos_Msk << Vox_COMM_PULL_Vol_Pos) #define Vox_Pull_Up_50k_Pos (0U) -#define Vox_Pull_Up_50k_Pos_Msk (0x1UL << Vox_Pull_Up_50k_Pos) +#define Vox_Pull_Up_50k_Pos_Msk (0x1U << Vox_Pull_Up_50k_Pos) #define Vox_Pull_Up_50k Vox_Pull_Up_50k_Pos_Msk + #if XUANHENG -#define BOXHEADER 0xAA //VOX通讯数据包头 +#define BOXHEADER (0xAAU) //VOX通讯数据包头 #else -#define BOXHEADER 0x55AA //VOX通讯数据包头 +#define BOXHEADER (0x55AAUL) //VOX通讯数据包头 -#define EARPHONE_HEADER_HIGH 0x55 -#define EARPHONE_HEADER_LOW 0xAA +#define EARPHONE_HEADER_HIGH (0x55U) +#define EARPHONE_HEADER_LOW (0xAAU) -#define BOXIDCODE 0xFF //VOX通讯耳机->仓数据包头 +#define BOXIDCODE (0xFFU) //VOX通讯耳机->仓数据包头 #endif -#define Vox_TX_Interval 2 //Vox定时发送指令时间间隔 +#define Vox_TX_Interval (2U) //Vox定时发送指令时间间隔 -#define Vox_TX_Interval_2 4 +#define Vox_TX_Interval_2 (4U) -#define TIM_SHUTDOWN_DEBOUNCE 600 //关机前debounce时间 +#define TIM_SHUTDOWN_DEBOUNCE (600UL) //关机前debounce时间 /******************************************************************************\ Variables definitions \******************************************************************************/ -/*耳机通道选择*/ - -#define TWS_VOL 0x04 -#define TWS_VOR 0x05 -#define TWS_BOX 0x02 -#define TWS_PC 0x03 - -#if JIELI - -/*耳机通道选择*/ -typedef enum { - - VOL_CHAN = 0x00, - - VOR_CHAN = 0x01, - - VOX_BOTH = 0xFF, - -}e_Vox_Chan; - -/*耳机和充电仓进行双向通讯的协议命令ID。*/ - typedef enum _VOX_BES_COMMAND_E -{ - - VHOUSE_CMD_PAIR = 0x01, //充电仓发起的配对信息 - - VHOUSE_CMD_EXCH_TWS_BTADDR = 0x02, //交换对耳的蓝牙地址信息。 - - VHOUSE_CMD_CLEAR_PAIR = 0x03, //清配对信息 - - VHOUSE_CMD_OPEN_BOX = 0x06, //开盖获取电量包 - - VHOUSE_CMD_CLOSE_WIN_GET_VBAT = 0x07, //关盖获取电量包 - - VHOUSE_CMD_RST = 0x08, // - - VHOUSE_CMD_PWROFF = 0x80, //关机消息 - - VHOUSE_CMD_CLOSE_BOX = 0x81, - - BES_RESET = 0xE1, - -}VOX_BES_COMMAND_E; - -#elif ZHONGKE - - /*耳机通道选择*/ - typedef enum { - - VOL_CHAN = 0x11, - - VOR_CHAN = 0x22, - - VOX_BOTH = 0xff, - - }e_Vox_Chan; - - /*耳机和充电仓进行双向通讯的协议命令ID。*/ -typedef enum _VOX_BES_COMMAND_E -{ - VHOUSE_CMD_GET_VBAT = 0x01, //获取电池电量,也可作为开始标志 - - VHOUSE_CMD_PAIR, //充电仓发起的配对信息 - - VHOUSE_CMD_GET_TWS_BTADDR, //获取对耳的蓝牙地址信息,充电仓无需使用本命令,本命令为对耳相互转发,充电仓只作转发缓存,收到该命令后,copy给另一只对耳即可。 - - VHOUSE_CMD_CLEAR_PAIR, //清除配对信息 - - VHOUSE_CMD_PWROFF, //关机消息 - - VHOUSE_CMD_ERR, //接收消息错误 - - VHOUSE_CMD_SUCCESS, //成功响应 - - VHOUSE_CMD_CLOSE_WINDOW, //关盖 - - VHOUSE_CMD_OPEN_WINDOW, //开盖 - - VHOUSE_CMD_CLOSE_WIN_GET_VBAT, //关盖获取电量包 - - VHOUSE_CMD_ENABLE_POPUP = 0x80, //开关弹窗功能控制 - - VHOUSE_CMD_CUSTOM_RESV1 = 0xE0, //客户保留指令 - - BES_RESET = 0xE1, - - VHOUSE_CMD_CUSTOM_RESV_END = 0xEF, - - VHOUSE_CMD_SYS_RST = 0xFF, //系统复位指令 - -}VOX_BES_COMMAND_E; - -#elif XUANHENG - - /*耳机通道选择*/ - -#define TWS_VOL 0x04 -#define TWS_VOR 0x05 -#define TWS_BOX 0x02 -#define TWS_PC 0x03 - -typedef enum { - - VOL_CHAN = 0x24, - - VOR_CHAN = 0x25, - - VOX_BOTH = 0x21, - -}e_Vox_Chan; - - /*耳机和充电仓进行双向通讯的协议命令ID。*/ -typedef enum _VOX_BES_COMMAND_E -{ - CMD_SHUT_DOWN = 0x0005, //关机 - - CMD_TWS_GET_BTADDR = 0x0037, //获取对耳MAC地址 - - CMD_TWS_SET_BTADDR = 0x000A, //写入对耳MAC地址 - - CMD_CLEAR_PAIR = 0x000B, //清除配对记录 - - CMD_HEARTBEAT = 0x000D, //心跳包 - - CMD_SN = 0x000E, //写入SN码到耳机 - - CMD_GET_INTO_PAIR = 0x000F, //耳机进入配对状态 - - CMD_PAIRING_IMD = 0x0011, //立即执行TWS配对 - - BES_RESET, //耳机复位Pattern - -}VOX_BES_COMMAND_E; - -#endif - -/* Vox Channel Select. */ -typedef enum { - - VOL_CHAN_SET = 0x00, - - VOR_CHAN_SET = 0x01, - - VOX_BOTH_SET = 0x02, - -}e_Vox_Chan_Set; /* Vox Follow Charge State. */ typedef enum { @@ -496,18 +353,11 @@ typedef enum { extern bit Cover_Open_Flag; extern bit Vox_Ocp_Flag; + extern bit Boost_Open_Flag; extern bit OpenCover_TX_Cmd_Flag; -#ifdef VOX_RX - -extern uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态,VOL:低4bit;VOR:高4bit。0是无效,1是正在配对,2是配对成功,3不处理,保持当前状态。 - -extern uint8_t Vox_Get_BES_Addr_Flag[2] ; - -#endif - #if VOX_FOLLOW_CHG typedef struct { @@ -551,11 +401,10 @@ extern g_Vox_Fllow_Chg_Cfg xdata Vox_Fllow_Chg; UserCfg.Functions definitions \******************************************************************************/ -extern void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select); - #ifdef VOX_ADT_ENABLE extern void Vol_Det_Machine(void); + extern void Vor_Det_Machine(void); #else @@ -565,18 +414,23 @@ extern void Vox_Det_Machine(void); #endif #if VOX_FOLLOW_CHG + extern void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ); + #endif #ifdef VOX_ADT_ENABLE + extern void VOL_EN_Type(VOX_Enable_Mode_e VOX_Enable_Mode); + extern void VOR_EN_Type(VOX_Enable_Mode_e VOX_Enable_Mode); + #else + extern void VOX_EN_Type(VOX_Enable_Mode_e VOX_Enable_Mode); + #endif -#ifdef VOX_RX -extern void HandleVoxCommMsg(void); -#endif + #endif diff --git a/UsrSrc/charger/charger_module.c b/UsrSrc/charger/charger_module.c index 5f69b84..b7e2d0c 100644 --- a/UsrSrc/charger/charger_module.c +++ b/UsrSrc/charger/charger_module.c @@ -50,6 +50,8 @@ uint8_t gConstant_Cur_Max_Setting; //Charge idata s_gCharger_Cfg gCharge_Cfg; +uint16_t VFloat_Value; + /******************************************************************************\ Functions definitions \******************************************************************************/ @@ -71,17 +73,11 @@ idata s_gCharger_Cfg gCharge_Cfg; void Charger_Init(void) { - - SFRADDR = PMU_CTL7; //开启VBUS OV检测使能 - SFRDATA |= 0x20; -#ifdef SY8838Q //合封OVP芯片SY8838Q +#ifdef SY8837 //非合封OVP芯片SY8837 SFRADDR = PMU_CTL7; //合封芯片关闭VBUS OV检测使能 - SFRDATA &= ~0x20; - - SFRADDR = REG_CHG0; - SFRDATA |= CHG_VDPM_En; //合封关VDPM环 + SFRDATA |= 0x20; #endif @@ -99,11 +95,13 @@ void Charger_Init(void) gCharge_Cfg.nConstant_Cur = gConstant_Cur_Max_Setting; - gCharge_Cfg.nVFloat = VFLOAT_SET; + gCharge_Cfg.nVFloat = VFLOAT_SET; REG_CHG1 = gCharge_Cfg.nTrickle_Cur | gCharge_Cfg.nIterm_Cur | gCharge_Cfg.nConstant_Cur ; //设置Charger的涓流充电电流、截止充电电流、恒流CC。 REG_CHG2 = gCharge_Cfg.nVFloat; + + VFloat_Value = VFLOAT_VOLTAGE_SET; } #ifdef NTC_ENABLE @@ -164,7 +162,7 @@ uint8_t PMU_NTC_Handle(uint8_t Charge_sta) { NTC_250mA_Chg_Flag = TRUE; - gCharge_Cfg.nConstant_Cur = gConstant_Cur_Max_Setting / 2; + gCharge_Cfg.nConstant_Cur = CONSTANT_JEITA_COLD; if( NTC_500mA_Chg_Flag ) { @@ -199,7 +197,7 @@ uint8_t PMU_NTC_Handle(uint8_t Charge_sta) } else { - gCharge_Cfg.nConstant_Cur = gConstant_Cur_Max_Setting / 2; + gCharge_Cfg.nConstant_Cur = CONSTANT_JEITA_COLD; } } @@ -579,14 +577,8 @@ void Charger_Handler(void) if( IRQ_FLAG9 & CHG_Complete ) //Charg complete interrupt { #if ADC_ENABLE - if( gCharge_Cfg.nVFloat == CHG_VFLOAT_4_200V ) - { - nCVFloat = 4200; - } - else - { - nCVFloat = 4000; - } + + nCVFloat = VFloat_Value; //浮充电压实际电压值。 if( g_Vbat_Adc < ( nCVFloat - BAT_RECHARG_THD ) ) //仓复充 { diff --git a/UsrSrc/comm/vox_comm.c b/UsrSrc/comm/vox_comm.c new file mode 100644 index 0000000..0067f89 --- /dev/null +++ b/UsrSrc/comm/vox_comm.c @@ -0,0 +1,970 @@ +/* + ****************************************************************************** + * + * @file vox_comm.c + * @brief VOX Communicate module + * @ic sy8837/8/9 + * + * @version 1.0 + * @date 2025/02/13 017:40:40 + * @author Alex Xu + * + * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd. + * All Rights Reserved + * + * History: + * Revision Date Author Desc + * 1.0.0 2025/02/13 Alex build this file + ****************************************************************************** + */ + /*_____ I N C L U D E S ____________________________________________________*/ +#include "vox_module.h" +#include "vox_comm.h" +#include "system.h" +#include "vox_comm.h" +#include "bat.h" +#include "hall.h" + +/******************************************************************************\ + Macro definitions +\******************************************************************************/ +#define MAX_PACKET_SIZE 0x20 + +/******************************************************************************\ + Variables definitions +\******************************************************************************/ + +#if XUANHENG + +idata uint8_t Vox_Pairing_State[2]; //耳机配对状态,0是无效,1是正在配对,2是配对成功,3不处理,保持当前状态。 + +uint8_t Vox_Set_BES_Addr_Flag[2]; + +idata uint8_t BES_Addr[6]; //蓝牙耳机地址,Vox_Bes_Addr[0][6]:VOL;Vox_Bes_Addr[1][6]:VOR + +idata uint8_t Random_Data[8]; + +uint8_t Bes_Bet_Level[2]; //对耳电池电量信息,Bes_Bet_Level[0]:左耳;Bes_Bet_Level[1]:右耳 + +uint8_t Bes_Chg_Full[2]; //对耳硬件是否满电:0非满电;1:满电。 + +uint8_t Tws_Paired_Record[2]; //TWS配对记录;0:有TWS配对记录;1:没有TWS配对记录; + +uint8_t Phone_Paired_Record[2]; //手机配对记录;0:有与手机配对记录;1:没有和手机配对记录。 + +uint8_t Bes_OTA_State[2]; //耳机静默升级状态;1:有;0:没有 + +uint8_t Bes_Set_SN_State[2]; //耳机应答仓写入SN是否成功。1:成功;0:失败 + +uint8_t Bes_In_Pair_State[2]; //耳机进入配对状态标志位 + +uint8_t Vox_Clear_Pair_Flag[2]; + +bit Vol_Bes_Addr_Flag; + +bit Vor_Bes_Addr_Flag; + +idata uint8_t SN_Num[22]; //SN码,需要从OTP的固定位置获取。 + +idata uint8_t SN_Num_Start; //SN码发送起始位置,有开盖动作时清零。 + +bit gShip_Mode_Flag; //船运模式标志位:0:正常关机;1:船运模式 + +#elif JIELI + +uint8_t Vox_Type; + +uint8_t Net_Info[2][13]; + +idata uint8_t MAC_Addr[2][18]; + +uint8_t Earphone_Vbat[2]; //对耳电量 + +#endif + + +#ifdef VOX_RX + +uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态,VOL:低4bit;VOR:高4bit。0是无效,1是正在配对,2是配对成功,3不处理,保持当前状态。 +uint8_t Vox_Get_BES_Addr_Flag[2]; +//idata uint8_t BES_Addr[6] = {0}; //蓝牙耳机地址,Vox_Bes_Addr[0][6]:VOL;Vox_Bes_Addr[1][6]:VOR + +#endif + +/******************************************************************************\ + Functions definitions +\******************************************************************************/ +#if XUANHENG + + /* + ******************************************************************************* + * u16 CalCheckCrc16(u8 * pucFrame, u16 usLen) + * + * Description : 校验和的计算(CRC-16-CCITT-FALSE) + * + * + * Arguments : u8 *pucFrame: 数据存放地址 + u16 usLen: 数据长度, 以byte为单位 + + * Returns : + * + * Notes : + * + ******************************************************************************* + */ + + uint16_t CalCheckCrc16(uint8_t *pucFrame, unsigned int usLen) +{ + uint16_t wCRCin = 0xFFFF; + uint16_t wCPoly = 0x1021; + uint8_t wChar = 0; + unsigned int i; + + while (usLen--) + { + + wChar = *(pucFrame++); + + wCRCin ^= (wChar << 8); + + for(i = 0;i < 8;i++) + { + if(wCRCin & 0x8000) + { + wCRCin = (wCRCin << 1) ^ wCPoly; + } + else + { + wCRCin = wCRCin << 1; + } + } + } + + return (wCRCin); +} + +#else + + /* + ******************************************************************************* + * uint8_t Crc8Maxim(u8 *buf, u8 length) + * + * Description : 校验和的计算 + * + * + * Arguments : u8 *buf: 数据存放地址 + u8 length: 数据长度, 以byte为单位 + + * Returns : + * + * Notes : + * + ******************************************************************************* + */ + uint8_t Crc8Maxim(u8 *buf, u8 length) + { + u8 i; + u8 crc = 0; + while(length--) + { + crc ^= *buf++; + for(i=0;i<8;i++) + { + if( crc&1 ) + { + crc = (crc >> 1)^0x8c; + } + else + { + crc >>= 1; + } + } + } + return crc; + } + +#endif + +#ifdef VOX_TX +/* + ******************************************************************************* + * void HandleTxCommand(VOX_BES_COMMAND_E RxCommand, e_Vox_Chan nVox_Chn_Select) + * + * Description : 发送数据包的封装,并打开相应的双向通信通道 + * Command payload + * Header checksum side cmd len Data + * 1bytes 1byte 1byte 1byte 1byte Len bytes + + * + * Arguments : VOX_BES_COMMAND_E TxCommand: , e_Vox_Chan nVox_Chn_Select + + * Returns : + * + * Notes : + * + ******************************************************************************* +*/ +void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) +{ + uint16_t dataLen = 0; + + uint8_t tx_pData[COM1_Data_Lenth] = 0; + + uint8_t i = 0; + +#if JIELI + + /*数据包头*/ + tx_pData[0] = 0x00; + tx_pData[1] = BOXHEADER>>8; + tx_pData[2] = BOXHEADER; + /*指令编号*/ + tx_pData[4] = TxCommand; + + Vox_Type = nVox_Chn_Select; + + switch(TxCommand) + { + case VHOUSE_CMD_PAIR: + /*Data Length*/ + tx_pData[3] = 0x02; + + if( nVox_Chn_Select == VOL_CHAN ) + { + tx_pData[5] = 0x02; + + Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0; + } + else + if( nVox_Chn_Select == VOR_CHAN ) + { + tx_pData[5] = 0x01; + + Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0; + } + + break; + + case VHOUSE_CMD_EXCH_TWS_BTADDR: + /*Data Length*/ + 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<13;i++) + { + tx_pData[i] = Net_Info[nVox_Chn_Select][i]; + } + + break; + + case VHOUSE_CMD_CLEAR_PAIR: + /*Data Length*/ + tx_pData[3] = 0x02; + + tx_pData[5] = 0x03; + + break; + + case VHOUSE_CMD_CLOSE_WIN_GET_VBAT: //和开盖命令一样。 + + case VHOUSE_CMD_OPEN_BOX: //开盖获取电量命令 + /*Data Length*/ + tx_pData[3] = 0x05; + + tx_pData[5] = FW_VER; //Version + + tx_pData[6] = bat_level * 5; //电仓电量值 0~100; + + tx_pData[7] = MAX_PACKET_SIZE; //max_packet_size:0x20 + + if( nVox_Chn_Select == VOL_CHAN ) + { + if( Earphone_Vbat[VOL_CHAN] == 0 ) + { + tx_pData[8] = 0xFF; + } + else + { + tx_pData[8] = Earphone_Vbat[VOR_CHAN]; + } + } + else + if( nVox_Chn_Select == VOR_CHAN ) + { + if( Earphone_Vbat[VOR_CHAN] == 0 ) + { + tx_pData[8] = 0xFF; + } + else + { + tx_pData[8] = Earphone_Vbat[VOL_CHAN]; + } + } + + break; + + case VHOUSE_CMD_PWROFF: + /*Data Length*/ + tx_pData[3] = 0x01; + + break; + + case VHOUSE_CMD_CLOSE_BOX: //关盖指令 + /*Data Length*/ + tx_pData[3] = 0x02; + tx_pData[5] = EarPhone_Num; //耳机个数 + + break; + + default: + break; + } + + dataLen = 4 + tx_pData[3]; + + tx_pData[dataLen] = Crc8Maxim(tx_pData,dataLen); + +#elif ZHONGKE + + /*数据包头*/ + tx_pData[0] = BOXHEADER>>8; + tx_pData[1] = BOXHEADER; + /*充电仓识别码*/ + tx_pData[2] = BOXIDCODE; + /*耳机通道*/ + tx_pData[5] = nVox_Chn_Select; + /*指令编号*/ + tx_pData[3] = TxCommand; + + switch(TxCommand) + { + case VHOUSE_CMD_GET_VBAT: + + case VHOUSE_CMD_OPEN_WINDOW: + + case VHOUSE_CMD_CLOSE_WIN_GET_VBAT: + + /*Data Length*/ + tx_pData[4] = 0x03; + + tx_pData[6] = ( ( ChgStatus & CHG_STA_ING ) << 6 ) | bat_level; //bit 0~6 表示充电仓电量值 0~100;bit 7 为 1 表示在给充电仓充电,为 0 表示没有给充电仓充电; + + tx_pData[7] = 0x00; + + break; + + case VHOUSE_CMD_PAIR: //长按充电仓按键3s,充电仓发送配对指令。 + /* + 发送给右耳 CMD2,右耳接收到,发送 CMD3 指令给充电仓,充电仓 copy 该指令给 + 左耳,充电仓可随即发送 CMD2 指令给左耳,左耳会发送 CMD=0x03 给充电仓,充电仓直接 + copy CMD3 给右耳即可,右耳接收到发送 VHOUSE_CMD_SUCCES 指令给充电仓。 + */ + /*Data Length*/ + tx_pData[4] = 0x01; + + break; + + case VHOUSE_CMD_GET_TWS_BTADDR: //将收到的CMD3转发给对耳。 +#ifdef VOX_RX + for(i=0;i> 8; /*小端模式:低字节在前 + Bit0-7:命令号 + Bit8-14:预留 + Bit15:包类型 + 0:REQ + 1:ACK + */ + tx_pData[4] = CoverStatus; //开关盒状态 + + switch(TxCommand) + { + case CMD_TWS_GET_BTADDR: //获取耳机MAC地址 + /*Data Length*/ + tx_pData[5] = 0x00; //小端模式,低位在前,长2Bytes。 + tx_pData[6] = 0x00; +#ifdef VOX_RX + for(i=0;i<6;i++) + { + BES_Addr[i] = 0; //清本地耳机蓝牙地址。 + } +#endif + break; + + case CMD_TWS_SET_BTADDR: + /*Data Length*/ + tx_pData[5] = 0x0E; //小端模式,低位在前,长2Bytes。 + tx_pData[6] = 0x00; +#ifdef VOX_RX + for(i=0;i<6;i++) + { + tx_pData[7+i] = BES_Addr[i]; //发送耳机蓝牙地址。 + } +#endif + for(i=0;i<8;i++) + { + tx_pData[13+i] = Random_Data[i]; //发送随机数。 + } + + break; + + case CMD_SHUT_DOWN: + /*Data Length*/ + tx_pData[5] = 0x01; //小端模式,低位在前,长2Bytes。 + tx_pData[6] = 0x00; + + tx_pData[7] = gShip_Mode_Flag; //船运模式:0:正常关机;1:船运模式 + + break; + + case CMD_PAIRING_IMD: //立即执行TWS配对 + /*Data Length*/ + tx_pData[5] = 0x00; //小端模式,低位在前,长2Bytes。 + tx_pData[6] = 0x00; + + break; + + case CMD_CLEAR_PAIR: + /*Data Length*/ + tx_pData[5] = 0x00; //小端模式,低位在前,长2Bytes。 + tx_pData[6] = 0x00; + break; + + case CMD_HEARTBEAT: + /*Data Length*/ + tx_pData[5] = 0x05; //小端模式,低位在前,长2Bytes。 + tx_pData[6] = 0x00; + /* + data定义: + 1、D0、D1(2Bytes)构成充电盒的版本信息,D0的高4bit为充电盒硬件PCBA版本号,D0低4bit和D1构成充电盒软件版本号。 + 2、D2(1Byte)构成充电盒电量和充电状态,D2的bit7为是否有PG接入;D2的低7位表示充电盒电量信息,范围0-100; + 3、D3(1Byte)构成对耳电量信息,根据协议中的Side信息区分左右耳电量信息。 + 4、D4(1Byte)耳机静默升级,充电盒默认发0x00 + */ + tx_pData[7] = HW_VER << 4; + tx_pData[7] |= FW_VER >> 8; + tx_pData[8] = FW_VER; + + tx_pData[9] = ( ( ChgStatus & CHG_STA_ING ) << 6 ) | ( 5 * bat_level ); + + if(nVox_Chn_Select == VOL_CHAN) + { + tx_pData[10] = Bes_Bet_Level[0]; + } + else + if(nVox_Chn_Select == VOR_CHAN) + { + tx_pData[10] = Bes_Bet_Level[1]; + } + + tx_pData[11] = 0x00; + + break; + + case CMD_SN: //由于SN码较长,充电盒需分多次发送,D0表示充第几位开始发送,一次固定发送9Bytes。最后一包SN数据不够9Bytes的补0或0xff。 + /*Data Length*/ + tx_pData[5] = 0x0A; //小端模式,低位在前,长2Bytes。 + tx_pData[6] = 0x00; + + tx_pData[7] = SN_Num_Start; + + for(i=0;i<9;i++) + { + if( (SN_Num_Start + i) > 22 ) + { + tx_pData[8+i] = 0xFF; + } + else + { + tx_pData[8+i] = SN_Num[ SN_Num_Start + i ]; //发送随机数。 + } + } + + SN_Num_Start += 9; + + break; + + case CMD_GET_INTO_PAIR: + /*Data Length*/ + tx_pData[5] = 0x01; //小端模式,低位在前,长2Bytes。 + tx_pData[6] = 0x00; + + tx_pData[7] = 0x01; //01进入配对状态 + break; + + case BES_RESET: //复位patten + + return; + + default: + break; + } + + dataLen = (uint16_t)( tx_pData[5] | ( tx_pData[6] << 8 ) ) + 7; + + Checksum = CalCheckCrc16( tx_pData, dataLen ); //计算检验和 + + tx_pData[ dataLen ] = Checksum; + + tx_pData[ ++dataLen ] = Checksum >> 8; + +#endif + + /* vor、vol都使用uart1进行分时通讯,设置TX模式*/ +#ifdef VOX_ADT_ENABLE + + if(nVox_Chn_Select == VOL_CHAN) + { + VOL_EN_Type( VOX_COMM_Mode_Uart ); + } + else + { + VOR_EN_Type( VOX_COMM_Mode_Uart ); + } + +#else + + VOX_EN_Type( VOX_COMM_Mode_Uart ); + +#endif + + if(nVox_Chn_Select == VOL_CHAN) + { + COMM_CTL |= Vol_SWDT; + + COMM_CTL &= ~Vol_SWDR; + } + else + if(nVox_Chn_Select == VOR_CHAN) + { + COMM_CTL |= Vor_SWDT; + + COMM_CTL &= ~Vor_SWDR; + } + else + if(nVox_Chn_Select == VOX_BOTH) + { + COMM_CTL |= Vor_SWDT | Vol_SWDT; + + COMM_CTL &= ~( Vor_SWDR |Vol_SWDR ); + } + +#if UART1_ENABLE + Uart1SendPacket(dataLen + 2, tx_pData); +#endif + + /* 设置RX模式。 */ + if(nVox_Chn_Select == VOL_CHAN) + { + COMM_CTL &= ~ Vol_SWDT; + + COMM_CTL |= Vol_SWDR; + } + else + if(nVox_Chn_Select == VOR_CHAN) + { + COMM_CTL &= ~Vor_SWDT; + + COMM_CTL |= Vor_SWDR; + } + else + if(nVox_Chn_Select == VOX_BOTH) + { + COMM_CTL &= ~Vor_SWDT | Vol_SWDT; + + COMM_CTL |= ( Vor_SWDR |Vol_SWDR ); + } +} + +#endif + + +#ifdef VOX_RX + /* + ******************************************************************************* + * void HandleRxCommand(VOX_BES_COMMAND_E RxCommand) + * + * Description : 耳机端发送的数据包的解析及处理 + * Ack payload: + * Header checksum side cmd len Data + * 1bytes 1byte 1byte 1byte 1byte Len bytes + * + * Arguments : VOX_BES_COMMAND_E RxCommand: + + * Returns : + * + * Notes : + * + ******************************************************************************* +*/ +static void HandleRxMsg(VOX_BES_COMMAND_E RxCommand) +{ + uint8_t i = 0; + +#if JIELI + + switch(RxCommand) + { + case VHOUSE_CMD_PAIR: + + for(i=0;i<18;i++) + { + MAC_Addr[Vox_Type][i] = RX1_Buffer[4+i]; + } + + for(i=0;i<8;i++) + { + Net_Info[Vox_Type][i] = RX1_Buffer[22+i]; + } + + if( Vox_Type == VOL_CHAN ) //根据耳机Side参数 + { + Vox_Get_BES_Addr_Flag[VOL_TYPE] = 1; //获取左耳机发的CMD3 + } + else + { + Vox_Get_BES_Addr_Flag[VOR_TYPE] = 1; //获取右耳机发的CMD3 + } + + break; + + case VHOUSE_CMD_EXCH_TWS_BTADDR: + + break; + + case VHOUSE_CMD_OPEN_BOX: + + case VHOUSE_CMD_CLOSE_WIN_GET_VBAT: + + if( RX1_Buffer[4] == 0xE3 ) //根据耳机Side参数 + { + Vox_Get_Vbat_Flag[VOL_TYPE] = 1; //获取左耳机发的Vbat + + Earphone_Vbat[VOL_CHAN] = RX1_Buffer[5]; + } + else + { + Vox_Get_Vbat_Flag[VOR_TYPE] = 1; //获取右耳机发的Vbat + + Earphone_Vbat[VOR_CHAN] = RX1_Buffer[5]; + } + + break; + + case VHOUSE_CMD_CLOSE_BOX: + + break; + + case VHOUSE_CMD_PWROFF: + + break; + + default: + break; + } + +#elif ZHONGKE + + switch(RxCommand) + { + case VHOUSE_CMD_GET_VBAT: + + case VHOUSE_CMD_CLOSE_WINDOW: + + case VHOUSE_CMD_OPEN_WINDOW: + + case VHOUSE_CMD_CLOSE_WIN_GET_VBAT: + + break; + + case VHOUSE_CMD_SUCCESS: + + break; + + case VHOUSE_CMD_GET_TWS_BTADDR: + + if( RX1_Buffer[5] == VOL_CHAN ) //根据耳机Side参数 + { + Vox_Get_BES_Addr_Flag[VOL_TYPE] = 1; //获取左耳机发的CMD3 + } + else + { + Vox_Get_BES_Addr_Flag[VOR_TYPE] = 1; //获取右耳机发的CMD3 + } + + break; + + case VHOUSE_CMD_SYS_RST: //系统复位,耳机->充电仓 + + break; + + default: + break; + } + +#elif XUANHENG + + uint8_t CMD_Type = 0; + + CMD_Type = RX1_Buffer[1] >> 4; + if( CMD_Type & TWS_PC ) //PC/工装->盒子 + { + + } + else //耳机->盒子 + { + switch(RxCommand) + { + case CMD_TWS_GET_BTADDR: + + for(i=0;i> 7; //获取耳机是否满电 + + Vox_Pairing_State[VOL_TYPE] = RX1_Buffer[10]; //获取耳机配对状态; + + Tws_Paired_Record[VOL_TYPE] = RX1_Buffer[11] & 0x01; //bit0:0:有TWS配对记录;1:没有TWS配对记录;bit1:0:有与手机配对记录;1:没有和手机配对记录。 + + Phone_Paired_Record[VOL_TYPE] = ( RX1_Buffer[11] >> 1 ) & 0x01; + + Bes_OTA_State[VOL_TYPE] = RX1_Buffer[12]; + } + else + { + Bes_Bet_Level[VOR_TYPE] = RX1_Buffer[9] & 0x7F; + + Bes_Chg_Full[VOR_TYPE] = RX1_Buffer[9] >> 7; + + Vox_Pairing_State[VOR_TYPE] = RX1_Buffer[10]; + + Tws_Paired_Record[VOR_TYPE] = RX1_Buffer[11] & 0x01; + + Phone_Paired_Record[VOR_TYPE] = (RX1_Buffer[11] >> 1) & 0x01; + + Bes_OTA_State[VOR_TYPE] = RX1_Buffer[12]; + } + + break; + + case CMD_SN: + + if( CMD_Type == TWS_VOL ) //根据耳机Side参数 + { + Bes_Set_SN_State[VOL_TYPE] = RX1_Buffer[7]; //左耳机SN写入是否成功状态标志 + } + else + { + Bes_Set_SN_State[VOR_TYPE] = RX1_Buffer[7]; //右耳机SN写入是否成功状态标志 + } + + break; + + case CMD_GET_INTO_PAIR: + if( CMD_Type == TWS_VOL ) //根据耳机Side参数 + { + Bes_In_Pair_State[VOL_TYPE] = RX1_Buffer[7]; //左耳机是否进入配对状态成功状态标志 + } + else + { + Bes_In_Pair_State[VOR_TYPE] = RX1_Buffer[7]; //右耳机是否进入配对状态成功状态标志 + } + + break; + case CMD_PAIRING_IMD: + if( CMD_Type == TWS_VOL ) //根据耳机Side参数 + { + Bes_In_Pair_State[VOL_TYPE] = 1; //左耳机是否进入配对状态成功状态标志 + } + else + { + Bes_In_Pair_State[VOR_TYPE] = 1; //右耳机是否进入配对状态成功状态标志 + } + + break; + default: + break; + } + } + +#endif + +} + +/* +******************************************************************************* +* void HandleVoxCommMsg(void) +* +* Description : Vox 通讯功能处理函数,100ms定时调用。由于和耳机通信前需要打开耳机端的TRX功能,并且每次通信只能一只耳机。通过切换VOL/VOR通信开关进行通信 +* +* Arguments : NONE + +* Returns : NONE + +* Notes : NONE +* +******************************************************************************* +*/ + +void HandleVoxCommMsg(void) +{ + uint8_t i = 0; + +#if XUANHENG + + uint16_t CrcCheckSum = 0; + + uint16_t Data_Len = 0; + +#else + + uint8_t CrcCheckSum = 0; + +#endif + /*RX数据处理*/ + if( Uart1_RX_Finish_Flag ) + { + Uart1_RX_Finish_Flag = FALSE; + +#ifdef _DEBUG_VOX + printf("RX1_Buffer[0]:0x%x,RX1_Buffer[1]:0x%x,RX1_Buffer[2]:0x%x,RX1_Buffer[3]:0x%x,RX1_Buffer[4]:0x%x,RX1_Buffer[5]:0x%x,RX1_Buffer[6]:0x%x,line:%d\r\n",(u16)RX1_Buffer[0],(u16)RX1_Buffer[1],(u16)RX1_Buffer[2],(u16)RX1_Buffer[3],(u16)RX1_Buffer[4],(u16)RX1_Buffer[5],(u16)RX1_Buffer[6],(u16)__LINE__); +#endif + +#if JIELI + + CrcCheckSum = Crc8Maxim(RX1_Buffer, RX1_Buffer[2] + 3); //求校验和 + + if( CrcCheckSum == RX1_Buffer[RX1_Buffer[2] + 3] ) + +#elif ZHONGKE + + CrcCheckSum = Crc8Maxim( RX1_Buffer, RX1_Buffer[4] + 5 ); + + if( CrcCheckSum == RX1_Buffer[ RX1_Buffer[4] + 5 ] ) + +#elif XUANHENG + + Data_Len = RX1_Buffer[5] | ( RX1_Buffer[6] << 8 ) + 7; + + CrcCheckSum = CalCheckCrc16( RX1_Buffer, Data_Len); //计算检验和 + + if( CrcCheckSum == (uint16_t)(RX1_Buffer[ Data_Len + 1 ] | RX1_Buffer[ Data_Len + 2 ] << 8) ) //校验和小端模式,低位在前。 + +#endif + { +#if XUANHENG + + HandleRxMsg((VOX_BES_COMMAND_E)RX1_Buffer[2]); + +#else + + HandleRxMsg((VOX_BES_COMMAND_E)RX1_Buffer[3]); + +#endif + } + else + { + return; + } + } +} + + +#endif diff --git a/UsrSrc/key/key.c b/UsrSrc/key/key.c index 5f8d96c..a2b4bf3 100644 --- a/UsrSrc/key/key.c +++ b/UsrSrc/key/key.c @@ -28,6 +28,7 @@ #include "hall.h" #include "discharge_module.h" #include "display_ui.h" +#include "vox_comm.h" #if KEY_ENABLE /******************************************************************************\ diff --git a/UsrSrc/system/system.c b/UsrSrc/system/system.c index 5348d2f..ebf32d3 100644 --- a/UsrSrc/system/system.c +++ b/UsrSrc/system/system.c @@ -163,12 +163,15 @@ void System_Init(void) WakeUp_Init_Set(); #endif Decnt_SleepDelay = ENTER_STANDBYMODE_CNT; + Boost_Open_Flag = FALSE; + #ifdef VOX_ADT_ENABLE Vol_GetOut_Box_Flag = TRUE; Vor_GetOut_Box_Flag = TRUE; #endif + Systerm_State.Next_State = POWER_ON_STATE; } diff --git a/UsrSrc/userapp/userapp.c b/UsrSrc/userapp/userapp.c index 830e9e1..d56b0b0 100644 --- a/UsrSrc/userapp/userapp.c +++ b/UsrSrc/userapp/userapp.c @@ -31,6 +31,7 @@ #include "led.h" #include "vox_module.h" #include "display_ui.h" +#include "vox_comm.h" /******************************************************************************\ Macro definitions diff --git a/UsrSrc/vox/vox_module.c b/UsrSrc/vox/vox_module.c index 87f6d24..a3d84da 100644 --- a/UsrSrc/vox/vox_module.c +++ b/UsrSrc/vox/vox_module.c @@ -1,4 +1,4 @@ -/* +#include "vox_comm.h"/* ****************************************************************************** * * @file vox_module.c @@ -26,9 +26,9 @@ #include "hall.h" #include "key.h" #include "sys_tim.h" -#include "sys_tim.h" #include "adc.h" #include "userapp.h" +#include "vox_comm.h" #ifdef VOX_COVER_ENABLE @@ -58,8 +58,6 @@ bit Vox_Output_Short_Flag; #define Vox_COM_MSG_Tim 20 -#define MAX_PACKET_SIZE 0x20 - #if VOX_FOLLOW_CHG #define VOX_FOLLOW_CHG_NOWCURCHK_CNT 5 @@ -82,68 +80,12 @@ e_Vox_Follow_Chg_Sta Follow_Chg_Sta; #endif -#ifdef VOX_RX - -uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态,VOL:低4bit;VOR:高4bit。0是无效,1是正在配对,2是配对成功,3不处理,保持当前状态。 -uint8_t Vox_Get_BES_Addr_Flag[2]; -//idata uint8_t BES_Addr[6] = {0}; //蓝牙耳机地址,Vox_Bes_Addr[0][6]:VOL;Vox_Bes_Addr[1][6]:VOR - -#endif - uint8_t EarPhone_Num; bit Vox_Ocp_Flag; bit OpenCover_TX_Cmd_Flag; -#if XUANHENG - -idata uint8_t Vox_Pairing_State[2]; //耳机配对状态,0是无效,1是正在配对,2是配对成功,3不处理,保持当前状态。 - -uint8_t Vox_Set_BES_Addr_Flag[2]; - -idata uint8_t BES_Addr[6]; //蓝牙耳机地址,Vox_Bes_Addr[0][6]:VOL;Vox_Bes_Addr[1][6]:VOR - -idata uint8_t Random_Data[8]; - -uint8_t Bes_Bet_Level[2]; //对耳电池电量信息,Bes_Bet_Level[0]:左耳;Bes_Bet_Level[1]:右耳 - -uint8_t Bes_Chg_Full[2]; //对耳硬件是否满电:0非满电;1:满电。 - -uint8_t Tws_Paired_Record[2]; //TWS配对记录;0:有TWS配对记录;1:没有TWS配对记录; - -uint8_t Phone_Paired_Record[2]; //手机配对记录;0:有与手机配对记录;1:没有和手机配对记录。 - -uint8_t Bes_OTA_State[2]; //耳机静默升级状态;1:有;0:没有 - -uint8_t Bes_Set_SN_State[2]; //耳机应答仓写入SN是否成功。1:成功;0:失败 - -uint8_t Bes_In_Pair_State[2]; //耳机进入配对状态标志位 - -uint8_t Vox_Clear_Pair_Flag[2]; - -bit Vol_Bes_Addr_Flag; - -bit Vor_Bes_Addr_Flag; - -idata uint8_t SN_Num[22]; //SN码,需要从OTP的固定位置获取。 - -idata uint8_t SN_Num_Start; //SN码发送起始位置,有开盖动作时清零。 - -bit gShip_Mode_Flag; //船运模式标志位:0:正常关机;1:船运模式 - -#elif JIELI - -uint8_t Vox_Type; - -uint8_t Net_Info[2][13]; - -idata uint8_t MAC_Addr[2][18]; - -uint8_t Earphone_Vbat[2]; //对耳电量 - -#endif - /******************************************************************************\ Functions definitions \******************************************************************************/ @@ -179,8 +121,8 @@ uint8_t Earphone_Vbat[2]; // case VOX_COMM_Mode_Uart: - COMM_CTL |= Vol_EN_COMR | Vol_SWDR; //开启VOX通讯使能,选择UART通讯模式。 - COMM_CTL &= ~( Vol_SW_MD | Vol_SWDT ); + COMM_CTL |= Vol_EN_COMR | Vol_SWDT; //开启VOX通讯使能,选择UART通讯模式。 + COMM_CTL &= ~( Vol_SW_MD | Vol_SWDR); SFRADDR = COMM_CON; //Vox通讯电平选择,3.0V,打开50K上拉电阻。 SFRDATA &= ~0x0D; @@ -266,8 +208,8 @@ uint8_t Earphone_Vbat[2]; // case VOX_COMM_Mode_Uart: - COMM_CTL |= Vor_EN_COMR | Vor_SWDR ; //开启VOX通讯使能,选择UART通讯模式。 - COMM_CTL &= ~( Vor_SW_MD | Vor_SWDT ); + COMM_CTL |= Vor_EN_COMR | Vor_SWDT; //开启VOX通讯使能,选择UART通讯模式。 + COMM_CTL &= ~( Vor_SW_MD | Vor_SWDR ); SFRADDR = COMM_CON; //Vox通讯电平选择,3.0V,打开50K上拉电阻。 SFRDATA &= ~0x0D; @@ -353,8 +295,8 @@ uint8_t Earphone_Vbat[2]; // case VOX_COMM_Mode_Uart: - COMM_CTL |= Vor_EN_COMR | Vol_EN_COMR | Vol_SWDR | Vor_SWDR ; //开启VOX通讯使能,选择UART通讯模式。 - COMM_CTL &= ~( Vor_SW_MD | Vol_SW_MD | Vol_SWDT | Vor_SWDT ); + COMM_CTL |= Vor_EN_COMR | Vol_EN_COMR | Vol_SWDT | Vor_SWDT; //开启VOX通讯使能,选择UART通讯模式。 + COMM_CTL &= ~( Vor_SW_MD | Vol_SW_MD | Vol_SWDR | Vor_SWDR ); SFRADDR = COMM_CON; //Vox通讯电平选择,3.0V,打开50K上拉电阻。 SFRDATA &= ~0x0D; @@ -773,7 +715,7 @@ void Vor_Det_Machine(void) case VOX_STAY_IN_BOX: //耳机在仓 - if ( ( CHIP_STA1 & ( VOR_LoadOn | VOR_Ioff ) ) == VOR_Ioff ) //充电过程中出现只有IOFF,则出现如下三种情况:1、耳机出仓;2、耳机电池充满;3、耳机电池锂保。 + if ( ( CHIP_STA1 & ( VOR_LoadOn | VOR_Ioff ) ) == ( VOR_LoadOn | VOR_Ioff ) ) //充电过程中出现只有IOFF,则出现如下三种情况:1、耳机出仓;2、耳机电池充满;3、耳机电池锂保。 { if( nVor_Intobox_Disp_Flag ) //Vor耳机在正常充电过程中,被拔出。 { @@ -2025,879 +1967,5 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) #endif -#if XUANHENG - - /* - ******************************************************************************* - * u16 CalCheckCrc16(u8 * pucFrame, u16 usLen) - * - * Description : 校验和的计算(CRC-16-CCITT-FALSE) - * - * - * Arguments : u8 *pucFrame: 数据存放地址 - u16 usLen: 数据长度, 以byte为单位 - - * Returns : - * - * Notes : - * - ******************************************************************************* - */ - - uint16_t CalCheckCrc16(uint8_t *pucFrame, unsigned int usLen) -{ - uint16_t wCRCin = 0xFFFF; - uint16_t wCPoly = 0x1021; - uint8_t wChar = 0; - unsigned int i; - - while (usLen--) - { - - wChar = *(pucFrame++); - - wCRCin ^= (wChar << 8); - - for(i = 0;i < 8;i++) - { - if(wCRCin & 0x8000) - { - wCRCin = (wCRCin << 1) ^ wCPoly; - } - else - { - wCRCin = wCRCin << 1; - } - } - } - - return (wCRCin); -} - -#else - - /* - ******************************************************************************* - * uint8_t Crc8Maxim(u8 *buf, u8 length) - * - * Description : 校验和的计算 - * - * - * Arguments : u8 *buf: 数据存放地址 - u8 length: 数据长度, 以byte为单位 - - * Returns : - * - * Notes : - * - ******************************************************************************* - */ - uint8_t Crc8Maxim(u8 *buf, u8 length) - { - u8 i; - u8 crc = 0; - while(length--) - { - crc ^= *buf++; - for(i=0;i<8;i++) - { - if( crc&1 ) - { - crc = (crc >> 1)^0x8c; - } - else - { - crc >>= 1; - } - } - } - return crc; - } - -#endif - -#ifdef VOX_TX -/* - ******************************************************************************* - * void HandleTxCommand(VOX_BES_COMMAND_E RxCommand, e_Vox_Chan nVox_Chn_Select) - * - * Description : 发送数据包的封装,并打开相应的双向通信通道 - * Command payload - * Header checksum side cmd len Data - * 1bytes 1byte 1byte 1byte 1byte Len bytes - - * - * Arguments : VOX_BES_COMMAND_E TxCommand: , e_Vox_Chan nVox_Chn_Select - - * Returns : - * - * Notes : - * - ******************************************************************************* -*/ -void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) -{ - uint16_t dataLen = 0; - - uint8_t tx_pData[COM1_Data_Lenth] = 0; - - uint8_t i = 0; - -#if JIELI - - /*数据包头*/ - tx_pData[0] = 0x00; - tx_pData[1] = BOXHEADER>>8; - tx_pData[2] = BOXHEADER; - /*指令编号*/ - tx_pData[4] = TxCommand; - - Vox_Type = nVox_Chn_Select; - - switch(TxCommand) - { - case VHOUSE_CMD_PAIR: - /*Data Length*/ - tx_pData[3] = 0x02; - - if( nVox_Chn_Select == VOL_CHAN ) - { - tx_pData[5] = 0x02; - - Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0; - } - else - if( nVox_Chn_Select == VOR_CHAN ) - { - tx_pData[5] = 0x01; - - Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0; - } - - break; - - case VHOUSE_CMD_EXCH_TWS_BTADDR: - /*Data Length*/ - 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<13;i++) - { - tx_pData[i] = Net_Info[nVox_Chn_Select][i]; - } - - break; - - case VHOUSE_CMD_CLEAR_PAIR: - /*Data Length*/ - tx_pData[3] = 0x02; - - tx_pData[5] = 0x03; - - break; - - case VHOUSE_CMD_CLOSE_WIN_GET_VBAT: //和开盖命令一样。 - - case VHOUSE_CMD_OPEN_BOX: //开盖获取电量命令 - /*Data Length*/ - tx_pData[3] = 0x05; - - tx_pData[5] = FW_VER; //Version - - tx_pData[6] = bat_level * 5; //电仓电量值 0~100; - - tx_pData[7] = MAX_PACKET_SIZE; //max_packet_size:0x20 - - if( nVox_Chn_Select == VOL_CHAN ) - { - if( Earphone_Vbat[VOL_CHAN] == 0 ) - { - tx_pData[8] = 0xFF; - } - else - { - tx_pData[8] = Earphone_Vbat[VOR_CHAN]; - } - } - else - if( nVox_Chn_Select == VOR_CHAN ) - { - if( Earphone_Vbat[VOR_CHAN] == 0 ) - { - tx_pData[8] = 0xFF; - } - else - { - tx_pData[8] = Earphone_Vbat[VOL_CHAN]; - } - } - - break; - - case VHOUSE_CMD_PWROFF: - /*Data Length*/ - tx_pData[3] = 0x01; - - break; - - case VHOUSE_CMD_CLOSE_BOX: //关盖指令 - /*Data Length*/ - tx_pData[3] = 0x02; - tx_pData[5] = EarPhone_Num; //耳机个数 - - break; - - default: - break; - } - - dataLen = 4 + tx_pData[3]; - - tx_pData[dataLen] = Crc8Maxim(tx_pData,dataLen); - -#elif ZHONGKE - - /*数据包头*/ - tx_pData[0] = BOXHEADER>>8; - tx_pData[1] = BOXHEADER; - /*充电仓识别码*/ - tx_pData[2] = BOXIDCODE; - /*耳机通道*/ - tx_pData[5] = nVox_Chn_Select; - /*指令编号*/ - tx_pData[3] = TxCommand; - - switch(TxCommand) - { - case VHOUSE_CMD_GET_VBAT: - - case VHOUSE_CMD_OPEN_WINDOW: - - case VHOUSE_CMD_CLOSE_WIN_GET_VBAT: - - /*Data Length*/ - tx_pData[4] = 0x03; - - tx_pData[6] = ( ( ChgStatus & CHG_STA_ING ) << 6 ) | bat_level; //bit 0~6 表示充电仓电量值 0~100;bit 7 为 1 表示在给充电仓充电,为 0 表示没有给充电仓充电; - - tx_pData[7] = 0x00; - - break; - - case VHOUSE_CMD_PAIR: //长按充电仓按键3s,充电仓发送配对指令。 - /* - 发送给右耳 CMD2,右耳接收到,发送 CMD3 指令给充电仓,充电仓 copy 该指令给 - 左耳,充电仓可随即发送 CMD2 指令给左耳,左耳会发送 CMD=0x03 给充电仓,充电仓直接 - copy CMD3 给右耳即可,右耳接收到发送 VHOUSE_CMD_SUCCES 指令给充电仓。 - */ - /*Data Length*/ - tx_pData[4] = 0x01; - - break; - - case VHOUSE_CMD_GET_TWS_BTADDR: //将收到的CMD3转发给对耳。 -#ifdef VOX_RX - for(i=0;i> 8; /*小端模式:低字节在前 - Bit0-7:命令号 - Bit8-14:预留 - Bit15:包类型 - 0:REQ - 1:ACK - */ - tx_pData[4] = CoverStatus; //开关盒状态 - - switch(TxCommand) - { - case CMD_TWS_GET_BTADDR: //获取耳机MAC地址 - /*Data Length*/ - tx_pData[5] = 0x00; //小端模式,低位在前,长2Bytes。 - tx_pData[6] = 0x00; -#ifdef VOX_RX - for(i=0;i<6;i++) - { - BES_Addr[i] = 0; //清本地耳机蓝牙地址。 - } -#endif - break; - - case CMD_TWS_SET_BTADDR: - /*Data Length*/ - tx_pData[5] = 0x0E; //小端模式,低位在前,长2Bytes。 - tx_pData[6] = 0x00; -#ifdef VOX_RX - for(i=0;i<6;i++) - { - tx_pData[7+i] = BES_Addr[i]; //发送耳机蓝牙地址。 - } -#endif - for(i=0;i<8;i++) - { - tx_pData[13+i] = Random_Data[i]; //发送随机数。 - } - - break; - - case CMD_SHUT_DOWN: - /*Data Length*/ - tx_pData[5] = 0x01; //小端模式,低位在前,长2Bytes。 - tx_pData[6] = 0x00; - - tx_pData[7] = gShip_Mode_Flag; //船运模式:0:正常关机;1:船运模式 - - break; - - case CMD_PAIRING_IMD: //立即执行TWS配对 - /*Data Length*/ - tx_pData[5] = 0x00; //小端模式,低位在前,长2Bytes。 - tx_pData[6] = 0x00; - - break; - - case CMD_CLEAR_PAIR: - /*Data Length*/ - tx_pData[5] = 0x00; //小端模式,低位在前,长2Bytes。 - tx_pData[6] = 0x00; - break; - - case CMD_HEARTBEAT: - /*Data Length*/ - tx_pData[5] = 0x05; //小端模式,低位在前,长2Bytes。 - tx_pData[6] = 0x00; - /* - data定义: - 1、D0、D1(2Bytes)构成充电盒的版本信息,D0的高4bit为充电盒硬件PCBA版本号,D0低4bit和D1构成充电盒软件版本号。 - 2、D2(1Byte)构成充电盒电量和充电状态,D2的bit7为是否有PG接入;D2的低7位表示充电盒电量信息,范围0-100; - 3、D3(1Byte)构成对耳电量信息,根据协议中的Side信息区分左右耳电量信息。 - 4、D4(1Byte)耳机静默升级,充电盒默认发0x00 - */ - tx_pData[7] = HW_VER << 4; - tx_pData[7] |= FW_VER >> 8; - tx_pData[8] = FW_VER; - - tx_pData[9] = ( ( ChgStatus & CHG_STA_ING ) << 6 ) | ( 5 * bat_level ); - - if(nVox_Chn_Select == VOL_CHAN) - { - tx_pData[10] = Bes_Bet_Level[0]; - } - else - if(nVox_Chn_Select == VOR_CHAN) - { - tx_pData[10] = Bes_Bet_Level[1]; - } - - tx_pData[11] = 0x00; - - break; - - case CMD_SN: //由于SN码较长,充电盒需分多次发送,D0表示充第几位开始发送,一次固定发送9Bytes。最后一包SN数据不够9Bytes的补0或0xff。 - /*Data Length*/ - tx_pData[5] = 0x0A; //小端模式,低位在前,长2Bytes。 - tx_pData[6] = 0x00; - - tx_pData[7] = SN_Num_Start; - - for(i=0;i<9;i++) - { - if( (SN_Num_Start + i) > 22 ) - { - tx_pData[8+i] = 0xFF; - } - else - { - tx_pData[8+i] = SN_Num[ SN_Num_Start + i ]; //发送随机数。 - } - } - - SN_Num_Start += 9; - - break; - - case CMD_GET_INTO_PAIR: - /*Data Length*/ - tx_pData[5] = 0x01; //小端模式,低位在前,长2Bytes。 - tx_pData[6] = 0x00; - - tx_pData[7] = 0x01; //01进入配对状态 - break; - - case BES_RESET: //复位patten - - return; - - default: - break; - } - - dataLen = (uint16_t)( tx_pData[5] | ( tx_pData[6] << 8 ) ) + 7; - - Checksum = CalCheckCrc16( tx_pData, dataLen ); //计算检验和 - - tx_pData[ dataLen ] = Checksum; - - tx_pData[ ++dataLen ] = Checksum >> 8; - -#endif - - /* vor、vol都使用uart1进行分时通讯,设置TX模式*/ -#ifdef VOX_ADT_ENABLE - - if(nVox_Chn_Select == VOL_CHAN) - { - VOL_EN_Type( VOX_COMM_Mode_Uart ); - } - else - { - VOR_EN_Type( VOX_COMM_Mode_Uart ); - } - -#else - - VOX_EN_Type( VOX_COMM_Mode_Uart ); - -#endif - - if(nVox_Chn_Select == VOL_CHAN) - { - COMM_CTL |= Vol_SWDT; - - COMM_CTL &= ~Vol_SWDR; - } - else - if(nVox_Chn_Select == VOR_CHAN) - { - COMM_CTL |= Vor_SWDT; - - COMM_CTL &= ~Vor_SWDR; - } - else - if(nVox_Chn_Select == VOX_BOTH) - { - COMM_CTL |= Vor_SWDT | Vol_SWDT; - - COMM_CTL &= ~( Vor_SWDR |Vol_SWDR ); - } - -#if UART1_ENABLE - Uart1SendPacket(dataLen + 2, tx_pData); -#endif - - /* 设置RX模式。 */ - if(nVox_Chn_Select == VOL_CHAN) - { - COMM_CTL &= ~ Vol_SWDT; - - COMM_CTL |= Vol_SWDR; - } - else - if(nVox_Chn_Select == VOR_CHAN) - { - COMM_CTL &= ~Vor_SWDT; - - COMM_CTL |= Vor_SWDR; - } - else - if(nVox_Chn_Select == VOX_BOTH) - { - COMM_CTL &= ~Vor_SWDT | Vol_SWDT; - - COMM_CTL |= ( Vor_SWDR |Vol_SWDR ); - } -} - -#endif - -#ifdef VOX_RX - /* - ******************************************************************************* - * void HandleRxCommand(VOX_BES_COMMAND_E RxCommand) - * - * Description : 耳机端发送的数据包的解析及处理 - * Ack payload: - * Header checksum side cmd len Data - * 1bytes 1byte 1byte 1byte 1byte Len bytes - * - * Arguments : VOX_BES_COMMAND_E RxCommand: - - * Returns : - * - * Notes : - * - ******************************************************************************* -*/ -void HandleRxMsg(VOX_BES_COMMAND_E RxCommand) -{ - uint8_t i = 0; - -#if JIELI - - switch(RxCommand) - { - case VHOUSE_CMD_PAIR: - - for(i=0;i<18;i++) - { - MAC_Addr[Vox_Type][i] = RX1_Buffer[4+i]; - } - - for(i=0;i<8;i++) - { - Net_Info[Vox_Type][i] = RX1_Buffer[22+i]; - } - - if( Vox_Type == VOL_CHAN ) //根据耳机Side参数 - { - Vox_Get_BES_Addr_Flag[VOL_TYPE] = 1; //获取左耳机发的CMD3 - } - else - { - Vox_Get_BES_Addr_Flag[VOR_TYPE] = 1; //获取右耳机发的CMD3 - } - - break; - - case VHOUSE_CMD_EXCH_TWS_BTADDR: - - break; - - case VHOUSE_CMD_OPEN_BOX: - - case VHOUSE_CMD_CLOSE_WIN_GET_VBAT: - - if( RX1_Buffer[4] == 0xE3 ) //根据耳机Side参数 - { - Vox_Get_Vbat_Flag[VOL_TYPE] = 1; //获取左耳机发的Vbat - - Earphone_Vbat[VOL_CHAN] = RX1_Buffer[5]; - } - else - { - Vox_Get_Vbat_Flag[VOR_TYPE] = 1; //获取右耳机发的Vbat - - Earphone_Vbat[VOR_CHAN] = RX1_Buffer[5]; - } - - break; - - case VHOUSE_CMD_CLOSE_BOX: - - break; - - case VHOUSE_CMD_PWROFF: - - break; - - default: - break; - } - -#elif ZHONGKE - - switch(RxCommand) - { - case VHOUSE_CMD_GET_VBAT: - - case VHOUSE_CMD_CLOSE_WINDOW: - - case VHOUSE_CMD_OPEN_WINDOW: - - case VHOUSE_CMD_CLOSE_WIN_GET_VBAT: - - break; - - case VHOUSE_CMD_SUCCESS: - - break; - - case VHOUSE_CMD_GET_TWS_BTADDR: - - if( RX1_Buffer[5] == VOL_CHAN ) //根据耳机Side参数 - { - Vox_Get_BES_Addr_Flag[VOL_TYPE] = 1; //获取左耳机发的CMD3 - } - else - { - Vox_Get_BES_Addr_Flag[VOR_TYPE] = 1; //获取右耳机发的CMD3 - } - - break; - - case VHOUSE_CMD_SYS_RST: //系统复位,耳机->充电仓 - - break; - - default: - break; - } - -#elif XUANHENG - - uint8_t CMD_Type = 0; - - CMD_Type = RX1_Buffer[1] >> 4; - if( CMD_Type & TWS_PC ) //PC/工装->盒子 - { - - } - else //耳机->盒子 - { - switch(RxCommand) - { - case CMD_TWS_GET_BTADDR: - - for(i=0;i> 7; //获取耳机是否满电 - - Vox_Pairing_State[VOL_TYPE] = RX1_Buffer[10]; //获取耳机配对状态; - - Tws_Paired_Record[VOL_TYPE] = RX1_Buffer[11] & 0x01; //bit0:0:有TWS配对记录;1:没有TWS配对记录;bit1:0:有与手机配对记录;1:没有和手机配对记录。 - - Phone_Paired_Record[VOL_TYPE] = ( RX1_Buffer[11] >> 1 ) & 0x01; - - Bes_OTA_State[VOL_TYPE] = RX1_Buffer[12]; - } - else - { - Bes_Bet_Level[VOR_TYPE] = RX1_Buffer[9] & 0x7F; - - Bes_Chg_Full[VOR_TYPE] = RX1_Buffer[9] >> 7; - - Vox_Pairing_State[VOR_TYPE] = RX1_Buffer[10]; - - Tws_Paired_Record[VOR_TYPE] = RX1_Buffer[11] & 0x01; - - Phone_Paired_Record[VOR_TYPE] = (RX1_Buffer[11] >> 1) & 0x01; - - Bes_OTA_State[VOR_TYPE] = RX1_Buffer[12]; - } - - break; - - case CMD_SN: - - if( CMD_Type == TWS_VOL ) //根据耳机Side参数 - { - Bes_Set_SN_State[VOL_TYPE] = RX1_Buffer[7]; //左耳机SN写入是否成功状态标志 - } - else - { - Bes_Set_SN_State[VOR_TYPE] = RX1_Buffer[7]; //右耳机SN写入是否成功状态标志 - } - - break; - - case CMD_GET_INTO_PAIR: - if( CMD_Type == TWS_VOL ) //根据耳机Side参数 - { - Bes_In_Pair_State[VOL_TYPE] = RX1_Buffer[7]; //左耳机是否进入配对状态成功状态标志 - } - else - { - Bes_In_Pair_State[VOR_TYPE] = RX1_Buffer[7]; //右耳机是否进入配对状态成功状态标志 - } - - break; - case CMD_PAIRING_IMD: - if( CMD_Type == TWS_VOL ) //根据耳机Side参数 - { - Bes_In_Pair_State[VOL_TYPE] = 1; //左耳机是否进入配对状态成功状态标志 - } - else - { - Bes_In_Pair_State[VOR_TYPE] = 1; //右耳机是否进入配对状态成功状态标志 - } - - break; - default: - break; - } - } - - -#endif - -} - -/* -******************************************************************************* -* void HandleVoxCommMsg(void) -* -* Description : Vox 通讯功能处理函数,100ms定时调用。由于和耳机通信前需要打开耳机端的TRX功能,并且每次通信只能一只耳机。通过切换VOL/VOR通信开关进行通信 -* -* Arguments : NONE - -* Returns : NONE - -* Notes : NONE -* -******************************************************************************* -*/ - -void HandleVoxCommMsg(void) -{ - uint8_t i = 0; - -#if XUANHENG - - uint16_t CrcCheckSum = 0; - - uint16_t Data_Len = 0; - -#else - - uint8_t CrcCheckSum = 0; - -#endif - /*RX数据处理*/ - if( Uart1_RX_Finish_Flag ) - { - Uart1_RX_Finish_Flag = FALSE; - -#ifdef _DEBUG_VOX - printf("RX1_Buffer[0]:0x%x,RX1_Buffer[1]:0x%x,RX1_Buffer[2]:0x%x,RX1_Buffer[3]:0x%x,RX1_Buffer[4]:0x%x,RX1_Buffer[5]:0x%x,RX1_Buffer[6]:0x%x,line:%d\r\n",(u16)RX1_Buffer[0],(u16)RX1_Buffer[1],(u16)RX1_Buffer[2],(u16)RX1_Buffer[3],(u16)RX1_Buffer[4],(u16)RX1_Buffer[5],(u16)RX1_Buffer[6],(u16)__LINE__); -#endif - -#if JIELI - - CrcCheckSum = Crc8Maxim(RX1_Buffer, RX1_Buffer[2] + 3); //求校验和 - - if( CrcCheckSum == RX1_Buffer[RX1_Buffer[2] + 3] ) - -#elif ZHONGKE - - CrcCheckSum = Crc8Maxim( RX1_Buffer, RX1_Buffer[4] + 5 ); - - if( CrcCheckSum == RX1_Buffer[ RX1_Buffer[4] + 5 ] ) - -#elif XUANHENG - - Data_Len = RX1_Buffer[5] | ( RX1_Buffer[6] << 8 ) + 7; - - CrcCheckSum = CalCheckCrc16( RX1_Buffer, Data_Len); //计算检验和 - - if( CrcCheckSum == (uint16_t)(RX1_Buffer[ Data_Len + 1 ] | RX1_Buffer[ Data_Len + 2 ] << 8) ) //校验和小端模式,低位在前。 - -#endif - { -#if XUANHENG - - HandleRxMsg((VOX_BES_COMMAND_E)RX1_Buffer[2]); - -#else - - HandleRxMsg((VOX_BES_COMMAND_E)RX1_Buffer[3]); - -#endif - } - else - { - return; - } - } -} - -#endif - #endif