#ifndef _TRANSDATA_H_ #define _TRANSDATA_H_ #include "config.h" #if (TRANS_APP_FILE == 1) #include "stapp.h" #endif #if (TRANS_DATA_FILE == 1) #include "datafile.h" #endif #define LEN_RSV_BMP 1024 // 接收位图长度 #define FILE_HEAD_ID 0xFFFF // 外围板启动文件传输数据包ID #define TRANS_NONE 0x00 #define TRANS_ACTIVE 0x5A #define TRANS_NOT_BEG 0x00 // 没有收到启动命令 #define TRANS_READY 0x01 // 准备好 #define TRANS_DOING 0x02 // 正在接收 #define TRANS_DONE 0x03 // 接收完成 #define TRANS_REQUEST 0x04 // 请求传输模式 #define FILE_TYPE_DAT 0x00 // 数据文件 #define FILE_TYPE_PGM 0x02 // 升级文件 #define FILE_TYPE_BOARD 0x03 // 外围板文件 #define FILE_TYPE_FRAME 0x04 // 边框刺绣等类型的文件(需要在工作完成后自动切换到原文件,且不需要上位机重新发送文件内容) // 外围板文件头 typedef struct { // 0x00 char fileName[32]; // 文件名称 // 0x20 u32 dataSize; // 数据字节数 u32 dataChecksum; // 数据累加校验和 u8 protocol; // 文件要发给的协议类型 u8 nodeid; // 文件要发给的节点ID,0为广播 u8 fileType; // 文件类型 u8 nodeType; // 20220608 文件要发给的节点类型 // 0x2C u8 reserved1[0x30-0x2C]; // 保留区1 // 0x30 u8 reserved2[0x64-0x30]; // 保留区2 // 0x64 u8 reserved3[0x80-0x64]; // 保留区3 // 0x80 u8 reserved4[0x100-0x80]; // 保留区4 }__attribute__ ((packed)) BoardFileHead; // 外围板文件CAN数据帧控制结构 typedef union { u8 data[8]; struct { u8 sync[3]; u16 pktId; // 包ID u8 fnum; // 帧个数 u16 crc; } __attribute__ ((packed)) head; struct { u32 datasize; // 数据字节数 u32 dataChecksum; // 数据累加校验和 } __attribute__ ((packed)) check; struct { u8 protocol; // 文件要发给的协议类型 u8 nodeid; // 文件要发给的节点ID,0为广播 u8 fileType; // 文件类型 u8 nodeType; // 文件要发给的节点类型 u8 rev[4]; } __attribute__ ((packed)) info; }BoardFileCanCtrl; // 外围板文件数据包控制结构 // 一个数据包129个CAN数据帧 typedef struct { BoardFileCanCtrl pktHead; BoardFileCanCtrl pktData[128]; }BoardFilePacketCtrl; // 外围板文件控制结构 typedef struct { BoardFileHead fileHead; // 文件头描述 BoardFilePacketCtrl filepkt; // 接收到的数据包 }BoardFileCtrl; // 数据接收控制 typedef struct { u8 transActive; // 传输结构有效 u8 transflag; // 接收进度标志 = 0, 接收未开始; = 1, 正在接收; = 2,接收完成 //---------------文件传输-------------------- u8 fileType; // 文件类型 u8 fileIdx; // 为文件编号,最多支持16个文件 u16 fileId; // 文件ID #if (TRANS_DATA_FILE == 1) DatFileCtrl * pDatFile; #endif #if (TRANS_APP_FILE == 1) AppFileCtrl * pAppFile; #endif //---------------文件传输-------------------- //---------------外围板文件传输-------------------- u16 rsvPktCount; // 接收数据包计数 u8 rsvFrameCount; // 接收数据帧计数 u32 dataChecksum; // 数据累加校验和 BoardFileCtrl * pBoardFile; //---------------外围板文件传输-------------------- u32 packetNum; // 包的个数 u16 lenBmp; // 位图有效长度 u8 rsvBitmap[LEN_RSV_BMP]; // 文件接收进度标志位图 } __attribute__ ((packed)) FileTransCtrl; #define CDPSYNC_LEN 3 #ifdef _IN_TRANSDATA_C const u8 CDP_SYNC[CDPSYNC_LEN] = { 'C','D','P', }; #else extern const u8 CDP_SYNC[]; #endif void InitFileTransCtrl(FileTransCtrl * pfileTransCtrl); int WriteRsvBitmap(u32 idx, u8 sta, FileTransCtrl * pfileTransCtrl); int IsResvFinish(FileTransCtrl * pfileTransCtrl); int TransDataProc(BoardFileCanCtrl filecan, FileTransCtrl * pfileTransCtrl, u8 nodetype); // 外围板文件接收处理 int GetLenBmp(FileTransCtrl * pfileTransCtrl); #ifdef _IN_TRANSDATA_C BoardFileCtrl g_boardFile; #else extern BoardFileCtrl g_boardFile; #endif #endif /* _TRANSDATA_H_ */