#ifndef __OCOM_H__ #define __OCOM_H__ #include "config.h" //------------------------------------------------------------------------ // 通讯数据包定义 //------------------------------------ /* 一、数据包格式 1. 固定长度数据包格式 |-------------------------------------------------------------------|-----------| | 数据识别序列 | 命令 | 数据内容 | 校验字 | |-------------------------------------------------------------------|-----------| | B0 B1 B2 | B3 | B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 | B14 B15 | |-------------------------------------------------------------------|-----------| | 固定序列如下 | | 参数,不同命令定义不同 | B4--B13的 | | | ID | 具体定义参考命令详细说明 |16位和校验 | | 0xEB,0x90,0xD7| | | | |-------------------------------------------------------------------|-----------| */ //------------------------------------ #define DC_SYNC_LEN 3 // 数据识别序列长度 #define DC_CMD_LEN 1 // 命令长度 #define DC_CONT_LEN 10 // 数据内容长度 #define DC_CHK_LEN 2 // 校验字长度 #define DC_CHECK_LEN (DC_CMD_LEN+DC_CONT_LEN) #define LEN_OCOM_PKT (DC_SYNC_LEN+DC_CMD_LEN+DC_CONT_LEN+DC_CHK_LEN) //------------------------------------ #ifdef _IN_OCOM_C const u8 OCOM_SYNC[DC_SYNC_LEN] = { 0xEB, 0x90, 0xD7, }; #else extern const u8 OCOM_SYNC[DC_SYNC_LEN]; #endif //------------------------------------ typedef union { struct { u8 normal[LEN_OCOM_PKT]; } __attribute__ ((packed)) buff; // buff方式 struct { u8 sync[DC_SYNC_LEN]; u8 cmd; u8 content[DC_CONT_LEN]; u16 check; } __attribute__ ((packed)) normal; // 通用方式 struct { u8 sync[DC_SYNC_LEN]; u8 cmd; u8 toggle; u8 attr; s32 ax; s32 ay; u16 check; } __attribute__ ((packed)) offcmd; // 线迹偏移命令 struct { u8 sync[DC_SYNC_LEN]; u8 cmd; u8 toggle; u16 exlen; u8 data1[7]; u16 check; } __attribute__ ((packed)) d21cmd; // D21命令 }OComPacket; typedef struct { int (*SendOComData)(u8 *, int); int (*GetOComData)(u8 *, int); int (*GetRsvLen)(void); int (*GetTrsFreeLen)(void); void (*Delay)(u32); }OComExFuns; //------------------------------------ // 读空缓冲区 void ReadOComBuffEmpty(OComExFuns * funs); int GetAOComPacket(OComExFuns * funs, OComPacket * pPacket); int GetOComExData(OComExFuns * funs, u8 * pBuff, int exlen); int SendAOComPacket(OComExFuns * funs, OComPacket * pPacket); int SendOComExData(OComExFuns * funs, u8 * pBuff, int exlen); int PacketAOCom(OComPacket * pPacket); #define GetAOComNormalPacket GetAOComPacket #endif