From: Pavel Pisa Date: Wed, 8 Oct 2014 19:13:42 +0000 (+0200) Subject: Change receive block behavior - use last received value of the signal. X-Git-Url: https://rtime.felk.cvut.cz/gitweb/socketcan-simulink.git/commitdiff_plain/07cd3baf5c2ecb3b824d48d96f60737c00186415 Change receive block behavior - use last received value of the signal. This can be problem for multiplexed messages but block is executed only at given time and we cannot left queue grow indefinitely. Signed-off-by: Pavel Pisa --- diff --git a/blocks/tlc_c/sfunction_canreceive.tlc b/blocks/tlc_c/sfunction_canreceive.tlc index 29d25dc..496d99b 100644 --- a/blocks/tlc_c/sfunction_canreceive.tlc +++ b/blocks/tlc_c/sfunction_canreceive.tlc @@ -118,14 +118,24 @@ struct can_frame sc_frame; int ret; int dlc; - - ret = recv(can_rx_handles[%], &sc_frame, sizeof(sc_frame), 0); - if (ret == -1) { - if (errno!=EAGAIN) { - printf("Receiving CAN message failed (%s).\n", "%"); + int recv_len = -1; + + /* TODO decide what is desired behavior if there are more pendind messages */ + do { + ret = recv(can_rx_handles[%], &sc_frame, sizeof(sc_frame), 0); + if (ret == -1) { + if (errno == EAGAIN) + break; + printf("Receiving CAN message failed (%s).\n", "%"); + break; + } else { + recv_len = ret; } - } else if (ret < sizeof(sc_frame)) { - printf("Receiving CAN message (%s) returns truncated length %d.\n", "%", ret); + } while (ret > 0); + + if (recv_len < sizeof(sc_frame)) { + if (recv_len >= 0) + printf("Receiving CAN message (%s) returns truncated length %d.\n", "%", ret); } else { dlc = sc_frame.can_dlc; if (dlc > 8)