|
25 | 25 | */
|
26 | 26 |
|
27 | 27 | #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 |
| -} |
0 commit comments