From 57df620087cafe14c08fb66ec4a27944d46b9861 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Wed, 13 Apr 2022 22:27:44 -0400 Subject: [PATCH] logging of live data structs was: data points #3614 --- firmware/console/binary/FragmentEntry.h | 13 +++++-- .../binary/generated/live_data_fragments.cpp | 36 +++++++++--------- firmware/console/binary/tunerstudio.cpp | 14 +++++-- java_tools/ConfigDefinition.jar | Bin 5440792 -> 5440972 bytes .../java/com/rusefi/ldmp/UsagesReader.java | 17 +++++---- 5 files changed, 49 insertions(+), 31 deletions(-) diff --git a/firmware/console/binary/FragmentEntry.h b/firmware/console/binary/FragmentEntry.h index a00b184974..97fd4aaae6 100644 --- a/firmware/console/binary/FragmentEntry.h +++ b/firmware/console/binary/FragmentEntry.h @@ -9,12 +9,19 @@ struct FragmentEntry { FragmentEntry(const uint8_t *data, size_t size) { + init(data, size); + } + + FragmentEntry() { + } + + const uint8_t *data = nullptr; + size_t size = 0; + + void init(const uint8_t *data, size_t size) { this->data = data; this->size = size; } - - const uint8_t *data; - size_t size; }; void copyRange(uint8_t *destination, FragmentEntry *fragments, size_t dataOffset, size_t dataLength); diff --git a/firmware/console/binary/generated/live_data_fragments.cpp b/firmware/console/binary/generated/live_data_fragments.cpp index be8e1b8fba..7219df4766 100644 --- a/firmware/console/binary/generated/live_data_fragments.cpp +++ b/firmware/console/binary/generated/live_data_fragments.cpp @@ -3,22 +3,22 @@ #include "FragmentEntry.h" #include "tunerstudio.h" -/* -static FragmentEntry fragments[] = { - FragmentEntry((const uint8_t *)getStructAddr(LDS_high_pressure_fuel_pump), sizeof(high_pressure_fuel_pump_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_injector_model), sizeof(injector_model_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_launch_control_state), sizeof(launch_control_state_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_boost_control), sizeof(boost_control_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_ac_control), sizeof(ac_control_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_fan_control), sizeof(fan_control_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_fuel_pump_control), sizeof(fuel_pump_control_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_main_relay), sizeof(main_relay_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_engine_state), sizeof(engine_state_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_tps_accel_state), sizeof(tps_accel_state_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_trigger_central), sizeof(trigger_central_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_trigger_state), sizeof(trigger_state_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_wall_fuel_state), sizeof(wall_fuel_state_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_idle_state), sizeof(idle_state_s)), - FragmentEntry((const uint8_t *)getStructAddr(LDS_ignition_state), sizeof(ignition_state_s)), +static FragmentEntry fragments[15]; + +void initFragments() { + fragments[0].init((const uint8_t *)getStructAddr(LDS_high_pressure_fuel_pump), sizeof(high_pressure_fuel_pump_s)); + fragments[1].init((const uint8_t *)getStructAddr(LDS_injector_model), sizeof(injector_model_s)); + fragments[2].init((const uint8_t *)getStructAddr(LDS_launch_control_state), sizeof(launch_control_state_s)); + fragments[3].init((const uint8_t *)getStructAddr(LDS_boost_control), sizeof(boost_control_s)); + fragments[4].init((const uint8_t *)getStructAddr(LDS_ac_control), sizeof(ac_control_s)); + fragments[5].init((const uint8_t *)getStructAddr(LDS_fan_control), sizeof(fan_control_s)); + fragments[6].init((const uint8_t *)getStructAddr(LDS_fuel_pump_control), sizeof(fuel_pump_control_s)); + fragments[7].init((const uint8_t *)getStructAddr(LDS_main_relay), sizeof(main_relay_s)); + fragments[8].init((const uint8_t *)getStructAddr(LDS_engine_state), sizeof(engine_state_s)); + fragments[9].init((const uint8_t *)getStructAddr(LDS_tps_accel_state), sizeof(tps_accel_state_s)); + fragments[10].init((const uint8_t *)getStructAddr(LDS_trigger_central), sizeof(trigger_central_s)); + fragments[11].init((const uint8_t *)getStructAddr(LDS_trigger_state), sizeof(trigger_state_s)); + fragments[12].init((const uint8_t *)getStructAddr(LDS_wall_fuel_state), sizeof(wall_fuel_state_s)); + fragments[13].init((const uint8_t *)getStructAddr(LDS_idle_state), sizeof(idle_state_s)); + fragments[14].init((const uint8_t *)getStructAddr(LDS_ignition_state), sizeof(ignition_state_s)); }; -*/ diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index 615b0f7fad..cb30c241fd 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -171,29 +171,37 @@ static void handlePageSelectCommand(TsChannelBase *tsChannel, ts_response_format #if EFI_TUNER_STUDIO const void * getStructAddr(live_data_e structId) { +#if EFI_UNIT_TEST if (engine == nullptr) { -#if ! EFI_UNIT_TEST - firmwareError(OBD_PCM_Processor_Fault, "getStructAddr: No engine reference"); -#endif return nullptr; } +#endif switch (structId) { + case LDS_high_pressure_fuel_pump: #if EFI_HPFP return static_cast(&engine->module().unmock()); #else return nullptr; // explicit null to confirm that this struct is handled #endif // EFI_HPFP + case LDS_launch_control_state: +#if EFI_LAUNCH_CONTROL return static_cast(&engine->launchController); +#else + return nullptr; // explicit null to confirm that this struct is handled +#endif // EFI_LAUNCH_CONTROL + case LDS_injector_model: return static_cast(&engine->module().unmock()); + case LDS_boost_control: #if EFI_BOOST_CONTROL return static_cast(&engine->boostController); #else return nullptr; // explicit null to confirm that this struct is handled #endif // EFI_BOOST_CONTROL + case LDS_ac_control: return static_cast(&engine->module().unmock()); case LDS_fan_control: diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index dfbc861aca10d0dbcf1be313e311a02a8adbc96f..1de9aa22f73c0340761f451d9f3cf0ef862a9685 100644 GIT binary patch delta 55798 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 z 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

