30 #include "temu-c/Support/Objsys.h"
63 temu_canIsExtendedFrame(temu_CanFrame *Frame)
65 return (Frame
->Flags >> 29) & 1;
68 temu_canIsRemoteTransmissionRequest(temu_CanFrame *Frame)
70 return (Frame
->Flags >> 30) & 1;
75 temu_canSetAck(temu_CanFrame *Frame)
80 static inline uint32_t
81 temu_canGetAck(temu_CanFrame *Frame)
83 return (Frame
->Flags >> 31) & 1;
87 static inline uint32_t
88 temu_canGetIdent(temu_CanFrame *Frame)
90 if (temu_canIsExtendedFrame(Frame)) {
91 return Frame
->Flags & 0x1fffffff;
93 return (Frame
->Flags >> 18) & 0x7ff;
98 temu_canMakeBasicFrame(temu_CanFrame *Frame, uint32_t Ident, uint32_t RTR,
99 uint32_t Length, uint8_t *Data)
101 Frame
->Flags = (Ident << 18) | (RTR << 30);
104 if (Length && !RTR) {
105 memcpy(Frame->Data, Data, Length > 8 ? 8 : Length);
110 temu_canMakeExtFrame(temu_CanFrame *Frame, uint32_t Ident, uint32_t RTR,
111 uint32_t Length, uint8_t *Data)
113 Frame
->Flags = Ident | (RTR << 30) | (1 << 29);
116 if (Length && !RTR) {
117 memcpy(Frame->Data, Data, Length > 8 ? 8 : Length);
121 static inline uint32_t
122 temu_canBitsForFrame(temu_CanFrame *Frame)
124 if (temu_canIsExtendedFrame(Frame)) {
126 if (temu_canIsRemoteTransmissionRequest(Frame)) {
130 return 1 + 11 + 1 + 1 + 18 + 1 + 2 + 4 + 15 + 1 + 1 + 1 + 7 + DataLen;
134 if (temu_canIsRemoteTransmissionRequest(Frame)) {
137 return 1 + 11 + 1 + 1 + 1 + 4 + 15 + 1 + 1 + 1 + 7 + DataLen;
151 #define TEMU_CAN_DEV_IFACE_TYPE "CanDevIface"
152 #define TEMU_CAN_BUS_IFACE_TYPE "CanBusIface"
154 TEMU_IFACE_REFERENCE_TYPE(temu_CanDev);
155 TEMU_IFACE_REFERENCE_TYPE(temu_CanBus);
160 void (*
receive)(
void *Dev, temu_CanFrame *Frame);
164 void (*
connect)(
void *Bus, temu_CanDevIfaceRef Dev);
167 void (*
send)(
void *Bus,
void *Sender, temu_CanFrame *Frame);
183 void (*
setFilter)(
void *Bus, temu_CanDevIfaceRef Dev,
int FilterID,
184 uint32_t Mask, uint32_t Code);