Skip to content

Commit 0228bea

Browse files
committed
Rewrite filter id to be more convenient and failsafe.
1 parent bd8d53c commit 0228bea

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

Diff for: libraries/Arduino_CAN/examples/CANReadFilter/CANReadFilter.ino

+6-4
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,14 @@ void setup()
4242
CAN.setFilterMask_Extended(CAN_FILTER_MASK_EXTENDED);
4343
CAN.setFilterMask_Standard(CAN_FILTER_MASK_STANDARD);
4444

45-
for (int c=16; c <= 23; c++) {
46-
CAN.setMailboxID(c, 0x0100);
45+
for (int mailbox = 0; mailbox < R7FA4M1_CAN::CAN_MAX_EXTENDED_MAILBOXES; mailbox++)
46+
{
47+
CAN.setFilterId_Extended(mailbox, 0x0100);
4748
}
4849

49-
for (int c=24; c <= 31; c++) {
50-
CAN.setMailboxID(c, 0x10);
50+
for (int mailbox = 0; mailbox < R7FA4M1_CAN::CAN_MAX_STANDARD_MAILBOXES; mailbox++)
51+
{
52+
CAN.setFilterId_Standard(mailbox, 0x10);
5153
}
5254

5355
if (!CAN.begin(CanBitRate::BR_250k))

Diff for: libraries/Arduino_CAN/src/R7FA4M1_CAN.cpp

+14-2
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,23 @@ void R7FA4M1_CAN::setFilterMask_Extended(uint32_t const mask)
200200
_can_mailbox_mask[5] = mask;
201201
}
202202

203-
void R7FA4M1_CAN::setMailboxID(size_t const mailbox, uint32_t const id)
203+
void R7FA4M1_CAN::setFilterId_Standard(size_t const mailbox, uint32_t const id)
204204
{
205-
_can_mailbox[mailbox].mailbox_id = id;
205+
if (mailbox > CAN_MAX_STANDARD_MAILBOXES)
206+
return;
207+
208+
size_t const mailbox_idx = CAN_MAX_STANDARD_MAILBOX_OFFSET + mailbox;
209+
_can_mailbox[mailbox_idx].mailbox_id = id;
206210
}
207211

212+
void R7FA4M1_CAN::setFilterId_Extended(size_t const mailbox, uint32_t const id)
213+
{
214+
if (mailbox > CAN_MAX_EXTENDED_MAILBOXES)
215+
return;
216+
217+
size_t const mailbox_idx = CAN_MAX_EXTENDED_MAILBOX_OFFSET + mailbox;
218+
_can_mailbox[mailbox_idx].mailbox_id = id;
219+
}
208220

209221
int R7FA4M1_CAN::enableInternalLoopback()
210222
{

Diff for: libraries/Arduino_CAN/src/R7FA4M1_CAN.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ class R7FA4M1_CAN final : public HardwareCAN
5656

5757
void setFilterMask_Standard(uint32_t const mask);
5858
void setFilterMask_Extended(uint32_t const mask);
59-
void setMailboxID(size_t const mailbox, uint32_t const id);
59+
void setFilterId_Standard(size_t const mailbox, uint32_t const id);
60+
void setFilterId_Extended(size_t const mailbox, uint32_t const id);
6061

6162
int enableInternalLoopback();
6263
int disableInternalLoopback();
@@ -73,9 +74,13 @@ class R7FA4M1_CAN final : public HardwareCAN
7374
/* This function is used by the library and should NOT be called by the user. */
7475
void onCanCallback(can_callback_args_t * p_args);
7576

77+
static size_t constexpr CAN_MAX_STANDARD_MAILBOXES = 8U;
78+
static size_t constexpr CAN_MAX_EXTENDED_MAILBOXES = 8U;
7679

7780
private:
7881
static size_t constexpr CAN_MAX_NO_MAILBOXES = 32U;
82+
static size_t constexpr CAN_MAX_STANDARD_MAILBOX_OFFSET = 24U;
83+
static size_t constexpr CAN_MAX_EXTENDED_MAILBOX_OFFSET = 16U;
7984

8085
int const _can_tx_pin;
8186
int const _can_rx_pin;

0 commit comments

Comments
 (0)