11#ifndef CAN_COREX_CAN_COREX_ISOTP_H_
12#define CAN_COREX_CAN_COREX_ISOTP_H_
39#ifndef CCX_ISOTP_MAX_CLASSIC_DATA_SIZE
40#define CCX_ISOTP_MAX_CLASSIC_DATA_SIZE 4095U
53#ifndef CCX_ISOTP_MAX_FD_DATA_SIZE
54#define CCX_ISOTP_MAX_FD_DATA_SIZE UINT32_MAX
62#ifndef CCX_ISOTP_MAX_DATA_SIZE
64#define CCX_ISOTP_MAX_DATA_SIZE CCX_ISOTP_MAX_FD_DATA_SIZE
66#define CCX_ISOTP_MAX_DATA_SIZE CCX_ISOTP_MAX_CLASSIC_DATA_SIZE
71 typedef uint32_t CCX_ISOTP_Length_t;
73typedef uint16_t CCX_ISOTP_Length_t;
89 CCX_ISOTP_PCI_SF = 0x00,
90 CCX_ISOTP_PCI_FF = 0x10,
91 CCX_ISOTP_PCI_CF = 0x20,
92 CCX_ISOTP_PCI_FC = 0x30
97 CCX_ISOTP_LENGTH_FORMAT_STANDARD = 0,
98 CCX_ISOTP_LENGTH_FORMAT_EXTENDED
99 } CCX_ISOTP_LengthFormat_t;
104 CCX_ISOTP_TX_DL_8 = 8,
105 CCX_ISOTP_TX_DL_12 = 12,
106 CCX_ISOTP_TX_DL_16 = 16,
107 CCX_ISOTP_TX_DL_20 = 20,
108 CCX_ISOTP_TX_DL_24 = 24,
109 CCX_ISOTP_TX_DL_32 = 32,
110 CCX_ISOTP_TX_DL_48 = 48,
111 CCX_ISOTP_TX_DL_64 = 64
127 CCX_ISOTP_FC_CTS = 0x00,
128 CCX_ISOTP_FC_WAIT = 0x01,
129 CCX_ISOTP_FC_OVFLW = 0x02
138 CCX_ISOTP_ERROR_NULL_PTR,
139 CCX_ISOTP_ERROR_INVALID_ARG,
140 CCX_ISOTP_ERROR_TIMEOUT_FC,
141 CCX_ISOTP_ERROR_TIMEOUT = CCX_ISOTP_ERROR_TIMEOUT_FC,
142 CCX_ISOTP_ERROR_OVERFLOW,
143 CCX_ISOTP_ERROR_BUSY,
144 CCX_ISOTP_ERROR_SEQUENCE,
146 CCX_ISOTP_ERROR_BUFFER_TOO_SMALL,
147 CCX_ISOTP_ERROR_ABORTED,
148 CCX_ISOTP_ERROR_WAIT_EXCEEDED,
149 CCX_ISOTP_ERROR_TIMEOUT_CF_TX,
150 CCX_ISOTP_ERROR_TIMEOUT_CF_RX,
151 CCX_ISOTP_ERROR_MISSING_TIMEBASE,
153 CCX_ISOTP_ERROR_FD_NOT_SUPPORTED,
162 CCX_ISOTP_TX_STATE_IDLE = 0,
163 CCX_ISOTP_TX_STATE_WAIT_FC,
164 CCX_ISOTP_TX_STATE_SENDING_CF
172 CCX_ISOTP_RX_STATE_IDLE = 0,
173 CCX_ISOTP_RX_STATE_RECEIVING_CF
178 CCX_ISOTP_PADDING_DISABLED = 0,
179 CCX_ISOTP_PADDING_ENABLED = 1
180 } CCX_ISOTP_PaddingEnable_t;
190 CCX_ISOTP_PaddingEnable_t Enable;
194#define CCX_ISOTP_NO_PADDING ((CCX_ISOTP_Padding_t){.Enable = CCX_ISOTP_PADDING_DISABLED, .PaddingByte = 0U})
196#define CCX_ISOTP_PADDING(byte) \
197 ((CCX_ISOTP_Padding_t){.Enable = CCX_ISOTP_PADDING_ENABLED, .PaddingByte = (uint8_t)(byte)})
199#define CCX_ISOTP_STMIN_100US 0xF1U
200#define CCX_ISOTP_STMIN_200US 0xF2U
201#define CCX_ISOTP_STMIN_300US 0xF3U
202#define CCX_ISOTP_STMIN_400US 0xF4U
203#define CCX_ISOTP_STMIN_500US 0xF5U
204#define CCX_ISOTP_STMIN_600US 0xF6U
205#define CCX_ISOTP_STMIN_700US 0xF7U
206#define CCX_ISOTP_STMIN_800US 0xF8U
207#define CCX_ISOTP_STMIN_900US 0xF9U
244 uint8_t IDE_TxID : 1;
251 uint8_t MaxWaitFrames;
257 void (*OnTransmitComplete)(
CCX_ISOTP_TX_t *Instance,
void *UserData);
303 uint8_t IDE_TxID : 1;
316 CCX_ISOTP_Length_t RxBufferSize;
318 ProgressCallbackInterval;
323 void (*OnReceiveStart)(
CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Length_t TotalLength,
void *UserData);
324 void (*OnReceiveComplete)(
CCX_ISOTP_RX_t *Instance,
const uint8_t *Data, CCX_ISOTP_Length_t Length,
326 void (*OnReceiveProgress)(
CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Length_t BytesReceived,
327 CCX_ISOTP_Length_t TotalLength,
void *UserData);
340 const uint8_t *TxData;
341 CCX_ISOTP_Length_t TxDataLength;
342 CCX_ISOTP_Length_t TxDataOffset;
343 uint8_t SequenceNumber;
344 uint8_t BlockCounter;
346 CCX_HR_TIME_t LastHighResTick;
347 uint8_t WaitFramesRemaining;
348 CCX_TIME_t STminTicks;
349 CCX_HR_TIME_t STminHighResTicks;
350 uint8_t STminUsesHighRes;
352 uint8_t MaxWaitFrames;
354 CCX_ISOTP_LengthFormat_t LengthFormat;
366 CCX_ISOTP_Length_t RxDataLength;
367 CCX_ISOTP_Length_t RxDataOffset;
368 uint8_t SequenceNumber;
369 uint8_t BlockCounter;
371 CCX_ISOTP_Length_t LastProgressCallback;
374 CCX_ISOTP_LengthFormat_t LengthFormat;
396 void (*OnTransmitComplete)(
CCX_ISOTP_TX_t *Instance,
void *UserData),
421 void (*OnTransmitComplete)(
CCX_ISOTP_TX_t *Instance,
void *UserData),
514 uint8_t STmin, CCX_TIME_t N_Cr, uint8_t *RxBuffer, CCX_ISOTP_Length_t RxBufferSize,
517 void (*OnReceiveStart)(
CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Length_t TotalLength,
519 void (*OnReceiveComplete)(
CCX_ISOTP_RX_t *Instance,
const uint8_t *Data,
520 CCX_ISOTP_Length_t Length,
void *UserData),
521 void (*OnReceiveProgress)(
CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Length_t BytesReceived,
522 CCX_ISOTP_Length_t TotalLength,
void *UserData),
552 uint8_t BS, uint8_t STmin, CCX_TIME_t N_Cr, uint8_t *RxBuffer, CCX_ISOTP_Length_t RxBufferSize,
554 void (*OnReceiveStart)(
CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Length_t TotalLength,
void *UserData),
555 void (*OnReceiveComplete)(
CCX_ISOTP_RX_t *Instance,
const uint8_t *Data, CCX_ISOTP_Length_t Length,
557 void (*OnReceiveProgress)(
CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Length_t BytesReceived,
558 CCX_ISOTP_Length_t TotalLength,
void *UserData),
627#define CCX_ISOTP_RX_TABLE_ENTRY(isotp_rx_ptr, can_id, ide_flag) \
629 .ID = (can_id), .DLC = CCX_DLC_ANY, .IDE_flag = (ide_flag), .FrameFormat = CCX_FRAME_FORMAT_CLASSIC, \
630 .UserData = (isotp_rx_ptr), .TimeOut = 0, .Parser = CCX_ISOTP_RX_Parser, .TimeoutCallback = NULL, \
657#define CCX_ISOTP_TX_FC_TABLE_ENTRY(isotp_tx_ptr, fc_can_id, ide_flag) \
659 .ID = (fc_can_id), .DLC = CCX_DLC_ANY, .IDE_flag = (ide_flag), .FrameFormat = CCX_FRAME_FORMAT_CLASSIC, \
660 .UserData = (isotp_tx_ptr), .TimeOut = 0, .Parser = CCX_ISOTP_TX_FC_Parser, .TimeoutCallback = NULL, \
664#define CCX_ISOTP_RX_TABLE_ENTRY_EX(isotp_rx_ptr, can_id, ide_flag, frame_format) \
666 .ID = (can_id), .DLC = CCX_DLC_ANY, .IDE_flag = (ide_flag), .FrameFormat = (frame_format), \
667 .UserData = (isotp_rx_ptr), .TimeOut = 0, .Parser = CCX_ISOTP_RX_Parser, .TimeoutCallback = NULL, \
671#define CCX_ISOTP_TX_FC_TABLE_ENTRY_EX(isotp_tx_ptr, fc_can_id, ide_flag, frame_format) \
673 .ID = (fc_can_id), .DLC = CCX_DLC_ANY, .IDE_flag = (ide_flag), .FrameFormat = (frame_format), \
674 .UserData = (isotp_tx_ptr), .TimeOut = 0, .Parser = CCX_ISOTP_TX_FC_Parser, .TimeoutCallback = NULL, \
678#define CCX_ISOTP_RX_TABLE_ENTRY(isotp_rx_ptr, can_id, ide_flag) \
680 .ID = (can_id), .DLC = CCX_DLC_ANY, .IDE_flag = (ide_flag), .UserData = (isotp_rx_ptr), .TimeOut = 0, \
681 .Parser = CCX_ISOTP_RX_Parser, .TimeoutCallback = NULL, .LastTick = 0 \
684#define CCX_ISOTP_TX_FC_TABLE_ENTRY(isotp_tx_ptr, fc_can_id, ide_flag) \
686 .ID = (fc_can_id), .DLC = CCX_DLC_ANY, .IDE_flag = (ide_flag), .UserData = (isotp_tx_ptr), .TimeOut = 0, \
687 .Parser = CCX_ISOTP_TX_FC_Parser, .TimeoutCallback = NULL, .LastTick = 0 \
Core CAN CoreX public API.
CCX_frame_format_t
CAN frame format selection.
Definition can_corex.h:276
CCX_ISOTP_Status_t CCX_ISOTP_Transmit(CCX_ISOTP_TX_t *Instance, const uint8_t *Data, CCX_ISOTP_Length_t Length)
Transmit data using ISO-TP.
void CCX_ISOTP_TX_Poll(CCX_ISOTP_TX_t *Instance)
Poll ISO-TP TX instance (call periodically from main loop).
CCX_ISOTP_RX_State_t
ISO-TP RX state machine states.
Definition can_corex_isotp.h:171
void CCX_ISOTP_TX_Config_Init(CCX_ISOTP_TX_Config_t *Config, uint32_t TxID, uint8_t IDE_TxID, CCX_TIME_t N_Bs, CCX_TIME_t N_Cs, CCX_ISOTP_Padding_t Padding, void *UserData, void(*OnTransmitComplete)(CCX_ISOTP_TX_t *Instance, void *UserData), void(*OnError)(CCX_ISOTP_TX_t *Instance, CCX_ISOTP_Status_t Error, void *UserData))
Initialize ISO-TP TX configuration with defaults.
void CCX_ISOTP_RX_Poll(CCX_ISOTP_RX_t *Instance)
Poll ISO-TP RX instance (call periodically from main loop).
CCX_ISOTP_Status_t CCX_ISOTP_RX_Init(CCX_ISOTP_RX_t *Instance, CCX_instance_t *CanInstance, const CCX_ISOTP_RX_Config_t *Config)
Initialize ISO-TP RX instance.
CCX_ISOTP_FC_FS_t
Legal CAN FD link-layer payload sizes for ISO-TP sessions.
Definition can_corex_isotp.h:126
void CCX_ISOTP_TX_FC_Parser(const CCX_instance_t *CanInstance, CCX_message_t *Msg, uint16_t Slot, void *UserData)
Parser function for Flow Control frames (for TX side).
CCX_ISOTP_TX_State_t
ISO-TP TX state machine states.
Definition can_corex_isotp.h:161
void CCX_ISOTP_RX_Parser(const CCX_instance_t *CanInstance, CCX_message_t *Msg, uint16_t Slot, void *UserData)
Parser function for CAN CoreX RX table.
void CCX_ISOTP_RX_Config_Init(CCX_ISOTP_RX_Config_t *Config, uint32_t TxID, uint8_t IDE_TxID, uint8_t BS, uint8_t STmin, CCX_TIME_t N_Cr, uint8_t *RxBuffer, CCX_ISOTP_Length_t RxBufferSize, CCX_ISOTP_Padding_t Padding, CCX_ISOTP_Length_t ProgressCallbackInterval, void *UserData, void(*OnReceiveStart)(CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Length_t TotalLength, void *UserData), void(*OnReceiveComplete)(CCX_ISOTP_RX_t *Instance, const uint8_t *Data, CCX_ISOTP_Length_t Length, void *UserData), void(*OnReceiveProgress)(CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Length_t BytesReceived, CCX_ISOTP_Length_t TotalLength, void *UserData), void(*OnError)(CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Status_t Error, void *UserData))
Initialize ISO-TP RX configuration with defaults.
CCX_ISOTP_PCI_t
ISO-TP length type.
Definition can_corex_isotp.h:88
void CCX_ISOTP_RX_Config_InitFD(CCX_ISOTP_RX_Config_t *Config, uint32_t TxID, uint8_t IDE_TxID, CCX_frame_format_t FrameFormat, uint8_t FC_TxDL, uint8_t BS, uint8_t STmin, CCX_TIME_t N_Cr, uint8_t *RxBuffer, CCX_ISOTP_Length_t RxBufferSize, CCX_ISOTP_Padding_t Padding, CCX_ISOTP_Length_t ProgressCallbackInterval, void *UserData, void(*OnReceiveStart)(CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Length_t TotalLength, void *UserData), void(*OnReceiveComplete)(CCX_ISOTP_RX_t *Instance, const uint8_t *Data, CCX_ISOTP_Length_t Length, void *UserData), void(*OnReceiveProgress)(CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Length_t BytesReceived, CCX_ISOTP_Length_t TotalLength, void *UserData), void(*OnError)(CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Status_t Error, void *UserData))
Initialize ISO-TP RX FD configuration with defaults.
CCX_ISOTP_Status_t CCX_ISOTP_TX_Abort(CCX_ISOTP_TX_t *Instance)
Abort an active ISO-TP TX transfer.
CCX_ISOTP_Status_t
ISO-TP error codes.
Definition can_corex_isotp.h:136
void CCX_ISOTP_TX_Config_InitFD(CCX_ISOTP_TX_Config_t *Config, uint32_t TxID, uint8_t IDE_TxID, CCX_frame_format_t FrameFormat, uint8_t TxDL, CCX_TIME_t N_Bs, CCX_TIME_t N_Cs, CCX_ISOTP_Padding_t Padding, void *UserData, void(*OnTransmitComplete)(CCX_ISOTP_TX_t *Instance, void *UserData), void(*OnError)(CCX_ISOTP_TX_t *Instance, CCX_ISOTP_Status_t Error, void *UserData))
Initialize ISO-TP TX FD configuration with defaults.
CCX_ISOTP_Status_t CCX_ISOTP_TX_Init(CCX_ISOTP_TX_t *Instance, CCX_instance_t *CanInstance, const CCX_ISOTP_TX_Config_t *Config)
Initialize ISO-TP TX instance.
CCX_ISOTP_Status_t CCX_ISOTP_RX_Abort(CCX_ISOTP_RX_t *Instance)
Abort an active ISO-TP RX transfer.
ISO-TP padding configuration.
Definition can_corex_isotp.h:189
ISO-TP RX configuration structure.
Definition can_corex_isotp.h:301
ISO-TP RX instance structure.
Definition can_corex_isotp.h:361
ISO-TP TX configuration structure.
Definition can_corex_isotp.h:242
ISO-TP TX instance structure.
Definition can_corex_isotp.h:335
Definition can_corex.h:460
Structure representing a CAN message.
Definition can_corex.h:336