From 075256bef74952eca9e8be6920b3ae9dfb744582 Mon Sep 17 00:00:00 2001 From: Alex xu Date: Fri, 27 Dec 2024 11:05:00 +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=96ADC=E9=87=87=E6=A0=B7=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E6=9B=B4=E6=94=B9=E5=9C=A8ADC=E4=B8=AD?= =?UTF-8?q?=E6=96=AD=E4=B8=AD=E9=87=87=E6=A0=B7=E4=B8=BA=E5=9C=A8=E4=B8=BB?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E4=B8=AD=E8=BD=AE=E8=AF=A2=E9=87=87=E6=A0=B7?= =?UTF-8?q?=EF=BC=8C=E5=87=8F=E5=B0=8F=E7=B3=BB=E7=BB=9F=E5=BC=80=E9=94=80?= =?UTF-8?q?=EF=BC=9B=202=E3=80=81=E6=9B=B4=E6=94=B9NTC=E4=BF=9D=E6=8A=A4?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E9=80=BB=E8=BE=91=EF=BC=8C=E7=94=B1ADC?= =?UTF-8?q?=E7=94=B5=E5=8E=8B=E5=80=BC=E6=9B=B4=E6=94=B9=E4=B8=BAADC?= =?UTF-8?q?=E7=A0=81=E5=80=BC=EF=BC=9B=203=E3=80=81=E4=BC=98=E5=8C=96Boost?= =?UTF-8?q?=E6=94=BE=E7=94=B5=E9=80=BB=E8=BE=91=EF=BC=9B=204=E3=80=81?= =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=81=AF=E6=95=88=E6=98=BE=E7=A4=BA=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=9B=205=E3=80=81=E4=BC=98=E5=8C=96=E5=8F=8C?= =?UTF-8?q?=E5=90=91=E9=80=9A=E8=AE=AF=E5=8A=9F=E8=83=BD=EF=BC=9B=206?= =?UTF-8?q?=E3=80=81=E5=85=B6=E5=AE=83=E4=BC=98=E5=8C=96=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Out/8835_EVB_241213_1140.bin | Bin 16384 -> 0 bytes Out/8835_EVB_241213_1140.hex | 949 ----------------- Out/8835_EVB_241213_1140_7D68_010102.bin | Bin 16386 -> 0 bytes Out/8835_EVB_241227_1101.bin | Bin 0 -> 16384 bytes Out/8835_EVB_241227_1101.hex | 968 ++++++++++++++++++ Out/8835_EVB_241227_1101_1C4E_010102.bin | Bin 0 -> 16386 bytes Project/SY8835_Demo.uvgui.GH | 102 +- Project/SY8835_Demo.uvproj | 2 +- Src/startup/STARTUP.A51 | 2 +- UsrInc/adc/adc.h | 2 +- UsrInc/charger/charger_module.h | 14 +- UsrInc/inc/config.h | 51 +- UsrInc/inc/define.h | 11 +- UsrInc/inc/reg3315.h | 3 + UsrInc/led/led.h | 4 +- UsrInc/pmu/pmu.h | 2 + UsrInc/vox/vox_module.h | 31 +- UsrSrc/adc/adc.c | 102 +- UsrSrc/charger/charger_module.c | 15 +- UsrSrc/discharge/discharge_module.c | 26 +- UsrSrc/hall/hall.c | 2 + UsrSrc/key/key.c | 115 ++- UsrSrc/pmu/pmu.c | 41 +- UsrSrc/system/system.c | 6 +- UsrSrc/timer/sys_tim.c | 2 - UsrSrc/uart/uart.c | 100 +- UsrSrc/userapp/userapp.c | 104 +- UsrSrc/vox/vox_module.c | 366 ++++--- .../sy8835_demo.SearchResults | 13 +- sy8835_demo.si4project/sy8835_demo.sip_sym | Bin 450512 -> 450512 bytes sy8835_demo.si4project/sy8835_demo.siwork | Bin 35849 -> 78083 bytes 31 files changed, 1697 insertions(+), 1336 deletions(-) delete mode 100644 Out/8835_EVB_241213_1140.bin delete mode 100644 Out/8835_EVB_241213_1140.hex delete mode 100644 Out/8835_EVB_241213_1140_7D68_010102.bin create mode 100644 Out/8835_EVB_241227_1101.bin create mode 100644 Out/8835_EVB_241227_1101.hex create mode 100644 Out/8835_EVB_241227_1101_1C4E_010102.bin diff --git a/Out/8835_EVB_241213_1140.bin b/Out/8835_EVB_241213_1140.bin deleted file mode 100644 index 2cadc0c0bc37c76efb784f708100d4b31480625a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeHud2|%lnQtxKt=8TuwLl9?QM8Q2TG{|(FfD|Mv9akfvd5XpByEp~O@@JfpvEn* z=t6iBPYw=kBYUuqv6G1Bcm^Ss8C?Upb`Qdh8r#iH)_ySKWU z7K?Ev^Upg64%Kz1Cbk9Rc?}6y>vLflLW1$?h6JzuMq;?Si4lgOayIMk0MD_{ zkzejZ^2`5_{5rntvH5u}vzj7)JHm*<#NA227QMGU%ePFo84;!oYAqBdJLRl&DojkO7-2Ryvj*g?G&&5b*|v*lwt?fJ>!5z7 zQA|Y7j>cpD8OIx434ghzq1enqMX=dyGT8^qs7>3Fl$0@b zG;FmC6HmoLTzAc(nnUlNN;NyoW)Piq_K%k9iGi93lSN6Wu784<0i$Cu=|D7;>?C?Z zH>ep4tPbr-6Gxa$I#x^}my&2pO5Bq!(P>G{ZOI=i@o`h4Y0PBm1maQ7KoEN)j8AX3 z!?k)l<3kQToOCnQkUBCJn0KB-@=W;=rkFB=mANhTkU4ZNO;O>#?e0FKo$>OV4e2zf%Y8RSm~lxTlg`xL zzK|m1rdXJ1Z$^W#ARVmFIOn<{lAXCNot%B9MN^n$cxj?xljy9n)uM4&wx;}m7OzY* z`ttk|#+l7|E%TK*6yGxF;__|CYzL8_*V0UL+e900`HBoh)Zr;#**~DZio#b#U+1gj z5MlBoEYf{N#Fm(1UrY;;FveFGBN9!bfixnU<*Za<5NB0W<1f!}I$@aKQUQjP!m{bo zdRLhgO`tG)pgWn@bCP*|@g9dhlyLULn{Uz1eqr*b@-w3|!lVK~Dr3@N^m(KE$$=-l z#a6P=PSZR17t*eMd>dg|DH*n9^{mBoS3FB>W`FVY5wqH7Brn&s9$`wXA%~*Sd1`!$%9qwcrMcR7PQnB%Napk7f8^*xv*ENaP-LWBX_xg3K z#c!={UQWptpUQ|ww1Sw4cC85Tozor)~bVCT)wV( zy|`-a>eUo$+4{9>*WW`Cm#sBu)Z>ofV3rW8jGGtWEym>t_%14b_P8~4&61*w;Z7XjP8}7bq&APiPmTy|W z0UG>sedT2+R-{p^y(~rbOzIp6qNrcPJB7L8a+ozUX%OzdOT1+@@$T0!t*L0ZtrFG?SDn*6&Kih`A}K*TD0eM{zkOa-v18TbM{_d zZY^S)>{3>2Z(AR1roCz=QrhG|O3CC-^#;;+)4CcWYw~KioAidiiphD&Hip+XQ-k!% z3)J{#q*eryUK}Gl>CemffOPN+gkO%7_6-DM#T<0DOA4^CE|0O|GCV3)HP)L^rsL_? z4x^?kW?q(r9{T(hKjLJEn9Xy-d!n47$yyyJ{ND((Rd3?`r4hy+#l)OtY;kX9TDfRK zn0*Xw*mFjh){9|;S&Gq0F~S$c;3!6zV%&RC44z`#3k+?MB+E`!R;$%2tu~a`PxrNj z{qm&mh}CwjTBwoccYS)yH9mFkjSCz8|arkt%fwt+Qx!g%gAxWYe)RXJLf zRtMa7NHxM}dUreP`&)V@^^WfLm%9Da-2Pe*A84YkviZNWg>AJ(6UuDr7@L0usfSr* z64>fZHvd9e=af8%AoZEF&I?sxWs1o^-)9GZr4UjzDDn;}kZSXCQA1s*=BU%O8cD9o zQmbIJR;SfUa@}%@tJYaA7#-t*(XkE~4Ue&ZG;EpAaYavv3vB7= zG;>NdC9n3?r&`Uxk+h=cXI3;*sgwpaZGcO`=z7ZNM&IB5R~WUj)Ek7;81`1`afU?M zH~GGE9{aTFSpOzjrng%j9-Cki!dXKDS|z?~9(z6}>ty^@$VsApfExo28w%N<=?D0{bnJVnM{EXH^c&iP zs33G8Um02X+rwmY%;=H+obw#*c7@}1nou$X@=JX_0GieruW zp2*v^-nSESVRp>(y91>-c=p_p=*#qTMVa=TzMKGO&z8qwIOmh(F>c~PuI}w-UK^+I zQFYufJ{R!#3KAX89L^rj0cA#56iV(=hJ#rN)uraE1*)LB)gpDgP*Rf!Bu1vpJm-t)W#^w8P3Pnp-(QC5r_a&Frr-8SkHk5>EoEa3w#}#%o2&!>FIZ za~jX78*U6ZT5i}pVM{_Rm<_F`Z)JYc7TnHY|Lu3=4Xw@!80z8Uo%-jU`ms)ZNGR*< z(NFd0r+f4>_reSTTXYf$j<7MH@cIEfP! zr*^m{OR=?NsfU3X;D)oJr$^(^({pxp3yBXIX?@9IG)57aiFH{@I!}vh22p( z-|=K3`b0b`y7)b#(Z|n5|Idi(8VKaPb?86e{LC{l68J(H-yN$-4AsO3YeolZ&K|Eh z^Qf0QlmG6q(xbnA{V!dede*>AH)CzSg$byi|0;{|zSgM=WonPnql+%v>z(@R zK*H&Yug5rS9ESsi$!(?At}1=$_R{Aq#9`>re9 z_pJ#(@Rb(MDjh$&bis_$vZ#R;pXm-JrGFs0Rt7cXX7vVMM86x^~q^JN!jv%TzO zZ2%N;KGr4{-2G4i!se^()Wf1Il!WD<7i=in;P&MU6H1UpMaZJ@VOhzS-8@19x1&IV z@~g}@WjC5$cI5yXzFjWN2!|B@WhYON3hd!o9KfPDek43YEc!xvs6ctEVjYeMDjCfM z7t1ax&hj-Zza3x?f56Uo*=S_K>Rm#~?ad4DqY1%G8&~?$(ae+1Bd3*R zM>9{5_qF%8?bv=a)966C`ctzl^r_hvAZ?$TZB75$_T%k(2c^B;EK~Xwil&@aey_Z( ztWi!VHHu4lO8H!QOnF*)U-?A&gHl6q2Tn(Kb-Zz~?Tt4NZhzBAm5vOl=9~NM$FIV-R$qa-x&082W*V*<>9vDW@-P_ zsn@kljZAoNSw)c2YPYy~bq!mZ^+AVBD8@!H}YFjsy*7 zYz|3teP`}E=M$94hd z81X^w!M4hSZ3nk6IJljgbhEDj)e#*1U3Ic}*ywAUOUyB0pOhQJ#);xj>e^07kWC#2 zPR;Bt(h%J>AI!3dr;R?WK;Vt9GJj!|fZXv#pON`R32|7#IVC?!q7g0MIO%)}HpFT9 zM4#b2Asv5m*!cX3CC0HmON`GRzs`_8^XCtA7oHs~933i*#|jhg{#nw`bm*r$^i$FZ zN_dwW&^YOn({RdhqvLZ}X-GZWd)h{#y8`$Wvn!C>(Xnd;h2ggQw?{WNbGz>L$2vMX zlp_N_G4{TB(0KDdM`C*q9W-W*Mi-v_Z13zh4jPL{F}63+XH>+aw1OGxxZYUo=e2A} z%@(ibIq63En$==%Zg?R+e`EPs6V-AhEaYd+#5A}9lj05VipoToFZIB5HAiDLPUY1M z)v0Dim>}A;Jhe8$1W>}^Bsp%)ZrP{gsjSLrylSWQS8oa-Du8?-nN4`6rt#{#-3btD|&B z=#eWy2c{viaL@H}?R+tJYSJ@W9=u}N3WceEh@aF9(`l3qrjng%t%6O|4OqhRDO;&k zlgCU2=hPmK+YC+Gt=@n0`n6nEoNL# zjgzUhTV&WyO)fA^rqGz5mlxk@#-rNYmO=ZR7OW_CY8h%S^{ql({dM6`&V{2$bPAf2 z($PTVv|wu4sX8Rl;no~UxTyj0FOu;Rkr9$=`fVgMz>OJFJ#&KL_T#R|b9kO%n0n?5 zhTDU32c8%3`~uJa#PcMcpD|3=q^`+qF5h)^*MhEVx)#A~|yrYo;2rz^LfxhK(;y@XlGK#7~kPmugQ3UZ#~rdKI*siHE(y#BZY?k$W|_;(3-Xy>WRc0|izejWG8ZLs$fP z9%DWKn=3Eo%gY_*7)$*R$pVOyzx3I+dW{ z^RJ`X4z-=w^kaM90dquZ1y7*@Q7MWYU}vMC2e5|EZcZ4ANSaYL6l`xD zASVYo#I6X_47d|-hwicA(?4g7(!R|L%vGrA9zMC{h#44`$iT_!i9j~)POVB94GE`` z3t^d76(cT4*hI7@ZgSzOUWqURx*WxEi;>#U7`nM*Ya%XzvkCgk#bwH#ocLa_eZDN9AF1PIBSYK&|c({0gE@kufl z(Kt_A9V+f`;;`kP1}DTYm#{t;W(XET5>1K@L%Aiw3}Fzqdu>rexjMpZ!ZtBKN=|*q zEV2pyCNsn)9lP&o$RpifN>5!<42X`98Rj|6h~(6Xkj22!?Zvb=gjpzxRRht34^)#D z?0P5p#8@L+uKR7RESb4tIRdWPO->TdTBv}bzxFeAlqFjKL$ zcd-4Qf%Xg}WW{#|+hYSTjuZh7541bHk~Sff+n*>5xlYOx3jqCh0=20V6o-giS1X zc>p9ld}Ufb0m&0xgYAb1z?2BeXk0EW=pJmZg3>;RS_&#|D=U}H0qF!H-l3KOCT?Yw z2>?;s99k)=xu{b6Y+Bh?RxMUbl-t!(wG7~Q25@b#YOuW!=6fsUVo2RZKn}Gy$-iV4 z(5@xT4z&cZNnlu-q{Pufv62m)2)U2bO184NZ`i4K8lBra+d6xKJxnLl$#!y`e5b9` z-s$Mfh%nbjjlQ_iw^!78uJRaeJ|-DvyPpBUjx* z+@bEmLxu02YI#BlhMw;)*IQmxRwdi`*0I29=3<+>FH_f*-m!2)#p2#xEgMjAGN8Es&mENJU63E-K{N(Fj1U>PjUNi z@{kTaqpa^yfDYW6i;=N|oDD{pKBZ8Zw*S$s%x`a<_`7HEB_WF5iv_f&a^xu>_a(OWU?j^_= z5iywenOZ~*Z9cV^*qUxBMjQql-qsTxdVIaVzGH~iIto~2Q<@Q&({f+oC@ZAX0g8>KQoYRZew_!en_86g}{=gDa$G}2f zydlXmt5l4MpJJe5yg9ntkQa&SqUL-PfzFLb3`wZlfH9@|dnPX_n!xvv1FS?&yq-?Z zG2~p)Q%yD!-Juuz_Z0U(?kiI!osZEQdhwBg;zxXT%%tvDpiey3`$VYF%R3Yn(;H@+ zPqRWrv6Df=zPI>fsIWiY+y02pG1QHFxw+>WiZ}T{i`6FMvuR$%8S6#2=2S0v`*>}! zgaQY^VksEk5KJ(^pD@8~FLE=Fa&^DJh8%mP4ljRFVX@EtQmG`6#tcu+8{IXpH|8%D z-`MW8eR-S0E<1T7s${dA&FK=oN<`Wj-OBFrzt)jxTrBrxHcpO%5F7Nj8apwBKka=9 zRdO0YxRVosKOEft2XlWtaZQ1|3OI=JtCK z&kBz{fHm!P`qFl^EY+9pHWXaeMZsY-9yOE_($+|~Jiy_MMsirYRB!y4zD6OS8WZ?+ z`e=9_u3*PJr~N+CYaD?!(RlN$*(2lz?>)(d&g_w=GV+EF2uIPh_*@fN*(95sM+tTS zmu-SHdp4oJNugQ&2R=p0--HUec(;M1&CRHUW}~)|)c&OV??hL?y`vAzl%zAPhD%Bx zne{9(<7%@a%)7~c*&Sit)7zT>ARUTat~Rua2=l&)e%f0I^vVeHA*tiT1)-h^LD;YU zqdy1V32W47DDR{?Nx~#N?fWsmlftygl8TMofZmvq_?;s|n-t31#7QAn|7ci(qe21- zQ%E7d|Mf;ARIqF`JQY>&s8NB+g5UEQ&C1MVx(^zk<6ipl!o)z@i8;OCyPqc@>(d4{ z=p?Roy80mv)<+16O8}`OW7vtFb?(GEYBb+xEj^?3lSkTNKdoCrh>J*1vv^zebk^u_ zwhp)nx1(CZE}C)VqEt+ncraX$s$z)<$U9*n4Z=}KVH$*|5O*5HMj;FhLqhK7)vKkL z{E1z?T3aB=UK)WYU?fU%A8AEQNNlpyt4VaCG&u6D{~`&IXcV!hAVc!7zRoYlpk!n0{L-w9U~Q>gqb($R zO$LkaVfvYP##|NY{6{@uGh%MP;P$)S{&8-9vBwseAk?-gSoC!8bH{8XreGRt&0h7<`jH(9J{jWFMe8N%FgLft_W z^@MaTVFuF@=J@#ugRes*Mbc9Oa>?IhK$m64s@)__m+9S4MsXoroI9$`9rLFd!_3d}nE%?J5o5AA7fzffmyU4sQ|U9C{}Yhlg`0oTB* zA0YDvhKsf9*WD#nZxjO?R&U&h+aw!TZxUB^b9gB-mh_r@tJ2HT<~t?v7ced~ZWC+z z9UIS!`<=Si^gCB~FpANVG35DE)cI#{eo{%+1N+l zN-4}r*dl4$G5j?FQoovBr#H zj93B&BfMNeI6-?p_!zIfru{~HMtd$8mm3m_q&^=VeoTE${f+vJN?@xJVadFW;t=zA zd67+B)GhT&B<>Gt#6C@lCi0KOrQn~lf=}|nCq{#hJQRG4lZ2`-w0+udh1nB?Dn|Jd zV`VUruSV1d)m_BL3USU3%7LqUFv83rqYMVZ85m-M|H=k;oDKf?`_O9#7K8r+F{%Qz zU`HE`A1BcxgJayB=f!!W+Pt0rMzAQ#&Nwkp+8N)Mz?Mo|6#OK=`eG+eS728>aK!^x ZJaEMWS3GdV16Mq7#RLCecz|WO{|DS&&4&O0 diff --git a/Out/8835_EVB_241213_1140.hex b/Out/8835_EVB_241213_1140.hex deleted file mode 100644 index 105d19f..0000000 --- a/Out/8835_EVB_241213_1140.hex +++ /dev/null @@ -1,949 +0,0 @@ -:03000000022C9D32 -:0F2C9D0075FE7275FF00758E007581B0022CE711 -:0F35A7001231F3D2AED2BE122E1C12310080F4BC -:10228F004100F20002AF000002AB000002A9000003 -:10229F004100F300029D000002A3000002AD000008 -:1022AF0002A7000002A50000029F000002A100008B -:10006E0075FE3175FF8175FE0E43FF107DAB7F303F -:0C007E0012361E75FE3243FF03D2BD2275 -:10342600900000EFF04408FD7F311232BA900000A0 -:0F343600E09000F3F075A38175FE3243FF012291 -:0A35FB0075A38275FE3243FF022221 -:03006B000228D98F -:1028D900C0E0C0F0C083C082C0D075D000C000C0C5 -:0D28E90001C002C003C004C005C006C00746 -:1028F600900048E4F0E5FEF0E5A420E0030229E9B3 -:102906007F3512362578AB760008A6077F36123655 -:1029160025EF540378AB46F608E6F618E6FE08E619 -:10292600FF7C097DC4121FA8780A121F4678ABA641 -:102936000608A6079000F3E0121F82295D002970A1 -:1029460001297902298C03299F0429B20529C50684 -:1029560029D407000029E978ABE6FE08E67802CE1E -:10296600C313CE13D8F9799E807578ACE625E07945 -:10297600B0805378ABE6FE08E67803C333CE33CE99 -:10298600D8F979A4805978ABE6FE08E67802C33315 -:10299600CE33CED8F979AE804678ABE6FE08E67837 -:1029A60002C333CE33CED8F979A8803378ABE6FEAE -:1029B60008E67802C333CE33CED8F979A6802078DC -:1029C600ACE625E079A0F718E63319F7801578AB61 -:1029D600E6FE08E67802CEC313CE13D8F979A2F73D -:1029E600EE19F7E5A430E1347F3712362578A9765B -:1029F6000008A6077F38123625EF540378A946F655 -:102A060008E6F618E6FE08E6FF7C097DC4121FA854 -:102A1600780A121F4678A9A60608A60775A40F907D -:052A26000048E0F5FE90 -:102A2B00D007D006D005D004D003D002D001D000FF -:0B2A3B00D0D0D082D083D0F0D0E032A9 -:0722BF00C11EC11F010D0348 -:10350500E4780FF67811F6780DE67810F6781276ED -:08351500047D207F400232BA60 -:10276600E4FE78A9E6FC08E6FDC39460EC94094013 -:10277600037F0022EF700302287ED3ED9477EC945A -:1027860007400302285CED94EFEC94015003022805 -:102796005CD3ED947FEC94064022D21C780DE6FFC4 -:1027A600137810F6301D11D3ED94B3EC9406400463 -:1027B600C21D80047810A607E4FE8070D3ED947FD6 -:1027C600EC94065043ED94F7EC9402403BD21D780E -:1027D6000DE6FF7810F6301C13D3ED9449EC940601 -:1027E6005004C21C8006EFC3137810F678127604E4 -:1027F600300F11D3ED9437EC94035004C20F8004CC -:1028060078127601E4FE8024D3ED94F7EC9402501E -:102816001BD20F78127601301D10ED94CEEC940287 -:102826005004C21D800478127604E4FE301A11C3E7 -:10283600ED9431EC94075006C21AE4FE80027E0144 -:10284600301B2FD3ED941CEC94024006C21BE4FE11 -:1028560080207E01801CD3ED9477EC94074006D24D -:102866001A7E01800DD3ED94EFEC94015004D21B37 -:102876007E01C218C2198058C21AC21BD3ED94D762 -:10288600EC94085031ED9413EC9401402930181063 -:10289600ED9493EC94085006C218E4FE80027E0183 -:1028A60030192DD3ED943EEC94014006C219E4FE96 -:1028B600801E7E01801AD3ED94D7EC94084004D292 -:1028C60018800BC3ED9413EC94015002D2197E01CB -:0228D600AF064B -:0128D80022DD -:102E85009000EBE05463600CE4FF1233C2E4780E6B -:102E9500F6C21E227F01122766EF6008E4FF123397 -:102EA500C2D21F22C21F9000ECE05407FFBF0607E5 -:102EB500D21E780E7602227810E6FD7F221232BAF3 -:102EC5007812E6FD7F211232BA780FE6C454F07805 -:102ED5001146FD7F231232BA7F011233C2780E7676 -:042EE50001C21E22E6 -:0422C600C139C13A1F -:10300C009000EBE0FF30E603C23922EF30E205C25C -:10301C0039D23A22304008E4FF1233E4C23922900C -:10302C0000EBE030E503C23922E4FF122766EF60C3 -:10303C000AC239E4FF1233E4D21F22C21FD2393044 -:10304C003A19780EE6B40113C378B0E6941018E67A -:0C305C00940E4005D239C23A22C239223B -:1034EC00426F78204F70656E2E0D0A00426F782067 -:0934FC00436C6F73652E0D0A008C -:0822CA00C13BC13C4100F5FFDE -:1030B700E4900000F09000ECE0FF5420FE90000048 -:1030C700F09000F5E06E6030EF30E50E9000F4749C -:1030D70001F07BFF7A3479EC800BE49000F4F07B0D -:1030E700FF7A3479F812198FD23BD23CD23590004F -:0830F70000E09000F5F0D23D6D -:0130FF0022AE -:10322A006C6F6E672032732070726573730D0A00BB -:10323A00737570706572206C6F6E672038732070BA -:10324A00726573730D0A0073686F72742070726509 -:05325A0073730D0A0072 -:1022D200C127C126C1250118004100EF004100EECF -:0622E200004200F00000C4 -:1025DB009000ECE030E4379000F0E475F001121E4F -:1025EB004E9000F0E0FEA3E0FFC39464EE94004035 -:1025FB0007202314D2238010C3EF9490EE94014054 -:10260B0007202404D224D225D220C221803A3020A4 -:10261B0030D23DC220D221C2249000F0E0FEA3E0D4 -:10262B00FFD39419EE94005008D227D222D23580D2 -:10263B0010C3EF94FAEE94005007302304C223D258 -:10264B0026E49000F0F0A3F030213FC22130261495 -:10265B00C22678187602E49000EFF07BFF7A32798D -:10266B002A12198F30250FC225781876037BFF7A33 -:10267B0032793A12198F302215C222781876017BE3 -:10268B00FF7A32795112198F8004E47818F6900092 -:10269B00F4E0640160030227657818E664026003C6 -:1026AB0002272C9000EFE0C3940150107D017F01B5 -:1026BB00122441E4900075F0A3F080529000EEE0FC -:1026CB00D394054004E4F08039900076E0B4010F18 -:1026DB00E4FD7F021224419000767402F0802F906B -:1026EB000076E064027027900075E0601A7D017F30 -:1026FB0002122441E4900075F0A3F09000EFF07803 -:10270B0018F67F03022D2CE4FD7F0112244190006B -:10271B00EFE0D3941440349000EEE004F0E4A3F027 -:10272B00227818E6640370329000EFE0FFC3941E2A -:10273B005020EF540125E060047D0180099000EFEB -:10274B00E030E007E4FD7F031224419000EFE0044A -:0A275B00F022E47818F69000EFF089 -:012765002251 -:1022E80041007E0041007D0041007F0041007C00EC -:0F35B60075FE0B75FF0FC290C291C293C2922295 -:1034B800EF14600D14600D14600D2403700BD2908E -:0A34C80022D29122D29222D2932246 -:05344500900000E0FF13 -:10344A00EF14600D14600D14600D2403700BC2900C -:0A345A0022C29122C29222C29322E4 -:102F4C00E4FF74802FF582E43400F583E4F074849C -:102F5C002FF582E43400F583E4F0EF25E02488F5C6 -:102F6C0082E43400F583E4F0A3F0EF25E02490F53F -:102F7C0082E43400F583E4F0A3F0EF25E02498F527 -:102F8C0082E43400F583E4F0A3F0EF25E024A0F50F -:0F2F9C0082E43400F583E4F0A3F00FEFB404A354 -:012FAB002203 -:102EE900AC0774802CF582E43400F583EDF0EAC375 -:102EF90013FEEB13FFEC25E02488F582E43400F59A -:102F090083EEF0A3EFF0AF03EC25E02490F582E423 -:102F19003400F583EAF0A3EFF0900005E0FEA3E0AA -:102F2900FFEC25E02498F582E43400F583EEF0A364 -:102F3900EFF0EC25E024A0F582E43400F583E4F019 -:032F4900A3F022D0 -:10317F0074802FF582E43400F583EDF074842FF51D -:10318F0082E43400F583EBF0EF25E02488F582E448 -:10319F003400F583E4F0A37469F0EF25E024A0F583 -:0B31AF0082E43400F583E4F0A3F0227A -:1015B700E4900000F0F0900000E0FFC394044003C3 -:1015C7000218F974802FF582E43400F583E0602275 -:1015D70024FE60241470030216C114700302173826 -:1015E70024036003021895900000E0FF1234B8024C -:1015F7001895123445021895900000E0FF25E02465 -:1016070088F582E43400F583E0FCA3E0FDEF25E0F4 -:1016170024A0F582E43400F583E0FEA3E0C39DEE49 -:101627009C50051234B88003123445900000E0FF47 -:1016370025E02490F582E43400F583E0FCA3E0FD87 -:10164700EF25E024A0F582E43400F583E0FEA3E073 -:10165700C39DEE9C5003021895900000E025E024FE -:10166700A0F582E43400F583E4F0A3F0EF25E0244D -:1016770098F582E43400F583E0FEA3E0D39400EE0E -:1016870094004016900000E025E02498F582E434A9 -:1016970000F58374FFF5F0121E4E900000E0FF2561 -:1016A700E02498F582E43400F583E0FCA3E04C6085 -:1016B7000302189574802F021754900000E0FF254D -:1016C700E02488F582E43400F583E0FCA3E0FDEF35 -:1016D70025E024A0F582E43400F583E0FEA3E0D3FF -:1016E7009DEE9C50051234B88003123445900000DB -:1016F700E0FF25E02490F582E43400F583E0FCA3C5 -:10170700E0FDEF25E024A0F582E43400F583E0FE58 -:10171700A3E0C39DEE9C5003021895900000E025BE -:10172700E024A0F582E43400F583E4F0A3F0021886 -:1017370095900000E0FF2484F582E43400F583E00F -:101747007017123406C241900000E02480F582E44D -:101757003400F583E4F0021895900000E0FF24843C -:10176700F582E43400F583E0FE6402704B204114F7 -:10177700D241EF25E02488F582E43400F583E4F0D4 -:10178700A37469F0900000E0FF25E02488F582E467 -:101797003400F583E475F001121E4EEF25E024882E -:1017A700F582E43400F583E0FCA3E0C394FEEC94F7 -:1017B70000500302187F804EEE6401705A204117D3 -:1017C700D241900000E025E02488F582E43400F55A -:1017D70083E4F0A374FEF0900000E0FF25E0248886 -:1017E700F582E43400F58374FFF5F0121E4EEF2501 -:1017F700E02488F582E43400F583E0FEA3E0D39487 -:1018070069EE94005072900000E02484F582E4347D -:1018170000F583E4F08061900000E0FF2484F58206 -:10182700E43400F583E06403704EEF25E02488F587 -:1018370082E43400F583E0FEA3E0FFC394FEEE9458 -:10184700004004D241800BD3EF946AEE940050021B -:10185700C241900000E025E0248830410DF582E484 -:101867003400F58374FFF5F0800BF582E43400F55E -:1018770083E475F001121E4E900000E0FF25E0247E -:1018870088F582E43400F583A3E0FD123068900008 -:1018970000E0FF701174802FF582E43400F583E0D7 -:1018A70090007EF08043900000E0B401102480F5A2 -:1018B70082E43400F583E090007DF0802C900000F6 -:1018C700E0B402102480F582E43400F583E0900050 -:1018D7007FF08015900000E0B4030E2480F582E4C9 -:1018E7003400F583E090007CF0900000E004F00203 -:1018F70015BDE4900000F0900000E0FFC394045091 -:101907001BEF25E024A0F582E43400F583E475F0AD -:0C19170001121E4E900000E004F080DB86 -:0119230022A1 -:1022F800C13E4100E0004200E100004100E30F411F -:0523080000DF00C13DF3 -:10354A00D2AC759A03D2BCD2BDD2A9D2AB75FE3029 -:04355A0043FF802289 -:10355E00C2ACE4F59AC2BCC2BDC2A9C2AB75FE3004 -:04356E0053FF7F2266 -:10325F00303E21302C27C22C9000DFE004F0E0C379 -:10326F0094054019E4A3F07DAA7F4F1232BAE4907F -:0E327F0000DFF02212355E43870212354A222C -:10357200780EE664016006200E03303D04C23DC3AE -:0335820022D3222F -:1031F3001233111235971235E2E4F58612006E7D13 -:10320300087F7612361ED2A8D2AF1235057D697FAC -:10321300031235341235B6122F4C12000E12328DB2 -:073223009000D47401F022B9 -:0300030002362C96 -:06362C00D23D75E20F32F1 -:10230D002040290000000000000000000000000037 -:10231D0000000000000000000000000000000000B0 -:10232D0000000000000000000000000000000000A0 -:10233D000000000000000000000000000000000090 -:07234D00000000C138C13798 -:1033110075FE0443FF0C75FE0343FF0C75FE0E534F -:10332100FFF043FF09D2DF43878075BA0375AADC3A -:06333100759852D2AC2297 -:0631BA00900043121F7992 -:1031C000E4900046F05398EFF0900046E0C39FE48F -:1031D0009E501C2036FDD236900043E475F001125B -:1031E0001F62121D7FF599900046E004F080DA43DB -:0231F000981035 -:0131F20022BA -:03002300022A4668 -:102A4600C0E0C0F0C083C082C0D075D000C000C056 -:072A560002C003C006C00727 -:102A5D00309904C299C236209803022B1BC298D21A -:102A6D003D9000E4E014602114604D2402600302E7 -:102A7D002B1BE5999000E4B4550D7401F0A3E4F01F -:102A8D00A3F09000E580138027AF997E00BE551D01 -:102A9D00BFAA1A9000E47402F0A3A3E02429F8A6BB -:102AAD00999000E5E475F001121E4E80619000E4EE -:102ABD00E4F0A3F0A3F080569000E5A3E02429F8FC -:102ACD00A6999000E5E475F001121E4E9000E5E028 -:102ADD00FAA3E0FB64074A700D782BE62404FEE4AC -:102AED0033A3F0A3CEF09000E7E06A7003A3E06B90 -:102AFD00600FD39000E6E094409000E5E094004034 -:0E2B0D000D9000E5E4F0A3F09000E4F0D23863 -:102B1B00D007D006D003D002D000D0D0D082D08343 -:052B2B00D0F0D0E03203 -:0E35D40090002BEFF012360E90002BE0FF223D -:1035970075F10A759F03759EFD759692759A0222BD -:08360E002037FDD2378F97220F -:03008B0002351D1E -:10351D00C0E0E59630E1055396FDC237E59630E003 -:07352D00035396FED0E032CB -:102354004300D40402024100D200C135C13441001B -:0E236400D3004100D7004100D0004100D1005D -:10333700E4FB7D04FF12317FE4FB7D047F01123142 -:103347007FE4FB7D047F0212317FE4FB7D047F0372 -:0333570002317FC1 -:10123B00201F06200B030212D9203007D230D235E3 -:10124B000212D690007EE06403601A900005E4F071 -:10125B00A3740AF07B147A007D02E4FF122EE9904E -:10126B00007E7403F090007DE06403601A9000052B -:10127B00E4F0A3740AF07B147A007D027F01122E36 -:10128B00E990007D7403F090007FE06403601A9096 -:10129B000005E4F0A3740AF07B147A007D027F0250 -:1012AB00122EE990007F7403F090007CE0640360E1 -:1012BB001A900005E4F0A3740AF07B147A007D0207 -:1012CB007F03122EE990007C7403F0D23D22303064 -:1012DB0008C230C232C231D234780EE664016003E8 -:1012EB000213E6301E5C203205D232123337E49003 -:1012FB000005F0A3F0FBFA7D01FF122EE9E490004C -:10130B0005F0A3F0FBFA7D017F01122EE9E49000BA -:10131B0005F0A3F0FBFA7D017F02122EE9E49000A9 -:10132B0005F0A3F0FBFA7D017F03122EE990007EFE -:10133B007401F090007DF090007FF090007CF00243 -:10134B0013DD20310CD231D235E49000D7F00213EB -:10135B00DD9000D2E0C394015057E004F09000D729 -:10136B00E014601A14602714603424037064900036 -:10137B007EE06404605C7B017D04E4FF802E9000C2 -:10138B007DE06404604C7B017D047F01801E900036 -:10139B007FE06404603C7B017D047F02800E900043 -:1013AB007CE06404602C7B017D047F0312317F8021 -:1013BB00219000D2E0C3940F5005E004F08013E4B9 -:1013CB009000D2F09000D7E004F0E0C39404400208 -:1013DB00E4F0C23CC20CC227D2332230310AC231F4 -:1013EB00123337D235D23422303549E49000D2F063 -:1013FB00C235900005F0A3F0FBFAFDFF122EE9E4D5 -:10140B00900005F0A3F0FBFAFD7F01122EE9E490AA -:10141B000005F0A3F0FBFAFD7F02122EE9E4900029 -:10142B0005F0A3F0FBFAFD7F03122EE990007E740A -:10143B000202159E203C0C203309200C06202703AA -:10144B000215B69000D2E0FFC394015004E004F003 -:10145B0022EFC3946440030215AC9000D2E004F079 -:10146B007814E6C39419503790007EE06403700340 -:10147B000215B6E4900005F0A3F07B64FA7D03FF40 -:10148B00122EE990007E7404F0E4900005F0A3F0B6 -:10149B00FBFAFD7F01122EE990007D7402803278F9 -:1014AB0014E6C394325041E4900005F0A3F0FBFA2C -:1014BB007D01FF122EE990007E7401F0E49000058F -:1014CB00F0A3F0FBFA7D017F01122EE990007D74F1 -:1014DB0001F0E4900005F0A3F0FBFAFD7F02122E61 -:1014EB00E990007F740280487814E6C3944B505700 -:1014FB00E4900005F0A3F0FBFA7D01FF122EE990BA -:10150B00007E7401F0E4900005F0A3F0FBFA7D017E -:10151B007F01122EE990007D7401F0E4900005F03C -:10152B00A3F0FBFA7D017F02122EE990007F74017C -:10153B00F0E4900005F0A3F0FBFAFD7F03122EE917 -:10154B0090007C7402F0227814E6C39464505CE43F -:10155B00900005F0A3F0FBFA7D01FF122EE9E49059 -:10156B000005F0A3F0FBFA7D017F01122EE9E49058 -:10157B000005F0A3F0FBFA7D017F02122EE9E49047 -:10158B000005F0A3F0FBFA7D017F03122EE990001A -:10159B007E7401F090007DF090007FF090007CF065 -:0B15AB0022C23CC233C20CC227D23562 -:0115B6002212 -:103482009000F2E0FF04F01234269000F2E0C394C0 -:0B349200084005E4F07F01227F0022CB -:10346400122E8512300C1230B71225DB1232E630E0 -:0E347400280BC228122BF212123B121FD52277 -:093605007B017A0079E9022FAC87 -:102B3000E4900000F09000D4E0FFA3E0FE6F60415D -:102B4000A3EEF09000D4E0A3F024FD602F240260F7 -:102B500003022BF1900005E4F0A37403F07B647A88 -:102B6000007D02E4FF122EE9900005E4F0A3740357 -:102B7000F07B647A007D027F01022EE99000E38001 -:102B8000529000D5E024FE602D146031146054246E -:102B900003705E9000D0E004F0E0C39408405290CF -:102BA00000D47402F0E49000D0F07815E670429002 -:102BB00000D47404F0229000D47403F022302C313D -:102BC000C22C9000E3E0D39400400CE014F0303DC0 -:102BD00020C23D740FF0229000D47404F0E4900001 -:102BE000DFF022123572500302325F9000D474027B -:012BF000F0F4 -:012BF10022C1 -:10310000302B36C22B9000D1E0FF04F0EF14601298 -:103110001460141460161460182404701C12348295 -:10312000801712360580121235FB800D1234648030 -:1031300008122B30E49000D1F0302D05C22D12156D -:02314000B722B4 -:100BAE00426F7820436C6F73652E0D0A00426F788A -:100BBE00204F70656E2E0D0A004F70656E20426FCD -:100BCE007820434D44205458204F7665722E0D0ADE -:100BDE00004F70656E20426F7820416E6420456133 -:100BEE007270686F6E6520476574496E2E0D0A002F -:100BFE00436C6F736520426F7820416E6420466FA0 -:100C0E0072636520566F6C746167652055702E0D8A -:100C1E000A00564F58204348472046756C6C2E0DDF -:100C2E000A00564F582047657420496E746F205342 -:100C3E006C6565702E0D0A00466F6C6C6F772043E5 -:100C4E00484720496E697453746120536574204D72 -:100C5E0061782056706D69642E28566F785F7374B4 -:100C6E00613A3078257829286C696E653A256429B1 -:100C7E000D0A00466F6C6C6F772043484720496E13 -:100C8E0069745374612E28566F785F7374613A30AD -:100C9E0078257829286C696E653A2564290D0A0035 -:100CAE00466F6C6C6F772043484720537461312C2C -:100CBE004E6F2045617250686F6E6520496E2042FE -:100CCE006F782E286C696E653A2564290D0A0046E8 -:100CDE006F6C6C6F772043484720537461312C56EC -:100CEE004F5220436867696E672849766F723A25BE -:100CFE00646D41292E286C696E653A2564290D0AAA -:100D0E0000466F6C6C6F77204348472053746131F7 -:100D1E002C564F4C20436867696E672849766F6C76 -:100D2E003A25646D41292E286C696E653A25642931 -:100D3E000D0A00466F6C6C6F772043484720537442 -:100D4E0061322C4765742049564F523A25646D41E5 -:100D5E002E286C696E653A2564290D0A00466F6C63 -:100D6E006C6F772043484720537461322C4765746B -:100D7E002049564F4C3A25646D412E286C696E659C -:100D8E003A2564290D0A00466F6C6C6F7720434834 -:100D9E004720537461332C564F58204368672052B6 -:100DAE0065496E69742E286C696E653A2564290D45 -:100DBE000A00466F6C6C6F7720434847205374616E -:100DCE0033284356292C564F522056706D69642095 -:100DDE004164645374612849766F723A25646D419B -:100DEE00292E286C696E653A2564290D0A00466F16 -:100DFE006C6C6F77204348472053746133284356F9 -:100E0E00292C564F522056706D69642053756253CB -:100E1E0074612849766F723A25646D41292E286CCB -:100E2E00696E653A2564290D0A00466F6C6C6F7702 -:100E3E00204348472053746133284343292C564F8F -:100E4E00522056706D69642053756253746128493F -:100E5E00766F723A25646D41292E286C696E653A5B -:100E6E002564290D0A00466F6C6C6F772043484746 -:100E7E002053746133284343292C564F5220567009 -:100E8E006D6964204164645374612849766F723AC7 -:100E9E0025646D41292E286C696E653A2564290DED -:100EAE000A00466F6C6C6F7720434847205374617D -:100EBE0033284356292C564F4C2056706D696420AA -:100ECE004164645374612849766F6C3A25646D41B0 -:100EDE00292E286C696E653A2564290D0A00466F25 -:100EEE006C6C6F7720434847205374613328435608 -:100EFE00292C564F4C2056706D69642053756253E1 -:100F0E0074612849766F6C3A25646D41292E286CE0 -:100F1E00696E653A2564290D0A00466F6C6C6F7711 -:100F2E00204348472053746133284343292C564F9E -:100F3E004C2056706D696420537562537461284954 -:100F4E00766F6C3A25646D41292E286C696E653A70 -:100F5E002564290D0A00466F6C6C6F772043484755 -:100F6E002053746133284343292C564F4C2056701E -:100F7E006D6964204164645374612849766F6C3ADC -:100F8E0025646D41292E286C696E653A2564290DFC -:100F9E000A00466F6C6C6F7720434847205374618C -:100FAE00342C564F782056706D696420416464531A -:100FBE00746128566F75743A307825782C49766F9F -:100FCE006C3A25646D412C49766F723A25646D41F9 -:100FDE0029286C696E653A2564292E0D0A00466F24 -:100FEE006C6C6F772043484720537461342C564FF6 -:100FFE0078204368696E6728566F75743A30782585 -:10100E00782C49766F6C3A25646D412C49766F7257 -:10101E003A25646D4129286C696E653A2564292E3E -:10102E000D0A00466F6C6C6F77204348472053744F -:10103E0061342C564F522056706D696420416464A1 -:10104E0053746128566F75743A307825782C49762A -:10105E006F723A25646D4129286C696E653A256474 -:10106E00292E0D0A00466F6C6C6F7720434847207F -:10107E00537461342C564F52204368696E6728565C -:10108E006F75743A307825782C49766F723A2564EC -:10109E006D4129286C696E653A2564292E0D0A006A -:1010AE00466F6C6C6F772043484720537461342C25 -:1010BE00564F4C2056706D696420416464537461C0 -:1010CE0028566F75743A307825782C49766F6C3ABD -:1010DE0025646D4129286C696E653A2564292E0DAB -:1010EE000A00466F6C6C6F7720434847205374613B -:1010FE00342C564F4C204368696E6728566F7574B2 -:10110E003A307825782C49766F6C3A25646D4129F2 -:10111E00286C696E653A2564292E0D0A00466F6C9F -:10112E006C6F7720434847205375625374612C5679 -:10113E004F4C2F564F52286C696E653A2564292EF6 -:10114E000D0A00466F6C6C6F77204348472053752D -:10115E00625374612C564F52286C696E653A256441 -:10116E00292E0D0A00466F6C6C6F7720434847207E -:10117E005375625374612C564F4C286C696E653AE8 -:10118E002564292E0D0A00466F6C6C6F772043483C -:10119E0047205375625374612C285354413A30786A -:1011AE0025782C56706D69643A3078257829286C2C -:1011BE00696E653A2564290D0A00466F6C6C6F776F -:1011CE0020434847204164645374612C2853544192 -:1011DE003A307825782C56706D69643A30782578D7 -:1011EE0029286C696E653A2564290D0A00000000F5 -:1011FE0000000000000000000000000000000000E1 -:10120E0000000000000000000000000000000000D0 -:10121E0000000000000000000000000000000000C0 -:0D122E0000000000000000000000000000B3 -:10237200C10EC10CC10D410077FFC10B42004F00DD -:102382000042004D00004200750000420072000051 -:10239200420078000041007B00106900000000004C -:1023A200000000000000000000000020247900006E -:1023B200000000000000000000000000000000001B -:1023C200000000000000000000000000000000000B -:0623D20000004100740050 -:052D2C00900043EFF0F0 -:102D3100E4A3F0A3F07F27123142900044EFF07F2B -:102D410037123142900045EFF0900043E024FD60DE -:102D51001B14602424FE602824057035900045E092 -:102D61004494F0900044E04498F08025900044E0C1 -:102D71004406F054E7F08019900045E054FD8009C5 -:102D8100900045E04402F054FEF0900044E054E12C -:102D9100F0900044E0FD7F271232BA900045E0FD3B -:052DA1007F370232BA89 -:101FD5009000EBE054186003D20B22C20B203903AA -:101FE50002224B303B65200D0D7F3C1234D27F0120 -:101FF5001233E4D20D227F03122D2CE490004CF015 -:1020050090004AF0A3F0C2009000F4E0702AC20CE0 -:10201500D201D202C203C207C208C209900075F0FC -:10202500A3F0D20EC234900070F0A3F090007AF0C5 -:102035007BFF7A0B79AE800EC201C202D203C205C4 -:102045007BFF7A0B79BB12198FC23B200303022158 -:102055000190004AE0C3940550030221EF90004B24 -:10206500E0C39405500A7F06122D2C90004B802A60 -:1020750020004990004CE0FFD3940B5022EF75F0FF -:102085000384E5F07003FD800990004CE020E00733 -:102095007D017F0612244190004CE004F0805D7FB5 -:1020A50004122D2CE490004CF0D200D204C20DC2D3 -:1020B5000E7BFF7A0B79C712198F8040300404C25A -:1020C50004802F9000EDE0540CFBE4FAF9F8900041 -:1020D50049E0FFE4FCFDFEC3121F35601F9000EDD3 -:1020E500E0540C600DD20CD2357BFF7A0B79DF12F0 -:1020F500198F9000EDE0540C900049F02001030287 -:102105002248303438200D237F011233E4D20DD21A -:102115000EE4900070F0A3F090007AF090004BF080 -:1021250090004AF090004CF0C207227F03122D2C3C -:102135007BFF7A0B79FE12198FC234803590004AE5 -:10214500E0D3940350030221EF90004BE0FFD394BA -:102155000B501FEF75F00384E5F07003FD800990C7 -:10216500004BE020E0077D017F8112244190004B68 -:10217500807890004CE0FFD39432501FEF75F00348 -:1021850084E5F07003FD800990004CE020E0077DB8 -:10219500017F0712244190004C804F3002077F03D6 -:1021A500122D2CC202900071E0700C7B017A00792F -:1021B5005112008E0222482007489000EDE054306D -:1021C500FFE4FCFDFE7B30FAF9F8C3121F35601100 -:1021D5009000EDE0540CFFE4FCFDFEEF6003303FA2 -:1021E5006290004AE0C394325004E004F0227BFF81 -:1021F5007A0C792012198FD207C20D7F04122D2C6B -:10220500804190004CE0FFD3940B5022EF75F00312 -:1022150084E5F07003FD800990004CE020E0077D27 -:10222500017F8012244190004CE004F080152008C5 -:1022350012D2087F04122D2CC20E7BFF7A0C793046 -:1022450012198FC20622200614D2067F04122D2CE5 -:10225500C20E9000EDE0540C900049F0229000ED84 -:10226500E0540CFBE4FAF9F8900049E0FFE4FCFDCA -:10227500FEC3121F3560129000EDE0540CFF6004A0 -:09228500D20CD235900049EFF0B3 -:01228E00222D -:06008E00900000121F7932 -:1000940090007AE01470030201AB1470030202DCD6 -:1000A40014700302038614700302065E24046003C2 -:1000B400020932900000121F59900020121D98600E -:1000C4000302093290007BE0D3940A5046E004F026 -:1000D40090001BE475F03C121F08300A0302093239 -:1000E400900000121F5990001B121E64FF1234D29C -:1000F4007BFF7A0C79469000EDE0FF900006E4F077 -:10010400A3EFF0A37403F0A3744BF012198FD20A77 -:10011400020932E490007BF0C20A900000121F59D9 -:10012400900016E4121DD7900015E4121DD790001C -:1001340013E4121DD7900012E4121DD7900011E4AD -:10014400121DD7900010E4121DD7900018E4121D60 -:10015400D7900017E4121DD790000EE4F5F0121F9B -:100164000890000CE4F5F0121F08900019E4F5F073 -:10017400121F0890001DE475F03C121F0890007ACD -:100184007401F0E490004FF0A3F07BFF7A0C7981C6 -:100194009000EDE0FF900006E4F0A3EFF0A37403F9 -:1001A400F0A374720203FF9000EDE0FB5420FFE41F -:1001B400FCFDFEEF602BEB5410FF60259000001255 -:1001C4001F599000207401121DD7E490007AF07B2F -:1001D400FF7A0C79AE9000067403F0A374810203D5 -:1001E400FF9000EDE05420FFE4FCEF706278A1E69C -:1001F400FE08E6FF900000121F59900002EE8FF0F7 -:10020400121F087D05121DF9EF7802C333CE33CED9 -:10021400D8F9FF900000121F59900006EE8FF012DB -:100224001F0878A1E6FC08E6FD25E0FFEC3390000A -:100234000A8FF0121F087BFF7A0C79DD900006EC20 -:10024400F0A3EDF0A37403F0A3748FF012198F9050 -:1002540000EDE05410FFE4FCFDEF7065789DE6FED0 -:1002640008E6FF900000121F59EE8FF0121EE918E5 -:10027400E6FE08E6FF7D05121DF9EF7802C333CED2 -:1002840033CED8F9FF900000121F59900004EE8F6E -:10029400F0121F08789DE6FC08E6FD25E0FFEC332C -:1002A4009000088FF0121F087BFF7A0D790F9000E1 -:1002B40006ECF0A3EDF0A37403F0A3749CF0121900 -:1002C4008F900000121F5990001F7401121DD790C7 -:1002D400007A7402F0020932D3900050E094059041 -:1002E400004FE094005003020395E490004FF0A304 -:1002F400F09000EDE05420FFE4FCFDEF703778A1AE -:10030400E6FE08E6FF900000121F5990000EEE8FE3 -:10031400F0121F089000187401121DD77BFF7A0D8C -:100324007941900006EEF0A3EFF0A37403F0A374F8 -:10033400B8F012198F9000EDE05410FFE4FCFDEFCB -:100344007037789DE6FE08E6FF900000121F599072 -:10035400000CEE8FF0121F089000177401121DD7C5 -:100364007BFF7A0D796B900006EEF0A3EFF0A37497 -:1003740003F0A374C2F012198F90007A7403F00290 -:100384000932D3900050E0940290004FE094005062 -:100394000AE475F001121E4E020932E490004FF097 -:1003A400A3F0900000121F5990000A121E64FFAEC1 -:1003B400F090000E121E64D39FE5F09E501C900036 -:1003C40000121F59900008121E64FFAEF090000C3A -:1003D400121E64D39FE5F09E4025E490007AF090CD -:1003E4000000121F5990001FE4121DD77BFF7A0DE5 -:1003F40079959000067403F0A374DCF002092F9041 -:100404000000121F59900018121D98640160030225 -:10041400052F90000E121E64D39414E5F09400404E -:10042400030204AE9000EDE030E54B900016740139 -:10043400121DD790001B121E64C3943CE5F0940077 -:10044400400D900000121F59900018E4121DD7901F -:100454000000121F5990000E121E64FF900006E562 -:10046400F0F0A3EFF0A37403F0A374EEF07BFF7A33 -:100474000D79C002052C900000121F5990001374CE -:1004840001121DD7900000121F5990000E121E6415 -:10049400FF900006E5F0F0A3EFF0A37403F0A3745B -:1004A400F5F07BFF7A0D79FC807E900000121F59D5 -:1004B400900006121E64FFAEF090000E121E64D36C -:1004C4009FE5F09E9000004030121F599000137475 -:1004D40001121DD7900000121F5990000E121E64C5 -:1004E400FF900006E5F0F0A3EFF0A37403F0A3740B -:1004F400FFF0FB7A0E7938802F121F599000167482 -:1005040001121DD7900000121F5990000E121E6494 -:10051400FF900006E5F0F0A3EFF0A37404F0A374D9 -:1005240006F07BFF7A0E797412198F900000121F67 -:1005340059900017121D986401600302093290005B -:100544000C121E64D39414E5F0940040030205DBFE -:100554009000EDE030E44B9000157401121DD7902B -:10056400001B121E64C3943CE5F09400400D9000FF -:1005740000121F59900017E4121DD7900000121F9B -:100584005990000C121E64FF900006E5F0F0A3EFF2 -:10059400F0A37404F0A37419F07BFF7A0E79B0020F -:1005A400092F900000121F599000127401121DD7D8 -:1005B400900000121F5990000C121E64FF90000658 -:1005C400E5F0F0A3EFF0A37404F0A37420F07BFF34 -:1005D4007A0E79EC02092F900000121F5990000442 -:1005E400121E64FFAEF090000C121E64D39FE5F05F -:1005F4009E9000004032121F599000127401121D87 -:10060400D7900000121F5990000C121E64FF900036 -:1006140006E5F0F0A3EFF0A37404F0A3742AF07BD2 -:10062400FF7A0F792802092F121F599000157401BF -:10063400121DD7900000121F5990000C121E64FF67 -:10064400900006E5F0F0A3EFF0A37404F0A3743176 -:10065400F07BFF7A0F796402092FD3900050E09465 -:100664001490004FE09400502FE475F001121E4ED8 -:1006740078A1E6FE08E6FF900000121F5990000ED4 -:10068400EE8FF0121F08789DE6FF08E690000CCF6D -:100694008FF0121F08020932E490004FF0A3F0908B -:1006A4000000121F59900018121D98640160030283 -:1006B40007C0900017121D98640160030207C090E0 -:1006C4000006121E64FFAEF090000E121E64FDAC14 -:1006D400F0C39FEC9E4018900000121F5990000A2E -:1006E400121E64FFD3ED9FEC95F050030207819036 -:1006F4000000121F59900004121E64FFAEF0900017 -:100704000C121E64FDACF0C39FEC9E4015900000DB -:10071400121F59900008121E64FFD3ED9FEC95F050 -:10072400405B900000121F599000167401121DD7EF -:100734009000157401121DD790007A7402F0900095 -:1007440000121F5990001B121E64FF900006E5F072 -:10075400F0A3EFF0789DE6FF08E6A3CFF0A3EFF057 -:1007640078A1E6FF08E6A3CFF0A3EFF0A37404F0AA -:10077400A37458F07BFF7A0F79A002092F90000030 -:10078400121F5990001B121E64FF900006E5F0F042 -:10079400A3EFF0789DE6FF08E6A3CFF0A3EFF0788F -:1007A400A1E6FF08E6A3CFF0A3EFF0A37404F0A33F -:1007B400745FF07BFF7A0F79EC02092F900000122E -:1007C4001F59900018121D98640160030208799063 -:1007D4000006121E64FFAEF090000E121E64FDAC03 -:1007E400F0C39FEC9E4015900000121F5990000A20 -:1007F400121E64FFD3ED9FEC95F04046900000126A -:100804001F599000167401121DD790007A7402F0DB -:10081400900000121F5990001B121E64FF900006E6 -:10082400E5F0F0A3EFF078A1E6FF08E6A3CFF0A38C -:10083400EFF0A37404F0A37472F07BFF7A107931A3 -:100844008030900000121F5990001B121E64FF900C -:100854000006E5F0F0A3EFF078A1E6FF08E6A3CFE9 -:10086400F0A3EFF0A37404F0A37478F07BFF7A1084 -:10087400797312198F900000121F59900017121DDE -:100884009864016003020932900008121E64FFAEEE -:10089400F090000C121E64FDACF0D39FEC9E50153A -:1008A400900000121F59900004121E64FFC3ED9FB4 -:1008B400EC95F05046900000121F599000157401F9 -:1008C400121DD790007A7402F0900000121F599004 -:1008D400001B121E64FF900006E5F0F0A3EFF07811 -:1008E4009DE6FF08E6A3CFF0A3EFF0A37404F0A302 -:1008F4007486F07BFF7A1079AE8030900000121F6E -:100904005990001B121E64FF900006E5F0F0A3EF5F -:10091400F0789DE6FF08E6A3CFF0A3EFF0A37404FC -:10092400F0A3748CF07BFF7A1079F012198F900089 -:1009340000121F59900018121D98FF6401600D9059 -:100944000017121D9864016003020B9490001312A7 -:100954001D98FE6401600D900012121D98640160E0 -:1009640003020ACFEF64017031900017121D98B48E -:100974000128EEB40124900013121D98B4011B90B9 -:1009840000147401121DD77BFF7A11792B90000695 -:100994007404F0A374A4F012198F900000121F596C -:1009A400900018121D986401702A900017121D9867 -:1009B4007022900013121D98640170539000140467 -:1009C400121DD77BFF7A1179519000067404F0A3AD -:1009D40074AE8037900000121F59900018121D98B1 -:1009E400702D900017121D98B40124900012121D4E -:1009F40098B4011B9000147401121DD77BFF7A1167 -:100A040079739000067404F0A374B9F012198F90EE -:100A14000000121F59900013E4121DD7900012E435 -:100A2400121DD7900014121D9864016003020BADCF -:100A3400900000121F5990001B121E64D39400E50D -:100A4400F09400400B90001B74FF75F0FE121E9C86 -:100A5400900019121E64FFAEF090001B121E64D3A6 -:100A64009FE5F09E5017900000121F5990001BEE56 -:100A74008FF0121F0890007A7404F0800690007AB8 -:100A84007402F0E490004FF0A3F0900000121F599C -:100A9400900014E4121DD790007AE0FF900006E461 -:100AA400F0A3EFF0900000121F5990001B121E6477 -:100AB400FF900008E5F0F0A3EFF0A37404F0A37432 -:100AC400D8F07BFF7A117995020B81900000121FF8 -:100AD40059900016121D986401600D900015121DA6 -:100AE4009864016003020BAD900016E4121DD790C8 -:100AF4000015E4121DD790001B121E64C3943CE53C -:100B0400F094005010900000121F5990001BE475DF -:100B1400F002121E9C90007A7404F0900000121FE0 -:100B24005990001D121E64FFAEF090001B121E644B -:100B3400C39FE5F09E4015900000121F5990001BC2 -:100B4400EE8FF0121F0890007A7401F090007AE0A2 -:100B5400FF900006E4F0A3EFF0900000121F5990FC -:100B6400001B121E64FF900008E5F0F0A3EFF0A351 -:100B74007404F0A374F5F07BFF7A1179C812198F0D -:100B8400900000121F5990001B121E64FF0234D201 -:100B940090007AE0D394024010E4F0900000121F19 -:090BA400599000207401121DD7C4 -:010BAD002225 -:0B002600900043121F79900046EDF09F -:10003100E4FE900046E0FD14F0ED6029900043E4F9 -:1000410075F001121F62121D7F6EFEE4FFEFC39473 -:100051000850DFEE30E007C313648CFE8004EEC36A -:0700610013FE0F80E8AF065B -:010068002275 -:08244100900000EFF0A3EDF0A4 -:10244900E4A3F078037C007D017BFF7A1179FBFE20 -:102459007F40121D59E4900003F0A37455F0A37452 -:10246900AAF0900000E0FE900007F0900001E0FD66 -:10247900900077F0EE121F82249A0124C9022518D0 -:1024890003252506252507256A8025728100002553 -:10249900809000067402F0ED700E9000087402F04E -:1024A900E4900075F0022580900001E0640160036A -:1024B90002258090000804F0E4900076F00225805F -:1024C900900006741BF07F05900001E075F012A4DE -:1024D90024792FF8E6FE74032FF582E43400F5839E -:1024E900EEF00FEFB412E17F17EFC3940840030237 -:1024F9002580900001E075F008A424692FF8E6FE14 -:1025090074032FF582E43400F583EEF00F80DA903E -:1025190000067402F090000804F0805B90000674D5 -:1025290005F09000087401F07814E6A3F0A3742074 -:10253900F0900001E0FF700D900072E07002800FD2 -:102549009000738015EFB4012E900073E07008902D -:10255900000B74FFF08020900072E090000BF08077 -:10256900169000067401F0800E9000067402F09037 -:102579000074E0900008F0900006E02404FF900049 -:1025890002F0FD7B017A007903120026900002E037 -:102599002403F582E43400F583EFF07F01122D2C3A -:1025A900900001E0FF700B75FE0E53FFF043FF082A -:1025B900800DEFB4010975FE0E53FFF043FF019042 -:1025C9000002E02401FFE433FE7B017A0079030273 -:0225D90031BA15 -:102DA600EF24FA605014604D24067069E4FE742D19 -:102DB6002EF8E6FF900077E075F012A424792EF83D -:102DC600A6070EEEB412E7E4FE743F2EF8E6FF9077 -:102DD6000077E075F008A424692EF8A6070EEEB475 -:102DE60008E7900077E0700690007504F0229000E6 -:102DF600767401F022782DE6B4E30D90004D74014F -:102E0600F008E6900072F02290004E7401F0782EE1 -:052E1600E6900073F0DE -:012E1B002294 -:1032E600E4FF900000F0303821C238FB7A007929DB -:1032F600782BE62403FD120026782BE6242CF8E62C -:0A330600B50707782CE6FF122DA68C -:01331000229A -:1023D800011500011400C13FC140011350602800DD -:1023E800A80BB80BEA0C1C0C800CB20CE40D160DF3 -:1023F800480D7A0DAC0DF70E420E880ED80F0A0F55 -:092408003C0F870FD2101D106873 -:102BF200E4FF780EE6B40122EF25E024A8F582E492 -:102C02003400F583E0FCA3E02432FDE43CFCC3780D -:102C1200B0E69D18E69C501B801EEF25E024A8F527 -:102C220082E43400F583E0FCA3E0D378B096EC189C -:102C32009650050FEFB414BA7815E6FEEFD39E78DE -:102C4200134003068001169000ECE030E30A781589 -:102C5200EFF675F005A418F67813E6FED3949650B5 -:102C620006EEC3940A500D7815EFF675F005A41818 -:102C7200F61876507815E6FFD394005004D24080BF -:102C820008EFD394014002C240EFD394015003D223 -:0A2C92003F22EFD394024002C23F3C -:012C9C002215 -:102411004100DB004100DE004100DA004200D8004B -:10242100004100DC00C12AC12BC12DC129C128C135 -:092431002C4100DD00C12EC12F79 -:102E1C009000DDE06062E4F0D22A9000DBE004F088 -:102E2C00E0C394054004E4F0D22B9000DEE004F003 -:102E3C00E0C3940A4004E4F0D22D9000D8E475F07D -:102E4C0001121E4EC39000D9E094649000D8E09417 -:102E5C00004006E4F0A3F0D2289000DAE004F0E0A1 -:102E6C00C394FA4013E4F0D2299000DCE004F0E0C3 -:092E7C0094044004E4F0D22C227D -:03000B0002335A63 -:10335A00C0E0C083C082C0D074FC258CF58C746632 -:10336A00258AF58A9000DD7401F0D0D0D082D0830E -:03337A00D0E0326E -:0E35E200758901758CFC758A66D2A9D28C227F -:1034060075FE0FEF25E0FE7403A806088002C3339D -:10341600D8FCF452FFEFB4040675FE0FE4F5FF2264 -:1035340075FE11EF5407F5FF75FE12AF058FFF7589 -:06354400FE1075FF0122DC -:1030680075FE0FEF25E0FE7403A806088002C3333F -:10307800D8FCF452FF7401A806088002C333D8FCB8 -:1030880042FF75FE0B7401A807088002C333D8FC01 -:1030980042FFEF70038DCE22EFB401038DCF22EFF4 -:0F30A800B402038DDE22EFB40304AF058FDF22E5 -:033FFD00010102BD -:06243A000116000117006D -:10328D00D28075FE0443FF0175FE0343FF0175FEF9 -:10329D000243FF01D28175FE0443FF0275FE034315 -:0D32AD00FF0275FE0243FF02781676012233 -:0C358500C280123591D281123591D280A3 -:05359100E4FF0FDFFE66 -:013596002212 -:10349D00D281D2801235912081037F0022C2811208 -:0B34AD0035913081037F00227F012257 -:0F35C500C280C28112358CD281123591023591AC -:08361600123585C280023591D6 -:0B35F000123585123591C28002359122 -:0233A000AE0776 -:1033A2007D08AF051DEF6015C280EE30E704D281C3 -:0F33B2008002C281EE25E0FE12358C80E5C280DC -:0133C10022E9 -:10337D007E08E4FDD281AF061EEF6012ED25E0FD63 -:10338D00C28012358C3081EEED4401FD80E8C280A3 -:02339D00AF057A -:01339F00220B -:10000E007D087F351232BA7D0A7F7612361E7D0448 -:05001E007F200232BA50 -:102FAC00900000121F797F10123142900000121F06 -:102FBC0059EF121DC57F11123142900000121F599A -:102FCC00900001EF121DD77F1212314290000012B7 -:102FDC001F59900002EF121DD77F1312314290003F -:102FEC0000121F59900003EF121DD77F14123142AB -:102FFC00900000121F59900004EF121DD77F002281 -:0533C200900000EFF097 -:1033C700E47F20123142900000E06006EF4401FFE5 -:0D33D7008004EF54FEFFAD077F200232BAE4 -:0533E400900000EFF075 -:1033E900E47F27123142900000E06006EF4401FFBC -:0D33F9008004EF54FEFFAD077F270232BABB -:0534D200900003EFF083 -:1034D700E47F25123142EF54C0FF900003E04FFD17 -:0534E7007F250232BA4E -:07361E008FFEAF058FFF22B4 -:063625008FFEAEFFAF06B0 -:01362B00227C -:1032BA00900046EFF0A3EDF012349D7F0C1233A07C -:1032CA001235F0900046E0FF1233A01235F090005C -:0C32DA0047E0FF1233A01235F00235C5AA -:05314200900046EFF0D3 -:10314700E4A3F012349D7F0C1233A01235F09000E7 -:1031570046E0FF1233A01235F012349D7F0D123373 -:10316700A01235F012337D900047EFF01236161299 -:0731770035C5900047E0FFA1 -:01317E00222E -:102CAC000235A7E493A3F8E493A34003F68001F262 -:102CBC0008DFF48029E493A3F85407240CC8C33329 -:102CCC00C4540F4420C8834004F456800146F6DFF8 -:102CDC00E4800B010204081020408090228FE47ED7 -:102CEC00019360BCA3FF543F30E509541FFEE493ED -:102CFC00A360010ECF54C025E060A840B8E493A3B4 -:102D0C00FAE493A3F8E493A3C8C582C8CAC583CADE -:102D1C00F0A3C8C582C8CAC583CADFE9DEE780BE96 -:01244000009B -:101C8900E709F608DFFA8046E709F208DFFA803E3D -:101C990088828C83E709F0A3DFFA8032E309F6082A -:101CA900DFFA8078E309F208DFFA807088828C8392 -:101CB900E309F0A3DFFA806489828A83E0A3F60846 -:101CC900DFFA805889828A83E0A3F208DFFA804C20 -:101CD90080D280FA80C680D4806980F280338010F7 -:101CE90080A680EA809A80A880DA80E280CA803360 -:101CF90089828A83ECFAE493A3C8C582C8CCC583D8 -:101D0900CCF0A3C8C582C8CCC583CCDFE9DEE780A7 -:101D19000D89828A83E493A3F608DFF9ECFAA9F026 -:101D2900EDFB2289828A83ECFAE0A3C8C582C8CC7C -:101D3900C583CCF0A3C8C582C8CCC583CCDFEADE95 -:101D4900E880DB89828A83E493A3F208DFF980CCF7 -:101D590088F0EF60010E4E60C388F0ED2402B404F0 -:101D69000050B9F582EB2402B4040050AF23234597 -:061D79008223901CD973C7 -:101D7F00BB010689828A83E0225002E722BBFE0262 -:091D8F00E32289828A83E4932295 -:101D9800BB010CE58229F582E5833AF583E0225000 -:101DA80006E92582F8E622BBFE06E92582F8E2224A -:0D1DB800E58229F582E5833AF583E4932264 -:101DC500BB010689828A83F0225002F722BBFE01FD -:021DD500F322F7 -:101DD700F8BB010DE58229F582E5833AF583E8F042 -:101DE700225006E92582C8F622BBFE05E92582C8EE -:021DF700F222D6 -:101DF900BC000BBE0029EF8DF084FFADF022E4CCCE -:101E0900F875F008EF2FFFEE33FEEC33FCEE9DEC96 -:101E1900984005FCEE9DFE0FD5F0E9E4CEFD22EDDC -:101E2900F8F5F0EE8420D21CFEADF075F008EF2F26 -:101E3900FFED33FD4007985006D5F0F222C398FD17 -:051E49000FD5F0EA22B4 -:101E4E00C5F0F8A3E028F0C5F0F8E582158270021F -:061E5E001583E038F022BC -:101E6400BB0110E58229F582E5833AF583E0F5F0BC -:101E7400A3E0225009E92582F886F008E622BBFE99 -:101E84000AE92582F8E2F5F008E222E5832AF583DF -:081E9400E993F5F0A3E99322A4 -:101E9C00BB010DC58229C582C5833AC583021E4E7E -:101EAC005011C58229F808E5F026F618F5F0E58200 -:101EBC0036F622BBFE11C58229F808E225F0F5F0B2 -:101ECC00F218E23582F222F8E58229F582E5832ABE -:0D1EDC00F58374019325F0F5F0E4933822AE -:101EE900BB010A89828A83F0E5F0A3F0225006F744 -:0F1EF90009A7F01922BBFE06F3E5F009F3192241 -:101F0800F8BB0111E58229F582E5833AF583E8F00B -:101F1800E5F0A3F0225009E92582C8F608A6F022C8 -:0D1F2800BBFE09E92582C8F2E5F008F222AF -:101F3500EB9FF5F0EA9E42F0E99D42F0E89C45F002 -:011F45002279 -:101F4600E8600FECC313FCED13FDEE13FEEF13FF79 -:031F5600D8F1229D -:091F5900E0FBA3E0FAA3E0F92289 -:101F6200F8E0FBA3A3E0F925F0F0E5821582700208 -:071F72001583E0FA38F022AC -:091F7900EBF0A3EAF0A3E9F02269 -:101F8200D083D082F8E4937012740193700DA3A3EE -:101F920093F8740193F5828883E473740293686002 -:061FA200EFA3A3A380DF02 -:101FA800EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02DC6 -:101FB800FDE43CFCE8A42EC8C5F03DFDE43CFCEF84 -:0D1FC800A4FFE5F028FEE43DFDE43CFC2212 -:10192400E5082406F582E43400F583E005082290F6 -:101934000003301603900006E475F001121F6202E2 -:101944001D7F200FE97F2ED20F8018EF540F2490B3 -:10195400D43440D4FF30130BEF24BFB41A00500327 -:101964002461FFE50960021509050CE50C70020508 -:101974000B30160E900003E475F001121F62EF02A3 -:101984001DC50235D47403D2168003E4C216F508CB -:10199400900003121F79E4F509F50BF50CE50960D5 -:1019A400077F2012196780F5750AFFC210C20FC2A3 -:1019B40011C212C214C215C217121933FF700D30AE -:1019C40016057F00121978AF0CAE0B22B4255FC246 -:1019D400D5C213121933FF24D0B40A00501A75F07B -:1019E4000A780930D50508B6FF0106C6A426F620F4 -:1019F400D5047002D21280D924CFB41A00EF500457 -:101A0400C2E5D213021B79D21080C6D20F80C0D295 -:101A14001180BCD2D580BAD21480B47F2012196749 -:101A24002011077401B5090040F1121924FF12199D -:101A3400670219A1D217D2158095121924FB121925 -:101A440024FA121924F94A4B7006794A7A1C7BFF4E -:101A540020112EE509602A7E008E82758300121DF6 -:101A64009860060EEE650A70F0C2D5EBC0E0EAC0DD -:101A7400E0E9C0E0EE121BC0D0E0F9D0E0FAD0E01B -:101A8400FB121D7FFF60AAEBC0E0EAC0E0E9C0E002 -:101A9400121967D0E02401F9D0E03400FAD0E0FB59 -:101AA400E50A0460DCD50AD980877BFF7A1B79BC00 -:101AB400D211809C791080027908C215C21780085F -:101AC400D2D5790A8004790AC2D5E50A047002F5F0 -:101AD4000AE4FAFDFEFF121924FC7B0820101312FD -:101AE4001924FD7B10300F0A121924FE121924FF49 -:101AF4007B20EC3382D592D55013C3E4300F069F7C -:101B0400FFE49EFEE42010039DFDE49CFCE4CBF87E -:101B1400C210EC700CCFCECDCCE824F8F870F38072 -:101B240017C3EF33FFEE33FEED33FDEC33FCEB3341 -:101B3400FB994002FB0FD8E9EB301005F8D0E0C464 -:101B440048B210C0E00AEC4D4E4F78207B0070C2C2 -:101B5400EAB50A0040BCC0E0121BC2D0F0D0E020BD -:101B64001004C4C0E0C4B210C0F0121950D0F0D5B3 -:101B7400F0EB0219A1121F821A3E531AB8581A0F19 -:101B84004C1A0B421ABC4F1AC4441AC4491A2443AF -:081B94001ACA551AAE461AAE3A -:101B9C00451AAE471C6A501A132D1A172E1A3A2BD7 -:101BAC001A1B231A38201C532A19D34800001A3246 -:101BBC003F3F3F00790AA2D5201214301409B91006 -:101BCC00020404B9080104A2D52015025001042016 -:101BDC0011689211B509005034C0E07F2030121901 -:101BEC007F30A21172157214500F121C19C211C23F -:101BFC0015C214C2177F30800F301403E9C0E012F5 -:101C0C001967301403D0E0F9D0E0B509CC301417C3 -:101C1C007F30B9100C1219677F583013077F78800A -:101C2C0003B908031219673011057F2D0219677F5C -:101C3C00202017F87F2B2015F322921180CF286ECD -:101C4C00756C6C2900D2101219243010F8C210785F -:101C5C000930D50108F60219D32D504349581219F1 -:101C6C00242403B405004001E4901C659312195818 -:0D1C7C00743A121958D212750904021AB8F0 -:00000001FF diff --git a/Out/8835_EVB_241213_1140_7D68_010102.bin b/Out/8835_EVB_241213_1140_7D68_010102.bin deleted file mode 100644 index 3552a8490741fbbf67adc05de5661b93e16ee123..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16386 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 diff --git a/Out/8835_EVB_241227_1101.bin b/Out/8835_EVB_241227_1101.bin new file mode 100644 index 0000000000000000000000000000000000000000..df1eadf9097b08bf126d02a4d5e549a6c9a825c3 GIT binary patch literal 16384 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 - 160 - 1853 - 3773 - 1122 + 184 + 2006 + 3926 + 1146 0 - 436 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000003000000020000000100000036453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF41453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C757365726170705C757365726170702E630000000009757365726170702E6300000000FFDC7800FFFFFFFF40453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C766F785C766F785F6D6F64756C652E63000000000C766F785F6D6F64756C652E6300000000BECEA100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000007408000066000000000F000059020000 + 978 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000009000000020000000100000036453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF41453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C757365726170705C757365726170702E630000000009757365726170702E6300000000FFDC7800FFFFFFFF40453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C766F785C766F785F6D6F64756C652E63000000000C766F785F6D6F64756C652E6300000000BECEA100FFFFFFFF4C453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C6469736368617267655C6469736368617267655F6D6F64756C652E6300000000126469736368617267655F6D6F64756C652E6300000000F0A0A100FFFFFFFF39453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C6164635C6164632E6300000000056164632E6300000000BCA8E100FFFFFFFF40453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5372635C737461727475705C535441525455502E413531000000000B535441525455502E413531000000009CC1B600FFFFFFFF40453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C557372496E635C766F785C766F785F6D6F64756C652E68000000000C766F785F6D6F64756C652E6800000000F7B88600FFFFFFFF3B453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C756172745C756172742E630000000006756172742E6300000000D9ADC200FFFFFFFF39453A5C746F646179776F726B5C32303234313033305F7379383833355C5359383833355F44656D6F5C5573725372635C6B65795C6B65792E6300000000056B65792E6300000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000007408000066000000000F0000CF020000 @@ -150,7 +150,7 @@ 0 16 - 0300000066000000ED00000029020000 + 0300000066000000ED0000009F020000 16 @@ -170,7 +170,7 @@ 0 16 - 0300000066000000ED00000029020000 + 0300000066000000ED0000009F020000 16 @@ -450,7 +450,7 @@ 0 16 - 0300000066000000ED00000029020000 + 0300000066000000ED0000009F020000 16 @@ -470,7 +470,7 @@ 0 16 - 0300000066000000ED00000029020000 + 0300000066000000ED0000009F020000 16 @@ -490,7 +490,7 @@ 0 16 - 000000005A02000080070000E6030000 + 00000000D002000080070000E6030000 16 @@ -530,7 +530,7 @@ 0 16 - 030000005D0200007D070000CD030000 + 03000000D30200007D070000CD030000 16 @@ -1150,7 +1150,7 @@ 0 16 - 0300000066000000ED00000029020000 + 0300000066000000ED0000009F020000 16 @@ -1170,7 +1170,7 @@ 0 16 - 030000005D0200007D070000CD030000 + 03000000D30200007D070000CD030000 16 @@ -1190,7 +1190,7 @@ 0 16 - 030000005D0200007D070000CD030000 + 03000000D30200007D070000CD030000 16 @@ -1250,7 +1250,7 @@ 0 16 - 030000005D0200007D070000CD030000 + 03000000D30200007D070000CD030000 16 @@ -1270,7 +1270,7 @@ 0 16 - 030000005D0200007D070000CD030000 + 03000000D30200007D070000CD030000 16 @@ -1799,7 +1799,7 @@ 3390 - 000000000A000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000007408000066000000100D0000F6000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000200C000066000000100D000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F400000042020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000080070000660000007008000059020000000000004F000000F0000000420200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF000000001502000090050000190200000000000001000000040000000100000000000000000000000000000000000000000000000100000000000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000008007000000000000810700003102000000000000E9FFFFFF010000001A02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000080000001000000FFFFFFFFFFFFFFFF000000004202000080070000460200000100000001000010040000000100000002FDFFFF8E000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000800700005D020000000F0000FD030000000000004602000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC500000001000000FFFF02001400434D756C746950616E654672616D65576E64457800010084A4000000BB0000006C0300004B01000000000000000000000200000000000000C60000000000000000000000000000000000000001000000C60000000000000000000000 + 000000000A000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000007408000066000000100D0000F6000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000200C000066000000100D000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F4000000B8020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000800700006600000070080000CF020000000000004F000000F0000000B80200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF000000001502000090050000190200000000000001000000040000000100000000000000000000000000000000000000000000000100000000000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000008007000000000000810700003102000000000000E9FFFFFF010000001A02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000080000001000000FFFFFFFFFFFFFFFF00000000B802000080070000BC0200000100000001000010040000000100000012FEFFFF9E010000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000080070000D3020000000F0000FD03000000000000BC02000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC500000001000000FFFF02001400434D756C746950616E654672616D65576E64457800010084A4000000BB0000006C0300004B01000000000000000000000200000000000000C60000000000000000000000000000000000000001000000C60000000000000000000000 59392 @@ -1838,7 +1838,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3615,18 +3615,72 @@ ..\UsrSrc\userapp\userapp.c - 4 + 0 644 - 668 + 670 1 0 ..\UsrSrc\vox\vox_module.c - 17 - 1016 - 1027 + 6 + 590 + 612 + 1 + + 0 + + + ..\UsrSrc\discharge\discharge_module.c + 0 + 153 + 167 + 1 + + 0 + + + ..\UsrSrc\adc\adc.c + 41 + 178 + 183 + 1 + + 0 + + + ..\Src\startup\STARTUP.A51 + 1 + 16 + 31 + 1 + + 0 + + + ..\UsrInc\vox\vox_module.h + 2 + 242 + 266 + 1 + + 0 + + + ..\UsrSrc\uart\uart.c + 16 + 197 + 223 + 1 + + 0 + + + ..\UsrSrc\key\key.c + 0 + 245 + 263 1 0 diff --git a/Project/SY8835_Demo.uvproj b/Project/SY8835_Demo.uvproj index 77d2c52..ee0d404 100644 --- a/Project/SY8835_Demo.uvproj +++ b/Project/SY8835_Demo.uvproj @@ -314,7 +314,7 @@ 0 1 3 - 8 + 9 2 0 1 diff --git a/Src/startup/STARTUP.A51 b/Src/startup/STARTUP.A51 index 9926e42..b96915f 100644 --- a/Src/startup/STARTUP.A51 +++ b/Src/startup/STARTUP.A51 @@ -35,7 +35,7 @@ XDATASTART EQU 0 ; ; XDATALEN: XDATA memory size <0x0-0xFFFF> ; The length of XDATA memory in bytes. -XDATALEN EQU 0;300H;TP3315 +XDATALEN EQU 300H;TP3315 ; ; PDATASTART: PDATA memory start address <0x0-0xFFFF> ; The absolute start address of PDATA memory diff --git a/UsrInc/adc/adc.h b/UsrInc/adc/adc.h index 4fb655c..d995dd1 100644 --- a/UsrInc/adc/adc.h +++ b/UsrInc/adc/adc.h @@ -66,7 +66,7 @@ extern idata uint16_t g_pmu_Adc_Ivor; typedef enum { - ADC_PMU_CH0 = 0x00, + ADC_PMU_CH0 = 0x01, ADC_NTC_CH1, diff --git a/UsrInc/charger/charger_module.h b/UsrInc/charger/charger_module.h index f95dfa0..3fd01ad 100644 --- a/UsrInc/charger/charger_module.h +++ b/UsrInc/charger/charger_module.h @@ -23,7 +23,6 @@ #include "define.h" -extern bit Charger_Done; #ifdef NTC_ENABLE extern bit NTC_Pro_Flag; @@ -31,19 +30,20 @@ extern bit NTC_Pro_Flag; // 充电状态定义 typedef enum { - CHG_NONE=0x00, - CHG_STA_ING, // 充电中 - CHG_STA_COMPLETED, // 充电完成 - CHG_STA_PULLOUT, // 充电器拔出 + CHG_NONE = 0x00, + + CHG_PROTECT, + CHG_STA_ING, // 充电中 + + CHG_STA_COMPLETED, // 充电完成 + } TE_CHG_STA; extern idata TE_CHG_STA ChgStatus; // 系统状态定义 #if CHARGER_ENABLE - - /* Charger Current Setting */ typedef struct { uint8_t nTrickle_Cur; //Set Trickle Current Trickle charge 电流配置,step 10mA; diff --git a/UsrInc/inc/config.h b/UsrInc/inc/config.h index 305c15a..faf4ddf 100644 --- a/UsrInc/inc/config.h +++ b/UsrInc/inc/config.h @@ -114,46 +114,55 @@ #endif #else -/*2.5V上拉LDO下接 104K NTC(3950K) 电阻串联一个100K电阻后得到的电压值,Value=2500 * Rntc/(Rntc + 100k)*/ -#define T_N20C 2263 //-20℃ NTC:953K +/*2.5V上拉LDO下接 104K NTC(3950K) 电阻串联一个100K电阻后得到的电压值,Value=1024 * Rntc/(Rntc + 100k) */ +/* 具体公式:( LSB = 2500/1024 ) + NTC Pin实际电压:Vntc = Rntc/R总 * 2500; + 码值:NTC = Vntc / LSB = (Rntc / R总 * 2500) / (2500 / 1024) + = Rntc / R总 * 1024 + 使用码值的原因:2.5V的上拉LDO有温漂误差,使用码值可以规避。 -#define T_N17C 2223 //-17℃ NTC:804K +*/ +#define NONE_NTC 984 //NTC引脚悬空码值 -#define T_N15C 2195 //-15℃ NTC:719K +#define T_N20C 927 //-20℃ NTC:953K -#define T_N13C 2164 //-13℃ NTC:644K +#define T_N17C 911 //-17℃ NTC:804K -#define T_N10C 2114 //-10℃ NTC:547K +#define T_N15C 900 //-15℃ NTC:719K -#define T_0C 1911 //-0℃ NTC:325K +#define T_N13C 887 //-13℃ NTC:644K -#define T_3C 1841 //3℃ NTC:293K +#define T_N10C 866 //-10℃ NTC:547K -#define T_5C 1792 //5℃ NTC:253K +#define T_0C 783 //-0℃ NTC:325K -#define T_8C 1715 //8℃ NTC:218K +#define T_3C 755 //3℃ NTC:293K -#define T_10C 1663 //10℃ NTC:198K +#define T_5C 734 //5℃ NTC:253K -#define T_12C 1609 //12℃ NTC:180K +#define T_8C 703 //8℃ NTC:218K -#define T_15C 1527 //15℃ NTC:157K +#define T_10C 682 //10℃ NTC:198K -#define T_18C 1444 //18℃ NTC:137K +#define T_12C 659 //12℃ NTC:180K -#define T_42C 823 //42℃ NTC:49K +#define T_15C 626 //15℃ NTC:157K -#define T_45C 759 //45℃ NTC:43.6K +#define T_18C 592 //18℃ NTC:137K -#define T_47C 718 //47℃ NTC:40K +#define T_42C 337 //42℃ NTC:49K -#define T_57C 540 //57℃ NTC:27.6K +#define T_45C 311 //45℃ NTC:43.6K -#define T_60C 495 //60℃ NTC:24.7K +#define T_47C 294 //47℃ NTC:40K -#define T_75C 318 //75℃ NTC:14.6K +#define T_57C 221 //57℃ NTC:27.6K -#define T_80C 275 //80℃ NTC:12.4K +#define T_60C 203 //60℃ NTC:24.7K + +#define T_75C 130 //75℃ NTC:14.6K + +#define T_80C 113 //80℃ NTC:12.4K #endif diff --git a/UsrInc/inc/define.h b/UsrInc/inc/define.h index 6fea679..444ff06 100644 --- a/UsrInc/inc/define.h +++ b/UsrInc/inc/define.h @@ -50,7 +50,7 @@ #define VOX_ENABLE 1 //1080Bytes -#define VOX_FOLLOW_CHG 1 +#define VOX_FOLLOW_CHG 1 //1701Bytes #if VOX_FOLLOW_CHG @@ -62,8 +62,6 @@ #define VOX_TX //959Bytes -#define VOX_TX_RST_PATTERN //BES Reset Pattern (118Bytes) - #define VOX_RX //739Bytes #endif @@ -94,16 +92,17 @@ #ifdef _DEBUG_ALL -// #define _DEBUG_MAIN + #define _DEBUG_MAIN #define _DEBUG_PMU #define _DEBUG_KEY #define _DEBUG_VOX + #define _DEBUG_FOLLOW #define _DEBUG_HALL // #define _DEBUG_ADC // #define _DEBUG_DISCHARGE // #define _DEBUG_CHARGER -// #define _DEBUG_SLEEP - #define _DEBUG_BAT + #define _DEBUG_SLEEP +// #define _DEBUG_BAT //#define TEST_MODE diff --git a/UsrInc/inc/reg3315.h b/UsrInc/inc/reg3315.h index ea69c76..23266eb 100644 --- a/UsrInc/inc/reg3315.h +++ b/UsrInc/inc/reg3315.h @@ -108,6 +108,9 @@ sfr ADC_IntFlag =0xA4; #define ADC_CH4_L 0x3D #define ADC_CH4_H 0x3E +#define ADC_OFFSET 0x59 +#define ADC_GAIN 0x5A + /*-------- SYS Registers --------*/ #define LDO08_CTL 0x50 #define LDO15_CTL0 0x51 diff --git a/UsrInc/led/led.h b/UsrInc/led/led.h index 134cfbb..b63476e 100644 --- a/UsrInc/led/led.h +++ b/UsrInc/led/led.h @@ -25,7 +25,7 @@ #include "define.h" -#ifdef LED_DISPLAY + #ifdef _DEBUG_LED #define _DEBUG_LED_1 @@ -61,6 +61,8 @@ sbit pin_LED_4 = P1^3; #define LEDB_OFF() pin_LED_4 = 0 //LED_4_OFF() #define LEDB_TOG() pin_LED_4 = !pin_LED_4 //LED_4_RUN() +#ifdef LED_DISPLAY + /******************************************************************************\ Typedef definitions \******************************************************************************/ diff --git a/UsrInc/pmu/pmu.h b/UsrInc/pmu/pmu.h index 47e5094..0d275b7 100644 --- a/UsrInc/pmu/pmu.h +++ b/UsrInc/pmu/pmu.h @@ -475,6 +475,8 @@ extern void Set_PMU_Boost(uint8_t Boost_En); extern void Set_PMU_Boost_Vout(uint8_t Boost_Vout); +extern void Set_PMU_StandbyMode_Set(uint8_t LDO_En); + extern HAL_StatusTypeDef Set_PMU_VOX_Config( g_PMU_Vox_Cfg *n_PMU_Vox_Cfg ); #endif diff --git a/UsrInc/vox/vox_module.h b/UsrInc/vox/vox_module.h index 0bca9b0..1ecba38 100644 --- a/UsrInc/vox/vox_module.h +++ b/UsrInc/vox/vox_module.h @@ -114,9 +114,14 @@ SFRDATA |= (VOX_LIGHT_TO_HAVEY_128 << 2) | VOX_HAVEY_TO_LIGHT_8; #define BOXHEADER 0x55AA //VOX通讯数据包头 +#define EARPHONE_HEADER_HIGH 0x55 +#define EARPHONE_HEADER_LOW 0xAA + #define BOXIDCODE 0xFF //VOX通讯耳机->仓数据包头 -#define Vox_TX_Interval 2 //Vox定时发送指令时间间隔 +#define Vox_TX_Interval 2 //Vox定时发送指令时间间隔 + +#define Vox_TX_Interval_2 4 #define TIM_SHUTDOWN_DEBOUNCE 600 //关机前debounce时间 @@ -194,7 +199,6 @@ typedef enum { Vox_Follow_Chg_Sta4, }e_Vox_Follow_Chg_Sta; - /* VOX Enable Type */ typedef enum { @@ -213,11 +217,14 @@ typedef enum { VOX_PD1K_Mode, // VOX 1K 电阻下拉使能 1: VOR 通过 1K 电阻下拉至 gnd - } VOX_Enable_Mode_e; - + } VOX_Enable_Mode_e; extern bit Cover_Open_Flag; +extern bit Boost_Open_Flag; + +extern bit OpenCover_TX_Cmd_Flag; + #ifdef VOX_RX extern xdata uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态,VOL:低4bit;VOR:高4bit。0是无效,1是正在配对,2是配对成功,3不处理,保持当前状态。 @@ -226,6 +233,8 @@ extern xdata uint8_t Vox_Get_BES_Addr_Flag[2] ; #endif +#if VOX_FOLLOW_CHG + typedef struct { uint16_t IVox_Init[VOX_MAX_CHAN]; //跟随充Vox初始化电流值。 @@ -246,11 +255,11 @@ typedef struct { uint8_t Vox_InBox_Sta[VOX_MAX_CHAN]; //耳机在盒标志 - uint16_t Vpmid_Threshold_Neg; //Vpmid电压下降阈值 + uint8_t Vpmid_Threshold_Neg; //Vpmid电压下降阈值 - uint16_t Vpmid_Threshold_At_Present; //Vpmid电压当前值 + uint8_t Vpmid_Threshold_At_Present; //Vpmid电压当前值 - uint16_t Vpmid_Threshold_Pos; //Vpmid电压上升阈值 + uint8_t Vpmid_Threshold_Pos; //Vpmid电压上升阈值 uint8_t Vox_Follow_Start; //跟随充启动标志 @@ -260,8 +269,10 @@ typedef struct { extern g_Vox_Fllow_Chg_Cfg xdata Vox_Fllow_Chg; -//extern uint8_t Box_To_Bes_Comm_Debounce; +#endif +//extern uint8_t Box_To_Bes_Comm_Debounce; + /******************************************************************************\ UserCfg.Functions definitions \******************************************************************************/ @@ -269,9 +280,9 @@ extern g_Vox_Fllow_Chg_Cfg xdata Vox_Fllow_Chg; extern void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select); extern void Vox_Det_Machine(void); - +#if VOX_FOLLOW_CHG extern void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ); - +#endif extern void VOX_EN_Type(VOX_Enable_Mode_e VOX_Enable_Mode); #ifdef VOX_RX diff --git a/UsrSrc/adc/adc.c b/UsrSrc/adc/adc.c index e5a0264..83203a8 100644 --- a/UsrSrc/adc/adc.c +++ b/UsrSrc/adc/adc.c @@ -31,6 +31,10 @@ /******************************************************************************\ Variables definitions \******************************************************************************/ +int8_t ADC_Offset_Error = 0; //ADC Offset Error 校准值寄存器 + +//int8_t ADC_Gain_Error = 0; //ADC Gain Error 校准值寄存器 + uint8_t ADC_Chn_Num = 0; idata uint16_t Vbat_Adc = 0; @@ -85,13 +89,19 @@ void Adc_Init(void) SFRADDR = MFP_CTL0; //Set P14 As ADC1 For NTC SFRDATA |= 0x10; - + ExtSfr_Write(ADC_CTL0,0xAB); //0B10101001,0xA9--ADC EN;Average time:16; Single mode; ADC CLK divided by 24=460k - SFRADDR = ADC_IntEn; //Enable ADC Interrupt.b[4:0]:ADC4-ADC0 - SFRDATA |= 0x03; +// SFRADDR = ADC_IntEn; //Enable ADC Interrupt.b[4:0]:ADC4-ADC0 +// SFRDATA |= 0x03; - EX6 = 1; //ADC IRQ Enable + SFRADDR = ADC_OFFSET; + ADC_Offset_Error = SFRDATA; +#if 0 + SFRADDR = ADC_GAIN; + ADC_Gain_Error = SFRDATA; +#endif +// EX6 = 1; //ADC IRQ Enable } /* @@ -110,14 +120,64 @@ void Adc_Init(void) */ void PMU_ADC_Chn_Data(PMU_ADC_CHANNELS_E pmu_Adc_Chn) { + if( ADC_IntFlag & 0x01 ) + { + ADC_IntFlag = 0x01; + + g_Vpmu_Adc = ExtSfr_Read(ADC_CH0_L); + g_Vpmu_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH0_H) & 0x03 ) << 8 ); + + g_Vpmu_Adc = ((uint32_t)( g_Vpmu_Adc - ADC_Offset_Error ) * 2500) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV + + /*获取xSen对应的ADC值*/ + switch (g_PMU_ADC_Chn) + { + case pmu_ADC_IVOL: + g_pmu_Adc_Ivol = g_Vpmu_Adc >> 2; //采样比例4mV/mA + break; + + case pmu_ADC_VBAT: + Vbat_Adc = g_Vpmu_Adc << 1; //vbat的2分压 + break; + + case pmu_ADC_VIN: + g_pmu_Adc_Vin = g_Vpmu_Adc << 3; //vin的8分压 + break; + + case pmu_ADC_VPMID: + g_pmu_Adc_Vpmid = g_Vpmu_Adc << 2; //PMID的4分压 + break; + + case pmu_ADC_VOR: + g_pmu_Adc_Vor = g_Vpmu_Adc << 2; //vor的4分压 + break; + + case pmu_ADC_VOL: + g_pmu_Adc_Vol = g_Vpmu_Adc << 2; //vol的4分压 + break; + + case pmu_ADC_VDD: + g_pmu_Adc_Vdd = g_Vpmu_Adc << 1; //vdd的2分压 + break; + + case pmu_ADC_IVOR: + g_pmu_Adc_Ivor = g_Vpmu_Adc >> 2; //采样比例4mV/mA + break; + default: + break; + } + } + I2cSfr_Write( XSEN_CTRL , (0x08 | pmu_Adc_Chn) ); g_PMU_ADC_Chn = pmu_Adc_Chn; - ADC_CTL1 = 0x81; //ADC Start Enable,Set Channel N Enabel. + ADC_CTL1 = 0x80 | ( ADC_PMU_CH0 ); //ADC Start Enable,Set Channel N Enabel. +#if 0 SFRADDR = ADC_IntEn; //Enable ADC Interrupt.b[4:0]:ADC4-ADC0 SFRDATA |= 0x01; +#endif } /* ******************************************************************************* @@ -135,10 +195,23 @@ void PMU_ADC_Chn_Data(PMU_ADC_CHANNELS_E pmu_Adc_Chn) */ void ADC_NTC_Data(void) { - ADC_CTL1 = 0x80 | ( ADC_NTC_CH1 + 1 ); //ADC Start Enable,Set Channel N Enabel. + if( ADC_IntFlag & 0x02 ) //获取NTC ADC 码值 + { + ADC_IntFlag = 0x02; + + g_Vntc_Adc = ExtSfr_Read(ADC_CH1_L); + + g_Vntc_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH1_H) & 0x03 ) << 8 ); + g_Vntc_Adc = g_Vntc_Adc - ADC_Offset_Error ; + } + + ADC_CTL1 = 0x80 | ( ADC_NTC_CH1 ); //ADC Start Enable,Set Channel N Enabel. + +#if 0 SFRADDR = ADC_IntEn; //Enable ADC Interrupt.b[4:0]:ADC4-ADC0 SFRDATA |= ( ADC_NTC_CH1 + 1 ); +#endif } /* @@ -155,6 +228,7 @@ void ADC_NTC_Data(void) * ******************************************************************************* */ +#if 0 void EX6_ADC_isr(void) interrupt Interrupt_Vector_IE6 { uint8_t reg_addr_bk = 0; @@ -166,8 +240,8 @@ void EX6_ADC_isr(void) interrupt Interrupt_Vector_IE6 g_Vpmu_Adc = ExtSfr_Read(ADC_CH0_L); g_Vpmu_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH0_H) & 0x03 ) << 8 ); - g_Vpmu_Adc = ((uint32_t)g_Vpmu_Adc * 2500) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV - + g_Vpmu_Adc = ((uint32_t)( g_Vpmu_Adc - ADC_Offset_Error ) * 2500) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV + /*获取xSen对应的ADC值*/ switch (g_PMU_ADC_Chn) { @@ -207,12 +281,13 @@ void EX6_ADC_isr(void) interrupt Interrupt_Vector_IE6 } } - if(ADC_IntFlag & 0x02) + if(ADC_IntFlag & 0x02) //获取NTC ADC 码值 { g_Vntc_Adc = ExtSfr_Read(ADC_CH1_L); + g_Vntc_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH1_H) & 0x03 ) << 8 ); - g_Vntc_Adc = ((uint32_t)g_Vntc_Adc * 2500) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV + g_Vntc_Adc = g_Vntc_Adc - ADC_Offset_Error ; } #if 0 @@ -220,18 +295,24 @@ void EX6_ADC_isr(void) interrupt Interrupt_Vector_IE6 { g_Vbjt_Adc = ExtSfr_Read(ADC_CH2_L); g_Vbjt_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH2_H) & 0x03 ) << 8 ); + + g_Vbjt_Adc = g_Vbjt_Adc - ADC_Offset_Error ; } if(ADC_IntFlag & 0x08) { g_Vp13_Adc = ExtSfr_Read(ADC_CH3_L); g_Vp13_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH3_H) & 0x03 ) << 8 ); + + g_Vp13_Adc = g_Vp13_Adc - ADC_Offset_Error ; } if(ADC_IntFlag & 0x10) { g_Vref_Adc = ExtSfr_Read(ADC_CH4_L); g_Vref_Adc |= (uint16_t)( ( ExtSfr_Read(ADC_CH4_H) & 0x03 ) << 8 ); + + g_Vref_Adc = g_Vref_Adc - ADC_Offset_Error ; } #endif @@ -240,6 +321,7 @@ void EX6_ADC_isr(void) interrupt Interrupt_Vector_IE6 SFRADDR = reg_addr_bk; } +#endif #endif diff --git a/UsrSrc/charger/charger_module.c b/UsrSrc/charger/charger_module.c index b6a88b8..e23811c 100644 --- a/UsrSrc/charger/charger_module.c +++ b/UsrSrc/charger/charger_module.c @@ -26,8 +26,7 @@ #include "vox_module.h" #include "led.h" #include "userapp.h" - -bit Charger_Done = 0; +#include "bat.h" #ifdef NTC_ENABLE bit NTC_Pro_Flag = 0; @@ -82,7 +81,7 @@ void Charger_Init(void) gCharge_Cfg.nVFloat = CHG_VFLOAT_4_200V; - I2cSfr_Write( IRQ_EN0, VDPM_IRQ ); + //I2cSfr_Write( IRQ_EN0, VDPM_IRQ ); } #ifdef NTC_ENABLE @@ -128,7 +127,7 @@ uint8_t PMU_NTC_Handle(uint8_t Charge_sta) NTC_Adc = g_Vntc_Adc; #endif - if( NTC_Adc >= 2400 ) ////屏蔽NTC功能,NTC浮空,屏蔽 NTC 功能,并锁定。 + if( NTC_Adc >= NONE_NTC ) ////屏蔽NTC功能,NTC浮空,屏蔽 NTC 功能,并锁定。 { return FALSE; } @@ -464,8 +463,7 @@ void Charger_Handler(void) Set_PMU_CHG(OFF); //Disable Charger ChgStatus = CHG_NONE; - - Charger_Done = 0; + #ifdef _DEBUG_CHARGER printf("No Chg\r\n"); #endif @@ -473,6 +471,7 @@ void Charger_Handler(void) } /*各项保护都无需软件处理,只处理充电超时,超时后需要等VBUS重新插拔后才重新开始Charger流程。*/ + ChgStatus = CHG_PROTECT; #ifdef NTC_ENABLE @@ -495,8 +494,6 @@ void Charger_Handler(void) #ifdef _DEBUG_CHARGER printf("Chg Done\r\n"); #endif - Charger_Done = 1; - ChgStatus = CHG_STA_COMPLETED; } @@ -511,10 +508,10 @@ void Charger_Handler(void) Set_PMU_CHG(ON); //Enable Charger ChgStatus = CHG_STA_ING; + #ifdef _DEBUG_CHARGER printf("Chg ing\r\n"); #endif - Charger_Done = 0; } } diff --git a/UsrSrc/discharge/discharge_module.c b/UsrSrc/discharge/discharge_module.c index e4c8b4b..cec8aeb 100644 --- a/UsrSrc/discharge/discharge_module.c +++ b/UsrSrc/discharge/discharge_module.c @@ -125,19 +125,17 @@ void DisCharge_Handler(void) #else + gBoost_Prepared_Flag = 0; + /*过温保护 --- 硬件实现*/ if( pmu_Info.pmu_Fault_STA2 & Fault_Sta2_CHIP_OTP ) - { - gBoost_Prepared_Flag = 0; - + { return; } /*Boost Input UVLO 硬件实现*/ if( pmu_Info.pmu_Fault_STA2 & Fault_Sta2_BoostUV ) - { - gBoost_Prepared_Flag = 0; - + { gBoost_UVLO_Flag = 1; return; @@ -148,9 +146,7 @@ void DisCharge_Handler(void) if( F_batlevel_protect ) { Set_PMU_Boost(OFF); - - gBoost_Prepared_Flag = 0; - + return; } @@ -161,24 +157,22 @@ void DisCharge_Handler(void) { #ifdef _DEBUG_DISCHARGE printf("Boost Pro Output Short!\r\n"); -#endif - gBoost_Prepared_Flag = 0; - +#endif if( F_sys_tim_250ms ) { - IRQ_FLAG0 = 0x01; - - DisCharge_Boost_Open(OFF, Boost_Vout_5_05V); //250ms定时开一次Boost + Set_PMU_Boost_Vout(BOOST_VPMID_5_2V); //开关盖Boost输出5.2V,保证耳机一定能被唤醒。 + + Set_PMU_Boost(ON); //Boost Enable;异常时由硬件主动关闭。开启Boost,开启Vox 5v会在开启Boost之后(100ms延时)。 //250ms定时开一次Boost } return; } #ifdef NTC_ENABLE + /*NTC Handle*/ //使能Boost前先检测NTC温度,异常就不开放电。 if( PMU_NTC_Handle( DISCHG_ON ) ) //NTC保护,不放电。 { - gBoost_Prepared_Flag = 0; Set_PMU_Boost(OFF); diff --git a/UsrSrc/hall/hall.c b/UsrSrc/hall/hall.c index 374a1f9..af7ca7e 100644 --- a/UsrSrc/hall/hall.c +++ b/UsrSrc/hall/hall.c @@ -106,6 +106,8 @@ uint8_t Hall_Sta_bk = 0xff; } CoverEvent_Flg = 1; + + Boost_Open_Flag = 0; CoverEvent_Flg_led = 1; diff --git a/UsrSrc/key/key.c b/UsrSrc/key/key.c index 2a1d253..73486d3 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 /******************************************************************************\ @@ -39,6 +40,14 @@ #define KEY_PRESS_8S_CNT 400 //按键按下计数8s(调用周期20ms) +#define KEY_TWS_PAIR_TIMER 20 + +#define KEY_TWS_PAIR_CNT 5 + +#define KEY_TWS_PAIR_CLEAR_CNT 30 + +#define KEY_LIFT_CNT 10 + /******************************************************************************\ Variables definitions \******************************************************************************/ @@ -50,14 +59,14 @@ bit Key_Press_ll_irq = 0; idata KEY_EVENT_E Event_key = 0; uint8_t Key_TWS_Pair_Tim = 0; + +uint8_t Key_TWS_Clear_Pair_Tim = 0; + uint8_t Key_TWS_Pair_Cnt = 0; uint16_t Key_Press_Debounce = 0; -#define KEY_TWS_PAIR_TIMER 20 -#define KEY_TWS_PAIR_CNT 5 - -#define KEY_TWS_PAIR_CLEAR_CNT 30 +uint8_t Key_Lift_Debounce = 0; /******************************************************************************\ Functions definitions @@ -126,9 +135,13 @@ uint16_t Key_Press_Debounce = 0; Enter_Sleep_Cnt_Restart_Flag = 1; #endif + Event_key = KEY_EVENT_Empty; + Key_Press_Flag = 0; Key_Lift_Flag = 1; + + Key_Lift_Debounce = 0; nKey_Press_8s_Flag = 0; @@ -156,12 +169,31 @@ uint16_t Key_Press_Debounce = 0; Key_Press_Debounce = 0; } - if( Key_Lift_Flag ) + if( Key_Lift_Flag && gBoost_Prepared_Flag ) { - Key_Lift_Flag = 0; + if( !Boost_Open_Flag ) + { + Set_PMU_Boost(ON); + + Boost_Open_Flag = 1; +#ifdef _DEBUG_KEY + printf("Boost Open Key.(line:%d)\r\n",(u16)__LINE__); +#endif + + return; + } + + VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V + + if( Key_Lift_Debounce <= KEY_LIFT_CNT ) + { + Key_Lift_Debounce++; + + return; + } if( Key_Press_l_irq ) - { + { Key_Press_l_irq = 0; /*todo*/ Event_key = KEY_EVENT_L_2S; @@ -169,6 +201,9 @@ uint16_t Key_Press_Debounce = 0; Key_TWS_Pair_Tim = 0; /*耳机配对*/ + Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00; + + Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00; #ifdef _DEBUG_KEY printf("long 2s press\r\n"); @@ -178,6 +213,8 @@ uint16_t Key_Press_Debounce = 0; if( Key_Press_ll_irq ) { Key_Press_ll_irq = 0; + + Key_TWS_Clear_Pair_Tim = 0; /*todo*/ Event_key = KEY_EVENT_LL_8S; @@ -197,10 +234,10 @@ uint16_t Key_Press_Debounce = 0; printf("short press\r\n"); #endif } - } - else - { - Event_key = KEY_EVENT_Empty; + + Key_Lift_Flag = 0; + + Boost_Open_Flag = 0; } #if 1 @@ -214,16 +251,28 @@ uint16_t Key_Press_Debounce = 0; HandleTxCommand(VHOUSE_CMD_PAIR,VOR_CHAN); //右耳发配对指令,区分耳机通道。 #endif Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00; + Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00; +#ifdef _DEBUG_KEY + printf("Key Pair TX VOR(line:%d).\r\n",(uint16_t)__LINE__); +#endif } else { if(Key_TWS_Pair_Cnt > KEY_TWS_PAIR_CNT) //耳机蓝牙地址置换超时10s,关闭蓝牙地址置换,开启VOX 5V。 { Key_TWS_Pair_Cnt = 0; + + Event_key = KEY_EVENT_Empty; + + OpenCover_TX_Cmd_Flag = 1; #if VOX_ENABLE - VOX_EN_Type(VOX_VOUT_Mode); + VOX_EN_Type(VOX_ADT_Mode); #endif +#ifdef _DEBUG_KEY + printf("Key Pair TimeOut(line:%d).\r\n",(uint16_t)__LINE__); +#endif + return; } else @@ -233,7 +282,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 ) @@ -247,10 +300,17 @@ uint16_t Key_Press_Debounce = 0; Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00; Key_TWS_Pair_Tim = 0; + + Key_TWS_Pair_Cnt = 0; + Event_key = KEY_EVENT_Empty; + + 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 @@ -258,6 +318,10 @@ uint16_t Key_Press_Debounce = 0; #ifdef VOX_TX HandleTxCommand(VHOUSE_CMD_PAIR,VOL_CHAN); #endif +#ifdef _DEBUG_KEY + printf("Key Pair TX VOL(line:%d).\r\n",(uint16_t)__LINE__); +#endif + } } } @@ -266,7 +330,11 @@ uint16_t Key_Press_Debounce = 0; if(Key_TWS_Pair_Tim > KEY_TWS_PAIR_TIMER) //3s重发一次。重发5次后超时 { Key_TWS_Pair_Cnt++; - Key_TWS_Pair_Tim = 0; + + Key_TWS_Pair_Tim = 0; +#ifdef _DEBUG_KEY + printf("Key Pair Cnt:%d.(line:%d)\r\n",(uint16_t)Key_TWS_Pair_Cnt,(uint16_t)__LINE__); +#endif } else { @@ -276,28 +344,33 @@ uint16_t Key_Press_Debounce = 0; else if( Event_key == KEY_EVENT_LL_8S ) { - if( Key_TWS_Pair_Tim < KEY_TWS_PAIR_CLEAR_CNT ) //每隔200ms发送一次,持续时间3s。 + if( Key_TWS_Clear_Pair_Tim < KEY_TWS_PAIR_CLEAR_CNT ) //每隔200ms发送一次,持续时间3s。 { - if( Key_TWS_Pair_Tim % 2*Vox_TX_Interval ) + if( Key_TWS_Clear_Pair_Tim % Vox_TX_Interval_2 ) { #ifdef VOX_TX HandleTxCommand(VHOUSE_CMD_CLEAR_PAIR,VOR_CHAN); #endif } else - if( Key_TWS_Pair_Tim % Vox_TX_Interval ) + if( Key_TWS_Clear_Pair_Tim % Vox_TX_Interval ) { #ifdef VOX_TX HandleTxCommand(VHOUSE_CMD_CLEAR_PAIR,VOL_CHAN); #endif } - Key_TWS_Pair_Tim++; + Key_TWS_Clear_Pair_Tim++; } else { Event_key = KEY_EVENT_Empty; - Key_TWS_Pair_Tim = 0; + + OpenCover_TX_Cmd_Flag = 1; + + Key_TWS_Clear_Pair_Tim = 0; + + VOX_EN_Type(VOX_ADT_Mode); } } } diff --git a/UsrSrc/pmu/pmu.c b/UsrSrc/pmu/pmu.c index 0ab74f0..66cfff7 100644 --- a/UsrSrc/pmu/pmu.c +++ b/UsrSrc/pmu/pmu.c @@ -63,6 +63,10 @@ void pmu_Init(void) //I2cSfr_Write(IRQ_EN1, 0x00); +// I2cSfr_Write( IRQ_EN0, 0xFF ); + +// I2cSfr_Write( IRQ_EN1, 0xFF ); + /*1、配置HALL、KEY。*/ I2cSfr_Write(I2CR_RST_CFG, 0x08); //HALL开盒退出ShipMode功能;KEY长按复位VDD,若处于ShipMode模式,则退出ShipMode模式; @@ -272,6 +276,41 @@ void Set_PMU_Boost_Vout(uint8_t Boost_Vout) I2cSfr_Write( CHG_VPMID_SET, I2cSfr_Temp | Boost_Vout ); } +/* + ******************************************************************************* + * void Set_PMU_StandbyMode_Set(uint8_t LDO_En) + * + * Description : Set PMU Enter ShipMode + * + * Arguments : uint8_t LDO_En:0:LDO Open;1:Bypass Vbat + + * Returns : NONE + + * Notes : NONE + * + ******************************************************************************* + */ +void Set_PMU_StandbyMode_Set(uint8_t LDO_En) +{ + uint8_t I2cSfr_Temp = 0; + + I2cSfr_Temp = I2cSfr_Read( VDPM_VDD_CHG_EN ); + + if( LDO_En ) + { + I2cSfr_Temp &= ~VDD_BYPASS; + } + else + { + I2cSfr_Temp |= VDD_BYPASS; + } + + I2cSfr_Write( VDPM_VDD_CHG_EN, I2cSfr_Temp ); +} + + +#if 0 + /* ******************************************************************************* * HAL_StatusTypeDef Set_PMU_VOX_Config( g_PMU_Vox_Cfg *n_PMU_Vox_Cfg ) @@ -286,7 +325,7 @@ void Set_PMU_Boost_Vout(uint8_t Boost_Vout) * ******************************************************************************* */ - #if 0 + HAL_StatusTypeDef Set_PMU_VOX_Config( g_PMU_Vox_Cfg *n_PMU_Vox_Cfg ) { #if 0 diff --git a/UsrSrc/system/system.c b/UsrSrc/system/system.c index ed9ccaf..89d7bf1 100644 --- a/UsrSrc/system/system.c +++ b/UsrSrc/system/system.c @@ -53,7 +53,6 @@ Functions definitions \******************************************************************************/ - /* ******************************************************************************* * void System_Init(void) @@ -96,6 +95,8 @@ void System_Init(void) // WDTREL = 0x80; //WDTPS = 0,wdt_f = wdt_f1/2;WDTPS = 1,wdt_f = wdt_f1/32; #endif + I2C_GPIOInit(); + #if ADC_ENABLE Adc_Init(); #endif @@ -127,10 +128,7 @@ void System_Init(void) pmu_Init(); - I2C_GPIOInit(); - Systerm_State.Next_State = POWER_ON_STATE; - } /* diff --git a/UsrSrc/timer/sys_tim.c b/UsrSrc/timer/sys_tim.c index 99e6cbc..f0a3cf8 100644 --- a/UsrSrc/timer/sys_tim.c +++ b/UsrSrc/timer/sys_tim.c @@ -47,13 +47,11 @@ bit F_sys_tim_250ms = 0; bit F_sys_tim_100ms = 0; bit F_sys_tim_1s = 0; - uint8_t F_sys_tim_tick = 0; bit F_sys_tim1_tick = 0; bit F_sys_tim2_tick = 0; - /******************************************************************************\ Functions definitions \******************************************************************************/ diff --git a/UsrSrc/uart/uart.c b/UsrSrc/uart/uart.c index ff09b5a..6e6e744 100644 --- a/UsrSrc/uart/uart.c +++ b/UsrSrc/uart/uart.c @@ -21,6 +21,7 @@ #include "system.h" #include "vox_module.h" #include "sleep.h" +#include "led.h" /******************************************************************************\ Macro definitions @@ -73,22 +74,23 @@ bit Uart1_RX_Finish_Flag = 0; void UART0_Init(void) { #if 1 + /* vor、vol都使用uart0进行分时通讯。 */ SFRADDR = P0_OE; //Set P02 And P03 As Output. SFRDATA |= 0x0C; - SFRADDR = P0_IE; //Set P02 And P03 As Input. - SFRDATA |= 0x0C; +// SFRADDR = P0_IE; //Set P02 And P03 As Input. +// SFRDATA |= 0x0C; // SFRADDR = P0_PU; //Set P02 And P03 30K Pullup. // SFRDATA |= 0x0C; - SFRADDR = MFP_CTL0; //VOR、VOL都使用UART0进行分时通讯。 - SFRDATA &=~ 0x0F; - SFRDATA |= 0x09; +// SFRADDR = MFP_CTL0; //VOR、VOL都使用UART0进行分时通讯。 +// SFRDATA &=~ 0x0F; +// SFRDATA |= 0x09; - #else + /* vor、vol使用不同uart进行通讯 */ SFRADDR = P0_OE; //Set P02 As Output. SFRDATA |= 0x04; @@ -110,7 +112,10 @@ void UART0_Init(void) S0RELL = LOBYTE(S0REL_VALUE);//s0rel=1023, baudrate = fclk/32 = 187.5k S0CON = 0x52; //SCON: MODE 1, 8-bit UART, RI enable - + + TI0 = 1; + RI0 = 1; + ES0 = 1; //Enable UART0 IRQ } @@ -133,31 +138,34 @@ void UART0_Init(void) void Uart0SendPacket(uint16_t Length,uint8_t *TransBuf) { uint8_t i = 0; + + SFRADDR = P0_OE; //Set P02 And P03 As Output. + SFRDATA |= 0x0C; - S0CON &=~ UART_REC_ENABLE; //Disable UART0's RX + SFRADDR = P0_IE; //Set P02 And P03 As Input. + SFRDATA &= ~0x0C; - for(i=0;i> 8) ) + if( S0BUF == EARPHONE_HEADER_HIGH ) { Rx0Status = 1; RX0_Cnt = 0; - RX0_Buffer[RX0_Cnt] = S0BUF; - - RX0_Cnt++; + RX0_Buffer[RX0_Cnt++] = S0BUF; } else { @@ -197,38 +204,37 @@ void uart0_Interrupt(void) interrupt Interrupt_Vector_RI_TI break; case 1: - if(S0BUF == BOXHEADER) + if( S0BUF == EARPHONE_HEADER_LOW ) { Rx0Status = 2; - RX0_Buffer[RX0_Cnt] = S0BUF; - - RX0_Cnt++; + RX0_Buffer[RX0_Cnt++] = S0BUF; } else { Rx0Status = 0; - RX0_Cnt = 0; + RX0_Cnt = 0; } break; + case 2: - RX0_Buffer[RX0_Cnt] = S0BUF; + { + RX0_Buffer[RX0_Cnt++] = S0BUF; - RX0_Cnt++; - - if( RX0_Cnt == Vox_Comm_Data_Len ) + if( ( RX0_Cnt >= ( RX0_Buffer[2] + 4 ) ) || ( RX0_Cnt > COM0_Data_Lenth ) ) { - RX0DataLen = RX0_Buffer[2] + 4; //获取数据长度 - } - - if( (RX0DataLen == RX0_Cnt) || (RX0_Cnt > COM0_Data_Lenth) ) //当接收到的data个数等于RX0DataLen,这结束本次传输。 - { RX0_Cnt = 0; + Rx0Status = 0; - Uart0_RX_Finish_Flag = 1; - } - + + Uart0_RX_Finish_Flag = 1; + } + } + break; + + default: + break; } #endif } @@ -383,17 +389,7 @@ void uart1_Interrupt(void) interrupt Interrupt_Vector_RI1_TI1 RX1_Cnt++; - if( RX1_Cnt == Vox_Comm_Data_Len ) - { - RX1DataLen = RX1_Buffer[5] | (RX1_Buffer[6] << 8) + 9; //获取数据长度,Headr(1Byte) + Trandsmit Dir(1Byte) + CMD(2Bytes) + datalen(2Bytes) + CRC16(2Bytes) - } - - if( (RX1DataLen == RX1_Cnt) || (RX1_Cnt > COM0_Data_Lenth) ) //当接收到的data个数等于RX0DataLen,这结束本次传输。 - { - RX1_Cnt = 0; - Rx1Status = 0; - Uart1_RX_Finish_Flag = 1; - } + break; } #endif diff --git a/UsrSrc/userapp/userapp.c b/UsrSrc/userapp/userapp.c index bf45998..972dfe2 100644 --- a/UsrSrc/userapp/userapp.c +++ b/UsrSrc/userapp/userapp.c @@ -47,6 +47,7 @@ \******************************************************************************/ xdata s_sys_state Systerm_State = {SLEEP_STATE,AWAKE_STATE,AWAKE_STATE}; +uint8_t Step_Cnt = 0; uint8_t LED_On_Timer = 0; //led亮时间计时 @@ -114,6 +115,20 @@ void LED_Display_App(void) static bit Disp_Bat_Lev; + if( LED_On_Flag ) + { + LED_On_Flag = 0; + + LED_On_Timer = 0; + + Display_AllOff(); + +#if SLEEP_ENABLE + Enter_Sleep_Cnt_Restart_Flag = 1; +#endif + return; + } + #ifdef NTC_ENABLE /*NTC保护,4灯一直快闪(2Hz)*/ if( NTC_Pro_Flag || Vox_Output_Short_Flag ) @@ -126,30 +141,27 @@ void LED_Display_App(void) } else { - if( Display_RSta != LED_KEEP_FLASHING ) + if( Display_RSta != LED_FLASH ) { Display_Red_Flash(20,10); } - if( Display_GSta != LED_KEEP_FLASHING ) + if( Display_GSta != LED_FLASH ) { Display_Green_Flash(20,10); } - if( Display_YSta != LED_KEEP_FLASHING ) + if( Display_YSta != LED_FLASH ) { Display_Yellow_Flash(20,10); } - if( Display_BSta != LED_KEEP_FLASHING ) + if( Display_BSta != LED_FLASH ) { Display_Blue_Flash(20,10); } } -#if SLEEP_ENABLE - Enter_Sleep_Cnt_Restart_Flag = 1; -#endif return; } @@ -161,21 +173,27 @@ void LED_Display_App(void) LED_On_ChgDone_Flag = 0; LED_On_Chg_Flag = 0; + + CoverEvent_Flg_led = 0; + + Earphone_Chg_Flag = 0; Wkup_Earphone_Flag = 1; } #endif - if (ChgStatus == CHG_STA_ING) //ChgStatus = CHG_STA_ING + if (ChgStatus != CHG_NONE) { - if ( Charger_Done ) // 充电完成,4个LED常亮 + if ( ChgStatus == CHG_STA_COMPLETED ) // 充电完成,4个LED常亮 { if( !LED_On_ChgDone_Flag ) { LED_On_ChgDone_Flag = 1; LED_Breating_Light_Off(); + + return; } Display_AllOn(); @@ -186,6 +204,8 @@ void LED_Display_App(void) { LED_On_Chg_Flag = 1; + LED_On_ChgDone_Flag = 0; + LED_On_Flag = 1; Breathing_Light_Cnt = LED_R; @@ -279,17 +299,6 @@ void LED_Display_App(void) return; } - - if( LED_On_Flag ) - { - LED_On_Timer = 0; - - LED_On_Flag = 0; - - Display_AllOff(); - - return; - } if( CoverEvent_Flg_led || Disp_Bat_Lev || Earphone_Chg_Flag || Key_Press_short_irq ) { @@ -298,7 +307,7 @@ void LED_Display_App(void) LED_On_Timer++; } else - if( LED_On_Timer < LED_ON_CNT ) //LED显示5s后灭。 + if( LED_On_Timer < LED_ON_CNT ) //LED显示10s后灭。 { LED_On_Timer++; @@ -345,7 +354,7 @@ void LED_Display_App(void) Key_Press_short_irq = 0; - LED_On_Flag = 1; //清LED显示 + Display_AllOff(); //清LED显示 } } } @@ -355,19 +364,19 @@ void LED_Display_App(void) /* ******************************************************************************* -* uint8_t PMU_ADC_GetValue_Machine(void) +* void PMU_ADC_GetValue_Machine(void) * * Description : PMU(xSen) ADC值获取函数,使能一个通道后,在中断中取值,每使能一个通道,需要运行一个UserAPP周期。 (5ms调用周期) * * Arguments : NONE -* Returns : 1:完成一次全通道采样; +* Returns : NONE * Notes : NONE * ******************************************************************************* */ -uint8_t PMU_ADC_GetValue_Machine(void) +void PMU_ADC_GetValue_Machine(void) { #ifdef _DEBUG_ADC printf("adc chn:%d,pmu:%d,Ivol:%d,Vbat:%d,Vin:%d,Vpmid:%d,Vor:%d,Vol:%d,Vdd:%d,Ivor:%d.\r\n",(u16)ADC_Chn_Num,(u16)g_Vpmu_Adc,(u16)g_pmu_Adc_Ivol,(u16)Vbat_Adc,(u16)g_pmu_Adc_Vin,(u16)g_pmu_Adc_Vpmid,(u16)g_pmu_Adc_Vor,(u16)g_pmu_Adc_Vol,(u16)g_pmu_Adc_Vdd,(u16)g_pmu_Adc_Ivor); @@ -377,12 +386,8 @@ uint8_t PMU_ADC_GetValue_Machine(void) if( ADC_Chn_Num >= pmu_ADC_MAX ) { - ADC_Chn_Num = 0; - - return 1; + ADC_Chn_Num = 0; } - - return 0; } /* @@ -401,13 +406,6 @@ uint8_t PMU_ADC_GetValue_Machine(void) */ void System_Drivers_Machine(void) { -#if CHARGER_ENABLE - Charger_Handler(); -#endif - -#if DISCHARGE_ENABLE - DisCharge_Handler(); -#endif #if HALL_ENABLE Hall_Handler(); @@ -424,6 +422,15 @@ void System_Drivers_Machine(void) if ( F_sys_tim_100ms ) { F_sys_tim_100ms = 0; + +#if CHARGER_ENABLE + Charger_Handler(); +#endif + +#if DISCHARGE_ENABLE + DisCharge_Handler(); +#endif + #if BAT_VALUE check_bat_level(); #endif @@ -495,6 +502,8 @@ void SysTem_State_Machine(void) 系统唤醒后需要处理的功能; 1、使能中断; */ + Set_PMU_StandbyMode_Set(ON); //开启LDO + #ifdef _DEBUG_MAIN printf("Awake State (line:%d)\r\n", (uint16_t)__LINE__); #endif @@ -517,7 +526,6 @@ void SysTem_State_Machine(void) 进入Sleep模式前的一些准备工作; 1、使能唤醒中断; */ - #ifdef _DEBUG_MAIN printf("Sleep State (line:%d)\r\n", (uint16_t)__LINE__); @@ -575,10 +583,11 @@ void SysTem_State_Machine(void) #ifdef _DEBUG_MAIN - // printf("STA0:0x%x,STA1:0x%x,STA2:0x%x,Chip_STA:0x%x,VOX_STA:0x%x.Dec_Sleep:%d\r\n",(u16)(pmu_Info.pmu_Fault_STA0),(u16)(pmu_Info.pmu_Fault_STA1),(u16)(pmu_Info.pmu_Fault_STA2),(u16)(pmu_Info.pmu_Chip_STA),(u16)(pmu_Info.pmu_VOX_STA),(u16)Decnt_SleepDelay); + printf("STA0:0x%x,STA1:0x%x,STA2:0x%x,Chip_STA:0x%x,VOX_STA:0x%x.Dec_Sleep:%d\r\n",(u16)(pmu_Info.pmu_Fault_STA0),(u16)(pmu_Info.pmu_Fault_STA1),(u16)(pmu_Info.pmu_Fault_STA2),(u16)(pmu_Info.pmu_Chip_STA),(u16)(pmu_Info.pmu_VOX_STA),(u16)Decnt_SleepDelay); // printf("Chg Sta:0x%x.,batPec:%d.\r\n",(u16)ChgStatus,(u16)bat_level_Pec); printf("Vntc:%d,Ivol:%d,Vbat:%d,Vin:%d,Vpmid:%d,Vor:%d,Vol:%d,Vdd:%d,Ivor:%d.\r\n",(u16)g_Vntc_Adc,(u16)g_pmu_Adc_Ivol,(u16)Vbat_Adc,(u16)g_pmu_Adc_Vin,(u16)g_pmu_Adc_Vpmid,(u16)g_pmu_Adc_Vor,(u16)g_pmu_Adc_Vol,(u16)g_pmu_Adc_Vdd,(u16)g_pmu_Adc_Ivor); + #endif if(Decnt_SleepDelay > 0) @@ -619,17 +628,25 @@ void SysTem_State_Machine(void) 1、检测唤醒源,是否需要唤醒系统; 2、定时唤醒,更新电池电量; */ - #if SLEEP_ENABLE + #if 1 if(Check_Require_Sleep()) { + VOX_EN_Type(VOX_ADT_Mode); + + Set_PMU_Boost(OFF); + + Set_PMU_StandbyMode_Set(OFF); //关闭LDO + Enter_Sleep(); } else { Systerm_State.Next_State = AWAKE_STATE; } - + #else + + Systerm_State.Next_State = AWAKE_STATE; #endif break; @@ -648,8 +665,6 @@ void SysTem_State_Machine(void) * Return : None * Note : None *****************************************************************************/ -uint8_t Step_Cnt = 0; - void UserAPP(void) { if(F_sys_tim_5ms) @@ -687,8 +702,9 @@ void UserAPP(void) if ( F_sys_tim_10ms ) { F_sys_tim_10ms = 0; - +#ifdef LED_DISPLAY LED_Drv(); +#endif } } diff --git a/UsrSrc/vox/vox_module.c b/UsrSrc/vox/vox_module.c index 7edb2b2..8ddda84 100644 --- a/UsrSrc/vox/vox_module.c +++ b/UsrSrc/vox/vox_module.c @@ -56,10 +56,7 @@ bit Vox_Output_Short_Flag = 0; #define BOOST_VOUT_MAX 2 //跟随充Boost输出电压上限值:0:4.6V,1:4.7V,2:4.8V,3:5.05V. -#define Vox_TX_Pattern_Tim 11 - -#define Vox_TX_Interval 2 //Vox定时发送指令时间间隔 -#define Vox_TX_Interval_2 3 +#define Vox_TX_Pattern_Tim 21 #define VOX_IOFF_HOLD_CNT 50 @@ -67,6 +64,8 @@ bit Vox_Output_Short_Flag = 0; #define VOX_CLOSE_HOLD_CNT 50 //关盖发码前保持时间 +#define MAX_PACKET_SIZE 0x20 + #if VOX_FOLLOW_CHG #define VOX_FOLLOW_CHG_INIT_CNT 10 @@ -109,9 +108,21 @@ xdata uint8_t Vox_Get_BES_Addr_Flag[2] = {0}; #endif +#ifdef VOX_TX + +idata uint8_t Net_Info[2][13] = {0}; + +idata uint8_t MAC_Addr[2][18] = {0}; + +uint8_t EarPhone_Num = 0; + +#endif + xdata uint8_t Earphone_Vbat[2] = 0; //对耳电量 xdata uint8_t Vox_Online_State[2] = {0}; //耳机在线标志位 +bit OpenCover_TX_Cmd_Flag = 0; + #define KEY_TWS_PAIR_TIMER 2 #define KEY_TWS_PAIR_CNT 6 @@ -328,8 +339,8 @@ xdata uint8_t Vox_Online_State[2] = {0}; // case VOX_COMM_Mode_Uart: - VOX_Confg |= VOX_CFG_Comx_Rup_2K |VOX_CFG_Vox_Rup_2K | VOX_CFG_Vox_Vup_VOXS; - + VOX_Confg |= VOX_CFG_Comx_Rup_2K | 0<<5 |VOX_CFG_Vox_Rup_2K | VOX_CFG_Vox_Vup_VOXS; + // VOX_Confg |= VOX_CFG_Vox_Vup_VOXS; Bst_VOX_Comm_EN |= BST_COMM_EN_Gate_Ctrl | ( BST_COMM_EN_Vor_Comm_En | BST_COMM_EN_Vol_Comm_En ); break; @@ -405,10 +416,10 @@ void Vox_Det_Machine(void) 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; @@ -442,18 +453,20 @@ void Vox_Det_Machine(void) if( CoverEvent_Flg ) //Hall事件触发。 { if( !Boost_Open_Flag ) - { + { Set_PMU_Boost_Vout(BOOST_VPMID_5_2V); //开关盖Boost输出5.2V,保证耳机一定能被唤醒。 Set_PMU_Boost(ON); //Boost Enable;异常时由硬件主动关闭。开启Boost,开启Vox 5v会在开启Boost之后(100ms延时)。 Boost_Open_Flag = 1; +#ifdef _DEBUG_VOX + printf("Boost Open.(line:%d)\r\n",(u16)__LINE__); +#endif + VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V return; } - - VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V - + Vox_Output_Debounce = 0; Vox_Voltage_Hold_Timer = 0; //关盖清0,开盖使用 @@ -474,14 +487,12 @@ void Vox_Det_Machine(void) Vox_Chg_Full_Flag = 0; + Cover_Close_Force_Vout_Flag = 0; + Vox_Getinto_Sleep_Flag = 0; Vox_Chn_Select = 0; - Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00; - - Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00; - Vox_Vout_Enable = ON; Wkup_Earphone_Flag = 0; @@ -494,7 +505,7 @@ void Vox_Det_Machine(void) Follow_Chg_Sta = Vox_Follow_Chg_InitSta; #endif #ifdef _DEBUG_VOX - printf("Box Close.\r\n"); + printf("Box Close.(line:%d)\r\n",(u16)__LINE__); #endif } else //2、开盖处理:5v 500ms 转0V 500ms,后转ADT模式。 @@ -507,14 +518,15 @@ void Vox_Det_Machine(void) Cover_Open_5V_Flag = 0; #ifdef _DEBUG_VOX - printf("Box Open.\r\n"); + printf("Box Open.(line:%d)\r\n",(u16)__LINE__); #endif } + Boost_Open_Flag = 0; + CoverEvent_Flg = 0; } - /* 发送开盖指令*/ if( Cover_Open_Flag ) /*开盖后,5V持续N00ms后0V持续N00ms,保证耳机能被唤醒;之后发开盖码。*/ { @@ -561,9 +573,7 @@ void Vox_Det_Machine(void) Get_CHIP_STA1_Flag1 = 1; - TX_Cmd_Flag = 1; - - Boost_Open_Flag = 0; + OpenCover_TX_Cmd_Flag = 1; Vox_Vout_Enable = OFF; #ifdef _DEBUG_VOX @@ -573,30 +583,60 @@ void Vox_Det_Machine(void) } else { - if( TX_Cmd_Flag ) + if( Event_key == KEY_EVENT_Empty ) { - TX_Cmd_Flag = 0; - - CHIP_STA1_BK = pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ); - } - else - { - /*耳机出入盒判断*/ - if( CHIP_STA1_BK != ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) ) //查询耳机loadon状态,loadon状态改变,则说明有耳机出入盒。 + if( OpenCover_TX_Cmd_Flag ) { - if( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) - { - Earphone_Chg_Flag = 1; -#ifdef LED_DISPLAY - LED_On_Flag = 1; -#endif -#ifdef _DEBUG_VOX - printf("Open Box And Earphone GetIn.\r\n"); -#endif - - } + OpenCover_TX_Cmd_Flag = 0; - CHIP_STA1_BK = ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ); + CHIP_STA1_BK = pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ); + + if ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) + { + if ( ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) == ( VOR_LoadOn | VOL_LoadOn ) ) + { + EarPhone_Num = 2; + } + else + { + EarPhone_Num = 1; + } + } + else + { + EarPhone_Num = 0; + } + } + else + { + /*耳机出入盒判断*/ + if( CHIP_STA1_BK != ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) ) //查询耳机loadon状态,loadon状态改变,则说明有耳机出入盒。 + { + if ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ) + { + Earphone_Chg_Flag = 1; +#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 + CHIP_STA1_BK = ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ); + } } } } @@ -621,98 +661,96 @@ void Vox_Det_Machine(void) Follow_Chg_Sta = Vox_Follow_Chg_InitSta; #endif - Vox_TX_Timer = 0; - Vox_Voltage_Hold_Timer = 0; - Vox_Output_Debounce = 0; - Vox_Chg_Full_Flag = 0; + Cover_Close_Force_Vout_Flag = 1; + return; } - VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V + VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V + #ifdef _DEBUG_VOX - printf("Close Box And Force Voltage Up.\r\n"); + printf("Close Box And Force Voltage Up.\r\n "); #endif + Boost_Open_Flag = 0; + Wkup_Earphone_Flag = 0; } else { - if( Vox_Voltage_Hold_Timer <= VOX_VOLTAGE_HOLD_CNT ) //关盖Boost VPMID保持时间。 + if( !Cover_Close_Force_Vout_Flag ) { - Vox_Voltage_Hold_Timer++; + 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 + HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 +#endif + } + else + if( (Vox_TX_Timer % Vox_TX_Interval) == 0 ) //200ms发送一次 + { +#ifdef VOX_TX + HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 +#endif + } - return; - } - /*发码*/ - 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); //左耳发开盖指令,区分耳机通道。 -#endif - } - else - if( (Vox_TX_Timer % Vox_TX_Interval) == 0 ) //200ms发送一次 - { -#ifdef VOX_TX - HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 -#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 VOUT 5V输出。 */ if( Cover_Close_Flag1 ) { - VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V - + VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V +#ifdef _DEBUG_VOX + printf("VOX Vout 5V(VOX_STA:0x%x,line:%d).\r\n",(uint16_t)(pmu_Info.pmu_VOX_STA), (uint16_t)__LINE__); +#endif Cover_Close_Flag1 = 0; } - -#if VOX_FOLLOW_CHG - - if ( Vox_Fllow_Chg.Vox_Follow_Stop == OFF ) - { - Vox_Follow_Chg( &Vox_Fllow_Chg ); //跟随充处理。 - } else -#endif - { + { if( !Vox_Chg_Full_Flag ) { - if( ( (pmu_Info.pmu_VOX_STA & ( VOR_Ioff | VOL_Ioff ) ) == ( VOR_Ioff | VOL_Ioff ) )|| !(pmu_Info.pmu_VOX_STA & ( VOL_LoadOn | VOR_LoadOn ) ) || F_batlevel_low ) //耳机充满、VOX无负载、盒子低电,则关闭Vout输出通路,关闭Boost。 + if( ( (pmu_Info.pmu_VOX_STA & ( VOR_Ioff | VOL_Ioff ) ) == ( VOR_Ioff | VOL_Ioff ) )|| !( pmu_Info.pmu_VOX_STA & ( VOL_LoadOn | VOR_LoadOn ) ) || F_batlevel_low ) //耳机充满、VOX无负载、盒子低电,则关闭Vout输出通路,关闭Boost。 { - if( Vox_Voltage_Hold_Timer < VOX_VOUT_5V_LEAST_CNT ) //重载转轻载延时5s后关闭Boost输出。 + if( Vox_Voltage_Hold_Timer <= VOX_VOUT_5V_LEAST_CNT ) //重载转轻载延时5s后关闭Boost输出。 { Vox_Voltage_Hold_Timer++; @@ -724,10 +762,23 @@ void Vox_Det_Machine(void) Vox_Chg_Full_Flag = 1; - Boost_Open_Flag = 0; - + Vox_Output_Debounce = 0; + + Vox_Voltage_Hold_Timer = 0; + + Vox_Getinto_Sleep_Flag = 0; + VOX_EN_Type(VOX_ADT_Mode); //VOX Enable ADT } + else + { +#if VOX_FOLLOW_CHG + if ( Vox_Fllow_Chg.Vox_Follow_Stop == OFF ) + { + Vox_Follow_Chg( &Vox_Fllow_Chg ); //跟随充处理。 + } +#endif + } } else { @@ -767,7 +818,7 @@ void Vox_Det_Machine(void) } } } - + Bat_Low_Pro_Flag = 0; } else @@ -799,7 +850,8 @@ void Vox_Det_Machine(void) CHIP_STA1_BK = ( pmu_Info.pmu_VOX_STA & ( VOR_LoadOn | VOL_LoadOn ) ); } - } + } + } #if VOX_FOLLOW_CHG @@ -810,7 +862,7 @@ void Vox_Det_Machine(void) * * Description : Vox 跟随充处理函数。 (40ms调用周期) * -* Arguments : NONE +* Arguments : g_Vox_Fllow_Chg_Cfg *g_Vox_Fllow_Chg * Returns : NONE @@ -839,7 +891,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) if( !nVpmid_Value_Setting ) { Set_PMU_Boost_Vout(n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present); -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG InitSta Set Max Vpmid.(Vox_sta:0x%x)(line:%d)\r\n",(u16)pmu_Info.pmu_VOX_STA, (u16)__LINE__); #endif nVpmid_Value_Setting = 1; @@ -848,7 +900,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) else { Vox_Follow_Init_Deb = 0; - + /* 参数初始化。 */ nVpmid_Value_Setting = 0; n_Vox_Fllow_Chg->Vpmid_AddSta[VOR_CHAN] = OFF; @@ -878,7 +930,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) Follow_Chg_Sta = Vox_Follow_Chg_Sta1; Vox_Follow_Chg_Debounce = 0; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG InitSta.(Vox_sta:0x%x)(line:%d)\r\n",(u16)pmu_Info.pmu_VOX_STA, (u16)__LINE__); #endif } @@ -893,7 +945,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->Vox_Follow_Stop = ON; Follow_Chg_Sta = Vox_Follow_Chg_InitSta; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta1,No EarPhone In Box.(line:%d)\r\n",(u16)__LINE__); #endif } @@ -907,7 +959,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOR_CHAN] = ( g_pmu_Adc_Ivor / 5 ) << 2; //Ivox_Threshold_Neg = IVox_Init * 80% n_Vox_Fllow_Chg->IVox_Threshold_Pos[VOR_CHAN] = g_pmu_Adc_Ivor << 1; //Ivox_Threshold_Neg = IVox_Init * 2 -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta1,VOR Chging(Ivor:%dmA).(line:%d)\r\n",g_pmu_Adc_Ivor,(u16)__LINE__); #endif @@ -920,7 +972,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOL_CHAN] = ( g_pmu_Adc_Ivol / 5 ) << 2; //Ivox_Threshold_Neg = IVox_Init * 80% n_Vox_Fllow_Chg->IVox_Threshold_Pos[VOL_CHAN] = g_pmu_Adc_Ivol << 1; //Ivox_Threshold_Neg = IVox_Init * 2 -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta1,VOL Chging(Ivol:%dmA).(line:%d)\r\n",g_pmu_Adc_Ivol,(u16)__LINE__); #endif @@ -948,7 +1000,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN] = g_pmu_Adc_Ivor; n_Vox_Fllow_Chg->Vox_InBox_Sta[VOR_CHAN] = ON; //判断VOR有耳机在盒正常抽电 -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta2,Get IVOR:%dmA.(line:%d)\r\n",(u16)g_pmu_Adc_Ivor,(u16)__LINE__); #endif } @@ -958,7 +1010,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN] = g_pmu_Adc_Ivol; n_Vox_Fllow_Chg->Vox_InBox_Sta[VOL_CHAN] = ON; //判断VOL有耳机在盒正常抽电 -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta2,Get IVOL:%dmA.(line:%d)\r\n",(u16)g_pmu_Adc_Ivol,(u16)__LINE__); #endif } @@ -984,7 +1036,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) Follow_Chg_Sta = Vox_Follow_Chg_InitSta; n_Vox_Fllow_Chg->Vox_Follow_Start = OFF; //重启动跟随充 -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3,VOX Chg ReInit.(line:%d)\r\n",(u16)__LINE__); #endif } @@ -1002,14 +1054,14 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) { n_Vox_Fllow_Chg->Vox_InBox_Sta[VOR_CHAN] = OFF; } -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CV),VOR Vpmid AddSta(Ivor:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN],(u16)__LINE__); #endif } else //未检测到Ivor Ioff,则Vpmid降档 { n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CV),VOR Vpmid SubSta(Ivor:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN],(u16)__LINE__); #endif } @@ -1019,14 +1071,14 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) if ( n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN] > n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOR_CHAN] ) { n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CC),VOR Vpmid SubSta(Ivor:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN],(u16)__LINE__); #endif } else { n_Vox_Fllow_Chg->Vpmid_AddSta[VOR_CHAN] = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CC),VOR Vpmid AddSta(Ivor:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOR_CHAN],(u16)__LINE__); #endif } @@ -1045,14 +1097,14 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) { n_Vox_Fllow_Chg->Vox_InBox_Sta[VOL_CHAN] = OFF; } -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CV),VOL Vpmid AddSta(Ivol:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN],(u16)__LINE__); #endif } else //未检测到Ivol Ioff,则Vpmid降档 { n_Vox_Fllow_Chg->Vpmid_SubSta[VOL_CHAN] = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CV),VOL Vpmid SubSta(Ivol:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN],(u16)__LINE__); #endif } @@ -1062,14 +1114,14 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) if ( n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN] > n_Vox_Fllow_Chg->IVox_Threshold_Neg[VOL_CHAN] ) { n_Vox_Fllow_Chg->Vpmid_SubSta[VOL_CHAN] = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CC),VOL Vpmid SubSta(Ivol:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN],(u16)__LINE__); #endif } else { n_Vox_Fllow_Chg->Vpmid_AddSta[VOL_CHAN] = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta3(CC),VOL Vpmid AddSta(Ivol:%dmA).(line:%d)\r\n",n_Vox_Fllow_Chg->IVox_At_Present[VOL_CHAN],(u16)__LINE__); #endif } @@ -1108,12 +1160,12 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->Vpmid_AddSta[VOL_CHAN] = ON; Follow_Chg_Sta = Vox_Follow_Chg_Sta2; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta4,VOx Vpmid AddSta(Vout:0x%x,Ivol:%dmA,Ivor:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivol,g_pmu_Adc_Ivor,(u16)__LINE__); #endif } -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW else { printf("Follow CHG Sta4,VOx Ching(Vout:0x%x,Ivol:%dmA,Ivor:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivol,g_pmu_Adc_Ivor,(u16)__LINE__); @@ -1134,11 +1186,11 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->Vpmid_AddSta[VOR_CHAN] = ON; Follow_Chg_Sta = Vox_Follow_Chg_Sta2; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta4,VOR Vpmid AddSta(Vout:0x%x,Ivor:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivor,(u16)__LINE__); #endif } -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW else { printf("Follow CHG Sta4,VOR Ching(Vout:0x%x,Ivor:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivor,(u16)__LINE__); @@ -1154,11 +1206,11 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) n_Vox_Fllow_Chg->Vpmid_AddSta[VOL_CHAN] = ON; Follow_Chg_Sta = Vox_Follow_Chg_Sta2; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG Sta4,VOL Vpmid AddSta(Vout:0x%x,Ivol:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivol,(u16)__LINE__); #endif } -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW else { printf("Follow CHG Sta4,VOL Ching(Vout:0x%x,Ivol:%dmA)(line:%d).\r\n",n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,g_pmu_Adc_Ivol,(u16)__LINE__); @@ -1184,7 +1236,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) if( ( n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] == ON ) && ( n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] == ON ) ) { n_Vox_Fllow_Chg->Vpmid_SubSta_Flag = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG SubSta,VOL/VOR(line:%d).\r\n",(u16)__LINE__); #endif } @@ -1194,7 +1246,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) if( n_Vox_Fllow_Chg->Vpmid_SubSta[VOR_CHAN] == ON ) { n_Vox_Fllow_Chg->Vpmid_SubSta_Flag = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG SubSta,VOR(line:%d).\r\n",(u16)__LINE__); #endif } @@ -1205,7 +1257,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) if( n_Vox_Fllow_Chg->Vpmid_SubSta[VOL_CHAN] == ON ) { n_Vox_Fllow_Chg->Vpmid_SubSta_Flag = ON; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG SubSta,VOL(line:%d).\r\n",(u16)__LINE__); #endif } @@ -1236,7 +1288,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) Vox_Follow_Chg_Debounce = 0; n_Vox_Fllow_Chg->Vpmid_SubSta_Flag = OFF; -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG SubSta,(STA:0x%x,Vpmid:0x%x)(line:%d)\r\n",(u16)Follow_Chg_Sta,(u16)n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,(u16)__LINE__); #endif Set_PMU_Boost_Vout( n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present ); @@ -1265,7 +1317,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) Follow_Chg_Sta = Vox_Follow_Chg_Sta1; } -#ifdef _DEBUG_VOX +#ifdef _DEBUG_FOLLOW printf("Follow CHG AddSta,(STA:0x%x,Vpmid:0x%x)(line:%d)\r\n",(u16)Follow_Chg_Sta,(u16)n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,(u16)__LINE__); #endif Set_PMU_Boost_Vout(n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present); @@ -1343,14 +1395,6 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) * ******************************************************************************* */ -idata uint8_t Net_Info[2][8] = {0}; - -idata uint8_t MAC_Addr[2][18] = {0}; - -uint8_t EarPhone_Num = 0; - -#define MAX_PACKET_SIZE 0x20 - void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) { uint8_t dataLen = 0; @@ -1388,14 +1432,14 @@ void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) case VHOUSE_CMD_EXCH_TWS_BTADDR: /*Data Length*/ - tx_pData[3] = 0x1B; + tx_pData[3] = MAX_PACKET_SIZE; for(i=5;i<18;i++) { tx_pData[i] = MAC_Addr[nVox_Chn_Select][i]; } - for(i=23;i<8;i++) + for(i=23;i<13;i++) { tx_pData[i] = Net_Info[nVox_Chn_Select][i]; } @@ -1467,6 +1511,7 @@ void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) tx_pData[dataLen] = Crc8Maxim(tx_pData,dataLen); #if 0 + /* vor、vol使用不同uart进行通讯 */ if(nVox_Chn_Select == VOL_CHAN) { @@ -1490,17 +1535,18 @@ void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) } #else + /* vor、vol都使用uart0进行分时通讯。 */ VOX_EN_Type( VOX_COMM_Mode_Uart ); - if(nVox_Chn_Select == VOL_CHAN) + if(nVox_Chn_Select == VOR_CHAN) { SFRADDR = MFP_CTL0; //关闭VOR到UART0的开关,配置P02为GPIO,P03为UART0。 SFRDATA &=~ 0x0F; SFRDATA |= 0x08; } else - if(nVox_Chn_Select == VOR_CHAN) + if(nVox_Chn_Select == VOL_CHAN) { SFRADDR = MFP_CTL0; //关闭VOL到UART0的开关,配置P03为GPIO,P02为UART0。 SFRDATA &=~ 0x0F; @@ -1508,12 +1554,25 @@ void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) } #if UART0_ENABLE - Uart0SendPacket(dataLen + 1, tx_pData); + Uart0SendPacket(dataLen + 2, tx_pData); #endif -// VOX_EN_Type( VOX_VOUT_Mode ); + if(nVox_Chn_Select == VOR_CHAN) + { + SFRADDR = P0_IE; //Set P03 As Input. + SFRDATA &=~ 0x0C; + SFRDATA |= 0x08; + } + else + if(nVox_Chn_Select == VOL_CHAN) + { + SFRADDR = P0_IE; //Set P02 As Input. + SFRDATA &=~ 0x0C; + SFRDATA |= 0x04; + } #endif + } #endif @@ -1621,18 +1680,19 @@ void HandleRxMsg(VOX_BES_COMMAND_E RxCommand) void HandleVoxCommMsg(void) { uint8_t CrcCheckSum = 0; - uint8_t i = 0; /*RX数据处理*/ if( Uart0_RX_Finish_Flag ) { Uart0_RX_Finish_Flag = 0; + + printf("RX0_Buffer[0]:0x%x,RX0_Buffer[1]:0x%x,RX0_Buffer[2]:0x%x,RX0_Buffer[3]:0x%x,RX0_Buffer[4]:0x%x,RX0_Buffer[5]:0x%x,RX0_Buffer[6]:0x%x,RX0_Buffer[7]:0x%x,line:%d\r\n",(u16)RX0_Buffer[0],(u16)RX0_Buffer[1],(u16)RX0_Buffer[2],(u16)RX0_Buffer[3],(u16)RX0_Buffer[4],(u16)RX0_Buffer[5],(u16)RX0_Buffer[6],(u16)RX0_Buffer[7],(u16)__LINE__); CrcCheckSum = Crc8Maxim(RX0_Buffer, RX0_Buffer[2] + 3); //求校验和 if( CrcCheckSum == RX0_Buffer[RX0_Buffer[2] + 3] ) { - HandleRxMsg((VOX_BES_COMMAND_E)RX0_Buffer[3]); + HandleRxMsg( (VOX_BES_COMMAND_E)RX0_Buffer[3] ); } else { diff --git a/sy8835_demo.si4project/sy8835_demo.SearchResults b/sy8835_demo.si4project/sy8835_demo.SearchResults index a58fcc6..69d2c07 100644 --- a/sy8835_demo.si4project/sy8835_demo.SearchResults +++ b/sy8835_demo.si4project/sy8835_demo.SearchResults @@ -1,3 +1,10 @@ ----- I2C_Ack Matches (2 in 2 files) ---- -i2c_simu.c (UsrSrc\i2c_simu) line 135 : void I2C_Ack(void) -i2c_simu.h (UsrInc\i2c_simu) line 85 : void I2C_Ack(void); +---- Boost_Open_Flag Matches (9 in 3 files) ---- +Hall_Handler in hall.c (UsrSrc\hall) : Boost_Open_Flag = 0; +vox_module.c (UsrSrc\vox) line 35 : bit Boost_Open_Flag = 0; +Vox_Det_Machine in vox_module.c (UsrSrc\vox) : if( !Boost_Open_Flag ) +Vox_Det_Machine in vox_module.c (UsrSrc\vox) : Boost_Open_Flag = 1; +Vox_Det_Machine in vox_module.c (UsrSrc\vox) : Boost_Open_Flag = 0; +Vox_Det_Machine in vox_module.c (UsrSrc\vox) : if( !Boost_Open_Flag ) +Vox_Det_Machine in vox_module.c (UsrSrc\vox) : Boost_Open_Flag = 1; +Vox_Det_Machine in vox_module.c (UsrSrc\vox) : Boost_Open_Flag = 0; +vox_module.h (UsrInc\vox) line 224 : extern bit Boost_Open_Flag; diff --git a/sy8835_demo.si4project/sy8835_demo.sip_sym b/sy8835_demo.si4project/sy8835_demo.sip_sym index 7f35d99f338000cb454cb236dced0998f0bbca72..e0be1ba3984025c18ac9824e3855b8342b571612 100644 GIT binary patch delta 12587 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 delta 12366 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 diff --git a/sy8835_demo.si4project/sy8835_demo.siwork b/sy8835_demo.si4project/sy8835_demo.siwork index 8057732d3cfd46eff12b7c717f5534df8aec1fc8..953984a393739eb54ace3c9ede835deb24df04c6 100644 GIT binary patch literal 78083 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 OYPja(x>Qr$3H}%SmrEf4