CAN CoreX 2.3.1
Table-driven CAN, CAN FD, ISO-TP, network simulation, and bus monitoring library
Loading...
Searching...
No Matches
can_corex_isotp.h
Go to the documentation of this file.
1/*
2 * This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 *
6 * Author: Adrian Pietrzak
7 * GitHub: https://github.com/AdrianPietrzak1998
8 * Created: Jan 22, 2026
9 */
10
11#ifndef CAN_COREX_CAN_COREX_ISOTP_H_
12#define CAN_COREX_CAN_COREX_ISOTP_H_
13
14#include "can_corex.h"
15
16#ifdef __cplusplus
17extern "C"
18{
19#endif
20
30
39#ifndef CCX_ISOTP_MAX_CLASSIC_DATA_SIZE
40#define CCX_ISOTP_MAX_CLASSIC_DATA_SIZE 4095U
41#endif
42
52#if CCX_ENABLE_CANFD
53#ifndef CCX_ISOTP_MAX_FD_DATA_SIZE
54#define CCX_ISOTP_MAX_FD_DATA_SIZE UINT32_MAX
55#endif
56#endif
57
62#ifndef CCX_ISOTP_MAX_DATA_SIZE
63#if CCX_ENABLE_CANFD
64#define CCX_ISOTP_MAX_DATA_SIZE CCX_ISOTP_MAX_FD_DATA_SIZE
65#else
66#define CCX_ISOTP_MAX_DATA_SIZE CCX_ISOTP_MAX_CLASSIC_DATA_SIZE
67#endif
68#endif
69
70#if CCX_ENABLE_CANFD
71 typedef uint32_t CCX_ISOTP_Length_t;
72#else
73typedef uint16_t CCX_ISOTP_Length_t;
74#endif
75
83
87 typedef enum
88 {
89 CCX_ISOTP_PCI_SF = 0x00, /* Single Frame: [0x0N | data] */
90 CCX_ISOTP_PCI_FF = 0x10, /* First Frame: [0x1L LL | data] */
91 CCX_ISOTP_PCI_CF = 0x20, /* Consecutive Frame: [0x2N | data] */
92 CCX_ISOTP_PCI_FC = 0x30 /* Flow Control: [0x30 | FS | BS | STmin] */
94
95 typedef enum
96 {
97 CCX_ISOTP_LENGTH_FORMAT_STANDARD = 0,
98 CCX_ISOTP_LENGTH_FORMAT_EXTENDED
99 } CCX_ISOTP_LengthFormat_t;
100
101#if CCX_ENABLE_CANFD
102 typedef enum
103 {
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
112 } CCX_ISOTP_TxDL_t;
113#endif
114
121
125 typedef enum
126 {
127 CCX_ISOTP_FC_CTS = 0x00, /* Continue To Send */
128 CCX_ISOTP_FC_WAIT = 0x01, /* Wait */
129 CCX_ISOTP_FC_OVFLW = 0x02 /* Overflow */
131
135 typedef enum
136 {
137 CCX_ISOTP_OK = 0,
138 CCX_ISOTP_ERROR_NULL_PTR,
139 CCX_ISOTP_ERROR_INVALID_ARG,
140 CCX_ISOTP_ERROR_TIMEOUT_FC, /* Timeout while waiting for Flow Control (`N_Bs`) */
141 CCX_ISOTP_ERROR_TIMEOUT = CCX_ISOTP_ERROR_TIMEOUT_FC, /* Legacy alias */
142 CCX_ISOTP_ERROR_OVERFLOW,
143 CCX_ISOTP_ERROR_BUSY,
144 CCX_ISOTP_ERROR_SEQUENCE, /* Unexpected PCI / Flow Status / CF sequence number; may occur before any timeout if
145 a later frame arrives in time */
146 CCX_ISOTP_ERROR_BUFFER_TOO_SMALL,
147 CCX_ISOTP_ERROR_ABORTED,
148 CCX_ISOTP_ERROR_WAIT_EXCEEDED, /* Too many `FC.WAIT` frames received */
149 CCX_ISOTP_ERROR_TIMEOUT_CF_TX, /* Timeout while scheduling/sending next CF (`N_Cs`) */
150 CCX_ISOTP_ERROR_TIMEOUT_CF_RX, /* Timeout while waiting for next received CF (`N_Cr`) */
151 CCX_ISOTP_ERROR_MISSING_TIMEBASE,
152#if CCX_ENABLE_CANFD
153 CCX_ISOTP_ERROR_FD_NOT_SUPPORTED, /* Reserved for legacy compatibility */
154#endif
156
160 typedef enum
161 {
162 CCX_ISOTP_TX_STATE_IDLE = 0,
163 CCX_ISOTP_TX_STATE_WAIT_FC,
164 CCX_ISOTP_TX_STATE_SENDING_CF
166
170 typedef enum
171 {
172 CCX_ISOTP_RX_STATE_IDLE = 0,
173 CCX_ISOTP_RX_STATE_RECEIVING_CF
175
176 typedef enum
177 {
178 CCX_ISOTP_PADDING_DISABLED = 0,
179 CCX_ISOTP_PADDING_ENABLED = 1
180 } CCX_ISOTP_PaddingEnable_t;
181
188 typedef struct
189 {
190 CCX_ISOTP_PaddingEnable_t Enable; /* Enable or disable ISO-TP frame padding */
191 uint8_t PaddingByte; /* Byte value used for padding (e.g., 0xAA, 0xCC, 0x55) */
193
194#define CCX_ISOTP_NO_PADDING ((CCX_ISOTP_Padding_t){.Enable = CCX_ISOTP_PADDING_DISABLED, .PaddingByte = 0U})
195
196#define CCX_ISOTP_PADDING(byte) \
197 ((CCX_ISOTP_Padding_t){.Enable = CCX_ISOTP_PADDING_ENABLED, .PaddingByte = (uint8_t)(byte)})
198
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
208
209 typedef struct CCX_ISOTP_TX_t CCX_ISOTP_TX_t;
210 typedef struct CCX_ISOTP_RX_t CCX_ISOTP_RX_t;
211
241 typedef struct
242 {
243 uint32_t TxID; /* CAN ID for transmitting data */
244 uint8_t IDE_TxID : 1; /* use CCX_ide_t values: CCX_ID_STANDARD / CCX_ID_EXTENDED */
245#if CCX_ENABLE_CANFD
246 CCX_frame_format_t FrameFormat : 2; /* Session transport format: CLASSIC / FD / FD_BRS */
247 uint8_t TxDL; /* FD only: link-layer payload 8,12,16,20,24,32,48,64 */
248#endif
249 CCX_TIME_t N_Bs; /* Timeout for reception of FC after FF/CF in base ticks */
250 CCX_TIME_t N_Cs; /* Timeout between CF transmissions in base ticks */
251 uint8_t MaxWaitFrames; /* Number of FC.WAIT frames tolerated before aborting (0 = default 10) */
252 CCX_ISOTP_Padding_t Padding; /* Padding configuration */
253
254 void *UserData; /* User context pointer passed to callbacks */
255
256 /* Callbacks */
257 void (*OnTransmitComplete)(CCX_ISOTP_TX_t *Instance, void *UserData);
258 void (*OnError)(CCX_ISOTP_TX_t *Instance, CCX_ISOTP_Status_t Error, void *UserData);
260
300 typedef struct
301 {
302 uint32_t TxID; /* CAN ID for transmitting Flow Control */
303 uint8_t IDE_TxID : 1; /* use CCX_ide_t values: CCX_ID_STANDARD / CCX_ID_EXTENDED */
304#if CCX_ENABLE_CANFD
305 CCX_frame_format_t FrameFormat : 2; /* Expected transport format of received ISO-TP frames */
306 uint8_t FC_TxDL; /* FD only: link-layer payload used for transmitted FC frames */
307#endif
308 uint8_t BS; /* Block Size to request in FC (0 = no limit) */
309 uint8_t STmin; /* Separation Time minimum to request in FC */
310 CCX_TIME_t N_Cr; /* Timeout between received CF in base ticks. Detects silence, not correctness: if a later CF
311 arrives before `N_Cr` expires, RX may fail with `CCX_ISOTP_ERROR_SEQUENCE` instead of
312 `CCX_ISOTP_ERROR_TIMEOUT_CF_RX` */
313 CCX_ISOTP_Padding_t Padding; /* Padding configuration */
314
315 uint8_t *RxBuffer; /* Buffer for received data */
316 CCX_ISOTP_Length_t RxBufferSize; /* Size of RX buffer */
317 CCX_ISOTP_Length_t
318 ProgressCallbackInterval; /* Call progress callback every N newly received bytes (0 = disabled) */
319
320 void *UserData; /* User context pointer passed to callbacks */
321
322 /* Callbacks */
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,
325 void *UserData);
326 void (*OnReceiveProgress)(CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Length_t BytesReceived,
327 CCX_ISOTP_Length_t TotalLength, void *UserData);
328 void (*OnError)(CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Status_t Error, void *UserData);
330
335 {
336 CCX_instance_t *CanInstance; /* Bound CAN instance for this ISO-TP TX session */
339
340 const uint8_t *TxData; /* Pointer to data being transmitted */
341 CCX_ISOTP_Length_t TxDataLength; /* Total length of data to transmit */
342 CCX_ISOTP_Length_t TxDataOffset; /* Current offset in TxData */
343 uint8_t SequenceNumber; /* CF sequence number (0-15) */
344 uint8_t BlockCounter; /* Counter for BS */
345 CCX_TIME_t LastTick; /* Last activity timestamp in base ticks */
346 CCX_HR_TIME_t LastHighResTick; /* Last CF scheduling timestamp for sub-millisecond STmin */
347 uint8_t WaitFramesRemaining; /* Number of WAIT FC frames we can tolerate */
348 CCX_TIME_t STminTicks; /* STmin value from FC converted to base ticks */
349 CCX_HR_TIME_t STminHighResTicks; /* STmin value from FC converted to HR ticks when sub-millisecond */
350 uint8_t STminUsesHighRes; /* 1 when STmin must be enforced in HR domain */
351 uint8_t ActiveTxDL; /* Active link-layer payload for TX */
352 uint8_t MaxWaitFrames; /* Effective FC.WAIT tolerance for this instance */
353 uint8_t InitValid; /* Successful init state */
354 CCX_ISOTP_LengthFormat_t LengthFormat;
355 };
356
361 {
362 CCX_instance_t *CanInstance; /* Bound CAN instance for this ISO-TP RX session */
365
366 CCX_ISOTP_Length_t RxDataLength; /* Total expected length */
367 CCX_ISOTP_Length_t RxDataOffset; /* Current offset in RxBuffer */
368 uint8_t SequenceNumber; /* Expected CF sequence number (0-15) */
369 uint8_t BlockCounter; /* Counter for BS */
370 CCX_TIME_t LastTick; /* Last activity timestamp in base ticks */
371 CCX_ISOTP_Length_t LastProgressCallback; /* Offset at last progress callback */
372 uint8_t ActiveRxDL; /* CAN_DL announced by FF */
373 uint8_t InitValid; /* Successful init state */
374 CCX_ISOTP_LengthFormat_t LengthFormat;
375 };
376
394 void CCX_ISOTP_TX_Config_Init(CCX_ISOTP_TX_Config_t *Config, uint32_t TxID, uint8_t IDE_TxID, CCX_TIME_t N_Bs,
395 CCX_TIME_t N_Cs, CCX_ISOTP_Padding_t Padding, void *UserData,
396 void (*OnTransmitComplete)(CCX_ISOTP_TX_t *Instance, void *UserData),
397 void (*OnError)(CCX_ISOTP_TX_t *Instance, CCX_ISOTP_Status_t Error, void *UserData));
398
399#if CCX_ENABLE_CANFD
418 void CCX_ISOTP_TX_Config_InitFD(CCX_ISOTP_TX_Config_t *Config, uint32_t TxID, uint8_t IDE_TxID,
419 CCX_frame_format_t FrameFormat, uint8_t TxDL, CCX_TIME_t N_Bs, CCX_TIME_t N_Cs,
420 CCX_ISOTP_Padding_t Padding, void *UserData,
421 void (*OnTransmitComplete)(CCX_ISOTP_TX_t *Instance, void *UserData),
422 void (*OnError)(CCX_ISOTP_TX_t *Instance, CCX_ISOTP_Status_t Error,
423 void *UserData));
424#endif
425
439 const CCX_ISOTP_TX_Config_t *Config);
440
451
466 CCX_ISOTP_Status_t CCX_ISOTP_Transmit(CCX_ISOTP_TX_t *Instance, const uint8_t *Data, CCX_ISOTP_Length_t Length);
467
474
488 void CCX_ISOTP_TX_FC_Parser(const CCX_instance_t *CanInstance, CCX_message_t *Msg, uint16_t Slot, void *UserData);
489
513 void CCX_ISOTP_RX_Config_Init(CCX_ISOTP_RX_Config_t *Config, uint32_t TxID, uint8_t IDE_TxID, uint8_t BS,
514 uint8_t STmin, CCX_TIME_t N_Cr, uint8_t *RxBuffer, CCX_ISOTP_Length_t RxBufferSize,
515 CCX_ISOTP_Padding_t Padding, CCX_ISOTP_Length_t ProgressCallbackInterval,
516 void *UserData,
517 void (*OnReceiveStart)(CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Length_t TotalLength,
518 void *UserData),
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),
523 void (*OnError)(CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Status_t Error, void *UserData));
524
525#if CCX_ENABLE_CANFD
551 CCX_ISOTP_RX_Config_t *Config, uint32_t TxID, uint8_t IDE_TxID, CCX_frame_format_t FrameFormat, uint8_t FC_TxDL,
552 uint8_t BS, uint8_t STmin, CCX_TIME_t N_Cr, uint8_t *RxBuffer, CCX_ISOTP_Length_t RxBufferSize,
553 CCX_ISOTP_Padding_t Padding, CCX_ISOTP_Length_t ProgressCallbackInterval, void *UserData,
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,
556 void *UserData),
557 void (*OnReceiveProgress)(CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Length_t BytesReceived,
558 CCX_ISOTP_Length_t TotalLength, void *UserData),
559 void (*OnError)(CCX_ISOTP_RX_t *Instance, CCX_ISOTP_Status_t Error, void *UserData));
560#endif
561
574 const CCX_ISOTP_RX_Config_t *Config);
575
586
600 void CCX_ISOTP_RX_Parser(const CCX_instance_t *CanInstance, CCX_message_t *Msg, uint16_t Slot, void *UserData);
601
608
626#if CCX_ENABLE_CANFD
627#define CCX_ISOTP_RX_TABLE_ENTRY(isotp_rx_ptr, can_id, ide_flag) \
628 { \
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, \
631 .LastTick = 0 \
632 }
633
657#define CCX_ISOTP_TX_FC_TABLE_ENTRY(isotp_tx_ptr, fc_can_id, ide_flag) \
658 { \
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, \
661 .LastTick = 0 \
662 }
663
664#define CCX_ISOTP_RX_TABLE_ENTRY_EX(isotp_rx_ptr, can_id, ide_flag, frame_format) \
665 { \
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, \
668 .LastTick = 0 \
669 }
670
671#define CCX_ISOTP_TX_FC_TABLE_ENTRY_EX(isotp_tx_ptr, fc_can_id, ide_flag, frame_format) \
672 { \
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, \
675 .LastTick = 0 \
676 }
677#else
678#define CCX_ISOTP_RX_TABLE_ENTRY(isotp_rx_ptr, can_id, ide_flag) \
679 { \
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 \
682 }
683
684#define CCX_ISOTP_TX_FC_TABLE_ENTRY(isotp_tx_ptr, fc_can_id, ide_flag) \
685 { \
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 \
688 }
689#endif
690
692
693#ifdef __cplusplus
694}
695#endif
696
697#endif /* CAN_COREX_CAN_COREX_ISOTP_H_ */
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