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

Files at this revision

API Documentation at this revision

Comitter:
WiredHome
Date:
Fri Sep 20 21:56:43 2019 +0000
Parent:
2:4307b498b508
Child:
4:4ba6856f7b4f
Commit message:
Clean up CANMessage implementation.

Changed in this revision

CANMessage.cpp Show annotated file Show diff for this revision Revisions of this file
CANMessage.h Show annotated file Show diff for this revision Revisions of this file
--- 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;
--- a/CANMessage.h	Thu Sep 19 21:46:09 2019 +0000
+++ b/CANMessage.h	Fri Sep 20 21:56:43 2019 +0000
@@ -47,6 +47,14 @@
 /// This object is derived from CANMessage, however it adds
 /// a timestamp and other useful methods.
 ///
+/// the CANMessage format element by default is:
+///     - CANStandard = 0,
+///     - CANExtended = 1,
+///     - CANAny = 2
+/// But for certain purposes it will be convenient to use the CANmsg object,
+/// which inherits CANMessage, and overload this item with additional values.
+///     - Error = 128
+///
 class CANmsg : public CANMessage
 {
 public: