upm
1.7.1
Sensor/Actuator repository for libmraa (v2.0.0)
|
API for the MCP2515 CAN bus controller. More...
The MCP2515 is a stand-alone CAN controller developed to simplify applications that require interfacing with a CAN bus.
This driver was developed using the Grove CAN bus shield version 1.2.
An example using the loopback mode.
A simple transmit and receive example.
Public Member Functions | |
MCP2515 (int bus, int csPin) | |
~MCP2515 () | |
void | reset () |
void | setOpmode (MCP2515_OPMODE_T opmode) |
void | setSpeed (MCP2515_SPEED_T speed) |
void | loadTXBuffer (MCP2515_TX_BUFFER_T bufnum, int id, bool ext, bool rtr, std::string payload) |
void | transmitBuffer (MCP2515_TX_BUFFER_T bufnum, bool wait) |
bool | isTXBufferFree (MCP2515_TX_BUFFER_T bufnum) |
MCP2515_TX_BUFFER_T | findFreeTXBuffer () |
void | setTXBufferPriority (MCP2515_TX_BUFFER_T bufnum, MCP2515_TXP_T priority) |
void | abortTX (MCP2515_TX_BUFFER_T bufnum) |
void | setRXBufferMode (MCP2515_RX_BUFFER_T bufnum, MCP2515_RXMODE_T rxm) |
MCP2515_RXMSG_T | rxStatusMsgs () |
MCP2515_MSGTYPE_T | rxStatusMsgType () |
MCP2515_FILTERMATCH_T | rxStatusFiltermatch () |
upm_result_t | getRXMsg (MCP2515_RX_BUFFER_T bufnum) |
void | printMsg () |
int | msgGetID () |
bool | msgGetRTR () |
bool | msgGetEXT () |
int | msgGetFilterNum () |
int | msgGetPayloadLen () |
std::string | msgGetPayload () |
void | installISR (int pin, void(*isr)(void *), void *arg) |
void | uninstallISR () |
void | setIntrEnables (uint8_t enables) |
uint8_t | getIntrFlags () |
void | setIntrFlags (uint8_t flags) |
void | clearIntrFlags (uint8_t flags) |
uint8_t | getErrorFlags () |
void | clearErrorFlags (uint8_t flags) |
void | setFilter (MCP2515_RX_FILTER_T filter, bool ext, int id) |
void | setMask (MCP2515_RX_MASK_T mask, bool ext, int id) |
Protected Member Functions | |
std::string | busRead (uint8_t cmd, std::string args, int datalen) |
void | busWrite (uint8_t cmd, std::string data) |
void | writeReg (uint8_t reg, uint8_t value) |
void | writeRegs (uint8_t reg, std::string buffer) |
uint8_t | readReg (uint8_t reg) |
void | bitModify (uint8_t addr, uint8_t mask, uint8_t value) |
Protected Attributes | |
mcp2515_context | m_mcp2515 |
MCP2515_MSG_T | m_message |
MCP2515 | ( | int | bus, |
int | csPin | ||
) |
MCP2515 constructor.
bus | spi bus to use |
csPin | The GPIO pin to use for Chip Select (CS). Pass pass -1 if your CS is handled automatically by your SPI implementation (Edison). |
void reset | ( | ) |
Reset the device.
void setOpmode | ( | MCP2515_OPMODE_T | opmode | ) |
Set the operating mode of the device. After initialization, the device mode will be set to NORMAL. Note that some operations require the device to be placed into CONFIG mode. This function will wait until the selected mode has been entered.
opmode | One of the MCP2515_OPMODE_T values. |
void setSpeed | ( | MCP2515_SPEED_T | speed | ) |
Set the baud rate of the CAN bus. All devices on a given CAN bus must be operating at the correct speed. The device must be switched into CONFIG mode bofore this function will have any effect. On initialization, the default CAN bus speed will be set to 50Kbps.
speed | One of the MCP2515_SPEED_T values. |
void loadTXBuffer | ( | MCP2515_TX_BUFFER_T | bufnum, |
int | id, | ||
bool | ext, | ||
bool | rtr, | ||
std::string | payload | ||
) |
Load a transmit buffer with the id, payload, and other information. This function does not actually transmit the buffer. There are 3 TX buffers available. The buffer must be free (ie: not awaiting transmit) before it can be loaded. Once a TX buffer has been successfully loaded, it can be transmitted with the TransmitBuffer() method.
bufnum | The buffer to load. One of the MCP2515_TX_BUFFER_T values. |
id | The integer representation of the CAN bus ID. |
ext | True if the ID is an extended identifier, false otherwise. |
rtr | True if this is a Remote Transfer Request, false otherwise. |
payload | A string containing the payload bytes. Maximum length is 8. |
void transmitBuffer | ( | MCP2515_TX_BUFFER_T | bufnum, |
bool | wait | ||
) |
Transmit a buffer already loaded by loadTXBuffer().
bufnum | The buffer to transmit. One of the MCP2515_TX_BUFFER_T values. |
wait | True if the function should wait until transmission is complete before returning, false otherwise. |
bool isTXBufferFree | ( | MCP2515_TX_BUFFER_T | bufnum | ) |
Determine whether a TX buffer is available for use or not. A TX buffer is unavailable if a transmit request is pending on it, but transmission has not yet completed.
bufnum | The buffer to check. One of the MCP2515_TX_BUFFER_T values. |
MCP2515_TX_BUFFER_T findFreeTXBuffer | ( | ) |
Find a free TX buffer and return it.
void setTXBufferPriority | ( | MCP2515_TX_BUFFER_T | bufnum, |
MCP2515_TXP_T | priority | ||
) |
Set the transmit priority of a TX buffer. Higher priority buffers are always transmitted before lower priority buffers. This function can be called on a buffer at any time prior to actual transmission.
bufnum | The buffer to set priority for. One of the MCP2515_TX_BUFFER_T values. |
priority | The priority to set for the buffer. One of the MCP2515_TXP_T values. |
void abortTX | ( | MCP2515_TX_BUFFER_T | bufnum | ) |
Abort a transmission that has been queued, but not yet completed. This will also free up the TX buffer for future use. Note, if you abort a transmission, but transmission has already started, this call will have no effect, and the buffer will complete transmission.
bufnum | The buffer to abort. One of the MCP2515_TX_BUFFER_T values. |
void setRXBufferMode | ( | MCP2515_RX_BUFFER_T | bufnum, |
MCP2515_RXMODE_T | rxm | ||
) |
Set the mode for an RX buffer. The mode specifies, at a high level, what packets should be captured from the bus and placed into an RX buffer. See the datasheet for details, but the default, MCP2515_RXMODE_ANY_FILTER, should be sufficient in most cases. It is also possible to use this to restrict the types of CAN ids accepted (extended only, standard only) as well as a debug ANY_NOFILTER mode.
bufnum | The buffer to set the mode for. One of the MCP2515_RX_BUFFER_T values. |
rxm | The mode to set. One of the MCP2515_RXMODE_T values. |
MCP2515_RXMSG_T rxStatusMsgs | ( | ) |
Return a bitmask indicating which of the 2 RX buffers have packets waiting in them. This can be 0 (no packets), 1(RXB0), 2(RXB1), or 3 (RXB0 and RXB1). This information is retrieved using the MCP2515_CMD_RX_STATUS command.
MCP2515_MSGTYPE_T rxStatusMsgType | ( | ) |
Return the message type present in one of the RX buffers. RXB0 has the highest priority, so if both RX buffers are full, this function will only return data for the packet in RXB0. This information is retrieved using the MCP2515_CMD_RX_STATUS command.
MCP2515_FILTERMATCH_T rxStatusFiltermatch | ( | ) |
Return the filter that matched an RX buffer. RXB0 has the highest priority, so if both RX buffers are full, this function will only return data for the packet in RXB0. This information is retrieved using the MCP2515_CMD_RX_STATUS command.
upm_result_t getRXMsg | ( | MCP2515_RX_BUFFER_T | bufnum | ) |
This function retrieves a message from the specified RX buffer. The message (MCP2515_MSG_T) contains all of the data in the packet, including id, rtr, ext, payload and payload length. In addition, after retrieving the message, the RX buffer is freed to receive further data from the CAN bus. The message is stored within the class.
bufnum | The buffer to retrieve. One of the MCP2515_RX_BUFFER_T values. |
void printMsg | ( | ) |
This is a utility function prints the current (last received) messages decoded contents. This is of primary importance for debugging, and to simplify the examples somewhat.
The output will look similar to:
id 00000000 ext 0 rtr 0 filt 0 len 8 payload: 0xc8 0x01 0x02 0x03 0x04 0x05 0x06 0x07
|
inline |
This method returns the id of a received message. It will only be valid after a successful completion of rxGetMsg().
|
inline |
This method returns the RTR flag of a received message. It will only be valid after a successful completion of rxGetMsg().
|
inline |
This method returns the EXT (extended ID) flag of a received message. It will only be valid after a successful completion of rxGetMsg().
|
inline |
This method returns the filter number that caused the message to be stored in the RX buffer. It will only be valid after a successful completion of rxGetMsg().
|
inline |
This method returns the length of the payload of the RX buffer. It will only be valid after a successful completion of rxGetMsg().
|
inline |
This method returns the contents of the payload in the last received message. It will only be valid after a successful completion of rxGetMsg().
void installISR | ( | int | pin, |
void(*)(void *) | isr, | ||
void * | arg | ||
) |
Installs an interrupt service routine (ISR) to be called when an interrupt occurs.
pin | GPIO pin to use as the interrupt pin. |
isr | Pointer to a function to be called on interrupt. |
arg | Pointer to an object to be supplied as an argument to the ISR. |
void uninstallISR | ( | ) |
Uninstalls the previously installed ISR
dev | Device context. |
void setIntrEnables | ( | uint8_t | enables | ) |
Set the interrupt enables register.
enables | A bitmask of interrupts to enable from MCP2515_CANINT_BITS_T. |
uint8_t getIntrFlags | ( | ) |
Retrieve the interrupt flags register.
void setIntrFlags | ( | uint8_t | flags | ) |
This function allows you to set specific interrupt flags. If the corresponding interrupt enable is set, an interrupt will be generated.
flags | A bitmask of interrupt flags to set, from MCP2515_CANINT_BITS_T values. |
void clearIntrFlags | ( | uint8_t | flags | ) |
This function allows you to clear specific interrupt flags. See the datasheet. Some flags cannot be cleared until the underlying cause has been corrected.
flags | A bitmask of interrupt flags to clear, from MCP2515_CANINT_BITS_T values. |
uint8_t getErrorFlags | ( | ) |
Retrieve the error flags register
void clearErrorFlags | ( | uint8_t | flags | ) |
Clear error flags. Note, some flags cannot be cleared until the underlying issues is resolved.
void setFilter | ( | MCP2515_RX_FILTER_T | filter, |
bool | ext, | ||
int | id | ||
) |
This function allows you to set one of the 6 RX filters available. Filters 0 and 1 are for RXB0 only, while filters 2-5 are for RXB1. See the datasheet for details on how these filters (along with the masks) are used to select candidate CAN bus data for retrieval from the CAN bus.
These can only be set when the device is in CONFIG mode.
filter | One of the 6 MCP2515_RX_FILTER_T values. |
ext | True if the id is extended, false for standard. |
id | Integer representation of a CAN bus ID. |
void setMask | ( | MCP2515_RX_MASK_T | mask, |
bool | ext, | ||
int | id | ||
) |
This function allows you to set one of the 2 RX masks. Mask 0 is for RXB0, mask 1 is for RXB1. The masks specify which bits in the filters are used for matching CAN bus data. See the datasheet for details on how these masks (along with the filters) are used to select candidate CAN bus data for retrieval from the CAN bus.
These can only be set when the device is in CONFIG mode.
mask | One of the 2 MCP2515_RX_MASK_T values. |
ext | True if the id is extended, false for standard. |
id | Integer representation of a CAN bus ID. |
|
protected |
Perform a bus read. This function is exposed here for those users wishing to perform their own low level accesses. This is a low level function, and should not be used unless you know what you are doing.
cmd | The command to send. |
args | String containing arguments, or empty for no arguments. |
datalen | The length of the data to read. |
|
protected |
Perform a bus write. This function is exposed here for those users wishing to perform their own low level accesses. This is a low level function, and should not be used unless you know what you are doing.
cmd | The command to send. |
data | A string containing the data to write. |
len | The number of bytes to write. |
|
protected |
Write to a specific register. This function is exposed here for those users wishing to perform their own low level accesses. This is a low level function, and should not be used unless you know what you are doing.
reg | The register to write to. |
value | The byte to write. |
|
protected |
Write to multiple consecutive registers. This function is exposed here for those users wishing to perform their own low level accesses. This is a low level function, and should not be used unless you know what you are doing.
reg | The register to start writing to. |
buffer | A string containing data to write. |
|
protected |
Read a register. This function is exposed here for those users wishing to perform their own low level accesses. This is a low level function, and should not be used unless you know what you are doing.
reg | The register to read. |
|
protected |
Perform a bit modify operation on a register. Only certain registers support this method of access - check the datasheet. This function is exposed here for those users wishing to perform their own low level accesses. This is a low level function, and should not be used unless you know what you are doing.
addr | The address of the register to access. |
mask | A bitmask used to mask off value bits. |
value | The value to write (bits masked by mask). |