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 
26 #ifndef CAN_CAN_H
27 #define CAN_CAN_H
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 #include <stdint.h>
34 
35 #if defined(__linux__)
36 
37 #include <linux/can.h>
38 #include <libsocketcan.h>
39 
40 #else
41 
47 #define CAN_MAX_DLEN (8)
48 #define CANFD_MAX_DLEN (64)
55 /* special address description flags for the CAN_ID */
56 #define CAN_EFF_FLAG (0x80000000U)
57 #define CAN_RTR_FLAG (0x40000000U)
58 #define CAN_ERR_FLAG (0x20000000U)
60 /* valid bits in CAN ID for frame formats */
61 #define CAN_SFF_MASK (0x000007FFU)
62 #define CAN_EFF_MASK (0x1FFFFFFFU)
63 #define CAN_ERR_MASK (0x1FFFFFFFU)
70 #define CANFD_BRS 0x01
71 #define CANFD_ESI 0x02
72 #define CANFD_FDF 0x04
78  enum can_state {
85  CAN_STATE_MAX
86  };
87 
96 typedef uint32_t canid_t;
97 
101 struct can_frame {
103  union {
104  uint8_t len;
105  uint8_t can_dlc;
106  };
107  uint8_t __pad;
108  uint8_t __res0;
109  uint8_t __res1;
111  uint8_t data[CAN_MAX_DLEN] __attribute__((aligned(8)));
112 };
113 
114 #ifdef MODULE_FDCAN
115 struct canfd_frame {
116  canid_t can_id;
117  uint8_t len;
118  uint8_t flags;
119  uint8_t __res0;
120  uint8_t __res1;
122  uint8_t data[CANFD_MAX_DLEN] __attribute__((aligned(8)));
123 };
124 #endif
125 
129 struct can_filter {
132 #if (MODULE_CAN_RX_MAILBOX)
133  uint8_t target_mailbox;
134 #endif
135 };
136 
145  uint32_t bitrate;
146  uint32_t sample_point;
147  uint32_t tq;
148  uint32_t prop_seg;
149  uint32_t phase_seg1;
150  uint32_t phase_seg2;
151  uint32_t sjw;
152  uint32_t brp;
153 };
154 
161  uint32_t tseg1_min;
162  uint32_t tseg1_max;
163  uint32_t tseg2_min;
164  uint32_t tseg2_max;
165  uint32_t sjw_max;
166  uint32_t brp_min;
167  uint32_t brp_max;
168  uint32_t brp_inc;
169 };
170 
171 #endif /* defined(__linux__) */
172 
176 #ifdef MODULE_FDCAN
177 typedef struct canfd_frame can_frame_t;
178 #else
179 typedef struct can_frame can_frame_t;
180 #endif
181 
182 #ifdef __cplusplus
183 }
184 #endif
185 
186 #endif /* CAN_CAN_H */
187 
#define CANFD_MAX_DLEN
CAN FD maximum data length.
Definition: can.h:48
can_state
CAN operational and error states.
Definition: can.h:78
uint32_t canid_t
Controller Area Network Identifier structure.
Definition: can.h:96
#define CAN_MAX_DLEN
Max data length for classic and FD CAN frames (compliant with libsocketcan macros)
Definition: can.h:47
@ CAN_STATE_ERROR_ACTIVE
RX/TX error count < 96.
Definition: can.h:79
@ CAN_STATE_ERROR_WARNING
RX/TX error count < 128.
Definition: can.h:80
@ CAN_STATE_SLEEPING
Device is sleeping.
Definition: can.h:84
@ CAN_STATE_STOPPED
Device is stopped.
Definition: can.h:83
@ CAN_STATE_BUS_OFF
RX/TX error count >= 256.
Definition: can.h:82
@ CAN_STATE_ERROR_PASSIVE
RX/TX error count < 256.
Definition: can.h:81
CAN hardware-dependent bit-timing constant.
Definition: can.h:160
uint32_t brp_min
Bit-rate prescaler, min value.
Definition: can.h:166
uint32_t tseg1_min
Time segment 1 = prop_seg + phase_seg1, min value.
Definition: can.h:161
uint32_t brp_max
Bit-rate prescaler, max value.
Definition: can.h:167
uint32_t tseg1_max
Time segment 1, max value.
Definition: can.h:162
uint32_t tseg2_min
Time segment 2 = phase_seg2, min value.
Definition: can.h:163
uint32_t brp_inc
Bit-rate prescaler, increment.
Definition: can.h:168
uint32_t tseg2_max
Time segment 2, max value.
Definition: can.h:164
uint32_t sjw_max
Synchronisation jump width.
Definition: can.h:165
CAN bit-timing parameters.
Definition: can.h:144
uint32_t tq
Time quanta (TQ) in nanoseconds.
Definition: can.h:147
uint32_t sample_point
Sample point in one-tenth of a percent.
Definition: can.h:146
uint32_t phase_seg1
Phase buffer segment 1 in TQs.
Definition: can.h:149
uint32_t bitrate
Bit-rate in bits/second.
Definition: can.h:145
uint32_t brp
Bit-rate prescaler.
Definition: can.h:152
uint32_t phase_seg2
Phase buffer segment 2 in TQs.
Definition: can.h:150
uint32_t sjw
Synchronisation jump width in TQs.
Definition: can.h:151
uint32_t prop_seg
Propagation segment in TQs.
Definition: can.h:148
Controller Area Network filter.
Definition: can.h:129
canid_t can_mask
Mask.
Definition: can.h:131
canid_t can_id
CAN ID.
Definition: can.h:130
Controller Area Network frame.
Definition: can.h:101
uint8_t __pad
padding
Definition: can.h:107
uint8_t len
frame payload length in byte (0 .
Definition: can.h:104
uint8_t __res1
reserved / padding
Definition: can.h:109
uint8_t can_dlc
deprecated - see SocketCAN documentation
Definition: can.h:105
uint8_t __res0
reserved / padding
Definition: can.h:108
uint8_t data[CAN_MAX_DLEN]
Frame data.
Definition: can.h:111
canid_t can_id
32 bit CAN_ID + EFF/RTR/ERR flags
Definition: can.h:102