cansequence: receive snd show error frames

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
pull/254/head^2
Marc Kleine-Budde 2019-10-25 18:51:50 +02:00
parent d699135833
commit a1c20aeb45
1 changed files with 16 additions and 0 deletions

View File

@ -95,12 +95,19 @@ static void do_receive()
uint32_t sequence_delta = 0; uint32_t sequence_delta = 0;
uint32_t sequence = 0; uint32_t sequence = 0;
unsigned int overflow_old = 0; unsigned int overflow_old = 0;
can_err_mask_t err_mask = CAN_ERR_MASK;
if (setsockopt(s, SOL_SOCKET, SO_RXQ_OVFL, if (setsockopt(s, SOL_SOCKET, SO_RXQ_OVFL,
&dropmonitor_on, sizeof(dropmonitor_on)) < 0) { &dropmonitor_on, sizeof(dropmonitor_on)) < 0) {
perror("setsockopt() SO_RXQ_OVFL not supported by your Linux Kernel"); perror("setsockopt() SO_RXQ_OVFL not supported by your Linux Kernel");
} }
/* enable recv. of error messages */
if (setsockopt(s, SOL_CAN_RAW, CAN_RAW_ERR_FILTER, &err_mask, sizeof(err_mask))) {
perror("setsockopt()");
exit(EXIT_FAILURE);
}
/* enable recv. now */ /* enable recv. now */
if (setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, filter, sizeof(filter))) { if (setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, filter, sizeof(filter))) {
perror("setsockopt()"); perror("setsockopt()");
@ -120,6 +127,15 @@ static void do_receive()
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (frame.can_id & CAN_ERR_FLAG) {
fprintf(stderr,
"sequence CNT: %6u, ERRORFRAME %7x %02u %02u %02u %02u %02u %02u %02u %02u\n",
sequence, frame.can_id,
frame.data[0], frame.data[1], frame.data[2], frame.data[3],
frame.data[4], frame.data[5], frame.data[6], frame.data[7]);
continue;
}
sequence_rx = frame.data[0]; sequence_rx = frame.data[0];
if (sequence_init) { if (sequence_init) {