Loading...
Searching...
No Matches
can.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2016 OTA keys S.A.
3 *
4 * This file is subject to the terms and conditions of the GNU Lesser General
5 * Public License v2.1. See the file LICENSE in the top level directory for more
6 * details.
7 */
8
9#pragma once
10
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32#include <stdint.h>
33
34#if defined(__linux__)
35
36#include <linux/can.h>
37#include <libsocketcan.h>
38
39#else
40
46#define CAN_MAX_DLEN (8)
47#define CANFD_MAX_DLEN (64)
49
54/* special address description flags for the CAN_ID */
55#define CAN_EFF_FLAG (0x80000000U)
56#define CAN_RTR_FLAG (0x40000000U)
57#define CAN_ERR_FLAG (0x20000000U)
58
59/* valid bits in CAN ID for frame formats */
60#define CAN_SFF_MASK (0x000007FFU)
61#define CAN_EFF_MASK (0x1FFFFFFFU)
62#define CAN_ERR_MASK (0x1FFFFFFFU)
64
69#define CANFD_BRS 0x01
70#define CANFD_ESI 0x02
71#define CANFD_FDF 0x04
73
86
95typedef uint32_t canid_t;
96
100struct can_frame {
102 union {
103 uint8_t len;
104 uint8_t can_dlc;
105 };
106 uint8_t __pad;
107 uint8_t __res0;
108 uint8_t __res1;
110 uint8_t data[CAN_MAX_DLEN] __attribute__((aligned(8)));
111};
112
113#ifdef MODULE_FDCAN
114struct canfd_frame {
115 canid_t can_id;
116 uint8_t len;
117 uint8_t flags;
118 uint8_t __res0;
119 uint8_t __res1;
121 uint8_t data[CANFD_MAX_DLEN] __attribute__((aligned(8)));
122};
123#endif
124
131#if (MODULE_CAN_RX_MAILBOX)
132 uint8_t target_mailbox;
133#endif
134};
135
144 uint32_t bitrate;
145 uint32_t sample_point;
146 uint32_t tq;
147 uint32_t prop_seg;
148 uint32_t phase_seg1;
149 uint32_t phase_seg2;
150 uint32_t sjw;
151 uint32_t brp;
152};
153
160 uint32_t tseg1_min;
161 uint32_t tseg1_max;
162 uint32_t tseg2_min;
163 uint32_t tseg2_max;
164 uint32_t sjw_max;
165 uint32_t brp_min;
166 uint32_t brp_max;
167 uint32_t brp_inc;
168};
169
170#endif /* defined(__linux__) */
171
175#ifdef MODULE_FDCAN
176typedef struct canfd_frame can_frame_t;
177#else
178typedef struct can_frame can_frame_t;
179#endif
180
181#ifdef __cplusplus
182}
183#endif
184
#define CANFD_MAX_DLEN
CAN FD maximum data length.
Definition can.h:47
struct can_frame can_frame_t
CAN frame.
Definition can.h:178
can_state
CAN operational and error states.
Definition can.h:77
uint32_t canid_t
Controller Area Network Identifier structure.
Definition can.h:95
#define CAN_MAX_DLEN
Max data length for classic and FD CAN frames (compliant with libsocketcan macros)
Definition can.h:46
@ CAN_STATE_ERROR_ACTIVE
RX/TX error count < 96.
Definition can.h:78
@ CAN_STATE_ERROR_WARNING
RX/TX error count < 128.
Definition can.h:79
@ CAN_STATE_SLEEPING
Device is sleeping.
Definition can.h:83
@ CAN_STATE_STOPPED
Device is stopped.
Definition can.h:82
@ CAN_STATE_BUS_OFF
RX/TX error count >= 256.
Definition can.h:81
@ CAN_STATE_ERROR_PASSIVE
RX/TX error count < 256.
Definition can.h:80
CAN hardware-dependent bit-timing constant.
Definition can.h:159
uint32_t brp_min
Bit-rate prescaler, min value.
Definition can.h:165
uint32_t tseg1_min
Time segment 1 = prop_seg + phase_seg1, min value.
Definition can.h:160
uint32_t brp_max
Bit-rate prescaler, max value.
Definition can.h:166
uint32_t tseg1_max
Time segment 1, max value.
Definition can.h:161
uint32_t tseg2_min
Time segment 2 = phase_seg2, min value.
Definition can.h:162
uint32_t brp_inc
Bit-rate prescaler, increment.
Definition can.h:167
uint32_t tseg2_max
Time segment 2, max value.
Definition can.h:163
uint32_t sjw_max
Synchronisation jump width.
Definition can.h:164
CAN bit-timing parameters.
Definition can.h:143
uint32_t tq
Time quanta (TQ) in nanoseconds.
Definition can.h:146
uint32_t sample_point
Sample point in one-tenth of a percent.
Definition can.h:145
uint32_t phase_seg1
Phase buffer segment 1 in TQs.
Definition can.h:148
uint32_t bitrate
Bit-rate in bits/second.
Definition can.h:144
uint32_t brp
Bit-rate prescaler.
Definition can.h:151
uint32_t phase_seg2
Phase buffer segment 2 in TQs.
Definition can.h:149
uint32_t sjw
Synchronisation jump width in TQs.
Definition can.h:150
uint32_t prop_seg
Propagation segment in TQs.
Definition can.h:147
Controller Area Network filter.
Definition can.h:128
canid_t can_mask
Mask.
Definition can.h:130
canid_t can_id
CAN ID.
Definition can.h:129
Controller Area Network frame.
Definition can.h:100
uint8_t __pad
padding
Definition can.h:106
uint8_t len
frame payload length in byte (0 .
Definition can.h:103
uint8_t __res1
reserved / padding
Definition can.h:108
uint8_t can_dlc
deprecated - see SocketCAN documentation
Definition can.h:104
uint8_t __res0
reserved / padding
Definition can.h:107
uint8_t data[CAN_MAX_DLEN]
Frame data.
Definition can.h:110
canid_t can_id
32 bit CAN_ID + EFF/RTR/ERR flags
Definition can.h:101