From 17eec9bf6fa79b33db29a2ab0ee3cc21372d2956 Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Mon, 30 Jan 2023 23:33:03 +0300 Subject: [PATCH] add "megaflooding" to CANusb F303 (and incremental flooding) --- F3:F303/CANusb/can.c | 13 ++++++++++--- F3:F303/CANusb/can.h | 2 +- F3:F303/CANusb/canusb.bin | Bin 10424 -> 10652 bytes F3:F303/CANusb/main.c | 2 +- F3:F303/CANusb/proto.c | 13 +++++++++---- F3:F303/CANusb/version.inc | 2 +- 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/F3:F303/CANusb/can.c b/F3:F303/CANusb/can.c index d11365a..142bfe5 100644 --- a/F3:F303/CANusb/can.c +++ b/F3:F303/CANusb/can.c @@ -30,7 +30,8 @@ static CAN_message messages[CAN_INMESSAGE_SIZE]; static uint8_t first_free_idx = 0; // index of first empty cell static int8_t first_nonfree_idx = -1; // index of first data cell static uint16_t oldspeed = 100; // speed of last init -uint32_t floodT = FLOOD_PERIOD_MS-1; // flood period in ms +uint32_t floodT = FLOOD_PERIOD_MS; // flood period in ms +static uint8_t incrflood = 0; // ==1 for incremental flooding static uint32_t last_err_code = 0; static CAN_status can_status = CAN_STOP; @@ -227,9 +228,13 @@ void can_proc(){ CAN_setup(0); } static uint32_t lastFloodTime = 0; - if(flood_msg && (Tms - lastFloodTime) > (floodT)){ // flood every ~5ms + static uint32_t incrmessagectr = 0; + if(flood_msg && (Tms - lastFloodTime) >= floodT){ // flood every ~5ms lastFloodTime = Tms; can_send(flood_msg->data, flood_msg->length, flood_msg->ID); + }else if(incrflood && (Tms - lastFloodTime) >= floodT){ + lastFloodTime = Tms; + if(CAN_OK == can_send((uint8_t*)&incrmessagectr, 4, flood_msg->ID)) ++incrmessagectr; } } @@ -287,7 +292,9 @@ CAN_status can_send(uint8_t *msg, uint8_t len, uint16_t target_id){ return CAN_OK; } -void set_flood(CAN_message *msg){ +void set_flood(CAN_message *msg, int incr){ + if(incr){ incrflood = 1; return; } + incrflood = 0; if(!msg) flood_msg = NULL; else{ memcpy(&loc_flood_msg, msg, sizeof(CAN_message)); diff --git a/F3:F303/CANusb/can.h b/F3:F303/CANusb/can.h index 1dfb6f0..87b762a 100644 --- a/F3:F303/CANusb/can.h +++ b/F3:F303/CANusb/can.h @@ -56,4 +56,4 @@ void printCANerr(); CAN_message *CAN_messagebuf_pop(); -void set_flood(CAN_message *msg); +void set_flood(CAN_message *msg, int incr); diff --git a/F3:F303/CANusb/canusb.bin b/F3:F303/CANusb/canusb.bin index 928e6e69a651c7d994c747d4e9ca51755fc9fbcc..5f598667ba6e48b1f5f535d2fd39d7e2fad1ab03 100755 GIT binary patch delta 3004 zcmZ`*4R90372efJwkm9}vH9~4IZ1XTg8>=h0>R)z*ouruBnGBHarjC3u_@ptFbM@x z*%o8MkPgJhIJN~zI-$iB*MOY~Ole924M}EPDyJz^Xwo>XWT%)A*$CgtSa@_q}&}@7}(*dl#1ZX62cdCG^Kt;xeH|% z#Fx`@xwFo*;;+-(x@K3?(|$3UHh0X1dhXbQcAc1T?4Y%QmJa^bl(B)k?^)rmERS>AMq(vl=DWc>1vl8&sW+Lxugwtc z?}zXDDqUcW{)%htYhzltdp#GhAEJ8|Y4||{YY}L^FrYu6$rr*|2iCiYh<9CQ=8TkA zB!LlAIjB^JVCEf)G>;MUnx&+EibF7Qu-h1Cu465>2DY+*GwG(+v6V&=zUN!+(ls?j zi#-jj+?XhGeTxn5Fd0K;taTi7yg%@^xMD(KUTt-ei|d}lG-GP)`vT3S(XKg@%)6xC@*$R$e!|MRFO^%nVpJsa!Bv*VB4r7JqzxHm^jgr zb9rb2qvI552^indv!#(PeY3vafH>QSavl2Sy}jhJ=$UAn^n{t{Td=YOOOxv$Gu&ay zT^@W^e0^ee_8;4Xdvkm@S(c~8o_^~lo1BtVZpf#7gd^b!v1_7n)|+i$J=?+R`Y4wa zm{vlc{IH+uM7yq!qs5UUZE1|U4f%szBu^Q9MKn&zOwaVCo<4=Je;y^)b%7;QNq>e< z^h}ybBcgXw;g~DLPnJ;izYTh(*G-7&6UOtOupGXD4fAB$9|B}L34dCPJaTnx*cRxg zT>IblV9Mjs1{Qq&2J0-)iVND`Wq}%o|#VuZqzDL2IKaqflyxou5bHn(}nQ2 zwZuYgij)K!7ygoa8kRA>GF;#FEk}UMq9ehnkH6NNd|G{oEV<($X+>z9&#v0k*Gq0J zunGg-^R>d@#W{_3GH|lCx?Pd>JrFRFHJaS0NSREL%+ZC=`RJRyqwj8*MZ!(BBa?rm zjJ$Vt`~|A;wjK9LRdu+gc7Ikv-&2Xf_Lj~D$mp;p_R?MkUwUQv(k>MTgSnzTSGuI!zHj_Wk8 ztx)~6^?y$!{YCN66e&Nda}aBBWXV}wPKwK4q4uNIkr3E+C=VT36V+I~5pUsHS`_Xo zK)p^ziOxg0?$06m6d)gHg?2-HIxrq8OOh;0ilPQL`w^cP#f4du=K7s}=OI>NlckWdsfU`IoOSF@ z0iO7nUai+*gK*zoYABA(ZJQjX z<0668NZ2_=P21au;*9bOr!2K7yIg-|>9f;r8^)zy-s{{4?hR!xu6|_)EZVq*gm2Z{ zA=>`x67BtuOLoKhs`42VG}Y}NB+xEd`nOm48OYi=Ns_L_$(zbg!R-N80>`Uy?k~y~ za6981NgClkL^@=tSvlED%~&JbXzFf-2oiPbk=N}CH6SHqdT}J9_0e<3s~$W`B&AjO z-oaBGNodvjmpXrZNNbd(VTD7n$IjefVeCyfi007zYZw;~vNH{=4K-aHNo^fzy0-s0 zW4w{%*7*oMRnZ5jBN$Y@73skx^~~B4RWhWuOKPkYI0#N&vcWNiGFZj3%Vvsw?1tU~ob%%H4sa28A85n`^U%xb=;^RJ zS&Bwb`~EH1-au%gTpBt7c|=|uIu3bQHiZ0;2jzrNGo(+}gqk3|vK(xL+$RqOUx$22 z#zz3Q+RB(LJuj=vdQ$!-SnssR(l$9O^cq~Y$df}yA)k}K3Lb%6C#yT(a@?>+epSqy zYMeV1q`4GLAPpz?KcV+IkPSo9X|;Hr!@knpfh50^X%}F(95(b*!|(gG<9v?0T`!8S zO*PUTV#n0tr`9>`w-=AU$^_HerJph~+lOzZ`oc|wW)IF zR=#oiXs$SqXI5yG`&PYu3EJ<}fHHW8}mz^k_Z E0!YDU=Kufz delta 2685 zcmY*b4OElY8NQbU$YN6dK?Ec}L?X}{6wjD+Ga|-7a8T{p*ug42-OggWwsxb_Ib9$@ zrbo9iE=3UC(6vXjN>?bWr@BM^IaYVv7TVQG>yFry1gchpM!pM@@7wbQCtY%$y!U0980Ae7jOh8`hDs&6R>wz+$xc~1@oQwL#W;0RQ3DFhxcP8ARih=S0wj;@; zIAK4*-b$*9?r`i|)5#{2zB#9+Rnb<`7tLbYcCwP>6|P@6sA2!}#He6f9iKb9Vy(fV zrq>-An+{@>*YvWZV&a%#UY+7W^}4Q2>%qk|DLZ=Jy~3*tukf*iVQ$sc&SRyTVW$I} zzRP)mkLiYr4&9Q0OFK30D}Kd5@)?KU=6UMCUj2XZ0jF;HhRMDOvO|`$5W5 zZDYgJ4#mh49yO=2bQ|kR$)E-7{giB)&HkN|m40|q5{^w7?2>R~O4ZfRU!;;y2d=Bejag@#o7Rjq1x9+)!ORQtD$vYJ#&+Ixs~4{}5hWRs0NSrw#; z!HEs*kEvN%XM3&p1MXp-S>02b{Mj&{8?RZfE}*xFf&>?_;Z!~S6MLAN9mjf;IIU6_ zObn5Q(!^f2FfAkb3wOfNBiP!GNn+mMT{)kO-*B^J=xBEuU+An z3ze*-?=Rfj7|ostXvbF(oSSQoDs7^0Kx!%_L9It~AftfXYjaD&x42@fyyBPcLU~<} zCEpsP9+FEfl1s>kQ4zeZSOZhDryRfBy#cOXnv~th?vzXpV&|k>ZL-TNe(h1&r6~MZ zn%N38g{M@WOM>-oZAYQmde7;$PMloQQA+M@bT{-#0()42RjrfS4!IOi9+Rt~yNV~h zqce+*O4`W&za3e0#<6^oT(`DM-o4RHOD=J%<>csW4AhHAu-HBG{6~+T&x)Mi=+Sod zKOnC*1T)>+Gh=S8j`j5w*pF~;VKeuwkc4Tj?GS~#E=dvuo{OD?xDLS^m2y$KcX)GT zQ<6{>3AnO_m`U(jqjGfVXYiFb54<$f~TV!SWzUWks`IT>X(xk78-p-%^gzB@_==b|J}qCBUK zMAZTu2MT~rxlZ!}&XOAJ0q+2d~xO~m-CC`QR+Zq_%xX&US(adm#Ts~$De{)n47Dk#w$>bx}1!nrxhl^D1OOpHjfa~X#JFvh9Qk_#2 zUKd4SK-vbqPwIyLGV~MD7U;*M5$HdH{+3h^{jj9lBnr<#KlrG#WCxbOE3mbJsivaP z4C`+twN4byd~MGBKqoJ=$aN?`p>(y9{5gZvNQ`y%=k2>;5`}t66QIW3{5$eA>{Fho z2oRj<{jZ&7%1>>D{&wE`fA_R2ccjD%`|3PTMwLEl6=JsIp(W$Bs`Dwz@Vm#O>T1(UY#E47Kf=dvN zry~wtIq|;>(CH^;X~O+BHBdh~j~?{r<2fp|`ST#dBL2N_8{G|yf*{I~$&>c_O)i*% zqQ{>Dd0TAq8zINU2EPH)CvNxaAxFfmejVgBvEH8zc~#u(CxbO6^d0(;D2bi?kXWa4 zh)M}g1!#a|U@q+E!Fz#gz!=a3-U)05+6=2PkQa%MvdWF!0`fylI**1v02vQi53C1n zV_qd>2>dQ=;|)>1i+15WE#gkLZ@zwYqF=73Uy4uow?l3b)qY~4Na}*HcDzXCu_01w z&Cwb>wPo6~s@|*VvU6pLD5Qqf<5c~@xH8UTyEF6>yE|V`UtkH@%U6HTUV3vy;yG?L zR9Ae=$zmh^2hT!^LY7#Kb>iWDuDAx?QpDMU>G7>9AL7Xd!%aoh8ORlEUv{Bu8D`xM zyL{C2vr##tf$*<8aU>}s9du&e?oF|V^=uCM+UtJxt!nkKR = IWDG_REFRESH; uint8_t len = can_mesg->length; printu(Tms); diff --git a/F3:F303/CANusb/proto.c b/F3:F303/CANusb/proto.c index a4c90ac..da95efe 100644 --- a/F3:F303/CANusb/proto.c +++ b/F3:F303/CANusb/proto.c @@ -199,11 +199,11 @@ TRUE_INLINE void setfloodt(const char *s){ uint32_t N; s = omit_spaces(s); const char *n = getnum(s, &N); - if(s == n || N == 0){ + if(s == n){ USB_sendstr("t="); printu(floodT); USB_putbyte('\n'); return; } - floodT = N - 1; + floodT = N; } /** @@ -307,6 +307,7 @@ const char *helpstring = "'e' - get CAN errcodes\n" "'f' - add/delete filter, format: bank# FIFO# mode(M/I) num0 [num1 [num2 [num3]]]\n" "'F' - send/clear flood message: F ID byte0 ... byteN\n" + "'i' - send incremental flood message (ID == ID for `F`)\n" "'I' - reinit CAN\n" "'l' - list all active filters\n" "'o' - turn LEDs OFF\n" @@ -315,7 +316,7 @@ const char *helpstring = "'P' - pause/resume in packets displaying\n" "'R' - software reset\n" "'s/S' - send data over CAN: s ID byte0 .. byteN\n" - "'t' - change flood period (>=1ms)\n" + "'t' - change flood period (>=0ms)\n" "'T' - get time from start (ms)\n" ; @@ -356,7 +357,7 @@ void cmd_parser(char *txt){ goto eof; break; case 'F': - set_flood(parseCANmsg(txt)); + set_flood(parseCANmsg(txt), 0); goto eof; break; case 's': @@ -380,6 +381,10 @@ void cmd_parser(char *txt){ case 'e': printCANerr(); break; + case 'i': + set_flood(NULL, 1); + USB_sendstr("Incremental flooding is ON ('F' to off)\n"); + break; case 'I': CAN_reinit(0); break; diff --git a/F3:F303/CANusb/version.inc b/F3:F303/CANusb/version.inc index 27666b7..c290d35 100644 --- a/F3:F303/CANusb/version.inc +++ b/F3:F303/CANusb/version.inc @@ -1,2 +1,2 @@ -#define BUILD_NUMBER "15" +#define BUILD_NUMBER "18" #define BUILD_DATE "2023-01-30"