X-Git-Url: http://rtime.felk.cvut.cz/gitweb/can-benchmark.git/blobdiff_plain/41c72639e9e7f2ed299d5101ace714a72e20543c..4d282cd02b4632590d95a6d3213fa0e04383b2dc:/latester/latester.c diff --git a/latester/latester.c b/latester/latester.c index c94837c..cb578a1 100644 --- a/latester/latester.c +++ b/latester/latester.c @@ -87,14 +87,32 @@ struct msg_info msg_infos[MAX_INFOS]; struct histogram histogram; -int can_frame_sprintf(char *buf, struct can_frame *frame) -{ - char datastr[17]; - int i; - for (i=0; i<8; i++) - sprintf(&datastr[i*2], "%02x", frame->data[i]); - sprintf(buf, "id=0x%x, len=%d, data=%s", - frame->can_id, frame->can_dlc, datastr); +void sprint_canframe(char *buf , struct can_frame *cf, int sep) { + /* documentation see lib.h */ + + int i,offset; + int dlc = (cf->can_dlc > 8)? 8 : cf->can_dlc; + + if (cf->can_id & CAN_ERR_FLAG) { + sprintf(buf, "%08X#", cf->can_id & (CAN_ERR_MASK|CAN_ERR_FLAG)); + offset = 9; + } else if (cf->can_id & CAN_EFF_FLAG) { + sprintf(buf, "%08X#", cf->can_id & CAN_EFF_MASK); + offset = 9; + } else { + sprintf(buf, "%03X#", cf->can_id & CAN_SFF_MASK); + offset = 4; + } + + if (cf->can_id & CAN_RTR_FLAG) /* there are no ERR frames with RTR */ + sprintf(buf+offset, "R"); + else + for (i = 0; i < dlc; i++) { + sprintf(buf+offset, "%02X", cf->data[i]); + offset += 2; + if (sep && (i+1 < dlc)) + sprintf(buf+offset++, "."); + } } static inline struct msg_info *frame2info(struct can_frame *frame) @@ -124,19 +142,19 @@ void msg_info_print(FILE *f, struct msg_info *mi) static long num = 0; char sent[64], received[64]; - can_frame_sprintf(sent, &mi->sent); - can_frame_sprintf(received, &mi->received); + sprint_canframe(sent, &mi->sent, true); + sprint_canframe(received, &mi->received, true); #define S(ts) tstamp_str(local, &ts) #define DIFF(a, b) (timespec_subtract(&diff, &b, &a), S(diff)) if (num_interfaces == 2) - fprintf(f, "%ld: %s [%s] -> %s (%s) [%s] = %s (%s)\n", + fprintf(f, "%ld: %s %s -> %s (%s) %s = %s (%s)\n", num, S(mi->ts_sent), sent, S(mi->ts_rx_final_kern), S(mi->ts_rx_final), received, DIFF(mi->ts_sent, mi->ts_rx_final_kern), DIFF(mi->ts_sent, mi->ts_rx_final)); else - fprintf(f, "%ld: %s [%s] -> %s (%s) -> %s (%s) [%s] = %s (%s), %s (%s)\n", + fprintf(f, "%ld: %s %s -> %s (%s) -> %s (%s) %s = %s (%s), %s (%s)\n", num, S(mi->ts_sent), sent, S(mi->ts_rx_onwire_kern), S(mi->ts_rx_onwire), S(mi->ts_rx_final_kern), S(mi->ts_rx_final), received, @@ -264,7 +282,7 @@ int send_frame(int socket) MEMSET_ZERO(frame); i = curr_msg+1; - while (msg_infos[i].id != 0 && i != curr_msg) { + while (msg_infos[i].id != -1 && i != curr_msg) { i++; if (i >= MAX_INFOS) i = 0; @@ -292,7 +310,7 @@ int send_frame(int socket) void msg_info_free(struct msg_info *mi) { - mi->id = 0; + mi->id = -1; } static inline void get_next_timeout(struct timespec *timeout) @@ -579,7 +597,7 @@ int main(int argc, const char *argv[]) { pthread_t thread; sigset_t set; - int ret; + int ret, i; parse_options(argc, argv); @@ -588,6 +606,9 @@ int main(int argc, const char *argv[]) signal(SIGINT, term_handler); signal(SIGTERM, term_handler); + for (i=0; i