Skip to content

Commit 6082110

Browse files
committed
canio: mimxrt10xx: Remove unused code and merge message functions
1 parent 241f98a commit 6082110

File tree

5 files changed

+65
-98
lines changed

5 files changed

+65
-98
lines changed

ports/mimxrt10xx/common-hal/canio/CAN.c

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,11 +383,38 @@ void common_hal_canio_can_send(canio_can_obj_t *self, mp_obj_t message_in) {
383383
}
384384

385385
canio_message_obj_t *message = message_in;
386+
386387
flexcan_frame_t tx_frame;
387-
if (!mimxrt_canio_message_obj_to_flexcan_frame(message, &tx_frame)) {
388-
mp_raise_ValueError(MP_ERROR_TEXT("Unable to send CAN Message: missing or malformed canio message object"));
388+
memset(&tx_frame, 0, sizeof(tx_frame)); // Zero out output.
389+
390+
if (message->extended) {
391+
tx_frame.id = FLEXCAN_ID_EXT(message->id);
392+
tx_frame.format = kFLEXCAN_FrameFormatExtend;
393+
} else {
394+
tx_frame.id = FLEXCAN_ID_STD(message->id);
395+
tx_frame.format = kFLEXCAN_FrameFormatStandard;
396+
}
397+
398+
if (message->base.type == &canio_remote_transmission_request_type) {
399+
tx_frame.type = kFLEXCAN_FrameTypeRemote;
400+
} else {
401+
tx_frame.type = kFLEXCAN_FrameTypeData;
389402
}
390403

404+
tx_frame.length = message->size;
405+
406+
// We can safely copy all bytes, as both flexcan_frame_t and
407+
// canio_message_obj_t define the data array as 8 bytes long,
408+
// even if the actual DLC is shorter.
409+
tx_frame.dataByte0 = message->data[0];
410+
tx_frame.dataByte1 = message->data[1];
411+
tx_frame.dataByte2 = message->data[2];
412+
tx_frame.dataByte3 = message->data[3];
413+
tx_frame.dataByte4 = message->data[4];
414+
tx_frame.dataByte5 = message->data[5];
415+
tx_frame.dataByte6 = message->data[6];
416+
tx_frame.dataByte7 = message->data[7];
417+
391418
flexcan_mb_transfer_t tx_xfer;
392419
tx_xfer.mbIdx = mimxrt10xx_flexcan_get_free_tx_mbid(self);
393420
tx_xfer.frame = &tx_frame;

ports/mimxrt10xx/common-hal/canio/Listener.c

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,15 @@
4040
#include "supervisor/shared/tick.h"
4141
#include "sdk/drivers/flexcan/fsl_flexcan.h"
4242

43-
/*
44-
typedef struct {
45-
mp_obj_base_t base;
46-
int id;
47-
int mask;
48-
bool extended;
49-
} canio_match_obj_t;
50-
*/
43+
44+
// Convert from back from FLEXCAN IDs to normal CAN IDs.
45+
#define FLEXCAN_ID_TO_CAN_ID_STD(id) \
46+
((uint32_t)((((uint32_t)(id)) & CAN_ID_STD_MASK) >> CAN_ID_STD_SHIFT))
47+
48+
#define FLEXCAN_ID_TO_CAN_ID_EXT(id) \
49+
((uint32_t)((((uint32_t)(id)) & (CAN_ID_STD_MASK | CAN_ID_EXT_MASK)) \
50+
>> CAN_ID_EXT_SHIFT))
51+
5152

5253
void common_hal_canio_listener_construct(canio_listener_obj_t *self, canio_can_obj_t *can, size_t nmatch, canio_match_obj_t **matches, float timeout) {
5354

@@ -140,10 +141,35 @@ mp_obj_t common_hal_canio_listener_receive(canio_listener_obj_t *self) {
140141
FLEXCAN_ClearMbStatusFlags(self->can->data->base, (uint32_t)kFLEXCAN_RxFifoFrameAvlFlag);
141142

142143
canio_message_obj_t *message = m_new_obj(canio_message_obj_t);
143-
if (!mimxrt_flexcan_frame_to_canio_message_obj(&rx_frame, message)) {
144-
mp_raise_ValueError(MP_ERROR_TEXT("Unable to receive CAN Message: missing or malformed flexcan frame"));
144+
memset(message, 0, sizeof(canio_message_obj_t));
145+
146+
if (rx_frame.format == kFLEXCAN_FrameFormatExtend) {
147+
message->extended = true;
148+
message->id = rx_frame.id;
149+
} else {
150+
message->extended = false;
151+
message->id = rx_frame.id >> 18; // standard ids are left-aligned
145152
}
146153

154+
if (rx_frame.type == kFLEXCAN_FrameTypeRemote) {
155+
message->base.type = &canio_remote_transmission_request_type;
156+
} else {
157+
message->base.type = &canio_message_type;
158+
}
159+
160+
message->size = rx_frame.length;
161+
162+
// We can safely copy all bytes, as both flexcan_frame_t and
163+
// canio_message_obj_t define the data array as 8 bytes long.
164+
message->data[0] = rx_frame.dataByte0;
165+
message->data[1] = rx_frame.dataByte1;
166+
message->data[2] = rx_frame.dataByte2;
167+
message->data[3] = rx_frame.dataByte3;
168+
message->data[4] = rx_frame.dataByte4;
169+
message->data[5] = rx_frame.dataByte5;
170+
message->data[6] = rx_frame.dataByte6;
171+
message->data[7] = rx_frame.dataByte7;
172+
147173
return message;
148174
}
149175

ports/mimxrt10xx/common-hal/canio/__init__.c

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -25,79 +25,3 @@
2525
*/
2626

2727
#include "common-hal/canio/__init__.h"
28-
#include "shared-bindings/canio/RemoteTransmissionRequest.h"
29-
30-
// Convert from back from FLEXCAN IDs to normal CAN IDs.
31-
#define FLEXCAN_ID_TO_CAN_ID_STD(id) \
32-
((uint32_t)((((uint32_t)(id)) & CAN_ID_STD_MASK) >> CAN_ID_STD_SHIFT))
33-
34-
#define FLEXCAN_ID_TO_CAN_ID_EXT(id) \
35-
((uint32_t)((((uint32_t)(id)) & (CAN_ID_STD_MASK | CAN_ID_EXT_MASK)) \
36-
>> CAN_ID_EXT_SHIFT))
37-
38-
bool mimxrt_canio_message_obj_to_flexcan_frame(canio_message_obj_t *src, flexcan_frame_t *dst)
39-
{
40-
memset(dst, 0, sizeof(*dst)); // Zero out output.
41-
if (src == NULL) return false; // Missing input.
42-
43-
if (src->extended) { // CAN Frame Identifier (STD or EXT format).
44-
dst->id = FLEXCAN_ID_EXT(src->id); // CAN Frame Identifier (EXT).
45-
dst->format = kFLEXCAN_FrameFormatExtend;
46-
} else {
47-
dst->id = FLEXCAN_ID_STD(src->id); // CAN Frame Identifier (STD).
48-
dst->format = kFLEXCAN_FrameFormatStandard;
49-
}
50-
51-
bool rtr = src->base.type == &canio_remote_transmission_request_type;
52-
if (rtr) { // CAN Frame Type(DATA or REMOTE).
53-
dst->type = kFLEXCAN_FrameTypeRemote;
54-
} else {
55-
dst->type = kFLEXCAN_FrameTypeData;
56-
}
57-
58-
dst->length = src->size; // CAN frame data length in bytes (Range: 0~8).
59-
60-
dst->dataByte0 = src->data[0];
61-
dst->dataByte1 = src->data[1];
62-
dst->dataByte2 = src->data[2];
63-
dst->dataByte3 = src->data[3];
64-
dst->dataByte4 = src->data[4];
65-
dst->dataByte5 = src->data[5];
66-
dst->dataByte6 = src->data[6];
67-
dst->dataByte7 = src->data[7];
68-
69-
return true;
70-
}
71-
72-
bool mimxrt_flexcan_frame_to_canio_message_obj(flexcan_frame_t *src, canio_message_obj_t *dst)
73-
{
74-
memset(dst, 0, sizeof(*dst)); // Zero out output.
75-
if (src == NULL) return false; // Missing input.
76-
77-
if (src->format == kFLEXCAN_FrameFormatExtend) { // CAN Frame Identifier (STD or EXT format).
78-
dst->extended = true;
79-
dst->id = FLEXCAN_ID_TO_CAN_ID_EXT(src->id); // CAN Frame Identifier (EXT).
80-
} else {
81-
dst->extended = false;
82-
dst->id = FLEXCAN_ID_TO_CAN_ID_STD(src->id); // CAN Frame Identifier (STD).
83-
}
84-
85-
if (src->type == kFLEXCAN_FrameTypeRemote) { // CAN Frame Type(DATA or REMOTE).
86-
dst->base.type = &canio_remote_transmission_request_type;
87-
} else {
88-
dst->base.type = &canio_message_type;
89-
}
90-
91-
dst->size = src->length; // CAN frame data length in bytes (Range: 0~8).
92-
93-
dst->data[0] = src->dataByte0;
94-
dst->data[1] = src->dataByte1;
95-
dst->data[2] = src->dataByte2;
96-
dst->data[3] = src->dataByte3;
97-
dst->data[4] = src->dataByte4;
98-
dst->data[5] = src->dataByte5;
99-
dst->data[6] = src->dataByte6;
100-
dst->data[7] = src->dataByte7;
101-
102-
return true;
103-
}

ports/mimxrt10xx/common-hal/canio/__init__.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,6 @@
2929
#include "shared-module/canio/Message.h"
3030
#include "sdk/drivers/flexcan/fsl_flexcan.h"
3131

32-
typedef struct canio_listener canio_listener_t;
33-
typedef struct canio_can canio_can_t;
34-
typedef uint32_t canio_can_filter_t;
35-
3632
// There are 64 message buffers in each mimxrt10xx chip.
3733
// Rx fifo will use the message buffers at the front (from index zero).
3834
// As far as I can see rx fifo uses message buffer 0 to 5.
@@ -75,7 +71,3 @@ typedef struct {
7571
uint8_t tx_state;
7672
uint32_t rx_fifo_filter[MIMXRT10XX_FLEXCAN_RX_FILTER_COUNT];
7773
} mimxrt10xx_flexcan_data_t;
78-
79-
bool mimxrt_canio_message_obj_to_flexcan_frame(canio_message_obj_t *src, flexcan_frame_t *dst);
80-
bool mimxrt_flexcan_frame_to_canio_message_obj(flexcan_frame_t *src, canio_message_obj_t *dst);
81-

ports/mimxrt10xx/tools/gen_peripherals_data.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,6 @@ def rename_instance(instance:str)-> str:
182182
continue
183183
alt = int(alt[3:])
184184
value = int(evalue.find("value").text, 0)
185-
#print(f"instance: {instance}, signal: {signal}, pin_name: {pin_name}")
186185
peripheral_inputs[instance][signal][pin_name] = [alt, name, value]
187186
# Mux registers come before PAD registers.
188187
elif name.startswith("SW_MUX_CTL_PAD_GPIO"):
@@ -325,7 +324,6 @@ def rename_instance(instance:str)-> str:
325324
for signal in SIGNALS[ptype]:
326325
pin_count = 0
327326
for instance in instances:
328-
###print(f"instance: {instance}")
329327
if instance not in peripheral_inputs or signal not in peripheral_inputs[instance]:
330328
continue
331329
pin_count += len(peripheral_inputs[instance][signal])

0 commit comments

Comments
 (0)