From 3c679ca0f8d9ff3a1eaf68eb200ac5166b42abb1 Mon Sep 17 00:00:00 2001 From: wangcoolc <1387172050@163.com> Date: Mon, 7 Dec 2020 19:00:05 +0800 Subject: [PATCH] Add canbus sleep wake and get canbus mode function --- mcp2518fd_can.cpp | 95 ++++++++++++++++++++++++----------------------- mcp2518fd_can.h | 8 ++-- 2 files changed, 52 insertions(+), 51 deletions(-) diff --git a/mcp2518fd_can.cpp b/mcp2518fd_can.cpp index f743ddd..442a57a 100644 --- a/mcp2518fd_can.cpp +++ b/mcp2518fd_can.cpp @@ -2638,57 +2638,58 @@ byte mcp2518fd::init_Filt(byte num, byte ext, unsigned long ulData) return err; } -// /********************************************************************************************************* -// ** Function name: setSleepWakeup -// ** Descriptions: Enable or disable the wake up interrupt (If disabled the MCP2515 will not be woken up by CAN bus activity) -// *********************************************************************************************************/ -// void mcp2518fd::setSleepWakeup(const byte enable) { -// if (enable) -// { -// mcp2518fd_LowPowerModeEnable(); -// } -// else -// { -// mcp2518fd_LowPowerModeDisable(); -// } +/********************************************************************************************************* +** Function name: setSleepWakeup +** Descriptions: Enable or disable the wake up interrupt (If disabled the MCP2515 will not be woken up by CAN bus activity) +*********************************************************************************************************/ +void mcp2518fd::setSleepWakeup(const byte enable) { + if (enable) + { + mcp2518fd_LowPowerModeEnable(); + } + else + { + mcp2518fd_LowPowerModeDisable(); + } -// } +} -// /********************************************************************************************************* -// ** Function name: sleep -// ** Descriptions: Put mcp2515 in sleep mode to save power -// *********************************************************************************************************/ -// byte mcp2518fd::sleep() { -// if (getMode() != 0x01) { -// return mcp2518fd_OperationModeSelect(CAN_SLEEP_MODE); -// } else { -// return CAN_OK; -// } -// } +/********************************************************************************************************* +** Function name: sleep +** Descriptions: Put mcp2515 in sleep mode to save power +*********************************************************************************************************/ +byte mcp2518fd::sleep() { + if (getMode() != 0x01) { + return mcp2518fd_OperationModeSelect(CAN_SLEEP_MODE); + } else { + return CAN_OK; + } +} -// /********************************************************************************************************* -// ** Function name: wake -// ** Descriptions: wake MCP2515 manually from sleep. It will come back in the mode it was before sleeping. -// *********************************************************************************************************/ -// byte mcp2518fd::wake() { -// byte currMode = getMode(); -// if (currMode != mcpMode) { -// return mcp2515_setCANCTRL_Mode(mcpMode); -// } else { -// return CAN_OK; -// } -// } +/********************************************************************************************************* +** Function name: wake +** Descriptions: wake MCP2515 manually from sleep. It will come back in the mode it was before sleeping. +*********************************************************************************************************/ +byte mcp2518fd::wake() { + byte currMode = getMode(); + if (currMode != mcpMode) { + return mcp2518fd_OperationModeSelect(mcpMode); + } else { + return CAN_OK; + } +} -// /********************************************************************************************************* -// ** Function name: getMode -// ** Descriptions: Returns current control mode -// *********************************************************************************************************/ -// byte mcp2518fd::getMode() { -// byte ret; -// CAN_OPERATION_MODE mode; -// mode = mcp2518fd_OperationModeGet(); -// ret = (byte)mode; -// } +/********************************************************************************************************* +** Function name: getMode +** Descriptions: Returns current control mode +*********************************************************************************************************/ +byte mcp2518fd::getMode() { + byte ret; + CAN_OPERATION_MODE mode; + mode = mcp2518fd_OperationModeGet(); + ret = (byte)mode; + return ret; +} /********************************************************************************************************* ** Function name: setMode diff --git a/mcp2518fd_can.h b/mcp2518fd_can.h index 983b7a1..fb08e8d 100644 --- a/mcp2518fd_can.h +++ b/mcp2518fd_can.h @@ -112,11 +112,11 @@ public: // void enableTxInterrupt(bool enable = true); // enable transmit interrupt byte init_Mask(byte num, byte ext, unsigned long ulData); byte init_Filt(byte num, byte ext, unsigned long ulData); // init filters - // void setSleepWakeup(const byte enable); - // byte sleep(); - // byte wake(); + void setSleepWakeup(const byte enable); + byte sleep(); + byte wake(); byte setMode(CAN_OPERATION_MODE opMode); - // byte getMode(); + byte getMode(); unsigned long getCanId(void); byte readMsgBuf(byte* len, byte* buf); byte checkReceive(void);