CANMessage is the primitive CAN message object. It supports creation, parsing, formatting of messages. Can be easily integrated with CANPort and CANQueue libraries.
Diff: CANMessage.cpp
- Revision:
- 3:c2a26d9d689b
- Parent:
- 2:4307b498b508
- Child:
- 4:4ba6856f7b4f
--- a/CANMessage.cpp Thu Sep 19 21:46:09 2019 +0000 +++ b/CANMessage.cpp Fri Sep 20 21:56:43 2019 +0000 @@ -134,17 +134,29 @@ // r xtd 01 1CF00400 08 11 22 33 44 55 66 77 88 0 0 12.123456 void CANmsg::FormatCANMessage(char *buffer, int buflen) { if (buflen >= 68) { // 63+\r+\n+\0+2spare - sprintf(buffer, "%c %s %02d %08X %02X ", - (dir == xmt ) ? 't' : 'r', - (format == CANExtended) ? "xtd" : "nrm", - ch + 1, - id, - len); - for (int d=0; d<8; d++) { - if (d < len) - sprintf(buffer + strlen(buffer), "%02X ", data[d]); - else - strcat(buffer, " "); + if (format >= 128) { + sprintf(buffer, "%c %s %02d %8s %02X ", + (dir == xmt ) ? 't' : 'r', + "ERR", + ch + 1, + (format == 128) ? "active" : "passive", + 8); + for (int d=0; d<8; d++) { + sprintf(buffer + strlen(buffer), "%02X ", 0); + } + } else { + sprintf(buffer, "%c %s %02d %08X %02X ", + (dir == xmt ) ? 't' : 'r', + (format == CANExtended) ? "xtd" : "nrm", + ch + 1, + id, + len); + for (int d=0; d<8; d++) { + if (d < len) + sprintf(buffer + strlen(buffer), "%02X ", data[d]); + else + strcat(buffer, " "); + } } uint32_t uSec = timestamp % 1000000; // integer math is faster than float uint32_t Sec = timestamp / 1000000;