Loading...
Searching...
No Matches
isotp.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2016 OTA keys S.A.
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24#include "can/can.h"
25#include "can/common.h"
26#include "compiler_hints.h"
27#include "net/gnrc/pktbuf.h"
28#include "thread.h"
29#include "ztimer.h"
30
31#ifndef CAN_ISOTP_BS
35# define CAN_ISOTP_BS (10)
36#endif
37
38#ifndef CAN_ISOTP_STMIN
42# define CAN_ISOTP_STMIN (5)
43#endif
44
45#ifndef CAN_ISOTP_WFTMAX
49# define CAN_ISOTP_WFTMAX (1)
50#endif
51
58 uint8_t bs;
59
65 uint8_t stmin;
66
67 uint8_t wftmax;
68};
69
83
89struct tpcon {
90 unsigned idx;
91 uint8_t state;
92 uint8_t bs;
93 uint8_t sn;
96};
97
117
122#define CAN_ISOTP_RX_FLAGS_MASK 0x0000FFFF
123#define CAN_ISOTP_LISTEN_MODE 0x0001
124#define CAN_ISOTP_EXTEND_ADDR 0x0002
125#define CAN_ISOTP_TX_PADDING 0x0004
126#define CAN_ISOTP_HALF_DUPLEX 0x0040
127#define CAN_ISOTP_RX_EXT_ADDR 0x0200
128
129#define CAN_ISOTP_TX_FLAGS_MASK 0xFFFF0000
130#define CAN_ISOTP_TX_DONT_WAIT 0x00010000
132
137#define CAN_ISOTP_DEFAULT_FLAGS 0
138#define CAN_ISOTP_DEFAULT_EXT_ADDRESS 0x00
139#define CAN_ISOTP_DEFAULT_PAD_CONTENT 0xCC /* prevent bit-stuffing */
140#define CAN_ISOTP_DEFAULT_FRAME_TXTIME 0
141#define CAN_ISOTP_DEFAULT_RECV_BS 0
142#define CAN_ISOTP_DEFAULT_RECV_STMIN 0x00
143#define CAN_ISOTP_DEFAULT_RECV_WFTMAX 0
145
156kernel_pid_t isotp_init(char *stack, int stacksize, char priority, const char *name);
157
169ACCESS(read_only, 2, 3)
170int isotp_send(struct isotp *isotp, const void *buf, int len, int flags);
171
187int isotp_bind(struct isotp *isotp, can_reg_entry_t *entry, void *arg,
188 struct isotp_fc_options *fc_options);
189
201
210
211#ifdef __cplusplus
212}
213#endif
214
Common macros and compiler attributes/pragmas configuration.
#define ACCESS(mode, ptr_idx, size_idx)
Emit an attribute (if supported by the compiler) that declares how a function will access its paramet...
int16_t kernel_pid_t
Unique process identifier.
Definition sched.h:134
struct gnrc_pktsnip gnrc_pktsnip_t
Type to represent parts (either headers or payload) of a packet, called snips.
struct can_rx_data can_rx_data_t
Received data structure.
struct can_reg_entry can_reg_entry_t
registry entry
uint32_t canid_t
Controller Area Network Identifier structure.
Definition can.h:92
int isotp_release(struct isotp *isotp)
Release a bound isotp channel.
int isotp_send(struct isotp *isotp, const void *buf, int len, int flags)
Send data through an isotp channel.
kernel_pid_t isotp_init(char *stack, int stacksize, char priority, const char *name)
Initialize the isotp layer.
void isotp_free_rx(can_rx_data_t *rx)
Free a received buffer.
int isotp_bind(struct isotp *isotp, can_reg_entry_t *entry, void *arg, struct isotp_fc_options *fc_options)
Bind an isotp channel.
Interface definition for the global network buffer.
The isotp_fc_options struct.
Definition isotp.h:57
uint8_t wftmax
max.
Definition isotp.h:67
uint8_t bs
blocksize provided in FC frame, 0 = off
Definition isotp.h:58
uint8_t stmin
separation time provided in FC frame 0x00 - 0x7F : 0 - 127 ms 0x80 - 0xF0 : reserved 0xF1 - 0xF9 : 10...
Definition isotp.h:65
The isotp_options struct.
Definition isotp.h:75
uint8_t txpad_content
set content of padding byte (tx)
Definition isotp.h:80
uint8_t rx_ext_address
set address for extended addressing
Definition isotp.h:81
canid_t rx_id
Receive CAN ID.
Definition isotp.h:77
uint8_t ext_address
set address for extended addressing
Definition isotp.h:79
uint16_t flags
set flags for isotp behaviour.
Definition isotp.h:78
canid_t tx_id
transmit CAN ID
Definition isotp.h:76
The isotp struct.
Definition isotp.h:103
struct isotp_options opt
channel options
Definition isotp.h:105
uint8_t tx_wft
transmit wait counter
Definition isotp.h:114
void * arg
upper layer private arg
Definition isotp.h:115
struct isotp_fc_options rxfc
rx flow control options (defined locally)
Definition isotp.h:106
struct isotp * next
next bound channel
Definition isotp.h:104
ztimer_t rx_timer
timer for rx operations
Definition isotp.h:111
struct isotp_fc_options txfc
tx flow control options (defined remotely)
Definition isotp.h:107
ztimer_t tx_timer
timer for tx operations
Definition isotp.h:110
struct tpcon rx
receive state
Definition isotp.h:109
uint32_t tx_gap
transmit gap from fc (in us)
Definition isotp.h:113
struct tpcon tx
transmit state
Definition isotp.h:108
can_reg_entry_t entry
entry containing ifnum and upper layer msg system
Definition isotp.h:112
The tpcon struct.
Definition isotp.h:89
unsigned idx
current index in buf
Definition isotp.h:90
gnrc_pktsnip_t * snip
allocated snip containing data buffer
Definition isotp.h:95
uint8_t sn
current sequence number
Definition isotp.h:93
uint8_t state
the protocol state
Definition isotp.h:91
uint8_t bs
block size
Definition isotp.h:92
int tx_handle
handle of the last sent frame
Definition isotp.h:94
ztimer structure
Definition ztimer.h:316
Definitions high-level CAN interface.
Definitions of high-level CAN interface.
ztimer API