optical/NxFuncs/transdata/transdata.h
2025-09-04 09:45:08 +08:00

172 lines
3.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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_ */