From fecadc71f7541302171453b9c35f4199573debeb Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Tue, 31 Jan 2023 20:09:57 +0300 Subject: [PATCH] add "incremental flooding" to CAN-USB based on STM32F0x2 --- F0:F030,F042,F072/usbcan_ringbuffer/can.c | 13 ++++++++++--- F0:F030,F042,F072/usbcan_ringbuffer/can.h | 2 +- F0:F030,F042,F072/usbcan_ringbuffer/proto.c | 15 ++++++++++----- .../usbcan_ringbuffer/usbcan.bin | Bin 11168 -> 11468 bytes .../usbcan_ringbuffer/version.inc | 4 ++-- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/F0:F030,F042,F072/usbcan_ringbuffer/can.c b/F0:F030,F042,F072/usbcan_ringbuffer/can.c index 7076f51..a3c7156 100644 --- a/F0:F030,F042,F072/usbcan_ringbuffer/can.c +++ b/F0:F030,F042,F072/usbcan_ringbuffer/can.c @@ -26,7 +26,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)){ // send message every floodT ms lastFloodTime = Tms; can_send(flood_msg->data, flood_msg->length, flood_msg->ID); + }else if(incrflood && (Tms - lastFloodTime) >= floodT){ // incremental flood message + 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{ #ifdef EBUG diff --git a/F0:F030,F042,F072/usbcan_ringbuffer/can.h b/F0:F030,F042,F072/usbcan_ringbuffer/can.h index 50492be..8b3cde8 100644 --- a/F0:F030,F042,F072/usbcan_ringbuffer/can.h +++ b/F0:F030,F042,F072/usbcan_ringbuffer/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/F0:F030,F042,F072/usbcan_ringbuffer/proto.c b/F0:F030,F042,F072/usbcan_ringbuffer/proto.c index 38b295f..b356ac9 100644 --- a/F0:F030,F042,F072/usbcan_ringbuffer/proto.c +++ b/F0:F030,F042,F072/usbcan_ringbuffer/proto.c @@ -24,7 +24,7 @@ extern volatile uint8_t canerror; -uint8_t ShowMsgs = 0; +uint8_t ShowMsgs = 1; uint16_t Ignore_IDs[IGN_SIZE]; uint8_t IgnSz = 0; @@ -325,11 +325,11 @@ TRUE_INLINE void setfloodt(char *s){ uint32_t N; s = omit_spaces(s); 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; } /** @@ -434,6 +434,7 @@ const char *helpmsg = "'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" @@ -442,7 +443,7 @@ const char *helpmsg = "'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" ; @@ -482,7 +483,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': @@ -511,6 +512,10 @@ void cmd_parser(char *txt){ USB_sendall(); Jump2Boot(); 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/F0:F030,F042,F072/usbcan_ringbuffer/usbcan.bin b/F0:F030,F042,F072/usbcan_ringbuffer/usbcan.bin index fb8059e3d96946e4000eba6067807e18adfb209c..58a8119a788c9329fdbd25258c2046a39d81fb24 100755 GIT binary patch delta 4212 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