@@ -312,27 +312,31 @@ bool can_send(can_data_t *channel, struct gs_host_frame *frame)
312312 }
313313}
314314
315- uint32_t can_drv_read_reg_status (const struct can_channel * channel )
316- {
317- return channel -> instance -> ESR ;
318- }
319-
320315bool can_drv_bus_error_pending (const uint32_t reg_esr )
321316{
322317 const uint32_t lec = FIELD_GET (CAN_ESR_LEC , reg_esr );
323318
324319 return can_is_lec_error (lec );
325320}
326321
322+ uint32_t can_drv_read_reg_status (const struct can_channel * channel )
323+ {
324+ const uint32_t reg_esr = channel -> instance -> ESR ;
325+
326+ if (can_drv_bus_error_pending (reg_esr )) {
327+ /* mark as handled by software */
328+ channel -> instance -> ESR |= FIELD_PREP (CAN_ESR_LEC , CAN_LEC_SOFTWARE );
329+ }
330+
331+ return reg_esr ;
332+ }
333+
327334bool can_drv_handle_bus_error (const struct can_channel __maybe_unused * channel , struct gs_host_frame * frame ,
328335 const uint32_t reg_esr )
329336{
330337 const uint8_t tx_err = FIELD_GET (CAN_ESR_TEC , reg_esr );
331338 const uint8_t rx_err = FIELD_GET (CAN_ESR_REC , reg_esr );
332339
333- /* mark as handled by software */
334- channel -> instance -> ESR |= FIELD_PREP (CAN_ESR_LEC , CAN_LEC_SOFTWARE );
335-
336340 if (tx_err == 0 && rx_err == 0 )
337341 return false;
338342
@@ -371,7 +375,7 @@ void can_drv_get_device_state(const struct can_channel __maybe_unused *channel,
371375 state -> txerr = FIELD_GET (CAN_ESR_TEC , reg_esr );
372376}
373377
374- void can_drv_handle_state_change (const struct can_channel * channel , struct gs_host_frame * frame ,
378+ void can_drv_handle_state_change (const struct can_channel __maybe_unused * channel , struct gs_host_frame * frame ,
375379 const uint32_t reg_esr )
376380{
377381 enum gs_can_state tx_state , rx_state ;
@@ -387,9 +391,4 @@ void can_drv_handle_state_change(const struct can_channel *channel, struct gs_ho
387391 frame -> classic_can -> data [1 ] |= gs_can_tx_state_to_frame (tx_state );
388392 if (tx_state <= rx_state )
389393 frame -> classic_can -> data [1 ] |= gs_can_rx_state_to_frame (rx_state );
390-
391- frame -> classic_can -> data [6 ] = tx_err ;
392- frame -> classic_can -> data [7 ] = rx_err ;
393-
394- can_drv_handle_bus_error (channel , frame , reg_esr );
395394}
0 commit comments