Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
CANMessage.h
00001 /// @file CANMessage.h 00002 /// CANMessage is the primitive CAN message object. It supports creation, 00003 /// parsing, formatting, of messages. 00004 /// 00005 /// @version 1.0 00006 /// 00007 /// @note Copyright &copr; 2011 by Smartware Computing, all rights reserved. 00008 /// Individuals may use this application for evaluation or non-commercial 00009 /// purposes. Within this restriction, changes may be made to this application 00010 /// as long as this copyright notice is retained. The user shall make 00011 /// clear that their work is a derived work, and not the original. 00012 /// Users of this application and sources accept this application "as is" and 00013 /// shall hold harmless Smartware Computing, for any undesired results while 00014 /// using this application - whether real or imagined. 00015 /// 00016 /// @author David Smart, Smartware Computing 00017 /// 00018 00019 #ifndef CANMESSAGE_H 00020 #define CANMESSAGE_H 00021 #include "mbed.h" 00022 00023 /// CAN direction, in the set {rcv, xmt} 00024 typedef enum { 00025 rcv, 00026 xmt 00027 } CANDIR_T; 00028 00029 00030 /// CAN Channel in the set {CH1, CH2} of CANCHANNELS 00031 typedef enum { 00032 CH1, 00033 CH2, 00034 CANCHANNELS 00035 } CANCHANNEL_T; 00036 00037 00038 // CAN mode - active(acknowledge) or passive(monitor) 00039 //typedef enum { 00040 // ACTIVE, 00041 // PASSIVE 00042 //} CANMODE_T; 00043 00044 00045 /// A super CAN message object, which has additional capabilities 00046 /// 00047 /// This object is derived from CANMessage, however it adds 00048 /// a timestamp and other useful methods. 00049 /// 00050 class CANmsg : public CANMessage 00051 { 00052 public: 00053 /// Constructor for a CANmsg object, which is a superclass of CANMessage 00054 /// 00055 /// The CANmsg object included additional information, including 00056 /// direction, channel number, timestamp, and the ability to format 00057 /// into ASCII 00058 /// 00059 CANmsg(); 00060 00061 /// Constructor for a CANmsg object, which is a superclass of CANMessage 00062 /// 00063 /// The CANmsg object included additional information, including 00064 /// direction, channel number, timestamp, and the ability to format 00065 /// into ASCII. 00066 /// @param ch is the channel number (CH1, CH2) 00067 /// @param dir is the direction (xmt, rcv) 00068 /// @param msg is a CANMessage object from which to construct this object 00069 /// 00070 CANmsg(CANCHANNEL_T ch, CANDIR_T dir, CANMessage msg); 00071 00072 /// Constructor for a CANmsg object, which is a superclass of CANMessage 00073 /// 00074 /// The CANmsg object included additional information, including 00075 /// direction, channel number, timestamp, and the ability to format 00076 /// into ASCII. 00077 /// This constructor creates a message from an ascii buffer with 00078 /// the standard message format in it. 00079 /// 00080 /// @todo Improve the parser, it may not handle malformed input well 00081 /// 00082 /// @verbatim 00083 /// t xtd 02 1CF00400 08 11 22 33 44 55 66 77 88 0 0 1234.567890 00084 /// If the first letter is not 't' or 'r', transmit is assumed 00085 /// xtd 02 1CF00400 08 11 22 33 44 55 66 77 88 0 0 1234.567890 00086 /// @endverbatim 00087 /// 00088 /// @param p is a pointer to a text string of the message contents, 00089 /// in the same format as what would be output with the 00090 /// FormatCANMessage method. 00091 /// 00092 CANmsg(char *p); 00093 00094 /// Destructor for the CANmsg object 00095 ~CANmsg(); 00096 00097 /// Parse a text string into the CANmsg object, which is a superclass of CANMessage 00098 /// 00099 /// The CANmsg object included additional information, including 00100 /// direction, channel number, timestamp, and the ability to format 00101 /// into ASCII. 00102 /// This constructor creates a message from an ascii buffer with 00103 /// the standard message format in it. 00104 /// 00105 /// @todo Improve the parser, it may not handle malformed input well 00106 /// 00107 /// @verbatim 00108 /// t xtd 02 1CF00400 08 11 22 33 44 55 66 77 88 0 0 1234.567890 00109 /// If the first letter is not 't' or 'r', transmit is assumed 00110 /// xtd 02 1CF00400 08 11 22 33 44 55 66 77 88 0 0 1234.567890 00111 /// @endverbatim 00112 /// 00113 /// @param p is a pointer to a text string of the message contents, 00114 /// in the same format as what would be output with the 00115 /// FormatCANMessage method. 00116 /// @returns true 00117 /// 00118 bool ParseCANMessage(char *p); 00119 00120 /// Formats this CAN message into a text buffer - which should be at least 70 00121 /// 00122 /// @todo buflen is currently ignored, which is unsafe 00123 /// 00124 /// @verbatim 00125 /// t xtd 02 1CF00400 08 11 22 33 44 55 66 77 88 0 0 1234.567890 00126 /// @endverbatim 00127 /// 00128 /// @param buffer is a pointer to the buffer to fill 00129 /// @param buflen is the size of the buffer (minimum 70 recommended) 00130 /// 00131 /// @returns nothing 00132 void FormatCANMessage(char *buffer, int buflen); 00133 00134 /// Overrides the timestamp in this message with the current time 00135 void SetTimestamp(); 00136 00137 /// Gets the timestamp of this message 00138 /// @returns time in microseconds 00139 uint64_t GetTimestamp() { return timestamp; }; 00140 00141 /// direction of this CAN message - rcv or xmt 00142 CANDIR_T dir; 00143 00144 /// channel number of this CAN message 00145 CANCHANNEL_T ch; 00146 00147 private: 00148 /// internally held timestamp 00149 uint64_t timestamp; 00150 00151 // internally held mode 00152 //CANMODE_T mode; 00153 }; 00154 00155 #endif // CANMESSAGE_H
Generated on Wed Jul 13 2022 04:27:02 by
1.7.2