X-Git-Url: https://rtime.felk.cvut.cz/gitweb/socketcan-simulink.git/blobdiff_plain/e6067dc29604e7f3590b37449ec0b5ccdabdec9d..07cd3baf5c2ecb3b824d48d96f60737c00186415:/blocks/tlc_c/sfunction_canreceive.tlc 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)