From bd4c1d9d53da2e4c4c2165ce2131ada5658abca9 Mon Sep 17 00:00:00 2001 From: Marcel Peterkau Date: Mon, 22 Aug 2022 14:13:55 +0200 Subject: [PATCH] DTCs now hav severity and improved DTCMaintenance --- Software/data/index.htm | 18 ++++++++++++--- Software/data/static/dtc.txt | 12 ++++++++++ Software/data/static/img/critical.png | Bin 0 -> 8081 bytes Software/data/static/img/info.png | Bin 0 -> 9784 bytes Software/data/static/img/warn.png | Bin 0 -> 9636 bytes Software/src/can.cpp | 4 ++-- Software/src/config.cpp | 11 ++++----- Software/src/dtc.cpp | 23 +++++++++++++++++- Software/src/dtc.h | 12 +++++++++- Software/src/globals.h | 2 ++ Software/src/gps.cpp | 2 +- Software/src/lubeapp.cpp | 32 ++++++++++++++++++-------- Software/src/main.cpp | 4 +--- Software/src/webui.cpp | 18 +++++++++++++-- 14 files changed, 109 insertions(+), 29 deletions(-) create mode 100644 Software/data/static/dtc.txt create mode 100644 Software/data/static/img/critical.png create mode 100644 Software/data/static/img/info.png create mode 100644 Software/data/static/img/warn.png diff --git a/Software/data/index.htm b/Software/data/index.htm index 419b0e0..f3c7934 100644 --- a/Software/data/index.htm +++ b/Software/data/index.htm @@ -75,13 +75,25 @@ - - - + + + + %DTC_TABLE%
TimestampDTCactiveZeitstempelFehlercodeSchwereAktiv
+

+ +

+
+
+ +
+

