From b6c1578e23e36aa8f8bf71dc1291ae9afc449724 Mon Sep 17 00:00:00 2001 From: Alex xu Date: Fri, 27 Dec 2024 17:57:46 +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=E4=BC=98=E5=8C=96=E5=8F=8C=E5=90=91=E9=80=9A=E8=AE=AF?= =?UTF-8?q?=EF=BC=9B2=E3=80=81=E6=9B=B4=E6=94=B9=E6=8C=89=E9=94=AE?= =?UTF-8?q?=E5=8F=91=E7=A0=81=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=8F=91=E7=A0=81?= =?UTF-8?q?=E5=89=8D=E5=85=88=E5=8D=87=E5=8E=8B5V=E4=B8=80=E6=AE=B5?= =?UTF-8?q?=E6=97=B6=E9=97=B4=EF=BC=9B3=E3=80=81=E6=9B=B4=E6=94=B9?= =?UTF-8?q?=E5=BC=80=E5=85=B3=E7=9B=96VOX=E6=97=B6=E5=BA=8F=EF=BC=9B4?= =?UTF-8?q?=E3=80=81=E5=A2=9E=E5=8A=A0=E4=B8=AD=E7=A7=91=E8=93=9D=E8=AE=AF?= =?UTF-8?q?=E5=8F=8C=E5=90=91=E9=80=9A=E8=AE=AF=E5=8A=9F=E8=83=BD=EF=BC=9B?= =?UTF-8?q?5=E3=80=81=E5=85=B6=E5=AE=83=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Out/8837_EVB_241223_1951.bin | Bin 12288 -> 0 bytes Out/8837_EVB_241223_1951.hex | 805 ----------------- Out/8837_EVB_241223_1951_5034_010102.bin | Bin 12290 -> 0 bytes Out/8837_EVB_241227_1754.bin | Bin 0 -> 12288 bytes Out/8837_EVB_241227_1754.hex | 831 ++++++++++++++++++ Out/8837_EVB_241227_1754_9B89_010102.bin | Bin 0 -> 12290 bytes Project/SY8837_Demo.uvgui.GH | 37 +- .../Backup/vox_module(2236).h | 502 +++++++++++ .../SY8837_Demo.SearchResults | 10 +- SY8837_Demo.si4project/SY8837_Demo.sip_sym | Bin 351512 -> 313172 bytes SY8837_Demo.si4project/SY8837_Demo.sip_xm | Bin 156 -> 156 bytes SY8837_Demo.si4project/SY8837_Demo.siwork | Bin 86336 -> 95876 bytes .../cache/parse/UsrInc_vox_vox_module.h.sisc | Bin 0 -> 37722 bytes UsrInc/charger/charger_module.h | 35 +- UsrInc/inc/define.h | 11 +- UsrInc/vox/vox_module.h | 72 +- UsrSrc/charger/charger_module.c | 23 +- UsrSrc/discharge/discharge_module.c | 17 +- UsrSrc/hall/hall.c | 4 +- UsrSrc/key/key.c | 136 ++- UsrSrc/sleep/sleep.c | 2 +- UsrSrc/uart/uart.c | 10 +- UsrSrc/userapp/userapp.c | 60 +- UsrSrc/vox/vox_module.c | 497 ++++++++--- 24 files changed, 1978 insertions(+), 1074 deletions(-) delete mode 100644 Out/8837_EVB_241223_1951.bin delete mode 100644 Out/8837_EVB_241223_1951.hex delete mode 100644 Out/8837_EVB_241223_1951_5034_010102.bin create mode 100644 Out/8837_EVB_241227_1754.bin create mode 100644 Out/8837_EVB_241227_1754.hex create mode 100644 Out/8837_EVB_241227_1754_9B89_010102.bin create mode 100644 SY8837_Demo.si4project/Backup/vox_module(2236).h create mode 100644 SY8837_Demo.si4project/cache/parse/UsrInc_vox_vox_module.h.sisc diff --git a/Out/8837_EVB_241223_1951.bin b/Out/8837_EVB_241223_1951.bin deleted file mode 100644 index 091c20f6b6eca3cc29945823398f2fe390767b6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeHtdvp}Xm3Mc~Q_mT-MsFTXGXe<^G!kH2#%3fL7QZK!{5Z+xcnHE9@?jX`8F>VY z)sdXon-3?mLC*0D*tHz5<0avXBR1>UBvQ-daAFKf%jCn4g$8ECQ<^qdiV$e}`&IX} z9zgb-{j&dj=X^SvuBu!2-n#cz)va5%n+x@9X00_x*0* zE^%ldPcapLj9uMk)!6x8BV`M1Rv5ElVdj4g^cB}A^2aP>$L{~pYvdpqS(CoQL0Jt1T74`mOPnS{rM~Mw9fQe z0~W@%TSv@@QZv}xCLIvj+27Zm?w@0iQpKSaZ0?_g^vQU|z#EHcER`*%gFF`5IV`1{ zO!8yEk5YL?k!uvJQREnf+b9Z+qQEG!V?!$I`Aw9{G%H0$M~N;0)CkdPEK1$4cBmLM ze!9V_#jYg+(@?Vp^3CCAglLQpyr#)m!F!_A$4at8(M&vM@JD30Z8kP{BoSeHst#8j zK6Yii+irA6sl!SsA^KRUic;x12^o)!9E5>Cn#5D5c+G_UCB{~h@galpM})CcXKac# zow2p|MX3jrb{o`H+9^LHZc1sctDOkWyk4DblWn1{|G11moGc@(Ya$lth{UWGVku)l zCN*GsEUeP3=YBG~hRIFg(pk@1?H6j4%0{JccU;}&pJw(s&Av>t&zGamgo!Ynv79vP zg;+$5bnr=o6Ik}Odj_HF;`nLdG{nwN$wwAjPx}hrUE_o?aj99)4bftm*|1~OvA)F4 z!IvN&<#V!mSkt+pT`x^`*b;yi=!2&gKaqA~{3RIw6psZwb$tKi4Nx#i1a`6r)|-jI zrbI9}j@#Okvi0JWt^eYbexzs}3TEzzzDjPK62p>E#yVzd7Tgl0h&je*YHW|%v-{#M zU!iF%eIEM;c3*r+ouV4iK&K*Bxq(Wb;hRvI*3HAxHAhHIaLr$kB+tZ~B#93;F($}l z*c4*OWKNp2AQ(MHaYs*N)=r*kqxBB9nu2eM4F!G@04v1R~I8gSNJ zD2{yi@EHbTC!IIgN#_`dowPGbc~Xl-=h#WZ%4CHF-3AJl`E1}=#o|P;*kl26!h8z( zRB!1SAA6r^0V54q2Yv6CU(%Y;tOM#QAU2-d&?y=_5+CC)PVyZkor7jrQxnf8-tU{tG*iK#?=sZ3tN3zg|oC6tzz z$xC_ej!bSz8kcG3$}CIUnCKwEPZ@4& z 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 z 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 literal 0 HcmV?d00001 diff --git a/Project/SY8837_Demo.uvgui.GH b/Project/SY8837_Demo.uvgui.GH index 08b7d2a..d562478 100644 --- a/Project/SY8837_Demo.uvgui.GH +++ b/Project/SY8837_Demo.uvgui.GH @@ -110,8 +110,8 @@ 0 - 724 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000006000000030000000100000036453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF40453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C766F785C766F785F6D6F64756C652E63000000000C766F785F6D6F64756C652E6300000000FFDC7800FFFFFFFF4C453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6469736368617267655C6469736368617267655F6D6F64756C652E6300000000126469736368617267655F6D6F64756C652E6300000000BECEA100FFFFFFFF41453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C757365726170705C757365726170702E630000000009757365726170702E6300000000F0A0A100FFFFFFFF40453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5372635C737461727475705C535441525455502E413531000000000B535441525455502E41353100000000BCA8E100FFFFFFFF3B453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C557372496E635C757365725C757365722E680000000006757365722E68000000009CC1B600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000AB08000066000000000F0000DD020000 + 804 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000007000000010000000100000036453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF40453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C766F785C766F785F6D6F64756C652E63000000000C766F785F6D6F64756C652E6300000000FFDC7800FFFFFFFF4C453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6469736368617267655C6469736368617267655F6D6F64756C652E6300000000126469736368617267655F6D6F64756C652E6300000000BECEA100FFFFFFFF41453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C757365726170705C757365726170702E630000000009757365726170702E6300000000F0A0A100FFFFFFFF40453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5372635C737461727475705C535441525455502E413531000000000B535441525455502E41353100000000BCA8E100FFFFFFFF3B453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C557372496E635C757365725C757365722E680000000006757365722E68000000009CC1B600FFFFFFFF39453A5C746F646179776F726B5C32303234313230325F7470333431305C5359383833375F44656D6F5C5573725372635C6B65795C6B65792E6300000000056B65792E6300000000F7B88600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000AB08000066000000000F0000DD020000 @@ -134,7 +134,7 @@ 16 - 7A08000009010000160D000099010000 + 7408000066000000100D0000F6000000 @@ -1799,7 +1799,7 @@ 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000007A08000009010000160D000099010000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000260C000009010000160D0000E3020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF270100004F0000002B010000C60200000100000002000010040000000100000012FFFFFF87060000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000008607000009010000AD08000080030000000000004F00000027010000C60200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000086070000D3020000160D000077030000000000001902000090050000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000C602000080070000CA020000010000000100001004000000010000004CFEFFFFD8010000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000008607000084030000060F0000A004000000000000CA02000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000007408000066000000100D0000F6000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000200C000066000000100D000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF270100004F0000002B010000C60200000100000002000010040000000100000012FFFFFF87060000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000008007000066000000A7080000DD020000000000004F00000027010000C60200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000008007000030020000100D0000D4020000000000001902000090050000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000C602000080070000CA020000010000000100001004000000010000004CFEFFFFD8010000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000080070000E1020000000F0000FD03000000000000CA02000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 @@ -1838,7 +1838,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3603,7 +3603,7 @@ 0 100 - 3 + 1 ..\UsrSrc\main.c 0 @@ -3615,27 +3615,27 @@ ..\UsrSrc\vox\vox_module.c - 6 - 1511 - 1539 + 29 + 555 + 575 1 0 ..\UsrSrc\discharge\discharge_module.c - 40 + 6 158 - 172 + 176 1 0 ..\UsrSrc\userapp\userapp.c - 18 + 27 385 - 412 + 399 1 0 @@ -3650,7 +3650,7 @@ 0 - ..\UsrInc\user\user.h + E:\todaywork\20241202_tp3410\SY8837_Demo\UsrInc\user\user.h 19 11 26 @@ -3658,6 +3658,15 @@ 0 + + ..\UsrSrc\key\key.c + 0 + 169 + 194 + 1 + + 0 + diff --git a/SY8837_Demo.si4project/Backup/vox_module(2236).h b/SY8837_Demo.si4project/Backup/vox_module(2236).h new file mode 100644 index 0000000..42a02cb --- /dev/null +++ b/SY8837_Demo.si4project/Backup/vox_module(2236).h @@ -0,0 +1,502 @@ +/* + ****************************************************************************** + * + * @file VOX_Module.h + * @brief VOL/R module + * @ic sy8835 + * + * @version 1.0 + * @date 2024/11/01 09:59:40 + * @author Alex Xu + * + * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd. + * All Rights Reserved + * + * History: + * Revision Date Author Desc + * 1.0.0 2024/11/01 Alex build this file + ****************************************************************************** + */ +#ifndef __VOX_MODULE_H__ +#define __VOX_MODULE_H__ + +/*_____ I N C L U D E S ____________________________________________________*/ + +#include "define.h" + +/*耳机方案商选择*/ +//#define QIANCHENG //岍丞 +//#define ZHONGKELANXUN //中科蓝讯 +#define XIAOMI //小米 + +/*硬件版本信息*/ +#define HW_VER 0x01 //硬件版本信息,范围0-9 +/*软件版本信息*/ +#define FW_VER 0x001 //程序版本 + +extern bit Vox_Vout_Enable; + +extern bit Earphone_Chg_Flag; //耳机出入盒标志位 + +extern bit Vox_Output_Short_Flag; + +#define IVOX_THN 20 //耳机跟随充电流下降阈值 + +#define IVOX_THP 200 //耳机跟随充电流上升阈值 + + +#define VOL_TYPE 0x00 + +#define VOR_TYPE 0x01 + + /*耳机配对状态*/ + typedef enum { + + VOX_PAIR_NONE = 0, //无效 + + VOX_PAIR_ING, //配对中 + + VOX_PAIR_OK, //配对完成 + + VOX_PAIR_KEEP, //不处理,保持当前状态 + + }e_Vox_Pairing_State; + + /*耳机配对记录*/ + typedef enum { + + VOX_PAIRED_NONE = 0, //无配对过 + + VOX_PAIRED_OK, //有配对记录 + + }e_Vox_Paired_State; + +#if VOX_ENABLE + +/******************************************************************************\ + Macro definitions +\******************************************************************************/ + +/*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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 Vox_Pull_Up_Pos_Msk + +#define Vox_Pull_Up_Deb_Pos (6U) + +#define Vox_Pull_Up_Deb_8Ms_Pos_Msk 0 +#define Vox_Pull_Up_Deb_16Ms_Pos_Msk 1 + +#define Vox_Pull_Up_Deb_8Ms (Vox_Pull_Up_Deb_8Ms_Pos_Msk << Vox_Pull_Up_Deb_Pos) +#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 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 Vol_Pull_Down_Pos_Msk + +/*自动识别负载电流阈值。*/ +#define VOX_ADT_Cur_0_5UA (0x0UL) +#define VOX_ADT_Cur_1_5UA (0x1UL) +#define VOX_ADT_Cur_2_5UA (0x2UL) +#define VOX_ADT_Cur_3_5UA (0x3UL) +#define VOX_ADT_Cur_4_5UA (0x4UL) +#define VOX_ADT_Cur_5_5UA (0x5UL) +#define VOX_ADT_Cur_6_5UA (0x6UL) +#define VOX_ADT_Cur_7_5UA (0x7UL) + +/* +VOX过流档位设置,在系统初始化中(Vox_init())通过配置VOX_CON0, + +SFRADDR = VOX_CON0; //设置VOX输出200mA,负载识别电流2.5uA。 +SFRDATA |= VOX_ADT_Cur_2_5UA; +//Vox轻重载滤波时间配置 +SFRADDR = VOX_CON2; +SFRDATA |= (VOX_LIGHT_TO_HAVEY_128 << 2) | VOX_HAVEY_TO_LIGHT_8; + +*/ +/* VOL/R Misc Config Register,VOX_CON2<6Ch> */ +#define Vox_Ioff_2mA (0x0UL) +#define Vox_Ioff_3mA (0x1UL) +#define Vox_Ioff_4mA (0x2UL) +#define Vox_Ioff_5mA (0x3UL) + +/*轻载转重载滤波时间配置。*/ +#define VOX_LIGHT_TO_HAVEY_1 (0x0UL) +#define VOX_LIGHT_TO_HAVEY_8 (0x1UL) +#define VOX_LIGHT_TO_HAVEY_128 (0x2UL) +#define VOX_LIGHT_TO_HAVEY_256 (0x3UL) +/*重载转轻载滤波时间配置。*/ +#define VOX_HAVEY_TO_LIGHT_0_125 (0x0UL) +#define VOX_HAVEY_TO_LIGHT_1 (0x1UL) +#define VOX_HAVEY_TO_LIGHT_8 (0x2UL) +#define VOX_HAVEY_TO_LIGHT_64 (0x3UL) + +/* 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 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 Vor_SW_MD_Pos_Msk + +#define Vor_SWDT_Pos (5U) +#define Vor_SWDT_Pos_Msk (0x1UL << 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 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 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 Vol_SW_MD_Pos_Msk + +#define Vol_SWDT_Pos (1U) +#define Vol_SWDT_Pos_Msk (0x1UL << 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 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 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 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 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 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 (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) +#define Vox_COMM_PULL_Vol_3_0 (Vox_COMM_PULL_Vol_3_0_Pos_Msk << Vox_COMM_PULL_Vol_Pos) +#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 Vox_Pull_Up_50k_Pos_Msk + +#define BOXHEADER 0x55AA //VOX通讯数据包头 + +#define EARPHONE_HEADER_HIGH 0x55 +#define EARPHONE_HEADER_LOW 0xAA + +#define BOXIDCODE 0xFF //VOX通讯耳机->仓数据包头 + +#define Vox_TX_Interval 2 //Vox定时发送指令时间间隔 + +#define Vox_TX_Interval_2 4 + +#define TIM_SHUTDOWN_DEBOUNCE 600 //关机前debounce时间 + + /******************************************************************************\ + Variables definitions + \******************************************************************************/ + /* 双向通讯协议选择 */ + +#define JIELI 1 + +#define ZHONGKE 0 + +/*耳机通道选择*/ + +#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_MAX_CHAN = 0x02, + + 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_MAX_CHAN = 0x02, + + 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; + + +#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 { + + Vox_Follow_Chg_InitSta = 0x00, + + Vox_Follow_Chg_Sta1, + + Vox_Follow_Chg_Sta2, + + Vox_Follow_Chg_Sta3, + + Vox_Follow_Chg_Sta4, + +}e_Vox_Follow_Chg_Sta; + +/* VOX Enable Type */ + typedef enum { + + VOX_TRANS_Mode = 0x00, //VOx UART 透传功能使能 + + VOX_COMM_Mode_Uart, //VOx 通讯 UART Mode + + VOX_COMM_Mode_Reg, //VOx 通讯 Register Mode + + VOX_VOUT_Mode, //VOx 5V 输出使能 + + VOX_ADT_Mode, //VOx 负载接入、存在识别功能使能,负载自动识别 + + VOX_PUnK_Mode, //Vox上拉电阻配置,上拉到VOX_Vup。 + + VOX_PD1K_Mode, // VOX 1K 电阻下拉使能 1: VOR 通过 1K 电阻下拉至 gnd + + } VOX_Enable_Mode_e; + +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 xdata uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态,VOL:低4bit;VOR:高4bit。0是无效,1是正在配对,2是配对成功,3不处理,保持当前状态。 + +extern xdata uint8_t Vox_Get_BES_Addr_Flag[2] ; + +#endif + +#if VOX_FOLLOW_CHG + +typedef struct { + + uint16_t IVox_Init[VOX_MAX_CHAN]; //跟随充Vox初始化电流值。 + + uint16_t IVox_Threshold_Neg[VOX_MAX_CHAN]; //Vox电流下降阈值 + + uint16_t IVox_Threshold_Pos[VOX_MAX_CHAN]; //Vox电流上升阈值 + + uint16_t IVox_At_Present[VOX_MAX_CHAN]; //Vox当前电流 + + uint8_t IVox_TC_Mode[VOX_MAX_CHAN]; //Vox CV_TC充电电流阈值 + + uint8_t Vpmid_SubSta[VOX_MAX_CHAN]; //Vox的Vpmid电压下降标志 + + uint8_t Vpmid_SubSta_Flag; //Vpmid电压下降标志 + + uint8_t Vpmid_AddSta[VOX_MAX_CHAN]; //Vpmid电压上升标志 + + uint8_t Vox_InBox_Sta[VOX_MAX_CHAN]; //耳机在盒标志 + + uint8_t Vpmid_Threshold_Neg; //Vpmid电压下降阈值 + + uint8_t Vpmid_Threshold_At_Present; //Vpmid电压当前值 + + uint8_t Vpmid_Threshold_Pos; //Vpmid电压上升阈值 + + uint8_t Vox_PTM_Type; //Boost 直通模式使能状态位,ON:Enable;OFF:Disable。 + + uint8_t Vox_Follow_Start; //跟随充启动标志 + + uint8_t Vox_Follow_Stop; //跟随充结束标志 + +} g_Vox_Fllow_Chg_Cfg; + +extern g_Vox_Fllow_Chg_Cfg xdata Vox_Fllow_Chg; + +#endif + /******************************************************************************\ + UserCfg.Functions definitions + \******************************************************************************/ + +extern void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select); + +extern void Vox_Det_Machine(void); +#if VOX_FOLLOW_CHG +extern void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ); +#endif +extern void VOX_EN_Type(VOX_Enable_Mode_e VOX_Enable_Mode); + +#ifdef VOX_RX +extern void HandleVoxCommMsg(void); +#endif + +#endif + +#endif + diff --git a/SY8837_Demo.si4project/SY8837_Demo.SearchResults b/SY8837_Demo.si4project/SY8837_Demo.SearchResults index 52a2e3f..0d685dd 100644 --- a/SY8837_Demo.si4project/SY8837_Demo.SearchResults +++ b/SY8837_Demo.si4project/SY8837_Demo.SearchResults @@ -1,6 +1,4 @@ ----- ADC_CTL0 Matches (5 in 4 files) ---- -Adc_Init in adc.c (UsrSrc\adc) : SFRADDR = ADC_CTL0; //0B10111101,<0x29>--ADC EN;ADC 2.5V Enable b[4];ADC1 Pullup 100K Enable b[5]; continue mode; ADC CLK divided by 48=230k -reg3315.h (UsrInc\inc) line 95 : #define ADC_CTL0 0x30 -reg883x.h (UsrInc\inc) line 41 : #define ADC_CTL0 0x29 -OutSleep_Handler in sleep.c (UsrSrc\sleep) : SFRADDR = ADC_CTL0; -InSleep_Handler in sleep.c (UsrSrc\sleep) : SFRADDR = ADC_CTL0; +---- MAX_PACKET_SIZE Matches (3 in 1 files) ---- +vox_module.c (UsrSrc\vox) line 77 : #define MAX_PACKET_SIZE 0x20 +HandleTxCommand in vox_module.c (UsrSrc\vox) : tx_pData[3] = MAX_PACKET_SIZE; +HandleTxCommand in vox_module.c (UsrSrc\vox) : 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 bfa90d11efa934a337d2a7830ea2450b2b22d558..675a0c24fb276e80d5f35befea2950fe79bcba77 100644 GIT binary patch delta 8218 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 YnDkm~8|kUH!5+-JL3}QP>o=$JKjCzEtN;K2 delta 7952 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 A`Tzg` diff --git a/SY8837_Demo.si4project/SY8837_Demo.sip_xm b/SY8837_Demo.si4project/SY8837_Demo.sip_xm index b35bc8fdd2f9d5583164fa26819ecb9817c5dc2b..73e9229f768e19196b2ded5c7d93c58e6166d13c 100644 GIT binary patch delta 11 ScmbQkIEQh9JR|!=g&F`8hXWq~ delta 11 ScmbQkIEQh9JR`$Ig&F`8YXcYn diff --git a/SY8837_Demo.si4project/SY8837_Demo.siwork b/SY8837_Demo.si4project/SY8837_Demo.siwork index 8e644900cd5f26938fad8e4371a6161c5feca3cc..de77bbd3b4b853054c4e88c4ff4b9fad2ddad851 100644 GIT binary patch literal 95876 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 diff --git a/SY8837_Demo.si4project/cache/parse/UsrInc_vox_vox_module.h.sisc b/SY8837_Demo.si4project/cache/parse/UsrInc_vox_vox_module.h.sisc new file mode 100644 index 0000000000000000000000000000000000000000..396b35f64d1b881c33674d9cd514757bdaa336df GIT binary patch literal 37722 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 literal 0 HcmV?d00001 diff --git a/UsrInc/charger/charger_module.h b/UsrInc/charger/charger_module.h index 0ec4c0f..30c3371 100644 --- a/UsrInc/charger/charger_module.h +++ b/UsrInc/charger/charger_module.h @@ -23,8 +23,6 @@ #include "define.h" -extern bit Charger_Done; - #ifdef NTC_ENABLE extern bit NTC_Pro_Flag; #endif @@ -39,9 +37,7 @@ typedef enum CHG_STA_ING, // 充电中 CHG_STA_COMPLETED, // 充电完成 - - CHG_STA_PULLOUT, // 充电器拔出 - + } TE_CHG_STA; typedef enum @@ -58,28 +54,33 @@ extern idata TE_CHG_STA ChgStatus; // 系统状态 /* Charger Current Setting */ typedef struct { + uint8_t nTrickle_Cur; //Set Trickle Current Trickle charge 电流配置,step 10mA; + uint8_t nConstant_Cur; //Set Constant Current 恒流 cc 电流配置,step 25mA: + uint8_t nIterm_Cur; //Set Iterm Current iterm charge 电流配置(范围:5mA ~ 50mA ,step 5mA) + uint8_t nVFloat; + } s_gCharger_Cfg; /* 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 CHG_END_Sel_Pos_Msk +#define CHG_END_Sel_Pos (7U) +#define CHG_END_Sel_Pos_Msk (0x1UL << 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 CHG_SafyTmr_EN_Pos_Msk +#define CHG_SafyTmr_EN_Pos (4U) +#define CHG_SafyTmr_EN_Pos_Msk (0x1UL << CHG_SafyTmr_EN_Pos) +#define CHG_SafyTmr_EN CHG_SafyTmr_EN_Pos_Msk -#define CHG_PrechgTmr_EN_Pos (3U) -#define CHG_PrechgTmr_EN_Pos_Msk (0x1UL << CHG_PrechgTmr_EN_Pos) -#define CHG_PrechgTmr_EN CHG_PrechgTmr_EN_Pos_Msk +#define CHG_PrechgTmr_EN_Pos (3U) +#define CHG_PrechgTmr_EN_Pos_Msk (0x1UL << CHG_PrechgTmr_EN_Pos) +#define CHG_PrechgTmr_EN CHG_PrechgTmr_EN_Pos_Msk -#define CHG_EN_Pos (0U) -#define CHG_EN_Pos_Msk (0x1UL << CHG_EN_Pos) -#define CHG_EN CHG_EN_Pos_Msk +#define CHG_EN_Pos (0U) +#define CHG_EN_Pos_Msk (0x1UL << CHG_EN_Pos) +#define CHG_EN CHG_EN_Pos_Msk /* Charger Parements Config. */ /* 1、V Float Setting */ diff --git a/UsrInc/inc/define.h b/UsrInc/inc/define.h index 76b8a83..650f138 100644 --- a/UsrInc/inc/define.h +++ b/UsrInc/inc/define.h @@ -61,6 +61,12 @@ #define VOX_RX //739Bytes + /* 双向通讯协议选择 */ + +#define JIELI 1 + +#define ZHONGKE 0 + #endif #define CHARGER_ENABLE 1 //94Bytes @@ -93,9 +99,10 @@ #define _DEBUG_MAIN // #define _DEBUG_KEY -// #define _DEBUG_VOX + #define _DEBUG_VOX +// #define _DEBUG_FOLLOW // #define _DEBUG_HALL - #define _DEBUG_ADC +// #define _DEBUG_ADC // #define _DEBUG_DISCHARGE // #define _DEBUG_CHARGER // #define _DEBUG_SLEEP diff --git a/UsrInc/vox/vox_module.h b/UsrInc/vox/vox_module.h index 2c72f7b..7b7f5df 100644 --- a/UsrInc/vox/vox_module.h +++ b/UsrInc/vox/vox_module.h @@ -260,16 +260,18 @@ SFRDATA |= (VOX_LIGHT_TO_HAVEY_128 << 2) | VOX_HAVEY_TO_LIGHT_8; #define Vox_Pull_Up_50k_Pos_Msk (0x1UL << Vox_Pull_Up_50k_Pos) #define Vox_Pull_Up_50k Vox_Pull_Up_50k_Pos_Msk -#define BOXHEADER 0x55AA //VOX通讯数据包头 +#define BOXHEADER 0x55AA //VOX通讯数据包头 -#define EARPHONE_HEADER_HIGH 0x55 -#define EARPHONE_HEADER_LOW 0xAA +#define EARPHONE_HEADER_HIGH 0x55 +#define EARPHONE_HEADER_LOW 0xAA -#define BOXIDCODE 0xFF //VOX通讯耳机->仓数据包头 +#define BOXIDCODE 0xFF //VOX通讯耳机->仓数据包头 -#define Vox_TX_Interval 2 //Vox定时发送指令时间间隔 +#define Vox_TX_Interval 2 //Vox定时发送指令时间间隔 -#define TIM_SHUTDOWN_DEBOUNCE 600 //关机前debounce时间 +#define Vox_TX_Interval_2 4 + +#define TIM_SHUTDOWN_DEBOUNCE 600 //关机前debounce时间 /******************************************************************************\ Variables definitions @@ -282,6 +284,8 @@ SFRDATA |= (VOX_LIGHT_TO_HAVEY_128 << 2) | VOX_HAVEY_TO_LIGHT_8; #define TWS_BOX 0x02 #define TWS_PC 0x03 +#if JIELI + /*耳机通道选择*/ typedef enum { @@ -319,6 +323,59 @@ typedef enum { }VOX_BES_COMMAND_E; +#elif ZHONGKE + + /*耳机通道选择*/ + typedef enum { + + VOL_CHAN = 0x11, + + VOR_CHAN = 0x22, + + VOX_MAX_CHAN = 0x02, + + 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; + + +#endif + /* Vox Channel Select. */ typedef enum { @@ -367,6 +424,9 @@ 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 diff --git a/UsrSrc/charger/charger_module.c b/UsrSrc/charger/charger_module.c index 7d03cf4..ca7dfd8 100644 --- a/UsrSrc/charger/charger_module.c +++ b/UsrSrc/charger/charger_module.c @@ -28,13 +28,10 @@ #include "userapp.h" #include "bat.h" -bit Charger_Done = 0; - #ifdef NTC_ENABLE bit NTC_Pro_Flag = 0; #endif - idata TE_CHG_STA ChgStatus; // CHG状态定义 #if CHARGER_ENABLE @@ -72,6 +69,9 @@ idata s_gCharger_Cfg gCharge_Cfg; void Charger_Init(void) { + SFRADDR = PMU_CTL8; + SFRDATA |= 0x20; + #ifdef SY8838Q //合封OVP芯片SY8838Q SFRADDR = PMU_CTL7; //合封芯片关闭VBUS OV检测使能 @@ -483,9 +483,7 @@ void Charger_Handler(void) CHG_CTL &= ~CHG_EN; //Disable Charger ChgStatus = CHG_NONE; - - Charger_Done = 0; - + #ifdef _DEBUG_CHARGER printf("No Chg\r\n"); #endif @@ -570,16 +568,7 @@ void Charger_Handler(void) CHG_CTL &= ~CHG_EN; //Disable Charger } - if( !Charger_Done ) - { - Charger_Done = 1; - - ChgStatus = CHG_STA_COMPLETED; - -#ifdef LED_DISPLAY - LED_On_Flag = 1; -#endif - } + ChgStatus = CHG_STA_COMPLETED; #endif } else @@ -611,9 +600,7 @@ void Charger_Handler(void) #ifdef _DEBUG_CHARGER printf("Chg ing\r\n"); #endif - Charger_Done = 0; } - } #endif diff --git a/UsrSrc/discharge/discharge_module.c b/UsrSrc/discharge/discharge_module.c index 2375368..27a025e 100644 --- a/UsrSrc/discharge/discharge_module.c +++ b/UsrSrc/discharge/discharge_module.c @@ -139,19 +139,17 @@ void DisCharge_Handler(void) #else + gBoost_Prepared_Flag = 0; + /* 过温保护 --- 硬件实现 */ if( CHIP_STA3 & 0x02 ) - { - gBoost_Prepared_Flag = 0; - + { return; } /*Boost Input UVLO 硬件实现*/ if( (CHIP_STA0 & BOOST_BATUV) ) //用于清软件标志位。 - { - gBoost_Prepared_Flag = 0; - + { gBoost_UVLO_Flag = 1; return; @@ -160,7 +158,6 @@ void DisCharge_Handler(void) /* BAT LOW Interrupt */ if( IRQ_FLAG0 & BAT_Low ) { - gBoost_Prepared_Flag = 0; return; } @@ -171,7 +168,6 @@ void DisCharge_Handler(void) #ifdef _DEBUG_DISCHARGE printf("Boost Pro Output Short!\r\n"); #endif - gBoost_Prepared_Flag = 0; if( F_sys_tim_250ms ) { @@ -188,7 +184,6 @@ void DisCharge_Handler(void) /*NTC Handle*/ //使能Boost前先检测NTC温度,异常就不开放电。 if( PMU_NTC_Handle( DISCHG_ON ) ) //NTC保护,不放电。 { - gBoost_Prepared_Flag = 0; DisCharge_Boost_Close(); @@ -206,9 +201,7 @@ void DisCharge_Handler(void) if( F_batlevel_protect ) { DisCharge_Boost_Close(); - - gBoost_Prepared_Flag = 0; - + return; } diff --git a/UsrSrc/hall/hall.c b/UsrSrc/hall/hall.c index e8f9771..f998481 100644 --- a/UsrSrc/hall/hall.c +++ b/UsrSrc/hall/hall.c @@ -112,6 +112,8 @@ xdata uint8_t Hall_Sta_bk = 0xff; } CoverEvent_Flg = 1; + + Boost_Open_Flag = 0; CoverEvent_Flg_led = 1; @@ -119,12 +121,12 @@ xdata uint8_t Hall_Sta_bk = 0xff; LED_On_Flag = 1; #endif + Hall_Sta_bk = Hall_Sta; #if SLEEP_ENABLE Enter_Sleep_Cnt_Restart_Flag = 1; #endif - Hall_Sta_bk = Hall_Sta; } } diff --git a/UsrSrc/key/key.c b/UsrSrc/key/key.c index 5325429..6065ab8 100644 --- a/UsrSrc/key/key.c +++ b/UsrSrc/key/key.c @@ -26,6 +26,7 @@ #include "vox_module.h" #include "userapp.h" #include "hall.h" +#include "discharge_module.h" #if KEY_ENABLE /******************************************************************************\ @@ -45,6 +46,8 @@ #define KEY_TWS_PAIR_CLEAR_CNT 30 +#define KEY_LIFT_CNT 20 + /******************************************************************************\ Variables definitions \******************************************************************************/ @@ -59,10 +62,14 @@ idata KEY_EVENT_E Event_key = 0; uint8_t Key_TWS_Pair_Tim = 0; +uint8_t Key_TWS_Clear_Pair_Tim = 0; + uint8_t Key_TWS_Pair_Cnt = 0; uint16_t Key_Press_Debounce = 0; +uint8_t Key_Lift_Debounce = 0; + /******************************************************************************\ Functions definitions \******************************************************************************/ @@ -130,11 +137,15 @@ uint16_t Key_Press_Debounce = 0; #if SLEEP_ENABLE Enter_Sleep_Cnt_Restart_Flag = 1; - -#endif + +#endif + Event_key = KEY_EVENT_Empty; + Key_Press_Flag = 0; Key_Lift_Flag = 1; + + Key_Lift_Debounce = 0; nKey_Press_8s_Flag = 0; @@ -162,12 +173,31 @@ uint16_t Key_Press_Debounce = 0; Key_Press_Debounce = 0; } - if( Key_Lift_Flag ) - { - Key_Lift_Flag = 0; - + if( Key_Lift_Flag && gBoost_Prepared_Flag ) + { if( Key_Press_l_irq ) { + if( !Boost_Open_Flag ) + { + DisCharge_Boost_Open(OFF,Boost_Vout_5_225V); + + Boost_Open_Flag = 1; +#ifdef _DEBUG_KEY + printf("Boost Open Key.(line:%d)\r\n",(u16)__LINE__); +#endif + + return; + } + + VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V + + if( Key_Lift_Debounce <= KEY_LIFT_CNT ) + { + Key_Lift_Debounce++; + + return; + } + Key_Press_l_irq = 0; /*todo*/ Event_key = KEY_EVENT_L_2S; @@ -175,6 +205,9 @@ uint16_t Key_Press_Debounce = 0; Key_TWS_Pair_Tim = 0; /*耳机配对*/ + Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00; + + Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00; #ifdef _DEBUG_KEY printf("long 2s press\r\n"); @@ -183,7 +216,30 @@ uint16_t Key_Press_Debounce = 0; /*长按8s,系统强制进shipmode.*/ if( Key_Press_ll_irq ) { + if( !Boost_Open_Flag ) + { + DisCharge_Boost_Open(OFF,Boost_Vout_5_225V); + + Boost_Open_Flag = 1; +#ifdef _DEBUG_KEY + printf("Boost Open Key.(line:%d)\r\n",(u16)__LINE__); +#endif + + return; + } + + VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V + + if( Key_Lift_Debounce <= KEY_LIFT_CNT ) + { + Key_Lift_Debounce++; + + return; + } + Key_Press_ll_irq = 0; + + Key_TWS_Clear_Pair_Tim = 0; /*todo*/ Event_key = KEY_EVENT_LL_8S; @@ -203,10 +259,10 @@ uint16_t Key_Press_Debounce = 0; printf("short press\r\n"); #endif } - } - else - { - Event_key = KEY_EVENT_Empty; + + Key_Lift_Flag = 0; + + Boost_Open_Flag = 0; } #if 1 @@ -220,16 +276,28 @@ uint16_t Key_Press_Debounce = 0; HandleTxCommand(VHOUSE_CMD_PAIR,VOR_CHAN); //右耳发配对指令,区分耳机通道。 #endif Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00; + Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00; +#ifdef _DEBUG_KEY + printf("Key Pair TX VOR(line:%d).\r\n",(uint16_t)__LINE__); +#endif } else { if(Key_TWS_Pair_Cnt > KEY_TWS_PAIR_CNT) //耳机蓝牙地址置换超时10s,关闭蓝牙地址置换,开启VOX 5V。 { Key_TWS_Pair_Cnt = 0; + + Event_key = KEY_EVENT_Empty; + + OpenCover_TX_Cmd_Flag = 1; #if VOX_ENABLE - VOX_EN_Type(VOX_VOUT_Mode); + VOX_EN_Type(VOX_ADT_Mode); #endif +#ifdef _DEBUG_KEY + printf("Key Pair TimeOut(line:%d).\r\n",(uint16_t)__LINE__); +#endif + return; } else @@ -239,7 +307,11 @@ uint16_t Key_Press_Debounce = 0; #ifdef VOX_TX HandleTxCommand(VHOUSE_CMD_EXCH_TWS_BTADDR,VOL_CHAN); /*获取到右耳回复的CMD3指令,转发给左耳。*/ #endif - Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x02; + Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x02; +#ifdef _DEBUG_KEY + printf("Key Pair Get VOR(line:%d).\r\n",(uint16_t)__LINE__); +#endif + } else if( Vox_Get_BES_Addr_Flag[VOR_TYPE] == 0x02 ) @@ -249,14 +321,22 @@ uint16_t Key_Press_Debounce = 0; #ifdef VOX_TX HandleTxCommand(VHOUSE_CMD_EXCH_TWS_BTADDR,VOR_CHAN); /*获取到右耳回复的CMD3指令,转发给左耳。*/ #endif - Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00; + Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00; + Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00; Key_TWS_Pair_Tim = 0; + + Key_TWS_Pair_Cnt = 0; + Event_key = KEY_EVENT_Empty; + + OpenCover_TX_Cmd_Flag = 1; - VOX_EN_Type(VOX_VOUT_Mode); - + VOX_EN_Type(VOX_ADT_Mode); +#ifdef _DEBUG_KEY + printf("Key Pair Get VOL(line:%d).\r\n",(uint16_t)__LINE__); +#endif return; } else @@ -264,15 +344,22 @@ uint16_t Key_Press_Debounce = 0; #ifdef VOX_TX HandleTxCommand(VHOUSE_CMD_PAIR,VOL_CHAN); #endif +#ifdef _DEBUG_KEY + printf("Key Pair TX VOL(line:%d).\r\n",(uint16_t)__LINE__); +#endif + } } } } - if(Key_TWS_Pair_Tim > KEY_TWS_PAIR_TIMER) //3s重发一次。重发5次后超时 + if(Key_TWS_Pair_Tim > KEY_TWS_PAIR_TIMER) //2s重发一次。重发5次后超时 { Key_TWS_Pair_Cnt++; - Key_TWS_Pair_Tim = 0; + Key_TWS_Pair_Tim = 0; +#ifdef _DEBUG_KEY + printf("Key Pair Cnt:%d.(line:%d)\r\n",(uint16_t)Key_TWS_Pair_Cnt,(uint16_t)__LINE__); +#endif } else { @@ -282,28 +369,33 @@ uint16_t Key_Press_Debounce = 0; else if( Event_key == KEY_EVENT_LL_8S ) { - if( Key_TWS_Pair_Tim < KEY_TWS_PAIR_CLEAR_CNT ) //每隔200ms发送一次,持续时间3s。 + if( Key_TWS_Clear_Pair_Tim < KEY_TWS_PAIR_CLEAR_CNT ) //每隔200ms发送一次,持续时间3s。 { - if( Key_TWS_Pair_Tim % ( Vox_TX_Interval + 2 ) ) + if( Key_TWS_Clear_Pair_Tim % Vox_TX_Interval_2 ) { #ifdef VOX_TX HandleTxCommand(VHOUSE_CMD_CLEAR_PAIR,VOR_CHAN); #endif } else - if( Key_TWS_Pair_Tim % Vox_TX_Interval ) + if( Key_TWS_Clear_Pair_Tim % Vox_TX_Interval ) { #ifdef VOX_TX HandleTxCommand(VHOUSE_CMD_CLEAR_PAIR,VOL_CHAN); #endif } - Key_TWS_Pair_Tim++; + Key_TWS_Clear_Pair_Tim++; } else { Event_key = KEY_EVENT_Empty; - Key_TWS_Pair_Tim = 0; + + OpenCover_TX_Cmd_Flag = 1; + + Key_TWS_Clear_Pair_Tim = 0; + + VOX_EN_Type(VOX_ADT_Mode); } } } diff --git a/UsrSrc/sleep/sleep.c b/UsrSrc/sleep/sleep.c index bc1beb4..97046f3 100644 --- a/UsrSrc/sleep/sleep.c +++ b/UsrSrc/sleep/sleep.c @@ -203,7 +203,7 @@ void Enter_Sleep(void) */ bit Check_Require_Sleep(void ) { - if( ( ChgStatus == CHG_STA_ING ) || ( ON == Vox_Vout_Enable ) || Enter_Sleep_Cnt_Restart_Flag ) /*充电中、有中断、耳机处于充电状态情况下,Boost重载输出,系统不进休眠模式。 */ + if( ( ChgStatus > CHG_PROTECT ) || ( ON == Vox_Vout_Enable ) || Enter_Sleep_Cnt_Restart_Flag ) /*充电中、有中断、耳机处于充电状态情况下,Boost重载输出,系统不进休眠模式。 */ { #ifdef _DEBUG_SLEEP printf("Not Get Into Sleep(ChgStatus:%d,Vox_Vout:%d,Restart_Flag:%d).\r\n",(uint16_t)ChgStatus,(uint16_t)Vox_Vout_Enable,(uint16_t)Enter_Sleep_Cnt_Restart_Flag); diff --git a/UsrSrc/uart/uart.c b/UsrSrc/uart/uart.c index 2860930..7b06aa0 100644 --- a/UsrSrc/uart/uart.c +++ b/UsrSrc/uart/uart.c @@ -284,6 +284,10 @@ uint8_t Rx1Status = 0; uint8_t RX1_Cnt = 0; +#define Vox_Comm_JL_HEADER_DATA_LEN 4 + +#define Vox_Comm_ZK_HEADER_DATA_LEN 6 + /*uart1中断处理函数*/ void uart1_Interrupt(void) interrupt Interrupt_Vector_RI1_TI1 { @@ -345,7 +349,11 @@ void uart1_Interrupt(void) interrupt Interrupt_Vector_RI1_TI1 { RX1_Buffer[RX1_Cnt++] = S1BUF; - if( RX1_Cnt >= ( RX1_Buffer[2] + 4 ) ) + #if JIELI + if ( ( RX1_Cnt >= ( RX1_Buffer[2] + Vox_Comm_JL_HEADER_DATA_LEN ) ) || ( RX1_Cnt > COM0_Data_Lenth ) ) + #elif ZHONGKE + if ( ( RX1_Cnt >= ( RX1_Buffer[4] + Vox_Comm_ZK_HEADER_DATA_LEN ) ) || ( RX1_Cnt > COM0_Data_Lenth ) ) + #endif { RX1_Cnt = 0; diff --git a/UsrSrc/userapp/userapp.c b/UsrSrc/userapp/userapp.c index 04a0c51..f3f8829 100644 --- a/UsrSrc/userapp/userapp.c +++ b/UsrSrc/userapp/userapp.c @@ -139,33 +139,38 @@ void LED_Display_App(void) } else { - if( Display_RSta != LED_KEEP_FLASHING ) + if( Display_RSta != LED_FLASH ) { Display_Red_Flash(20,10); } - if( Display_GSta != LED_KEEP_FLASHING ) + if( Display_GSta != LED_FLASH ) { Display_Green_Flash(20,10); } - if( Display_YSta != LED_KEEP_FLASHING ) + if( Display_YSta != LED_FLASH ) { Display_Yellow_Flash(20,10); } - if( Display_BSta != LED_KEEP_FLASHING ) + if( Display_BSta != LED_FLASH ) { Display_Blue_Flash(20,10); } + + if( Vox_Output_Short_Flag ) + { + if( LED_On_Timer < LED_PRO_TIM ) + { + LED_On_Timer++; + } + else + { + Vox_Ocp_Flag = 1; - if( LED_On_Timer < LED_PRO_TIM ) - { - LED_On_Timer++; - } - else - { - Vox_Ocp_Flag = 1; + LED_On_Flag = 1; + } } } @@ -190,15 +195,17 @@ void LED_Display_App(void) #endif - if (ChgStatus == CHG_STA_ING) //ChgStatus = CHG_STA_ING + if (ChgStatus != CHG_NONE) { - if ( Charger_Done ) // 充电完成,4个LED常亮 + if ( ChgStatus == CHG_STA_COMPLETED ) // 充电完成,4个LED常亮 { if( !LED_On_ChgDone_Flag ) { LED_On_ChgDone_Flag = 1; LED_Breating_Light_Off(); + + return; } Display_AllOn(); @@ -209,6 +216,8 @@ void LED_Display_App(void) { LED_On_Chg_Flag = 1; + LED_On_ChgDone_Flag = 0; + LED_On_Flag = 1; Breathing_Light_Cnt = LED_R; @@ -409,13 +418,6 @@ void ADC_GetValue_Machine(void) */ void System_Drivers_Machine(void) { -#if CHARGER_ENABLE - Charger_Handler(); -#endif - -#if DISCHARGE_ENABLE - DisCharge_Handler(); -#endif #if HALL_ENABLE Hall_Handler(); @@ -432,6 +434,15 @@ void System_Drivers_Machine(void) if ( F_sys_tim_100ms ) { F_sys_tim_100ms = 0; + +#if CHARGER_ENABLE + Charger_Handler(); +#endif + +#if DISCHARGE_ENABLE + DisCharge_Handler(); +#endif + #if BAT_VALUE check_bat_level(); #endif @@ -480,7 +491,7 @@ void SysTem_State_Machine(void) #endif #ifdef _DEBUG_MAIN - printf("Power On State!Hall(0x%x) (line:%d)\r\n", (uint16_t)CoverStatus,(uint16_t)__LINE__); + // printf("Power On State!Hall(0x%x) (line:%d)\r\n", (uint16_t)CoverStatus,(uint16_t)__LINE__); #endif break; @@ -599,10 +610,13 @@ void SysTem_State_Machine(void) F_sys_tim_1s = 0; #ifdef _DEBUG_MAIN - printf("STA0:0x%x,STA1:0x%x,STA2:0x%x,STA3:0x%x,STA4:0x%x.Dec_Sleep:%d\r\n",(uint16_t)(CHIP_STA0),(uint16_t)(CHIP_STA1),(uint16_t)(CHIP_STA2),(uint16_t)(CHIP_STA3),(uint16_t)(CHIP_STA4),(uint16_t)Decnt_SleepDelay); + SFRADDR = ST_VOX; + ret = SFRDATA; + + printf("CHG_STA:%d,ST_VOX:0x%x,STA0:0x%x,STA1:0x%x,STA2:0x%x,STA3:0x%x,STA4:0x%x.Dec_Sleep:%d\r\n",(uint16_t)ChgStatus,(uint16_t)ret,(uint16_t)(CHIP_STA0),(uint16_t)(CHIP_STA1),(uint16_t)(CHIP_STA2),(uint16_t)(CHIP_STA3),(uint16_t)(CHIP_STA4),(uint16_t)Decnt_SleepDelay); #endif #ifdef _DEBUG_ADC - printf("adc chn:%d,Avg_Adc:%d,Ivol:%d,Vbat:%d,Vout:%d,Ivor:%d,Vntc:%d.\r\n",(uint16_t)ADC_Chn_Num,(uint16_t)g_Value_Adc_Avg,(uint16_t)g_pmu_Adc_Ivol,(uint16_t)g_Vbat_Adc,(uint16_t)g_pmu_Adc_Vout,(uint16_t)g_pmu_Adc_Ivor,(uint16_t)g_Vntc_Adc); + printf("adc chn:%d,Ivol:%d,Vbat:%d,Vout:%d,Ivor:%d,Vntc:%d.\r\n",(uint16_t)ADC_Chn_Num,(uint16_t)g_pmu_Adc_Ivol,(uint16_t)g_Vbat_Adc,(uint16_t)g_pmu_Adc_Vout,(uint16_t)g_pmu_Adc_Ivor,(uint16_t)g_Vntc_Adc); #endif if(Decnt_SleepDelay > 0) { diff --git a/UsrSrc/vox/vox_module.c b/UsrSrc/vox/vox_module.c index 8c59521..68322e9 100644 --- a/UsrSrc/vox/vox_module.c +++ b/UsrSrc/vox/vox_module.c @@ -46,37 +46,35 @@ bit Vox_Output_Short_Flag = 0; Macro definitions \******************************************************************************/ /*100ms调用周期*/ -#define VOX_OUTPUT_SHORT_CNT 2 +#define VOX_OUTPUT_SHORT_CNT 2 -#define VOX_LOW_BAT_CNT 25 //关盖前,盒子低电保护,Vox 5V持续2.5s +#define VOX_LOW_BAT_CNT 25 //关盖前,盒子低电保护,Vox 5V持续2.5s -#define VOX_VOUT_5V_LEAST_CNT 50 +#define VOX_VOUT_5V_LEAST_CNT 40 -#define VOX_VOUT_5V_DEBOUNCE 5 +#define VOX_VOUT_5V_DEBOUNCE 5 -#define VOX_VOUT_0V_DEBOUNCE 5 +#define VOX_VOUT_0V_DEBOUNCE 5 -#define VOX_OCP_HICUUP_DEBOUNCE 5 +#define VOX_OCP_HICUUP_DEBOUNCE 5 -#define VOX_ADT_HOLD_CNT 3 +#define VOX_ADT_HOLD_CNT 3 -#define Vox_TX_Pattern_Cnt 3 +#define Vox_TX_Pattern_Cnt 3 -#define VOX_VOLTAGE_HOLD_CNT 3 +#define VOX_VOLTAGE_HOLD_CNT 3 -#define BOOST_VOUT_MAX 2 //跟随充Boost输出电压上限值:0:4.6V,1:4.7V,2:4.8V,3:5.05V. +#define BOOST_VOUT_MAX 2 //跟随充Boost输出电压上限值:0:4.6V,1:4.7V,2:4.8V,3:5.05V. -#define Vox_TX_Pattern_Tim 11 +#define Vox_TX_Pattern_Tim 20 -#define Vox_TX_Interval 2 //Vox定时发送指令时间间隔 +#define VOX_IOFF_HOLD_CNT 50 -#define Vox_TX_Interval_2 4 +#define VOX_FOLLOW_CHG_CNT 10 -#define VOX_IOFF_HOLD_CNT 50 +#define VOX_CLOSE_HOLD_CNT 50 //关盖发码前保持时间 -#define VOX_FOLLOW_CHG_CNT 10 - -#define VOX_CLOSE_HOLD_CNT 50 //关盖发码前保持时间 +#define MAX_PACKET_SIZE 0x20 #if VOX_FOLLOW_CHG @@ -123,12 +121,23 @@ xdata uint8_t Vox_Get_BES_Addr_Flag[2] = {0}; #endif -xdata uint8_t Earphone_Vbat[2] = 0; //对耳电量 +#ifdef VOX_TX +idata uint8_t Net_Info[2][13] = {0}; + +idata uint8_t MAC_Addr[2][18] = {0}; + +uint8_t EarPhone_Num = 0; + +#endif + +xdata uint8_t Earphone_Vbat[2] = 0; //对耳电量 xdata uint8_t Vox_Online_State[2] = {0}; //耳机在线标志位 bit Vox_Ocp_Flag = 0; +bit OpenCover_TX_Cmd_Flag = 0; + #define KEY_TWS_PAIR_TIMER 2 #define KEY_TWS_PAIR_CNT 6 @@ -423,15 +432,17 @@ bit Vox_Ocp_Flag = 0; void Vox_Det_Machine(void) { + static bit Get_CHIP_STA1_Flag0; + static bit Get_CHIP_STA1_Flag1; static bit Cover_Close_Flag; static bit Cover_Close_Flag1; + + static bit Cover_Close_Force_Vout_Flag; static bit Cover_Open_Flag; - - static bit TX_Cmd_Flag; static bit Cover_Open_5V_Flag; @@ -450,6 +461,7 @@ void Vox_Det_Machine(void) static bit Vox_Chn_Select; static uint8_t Vox_Output_Debounce; + static bit CoverEvent_Flg1; if( gBoost_Prepared_Flag ) { @@ -471,8 +483,12 @@ void Vox_Det_Machine(void) Vox_Voltage_Hold_Timer = 0; //关盖清0,开盖使用 Vox_TX_Timer = 0; + + Get_CHIP_STA1_Flag0 = 0; Get_CHIP_STA1_Flag1 = 0; + + CoverEvent_Flg1 = 1; if( CoverStatus == CLOSE ) //1、关盖关闭COM_CTRL;显示灯效。(无需查询Loadon、IOFF状态,无论耳机是否在仓,Vox 5V输出。) { @@ -486,14 +502,12 @@ void Vox_Det_Machine(void) Vox_Chg_Full_Flag = 0; + Cover_Close_Force_Vout_Flag = 0; + Vox_Getinto_Sleep_Flag = 0; Vox_Chn_Select = 0; - Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00; - - Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00; - Vox_Vout_Enable = ON; Wkup_Earphone_Flag = 0; @@ -507,7 +521,7 @@ void Vox_Det_Machine(void) #endif #ifdef _DEBUG_VOX - printf("Box Close.\r\n"); + printf("Box Close.(line:%d)\r\n",(u16)__LINE__); #endif } else //2、开盖处理:5v 500ms 转0V 500ms,后转ADT模式。 @@ -520,28 +534,67 @@ void Vox_Det_Machine(void) Cover_Open_5V_Flag = 0; #ifdef _DEBUG_VOX - printf("Box Open.\r\n"); + printf("Box Open.(line:%d)\r\n",(u16)__LINE__); #endif } + Boost_Open_Flag = 0; + Vox_Output_Short_Flag = 0; Vox_Ocp_Flag = 0; CoverEvent_Flg = 0; } + /* 开关盖后,VOX先升压5.2V 一段时间,唤醒耳机,后转入ADT,获取盒内耳机数量。 */ + if( Vox_Voltage_Hold_Timer < VOX_VOUT_5V_DEBOUNCE ) //开盖后5V N00ms。 + { + Vox_Voltage_Hold_Timer++; + + return; + } + if ( CoverEvent_Flg1 ) + { + CoverEvent_Flg1 = 0; + + VOX_EN_Type(VOX_ADT_Mode); + return; + } + else + { + if ( !Get_CHIP_STA1_Flag0 ) //获取耳机在盒数量。 + { + Get_CHIP_STA1_Flag0 = 1; + + if ( CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ) ) + { + if ( ( CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ) ) == ( VOR_LoadOn | VOL_LoadOn ) ) + { + EarPhone_Num = 2; + } + else + { + EarPhone_Num = 1; + } + } + else + { + EarPhone_Num = 0; + } + +#ifdef _DEBUG_VOX + printf( "Open/Close Box,Earphones In Box(Num:%d)(VoxSta:0x%x).\r\n",(u16)EarPhone_Num, (u16)(CHIP_STA1) ); +#endif + } + + } + /* 发送开盖指令*/ if( Cover_Open_Flag ) /*开盖后,5V持续N00ms后0V持续N00ms,保证耳机能被唤醒;之后发开盖码。*/ - { - if( Vox_Voltage_Hold_Timer < VOX_VOUT_5V_DEBOUNCE ) //开盖后5V N00ms。 - { - Vox_Voltage_Hold_Timer++; - - return; - } - + { + #if 0 if( Vox_TX_Timer < VOX_VOUT_0V_DEBOUNCE ) //转0V N00ms { VOX_EN_Type(VOX_PD1K_Mode); @@ -549,6 +602,7 @@ void Vox_Det_Machine(void) Vox_TX_Timer++; } else + #endif { if( !Get_CHIP_STA1_Flag1 ) { @@ -557,15 +611,32 @@ void Vox_Det_Machine(void) if( ( Vox_Output_Debounce % Vox_TX_Interval_2 ) == 0 ) //200ms发送一次 { #ifdef VOX_TX +#if JIELI + HandleTxCommand(VHOUSE_CMD_OPEN_BOX,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 + +#elif ZHONGKE + + HandleTxCommand(VHOUSE_CMD_OPEN_WINDOW,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 + +#endif #endif } else if( ( Vox_Output_Debounce % Vox_TX_Interval ) == 0 ) //200ms发送一次 { -#ifdef VOX_TX +#ifdef VOX_TX +#if JIELI + HandleTxCommand(VHOUSE_CMD_OPEN_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 + +#elif ZHONGKE + + HandleTxCommand(VHOUSE_CMD_OPEN_WINDOW,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 + #endif +#endif + } Vox_Output_Debounce++; @@ -578,9 +649,7 @@ void Vox_Det_Machine(void) Get_CHIP_STA1_Flag1 = 1; - TX_Cmd_Flag = 1; - - Boost_Open_Flag = 0; + OpenCover_TX_Cmd_Flag = 1; Vox_Vout_Enable = OFF; #ifdef _DEBUG_VOX @@ -590,29 +659,32 @@ void Vox_Det_Machine(void) } else { - if( TX_Cmd_Flag ) + if( Event_key == KEY_EVENT_Empty ) { - TX_Cmd_Flag = 0; - - CHIP_STA1_BK = CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ); - } - else - { - /*耳机出入盒判断*/ - if( CHIP_STA1_BK != ( CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ) ) ) //查询耳机loadon状态,loadon状态改变,则说明有耳机出入盒。 + if( OpenCover_TX_Cmd_Flag ) { - if( CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ) ) - { - Earphone_Chg_Flag = 1; -#ifdef LED_DISPLAY - LED_On_Flag = 1; -#endif -#ifdef _DEBUG_VOX - printf("Open Box And Earphone GetIn.\r\n"); -#endif - } + OpenCover_TX_Cmd_Flag = 0; - CHIP_STA1_BK = ( CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ) ); + CHIP_STA1_BK = CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ); + + } + else + { + /*耳机出入盒判断*/ + if( CHIP_STA1_BK != ( CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ) ) ) //查询耳机loadon状态,loadon状态改变,则说明有耳机出入盒。 + { + if ( CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ) ) + { + Earphone_Chg_Flag = 1; +#ifdef LED_DISPLAY + LED_On_Flag = 1; +#endif + } +#ifdef _DEBUG_VOX + printf( "Open Box And Earphone GetIn(Num:%d)(VoxSta:0x%x).\r\n",(u16)EarPhone_Num, (u16)(CHIP_STA1) ); +#endif + CHIP_STA1_BK = ( CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ) ); + } } } } @@ -637,14 +709,12 @@ void Vox_Det_Machine(void) Follow_Chg_Sta = Vox_Follow_Chg_InitSta; #endif - Vox_TX_Timer = 0; - Vox_Voltage_Hold_Timer = 0; - Vox_Output_Debounce = 0; - Vox_Chg_Full_Flag = 0; + Cover_Close_Force_Vout_Flag = 1; + return; } @@ -653,59 +723,75 @@ void Vox_Det_Machine(void) printf("Close Box And Force Voltage Up.\r\n"); #endif - Wkup_Earphone_Flag = 0; - } - else - { + Boost_Open_Flag = 0; + if( Vox_Voltage_Hold_Timer <= VOX_VOLTAGE_HOLD_CNT ) //关盖Boost VPMID保持时间。 { Vox_Voltage_Hold_Timer++; return; } - /*发码*/ - if( Vox_TX_Timer <= Vox_TX_Pattern_Tim ) //发送关盖指令。 - { - if( (Vox_TX_Timer % Vox_TX_Interval_2) == 0 ) //200ms发送一次 - { + + Wkup_Earphone_Flag = 0; + } + else + { + if( !Cover_Close_Force_Vout_Flag ) + { + + /*发码*/ + if( Vox_TX_Timer <= Vox_TX_Pattern_Tim ) //发送关盖指令。 + { + if( (Vox_TX_Timer % Vox_TX_Interval_2) == 0 ) //200ms发送一次 + { #ifdef VOX_TX - HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 +#if JIELI + HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 +#elif ZHONGKE + HandleTxCommand(VHOUSE_CMD_CLOSE_WINDOW,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 #endif - } - else - if( (Vox_TX_Timer % Vox_TX_Interval) == 0 ) //200ms发送一次 - { +#endif + } + else + if( (Vox_TX_Timer % Vox_TX_Interval) == 0 ) //200ms发送一次 + { #ifdef VOX_TX - HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 +#if JIELI + HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 +#elif ZHONGKE + HandleTxCommand(VHOUSE_CMD_CLOSE_WINDOW,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 #endif + +#endif + } + + Vox_TX_Timer++; + + return; } - Vox_TX_Timer++; + if( Vox_Output_Debounce <= Vox_TX_Pattern_Tim ) //关盖后5s发送获取电量命令。 + { + if( (Vox_Output_Debounce % Vox_TX_Interval_2) == 0 ) //200ms发送一次 + { +#ifdef VOX_TX + HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 +#endif + } + else + if( (Vox_Output_Debounce % Vox_TX_Interval) == 0 ) //200ms发送一次 + { +#ifdef VOX_TX + HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 +#endif + } - return; + Vox_Output_Debounce++; + + return; + } } } - - if( Vox_Output_Debounce <= VOX_CLOSE_HOLD_CNT ) //关盖后5s发送获取电量命令。 - { - if( (Vox_Output_Debounce % Vox_TX_Interval_2) == 0 ) //200ms发送一次 - { -#ifdef VOX_TX - HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 -#endif - } - else - if( (Vox_Output_Debounce % Vox_TX_Interval) == 0 ) //200ms发送一次 - { -#ifdef VOX_TX - HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 -#endif - } - - Vox_Output_Debounce++; - - return; - } /*Vox 过流保护,两只耳机都每隔500ms打嗝一次*/ if( IRQ_FLAG0 & ( VOR_OutPut_Short | VOL_OutPut_Short ) ) @@ -751,8 +837,8 @@ void Vox_Det_Machine(void) { if( !Vox_Chg_Full_Flag ) { - // if( ( CHIP_STA1 & ( VOR_Ioff | VOL_Ioff | VOL_LoadOn | VOR_LoadOn ) == ( VOR_Ioff | VOL_Ioff | VOL_LoadOn | VOR_LoadOn ) ) || F_batlevel_low ) //耳机充满、VOX无负载、盒子低电,则关闭Vout输出通路,关闭Boost。 - if( ( (CHIP_STA1 & 0xAC) == 0xAC ) || F_batlevel_low ) + if( ( CHIP_STA1 & ( VOR_Ioff | VOL_Ioff | VOL_LoadOn | VOR_LoadOn ) == ( VOR_Ioff | VOL_Ioff | VOL_LoadOn | VOR_LoadOn ) ) || F_batlevel_low ) //耳机充满、VOX无负载、盒子低电,则关闭Vout输出通路,关闭Boost。 + // if( ( (CHIP_STA1 & 0xAC) == 0xAC ) || F_batlevel_low ) { if( Vox_Voltage_Hold_Timer <= VOX_VOUT_5V_LEAST_CNT ) //重载转轻载延时5s后关闭Boost输出。 { @@ -771,9 +857,7 @@ void Vox_Det_Machine(void) Vox_Voltage_Hold_Timer = 0; Vox_Getinto_Sleep_Flag = 0; - - Boost_Open_Flag = 0; - + VOX_EN_Type(VOX_ADT_Mode); //VOX Enable ADT } else @@ -788,7 +872,6 @@ void Vox_Det_Machine(void) } else { - if( Vox_Output_Debounce <= Vox_TX_Pattern_Tim ) { if( (Vox_Output_Debounce % Vox_TX_Interval_2) == 0 ) //200ms发送一次 @@ -896,7 +979,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) if( !nVpmid_Value_Setting ) { DisCharge_Boost_Open(OFF,n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present); -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG InitSta Set Max Vpmid.(Vox_sta:0x%x)(line:%d)\r\n",(uint16_t)CHIP_STA1, (uint16_t)__LINE__); #endif nVpmid_Value_Setting = 1; @@ -935,7 +1018,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) Follow_Chg_Sta = Vox_Follow_Chg_Sta1; Vox_Follow_Chg_Debounce = 0; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG InitSta.(Vox_sta:0x%x)(line:%d)\r\n",(uint16_t)CHIP_STA1, (uint16_t)__LINE__); #endif } @@ -950,7 +1033,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->Vox_Follow_Stop = ON; Follow_Chg_Sta = Vox_Follow_Chg_InitSta; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta1,No EarPhone In Box.(line:%d)\r\n",(uint16_t)__LINE__); #endif } @@ -964,7 +1047,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOR_CHAN] = ( g_pmu_Adc_Ivor / 5 ) << 2; //Ivox_Threshold_Neg = IVox_Init * 80% n_Vox_Fllow_Chg->IVox_Threshold_Pos[VOR_CHAN] = g_pmu_Adc_Ivor << 1; //Ivox_Threshold_Neg = IVox_Init * 2 -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta1,VOR Chging(Ivor:%dmA).(line:%d)\r\n",g_pmu_Adc_Ivor,(uint16_t)__LINE__); #endif @@ -977,7 +1060,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOL_CHAN] = ( g_pmu_Adc_Ivol / 5 ) << 2; //Ivox_Threshold_Neg = IVox_Init * 80% n_Vox_Fllow_Chg->IVox_Threshold_Pos[VOL_CHAN] = g_pmu_Adc_Ivol << 1; //Ivox_Threshold_Neg = IVox_Init * 2 -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta1,VOL Chging(Ivol:%dmA).(line:%d)\r\n",g_pmu_Adc_Ivol,(uint16_t)__LINE__); #endif @@ -1005,7 +1088,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN] = g_pmu_Adc_Ivor; n_Vox_Fllow_Chg->Vox_InBox_Sta[VOR_CHAN] = ON; //判断VOR有耳机在盒正常抽电 -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta2,Get IVOR:%dmA.(line:%d)\r\n",(uint16_t)g_pmu_Adc_Ivor,(u16)__LINE__); #endif } @@ -1015,7 +1098,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN] = g_pmu_Adc_Ivol; n_Vox_Fllow_Chg->Vox_InBox_Sta[VOL_CHAN] = ON; //判断VOL有耳机在盒正常抽电 -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta2,Get IVOL:%dmA.(line:%d)\r\n",(uint16_t)g_pmu_Adc_Ivol,(u16)__LINE__); #endif } @@ -1041,7 +1124,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) Follow_Chg_Sta = Vox_Follow_Chg_InitSta; n_Vox_Fllow_Chg->Vox_Follow_Start = OFF; //重启动跟随充 -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3,VOX Chg ReInit.(line:%d)\r\n",(uint16_t)__LINE__); #endif } @@ -1059,14 +1142,14 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) { n_Vox_Fllow_Chg->Vox_InBox_Sta[VOR_CHAN] = OFF; } -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CV),VOR Vpmid AddSta(Ivor:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN],(u16)__LINE__); #endif } else //未检测到Ivor Ioff,则Vpmid降档 { n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CV),VOR Vpmid SubSta(Ivor:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN],(u16)__LINE__); #endif } @@ -1076,14 +1159,14 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) if ( n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN] > n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOR_CHAN] ) { n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CC),VOR Vpmid SubSta(Ivor:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN],(u16)__LINE__); #endif } else { n_Vox_Fllow_Chg->Vpmid_AddSta[VOR_CHAN] = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CC),VOR Vpmid AddSta(Ivor:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN],(u16)__LINE__); #endif } @@ -1102,14 +1185,14 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) { n_Vox_Fllow_Chg->Vox_InBox_Sta[VOL_CHAN] = OFF; } -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CV),VOL Vpmid AddSta(Ivol:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN],(u16)__LINE__); #endif } else //未检测到Ivol Ioff,则Vpmid降档 { n_Vox_Fllow_Chg->Vpmid_SubSta[VOL_CHAN] = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CV),VOL Vpmid SubSta(Ivol:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN],(u16)__LINE__); #endif } @@ -1119,14 +1202,14 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) if ( n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN] > n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOL_CHAN] ) { n_Vox_Fllow_Chg->Vpmid_SubSta[VOL_CHAN] = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CC),VOL Vpmid SubSta(Ivol:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN],(u16)__LINE__); #endif } else { n_Vox_Fllow_Chg->Vpmid_AddSta[VOL_CHAN] = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CC),VOL Vpmid AddSta(Ivol:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN],(u16)__LINE__); #endif } @@ -1165,12 +1248,12 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->Vpmid_AddSta[VOL_CHAN] = ON; Follow_Chg_Sta = Vox_Follow_Chg_Sta2; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta4,VOx Vpmid AddSta(Vout:0x%x,Ivol:%dmA,Ivor:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivol,g_pmu_Adc_Ivor,(u16)__LINE__); #endif } -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW else { printf("Follow CHG Sta4,VOx Ching(Vout:0x%x,Ivol:%dmA,Ivor:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivol,g_pmu_Adc_Ivor,(u16)__LINE__); @@ -1190,11 +1273,11 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->Vpmid_AddSta[VOR_CHAN] = ON; Follow_Chg_Sta = Vox_Follow_Chg_Sta2; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta4,VOR Vpmid AddSta(Vout:0x%x,Ivor:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivor,(u16)__LINE__); #endif } -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW else { printf("Follow CHG Sta4,VOR Ching(Vout:0x%x,Ivor:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivor,(u16)__LINE__); @@ -1210,11 +1293,11 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->Vpmid_AddSta[VOL_CHAN] = ON; Follow_Chg_Sta = Vox_Follow_Chg_Sta2; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta4,VOL Vpmid AddSta(Vout:0x%x,Ivol:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivol,(u16)__LINE__); #endif } -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW else { printf("Follow CHG Sta4,VOL Ching(Vout:0x%x,Ivol:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivol,(u16)__LINE__); @@ -1240,7 +1323,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) if( ( n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] == ON ) && ( n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] == ON ) ) { n_Vox_Fllow_Chg->Vpmid_SubSta_Flag = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG SubSta,VOL/VOR(line:%d).\r\n",(uint16_t)__LINE__); #endif } @@ -1250,7 +1333,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) if( n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] == ON ) { n_Vox_Fllow_Chg->Vpmid_SubSta_Flag = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG SubSta,VOR(line:%d).\r\n",(uint16_t)__LINE__); #endif } @@ -1261,7 +1344,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) if( n_Vox_Fllow_Chg->Vpmid_SubSta[VOL_CHAN] == ON ) { n_Vox_Fllow_Chg->Vpmid_SubSta_Flag = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG SubSta,VOL(line:%d).\r\n",(uint16_t)__LINE__); #endif } @@ -1306,7 +1389,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) Vox_Follow_Chg_Debounce = 0; n_Vox_Fllow_Chg->Vpmid_SubSta_Flag = OFF; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG SubSta,(STA:0x%x,Vpmid:0x%x,PTM:%d)(line:%d)\r\n",(uint16_t)Follow_Chg_Sta,(uint16_t)n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,(uint16_t)n_Vox_Fllow_Chg->Vox_PTM_Type,(uint16_t)__LINE__); #endif DisCharge_Boost_Open(n_Vox_Fllow_Chg->Vox_PTM_Type, n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present ); @@ -1335,7 +1418,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) Follow_Chg_Sta = Vox_Follow_Chg_Sta1; } -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG AddSta,(STA:0x%x,Vpmid:0x%x)(line:%d)\r\n",(uint16_t)Follow_Chg_Sta,(uint16_t)n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,(uint16_t)__LINE__); #endif DisCharge_Boost_Open(OFF, n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present); @@ -1413,20 +1496,14 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) * ******************************************************************************* */ -idata uint8_t Net_Info[2][8] = {0}; - -idata uint8_t MAC_Addr[2][18] = {0}; - -uint8_t EarPhone_Num = 0; - -#define MAX_PACKET_SIZE 0x20 - void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) { uint8_t dataLen = 0; uint8_t tx_pData[COM0_Data_Lenth] = 0; uint8_t i = 0; +#if JIELI + /*数据包头*/ tx_pData[0] = 0x00; tx_pData[1] = BOXHEADER>>8; @@ -1458,14 +1535,14 @@ void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) case VHOUSE_CMD_EXCH_TWS_BTADDR: /*Data Length*/ - tx_pData[3] = 0x1B; + tx_pData[3] = MAX_PACKET_SIZE; for(i=5;i<18;i++) { tx_pData[i] = MAC_Addr[nVox_Chn_Select][i]; } - for(i=23;i<8;i++) + for(i=23;i<13;i++) { tx_pData[i] = Net_Info[nVox_Chn_Select][i]; } @@ -1536,6 +1613,84 @@ void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) 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 ) << 7 ) | 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充电仓 + + break; + + default: + break; + } + +#endif + } /* @@ -1699,12 +1897,19 @@ void HandleVoxCommMsg(void) if( Uart1_RX_Finish_Flag ) { Uart1_RX_Finish_Flag = 0; -//#ifdef _DEBUG_VOX +#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 +#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 ] ) + +#endif { HandleRxMsg((VOX_BES_COMMAND_E)RX1_Buffer[3]); }