From 4ad663c90f972e316e2f8457ba752ef42194c762 Mon Sep 17 00:00:00 2001 From: Alex xu Date: Fri, 27 Dec 2024 18:01:37 +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=E6=9B=B4=E6=94=B9=E5=BC=80=E5=85=B3=E7=9B=96=E5=90=8E?= =?UTF-8?q?VOX=E6=97=B6=E5=BA=8F=EF=BC=9B2=E3=80=81=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=AD=E7=A7=91=E8=93=9D=E8=AE=AF=E9=80=9A=E8=AE=AF=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=9B3=E3=80=81=E6=9B=B4=E6=94=B9=E6=8C=89?= =?UTF-8?q?=E9=94=AE=E5=8F=91=E7=A0=81=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=8F=91?= =?UTF-8?q?=E7=A0=81=E5=89=8DVOX=E5=85=88=E5=8D=87=E5=8E=8B=E4=B8=80?= =?UTF-8?q?=E6=AE=B5=E6=97=B6=E9=97=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Out/8835_EVB_241227_1101.bin | Bin 16384 -> 0 bytes Out/8835_EVB_241227_1101.hex | 968 ----------------- Out/8835_EVB_241227_1101_1C4E_010102.bin | Bin 16386 -> 0 bytes Out/8835_EVB_241227_1730.bin | Bin 0 -> 16384 bytes Out/8835_EVB_241227_1730.hex | 971 ++++++++++++++++++ Out/8835_EVB_241227_1730_7C0C_010102.bin | Bin 0 -> 16386 bytes Project/SY8835_Demo.uvgui.GH | 26 +- UsrInc/vox/vox_module.h | 59 ++ UsrSrc/key/key.c | 73 +- UsrSrc/sleep/sleep.c | 9 +- UsrSrc/uart/uart.c | 14 +- UsrSrc/vox/vox_module.c | 279 ++++- .../sy8835_demo.SearchResults | 44 +- sy8835_demo.si4project/sy8835_demo.sip_sym | Bin 450512 -> 450512 bytes sy8835_demo.si4project/sy8835_demo.sip_xab | Bin 94208 -> 102400 bytes sy8835_demo.si4project/sy8835_demo.sip_xad | Bin 1248 -> 1328 bytes 16 files changed, 1375 insertions(+), 1068 deletions(-) delete mode 100644 Out/8835_EVB_241227_1101.bin delete mode 100644 Out/8835_EVB_241227_1101.hex delete mode 100644 Out/8835_EVB_241227_1101_1C4E_010102.bin create mode 100644 Out/8835_EVB_241227_1730.bin create mode 100644 Out/8835_EVB_241227_1730.hex create mode 100644 Out/8835_EVB_241227_1730_7C0C_010102.bin diff --git a/Out/8835_EVB_241227_1101.bin b/Out/8835_EVB_241227_1101.bin deleted file mode 100644 index df1eadf9097b08bf126d02a4d5e549a6c9a825c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 Z4}9r?FFo+32fp;c|L-0!82G!g{x{`4rbYk& literal 0 HcmV?d00001 diff --git a/Project/SY8835_Demo.uvgui.GH b/Project/SY8835_Demo.uvgui.GH index 7ac678b..1621a62 100644 --- a/Project/SY8835_Demo.uvgui.GH +++ b/Project/SY8835_Demo.uvgui.GH @@ -111,7 +111,7 @@ 0 978 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000009000000020000000100000036453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF41453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C757365726170705C757365726170702E630000000009757365726170702E6300000000FFDC7800FFFFFFFF40453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C766F785C766F785F6D6F64756C652E63000000000C766F785F6D6F64756C652E6300000000BECEA100FFFFFFFF4C453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C6469736368617267655C6469736368617267655F6D6F64756C652E6300000000126469736368617267655F6D6F64756C652E6300000000F0A0A100FFFFFFFF39453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C6164635C6164632E6300000000056164632E6300000000BCA8E100FFFFFFFF40453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5372635C737461727475705C535441525455502E413531000000000B535441525455502E413531000000009CC1B600FFFFFFFF40453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C557372496E635C766F785C766F785F6D6F64756C652E68000000000C766F785F6D6F64756C652E6800000000F7B88600FFFFFFFF3B453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C756172745C756172742E630000000006756172742E6300000000D9ADC200FFFFFFFF39453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C6B65795C6B65792E6300000000056B65792E6300000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000007408000066000000000F0000CF020000 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000009000000060000000100000036453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF41453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C757365726170705C757365726170702E630000000009757365726170702E6300000000FFDC7800FFFFFFFF40453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C766F785C766F785F6D6F64756C652E63000000000C766F785F6D6F64756C652E6300000000BECEA100FFFFFFFF4C453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C6469736368617267655C6469736368617267655F6D6F64756C652E6300000000126469736368617267655F6D6F64756C652E6300000000F0A0A100FFFFFFFF39453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C6164635C6164632E6300000000056164632E6300000000BCA8E100FFFFFFFF40453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5372635C737461727475705C535441525455502E413531000000000B535441525455502E413531000000009CC1B600FFFFFFFF40453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C557372496E635C766F785C766F785F6D6F64756C652E68000000000C766F785F6D6F64756C652E6800000000F7B88600FFFFFFFF3B453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C756172745C756172742E630000000006756172742E6300000000D9ADC200FFFFFFFF39453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C6B65795C6B65792E6300000000056B65792E6300000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000007408000066000000000F0000CF020000 @@ -1806,7 +1806,7 @@ File 2558 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000832303234313031359600000000000000010008323032343130313500000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000832303234313031359600000000000000010008323032343130313500000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1822,7 +1822,7 @@ Build 976 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -3603,7 +3603,7 @@ 0 100 - 2 + 6 ..\UsrSrc\main.c 20 @@ -3624,9 +3624,9 @@ ..\UsrSrc\vox\vox_module.c - 6 + 26 590 - 612 + 614 1 0 @@ -3660,18 +3660,18 @@ ..\UsrInc\vox\vox_module.h - 2 - 242 - 266 + 16 + 277 + 297 1 0 ..\UsrSrc\uart\uart.c - 16 + 8 197 - 223 + 224 1 0 @@ -3679,8 +3679,8 @@ ..\UsrSrc\key\key.c 0 - 245 - 263 + 278 + 306 1 0 diff --git a/UsrInc/vox/vox_module.h b/UsrInc/vox/vox_module.h index 1ecba38..69b87f4 100644 --- a/UsrInc/vox/vox_module.h +++ b/UsrInc/vox/vox_module.h @@ -128,6 +128,11 @@ SFRDATA |= (VOX_LIGHT_TO_HAVEY_128 << 2) | VOX_HAVEY_TO_LIGHT_8; /******************************************************************************\ Variables definitions \******************************************************************************/ + /* 双向通讯协议选择 */ + +#define JIELI 1 + +#define ZHONGKE 0 /*耳机通道选择*/ @@ -136,6 +141,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 { @@ -173,6 +180,58 @@ 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 { diff --git a/UsrSrc/key/key.c b/UsrSrc/key/key.c index 73486d3..3119919 100644 --- a/UsrSrc/key/key.c +++ b/UsrSrc/key/key.c @@ -171,29 +171,31 @@ uint8_t Key_Lift_Debounce = 0; if( Key_Lift_Flag && gBoost_Prepared_Flag ) { - if( !Boost_Open_Flag ) - { - Set_PMU_Boost(ON); - - Boost_Open_Flag = 1; -#ifdef _DEBUG_KEY - printf("Boost Open Key.(line:%d)\r\n",(u16)__LINE__); -#endif - return; - } - - VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V - - if( Key_Lift_Debounce <= KEY_LIFT_CNT ) - { - Key_Lift_Debounce++; - - return; - } if( Key_Press_l_irq ) { + if( !Boost_Open_Flag ) + { + Set_PMU_Boost(ON); + + Boost_Open_Flag = 1; +#ifdef _DEBUG_KEY + printf("Boost Open Key.(line:%d)\r\n",(u16)__LINE__); +#endif + + return; + } + + VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V + + if( Key_Lift_Debounce <= KEY_LIFT_CNT ) + { + Key_Lift_Debounce++; + + return; + } + Key_Press_l_irq = 0; /*todo*/ Event_key = KEY_EVENT_L_2S; @@ -212,6 +214,27 @@ uint8_t Key_Lift_Debounce = 0; /*长按8s,系统强制进shipmode.*/ if( Key_Press_ll_irq ) { + if( !Boost_Open_Flag ) + { + Set_PMU_Boost(ON); + + Boost_Open_Flag = 1; +#ifdef _DEBUG_KEY + printf("Boost Open Key.(line:%d)\r\n",(u16)__LINE__); +#endif + + return; + } + + VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V + + if( Key_Lift_Debounce <= KEY_LIFT_CNT ) + { + Key_Lift_Debounce++; + + return; + } + Key_Press_ll_irq = 0; Key_TWS_Clear_Pair_Tim = 0; @@ -279,8 +302,12 @@ uint8_t Key_Lift_Debounce = 0; { if( Vox_Get_BES_Addr_Flag[VOR_TYPE] == 0x01 ) /*收到右耳回复的CMD3指令。*/ { -#ifdef VOX_TX +#ifdef VOX_TX +#if JIELI HandleTxCommand(VHOUSE_CMD_EXCH_TWS_BTADDR,VOL_CHAN); /*获取到右耳回复的CMD3指令,转发给左耳。*/ +#elif ZHONGKE + HandleTxCommand( VHOUSE_CMD_GET_TWS_BTADDR, VOL_CHAN ); /*获取到右耳回复的CMD3指令,转发给左耳。*/ +#endif #endif Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x02; #ifdef _DEBUG_KEY @@ -293,8 +320,12 @@ uint8_t Key_Lift_Debounce = 0; { if( Vox_Get_BES_Addr_Flag[VOL_TYPE] != 0x00 ) { -#ifdef VOX_TX +#ifdef VOX_TX +#if JIELI HandleTxCommand(VHOUSE_CMD_EXCH_TWS_BTADDR,VOR_CHAN); /*获取到右耳回复的CMD3指令,转发给左耳。*/ +#elif ZHONGKE + HandleTxCommand( VHOUSE_CMD_GET_TWS_BTADDR, VOR_CHAN ); /*获取到右耳回复的CMD3指令,转发给左耳。*/ +#endif #endif Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00; Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00; diff --git a/UsrSrc/sleep/sleep.c b/UsrSrc/sleep/sleep.c index 9a293e7..2792c8e 100644 --- a/UsrSrc/sleep/sleep.c +++ b/UsrSrc/sleep/sleep.c @@ -192,11 +192,6 @@ bool Check_Shipmode_Wkup(void) */ void Enter_Sleep(void) { - //SHIP_CTL |= 0x30; //进入休眠模式后,VOX 1K电阻下拉使能。是否应用,根据实际测试情况定。 - /*关盖,boost没有使能(VOL/R轻载),vin没有---debounce 5s进入shipmode */ - /* 在shipmode,VOX状态可配置为下拉 */ -// if( (CoverStatus == CLOSE) && !(CHIP_STA4 & 0x80) && (CHIP_STA1 & 0x0C) == 0x0c ) //进入ShipMode的条件是什么? - //if( (g_Plug_Irq_Flg == VBUS_PLGOUT_FLG) && (CHIP_STA1 & 0x0C) == 0x0c ) //进入ShipMode的条件是什么? if(Enter_Ship_Mode_Flag) { if(F_sys_tim_1s) @@ -250,10 +245,10 @@ void Enter_Sleep(void) */ bit Check_Require_Sleep(void ) { - if( ( ChgStatus == CHG_STA_ING ) || ( ON == Vox_Vout_Enable ) || Enter_Sleep_Cnt_Restart_Flag ) /*VBUS plugin status存在、有中断、耳机处于充电状态情况下,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",(u16)ChgStatus,(u16)Vox_Vout_Enable,(u16)Enter_Sleep_Cnt_Restart_Flag); + 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); #endif Enter_Sleep_Cnt_Restart_Flag = 0; /*处理对应的保护和中断唤醒事件。*/ diff --git a/UsrSrc/uart/uart.c b/UsrSrc/uart/uart.c index 6e6e744..731c6f3 100644 --- a/UsrSrc/uart/uart.c +++ b/UsrSrc/uart/uart.c @@ -163,6 +163,10 @@ uint8_t Rx0Status = 0; uint8_t RX0_Cnt = 0; +#define Vox_Comm_JL_HEADER_DATA_LEN 4 + +#define Vox_Comm_ZK_HEADER_DATA_LEN 6 + /*uart0中断处理函数*/ void uart0_Interrupt(void) interrupt Interrupt_Vector_RI_TI { @@ -219,10 +223,14 @@ void uart0_Interrupt(void) interrupt Interrupt_Vector_RI_TI break; case 2: + { RX0_Buffer[RX0_Cnt++] = S0BUF; - - if( ( RX0_Cnt >= ( RX0_Buffer[2] + 4 ) ) || ( RX0_Cnt > COM0_Data_Lenth ) ) + #if JIELI + if( ( RX0_Cnt >= ( RX0_Buffer[2] + Vox_Comm_JL_HEADER_DATA_LEN ) ) || ( RX0_Cnt > COM0_Data_Lenth ) ) + #elif ZHONGKE + if ( ( RX0_Cnt >= ( RX0_Buffer[4] + Vox_Comm_ZK_HEADER_DATA_LEN ) ) || ( RX0_Cnt > COM0_Data_Lenth ) ) + #endif { RX0_Cnt = 0; @@ -231,11 +239,13 @@ void uart0_Interrupt(void) interrupt Interrupt_Vector_RI_TI Uart0_RX_Finish_Flag = 1; } } + break; default: break; } + #endif } } diff --git a/UsrSrc/vox/vox_module.c b/UsrSrc/vox/vox_module.c index 8ddda84..c386afd 100644 --- a/UsrSrc/vox/vox_module.c +++ b/UsrSrc/vox/vox_module.c @@ -411,6 +411,8 @@ bit OpenCover_TX_Cmd_Flag = 0; void Vox_Det_Machine(void) { + static bit Get_CHIP_STA1_Flag0; + static bit Get_CHIP_STA1_Flag1; static bit Cover_Close_Flag; @@ -437,6 +439,8 @@ void Vox_Det_Machine(void) static bit Vox_Chn_Select; static uint8_t Vox_Output_Debounce; + + static bit CoverEvent_Flg1; /*Vox 过流保护,两只耳机都每隔200ms打嗝一次*/ if( pmu_Info.pmu_Fault_STA2 & ( Fault_Sta2_VorOCP | Fault_Sta2_VolOCP ) ) @@ -472,8 +476,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输出。) { @@ -527,16 +535,56 @@ void Vox_Det_Machine(void) 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 ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) + { + if ( ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) == ( VOR_LoadOn | VOL_LoadOn ) ) + { + EarPhone_Num = 2; + } + else + { + EarPhone_Num = 1; + } + } + else + { + EarPhone_Num = 0; + } + +#ifdef _DEBUG_VOX + printf( "Open/Close Box,Earphones In Box(Num:%d)(VoxSta:0x%x).\r\n",(u16)EarPhone_Num, (u16)(pmu_Info.pmu_VOX_STA) ); +#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); @@ -544,6 +592,7 @@ void Vox_Det_Machine(void) Vox_TX_Timer++; } else + #endif { if( !Get_CHIP_STA1_Flag1 ) { @@ -552,15 +601,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++; @@ -591,21 +657,6 @@ void Vox_Det_Machine(void) CHIP_STA1_BK = pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ); - if ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) - { - if ( ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) == ( VOR_LoadOn | VOL_LoadOn ) ) - { - EarPhone_Num = 2; - } - else - { - EarPhone_Num = 1; - } - } - else - { - EarPhone_Num = 0; - } } else { @@ -618,20 +669,7 @@ void Vox_Det_Machine(void) #ifdef LED_DISPLAY LED_On_Flag = 1; #endif - if ( ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) == ( VOR_LoadOn | VOL_LoadOn ) ) - { - EarPhone_Num = 2; - } - else - { - EarPhone_Num = 1; - } - } - else - { - EarPhone_Num = 0; - } - + } #ifdef _DEBUG_VOX printf( "Open Box And Earphone GetIn(Num:%d)(VoxSta:0x%x).\r\n",(u16)EarPhone_Num, (u16)(pmu_Info.pmu_VOX_STA) ); #endif @@ -678,32 +716,42 @@ void Vox_Det_Machine(void) Boost_Open_Flag = 0; + if( Vox_Voltage_Hold_Timer <= VOX_VOLTAGE_HOLD_CNT ) //关盖Boost VPMID保持时间。 + { + Vox_Voltage_Hold_Timer++; + + return; + } + Wkup_Earphone_Flag = 0; } else { if( !Cover_Close_Force_Vout_Flag ) { - 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发送一次 { #ifdef VOX_TX +#if JIELI HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 +#elif ZHONGKE + HandleTxCommand(VHOUSE_CMD_CLOSE_WINDOW,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 +#endif #endif } else if( (Vox_TX_Timer % Vox_TX_Interval) == 0 ) //200ms发送一次 { #ifdef VOX_TX +#if JIELI HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 +#elif ZHONGKE + HandleTxCommand(VHOUSE_CMD_CLOSE_WINDOW,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 +#endif + #endif } @@ -1398,9 +1446,13 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) { 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; @@ -1505,11 +1557,91 @@ void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) 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 ) << 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 + } - - /* ******************************************************************************* * void HandleVoxCommMsg(void) @@ -1686,11 +1860,22 @@ void HandleVoxCommMsg(void) { Uart0_RX_Finish_Flag = 0; +#ifdef _DEBUG_VOX printf("RX0_Buffer[0]:0x%x,RX0_Buffer[1]:0x%x,RX0_Buffer[2]:0x%x,RX0_Buffer[3]:0x%x,RX0_Buffer[4]:0x%x,RX0_Buffer[5]:0x%x,RX0_Buffer[6]:0x%x,RX0_Buffer[7]:0x%x,line:%d\r\n",(u16)RX0_Buffer[0],(u16)RX0_Buffer[1],(u16)RX0_Buffer[2],(u16)RX0_Buffer[3],(u16)RX0_Buffer[4],(u16)RX0_Buffer[5],(u16)RX0_Buffer[6],(u16)RX0_Buffer[7],(u16)__LINE__); +#endif +#if JIELI CrcCheckSum = Crc8Maxim(RX0_Buffer, RX0_Buffer[2] + 3); //求校验和 if( CrcCheckSum == RX0_Buffer[RX0_Buffer[2] + 3] ) + +#elif ZHONGKE + + CrcCheckSum = Crc8Maxim( RX0_Buffer, RX0_Buffer[4] + 5 ); + + if( CrcCheckSum == RX0_Buffer[ RX0_Buffer[4] + 5 ] ) + +#endif { HandleRxMsg( (VOX_BES_COMMAND_E)RX0_Buffer[3] ); } diff --git a/sy8835_demo.si4project/sy8835_demo.SearchResults b/sy8835_demo.si4project/sy8835_demo.SearchResults index 69d2c07..5a0abe7 100644 --- a/sy8835_demo.si4project/sy8835_demo.SearchResults +++ b/sy8835_demo.si4project/sy8835_demo.SearchResults @@ -1,10 +1,34 @@ ----- Boost_Open_Flag Matches (9 in 3 files) ---- -Hall_Handler in hall.c (UsrSrc\hall) : Boost_Open_Flag = 0; -vox_module.c (UsrSrc\vox) line 35 : bit Boost_Open_Flag = 0; -Vox_Det_Machine in vox_module.c (UsrSrc\vox) : if( !Boost_Open_Flag ) -Vox_Det_Machine in vox_module.c (UsrSrc\vox) : Boost_Open_Flag = 1; -Vox_Det_Machine in vox_module.c (UsrSrc\vox) : Boost_Open_Flag = 0; -Vox_Det_Machine in vox_module.c (UsrSrc\vox) : if( !Boost_Open_Flag ) -Vox_Det_Machine in vox_module.c (UsrSrc\vox) : Boost_Open_Flag = 1; -Vox_Det_Machine in vox_module.c (UsrSrc\vox) : Boost_Open_Flag = 0; -vox_module.h (UsrInc\vox) line 224 : extern bit Boost_Open_Flag; +---- bat_level Matches (46 in 4 files) ---- +bat.c (UsrSrc\bat) line 24 : idata uint8_t bat_level = 0; +bat.c (UsrSrc\bat) line 25 : idata uint8_t bat_level_Pec = 0; +bat.c (UsrSrc\bat) line 294 : bat_level = SOC_report; +bat.c (UsrSrc\bat) line 475 : #define C_offset_bat_level_MAX 150 +bat.c (UsrSrc\bat) line 476 : #define C_offset_bat_level_MIN 10 +bat.c (UsrSrc\bat) line 478 : #define C_bat_level_protect 0 +bat.c (UsrSrc\bat) line 479 : #define C_bat_level_lowpower 1 +bat.c (UsrSrc\bat) line 484 : idata uint8_t offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2; +bat.c (UsrSrc\bat) line 528 : void check_bat_level(void) +check_bat_level in bat.c (UsrSrc\bat) : if( i > bat_level ) +check_bat_level in bat.c (UsrSrc\bat) : offset_bat_level++; +check_bat_level in bat.c (UsrSrc\bat) : offset_bat_level--; +check_bat_level in bat.c (UsrSrc\bat) : bat_level = i; +check_bat_level in bat.c (UsrSrc\bat) : bat_level_Pec = 5 * bat_level; +check_bat_level in bat.c (UsrSrc\bat) : if( (offset_bat_level > C_offset_bat_level_MAX) || (offset_bat_level < C_offset_bat_level_MIN) ) +check_bat_level in bat.c (UsrSrc\bat) : bat_level = i; +check_bat_level in bat.c (UsrSrc\bat) : bat_level_Pec = 5 * bat_level; +check_bat_level in bat.c (UsrSrc\bat) : offset_bat_level = ( C_offset_bat_level_MAX + C_offset_bat_level_MIN ) / 2; +check_bat_level in bat.c (UsrSrc\bat) : if( bat_level <= C_bat_level_protect ) +check_bat_level in bat.c (UsrSrc\bat) : else if( bat_level > ( C_bat_level_protect + 1 ) ) +check_bat_level in bat.c (UsrSrc\bat) : if( bat_level <= C_bat_level_lowpower ) +check_bat_level in bat.c (UsrSrc\bat) : else if( bat_level > (C_bat_level_lowpower + 1) ) +bat.h (UsrInc\bat) line 35 : extern idata uint8_t bat_level; +bat.h (UsrInc\bat) line 36 : extern idata uint8_t bat_level_Pec; +bat.h (UsrInc\bat) line 58 : extern void check_bat_level(void); +LED_Display_App in userapp.c (UsrSrc\userapp) : if(bat_level_Pec < 25) +LED_Display_App in userapp.c (UsrSrc\userapp) : if(bat_level_Pec < 50) +LED_Display_App in userapp.c (UsrSrc\userapp) : if(bat_level_Pec < 75) +LED_Display_App in userapp.c (UsrSrc\userapp) : if(bat_level_Pec < 100) +System_Drivers_Machine in userapp.c (UsrSrc\userapp) : check_bat_level(); +SysTem_State_Machine in userapp.c (UsrSrc\userapp) : if(bat_level == 0) +HandleTxCommand in vox_module.c (UsrSrc\vox) : tx_pData[6] = bat_level_Pec; //鐢典粨鐢甸噺鍊 0~100锛 +HandleTxCommand in vox_module.c (UsrSrc\vox) : tx_pData[6] = ( ChgStatus & CHG_STA_ING ) | bat_level; //bit 0~6 琛ㄧず鍏呯數浠撶數閲忓 0~100锛沚it 7 涓 1 琛ㄧず鍦ㄧ粰鍏呯數浠撳厖鐢碉紝涓 0 琛ㄧず娌℃湁缁欏厖鐢典粨鍏呯數锛 diff --git a/sy8835_demo.si4project/sy8835_demo.sip_sym b/sy8835_demo.si4project/sy8835_demo.sip_sym index e0be1ba3984025c18ac9824e3855b8342b571612..c8e8d6d08bf749346688bd00d4c3e0ed2e6504ae 100644 GIT binary patch delta 6473 zcmeHKeNa@_6@T}>x2wWJcq}UfFf5TMe$h2e90UYbSmOu6hA%(U#pz7O%$TalOq&`_ z)kb41O%`9u(F}gEjvuK(5S`afMkKXK)WNt^lW8n9Xspd2sY5b4)n;0I&fUw~wZXJz zrvG_o9>3jle!p`+&N=rj;o}+M;~5FAVTw|#C|by-D4~voRGZ$cD#~z0Q7r6y+_roq zv>)bLLOj~jnW6|ZCZ{<&Pi8cz$qqE3N{OOTkktwe+qjlU_BiQ}W5%_tR#%GrdIy5n z&z#0@+>Nf`(tQUSy$)yRvg}fp{C5mU>l;Ls8C?&z>etbPLgfp5Xk0f|jt=ScjmU#| z-B|aRRHG=T5q3Spv;-1d!$+X;>!-Z8uw8pP_|Ts3{rJ zsVIH0q>h!Cnbj<}T~%|2`Tpu?iuL>G1Xe7SfZXnUKb4Sn?K{pOR)m z8UU_evk-Vjt6BnuZ$Z02IE8loqNEejxN5FB$l|&FJ837R@gZz$LwXwSkk&#-V~jcX z5YcboXNpQlgPYHEuz7jHRjNM3pf%QyF z9D$}s(H=qb=`UFqPcD##D4J8Q(?Ly<4hyNc&Gs8?X`H?aXQL>DG|_8E$MHXD8OQCB zbr8}RkDWyB6vYQwHoolL|4 zb%MvigZgx7vk-b6yfgk~j6sW?pp=-eC-9>jx(&Pl$aEVYfz%VQG>Hd|;9M<%(z+EN zfky8rCuHjA>NmASVl(^`L98Bl&&~11oXG6lkv`?G*tVAH)Se zj8R-@wh%7m;$}+I(ML5wG7I5SIu9kgr6h`Ga|VA-g&9;WnyR)n%|W*2rB;Z&YAGVAS9(=M{UblOmv z6|T%;bnTIB3xz98uKm(wA*?LH!#^m^7K-!9FQv14Q~E44z0>(Trq{}Z5mLfx;XoO# zdF@d=Habr`+UeLvLiS@=jw{MBT@62AnobQzPQsChs?m%7Tpu084%{#m$9%L?(E0G5 z4}*UGB8wE#4CqZ)Q_bKEo)-TfR;StXByUi44@&74un;b-SDmK6j!MYCM&1?UC2Kr0 z_txWGkxV^F%Z{R%I3FD`HH@h=H!Z+35&IAqYIGmwmPNeyj6M^?WMdc$sTo813^Y^H za}jCGfR*p_6!XA1b!Vbpk4D-wA#J+eT#&D3B#9HI>x)j9#zJ$$Oto-<{xyCklZDW` zTMa?`r?OygN&hWzA8l<_gZe+E$wJ|(2&us#emSS1U+O>){`@+mwvt4yVNzmVKKh0&~1m9B%L zWDlNJv1F|o24@tqlRZPuBy_9Kkgizn*h1KFRt+UjL^D-X6wQLL+Qs#9$+r+joWn${ z*rY~YxB1ea&&;lKY8=;#q`^Y*-Z8)UNX5dOZ7D7i6!^ZhUEi$_OHrwo3zKU5* z*|TBAKAyvV4Bm9^1pg#H$-Z!ARpk?NVC6YJ%kb3Xu%ASH{W*LhG!}Bd-j881x?&-v zpS>Vx%mE!|*aRpoLgI&#XrUnfG?vIxVO=^;VdW5fn-v)TmdH!+W2yXDC{_uD(U3I} z)~0j+mOn>G7bNL|AiWqHHZ8S&W>sB{FHknOJWy6wQ(HARQ0=R!pWKw458%`zM#fB4<@Z$v=FO@UIV;rvD76*} z?fS@k10SfXjsCwy5_VcLPYcG+1!J&a!Y5U~9+m_P1@YxUBJ=WzNihqlsVghGPKRssrWTT5q7j2id>mk3;wh(_r!Qs++aJl0H@vqgXg+NQL_pHsWw>z$R zp2BSK(nVGbZa2QDPN0>3uKgAtj?W3BW0BLf8P`P}z8x{z;q-blR*bU41vj5p~~ z=xt6)!V{qTcq(tP8O1pT;GeJBVEgy@9Q_^i(F_(EyWLLKGI+Czcjl4F+;1dpiu~X` zCI!a?amO9RelHUHH%Ex?O5(eMxHFdcEz1<-U4pC)!~Y(Q?giuEKoZ_t9zPxzE%mqz ld|YsM#{?eR;R&<*&;2vFUjz4R;C>C4s!RX? delta 4457 zcmeHJYiv|S6uvX}_QiIaUY4?yEnzDKT9sxs7z-3>u_%&~Y(+{5iMIcWlF*_CG#J4I zHCoc!PT(MvKv`auSDU5|D1nVBSfmZxKx42qv@O`9f+L{c(YP8?G;Tk)+TA%+77Qj$*k2iEmhMr7dxLxT0LHbzBjxcR9``{ zQB-{8>+A_s>ms<-@S>B}k76TKgtLr}#c+(cyHXb5(8$^PWUK9n(gr|6TWs*khJ?0#yv91BJ#3Q9mUjcE4|U$(Xc+ zC&b2Ueo>s)V0Pk+>|GQUDZb_cL&WnMMBN95m&h(<)J3G&J=KEvFWjM|qNFIDmS`W_ zq0kWN(;Lk1(3bM!q7zb`VRS~PU;i-c9o&l}AJC%s>x|o?{+O>bcJ%I^tm~+u(->ON z;qZ3|YL>EjGUsJBp%O|~GsA13_74;rMaK%CtUAcbm|1|XSYwTlMiCroV-X0o@N`mZ z*--O2idi~aoRG$leD5&xaEOulc7v(=-=FMU79cyU7l7hzcxP8X7!MMi0bB!zUNs#{59E6;Dj$eMR1< z2AA!3SnU|I95*G7koK$YD&T`gU~aM#4Iz#7h(vp|88A7Ce>U}Pw5RhD(wMFc#%b#u z1^x~}Q!@8M?~g1Wa*}yC(5O}=q_Iyqac!*pD48=p_7-Z#p!|z+dn&JF=IhvAv=t$Z zBFV;Z4;SrUI8ZpeD3-^ynX=K#yEs^J)$`q` zCaRmR1Jq`6O9WRMUMgu5ijAUwk`HoBZb9{8Oe~q7MX{0GWX$9}c*|aN{0=F_ScmC zHBD{}@HIM|9MMzL=njJi zYO;uLbDq`##l0r?9kdFP!aC#fYT!I=e^?pT`v@miK@w~`0? zC+dD_y}&1U5->j5TfwV!^A2u9kAjP$f2~i3mr|=lKfzWZ@`f_H0TnIGCy!SmYhFYp z1>mB6NExgm*Z*`hUE7bBQ-&Uf^AMe|bWZXkvD&#%;dlEgPm$AgX zn*WXdsD>Ou%G`mAP!?RYd)4aEEePMjkcc~=Y!1Lv=P;yJHFeQ;xqA*>9?{2#ztyoy z?iR{_hwazXn{X?;|JV1SA6Q#e&^qRog4SWv1w8`68g67z7u`g0P|l9&r#OUauzF;f zraaOh?INE1Z&IPSXlE~W5qA;8(s5zRh1uUE`RjmQtwSBdRCv&H1jR-$n;2fI%X)D~ bD8@!*GzX(SFxms7Juun>|K}cP3eEfn0CgS( diff --git a/sy8835_demo.si4project/sy8835_demo.sip_xab b/sy8835_demo.si4project/sy8835_demo.sip_xab index f30ad270beef74d5510b9cd3d767b95645a6f5d2..2e4a7555f6d960fde6f9abaf1e08babd99b60b35 100644 GIT binary patch delta 6209 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 XM2d0ft+X-M4_Z!hn6aC|AE+Rh8iyhd z#Zg512RLMKaCCGmE;>dKT>XAiT|Bs#_sKi%U2?s_ZZ{jxGGo`d-Hk2gM+}~$#8Xk#DA^%h!zOh@+sA~9?N5Ps!b7DCToHBP z6?i1Hqb^Nd37Grn>oe((2~&ocjic|9H@nFEkikb^UqxeP$-bZiZ0MQVej;k<+XQZj z7gRdH8_@%vfg2(O5+Eizz=);oJE9BJfb{p(vD>z#*V6AzaK3~~`r|qy1I#R(V0EvV ZzC2(IaJ~Rn_itcbdZXo)Ms5m|g!we-8Sq#FNgvoI1j#e-!rme=o^{`Z zD~vcc<8`lOf*o&NSe7OByW9dCI`FLCAsl{}0V5(rG5`{yU6^BK^)-8osfM!EcOt?) zk))fdu8-&#r@ENDAp%U^0q4X6k{oyqtW`L^{+ l