diff --git a/Software/data/static/dtc.txt b/Software/data/static/dtc.txt new file mode 100644 index 0000000..fc23474 --- /dev/null +++ b/Software/data/static/dtc.txt @@ -0,0 +1,12 @@ +1 - TANK_EMPTY +2 - DTC_TANK_LOW +3 - DTC_NO_EEPROM_FOUND +4 - DTC_EEPROM_CFG_BAD +5 - DTC_EEPROM_PDS_BAD +6 - DTC_EEPROM_PDSADRESS_BAD +7 - DTC_EEPROM_VERSION_BAD +8 - DTC_FLASHFS_ERROR +9 - DTC_FLASHFS_VERSION_ERROR +10 - DTC_NO_GPS_SERIAL +11 - DTC_CAN_TRANSCEIVER_FAILED +12 - DTC_NO_CAN_SIGNAL diff --git a/Software/data/static/img/critical.png b/Software/data/static/img/critical.png new file mode 100644 index 0000000000000000000000000000000000000000..82325ff620a2d20f9cffb7c9666b75f122fae836 GIT binary patch literal 8081 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 literal 0 HcmV?d00001 diff --git a/Software/data/static/img/info.png b/Software/data/static/img/info.png new file mode 100644 index 0000000000000000000000000000000000000000..1fb0c51cdf165845092bdf97aee5a1940ce929bd GIT binary patch literal 9784 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 D?(EXB+b`a-T0y5fJaYzmzw`3S*w+fs_po4{R zMu=9o{y@Z)Q}5Z;cb|}1ixsV)BJnrjn+w*N3Vq+6a8hn-lt1#o9<+LWwOP~a@Ct8l z*w6!j^JT)TS6YX1!HpD_0nJ3mPDXZXwTEGCUQL;7wQHSHi`&m#zkQsV%n){;z`yxY zLSW%(nn>dz!#y|)-85@1{(dm&sIPK@s|9flsS)?D>mL`pUs5l@_)gf`NQd8R60L_M z4s`a9X202}B)G?;&T%l3{cKoAST%BL^2TBCJDUosY}dPoLy8#_mWnQc+z6wi!60R| zduH8aOCMNx9S^0UMp*>1Au>1br>ppS3_=@`g@?fDTd07wLJ#ftWj_$7BZzQUT7Y## z0IX2lP#zCu&*>T(+|w9Gwd3`PXunNXjrUdQsgo;koN_b~QV<uS@e;#MjQJ6oj<pYQf?&=RpXZv#-1W=2y8wIn}4bN>y@wLhOk_ z!;BCof#uKUID+=1>S$jN%DcCFdGow{$6w>y(j=#_!#NA@528jhV(_&PIjkSYI6 zu6|+WvUOlao`hvK_t0j?;~RTO2dcq}tJh8#Zyohq2!DFJIQwGjhT%$(L)pxH6cZ{; zCzCjf$xP6(^rhQaHjvX>KT*DO5||BDKGHpsS*yjZq%aNy8A;^cZwlt)bXvwMUdsGL zLz2pat*B1q zaiD|ri<0PPl?jz7N5qckbb0t~{rV|b%Fu3Ms=ir~px>b7-j%hbI4ZHP^2CpJ+(EcN zKmWovd_GS%FmPt&(V0GpRF39(fOV?TmxOFSPlF@FYmliISeT8k27QXOR(LuvErlmYYz$8#FaxOSiHqBbi40Pg|j#tj7g#*KgNbK-V4 zvw{*8wAz(fBIjRdzcgkSg2=$<0X^iCBcQoUjAvCav_Xc^vNCz=QgS9)kd z!fbEJafe7{m!xB;8$P72eI_PU9sPY_``X;;+>@pqK%N1zbV?GhI1^p41O`8~U?iv@ zwV_q0j^wx7h}p9te)eVanqup`x__GQY)-y@_fyKju^X%>@;Mih+RYei$DJk0Lpj zyoarwtf895pAfh=1s(@4FE?3nabI6wF<%KWtcSfgSVl%h90U=EK!7+2pr^m97t#;t z>dAWv@dt()+7so0ar44pUAZnXkv3RwF9jYRTtC;p{Bv>B)%^?J)$>mlaD0gSA>G8m zVjyuB7xBMqczUV(;6VO#=zrDlG{)`UiyNXnvECjiw7L)4)rMTo7LM%yko3aX{hO@+@a?kacQ}7{1gHKN z?te)CEB4>QI4NCSSv4%m`_etQngY+IeOX&93S%q#`w?j)WdoA7MFFLykaj?*6w($b zV}t4gHv-@Uqovc*B6q@gG&h=eWB&dv@6gxWx)fk=pr zEf9^efq+nGDHuo^@*Bz)C98q;a6#hIiE%;Nqs84^?SFS%5-zKPfGhAo#6bUUK{zA5 z>~IRWF@SNk#rk^wyUQ5kf;RF(Uh)Z+k^+MzWuVe9hy+vy_J^t8h_}!lp14}PL4Appjl!4`VFWS%K#gg6mTAcY$-s|B)6gj3-XQ z|FY))ta>A~`yX$A3<77&?=CK`--RoSMEzmJ6X}Dt{cQ-R_eU4X0qJUw#*OelOX^?k znExeR(r9TE42sJS8YzY27%5{1l(v&W0%1}}T&5sks14|kbp3_yiM8|cMS7rB>~WFe zqQRBW?`XIL|0GlBKfUpFKwmNi!i{f`G!OzY27_gBKM0IR{Lf&;FUR!1qLml_fB2C9 zE%3KV0H^my8*XyJ%~j%mO;&&MbxGm>;qhl4{tqqSp#L%QU-A17UH{PaUor4s3I9`F z|IqbcG4Njr|5IK6-{>O$_i_jAiu(uTi(AYHMD4WV7DB`}I+|*@I~p*lWV&|w{SKL% zmboVYAjW%n;`tRS`QRE!yx_X(B&(!MWE5A$AIdTU0QiD%H5Fs6uG!Q9eFl{)T}mUf zK2GXoi-TO(ZDOO@s5G!M`_J>Z9GgpG?uXHeKl|mq*QpZsoMcEVngn{S+0P*S`vSdL zQf4u2enh3imR-{(vd9}{Pf-SI?Y6bIf4dV@wbSoQEG0|dhOwpug__9Ng^;wdc4Np1 zLWqv`qh9lwlI58_#G44|1$>j+8SJ_J&-pWc-L$c(?mo`Fn1e&B9uE~ z(e20Gu)cSsYzwEmTLjH42STevZVW7?0)sU2Dh~X_IYB(LLp9|#(^d;ZLQj5Fih0VL zknx2iD5o*d+#mF*uem;?<-6MqH4>?mwzT z@(z0M{ocEN??2zQe(!&GWgeTG(0Pvjokp3W^tu0>RsxHD9 zv%!e8aC+M^`AQQzzQ{!1;$X0N+5pa;K%O@zDN}#7_ax?=`6puWMR?ixoNLoXB(LzI zm(I@R3mgr-g5PL{xykn4y0!ES>TrM0&UKs?E&2z zf4bhq5|+F1lV9mdC9!axEINM#TsjVH7!LICKKIMX`Dh`u4_iyg`RMTRgT+-e&ey7L ziOwI44{I+@SQl`x&ks0I=KB6ecp?xcGso8tvO5KOKW@XNEBk%F_0Qftjr?knNpbkv zv3Y+w^?c{NWYX-r>m}WAX}I(t!^Z4jPIbw4|K!dq{~_av%=*1u@4-~CbcVNsqJ_(9 z$C|8kvKN&eaxe^V<#m{L&nQfcJcpl!`(Qn|oHfZDnnks$2=lZtczE|%?zS#oiN{!wqM}1yxiz&< zM?Cfl=SgPGPFS1^m7nu^r=yGYhRNb8+yaY9{n180ZX2UVSlk??DaCzRM#g5r17Eif zN#BSA!c)cTX!E5Y8D`3S;-;_ohoC(XPas$Z@$bnVF6kad8hodfdoMOIFy~t=`g)S{ z3BO*wvjU+Q)x$Blo(FMVN*9Sn;d$9|5!^+Ys^w)x+49k1>zQiFE0bzmb%pV2+>H&R zcBOU2>2_rkxh%A*F7y#p zk>+r+{=jHFJn4b)Z_;S5;ubFk+>{=kI(ZI-ef3{%VZJ<}tl^c-KnClOsnAF0IIvu5 zp3G0~_S8LRto$jN<=I1l`UI8EEK$~f2~ zKE3JtB;3nGR{gXY`@?Uxw(GN*`lp|p+|k?J(##q3q_?waZY3zFV+>B5A0kDbXBvXp zs?$AAZZ?5SvI@=?e$Y>x#tm@v2Ukp2NxB=ESx*OPy;yjGdd=I5ts4`z4MG(OWAKN6 zzKb}XH{13*QJ{UA^dhw>=MF)h^=_BfLiUGAq9>>4bhg_o;S=nU$Iz-fT*RrpivuKD z4dRWcG(^tW+yW&QVJ7CpZ8>4s%Ur{#>6mpBGle&jv|CCZb9tX82RYdnh-<#=SE-jQ z!&3W-PS3H+;ZiHI8%HZI4Spv6oQk!PueJAbqH~JsCiYF7gmz=`h>tNQO-maI|QW~;0 z)?%Q1&#Ko~uD)1~`0lAHUFKh}C^2r-;bPrgW+oSH6a`>AqWe>6N>0u#TQTc2?)y2(80@oJAyjytb z7RJHoTmxLN$_f&4u3FVK<)R?0AGm8TBwJ~2g!u+;{8jX-ur_(Y-)fZJvZ%>GW0*c% z^pmkt`uBzKx4n^c56Tie_Xf@<)^FOm3o$R+XMZ4B;mDMQSH2FJ(o3Yom|;7qdtFC5 zhGAP5wdjXulX?Zt2U@j zV|bW%dW;S!K;I-XYG{5QPdhZN7ygue{#1N}cy{Ak44ySvC+GS;we$FZ#;gH%%eYGq z$2$dGya<-CrT!fviF&5+1(W+uy1IHa&<8Ku$l^IKZ~wQ z{8ImE8+UA$hkVuCvKX9YB)7|nTA_EuyA|{)RG)B=7Z)n7oKO13d^Umo(6+cn=>tG2 ztRBZ8Bg$toqNt>6?Uma1wGpsJiZ-oIf^@e_~f>p_H?S%Q`Sng&IRAdlV!fHb(YqwmKqRqoo8t-e7L(HyjG;?yiJSl*BCK}HexG>>94ekWoybWvK^&oYNH=}V&!jtJJ6%KRGwfnFXI{$AW|nMaY@ylz~Wje=-0-F z)G{T(DG@5BOb(sCAuPW7!HD@b{Q8@|e!tPT-2;w)d_iz}HM`T!utvM1}O5$2o!p8CEc+L^6<0vPthdwD8j*!*j-H*iS>Xf|tG z@*C?g&LL?E$VMc6KBy#__@gWKKuITO@mDI`Rxp!q(bIrJk&i7BM0GVvt%2vD1k#2@5_X3yry1=wUeIzY zyuP$d&|$56yLhsylvdX!0sAeWFy*RaC8xc&ghw|Al8}kX5=?15F$ogF+2l6Pjj?0^ z5__z>yc8;W%l`Rn+)*nC)znlHP%Z$V{c0`V%ZUGgzY8qjr6aWUnP{LeR0u6J*4wx{(dA{u75>W?Sj$=nEH6;jeC z2Ru7!BlAp43YxLs7+vLkfkj+M*W3kvGTJTCWxJ!1{=Wwc*QP9>3ZaB3@;x!q`-q80m=$lM}>uc?Ew$9}xl;ep9Z zlAzeBen5}O5lHXDCoHEQrF=OPczDMqkZwYnY8*p{mDXBV&DBiBehw@yP_p2OiZ%A)=~{-${z< zXfaFcwHJ9Um^*?)gp@eG*FqSg$&Z0jMFO00S45{yoT}ml(c3(Bq7SR%T)|9O=Y-R` zd~L%iH0wB*I>d5%y7XU~%ChN^F48_JUCY)t?LBVUFi{04+Ytay3`@a6OBG6ACO&c9 z;|LJ0q$$6#tc_);78?c5FZI4%tR0dSX%EKvCOQmQP4}`h*}xrT!&k_XY&AmEoztM| zUU0CjUohW=h18wD6C>^W(O?@%=B7%=9)RdTQPV3&b3ir@h^UD`)L8S1I%a-4MW6(1 zMSnG@`Dn;CCFW8+jE)jHwfg7>4}N!V@J(25H^7S!62D#i+wY-t^fg zcHuXVDA{t$Pw3kz3q%aFF!IgcA$NURPs%k`CgK9Ut2AtFy1hQlgmhIXl=6k{TeA0o zjU!qkWwLG_w@8eK7y8*NO1ilQu`^;Inj>wPM+TUST3NTIL#k>^~W# z)SauJ;j%EKrMDNN4rZ3s_euR5M!+|w%) z&d}l~y<(oP6tKInC$ZL=wBM;`;i9xP^_2xE-UeQdy!DT&6;(d6Qp}e;l3c;K;dCsQ zp{UC6+P|3cSd$xC8 z)%cO1nrX3rB>H4n>%P-!cT>^3k}S%2zBf1&+}2Yp62vE)I%=Ct+v8#DZzc1@jD4J4 zXMmS<$O$;)Jfa~T~$+S zZ#?n2cssDWj12u4**iU=Y7~bl51ffiC0&z7(QNsth76{H3da_8Mgv@8_X?LOdT;be zd`o2C9R5nBwr3{7m%W3ueDI$I0N1FI1=8)AF4PnKvtgo+>mYoXP&+ z_I^%9CusT^$n6E3(ED7M$-n4Wnkn#rG4bK3_Lw~BjTuu+z4SYuWgLo=l~GD%y)8|ei2Ix&ouV57W&tlqq zQTe=+4UfBQ-QOf%%<$JbK&*SrOILsA)Rk6zbt`ZskcarRc>pX0}qJ33_U_K)0ENssq; zn-Qa;Fx|YS-T8uZ!#P-i6r9g5`r$tfUm8 zhwaK5k*K_TOb4qZpjW+xcKr|a$j(YMns__xg!MlR#byh(BXjAXPt_RO)-A=fg-U%B z31tp7Q1j&8-z;Ly zYpj^7ne^q_Q)*v08jUq==f!2!B`I5^9^12n^V8pFho|HeP`n6_z_wPJ98*5>XE;w7 zQ_chTdozjNS?$tk@6Jk%)3amG+xRwLdD6CLeYxYL;CK4)&|Qb#dBCD|a|mduI4Cjb+qqse;W z86^OK5sH+T*H)32|FivxZhB_=#Yrl^m7#sQSgcy1&%gs*iOqu;lizenyhGh7hrHXc zW$F5b8H`lceaL__85ArXX@Ey#W5)OpM|K~td!$cgL{asEkGmo4U}=|W;m1Ns+a4fK z2UQ^SI_C-anWRLlr0)unE9_hL>VomLD>@0IY}ua-;pMZrzR06 zd8Uizm(s5j8K>MFGR>S&jcVNOv!Ly_yNj$IV~}M~Q)VH!0eZw$fJvk?b5B>j@Uz6m zGPC=IifiB6o!~eahCyj8gY+5m#cq{xYC0-GPB8b!yC!L+zz)9Q%Gs0CItLLgz?G15 zQRC$VuD}l!@7Gm|(E&dlmR4G;`g}UpNd=Az)t;^?`=`t00bb>dh^z+$n&x_Z*fIUe zP(mj2)Vt9ai-7?Xrr2+O>giEi?{xL4;rl6;@Q!PYblXe;x=&4uME9eOG}Iw5CkH+# z+{p^T=jq^#?pFf<64IW|P?#M8#bSl9K{`qT_uAe7S&(o^;DdV_0vgWp2wSAGw<|)= zTT>tAZ3h#B1Er-1B|IT$00#sL%Hru@@8|~clm!05g`l6W#r!~)Un(d&NuZI2HjBKI zD}n{g2j&ytRrExTaEigZRHog7)NF`-sYk5Q69AbOnT&-pnx zYiRrh@96di3ur$0J)zG0f_wt}4i5Z(w{Sx#x}!n+|a(+?*b}!Vrq? z2uBp#-yz_zzwDhKyW0N>2M*&$*drX!s%~hng8y)NUqwUvFN*DlzpT(?|3edn zwEhoS|CrnL$ggnzJ`uF}U%3C!{xkMp%4jVO4Typh?D6&VR1_qE*Zv`JCm0eA`Sl2b zfkk1~!XRE4RK$uGd{5vWuc)<^5HDO1ED917f{TcNg#HGl;^>Bgq8nV-P-t*IBpOFp zOvqY9Kp4ym1_?rW!3gw|)jhZfub_}HSOk1e2reih@HYr8S0uVBq4s~D)io3x4FyB% z3ktyCXaGSNdNv4QUMNBc{e!B9c?FDN(+qU7Z207a)0=>WAs@H;!&{2I6> z93rc&A_)ZX{r37xqHPaFS)&cmYXIp8ck*!ikFq|}0ilP2Uh^p^EG#H^PYetK-2;h; z-TNK*FMC6Ts~fr&uTcdB_(0%a=GTdVpu<5^3%#yXG{7%8IvR+)D*}pga@BWovX=y2 zL$F+1{wi=5iQj2aM!KOjysm5hkE+*0xcq+my$I})zlK;?eibeR3j6KE4eE~g%>vr) z_Ylk$>S%*Nukb%g>Q6cHe@PciP*hCBN?3?jOvp+Eoh~6OUNM-p2rt|k46*_Xf(5M* zqQAoU3*F7h8s!0XMabHqBSlApE}>u1uyFlBCig$}J!}!zObMXZw}2=w2&6A42oV&3 zfIvY0KZ51IUekX@E5ZN&@FDR_;cuG&+U~auy}6+GD*nGVt3UX34?Uov z|8??T@%t}b|I+neG4Nk0|65)E()C|4@LwtaTV4O(=py{jaR=du{s-iNKFl<~?@9WZFV^Rg`NaOefG`$q`aL?4+{*IF)NIdujSy{q)eDR!vLm-gM@)KDn zU2Xx}?P)Oyl%@+Qwm+5yW}>oXk}8R8%X4b#((&7oueBP;2Qy3dobiB~Mvwkex8XAM)6mWR{-gXX?V1BVc89VgtE3DOdd{O`cM3R~!^J1~= z+o^bH58y8SJ07a`u2;G|`9_0rgN?zrI&gBw#!mLVUl^N`6T1>%KcT3^jOg*IGBlMn zXN%Wvj7Uz&`j)h}B;SFRTXAd1k9P`E?hTFoP*t8 ty?9VVL8yaKJQoCevs9hAZ;>_5NnZY}!BpGAADtV3ilU}MwVY+p{{Ztcc*Ot! literal 0 HcmV?d00001 diff --git a/Software/src/can.cpp b/Software/src/can.cpp index de0eb13..512e468 100644 --- a/Software/src/can.cpp +++ b/Software/src/can.cpp @@ -7,7 +7,7 @@ void Init_CAN() { if (CAN0.begin(MCP_STDEXT, CAN_500KBPS, MCP_16MHZ) != CAN_OK) - MaintainDTC(DTC_CAN_TRANSCEIVER_FAILED, true); + MaintainDTC(DTC_CAN_TRANSCEIVER_FAILED, DTC_CRITICAL, true); CAN0.init_Mask(0, 0, 0x07FF0000); // Init first mask... CAN0.init_Mask(1, 0, 0x07FF0000); // Init second mask... @@ -39,7 +39,7 @@ uint32_t Process_CAN_WheelSpeed() return milimeters_to_add; } - MaintainDTC(DTC_NO_CAN_SIGNAL, (millis() > lastRecTimestamp + 10000 ? true : false)); + MaintainDTC(DTC_NO_CAN_SIGNAL, DTC_CRITICAL, (millis() > lastRecTimestamp + 10000 ? true : false)); return 0; } diff --git a/Software/src/config.cpp b/Software/src/config.cpp index a3dd961..fc56ba3 100644 --- a/Software/src/config.cpp +++ b/Software/src/config.cpp @@ -84,8 +84,7 @@ void GetConfig_EEPROM() if (Checksum_EEPROM((uint8_t *)&LubeConfig, sizeof(LubeConfig)) != checksum) { - MaintainDTC(DTC_EEPROM_CFG_BAD, true); - FormatConfig_EEPROM(); + MaintainDTC(DTC_EEPROM_CFG_BAD, DTC_CRITICAL, true); } LubeConfig.checksum = checksum; } @@ -118,7 +117,7 @@ void GetPersistence_EEPROM() { MovePersistencePage_EEPROM(true); FormatPersistence_EEPROM(); - MaintainDTC(DTC_EEPROM_PDSADRESS_BAD, true); + MaintainDTC(DTC_EEPROM_PDSADRESS_BAD, DTC_CRITICAL, true); } else { @@ -129,7 +128,7 @@ void GetPersistence_EEPROM() if (Checksum_EEPROM((uint8_t *)&PersistenceData, sizeof(PersistenceData)) != checksum) { - MaintainDTC(DTC_EEPROM_PDS_BAD, true); + MaintainDTC(DTC_EEPROM_PDS_BAD, DTC_CRITICAL, true); } PersistenceData.checksum = checksum; } @@ -224,10 +223,10 @@ boolean checkEEPROMavailable() { if (!ee.isConnected()) { - MaintainDTC(DTC_NO_EEPROM_FOUND, true); + MaintainDTC(DTC_NO_EEPROM_FOUND, DTC_CRITICAL, true); globals.systemStatus = sysStat_Error; return false; } - MaintainDTC(DTC_NO_EEPROM_FOUND, false); + MaintainDTC(DTC_NO_EEPROM_FOUND, DTC_CRITICAL, false); return true; } \ No newline at end of file diff --git a/Software/src/dtc.cpp b/Software/src/dtc.cpp index 2b45fb6..0676036 100644 --- a/Software/src/dtc.cpp +++ b/Software/src/dtc.cpp @@ -2,7 +2,7 @@ DTCEntry_s DTCStorage[MAX_DTC_STORAGE]; -void MaintainDTC(DTCNums_t DTC_no, boolean active) +void MaintainDTC(DTCNums_t DTC_no, DTCSeverity_t DTC_severity, boolean active) { for (int i = 0; i < MAX_DTC_STORAGE; i++) { @@ -13,6 +13,7 @@ void MaintainDTC(DTCNums_t DTC_no, boolean active) Serial.printf("DTC gone active: %d\n", DTC_no); DTCStorage[i].timestamp = millis(); DTCStorage[i].active = DTC_ACTIVE; + DTCStorage[i].severity = DTC_severity; } if (!active && DTCStorage[i].active == DTC_ACTIVE) { @@ -81,5 +82,25 @@ DTCNums_t getlastDTC(boolean only_active) } } + return pointer >= 0 ? DTCStorage[pointer].Number : DTC_LAST_DTC; +} + +DTCNums_t getlastDTC_Severity(boolean only_active, DTCSeverity_t severity) +{ + int8_t pointer = -1; + uint32_t lasttimestamp = 0; + + for (int i = 0; i < MAX_DTC_STORAGE; i++) + { + if (DTCStorage[i].Number > 0 && DTCStorage[i].timestamp > lasttimestamp) + { + if ((only_active == false || DTCStorage[i].active == DTC_ACTIVE) && DTCStorage[i].severity == severity) + { + pointer = i; + lasttimestamp = DTCStorage[i].timestamp; + } + } + } + return pointer >= 0 ? DTCStorage[pointer].Number : DTC_LAST_DTC; } \ No newline at end of file diff --git a/Software/src/dtc.h b/Software/src/dtc.h index 320b833..a3de2a0 100644 --- a/Software/src/dtc.h +++ b/Software/src/dtc.h @@ -8,6 +8,7 @@ typedef enum DTCNums_e { DTC_TANK_EMPTY = 1, + DTC_TANK_LOW, DTC_NO_EEPROM_FOUND, DTC_EEPROM_CFG_BAD, DTC_EEPROM_PDS_BAD, @@ -31,17 +32,26 @@ typedef enum DTCActive_e DTC_PREVIOUS } DTCActive_t; +typedef enum DTCSeverity_e +{ + DTC_INFO, + DTC_WARN, + DTC_CRITICAL +} DTCSeverity_t; + typedef struct DTCEntry_s { DTCNums_t Number; uint32_t timestamp; DTCActive_t active; + DTCSeverity_t severity; } DTCEntry_t; -void MaintainDTC(DTCNums_t DTC_no, boolean active); +void MaintainDTC(DTCNums_t DTC_no, DTCSeverity_t DTC_severity, boolean active); void ClearDTC(DTCNums_t DTC_no); void ClearAllDTC(); DTCNums_t getlastDTC(boolean only_active); +DTCNums_t getlastDTC_Severity(boolean only_active, DTCSeverity_t severity); extern DTCEntry_s DTCStorage[MAX_DTC_STORAGE]; #endif \ No newline at end of file diff --git a/Software/src/globals.h b/Software/src/globals.h index 711550f..a131760 100644 --- a/Software/src/globals.h +++ b/Software/src/globals.h @@ -33,6 +33,8 @@ typedef struct Globals_s char DeviceName[33]; uint32_t FlashVersion; uint16_t eePersistanceAdress; + uint8_t TankPercentage; + bool hasDTC; } Globals_t; extern Globals_t globals; diff --git a/Software/src/gps.cpp b/Software/src/gps.cpp index 7356e8a..7c82c11 100644 --- a/Software/src/gps.cpp +++ b/Software/src/gps.cpp @@ -51,7 +51,7 @@ uint32_t Process_GPS_WheelSpeed() } } - MaintainDTC(DTC_NO_GPS_SERIAL, (millis() > lastRecTimestamp + 10000)); + MaintainDTC(DTC_NO_GPS_SERIAL,DTC_CRITICAL, (millis() > lastRecTimestamp + 10000)); return 0; } diff --git a/Software/src/lubeapp.cpp b/Software/src/lubeapp.cpp index d927962..3844559 100644 --- a/Software/src/lubeapp.cpp +++ b/Software/src/lubeapp.cpp @@ -5,23 +5,35 @@ uint32_t lubePulseTimestamp = 0; void RunLubeApp(uint32_t add_milimeters) { - MaintainDTC(DTC_TANK_EMPTY, (PersistenceData.tankRemain_µl < LubeConfig.amountPerDose_µl)); + globals.TankPercentage = PersistenceData.tankRemain_µl / (LubeConfig.tankCapacity_ml * 1000); + + MaintainDTC(DTC_TANK_EMPTY, DTC_CRITICAL, (PersistenceData.tankRemain_µl < LubeConfig.amountPerDose_µl)); + MaintainDTC(DTC_TANK_LOW, DTC_WARN, (globals.TankPercentage < LubeConfig.TankRemindAtPercentage)); static tSystem_Status preserverSysStatusError; - if (globals.systemStatus != sysStat_Error) - preserverSysStatusError = globals.systemStatus; - - if (getlastDTC(true) < DTC_LAST_DTC) + if (getlastDTC(false) < DTC_LAST_DTC) { - globals.systemStatus = sysStat_Error; + globals.hasDTC = true; + if (getlastDTC_Severity(true, DTC_CRITICAL) < DTC_LAST_DTC) + { + if (globals.systemStatus != sysStat_Error) + { + preserverSysStatusError = globals.systemStatus; + } + globals.systemStatus = sysStat_Error; + } + else + { + if (globals.systemStatus == sysStat_Error) + { + globals.systemStatus = preserverSysStatusError; + } + } } else { - if (globals.systemStatus == sysStat_Error) - { - globals.systemStatus = preserverSysStatusError; - } + globals.hasDTC = false; } // Add traveled Distance in mm diff --git a/Software/src/main.cpp b/Software/src/main.cpp index 52123b1..7d86a15 100644 --- a/Software/src/main.cpp +++ b/Software/src/main.cpp @@ -506,14 +506,12 @@ void LED_Process(uint8_t override, CRGB SetColor) oldSysStatus = globals.systemStatus; } - uint32_t percentage = PersistenceData.tankRemain_µl / (LubeConfig.tankCapacity_ml * 1000); - switch (LED_Status) { case LED_Startup: FastLED.setBrightness(255); - if (percentage < LubeConfig.TankRemindAtPercentage) + if (globals.TankPercentage < LubeConfig.TankRemindAtPercentage) leds[0] = CRGB::OrangeRed; else leds[0] = CRGB::White; diff --git a/Software/src/webui.cpp b/Software/src/webui.cpp index a2fe890..e18dcd3 100644 --- a/Software/src/webui.cpp +++ b/Software/src/webui.cpp @@ -16,7 +16,7 @@ void initWebUI() if (!LittleFS.begin()) { Serial.println("An Error has occurred while mounting LittleFS"); - MaintainDTC(DTC_FLASHFS_ERROR, true); + MaintainDTC(DTC_FLASHFS_ERROR, DTC_CRITICAL, true); return; } @@ -117,7 +117,7 @@ String processor(const String &var) return "hidden"; #endif if (var == "SHOW_DTC_TABLE") - return globals.systemStatus == sysStat_Error ? "" : "hidden"; + return globals.hasDTC ? "" : "hidden"; if (var == "DTC_TABLE") { @@ -137,6 +137,20 @@ String processor(const String &var) temp = temp + "" + String(buff_timestamp); temp = temp + "" + String(DTCStorage[i].Number) + ""; + temp = temp + ""; if (DTCStorage[i].active == DTC_ACTIVE) temp = temp + "active";