172 lines
3.6 KiB
C
172 lines
3.6 KiB
C
|
||
|
||
#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_ */
|