canfestival的canfestival.h的代码
时间: 2023-08-08 09:08:11 浏览: 212
canfestival是一个开源的CANopen协议栈实现,可以在嵌入式系统中使用。canfestival.h文件包含了CANopen协议栈的API,下面是部分代码示例:
```c
// CANopen数据类型定义
typedef unsigned char UNS8;
typedef signed char S8;
typedef unsigned short UNS16;
typedef signed short S16;
typedef unsigned int UNS32;
typedef signed int S32;
// CANopen数据类型定义-浮点型
typedef float REAL32;
typedef double REAL64;
// CANopen数据类型定义-时间类型
typedef UNS32 TIMER_HANDLE;
typedef UNS32 TIMEVAL;
// CANopen节点消息类型定义
typedef struct {
UNS16 cob_id;
UNS8 rtr;
UNS8 len;
UNS8 data[8];
} Message;
// CANopen节点对象字典条目定义
typedef struct {
UNS32 index;
UNS8 subindex;
UNS8 size;
UNS8 *pObject;
void (*callback)(UNS16 index, UNS8 subindex);
} CO_Data;
// CANopen节点API函数定义
UNS8 canReceive(CO_Data* d, UNS16 *cobID, Message *m);
UNS8 canSend(CO_Data* d, UNS16 cobID, UNS8 *msg, UNS8 len);
UNS8 writeLocalDict(CO_Data* d, UNS16 wIndex, UNS8 bSubindex, void *pSourceData, UNS8 ObjSize);
UNS8 readLocalDict(CO_Data* d, UNS16 wIndex, UNS8 bSubindex, void *pDestData, UNS8 ObjSize);
void setState(CO_Data* d, e_nodeState newState);
void setStateStopped(CO_Data* d);
void setStateOperational(CO_Data* d);
void setStatePreOperational(CO_Data* d);
e_nodeState getState(CO_Data* d);
void canClose(CO_Data* d);
UNS8 canInit(CO_Data* d);
UNS8 setNodeId(CO_Data* d, UNS8 nodeId);
UNS8 getNodeId(CO_Data* d);
void setHeartbeatError(CO_Data* d, UNS8 heartbeatID, UNS8 error);
UNS8 setSearch(CO_Data* d, UNS8 nodeId);
UNS8 getSDOTimeout(CO_Data* d);
void setSDOTimeout(CO_Data* d, UNS8 value);
UNS8 getNodeId(CO_Data* d);
UNS8 getLastNode(CO_Data* d);
UNS8 getMasterNodeId(CO_Data* d);
UNS8 setMasterNodeId(CO_Data* d, UNS8 nodeId);
UNS8 getObject(CO_Data* d, UNS16 index, UNS8 subIndex, void *pDestData, UNS8 *pNbBytes);
UNS8 setObject(CO_Data* d, UNS16 index, UNS8 subIndex, void *pSourceData, UNS8 NbBytes);
void EnableApplicationTimer(void);
void DisableApplicationTimer(void);
UNS32 getElapsedTime(void);
void EnterMutex(void);
void LeaveMutex(void);
UNS8 RegisterSetODentryCallBack(CO_Data* d, UNS16 wIndex, UNS8 bSubindex, void (*Callback)(UNS16 wIndex, UNS8 bSubindex));
void RemoveSetODentryCallBack(CO_Data* d, UNS16 wIndex, UNS8 bSubindex);
UNS8 RegisterGetODentryCallBack(CO_Data* d, UNS16 wIndex, UNS8 bSubindex, void (*Callback)(UNS16 wIndex, UNS8 bSubindex));
void RemoveGetODentryCallBack(CO_Data* d, UNS16 wIndex, UNS8 bSubindex);
UNS8 RegisterCallback(CO_Data* d, UNS8 func, void (*callback)(CO_Data* d, UNS8), UNS8 object);
void RemoveCallback(CO_Data* d, UNS8 func, UNS8 object);
void canChangeBaudRate(CO_Data* d, UNS32 baud);
void canChangeFilter(CO_Data* d, UNS16 w0, UNS16 w1, UNS16 w2, UNS16 w3);
UNS8 CANopen_SendNMTstateChange(CO_Data* d, UNS8 cs);
void InitTimer(TIMER_HANDLE *Handle);
void StartTimerLoop(TIMER_HANDLE *Handle, void (*CallBackFunction)(TIMER_HANDLE *));
void StopTimerLoop(TIMER_HANDLE *Handle);
UNS8 getTimerLoopStatus(TIMER_HANDLE *Handle);
UNS8 getTime(TIMEVAL *tv);
int timeval_subtract(TIMEVAL *result, TIMEVAL *x, TIMEVAL *y);
```
以上是canfestival.h文件中部分常见的API函数和数据类型定义,使用canfestival时,可以根据需要调用这些API函数,并使用这些数据类型来实现CANopen节点的控制和通信。需要注意的是,在使用canfestival时,需要按照CANopen协议的规范进行配置和使用,具体的配置方法和使用方法可以参考canfestival官方文档中的说明。
阅读全文