CANPort provides a higher level interface to a CAN communication channel, and provides timestamping, servicing additional hardware interfaces (optional activity LED, CAN transceiver slope control)
CANPort.h@1:f0b4e47d948d, 2019-08-28 (annotated)
- Committer:
- WiredHome
- Date:
- Wed Aug 28 22:02:49 2019 +0000
- Revision:
- 1:f0b4e47d948d
- Parent:
- 0:7b81b19d9b10
- Child:
- 2:1824d1421b6d
Minor updates based on mbed version.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
WiredHome | 0:7b81b19d9b10 | 1 | /// @file CANPort.h is where all the port level functionality is defined |
WiredHome | 0:7b81b19d9b10 | 2 | /// |
WiredHome | 0:7b81b19d9b10 | 3 | /// This module creates the physical interface, services the hardware, and provides |
WiredHome | 0:7b81b19d9b10 | 4 | /// additional functionality on top of that (e.g. timestamp messages). |
WiredHome | 0:7b81b19d9b10 | 5 | /// |
WiredHome | 0:7b81b19d9b10 | 6 | /// @todo Instead of providing a callback directly to the user code, all |
WiredHome | 0:7b81b19d9b10 | 7 | /// callbacks should be handled in this class, and then the user |
WiredHome | 0:7b81b19d9b10 | 8 | /// callback could be activated. In this way, the rxCounter, timestamps, |
WiredHome | 0:7b81b19d9b10 | 9 | /// and other features are preserved. |
WiredHome | 0:7b81b19d9b10 | 10 | /// |
WiredHome | 0:7b81b19d9b10 | 11 | /// @note Copyright &copr; 2011 by Smartware Computing, all rights reserved. |
WiredHome | 0:7b81b19d9b10 | 12 | /// Individuals may use this application for evaluation or non-commercial |
WiredHome | 0:7b81b19d9b10 | 13 | /// purposes. Within this restriction, changes may be made to this application |
WiredHome | 0:7b81b19d9b10 | 14 | /// as long as this copyright notice is retained. The user shall make |
WiredHome | 0:7b81b19d9b10 | 15 | /// clear that their work is a derived work, and not the original. |
WiredHome | 0:7b81b19d9b10 | 16 | /// Users of this application and sources accept this application "as is" and |
WiredHome | 0:7b81b19d9b10 | 17 | /// shall hold harmless Smartware Computing, for any undesired results while |
WiredHome | 0:7b81b19d9b10 | 18 | /// using this application - whether real or imagined. |
WiredHome | 0:7b81b19d9b10 | 19 | /// |
WiredHome | 0:7b81b19d9b10 | 20 | /// @author David Smart, Smartware Computing |
WiredHome | 0:7b81b19d9b10 | 21 | /// |
WiredHome | 0:7b81b19d9b10 | 22 | /// History |
WiredHome | 0:7b81b19d9b10 | 23 | /// v1.01 20110608 |
WiredHome | 0:7b81b19d9b10 | 24 | /// \li initial version numbered to match other CAN components |
WiredHome | 0:7b81b19d9b10 | 25 | /// |
WiredHome | 0:7b81b19d9b10 | 26 | #ifndef CANPORT_H |
WiredHome | 0:7b81b19d9b10 | 27 | #define CANPORT_H |
WiredHome | 0:7b81b19d9b10 | 28 | #include "mbed.h" |
WiredHome | 0:7b81b19d9b10 | 29 | #include "CANMessage.h" |
WiredHome | 0:7b81b19d9b10 | 30 | |
WiredHome | 0:7b81b19d9b10 | 31 | typedef enum { |
WiredHome | 0:7b81b19d9b10 | 32 | HIGHSPEED, |
WiredHome | 0:7b81b19d9b10 | 33 | NORMALSPEED, |
WiredHome | 0:7b81b19d9b10 | 34 | STANDBY |
WiredHome | 0:7b81b19d9b10 | 35 | } CANSlopeControl_T; |
WiredHome | 0:7b81b19d9b10 | 36 | |
WiredHome | 0:7b81b19d9b10 | 37 | typedef enum { |
WiredHome | 0:7b81b19d9b10 | 38 | MONITOR, |
WiredHome | 0:7b81b19d9b10 | 39 | ACTIVE |
WiredHome | 0:7b81b19d9b10 | 40 | } CANBusMode_T; |
WiredHome | 0:7b81b19d9b10 | 41 | |
WiredHome | 0:7b81b19d9b10 | 42 | /// This is the CANPort, which is the physical interface to CAN |
WiredHome | 0:7b81b19d9b10 | 43 | /// |
WiredHome | 0:7b81b19d9b10 | 44 | /// This derived class has a number of additional capabilities: |
WiredHome | 0:7b81b19d9b10 | 45 | /// \li activity indicator to show receive and transmit activity per port |
WiredHome | 0:7b81b19d9b10 | 46 | /// \li slope control pin to permit controlling performance and power modes |
WiredHome | 0:7b81b19d9b10 | 47 | /// \li counters, to keep track of received and transmitted messages |
WiredHome | 0:7b81b19d9b10 | 48 | /// \li and more... |
WiredHome | 0:7b81b19d9b10 | 49 | /// |
WiredHome | 0:7b81b19d9b10 | 50 | class CANPort { |
WiredHome | 0:7b81b19d9b10 | 51 | public: |
WiredHome | 0:7b81b19d9b10 | 52 | |
WiredHome | 0:7b81b19d9b10 | 53 | /// The advanced form of the constructure to create a CANPort, name |
WiredHome | 0:7b81b19d9b10 | 54 | /// an activity indicator, and name a slope control pin |
WiredHome | 0:7b81b19d9b10 | 55 | /// |
WiredHome | 0:7b81b19d9b10 | 56 | /// This version lets you specify the receive and transmit pins |
WiredHome | 0:7b81b19d9b10 | 57 | /// for a CANPort, indicate a pin which is used to indicate |
WiredHome | 0:7b81b19d9b10 | 58 | /// CAN activity, both receive and transmit, and identify a slope |
WiredHome | 0:7b81b19d9b10 | 59 | /// control pin. |
WiredHome | 0:7b81b19d9b10 | 60 | /// |
WiredHome | 0:7b81b19d9b10 | 61 | /// @param chNum is the user assigned channel number given to this port |
WiredHome | 0:7b81b19d9b10 | 62 | /// @param rd is the receive pin |
WiredHome | 0:7b81b19d9b10 | 63 | /// @param td is the transmit pin |
WiredHome | 0:7b81b19d9b10 | 64 | /// @param activityPin is the PWM pin used to indicate CAN traffic |
WiredHome | 0:7b81b19d9b10 | 65 | /// @param slopePin is the DigitalInOut pin used to control slope |
WiredHome | 0:7b81b19d9b10 | 66 | /// @param slope is the initial slope setting |
WiredHome | 0:7b81b19d9b10 | 67 | /// |
WiredHome | 0:7b81b19d9b10 | 68 | CANPort(CANCHANNEL_T chNum, PinName rd, PinName td, PinName activityPin = NC, PinName slopePin = NC, CANSlopeControl_T slope = NORMALSPEED); |
WiredHome | 0:7b81b19d9b10 | 69 | |
WiredHome | 0:7b81b19d9b10 | 70 | /// Destroys the CANPort |
WiredHome | 0:7b81b19d9b10 | 71 | virtual ~CANPort(); |
WiredHome | 0:7b81b19d9b10 | 72 | |
WiredHome | 0:7b81b19d9b10 | 73 | /// Transmit a message to the bus |
WiredHome | 0:7b81b19d9b10 | 74 | /// |
WiredHome | 0:7b81b19d9b10 | 75 | /// This method transmits a message to the bus. |
WiredHome | 0:7b81b19d9b10 | 76 | /// |
WiredHome | 0:7b81b19d9b10 | 77 | /// @param msg is a CANmsg |
WiredHome | 0:7b81b19d9b10 | 78 | /// @returns true if the message was successfully written to CAN |
WiredHome | 0:7b81b19d9b10 | 79 | /// |
WiredHome | 0:7b81b19d9b10 | 80 | bool TransmitMsg(CANmsg msg); |
WiredHome | 0:7b81b19d9b10 | 81 | |
WiredHome | 0:7b81b19d9b10 | 82 | /// Read a message from the bus into a buffer |
WiredHome | 0:7b81b19d9b10 | 83 | /// |
WiredHome | 0:7b81b19d9b10 | 84 | /// This method will extract a message from the bus and put it |
WiredHome | 0:7b81b19d9b10 | 85 | /// in the message space provided |
WiredHome | 0:7b81b19d9b10 | 86 | /// |
WiredHome | 0:7b81b19d9b10 | 87 | /// @param msg is a reference to a CANmsg into which the msg is placed |
WiredHome | 0:7b81b19d9b10 | 88 | /// @returns true if a message was received and processed |
WiredHome | 0:7b81b19d9b10 | 89 | /// |
WiredHome | 0:7b81b19d9b10 | 90 | bool ReceiveMsg(CANmsg &msg); |
WiredHome | 0:7b81b19d9b10 | 91 | |
WiredHome | 0:7b81b19d9b10 | 92 | /// This flashes the activity indicator associated with this CANPort |
WiredHome | 0:7b81b19d9b10 | 93 | /// |
WiredHome | 0:7b81b19d9b10 | 94 | /// If the activity indicator is configured. |
WiredHome | 0:7b81b19d9b10 | 95 | /// |
WiredHome | 0:7b81b19d9b10 | 96 | /// @param tx indiciates if the flash is to be a sign of xmt or rcv |
WiredHome | 0:7b81b19d9b10 | 97 | /// it will flash dimly for a transmit and bright for a receive |
WiredHome | 0:7b81b19d9b10 | 98 | /// |
WiredHome | 0:7b81b19d9b10 | 99 | void Flash(CANDIR_T tx); |
WiredHome | 0:7b81b19d9b10 | 100 | |
WiredHome | 0:7b81b19d9b10 | 101 | /// This extinguishes the activity indicator associated with this CANPort |
WiredHome | 0:7b81b19d9b10 | 102 | /// |
WiredHome | 0:7b81b19d9b10 | 103 | /// If the activity indicator is configured. |
WiredHome | 0:7b81b19d9b10 | 104 | /// |
WiredHome | 0:7b81b19d9b10 | 105 | void Extinguish(void); |
WiredHome | 0:7b81b19d9b10 | 106 | |
WiredHome | 0:7b81b19d9b10 | 107 | /// Attach a callback whenever a CAN receive interrupt is generated |
WiredHome | 0:7b81b19d9b10 | 108 | /// |
WiredHome | 0:7b81b19d9b10 | 109 | /// This attaches a simple callback to the CAN ISR |
WiredHome | 0:7b81b19d9b10 | 110 | /// |
WiredHome | 0:7b81b19d9b10 | 111 | /// @param fptr pointer to the function to be called |
WiredHome | 0:7b81b19d9b10 | 112 | /// |
WiredHome | 0:7b81b19d9b10 | 113 | void Attach( void (*fptr)(void) ); |
WiredHome | 0:7b81b19d9b10 | 114 | |
WiredHome | 0:7b81b19d9b10 | 115 | /// Attach a callback whenever a CAN receive interrupt is generated |
WiredHome | 0:7b81b19d9b10 | 116 | /// |
WiredHome | 0:7b81b19d9b10 | 117 | /// This attaches a callback to the CAN ISR |
WiredHome | 0:7b81b19d9b10 | 118 | /// |
WiredHome | 0:7b81b19d9b10 | 119 | /// @param tptr pointer to the object to call the member function on |
WiredHome | 0:7b81b19d9b10 | 120 | /// @param mptr pointer to the member function to be called |
WiredHome | 0:7b81b19d9b10 | 121 | /// |
WiredHome | 0:7b81b19d9b10 | 122 | template <typename T> void Attach(T * tptr, void (T::*mptr)(void)) { |
WiredHome | 0:7b81b19d9b10 | 123 | can->attach(tptr, mptr); |
WiredHome | 0:7b81b19d9b10 | 124 | } |
WiredHome | 0:7b81b19d9b10 | 125 | |
WiredHome | 0:7b81b19d9b10 | 126 | /// This provides control of the AutoReset feature |
WiredHome | 0:7b81b19d9b10 | 127 | /// |
WiredHome | 0:7b81b19d9b10 | 128 | /// AutoReset is a feature that permits automatically resetting the |
WiredHome | 0:7b81b19d9b10 | 129 | /// CAN chip when it is trapped in an error state (e.g. bus off). |
WiredHome | 0:7b81b19d9b10 | 130 | /// The default is disabled. |
WiredHome | 0:7b81b19d9b10 | 131 | /// |
WiredHome | 0:7b81b19d9b10 | 132 | /// @param enable is used to enable or disable the auto reset feature |
WiredHome | 0:7b81b19d9b10 | 133 | /// @returns true if the command was accepted |
WiredHome | 0:7b81b19d9b10 | 134 | /// |
WiredHome | 0:7b81b19d9b10 | 135 | bool SetAutoReset(bool enable); |
WiredHome | 0:7b81b19d9b10 | 136 | |
WiredHome | 0:7b81b19d9b10 | 137 | /// This returns the current state of the AutoReset feature |
WiredHome | 0:7b81b19d9b10 | 138 | /// |
WiredHome | 0:7b81b19d9b10 | 139 | /// Returns a value indicating the current state |
WiredHome | 0:7b81b19d9b10 | 140 | /// |
WiredHome | 0:7b81b19d9b10 | 141 | /// @returns true if AutoReset is enabled |
WiredHome | 0:7b81b19d9b10 | 142 | /// @returns false if AutoReset is disabled |
WiredHome | 0:7b81b19d9b10 | 143 | /// |
WiredHome | 0:7b81b19d9b10 | 144 | bool GetAutoReset() { return autoReset; } |
WiredHome | 0:7b81b19d9b10 | 145 | |
WiredHome | 0:7b81b19d9b10 | 146 | /// This provides control to set the bus mode as active or listener only |
WiredHome | 0:7b81b19d9b10 | 147 | /// |
WiredHome | 0:7b81b19d9b10 | 148 | /// The CAN adapter can be placed into a monitor(LISTENER) mode (sometimes |
WiredHome | 0:7b81b19d9b10 | 149 | /// called promiscuous mode) or into an active mode, in which case it |
WiredHome | 0:7b81b19d9b10 | 150 | /// will send hardware acknowledge. |
WiredHome | 0:7b81b19d9b10 | 151 | /// |
WiredHome | 0:7b81b19d9b10 | 152 | /// @param mode is either MONITOR or ACTIVE |
WiredHome | 0:7b81b19d9b10 | 153 | /// @returns true if the command was accepted |
WiredHome | 0:7b81b19d9b10 | 154 | /// |
WiredHome | 0:7b81b19d9b10 | 155 | bool SetBusMode(CANBusMode_T mode); |
WiredHome | 0:7b81b19d9b10 | 156 | |
WiredHome | 0:7b81b19d9b10 | 157 | /// This returns the current state of the bus mode |
WiredHome | 0:7b81b19d9b10 | 158 | /// |
WiredHome | 0:7b81b19d9b10 | 159 | /// @returns MONITOR if the chip is in the monitor (listen / promiscuous) mode |
WiredHome | 0:7b81b19d9b10 | 160 | /// @returns ACTIVE if the chip is in the active mode |
WiredHome | 0:7b81b19d9b10 | 161 | /// |
WiredHome | 0:7b81b19d9b10 | 162 | CANBusMode_T GetBusMode(); |
WiredHome | 0:7b81b19d9b10 | 163 | |
WiredHome | 0:7b81b19d9b10 | 164 | /// This provides control to set the transceiver slope control mode |
WiredHome | 0:7b81b19d9b10 | 165 | /// |
WiredHome | 0:7b81b19d9b10 | 166 | /// Many CAN transceivers can be operated in one of several modes - |
WiredHome | 0:7b81b19d9b10 | 167 | /// \li HIGHSPEED - which supports the highest frequency of communication, but |
WiredHome | 0:7b81b19d9b10 | 168 | /// does tend to generate more EMI unless the cable is properly shielded |
WiredHome | 0:7b81b19d9b10 | 169 | /// \li NORMALSPEED - which wave-shapes the rising and falling edge, and |
WiredHome | 0:7b81b19d9b10 | 170 | /// significantly reduces the EMI concerns, but may trade off the |
WiredHome | 0:7b81b19d9b10 | 171 | /// highest performance. |
WiredHome | 0:7b81b19d9b10 | 172 | /// \li STANDBY - which puts the chip into the lowest power state, and prevents |
WiredHome | 0:7b81b19d9b10 | 173 | /// transmission of a message. It can typically still receive messages, |
WiredHome | 0:7b81b19d9b10 | 174 | /// but this mode may also be useful for other purposes (wake on CAN, |
WiredHome | 0:7b81b19d9b10 | 175 | /// autobaud w/o disrupting bus traffic, etc.) |
WiredHome | 0:7b81b19d9b10 | 176 | /// |
WiredHome | 0:7b81b19d9b10 | 177 | /// @param slope sets the slope control to one of the states HIGHSPEED, |
WiredHome | 0:7b81b19d9b10 | 178 | /// NORMALSPEED, or STANDBY |
WiredHome | 0:7b81b19d9b10 | 179 | /// @returns true if the command succeeded |
WiredHome | 0:7b81b19d9b10 | 180 | /// @returns false if the command failed, which may be due to not having |
WiredHome | 0:7b81b19d9b10 | 181 | /// defined a slope control pin. |
WiredHome | 0:7b81b19d9b10 | 182 | /// |
WiredHome | 0:7b81b19d9b10 | 183 | bool SetSlopeControl(CANSlopeControl_T slope); |
WiredHome | 0:7b81b19d9b10 | 184 | |
WiredHome | 0:7b81b19d9b10 | 185 | /// This returns the current state of the slope control |
WiredHome | 0:7b81b19d9b10 | 186 | /// |
WiredHome | 0:7b81b19d9b10 | 187 | /// The state is controlled by the SetSlopeControl command. |
WiredHome | 0:7b81b19d9b10 | 188 | /// |
WiredHome | 0:7b81b19d9b10 | 189 | /// @returns the current state; one of HIGHSPEED, NORMALSPEED, or STANDBY |
WiredHome | 0:7b81b19d9b10 | 190 | /// |
WiredHome | 0:7b81b19d9b10 | 191 | CANSlopeControl_T GetSlopeControl(); |
WiredHome | 0:7b81b19d9b10 | 192 | |
WiredHome | 0:7b81b19d9b10 | 193 | /// This sets the bitrate for the CAN channel |
WiredHome | 0:7b81b19d9b10 | 194 | /// |
WiredHome | 0:7b81b19d9b10 | 195 | /// This sets the bitrate for the CAN channel. The rate is in bits per |
WiredHome | 0:7b81b19d9b10 | 196 | /// second. The actual bitrate and the sample point is automagically |
WiredHome | 0:7b81b19d9b10 | 197 | /// determined from the internal algorithms provided by the mbed library. |
WiredHome | 0:7b81b19d9b10 | 198 | /// |
WiredHome | 0:7b81b19d9b10 | 199 | /// This API appears redundant to the frequency api, however this one |
WiredHome | 0:7b81b19d9b10 | 200 | /// will retain the rate setting and then permits the query of the bitrate. |
WiredHome | 0:7b81b19d9b10 | 201 | /// |
WiredHome | 0:7b81b19d9b10 | 202 | /// @param rate is the desired bitrate in bits per second. |
WiredHome | 0:7b81b19d9b10 | 203 | /// @returns true if teh command succeeded |
WiredHome | 0:7b81b19d9b10 | 204 | /// |
WiredHome | 0:7b81b19d9b10 | 205 | bool SetBitRate(int rate); |
WiredHome | 0:7b81b19d9b10 | 206 | |
WiredHome | 0:7b81b19d9b10 | 207 | /// This returns the current desired bitrate for the CAN channel |
WiredHome | 0:7b81b19d9b10 | 208 | /// |
WiredHome | 0:7b81b19d9b10 | 209 | /// This returns the previously set bitrate. Note that the actual bitrate |
WiredHome | 0:7b81b19d9b10 | 210 | /// may be different, due to the internal calculations of the mbed library. |
WiredHome | 0:7b81b19d9b10 | 211 | /// |
WiredHome | 0:7b81b19d9b10 | 212 | /// @returns the bitrate in bits per second |
WiredHome | 0:7b81b19d9b10 | 213 | /// |
WiredHome | 0:7b81b19d9b10 | 214 | int GetBitRate(); |
WiredHome | 0:7b81b19d9b10 | 215 | |
WiredHome | 0:7b81b19d9b10 | 216 | /// This returns the number of messages that were sent by this CAN channel |
WiredHome | 0:7b81b19d9b10 | 217 | /// |
WiredHome | 0:7b81b19d9b10 | 218 | /// The counter is never reset. |
WiredHome | 0:7b81b19d9b10 | 219 | /// |
WiredHome | 0:7b81b19d9b10 | 220 | /// @returns the number of messages sent by this CAN channel |
WiredHome | 0:7b81b19d9b10 | 221 | /// |
WiredHome | 0:7b81b19d9b10 | 222 | int GetTxCounter(); |
WiredHome | 0:7b81b19d9b10 | 223 | |
WiredHome | 0:7b81b19d9b10 | 224 | /// This returns the number of messages that were received by this CAN channel |
WiredHome | 0:7b81b19d9b10 | 225 | /// |
WiredHome | 0:7b81b19d9b10 | 226 | /// The counter is never reset. |
WiredHome | 0:7b81b19d9b10 | 227 | /// |
WiredHome | 0:7b81b19d9b10 | 228 | /// @returns the number of messages received by this CAN channel |
WiredHome | 0:7b81b19d9b10 | 229 | /// |
WiredHome | 0:7b81b19d9b10 | 230 | int GetRxCounter(); |
WiredHome | 0:7b81b19d9b10 | 231 | |
WiredHome | 0:7b81b19d9b10 | 232 | /// This returns the number of transmit errors |
WiredHome | 0:7b81b19d9b10 | 233 | /// |
WiredHome | 0:7b81b19d9b10 | 234 | /// As counted by the hardware |
WiredHome | 0:7b81b19d9b10 | 235 | /// |
WiredHome | 0:7b81b19d9b10 | 236 | /// @returns the number of transmit errors |
WiredHome | 0:7b81b19d9b10 | 237 | int GetTxErrorCounter(); |
WiredHome | 0:7b81b19d9b10 | 238 | |
WiredHome | 0:7b81b19d9b10 | 239 | /// This returns the number of receive errors |
WiredHome | 0:7b81b19d9b10 | 240 | /// |
WiredHome | 0:7b81b19d9b10 | 241 | /// As counted by the hardware |
WiredHome | 0:7b81b19d9b10 | 242 | /// |
WiredHome | 0:7b81b19d9b10 | 243 | /// @returns the number of receive errors |
WiredHome | 0:7b81b19d9b10 | 244 | int GetRxErrorCounter(); |
WiredHome | 0:7b81b19d9b10 | 245 | |
WiredHome | 0:7b81b19d9b10 | 246 | /// This resets the CAN interface |
WiredHome | 0:7b81b19d9b10 | 247 | /// |
WiredHome | 0:7b81b19d9b10 | 248 | /// Unconditionally. |
WiredHome | 0:7b81b19d9b10 | 249 | /// |
WiredHome | 0:7b81b19d9b10 | 250 | /// @returns true if success |
WiredHome | 0:7b81b19d9b10 | 251 | /// |
WiredHome | 0:7b81b19d9b10 | 252 | bool ResetChip(); |
WiredHome | 0:7b81b19d9b10 | 253 | |
WiredHome | 0:7b81b19d9b10 | 254 | /// This writes various CAN info to the selected serial channel |
WiredHome | 0:7b81b19d9b10 | 255 | /// |
WiredHome | 0:7b81b19d9b10 | 256 | /// When supplied with a Serial port channel, this will output |
WiredHome | 0:7b81b19d9b10 | 257 | /// some possibly interesting information about the CAN configuration. |
WiredHome | 0:7b81b19d9b10 | 258 | /// It does not output details for only the active objects channel, |
WiredHome | 0:7b81b19d9b10 | 259 | /// rather it outputs information about the CAN subsystem. |
WiredHome | 0:7b81b19d9b10 | 260 | /// |
WiredHome | 0:7b81b19d9b10 | 261 | /// @param stream is the handle of a serial channel |
WiredHome | 0:7b81b19d9b10 | 262 | /// @returns nothing |
WiredHome | 0:7b81b19d9b10 | 263 | /// |
WiredHome | 0:7b81b19d9b10 | 264 | void PrintInfo(Serial * stream); |
WiredHome | 0:7b81b19d9b10 | 265 | |
WiredHome | 0:7b81b19d9b10 | 266 | private: |
WiredHome | 0:7b81b19d9b10 | 267 | CANCHANNEL_T channel; // user assigned port number of this port |
WiredHome | 0:7b81b19d9b10 | 268 | CAN * can; // bind to a specific CAN |
WiredHome | 0:7b81b19d9b10 | 269 | CANBusMode_T busMode; // monitor or active mode |
WiredHome | 0:7b81b19d9b10 | 270 | int bitRate; // bit rate for this bus |
WiredHome | 0:7b81b19d9b10 | 271 | PwmOut * activityPin; // LED to indicate activity |
WiredHome | 0:7b81b19d9b10 | 272 | Timeout activityTimeout; // used to extinguish the LED |
WiredHome | 0:7b81b19d9b10 | 273 | |
WiredHome | 0:7b81b19d9b10 | 274 | DigitalInOut * slopePin; // pin used to control the transceiver slope modes |
WiredHome | 0:7b81b19d9b10 | 275 | PinName slopePinName; |
WiredHome | 0:7b81b19d9b10 | 276 | CANSlopeControl_T slopeMode;// current mode |
WiredHome | 0:7b81b19d9b10 | 277 | |
WiredHome | 0:7b81b19d9b10 | 278 | bool autoReset; // true when auto reset on error is enabled |
WiredHome | 0:7b81b19d9b10 | 279 | uint32_t txCounter; |
WiredHome | 0:7b81b19d9b10 | 280 | uint32_t rxCounter; |
WiredHome | 0:7b81b19d9b10 | 281 | }; |
WiredHome | 0:7b81b19d9b10 | 282 | |
WiredHome | 0:7b81b19d9b10 | 283 | #endif // CANPORT_H |