Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ec1c223

Browse files
[Arduino_CAN] support both 11-Bit (standard) and 29-Bit (extended) IDs.
1 parent 9a63d63 commit ec1c223

File tree

3 files changed

+29
-25
lines changed

3 files changed

+29
-25
lines changed

‎libraries/Arduino_CAN/examples/CAN1Write/CAN1Write.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void loop()
5454
*/
5555
uint8_t const msg_data[] = {0xCA,0xFE,0,0,0,0,0,0};
5656
memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));
57-
CanMsg msg(CAN_ID, sizeof(msg_data), msg_data);
57+
CanMsg constmsg(CanStandardId(CAN_ID), sizeof(msg_data), msg_data);
5858

5959
/* Transmit the CAN message, capture and display an
6060
* error core in case of failure.

‎libraries/Arduino_CAN/examples/CANWrite/CANWrite.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ void loop()
3535
*/
3636
uint8_t const msg_data[] = {0xCA,0xFE,0,0,0,0,0,0};
3737
memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));
38-
CanMsg msg(CAN_ID, sizeof(msg_data), msg_data);
38+
CanMsg constmsg(CanStandardId(CAN_ID), sizeof(msg_data), msg_data);
3939

4040
/* Transmit the CAN message, capture and display an
4141
* error core in case of failure.

‎libraries/Arduino_CAN/src/R7FA4M1_CAN.cpp

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ R7FA4M1_CAN::R7FA4M1_CAN(int const can_tx_pin, int const can_rx_pin)
5656
CAN_DEFAULT_MASK,
5757
CAN_DEFAULT_MASK,
5858
CAN_DEFAULT_MASK,
59-
0, /* Use no id filtering -> a CAN frame with any ID will be stored in receive mailbox #0. */
60-
CAN_DEFAULT_MASK,
59+
0, /* Use no id filtering -> a CAN frame with any ID will be stored in receive mailbox group #0. */
6160
CAN_DEFAULT_MASK,
61+
0, /* Use no id filtering -> a CAN frame with any ID will be stored in receive mailbox group #2. */
6262
CAN_DEFAULT_MASK
6363
}
6464
, _can_mailbox
@@ -74,15 +74,15 @@ R7FA4M1_CAN::R7FA4M1_CAN(int const can_tx_pin, int const can_rx_pin)
7474
{ .mailbox_id = 6, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
7575
{ .mailbox_id = 7, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
7676
/* Mailbox Group #2 */
77-
{ .mailbox_id = 8, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
78-
{ .mailbox_id = 9, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
79-
{ .mailbox_id = 10, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
80-
{ .mailbox_id = 11, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
77+
{ .mailbox_id = 8, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
78+
{ .mailbox_id = 9, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
79+
{ .mailbox_id = 10, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
80+
{ .mailbox_id = 11, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
8181
/* Mailbox Group #3 */
82-
{ .mailbox_id = 12, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
83-
{ .mailbox_id = 13, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
84-
{ .mailbox_id = 14, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
85-
{ .mailbox_id = 15, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
82+
{ .mailbox_id = 12, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
83+
{ .mailbox_id = 13, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
84+
{ .mailbox_id = 14, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
85+
{ .mailbox_id = 15, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
8686
/* We only use the very first receive mailbox for receiving. */
8787
/* Mailbox Group #4 */
8888
{ .mailbox_id = 0, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
@@ -95,22 +95,22 @@ R7FA4M1_CAN::R7FA4M1_CAN(int const can_tx_pin, int const can_rx_pin)
9595
{ .mailbox_id = 6, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
9696
{ .mailbox_id = 7, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
9797
/* Mailbox Group #6 */
98-
{ .mailbox_id = 8, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
99-
{ .mailbox_id = 9, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
100-
{ .mailbox_id = 10, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
101-
{ .mailbox_id = 11, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
98+
{ .mailbox_id = 8, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
99+
{ .mailbox_id = 9, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
100+
{ .mailbox_id = 10, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
101+
{ .mailbox_id = 11, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
102102
/* Mailbox Group #7 */
103-
{ .mailbox_id = 12, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
104-
{ .mailbox_id = 13, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
105-
{ .mailbox_id = 14, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
106-
{ .mailbox_id = 15, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE }
103+
{ .mailbox_id = 12, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
104+
{ .mailbox_id = 13, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
105+
{ .mailbox_id = 14, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
106+
{ .mailbox_id = 15, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE }
107107
}
108108
, _can_extended_cfg
109109
{
110110
.clock_source = CAN_CLOCK_SOURCE_PCLKB,
111111
.p_mailbox_mask = _can_mailbox_mask,
112112
.p_mailbox = _can_mailbox,
113-
.global_id_mode = CAN_GLOBAL_ID_MODE_EXTENDED,
113+
.global_id_mode = CAN_GLOBAL_ID_MODE_MIXED,
114114
.mailbox_count = CAN_MAX_NO_MAILBOXES,
115115
.message_mode = CAN_MESSAGE_MODE_OVERWRITE,
116116
.p_fifo_int_cfg = nullptr,
@@ -205,17 +205,21 @@ int R7FA4M1_CAN::disableInternalLoopback()
205205

206206
int R7FA4M1_CAN::write(CanMsg const & msg)
207207
{
208+
bool const is_standard_id = msg.isStandardId();
209+
208210
can_frame_t can_msg = {
209-
/* id = */ msg.id,
210-
/* id_mode = */ CAN_ID_MODE_EXTENDED,
211+
/* id = */ is_standard_id ? msg.getStandardId() : msg.getExtendedId(),
212+
/* id_mode = */ is_standard_id ? CAN_ID_MODE_STANDARD : CAN_ID_MODE_EXTENDED,
211213
/* type = */ CAN_FRAME_TYPE_DATA,
212214
/* data_length_code = */ min(msg.data_length, CAN_DATA_BUFFER_LENGTH),
213215
/* options = */ 0
214216
};
215217

216218
memcpy(can_msg.data, msg.data, can_msg.data_length_code);
217219

218-
if(fsp_err_t const rc = R_CAN_Write(&_can_ctrl, CAN_MAILBOX_ID_0, &can_msg); rc != FSP_SUCCESS)
220+
if(fsp_err_t const rc = R_CAN_Write(&_can_ctrl,
221+
is_standard_id ? CAN_MAILBOX_ID_0 : CAN_MAILBOX_ID_16,
222+
&can_msg); rc != FSP_SUCCESS)
219223
return -rc;
220224

221225
return 1;
@@ -241,7 +245,7 @@ void R7FA4M1_CAN::onCanCallback(can_callback_args_t * p_args)
241245
/* Extract the received CAN message. */
242246
CanMsg const msg
243247
(
244-
p_args->frame.id,
248+
(p_args->frame.id_mode == CAN_ID_MODE_STANDARD) ? CanStandardId(p_args->frame.id) : CanExtendedId(p_args->frame.id),
245249
p_args->frame.data_length_code,
246250
p_args->frame.data
247251
);

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /