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