mirror of
https://github.com/Seeed-Studio/Seeed_Arduino_CAN.git
synced 2026-07-28 04:06:45 +00:00
add canbus monitor exmaple,compiled
This commit is contained in:
+14
-8
@@ -58,6 +58,12 @@ void CanSerial::init(INT8U defaultCanSpeed, const INT8U clock) {
|
||||
instance()->initFunc();
|
||||
}
|
||||
|
||||
|
||||
void CanSerial::init(MCP_CAN *CAN) {
|
||||
LWUARTCAN = CAN;
|
||||
}
|
||||
|
||||
|
||||
void CanSerial::setFilter(INT8U (*userFunc)(INT32U)) {
|
||||
instance()->setFilterFunc(userFunc);
|
||||
}
|
||||
@@ -159,7 +165,7 @@ INT8U CanSerial::parseAndRunCommand() {
|
||||
// Sn[CR] Setup with standard CAN bit-rates where n is 0-9.
|
||||
if (LWUARTCanChannelMode == LWUART_STATUS_CAN_CLOSED) {
|
||||
idx = HexHelper::parseNibbleWithLimit(LWUARTMessage[1], LWUART_CAN_BAUD_NUM);
|
||||
LWUARTCanSpeedSelection = LWUARTCanBaudRates[idx];
|
||||
LWUARTCanSpeedSelection = idx; //todo
|
||||
}
|
||||
else {
|
||||
ret = LWUART_ERR;
|
||||
@@ -297,9 +303,9 @@ INT8U CanSerial::parseAndRunCommand() {
|
||||
// F[CR] Read Status Flags.
|
||||
// LAWICEL CanSerial and CANUSB have some specific errors which differ from MCP2515/MCP2551 errors. We just return MCP2515 error.
|
||||
Serial.print(LWUART_FLAG);
|
||||
if (LWUARTCAN.checkError(&err) == CAN_OK)
|
||||
if (LWUARTCAN->checkError() == CAN_OK)
|
||||
err = 0;
|
||||
HexHelper::printFullByte(err & MCP_EFLG_ERRORMASK);
|
||||
HexHelper::printFullByte(err);
|
||||
break;
|
||||
case LWUART_CMD_AUTOPOLL:
|
||||
// Xn[CR] Sets Auto Poll/Send ON/OFF for received frames.
|
||||
@@ -378,7 +384,7 @@ INT8U CanSerial::parseAndRunCommand() {
|
||||
|
||||
INT8U CanSerial::checkReceive() {
|
||||
#ifndef _MCP_FAKE_MODE_
|
||||
return LWUARTCAN.checkReceive();
|
||||
return LWUARTCAN->checkReceive();
|
||||
#else
|
||||
return CAN_MSGAVAIL;
|
||||
#endif
|
||||
@@ -386,7 +392,7 @@ INT8U CanSerial::checkReceive() {
|
||||
|
||||
INT8U CanSerial::readMsgBufID(INT32U *ID, INT8U *len, INT8U buf[]) {
|
||||
#ifndef _MCP_FAKE_MODE_
|
||||
return LWUARTCAN.readMsgBufID(ID, len, buf);
|
||||
return LWUARTCAN->readMsgBufID(ID, len, buf);
|
||||
#else
|
||||
*ID = random(0x100, 0x110);
|
||||
*len = 4;
|
||||
@@ -451,7 +457,7 @@ INT8U CanSerial::receiveSingleFrame() {
|
||||
|
||||
INT8U CanSerial::isExtendedFrame() {
|
||||
#ifndef _MCP_FAKE_MODE_
|
||||
return LWUARTCAN.isExtendedFrame();
|
||||
return LWUARTCAN->isExtendedFrame();
|
||||
#else
|
||||
return LWUARTCanId > 0x7FF ? 1 : 0; //simple hack for fake mode
|
||||
#endif
|
||||
@@ -468,7 +474,7 @@ INT8U CanSerial::checkPassFilter(INT32U addr) {
|
||||
INT8U CanSerial::openCanBus() {
|
||||
INT8U ret = LWUART_OK;
|
||||
#ifndef _MCP_FAKE_MODE_
|
||||
if (CAN_OK != LWUARTCAN.begin(LWUARTCanSpeedSelection, LWUARTMcpModuleClock))
|
||||
if (CAN_OK != LWUARTCAN->begin(LWUARTCanSpeedSelection, LWUARTMcpModuleClock))
|
||||
ret = LWUART_ERR;
|
||||
#endif
|
||||
return ret;
|
||||
@@ -477,7 +483,7 @@ INT8U CanSerial::openCanBus() {
|
||||
|
||||
INT8U CanSerial::sendMsgBuf(INT32U id, INT8U ext, INT8U rtr, INT8U len, INT8U *buf) {
|
||||
#ifndef _MCP_FAKE_MODE_
|
||||
return LWUARTCAN.sendMsgBuf(id, ext, rtr, len, buf);
|
||||
return LWUARTCAN->sendMsgBuf(id, ext, rtr, len, buf);
|
||||
#else
|
||||
Serial.print("<sending:");
|
||||
Serial.print(id, HEX);
|
||||
|
||||
+17
-8
@@ -157,23 +157,31 @@
|
||||
|
||||
|
||||
#define LWUART_DEFAULT_BAUD_RATE 115200
|
||||
#define LWUART_DEFAULT_CAN_RATE CAN_500KBPS
|
||||
#define LWUART_DEFAULT_CLOCK_FREQ MCP_16MHz
|
||||
// #define LWUART_DEFAULT_CAN_RATE CAN_500KBPS
|
||||
// #define LWUART_DEFAULT_CLOCK_FREQ MCP_16MHz
|
||||
|
||||
#define LWUART_CAN_BAUD_NUM 0x0a
|
||||
#define LWUART_UART_BAUD_NUM 0x07
|
||||
|
||||
|
||||
#define CAN_OK (0)
|
||||
#define CAN_FAILINIT (1)
|
||||
#define CAN_FAILTX (2)
|
||||
#define CAN_MSGAVAIL (3)
|
||||
|
||||
|
||||
|
||||
const INT32U LWUARTSerialBaudRates[] //PROGMEM
|
||||
= { 230400, 115200, 57600, 38400, 19200, 9600, 2400 };
|
||||
|
||||
const INT32U LWUARTCanBaudRates[] //PROGMEM
|
||||
= { CAN_10KBPS, CAN_20KBPS, CAN_50KBPS, CAN_100KBPS, CAN_125KBPS, CAN_250KBPS, CAN_500KBPS, CAN_500KBPS /*CAN_800KBPS*/, CAN_1000KBPS, CAN_83K3BPS };
|
||||
// const INT32U LWUARTCanBaudRates[] //PROGMEM
|
||||
// = { CAN_10KBPS, CAN_20KBPS, CAN_50KBPS, CAN_100KBPS, CAN_125KBPS, CAN_250KBPS, CAN_500KBPS, CAN_500KBPS /*CAN_800KBPS*/, CAN_1000KBPS, CAN_83K3BPS };
|
||||
|
||||
class CanSerial
|
||||
{
|
||||
public:
|
||||
static void init(INT8U defaultCanSpeed = LWUART_DEFAULT_CAN_RATE, const INT8U clock = LWUART_DEFAULT_CLOCK_FREQ);
|
||||
static void init(INT8U defaultCanSpeed, const INT8U clock);
|
||||
void init(MCP_CAN *can);
|
||||
static void setFilter(INT8U (*userFunc)(INT32U));
|
||||
static void loop();
|
||||
static void serialEvent();
|
||||
@@ -189,10 +197,11 @@ private:
|
||||
|
||||
INT8U (*userAddressFilterFunc)(INT32U addr) = 0;
|
||||
|
||||
MCP_CAN LWUARTCAN = MCP_CAN(LWUART_CAN_BUS_SHIELD_CS_PIN);
|
||||
MCP_CAN *LWUARTCAN;
|
||||
//MCP_CAN LWUARTCAN = MCP_CAN(LWUART_CAN_BUS_SHIELD_CS_PIN);
|
||||
|
||||
INT8U LWUARTCanSpeedSelection = CAN_83K3BPS;
|
||||
INT8U LWUARTMcpModuleClock = MCP_16MHz;
|
||||
INT8U LWUARTCanSpeedSelection ;
|
||||
INT8U LWUARTMcpModuleClock ;
|
||||
INT8U LWUARTCanChannelMode = LWUART_STATUS_CAN_CLOSED;
|
||||
INT8U LWUARTLastErr = LWUART_OK;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user