@@ -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
206206int 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