HardFOC Core
API reference
Loading...
Searching...
No Matches
CO_driver_target.h
Go to the documentation of this file.
1
21#ifndef CO_DRIVER_TARGET_H
22#define CO_DRIVER_TARGET_H
23
24#if defined(__has_include)
25#if __has_include("hf_co_app_config.h")
26#include "hf_co_app_config.h"
27#endif
28#endif
29
30#include <stdbool.h>
31#include <stddef.h>
32#include <stdint.h>
33
34#include "hf_co_driver.h"
35
36#if defined(HF_CO_DRIVER_FREERTOS) && HF_CO_DRIVER_FREERTOS
37#include "freertos/FreeRTOS.h"
38#include "freertos/semphr.h"
39#define HF_CO_LOCK_FREERTOS 1
40#elif defined(__unix__) || defined(__APPLE__)
41#include <pthread.h>
42#define HF_CO_LOCK_PTHREAD 1
43#endif
44
45#ifdef CO_DRIVER_CUSTOM
46#include "CO_driver_custom.h"
47#endif
48
49#ifdef __cplusplus
50extern "C" {
51#endif
52
53#define CO_LITTLE_ENDIAN
54#define CO_SWAP_16(x) (x)
55#define CO_SWAP_32(x) (x)
56#define CO_SWAP_64(x) (x)
57
58typedef uint_fast8_t bool_t;
59typedef float float32_t;
60typedef double float64_t;
61
63#define CO_CAN_MAX_LEN HF_CO_CAN_MAX_LEN
64
66typedef struct {
67 uint16_t ident;
68 uint8_t dlc;
69 uint8_t data[CO_CAN_MAX_LEN];
71
72#define CO_CANrxMsg_readIdent(msg) ((uint16_t)(((const CO_CANrxMsg_t*)(msg))->ident & 0x07FFU))
73#define CO_CANrxMsg_readDLC(msg) (((const CO_CANrxMsg_t*)(msg))->dlc)
74#define CO_CANrxMsg_readData(msg) (((const CO_CANrxMsg_t*)(msg))->data)
75
77typedef struct {
78 uint16_t ident;
79 uint16_t mask;
80 void* object;
81 void (*CANrx_callback)(void* object, void* message);
83
85typedef struct {
86 uint32_t ident;
87 uint8_t DLC;
88 uint8_t data[CO_CAN_MAX_LEN];
89 volatile bool_t bufferFull;
90 volatile bool_t syncFlag;
91 uint8_t pendingPorts;
93
95typedef struct CO_CANmodule_s {
96 void* CANptr;
98 uint16_t rxSize;
100 uint16_t txSize;
106 volatile uint16_t CANtxCount;
107 uint32_t errOld;
109#if defined(HF_CO_LOCK_FREERTOS)
110 SemaphoreHandle_t lock;
111 StaticSemaphore_t lockStorage;
112#elif defined(HF_CO_LOCK_PTHREAD)
113 pthread_mutex_t lock;
114#endif
116
118typedef struct {
119 void* addr;
120 size_t len;
121 uint8_t subIndexOD;
122 uint8_t attr;
123 void* addrNV;
125
127void hf_co_lock(CO_CANmodule_t* CANmodule);
128void hf_co_unlock(CO_CANmodule_t* CANmodule);
129
130#define CO_LOCK_CAN_SEND(CAN_MODULE) hf_co_lock(CAN_MODULE)
131#define CO_UNLOCK_CAN_SEND(CAN_MODULE) hf_co_unlock(CAN_MODULE)
132#define CO_LOCK_EMCY(CAN_MODULE) hf_co_lock(CAN_MODULE)
133#define CO_UNLOCK_EMCY(CAN_MODULE) hf_co_unlock(CAN_MODULE)
134#define CO_LOCK_OD(CAN_MODULE) hf_co_lock(CAN_MODULE)
135#define CO_UNLOCK_OD(CAN_MODULE) hf_co_unlock(CAN_MODULE)
136
137/* RX callbacks run in thread context (hf_co_driver_rx_drain); the flag is
138 * read by the thread that processes the object, possibly another one. A full
139 * barrier keeps the data written before the flag. */
140#define CO_MemoryBarrier() __sync_synchronize()
141#define CO_FLAG_READ(rxNew) ((rxNew) != NULL)
142#define CO_FLAG_SET(rxNew) \
143 do { \
144 CO_MemoryBarrier(); \
145 (rxNew) = (void*)1L; \
146 } while (0)
147#define CO_FLAG_CLEAR(rxNew) \
148 do { \
149 CO_MemoryBarrier(); \
150 (rxNew) = NULL; \
151 } while (0)
152
153#ifdef __cplusplus
154}
155#endif
156
157#endif /* CO_DRIVER_TARGET_H */
float float32_t
Definition CO_driver_target.h:59
uint_fast8_t bool_t
Definition CO_driver_target.h:58
void hf_co_unlock(CO_CANmodule_t *CANmodule)
Definition CO_driver_hardfoc.c:130
void hf_co_lock(CO_CANmodule_t *CANmodule)
Definition CO_driver_hardfoc.c:119
#define CO_CAN_MAX_LEN
Definition CO_driver_target.h:63
double float64_t
Definition CO_driver_target.h:60
C interface of the generic CANopenNode driver (CO_driver_hardfoc.c).
Definition CO_driver_target.h:95
volatile uint16_t CANtxCount
Definition CO_driver_target.h:106
volatile bool_t CANnormal
Definition CO_driver_target.h:102
uint16_t CANerrorStatus
Definition CO_driver_target.h:101
uint16_t txSize
Definition CO_driver_target.h:100
CO_CANrx_t * rxArray
Definition CO_driver_target.h:97
uint16_t rxSize
Definition CO_driver_target.h:98
volatile bool_t useCANrxFilters
Definition CO_driver_target.h:103
uint32_t errOld
Definition CO_driver_target.h:107
bool_t lockReady
Definition CO_driver_target.h:108
void * CANptr
Definition CO_driver_target.h:96
volatile bool_t firstCANtxMessage
Definition CO_driver_target.h:105
volatile bool_t bufferInhibitFlag
Definition CO_driver_target.h:104
CO_CANtx_t * txArray
Definition CO_driver_target.h:99
Definition CO_driver_target.h:77
uint16_t ident
Definition CO_driver_target.h:78
void * object
Definition CO_driver_target.h:80
uint16_t mask
Definition CO_driver_target.h:79
Definition CO_driver_target.h:66
uint8_t dlc
Definition CO_driver_target.h:68
uint16_t ident
Definition CO_driver_target.h:67
Definition CO_driver_target.h:85
volatile bool_t bufferFull
Definition CO_driver_target.h:89
volatile bool_t syncFlag
Definition CO_driver_target.h:90
uint8_t pendingPorts
Definition CO_driver_target.h:91
uint8_t DLC
Definition CO_driver_target.h:87
uint32_t ident
Definition CO_driver_target.h:86
Definition CO_driver_target.h:118
uint8_t attr
Definition CO_driver_target.h:122
void * addr
Definition CO_driver_target.h:119
uint8_t subIndexOD
Definition CO_driver_target.h:121
size_t len
Definition CO_driver_target.h:120
void * addrNV
Definition CO_driver_target.h:123