]> rtime.felk.cvut.cz Git - socketcan-simulink.git/blobdiff - blocks/tlc_c/sfunction_canreceive.tlc
Remove some of debugging prints in can receive block TLC.
[socketcan-simulink.git] / blocks / tlc_c / sfunction_canreceive.tlc
index e8b27a829da85be7b930ef1d7a5c25eee2c9ab96..5dbf4d272f5fa89fe89e4106e27f9e9f532c2d8b 100644 (file)
          struct can_frame sc_frame;
          int ret;
          int dlc;
-
-         ret = recv(%<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)
                int i;
                for (i = 0; i < dlc; i++ ) {
                  %<message>.Data[i] = sc_frame.data[i];
-                 printf("%X ", sc_frame.data[i]);
+                 %%printf("%X ", sc_frame.data[i]);
                }
            %elseif %<data_type_par>==3
                // uint32
                if (dlc < 4)
                  msg &= 0xffffffff << (8 * dlc);
                %<message> = msg;
-               printf("32b: %X ", msg);
+               %%printf("32b: %X ", msg);
            %elseif %<data_type_par>==2
                // uint16
                unsigned int msg = (sc_frame.data[0]) |
                if (dlc < 2)
                  msg &= 0xffffffff << (8 * dlc);
                %<message> = msg;
-               printf("16b: %X ", msg);
+               %%printf("16b: %X ", msg);
            %else
                // uint8
                unsigned int msg = sc_frame.data[0];
                %<message> = msg;
-               printf("8b: %X ", msg);
+               %%printf("8b: %X ", msg);
            %endif
-           printf("\n");
+           %%printf("\n");
 
            %% Call a function to process the received message via function-call subsystem
            %foreach callIdx = NumSFcnSysOutputCalls