Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
can_frame.h
Go to the documentation of this file.
1
34
#ifndef _nmranet_can_h_
35
#define _nmranet_can_h_
36
37
#if defined (__linux__)
38
#include <
sys/socket.h
>
39
#include <linux/can.h>
40
#include <linux/can/raw.h>
41
#include <linux/can/error.h>
42
43
#define SET_CAN_FRAME_EFF(_frame) (_frame).can_id |= CAN_EFF_FLAG
44
#define SET_CAN_FRAME_RTR(_frame) (_frame).can_id |= CAN_RTR_FLAG
45
#define SET_CAN_FRAME_ERR(_frame) (_frame).can_id |= CAN_ERR_FLAG
46
#define CLR_CAN_FRAME_EFF(_frame) (_frame).can_id &= ~CAN_EFF_FLAG
47
#define CLR_CAN_FRAME_RTR(_frame) (_frame).can_id &= ~CAN_RTR_FLAG
48
#define CLR_CAN_FRAME_ERR(_frame) (_frame).can_id &= ~CAN_ERR_FLAG
49
#define IS_CAN_FRAME_EFF(_frame) ((_frame).can_id & CAN_EFF_FLAG)
50
#define IS_CAN_FRAME_RTR(_frame) ((_frame).can_id & CAN_RTR_FLAG)
51
#define IS_CAN_FRAME_ERR(_frame) ((_frame).can_id & CAN_ERR_FLAG)
52
53
#define GET_CAN_FRAME_ID_EFF(_frame) ((_frame).can_id & CAN_EFF_MASK)
54
#define GET_CAN_FRAME_ID(_frame) ((_frame).can_id & CAN_SFF_MASK)
55
#define SET_CAN_FRAME_ID_EFF(_frame, _value) \
56
{ \
57
(_frame).can_id &= ~CAN_EFF_MASK; \
58
(_frame).can_id += ((_value) & CAN_EFF_MASK); \
59
}
60
#define SET_CAN_FRAME_ID(_frame, _value) \
61
{ \
62
(_frame).can_id &= ~CAN_SFF_MASK; \
63
(_frame).can_id += ((_value) & CAN_SFF_MASK); \
64
}
65
66
#elif defined (__nuttx__) || defined (__FreeRTOS__) || defined (__MACH__) || \
67
defined (__WIN32__) || defined (__EMSCRIPTEN__) || defined (ESP_NONOS) || \
68
defined (ARDUINO) || defined (ESP_PLATFORM)
69
#include <stdint.h>
70
71
struct
can_frame
72
{
73
union
74
{
75
uint32_t raw[4];
76
struct
77
{
78
uint32_t can_id;
80
uint8_t can_dlc : 4;
81
uint8_t can_rtr : 1;
82
uint8_t can_eff : 1;
83
uint8_t can_err : 1;
84
uint8_t can_res : 1;
86
uint8_t pad;
87
uint8_t res0;
88
uint8_t res1;
90
union
91
{
93
uint64_t data64 __attribute__((aligned(8)));
95
uint8_t data[8] __attribute__((aligned(8)));
96
};
97
};
98
};
99
};
100
101
#define SET_CAN_FRAME_EFF(_frame) (_frame).can_eff = 1
102
#define SET_CAN_FRAME_RTR(_frame) (_frame).can_rtr = 1
103
#define SET_CAN_FRAME_ERR(_frame) (_frame).can_err = 1
104
#define CLR_CAN_FRAME_EFF(_frame) (_frame).can_eff = 0
105
#define CLR_CAN_FRAME_RTR(_frame) (_frame).can_rtr = 0
106
#define CLR_CAN_FRAME_ERR(_frame) (_frame).can_err = 0
107
#define IS_CAN_FRAME_EFF(_frame) ((_frame).can_eff)
108
#define IS_CAN_FRAME_RTR(_frame) ((_frame).can_rtr)
109
#define IS_CAN_FRAME_ERR(_frame) ((0))
110
111
#define GET_CAN_FRAME_ID_EFF(_frame) (_frame).can_id
112
#define GET_CAN_FRAME_ID(_frame) (_frame).can_id
113
#define SET_CAN_FRAME_ID_EFF(_frame, _value) (_frame).can_id = ((_value) & 0x1FFFFFFFU)
114
#define SET_CAN_FRAME_ID(_frame, _value) (_frame).can_id = ((_value) & 0x7ffU)
115
116
#else
117
#error No CAN frame representation for your OS
118
#endif
119
120
#endif
/* _nmranet_can_h_ */
socket.h
include
can_frame.h
Generated on Sun Feb 2 2025 21:18:13 for Open Model Railroad Network (OpenMRN) by
1.9.8