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)