CANMessage is the primitive CAN message object. It supports creation, parsing, formatting of messages. Can be easily integrated with CANPort and CANQueue libraries.

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;