74 lines
1.4 KiB
C
74 lines
1.4 KiB
C
/*
|
|
* 软艺电机EF_A协议
|
|
*/
|
|
|
|
#ifndef _EF_A_H_
|
|
#define _EF_A_H_
|
|
|
|
#include "config.h"
|
|
#include "serial.h"
|
|
|
|
typedef struct
|
|
{
|
|
int idx;
|
|
u8 addr;
|
|
u16 wrdat;
|
|
u16 rddat;
|
|
}EFCmd;
|
|
|
|
#ifndef MAX_EF_CMD
|
|
#define MAX_EF_CMD 50
|
|
#endif
|
|
|
|
typedef void (*ResvEFProc)(EFCmd * pcmd); // 收到数据处理函数
|
|
|
|
typedef struct
|
|
{
|
|
EFCmd cmdbuf[MAX_EF_CMD];
|
|
|
|
// 收发控制
|
|
int working; // 正在读写中; = 1, 工作中,不能收发新命令
|
|
|
|
int bufCmdNum; // 命令个数; != 0, 有新命令
|
|
int bufHead;
|
|
int bufTail;
|
|
|
|
int steps;
|
|
u32 stepTime;
|
|
|
|
ResvEFProc resvefproc; // 收到数据处理函数
|
|
|
|
int efrsvTimout; // 读取超时时间
|
|
|
|
}AsyncEFCtrl;
|
|
|
|
typedef void (*CommOutFunc)(void);
|
|
|
|
typedef struct
|
|
{
|
|
u32 efSendWait; // 通讯延时, 单位us,发送一个字节所需时间
|
|
|
|
// 通讯函数指针
|
|
UsartSendData EFCommSend; // 发送数据
|
|
UsartGetData EFCommReceive; // 接收数据
|
|
UsartCleanRsBuf EFCommCleanRsBuf; // 清空接收缓冲区
|
|
IsUsartSendOver IsEFCommSendOver; // 判断发送缓冲区是否为空
|
|
|
|
CommOutFunc CommOutEn; // 数据发送允许
|
|
CommOutFunc CommOutDis; // 数据发送禁止
|
|
|
|
}EFCommCtrl;
|
|
|
|
void InitEF(int idx, int usart, BAUD_TypeDef baud, char dat, char parity, char stop);
|
|
int EFTx(int idx, u8 addr, u16 data, int steps);
|
|
int EFRx(int idx, u16 * pData, int steps);
|
|
int EFComm(int idx, u8 addr, u16 wrDat, u16 * pRdBuf);
|
|
|
|
void InitAsyncEFCtrl(int idx, int rsvtimout);
|
|
void RegEFCmdProc(int idx, ResvEFProc proc);
|
|
int AddEFCmd(EFCmd * pCmd);
|
|
int GetEFCmdBufLen(int idx);
|
|
int AsyncEFTask(int idx);
|
|
|
|
#endif /* _EF_A_H_ */
|