]> rtime.felk.cvut.cz Git - socketcan-simulink.git/commitdiff
Change receive block behavior - use last received value of the signal.
authorPavel Pisa <pisa@cmp.felk.cvut.cz>
Wed, 8 Oct 2014 19:13:42 +0000 (21:13 +0200)
committerPavel Pisa <pisa@cmp.felk.cvut.cz>
Wed, 8 Oct 2014 19:13:42 +0000 (21:13 +0200)
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 <pisa@cmp.felk.cvut.cz>
blocks/tlc_c/sfunction_canreceive.tlc

index 29d25dc395966b2b5972a43eaaf530e29989b353..496d99bf5ef58ee70368fcf59958818ee272a9cf 100644 (file)
          struct can_frame sc_frame;
          int ret;
          int dlc;
-
-         ret = recv(can_rx_handles[%<RppRxInfo.HwObj>], &sc_frame, sizeof(sc_frame), 0);
-         if (ret == -1) {
-            if (errno!=EAGAIN) {
-              printf("Receiving CAN message failed (%s).\n", "%<RppRxInfo.Name>");
+         int recv_len = -1;
+
+         /* TODO decide what is desired behavior if there are more pendind messages */
+         do {
+           ret = recv(can_rx_handles[%<RppRxInfo.HwObj>], &sc_frame, sizeof(sc_frame), 0);
+           if (ret == -1) {
+             if (errno == EAGAIN)
+               break;
+             printf("Receiving CAN message failed (%s).\n", "%<RppRxInfo.Name>");
+             break;
+           } else {
+             recv_len = ret;
            }
-         } else if (ret < sizeof(sc_frame)) {
-            printf("Receiving CAN message (%s) returns truncated length %d.\n", "%<RppRxInfo.Name>", ret);
+         } while (ret > 0);
+
+         if (recv_len < sizeof(sc_frame)) {
+           if (recv_len >= 0)
+             printf("Receiving CAN message (%s) returns truncated length %d.\n", "%<RppRxInfo.Name>", ret);
          } else {
            dlc = sc_frame.can_dlc;
            if (dlc > 8)