diff --git a/can.h b/can.h index 96175b1..4735f81 100644 --- a/can.h +++ b/can.h @@ -37,9 +37,9 @@ typedef __u32 canid_t; #define CAN_MAX_DLEN 8 struct can_frame { - canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */ - __u8 can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */ - __u8 data[CAN_MAX_DLEN] __attribute__((aligned(8))); + canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */ + __u8 can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */ + alignas(8) __u8 data[CAN_MAX_DLEN]; }; #endif /* CAN_H_ */ diff --git a/mcp2515.cpp b/mcp2515.cpp index b942b55..eda10a8 100644 --- a/mcp2515.cpp +++ b/mcp2515.cpp @@ -177,9 +177,14 @@ MCP2515::ERROR MCP2515::setNormalMode() return setMode(CANCTRL_REQOP_NORMAL); } +MCP2515::ERROR MCP2515::setNormalOneShotMode() +{ + return setMode(CANCTRL_REQOP_NORMAL | CANCTRL_OSM); +} + MCP2515::ERROR MCP2515::setMode(const CANCTRL_REQOP_MODE mode) { - modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode); + modifyRegister(MCP_CANCTRL, CANCTRL_REQOP | CANCTRL_OSM, mode); unsigned long endTime = millis() + 10; bool modeMatch = false; diff --git a/mcp2515.h b/mcp2515.h index 48e5d57..796507c 100644 --- a/mcp2515.h +++ b/mcp2515.h @@ -473,6 +473,7 @@ class MCP2515 ERROR setSleepMode(); ERROR setLoopbackMode(); ERROR setNormalMode(); + ERROR setNormalOneShotMode(); ERROR setClkOut(const CAN_CLKOUT divisor); ERROR setBitrate(const CAN_SPEED canSpeed); ERROR setBitrate(const CAN_SPEED canSpeed, const CAN_CLOCK canClock);