`$pWdI9XMm)h<6lC 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

    5_%?q zBjj^cS)bFyIUIn}d{;1mX#6Vz!8*pD&g1W^Q=aZhiFly5f1 z&edcuLstvr_HjSMT7vV37%m+~%XBT#!&ygJ8E*-5^f7`kY2-;3oti+L|2IR93>bn< z_0(z#OKl9aCKyMMgpt$)ORpmIt)>XQ@Gd84-wftnWefoiY&3<@9Q5hlX6Vz3XDmz2 z(TK{I45J84${8*bWWQ(V+yY?yiD5N??N=GnTH^nH_z0>^ptTs$GO&|0wGP7tg7w-A z)~x_r^$4(2)$3GCWVJ%3XAMZ{B!0F+?-`mf3~!CJ-OU)z5{$qiO61l7l}LLqlBo^) zs7*%^*dbWi zT2@}#A?c-9zmB>sz#gz{6T^Oj4%-;4wxi%dee8st9k3I+?__zl1AMMvkzp$RoFMN2 zLoY`F7A=)6dkNlPo+EO5dkmrElf1`2oiL>8abO*3_8GCOD>C1$A7~(i6KYs@j+LiQ zNPll3gI^cG{_84Vf@ZfEjJgusV~7Rd2g%N^=#!@}S@Us*gLyf_PJ+W98S+1&gUwvf zC!4>svh4?yX^qj?6)s4{R}#7II7rG|(2B^K3{kZ@*TyoAD78kLl?ERc4&C7}&y^vQU}JX%$pi4tn_(mY#&pQlS@i0Rn~6lU;*kg1 z?jOK%??A{7o@j1tkT~ImyyE+G#tRKaYPtau&gL5A&g)@+muL=pV&Ji~Q@ zmX{cu0s#Gr7_tfGU1g{d2-tOlVKl+rTMU;0YFcRu^nI5y+JM$VC}8idF04ZV-;tv< zsTMw?HWk?~whZ3?|B>@gq8G`!)VlecTLKhHhGiBIrhQ)Z> z_QUpif$?Z$UeFKbRv2qW@TMPfDr(6P*dG>+wha3TY%vOq+!_r448tHVf_Q>7jNc-7 zLT~}|BoSP6KxJn;V$U5Oj6L@|W=tY^M=*RWFvf~Ne;^non zh|)W~SnfUuDeCz$Y#f9F?ilYxrL_hFA~3LtV7vmQrw>L$(=mdHlpAC|jqyqZU4{UD z3}nb5Xf~9g=1@SdVGO;8BT6f6v|#p7PYJslT9gIOJ<+5h$H=PIYawl0Gm{Xo zxGl8^Lq0aQNwX0LV33se7)(b1a>^JI2p&9QcuHXQjG^&!R1>U28#^5N_`YO$XE=No zykTfK5^x0XH>r~RcPJqD?Xr<5Q1OA~`|!cgpL(NksPy|rnzhIqg>sJ@3hM}f)@by1 z1MJ)c69{~(P(KLc5YJQEuegRsClZN2^C!T{ z+wJVvaVDY<+r_YwAY(5>);>Fpv{?v%$+6{13J)TJd>)-V3lV-CCRr)9FJN=WV=#A& zL4jc>SV@XOxTU8V-V^-ukJy!feEY|uGlTGikKjlwEQyyHEaCvWiW%k++`Yz7dL8lQ zgXlsDw%zMA?5VX&*w#B9ee5n0;?c*GN?9{bK;aD!7-9+TJSI>|^`5iXb2db;SF~qZ zi>(BK?-=yv;FyZ7WQhBSLoQ|x8n)*%E4Rs9ipR)Qu-jaK&MyYtD)?@l3*YW)qIf>c zwdcVcU4vmf!8#3ws{}=L7#!vUerhxP(y>=vbN0;-G{IZ!qWMVsT~o5!h>?lN)UqYR zMFNZ{k}dvi?KS9XgO92@*kb@j3c6@&d$y%5fa4~NWTOz@2_AN02we!!#;`WB=sF<8 z#f4}uPZ|(K^ca$Q9B1L259tUIJy|Eu^GT%xdbq35W{=|F_hsI z!I@zU0ZD+*VGR2SEJrbzBm?@5Wr!nKgn@BX>0^S!_=K3iI|cAOS`@DUY)`=+<~xnR zMtt}ScU`TPVy7LH#mbOuG&5!?nz<;Kl{-t3|FLxpuFC))HZrUyXtIT&&T>Hi?F^9w zi+3?3?MBEu%Mr3*FDu9QL2+FH<@EtpvXC0Caz!h!p9U3>W-UgpM3CJl7%r?t8=jtK zuu27(pJix#4*NuADuVUDz{)o=CtYR;Ndp`$X2`z+--~JR{d$d+)&ge75{6`gF?Sg7 zQJ0OBTFNkB72xCphWu4X%;61#WjZY5D;Of*A%1c?;%~y>O=`p|GC%vo5U?6xjM188 z*+<~{lfh&SU?RTfS_?}Y!4`Fftu-7pF#$J1-o{5Z91(8f zK?aTpoq8&3eOTi%QP@kLmAjcJ9B;_rmIc^q!mzCoe79%8_puo(b+cjCw`7PS@NC9# zoglg;gHsM*eH(^sf=lfgE_Xmktz3lE!hn;t*x__+9BPRuQZPe?taP+>P~CsEa&V~r zb1oc@%h#eU>+!gpimpQ2rD8lTC-_NF(~V*HUx2Q7UQQMlPsF?Y7iyS@hvuZTTL*Kt z4+9=s8j8Gi*y9WF(45Sl$Segi3|bFx#Q5xuupD2HLuE*RhL8b>+jaxuCJkgIWe}95 zq#Pc?O8EwqejG}ml$wRHcyJ@cz8L36A1NbCa|SChGym;K z#RC?qp=>*pB2tWYvC?4|P9i=cbQew{Gx1b~ykZW*t7;d#wjX9?=Mg9eH{q4tTK-df0aIVHQ%%W8O1PfGJW*p;20Gb|#Q@QUFr!IpA{t#7fD58jI!-o0bx&|a7= zJ~Ei^1N8aAFoz)dJ44D36s*{Xf;WD#;=dn{pz*?YKN`@zrbyV2EDR5z7h*ISVrx69 zo@}l-fJ`^nWx4DC!j|eV+}DMV|3QRpP@k2}2VwSa$e?=&fXUe9;L!v-8ZqoNMM3!& z%ezAe{=l4Nm%~U(AH$oFlt**cG>@QMd@C`m02xLc!C~^CErE@wKLXz-;W)VUW4P!dJO9cH1VAW1+Q}*;Aq4UNiePvfsGh%>QqbIxsE;3 z3SV`Q;)nuL7;d5ovIx>!5GbXKty#R>#z{j&-b9(IcC1{w2{#+uHB%Xz62M^GH4_Z& z4BxC0_%5O zhkgvfcK{6n7zzMtT}8zm>>;E2v9{nY9F_$$ydfwa%%Hdj_#VRWGZe`d+(WXzhRaG? z7zFtk=v0av)xt%+2T1Ef5N?zODLYeHc~XinpYVk(nSJg9nrATVAefQOpkD@9x0Yc# zfj{PTqB6ZVqbB)RWB+YV)sMDROf~xeoquQtJLWw=sYjS&mP%% zKj5C3Hv0`SufD?I^az{%`E`bDf{wQstZrkU(t3=7jTpF-SVBHlempmxu&g-5g? zun|iEY8YYm44W>fBWuC%k{a4E6cF5SCQwR=-C11l0%A=shBpNLeHauk0UP}p4iG2; z8BAXRHuPb@mBCP~dWFqt5RBn6NaX1&WEDM_!RIx6OF|fS0Pw);!E2`RQ*_9`k_85pR-t#x+V0 zPd_UF4N4fYE6~?P9~o-A1B8EN7)>yzis3Rr0={wnfc!eYM}XdV8cdK*unSLv34Q@E z2dUKu#3oH$;;%c5(iGKQlhe4$Ln$}fA{H#Rg!)LNG z=pza&h-ElVuq}aM$87kv`vl+8xvZ4UgCf5a%l(9)T9{mfg1-HPQlU#2`g{f~PhmJj zkh+4w{0rb^I)PHs!qSn*TWIGZWce3VGV~NHA*Z{lt_RAmsO0<^mUn(d2OYe^(C{0e zq=aDxL4$h?_X$ovVDR`(Zf_Vi5k%oZ2vw`|0~gc(3AZ2U$NaCX6?{X*Wj~OLIR;6Q zSL0tuPCmx_{6s2|Y9gVQ!dgU0&YEJ=PdKL4V5QbC#IDp}7)vk~_jcr4M6eF`b_BLn z05#m!5v(Tg#%&!z6+t9!>jyc;Yta^>} z)Rt`(GXsKuF$9|Z7#d0aT^G<{5`$GV zqR5Y;Or|3o)*Wph4qbJ%-Hb ziBk>Hb}Wn~%Wume2fsv@ym&`@>jpgVZuyRFQw&gkcqPLf0!%VC1E!Gjt zt08iYP)%(kz%dPm@dV%M5GW-(9TpvoA&#!ckV%lE&mfrqZWuC*B+$aEY>KL5>Vkc< zHulZOCfGM!%~_uK7W-z;Mrcm7B`ax-P-&7szb!R29G0e9; z8D10Ud5Z^4kj?wrxQ49qcfrIp%W>;^!;j^C7VyysU@)-+bPZyNBbeBa;W0r@FoSm! z!1cil+W~4g-!?(RJd~_WYf442EDBY8k6;~^LLqQ(2Dmj&sI>xYY=#apk7BTxKz&T3 zg&Ia9N%=)j&?L4+HAksAQy8uj?4Hix)B^Be7DF~bO-~fJKq@YCSaY3=uu(11MG^B^ ziA;pDupTOU(h{3)%|eouQq>YRuWE&eeU{Spv=%=IbW#~YTjR87zL}x%78gx%sWsv% zx3SWu4a^_*Fr*OlJHSv$FfgAXxGi9R5kmn0^Ci7&i;Ta0XKg_{I4r@m+wGCS8-jc+ z{?lGDT&jh&d)lMl4!|NcaAGj+08qLxoRk!}q3VEUt#o7MDVdLYFcf%V0I+;*@bv3e z{iHX?mmPL?gtyILhK5#vq4?I8>I@Ah1cb*t1KF*!&!!BwI5E|E_>a3x?eU&6+V7Is=^XK%Oe=)&?Qv z&EBd#vXaL5Q5dcVs2W3f}%MXcg9X3har@H@hI&ILu~65bq9iaDU`y zFwV95?$>85J515Nu-B7Wc{2ryJTloS;g9mu;@Kg`73HVk29|28 z=?2hR#-P0%Mdi!S9f5W<8iw9A7Hlgd$H>(TQETAX)g86^WU-R&4s&uYL&{p1&mE&C zbVtMQtz)@#Jz6%VJ4!7+%gT~-a4aO{>IGKXc_5CmkYO3Yk}C{JSK<511HN~zvvT(a z6!`{yk|(NJcAMqno+xEq%Fw(AVAunOMFcKS8Qv0@zGN_ag;0aN5d43bTCXRz>0vKy z6RXb*=IAOZ`a6MAnpnl+a}pcjlV^YQqn|gT#o=pbf_M!#O>xK@(R$TkrFUH@<~~rq zYqRo02Z}tbdxZ~@?^TcGG9SdL*^t507jVs(VKaf783BIN`QcFPF5LWZDDH2`+ATli zBei94K^|E3Aj%&O7+fP4((DC?jYr61+LCeTzW%E>c&cn zD-?{*(i34GZq@h8wcXhPS1mkF3qWIfdx>QV1PKp7A13)Qr1+w|eCe9p%T4ttagRUS zItC({#{mp034;4Dd?iTguL>~$Ax8g&6ecTBP0>J-l~V1YY;F|p~%HjJ^xc6?XqRPvb(T6g#OYG zS6Hd5XQ*geIP!GPR#CScbbx$istm{OJ$9|o8>vvLr>$4nH;#n&sXP^FjRJk&qN1N$ zQT9+*TtOF%LihLBq0(=Vm(Ok$br}uv+oz%&qJV=kIS8#W==lLh@YW)?yOkI{26;|B zr=p8v;Cbtkimb+>MfZzTR95VcSK4Dy_{mk3^o<jkUzP@!0o15ZtKEFkn33t`ydzhBMTi4EQmcA&S5y zf}z{^?wE&QGR^|iqF8a70`s{^4A}%1r!ZWa3SX_M@U1n2mC;jS?h+%^rlB!~Q*n0L z5>KF{k2qv;)ih*Vfu928@sr>yegF^*pAP7f#NeEaZoE95(!ko+WNtSD=GYYs@hf4* zRRs@OW}ugMrLp{pd_JZ#44MfD&ty1GurxlFbN|(oqW*3oJb} z#QoXmxbIC_ah?M=N6cnGLDv$bwPDbh3&?2CkktVNzsBGSIA<>MyI>`TC8B`3HlFxD zBV~v^D^cuMq~k*i@>x9(aWH4Q3{?O;%C?@5w7oo7J2#(d^@T!(4*k$qX+DLZ>nGS^^k3lK_LOVp%jwf{0Hn(3{r6d=9df ze>0?}d*C;NCw|yp#Z&}jD@($m@NEr)XELB^Hp6CuthEffDS(UX87^(`z~}2J=!MUi zj)0=vBD39A2A8FP@Er_)5v1*A&|C&My^kRRfB}U$%aC@+HIWMx_REp>zMBjg1fOm* zxR1mxX|w_x*s_$B@D=3yfZ+l`pc045}9LiP~kEiM; zsaPOgQ#{fnx$!Fa^iwj-C9uZ^B+Cnej`;YFpjSE|dj)|~GRa`kXf;HWT!t8eUpol! zAbBS$ldqUxR--bVi!AG2^2DfuHP}K&@3NAA4~qP?=*)+n)o)%8;Q<{*(#=5Y>XtKT zy@mIz43xiwr)*@t{2of)82lnm|LCbJel$nV-M~XPvbkhpOX5C16FoQL2Wy&H2)D9| zA%XzY59DT{Q8P5@ueGqxMmzd9V_1_7kNB1{q~+lMO>NjPg5YXp-HX_B#D;Nq_qCoFFB%~o&*_sDm z=hX}@YhX6s1oOB|RwA;X#FCPc!%Ai@6#0_zVH4`S_!rBrn-QlH0|uzh^#o>kwnbpR z1qBw;6Ee;1Jyfp{df+J+*&?^VapF#fYXq5lMDbSa;Mse7)Do^+QE_QLD`f>e@KNPY z#JO-n6$c{-ind~Jvc(WWDl}>v+B*LqhD!uj&NJ9-2S^w_NN$3lZZU)Q6@*=whp;!V z^{BqbH^g8<^2S95@3wcKt%Gl}GPDFmF6}^WOK!80d=%g57Y4|HANw;L3Lf#U6mbN+t);b^G_A zw_a#4G};U3jAeJp5>GG_AG;nv3Qzaq^0EPonGpEwqiFgJI{@?wbRX(|(vG$1`{D4i zBSR@b%|z%OfP=XMYZi`P8e+!*G#v|E$uYGLqDUovT~GxR3CuC6Hi3l~d`l0)w1?82Ge1hSp7rV`b4Xn6qayyd}6jkDbNcs43>bQ2|=nAiT;`V9GAQZg0XZ4$Xf!T`PlC3R8bWwnT z=zkJFU@W7t_9RKECl$@)sUa+B!Nt(U;?_xpsVw9|P+zjxTUfsI))#F~;TK5$zclug z!bSahvTQRF1u5Rmcp}L!rw}_U^|y|7Z%*Tvj!}k6T5ww7t}e1v6rb&l`OZ$`4p#SX z6qMHf)@uv@zZG`s2iH}XHm~=t&$D`-BmXfQsv8Gy^wtx;WoUlMChzLaH^2n!XoHbJ zb+yHaGm6gY$4;rFywixtb6}o9#N;z7z3x8>2lWkwDoQExZZ3SzB2S|$e}wK=tn%n~ z#oL@cKK-LG!IPnSXYteW#f^UhoK-lf@3^C)-skWVXVYE0u0_pl)SVyx*4@+tUdYsu z`{l|xWVQXZESU@K^XQT_Z&b9X+}n_QWAS--rM_3`XU;3Ss;5_~Xu(Hs1NQR10I&UD zRQmd_=#jX9e`j9ZN=Cb1D&w;Y3MXlRnsB?Sz!1c8Z(ZRh`Cx@0S_yZ|MeN(kTL0N} z#HNclB4+BcQgKn?C5>&!5MbbAAl|%GP2x295}tOKoBmg_hN!D=t}PCtjiTrhqF!oT z%{KTl7709V;e*F`v>r{%%W!zpIZa66sc%GNE&ig1e7QmiJsT6-^$C)9lZX>R{V609QsQ6H`p=nrjI-u zCuSVE{YOp%Zuto74!*|1=oZdoY9Cef>LUXGo+10(r#}j5e3ISF#oy!poye}_7W$!~ zr7s0D7Y28*joRIY6xv>vTJf5V2_$v1S9x`C@YNC-S8@FG53DI}-BuW@x9=+3Fpt|}UF2d9Rf?lKvP{dW}d9KI#vdYh`h_3{>sy~!JgU5lT{qI7DY{4}Yj|mexke|6h9u-F>3`ztokw6Lf3ucd8DI ze}b4 z?1B6Kaehri2rmrx?i}8dW`hL znhCThQtKC}tlcP;9{B=Sn_r_<^ks}+JzfUl6L}Slm32>E(_qv~NP8n>sjb-gQsJt; zBJy7v?^j2pNBPy|26cZ0S8a^4LH4c1!dE!t9#2$J&Q!k|;xkEqM^~4`2wz?xX5niT z-Z162O<%;l!1dH~x?lCNK>f%BeR9W;ILJ z-FPJj>vBkXu^3Mf>*vNz%Or5`cH~bX|_FUQ4aowA|vtN`Muh9@vnZR9F0rqXGIe+sEfaD zHLvEMaf{?GTt6ewp>7=L_-C9-oZJ{1eNmWE_3~_}FYq3Y5{vqx=pb2oFj&O+*ATAX zaLk*Pn7N5%(3B(?dP|b$BVcEq;F_hOYwTnE!^6{q3ZxfInp{-xla!k7kF& zuh4HeeOLzl>EIz>!znvN(iE46_+!R#nlIRQ#2@u74EwKK9U-0RjfYL&5iWdGHM!q+ z+@OR-R8zK)@^sQ~CG7`D8sc}Iy#p+G|S|YXzwT#^QTTR;OuOULWp_lHEX$@8|MQOPJOxnLE zX-(}BWFjRT{MYO#dE-qSx!w$Npx>2hK|`dASQ$ty$Xq0;1$C0bt}v9T1=&l_@bjCp zvXg?`rNQ`OkHGuBzX?yFcS1t&#gAD2CIxv*rq3B_zwp;*pH^@F*mmKs+2NRakfWsW zj=``-kc%|(1H-)k^Y)Smf^ liveDocs = (LinkedHashMap) data.get("Usages"); + StringBuilder fragmentsContent = new StringBuilder( header + "#include \"pch.h\"\n" + "#include \"FragmentEntry.h\"\n\n" + "#include \"tunerstudio.h\"\n" + - "/*\n" + - "static FragmentEntry fragments[] = {\n"); + "static FragmentEntry fragments[" + liveDocs.size() + "];\n\n" + + "void initFragments() {\n"); + int index = 0; - LinkedHashMap liveDocs = (LinkedHashMap) data.get("Usages"); for (Map.Entry entry : liveDocs.entrySet()) { String name = (String) entry.getKey(); System.out.println(" " + name); @@ -65,11 +67,14 @@ public class UsagesReader { enumContent.append(enumName + ",\n"); fragmentsContent - .append("\tFragmentEntry((const uint8_t *)getStructAddr(") + .append("\tfragments[") + .append(index++) + .append("].init(") + .append("(const uint8_t *)getStructAddr(") .append(enumName) .append("), sizeof(") .append(type) - .append(")),\n"); + .append("));\n"); } enumContent.append("} live_data_e;\n"); @@ -79,8 +84,6 @@ public class UsagesReader { fragmentsContent.append("};\n"); - fragmentsContent.append("*/\n"); - try (FileWriter fw = new FileWriter("console/binary/generated/live_data_fragments.cpp")) { fw.write(fragmentsContent.toString()); }