21#ifndef CO_DRIVER_TARGET_H
22#define CO_DRIVER_TARGET_H
24#if defined(__has_include)
25#if __has_include("hf_co_app_config.h")
26#include "hf_co_app_config.h"
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__)
42#define HF_CO_LOCK_PTHREAD 1
45#ifdef CO_DRIVER_CUSTOM
46#include "CO_driver_custom.h"
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)
63#define CO_CAN_MAX_LEN HF_CO_CAN_MAX_LEN
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)
81 void (*CANrx_callback)(
void* object,
void* message);
95typedef struct CO_CANmodule_s {
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;
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)
140#define CO_MemoryBarrier() __sync_synchronize()
141#define CO_FLAG_READ(rxNew) ((rxNew) != NULL)
142#define CO_FLAG_SET(rxNew) \
144 CO_MemoryBarrier(); \
145 (rxNew) = (void*)1L; \
147#define CO_FLAG_CLEAR(rxNew) \
149 CO_MemoryBarrier(); \
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