508 lines
14 KiB
C
508 lines
14 KiB
C
#ifndef PROTOCOL_H
|
||
#define PROTOCOL_H
|
||
|
||
#include "comm.h"
|
||
|
||
// 文件传输控制结构
|
||
#define LEN_RSV_BMP MAX_EXDP_LEN // 位图大小
|
||
#define MAX_FILE_SIZE (LEN_RSV_BMP*MAX_EXDP_LEN*8) // 最大文件字节数 按位图大小设定
|
||
|
||
#define PARA_NUM 256
|
||
|
||
// 传输文件类型
|
||
#define FILE_TYPE_DAT 0x00 // 数据文件
|
||
#define FILE_TYPE_PGM 0x02 // 升级文件
|
||
#define FILE_TYPE_PLOT 0x06 // 喷墨数据
|
||
|
||
#define MCPARA_MACH 0 // 机器参数
|
||
#define MCPARA_WORK 1 // 工作参数
|
||
|
||
// 传输有效标志定义
|
||
#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 UCMD_GET_MC_INFO 0x0001 // 读取机器信息
|
||
#define UCMD_GET_MC_STATUS 0x0002 // 读取机器状态
|
||
#define UCMD_GET_MC_PARAS 0x0003 // 读取机器参数
|
||
#define UCMD_GET_TRANS_RESULT 0x0007 // 读取传输结果
|
||
#define UCMD_SET_MC_STATUS 0x0102 // 设置机器状态
|
||
#define UCMD_SET_MC_PARAS 0x0103 // 设置机器参数
|
||
#define UCMD_SET_MEM_DATA 0x0104 // 设置内存数据
|
||
#define UCMD_SET_FILE_PARAS 0x0105 // 设置文件参数
|
||
#define UCMD_SET_EXEC_PROGRESS 0x0106 // 设置执行进度
|
||
#define UCMD_SET_INSTALLMENT 0x0107 // 设置分期密码
|
||
#define UCMD_SET_ELAPSED_TIME 0x0108 // 设置经过的时间
|
||
#define UCMD_SET_DEF_PARA 0x0109 // 设置默认参数
|
||
#define UCMD_SET_FILE_EXDATA 0x010F // 设置文件扩展数据
|
||
#define UCMD_ACT_BYHAND 0x0201 // 手动控制命令
|
||
#define UCMD_MC_WORK 0x0202 // 机器工作命令
|
||
#define UCMD_MOVE_TO 0x0203 // 移动XY到坐标
|
||
#define UCMD_MOVE_OFST 0x0205 // XY移动偏移量
|
||
#define UCMD_START_TRANS 0x0301 // 启动文件传输
|
||
#define UCMD_TRANS_FILE_DATA 0x0302 // 文件传输命令
|
||
#define UCMD_SET_FILE_LIST 0x0304 // 设置文件列表
|
||
#define UCMD_MC_UPDATE 0x0401 // 下位机升级
|
||
|
||
// 下位机发送命令
|
||
#define DCMD_REQUEST_DAT 0x8000 // 请求文件数据
|
||
#define DCMD_SEND_MC_INFO 0x8001 // 发送机器信息
|
||
#define DCMD_SEND_MC_STATUS 0x8002 // 发送机器状态
|
||
#define DCMD_SEND_MC_PARAS 0x8003 // 发送机器参数
|
||
#define DCMD_SEND_FILE_INFO 0x8006 // 发送文件信息
|
||
#define DCMD_SEND_TRANS_RESULT 0x8007 // 发送传输结果
|
||
#define DCMD_SEND_DEBUG_INFO 0x8010 // 调试信息发送
|
||
|
||
// 状态码定义如下-设置
|
||
#define MC_STA_CLENA_ERR 0x0000 // 清除错误
|
||
#define MC_STA_EN_WORK 0x0001 // 允许工作(状态)
|
||
#define MC_STA_DIS_WORK 0x0002 // 禁止工作(状态)
|
||
#define MC_STA_EN_TIME 0x0003 // 允许工作(时间)
|
||
#define MC_STA_DIS_TIME 0x0004 // 禁止工作(时间)
|
||
#define MC_CLEAN_COUNT 0x0005 // 产量计数清零
|
||
#define MC_STA_MANUAL 0x0006 // 手动工作状态
|
||
#define MC_STA_AUTO 0x0007 // 自动工作状态
|
||
#define MC_FILE_SWITCH 0x0008 // 文件切换
|
||
#define MC_INVALID_FILE 0x0009 // 文件失效命令
|
||
|
||
// 工作控制功能
|
||
#define WORK_START 0x0001 // 启动工作
|
||
#define WORK_PAUSE 0x0002 // 暂停工作
|
||
|
||
#pragma pack(1)//设定为1字节对齐
|
||
|
||
// 喷墨图像按照黑白位图的格式存储
|
||
|
||
// 将整个喷墨图像位图分割为 (墨盒数量*300) 个像素宽度的块
|
||
// 每个块按照一个文件传输
|
||
|
||
// 数据列表, 描述整个位图
|
||
typedef struct
|
||
{
|
||
// 0
|
||
u32 fileId; // 文件标识
|
||
|
||
// 1
|
||
u32 totalWidth; // 位图宽度,以像素为单位
|
||
u32 totalHeight; // 位图高度,以像素为单位
|
||
|
||
// 3
|
||
u32 blkNums; // 分块个数
|
||
u32 blkWidth; // 分块位图宽度,以像素为单位
|
||
|
||
// 5
|
||
u32 rev[16-5];
|
||
}__attribute__ ((packed)) PlotFileList;
|
||
|
||
// 压缩位图文件头
|
||
typedef struct
|
||
{
|
||
// 0
|
||
u32 fileId; // 整个位图文件标识
|
||
u32 blkIdx; // 当前位图块号(位图分块后的编号)
|
||
u32 datSize; // 本块位图数据区的大小(字节数)
|
||
u32 biWidth; // 本块位图有效宽度,以像素为单位
|
||
u32 biHeight; // 本块位图有效高度,以像素为单位
|
||
u32 dataChecksum; // 本块位图数据累加校验和
|
||
u32 begPosY; // 本块位图起始位置(像素单位)
|
||
u32 endPosY; // 本块位图结束位置(像素单位)
|
||
|
||
// 32
|
||
u16 compDir; // 本块位图压缩方向, =0, 从上到下; =1, 从下到上;(喷墨方向)
|
||
u16 compSegWidth; // 分段宽度(0,默认整个宽度,分段宽度必须能被本块位图有效宽度整除)
|
||
u16 compSegHeight; // 分段高度(0,默认1行的高度)
|
||
u16 compFillWidth; // 压缩填充位数
|
||
u8 compType[4]; // 本块位图压缩类型, =0, 不压缩; =1, 按字节压缩(分段压缩);
|
||
u32 compSegOffset[4]; // 分段数据起始位置
|
||
|
||
// 60
|
||
u32 segBitPaperDis; // 每段位图走纸距离,0.01mm
|
||
#if (1)
|
||
//64
|
||
u8 rev[128-2-64]; // 保留
|
||
#else
|
||
// 保存原图中BMP头文件(算法测试用)
|
||
// 60
|
||
u8 rev[64-60]; // 保留
|
||
|
||
// 64
|
||
u16 identifier; // 类型 一般为 "BM"
|
||
u32 fileSize; // 文件大小
|
||
u32 reserved; // 保留
|
||
u32 bitDatOffset; // 位图数据偏移,一般为 0x3E
|
||
|
||
// 78
|
||
u32 biSize; // 位图信息头大小, 一般为 0x28
|
||
u32 biWidth2; // 位图宽度,以像素为单位
|
||
u32 biHeight2; // 位图高度,以像素为单位
|
||
u16 biPlanes; // 位图的位面数,必须为1
|
||
|
||
// 92
|
||
u16 biBitPerPixel; // 每个像素的位数, =1, 单色位图; =4, 16色; = 8, 256色; = 24 真彩色
|
||
u32 biCompression; // 位图压缩类型, =0, 不压缩(BI_RGB); =1, BI_RLE8; = 2, BI_RLE4; = 3 BI_BITFIELDS; = 4, BI_JPEG; = 5, BI_PNG
|
||
u32 biBitmapDatSize;// 位图数据区的大小(字节数), 必须是4的整数倍
|
||
|
||
// 102
|
||
u32 biHResolution; // 水平分辨率, 像素/米
|
||
u32 biVResolution; // 垂直分辨率, 像素/米
|
||
u32 biColors; // 颜色数
|
||
u32 biImpColors; // 重要颜色数
|
||
|
||
// 118
|
||
BmpRgbQuad palette[2]; // 调色板
|
||
|
||
// 126
|
||
//u8 rev2[128-2-126]; // 保留
|
||
|
||
#endif
|
||
// 126
|
||
u16 checkCrc; // 前面字段的CRC校验
|
||
}__attribute__ ((packed)) CompBmpHead;
|
||
|
||
// 机器信息结构定义
|
||
typedef struct
|
||
{
|
||
// 0
|
||
char softwareVerStr[32]; // 软件版本
|
||
|
||
// 32
|
||
char rev[1024-32];
|
||
|
||
} __attribute__ ((packed)) MCInfo;
|
||
|
||
typedef struct
|
||
{
|
||
u32 buf[PARA_NUM];
|
||
} __attribute__ ((packed)) ParaStruct;
|
||
|
||
// 升级文件头
|
||
typedef struct
|
||
{
|
||
// 0x00
|
||
char fileName[32]; // 文件名称
|
||
// 0x20
|
||
u32 dataSize; // 数据字节数
|
||
u32 dataChecksum; // 数据累加校验和
|
||
|
||
// 0x28
|
||
u8 reserved1[0x30-0x28]; // 保留区1
|
||
// 0x30
|
||
u8 reserved2[0x64-0x30]; // 保留区1
|
||
|
||
// 0x64
|
||
u8 reserved3[0x80-0x64]; // 保留区2
|
||
|
||
// 0x80
|
||
u8 reserved4[0x100-0x80];
|
||
}__attribute__ ((packed)) AppFileHead;
|
||
|
||
typedef struct
|
||
{
|
||
int transphase;
|
||
int filetransing;
|
||
int waitcount;
|
||
|
||
u8 transActive; // 传输结构有效
|
||
u8 transflag; // 接收进度标志 = 0, 接收未开始; = 1, 正在接收; = 2,接收完成。
|
||
u8 fileType; // 文件类型
|
||
u8 fileIdx; // 为文件编号,最多支持16个文件
|
||
u16 fileId; // 文件ID
|
||
u16 packetSize; // 包的大小
|
||
u32 packetNum; // 包的个数
|
||
|
||
AppFileHead * pAppHead;
|
||
CompBmpHead * pBmpHead;
|
||
u8 * pDatBuff;
|
||
|
||
u16 lenBmp; // 位图有效长度
|
||
u8 rsvBitmap[LEN_RSV_BMP]; // 文件接收进度标志位图
|
||
|
||
}FileTransCtrl;
|
||
|
||
// 机器状态数据结构定义
|
||
typedef struct
|
||
{
|
||
// 0
|
||
u32 workStatus; // 工作状态位图
|
||
// .0 允许时限。=0,使用时限已到,不允许下位机工作;=1,允许下位机工作;
|
||
// .1 允许状态。=0,界面钳制,不允许下位机工作;=1,允许下位机工作;
|
||
// .2 机器状态。=0,手动工作状态; =1,自动工作状态
|
||
// .3 钥匙状态。=0,关闭状态; =1,打开状态
|
||
// .4 文件接收标志。= 0,初始状态。= 1,收到了文件
|
||
// .5 参数接收标志。= 0,初始状态。= 1,收到了参数
|
||
// .6 正在忙标志。= 0,空闲(可以接收文件和参数)。= 1,工作中(不会接收文件和参数)
|
||
// .7 上料状态。=0,手动上料状态; =1,自动上料状态
|
||
// .8 参数更新标志。 =1,下位机更新了参数
|
||
// .9 模拟工作标志。=1, 处于模拟工作状态
|
||
// .10 允许扫描条码状态。=1, 允许
|
||
// .11 允许拍照状态。=1, 允许
|
||
// .12 正在工作标志
|
||
// .13 传感信号扫描中标志
|
||
// .14 相机校准模式中标志
|
||
// .15
|
||
// .16
|
||
// .17
|
||
// .18
|
||
// .19 取模板框状态
|
||
// .20 放模板框状态
|
||
// .21 匹绣, 0:退出匹绣,主轴归零 1:进入匹绣,扎针,允许移框
|
||
// .22 断线检测, 0:退出断线检测状态, 1:进入断线检测状态
|
||
|
||
// 1
|
||
u32 errorCode; // 错误代码
|
||
u32 fileIdx; // 文件序号
|
||
u32 dataIdx; // 数据索引
|
||
u32 runSpeed; // 运动速度 主轴转速
|
||
u32 runAction; // 执行动作代码 *
|
||
u32 runSteps; // 当前执行步骤 *
|
||
u32 outCounter; // 产量计数
|
||
} __attribute__ ((packed)) MCStatus;
|
||
|
||
|
||
//OperPacket
|
||
typedef union
|
||
{
|
||
DataPacket packet;
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 toggle;
|
||
u8 rev[6];
|
||
u16 crc;
|
||
} __attribute__ ((packed)) getMcInfo; // 读取机器信息
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 paraType;
|
||
u16 paraId;
|
||
u8 rev[4];
|
||
u16 crc;
|
||
} __attribute__ ((packed)) getMcParas; // UCMD_GET_MC_PARAS 读取机器参数
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u8 fileType;
|
||
u8 fileIdx;
|
||
u8 rev[6];
|
||
u16 crc;
|
||
} __attribute__ ((packed)) getFileInfo; // UCMD_GET_FILE_INFO 读取文件信息
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 fileId;
|
||
u8 rev[6];
|
||
u16 crc;
|
||
} __attribute__ ((packed)) getTransResult; // UCMD_GET_TRANS_RESULT 读取传输结果
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 upObj;
|
||
u16 upFileID;
|
||
u32 checksum;
|
||
u16 crc;
|
||
} __attribute__ ((packed)) mcUpdate; // UCMD_MC_UPDATE 系统升级
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 staCode;
|
||
u16 para;
|
||
u8 rev[4];
|
||
u16 crc;
|
||
} __attribute__ ((packed)) setMcStatus; // UCMD_SET_MC_STATUS 设置机器状态
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 exLen;
|
||
u16 exCrc;
|
||
|
||
u16 paraType;
|
||
u16 paraId;
|
||
u16 crc;
|
||
|
||
u8 exData[MAX_EXDP_LEN];
|
||
} __attribute__ ((packed)) setParas; // UCMD_SET_MC_PARAS 设置下位机参数
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 exLen;
|
||
u16 exCrc;
|
||
|
||
u8 fileType;
|
||
u8 fileIdx;
|
||
u16 fileId;
|
||
|
||
u16 crc;
|
||
|
||
u8 exData[MAX_EXDP_LEN];
|
||
} __attribute__ ((packed)) startTrans; // UCMD_START_TRANS 启动文件传输
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 exLen;
|
||
u16 exCrc;
|
||
|
||
u16 pktIdx;
|
||
u16 fileId;
|
||
u16 crc;
|
||
|
||
u8 exData[MAX_EXDP_LEN];
|
||
} __attribute__ ((packed)) transFileData; // UCMD_TRANS_FILE_DATA 文件数据传输
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 exLen;
|
||
u16 exCrc;
|
||
u32 fileIdxMap;
|
||
u16 crc;
|
||
|
||
u8 exData[MAX_EXDP_LEN];
|
||
|
||
} __attribute__ ((packed)) setFilesList; // 设置文件列表 UCMD_SET_FILE_LIST
|
||
|
||
//----------------------------------
|
||
// 下位机发送命令
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u8 fileType;
|
||
u8 fileIdx;
|
||
u16 fileId;
|
||
u32 datBlockIdx; // 数据包索引(每个包1024字节)
|
||
|
||
u16 crc;
|
||
|
||
u8 exData[MAX_EXDP_LEN];
|
||
} __attribute__ ((packed)) dRequestDatBlock; // DCMD_REQUEST_DAT 请求文件数据
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 exLen;
|
||
u16 exCrc;
|
||
|
||
u16 toggle;
|
||
u8 rev[2];
|
||
u16 crc;
|
||
|
||
u8 exData[MAX_EXDP_LEN];
|
||
} __attribute__ ((packed)) dSendMcInfo; // DCMD_SEND_MC_INFO 发送机器信息
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 exLen;
|
||
u16 exCrc;
|
||
|
||
u16 toggle;
|
||
u8 rev[2];
|
||
u16 crc;
|
||
|
||
u8 exData[MAX_EXDP_LEN];
|
||
} __attribute__ ((packed)) dSendMcStatus; // DCMD_SEND_MC_STATUS 发送机器状态
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 exLen;
|
||
u16 exCrc;
|
||
|
||
u16 paraType;
|
||
u16 paraId;
|
||
u16 crc;
|
||
|
||
u8 exData[MAX_EXDP_LEN];
|
||
} __attribute__ ((packed)) dSendMcParas; // DCMD_SEND_MC_PARAS 发送机器参数
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 exLen;
|
||
u16 exCrc;
|
||
|
||
u8 fileType;
|
||
u8 fileIdx;
|
||
u8 rev[2];
|
||
u16 crc;
|
||
|
||
u8 exData[MAX_EXDP_LEN];
|
||
} __attribute__ ((packed)) dSendFileInfo; // DCMD_SEND_FILE_INFO 发送文件信息
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 exLen;
|
||
u16 exCrc;
|
||
|
||
u16 fileId;
|
||
u8 active;
|
||
u8 result;
|
||
u16 crc;
|
||
|
||
u8 exData[MAX_EXDP_LEN];
|
||
} __attribute__ ((packed)) dSendTransResult; // DCMD_SEND_TRANS_RESULT 发送传输结果
|
||
|
||
struct
|
||
{
|
||
u8 sync[DP_SYNC_LEN];
|
||
u16 cmdCode;
|
||
|
||
u16 workCode;
|
||
u32 para1;
|
||
u16 para2;
|
||
u16 crc;
|
||
} __attribute__ ((packed)) mcWork; // UCMD_MC_WORK 机器工作命令
|
||
|
||
}OperPacket;
|
||
|
||
|
||
#endif // PROTOCOL_H
|