
#ifndef __OPERATOR_H__
#define __OPERATOR_H__

#include "config.h"
#include "comm.h"

//------------------------------------------------------------------------

//------------------------------------------------------------------------

/*
通讯命令一览表

	1. 上位机发送命令

			名称			符号			代码	类型	回复			说明
		读取机器信息	UCMD_GET_MC_INFO		0x0001	FLDP	有		机器信息包括机器种类，配置，控制系统版本等信息
		读取机器状态	UCMD_GET_MC_STATUS		0x0002	FLDP	有		读取机器的运行状态，包括机器工作状态，常用输入状态，电机位置，工作进度，文件信息等。
		读取机器参数	UCMD_GET_MC_PARAS		0x0003	FLDP	有		读取内存中机器参数列表
		读取内存数据	UCMD_GET_MEM_DATA		0x0004	FLDP	有		读取机器存储器数据，包括片内SRAM，片外SRAM，NAND FLASH等的内容
		读取传感信号	UCMD_GET_SENSORS		0x0005	FLDP	有		读取IO信号状态及电机位置，编码器位置等信息
		读取文件信息	UCMD_GET_FILE_INFO		0x0006	FLDP	有		读取数据文件的信息
		读取传输结果	UCMD_GET_TRANS_RESULT	0x0007	FLDP	有		读取文件传输的结果位图，包括数据文件和升级文件

		设置机器配置	UCMD_SET_MC_CONFIG		0x0101	VLDP	无		设置机器的配置，包括信号使用的端口等信息
		设置机器状态	UCMD_SET_MC_STATUS		0x0102	FLDP	无		设置机器的工作状态，包括是否允许工作，清除报警等。
		设置机器参数	UCMD_SET_MC_PARAS		0x0103	VLDP	无		传输机器参数列表到下位机
		设置内存数据	UCMD_SET_MEM_DATA		0x0104	FLDP	无		改变某个内存单元的数据内容==

		手动控制命令	UCMD_ACT_BYHAND			0x0201	FLDP	无		手动控制电机转动，OUTPUT信号开关等动作
		机器工作命令	UCMD_MC_WORK			0x0202	FLDP	无		控制机器的工作命令，包括启动，停止，结束，或运动到某个位置等
		移动XY命令	UCMD_MOVE_TO			0x0203	FLDP	无		移动XY到坐标

		启动文件传输	UCMD_START_TRANS		0x0301	VLDP	无		启动文件传输
		文件传输命令	UCMD_TRANS_FILE_DATA	0x0302	VLDP	无		传输文件数据包

		下位机升级	UCMD_MC_UPDATE			0x0401	VLDP	无		升级主控

		遍历命令		UCMD_TRA_BOARD			0x0501	FLDP	无		遍历总线中某种协议类型的节点

	2. 下位机发送命令

			名称			符号			代码	类型	回复			说明
		发送机器信息	DCMD_SEND_MC_INFO		0x8001	VLDP	无		发送机器信息包括机器种类，配置，控制系统版本等信息
		发送机器状态	DCMD_SEND_MC_STATUS		0x8002	VLDP	无		发送取机器的运行状态，包括机器工作状态，常用输入状态，电机位置，工作进度，文件信息等。
		发送机器参数	DCMD_SEND_MC_PARAS		0x8003	VLDP	无		发送内存中机器参数列表
		发送内存数据	DCMD_SEND_MEM_DATA		0x8004	VLDP	无		发送机器存储器数据，包括片内SRAM，片外SRAM，NAND FLASH等的内容
		发送传感信号	DCMD_SEND_SENSORS		0x8005	VLDP	无		发送IO信号状态及电机位置，编码器位置等信息
		发送文件信息	DCMD_SEND_FILE_INFO		0x8006	VLDP	无		发送数据文件的信息
		发送传输结果	DCMD_SEND_TRANS_RESULT	0x8007	VLDP	无		发送文件传输的结果位图



*/

// 上位机发送命令
#define	UCMD_GET_MC_INFO		0x0001		// 读取机器信息
#define	UCMD_GET_MC_STATUS		0x0002		// 读取机器状态
#define	UCMD_GET_MC_PARAS		0x0003		// 读取机器参数
#define	UCMD_GET_MEM_DATA		0x0004		// 读取内存数据
#define	UCMD_GET_SENSORS		0x0005		// 读取传感信号
#define	UCMD_GET_FILE_INFO		0x0006		// 读取文件信息
#define	UCMD_GET_TRANS_RESULT	0x0007		// 读取传输结果
#define	UCMD_GET_SENSORS_BMP	0x0008		// 读取有效传感器位图

#define	UCMD_GET_BOARD_VER		0x000A		// 读取外围板程序版本
#define UCMD_GET_HEAD_PARA		0x000B		// 读取机头板参数
#define UCMD_GET_COLOR_PARA		0x000C		// 读取换色控制板参数
#define UCMD_GET_HEAD_NVPARAS	0x000D		// 选择性读取机头参数

#define	UCMD_SET_MC_CONFIG		0x0101		// 设置机器配置
#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_HEADDEF_PARA	0x010A		// 设置机头板默认参数
#define	UCMD_SET_HEAD_PARA		0x010B		// 设置机头板参数
#define	UCMD_SET_COLOR_PARA		0x010C		// 设置换色控制板参数
#define	UCMD_SET_MVANGDEF_PARA	0x010D		// 设置动框角度默认参数
#define	UCMD_SET_COLORDEF_PARA	0x010E		// 设置换色板默认参数
#define UCMD_SET_FILE_EXDATA	0x010F		// 设置文件扩展数据
#define UCMD_SET_HEAD_NVPARA	0x0110		// 选择性设置机头参数

#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_INVALID_FILE		0x0303		// 文件失效命令
#define	UCMD_SET_FILE_LIST		0x0304		// 设置文件列表
#define	UCMD_GET_FILE_LIST		0x0305		// 获取下位机文件列表


#define	UCMD_MC_UPDATE			0x0401		// 下位机升级
#define UCMD_BOARD_UPDATE		0x0402		// 外围板升级

#define UCMD_TRA_BOARD			0x0501		// 遍历命令

// 下位机发送命令
#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_MEM_DATA		0x8004		// 发送内存数据
#define	DCMD_SEND_SENSORS		0x8005		// 发送传感信号
#define	DCMD_SEND_FILE_INFO		0x8006		// 发送文件信息
#define	DCMD_SEND_TRANS_RESULT	0x8007		// 发送传输结果
#define	DCMD_SEND_SENSORS_BMP	0x8008		// 发送有效传感器位图

#define	DCMD_SEND_BOARDVER		0x800A		// 发送外围板程序版本
#define	DCMD_SEND_HEADPARA		0x800B		// 发送机头板参数
#define	DCMD_SEND_COLORPARA		0x800C		// 发送换色控制板参数

#define DCMD_SEND_HEAD_NVPARAS	0x800E		// 选择性发送机头参数

#define	DCMD_SEND_DEBUG_INFO	0x8010		// 调试信息发送

#define	DCMD_SEND_FILE_LIST		0x8011		// 发送下位机文件列表


//------------------------------------------------------------------------

// 命令详解

//------------------------------------------------------------------------

// 读取机器信息
#ifdef UCMD_GET_MC_INFO

// 机器信息结构定义



#endif

//------------------------------------------------------------------------

// 读取机器状态
#ifdef UCMD_GET_MC_STATUS

/*
		|-------------------------------------------------------------------|
		|-------------------------------------------------------------------|
		|		B10	B11		|	B12	B13		|			附加数据				|
		|-------------------------------------------------------------------|
		|	命令切换标志字	|	  保留		|			附加数据				|
		|-------------------------------------------------------------------|
		|					|				|				|				|
		|					|  				|				|				|
		|-------------------------------------------------------------------|
		|-------------------------------------------------------------------|

*/

// 附加数据结构定义


// 机器信息结构定义
typedef struct
{
// 0
	char fpgaHardVerStr[16];		// FPGA硬件版本
	char fpgaSoftVerStr[16];		// FPGA软件版本
	char softwareVerStr[48];	// 软件版本
	char buildInfoStr[32];		// 编译日期信息
    char boardId[32];			// 板卡ID
    char installment[32];		// 最后一次的分期密码字符串
// 176
    char rev1[512-176];

// 512
	u32 localIP;		// 板卡IP地址
	u32 submask;		// 子网掩码
	u32 gateIP;			// 网关IP

// 524
    u8 rev2[1024-524];

} __attribute__ ((packed)) MCInfo;

//-------------------------------------------------------------------------------

#endif

//------------------------------------------------------------------------

// 读取机器参数
#ifdef UCMD_GET_MC_PARAS





#endif

//------------------------------------------------------------------------



//------------------------------------------------------------------------

// 读取传感信号
#ifdef UCMD_GET_SENSORS




#endif

//------------------------------------------------------------------------

// 读取文件信息
#ifdef UCMD_GET_FILE_INFO



#endif

//------------------------------------------------------------------------

// 读取传输结果
#ifdef UCMD_GET_TRANS_RESULT



#endif

//------------------------------------------------------------------------

// 设置机器配置
#ifdef UCMD_SET_MC_CONFIG

#endif

//------------------------------------------------------------------------

// 设置机器状态
#ifdef UCMD_SET_MC_STATUS

#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	MC_CLEAN_PARA_REF	0x000A		// 清除刷新参数标志
#define	MC_SET_TO_NORMAL	0x000B		// 设置为正常工作状态
#define	MC_SET_TO_SIMULATE	0x000C		// 设置为模拟工作状态

#define	MC_SET_ERR_STA		0x000D		// 设置为错误状态（报错）
#define	MC_SEL_WORK_HEADS	0x000E		// 设置工作机头
#define	MC_CLEAN_FIDX		0x000F		// 索引复位

#define	MC_CLEAN_BOBBIN		0x0010		// 底线计数复位

#define	MC_SET_ENTER_SCAN_SENSOR     0x0011	 //  设置为 进入 扫描传感器状态
#define	MC_SET_EXIT_SCAN_SENSOR      0x0012	 //  设置为 退出 扫描传感器状态

#define	MC_SET_ENTER_TEST_OUTPUT     0x0013	 //  设置为 进入 测试输出状态
#define	MC_SET_EXIT_TEST_OUTPUT      0x0014	 //  设置为 退出 测试输出状态


#define MC_CHANGE_HOOK_START	0x0020	// 进入换梭状态
#define MC_CHANGE_HOOK_END		0x0021	// 退出换梭状态

#define MC_STA_EXIT_TRA			0x0023		// 退出遍历状态
#define MC_STA_EXIT_THREADBK	0x0024		// 退出断线测试

#define	MC_INVALID_FILEBLOCK	0x0026		// 文件数据块失效命令

#endif

//------------------------------------------------------------------------

// 设置机器参数
#ifdef UCMD_SET_MC_PARAS

#define	SEW_MCPARA_MACH			0x00	// 机器配置参数
#define	SEW_MCPARA_WORK			0x01	// 机器工作参数

#define EMB_MVSTANG_PARA		0x06	// 起始动框角度

#define EMB_PATCH_DATA_IDX		0x09	// 贴布绣数据,按针

#endif

//------------------------------------------------------------------------

// 读取内存数据
// 设置内存数据
#ifdef UCMD_GET_MEM_DATA
#ifdef UCMD_SET_MEM_DATA

// 对象 (作为基地址，最高字节)
#define MEM_INSRAM		0x01		// 片内存储器（只读）
	#define INSRAM_ADDR_MIN			0
	#define INSRAM_ADDR_MAX			(0xFFFF)

#define MEM_EXSRAM		0x02		// 片外存储器（读写）
	#define EXSRAM_ADDR_MIN			0
	#define EXSRAM_ADDR_MAX			((512*1024+512*1024)-1)

#define MEM_NORFLASH	0x03		// 片外 norflash （读写）
	#define NORFLASH_ADDR_MIN		0
	#define NORFLASH_ADDR_MAX		((512*1024+512*1024)-1)

#define	MEM_FRAM		0x04		// FRAM 存储器
	#define FRAM_ADDR_MIN			0
	#define FRAM_ADDR_MAX			((8*1024)-1)

#define MEM_GPIO		0x05		// IO 端口
	#define GPIO_ADDR_MIN			0
	#define GPIO_ADDR_MAX			((1*1024)-1)


#define MEM_MOTOS		0x06		// 电机控制
	#define MOTOS_ADDR_MIN			0
	#define MOTOS_ADDR_MAX			(0x5F)
		// 0x00--0x03  电机1位置
		// 0x10--0x13  电机2位置
		// 0x20--0x23  电机3位置
		// 0x30--0x33  电机4位置
		// 0x40--0x43  电机5位置
		// 0x50--0x53  电机6位置

		// 设置到某个位置，电机转动到这个位置，读取位置到达设定位置，运动结束

#define MEM_ECDS		0x07		// 编码器（只读）
	#define ECDS_ADDR_MIN			0
	#define ECDS_ADDR_MAX			(0x2F)
		// 0x00--0x03  编码器1计数
		// 0x10--0x13  编码器2计数
		// 0x20--0x23 MP计数

#define MEM_ADC			0x08		// AD值（只读）
	#define ADC_ADDR_MIN			0
	#define ADC_ADDR_MAX			(0x1F)
		// 0x00--0x01  ADC1值
		// 0x10--0x11  ADC2值

#define MEM_COMM		0x09		// 通讯端口

	#define COMM_ADDR_MIN			0
	#define COMM_ADDR_MAX			(0x1F)
		// 0x00 -- 0x0F  232 串口1发送BUF
		// 0x10 -- 0x1F  232 串口2发送BUF
		// 0x20 -- 0x2F  485 串口3发送BUF

		// 0x70 -- 0x7F  CAN发送BUF

		// 0x100 -- 0x10F  232 串口1接收BUF
		// 0x110 -- 0x11F  232 串口2接收BUF
		// 0x120 -- 0x12F  485 串口3接收BUF

		// 0x170 -- 0x17F  CAN接收BUF

#endif
#endif

//------------------------------------------------------------------------
// 设置文件参数
#ifdef	UCMD_SET_FILE_PARAS

#endif

//------------------------------------------------------------------------
// 设置执行进度
#ifdef	UCMD_SET_EXEC_PROGRESS

#endif


//------------------------------------------------------------------------
// 设置分期密码
#ifdef	UCMD_SET_INSTALLMENT

#endif

//------------------------------------------------------------------------
// 设置经过时间
#ifdef	UCMD_SET_ELAPSED_TIME

#endif

//------------------------------------------------------------------------

// 手动控制命令
#ifdef UCMD_ACT_BYHAND

/*
		|-------------------------------------------------------------------|
		|-------------------------------------------------------------------|
		|		B6	B7		| 	B8	B9		|	B10	B11		|	B12	B13		|
		|-------------------------------------------------------------------|
		|	控制动作代码		|	控制参数1	|	控制参数2	|	控制参数3	|
		|-------------------------------------------------------------------|
		|					|				|				|				|
		|					|  				|				|				|
		|  					| 				|				|				|
		|-------------------------------------------------------------------|
		|-------------------------------------------------------------------|

*/

//--------------------------------------------------
// 控制动作定义

#define	MOTO_TO_ZERO		0x0001	// 电机归零
#define	MOVE_BY_HAND		0x0002	// 电机手动移动
#define	OUTPUT_CTRL			0x0003	// 输出控制
#define	MOTO_EN_CTRL		0x0004	// 电机使能控制
#define	MANUAL_ACTION		0x0005	// 手动控制功能
#define TEST_THREADBK		0x0007	// 测试断线检测
#define SHAKE_FRAME_TEST	0x0008	// 抖框测试

// 参数1要看具体应用

// 手动移动的 控制参数2 定义
#define	MT_MOVE_DIR_STOP	0x0000	// 停止转动
#define	MT_MOVE_DIR_POSI	0x0001	// 正向移动（x向右，y向上，升降向上）
#define	MT_MOVE_DIR_NEGA	0x0002	// 反向移动（x向左，y向下，升降向下）


// 手动移动的 控制参数3 定义
// 速度值，rpm 或 mmps


// 电机使能的 控制参数2 定义
#define	MT_SERVO_ON			0x0001	// 电机使能开
#define	MT_SERVO_OFF		0x0002	// 电机使能关


// 手动控制功能的具体代码要看具体应用





#endif


//------------------------------------------------------------------------

// 机器工作命令
#ifdef UCMD_MC_WORK

/*
		|-------------------------------------------------------|
		|-------------------------------------------------------|
		|		B6	B7		| 	B8	B9	B10	B11	|	B12	B13		|
		|-------------------------------------------------------|
		|	工作控制功能		|	控制参数1		|	控制参数2	|
		|-------------------------------------------------------|
		|					|					|				|
		|					|  					|				|
		|  					| 					|				|
		|-------------------------------------------------------|
		|-------------------------------------------------------|

*/

// 工作控制功能

#define	WORK_START				0x0001		// 启动工作
#define	WORK_PAUSE				0x0002		// 暂停工作
#define	WORK_FINISH				0x0003		// 结束工作（流程复位）
#define	WORK_FIND_ZERO			0x0004		// 自动找零

#define	WORK_GOTO_START			0x0005		// 回起点
#define	WORK_GOTO_ANCHOR		0x0006		// 回定位点
#define	WORK_GOTO_OFFSET		0x0007		// 回偏移点
#define	WORK_CHECK_FRAME		0x0008		// 边框检查
#define	WORK_CUT_FRAME			0x0009		// 边框切割
#define	WORK_CUT_XLINE			0x000A		// 手动断布

#define	WORK_FAST_JUMP			0x000B		// 快速进退
#define	WORK_GOTO_WKPOS			0x000C		// 回工作点

#define	WORK_GOTO_FEEDT			0x000D		// 回穿线点
#define	WORK_GOTO_CHGBO			0x000E		// 回换梭位

#define	WORK_FEED_MOVE			0x000F		// 进料退料

#define	WORK_DRAW_LATTICE		0x0010		// 画格子图

#define	WORK_GOTO_FINISH		0x0011		// 回结束点
#define	WORK_GOTO_ZERO			0x0012		// 回零点（回绣框原点）


#define	WORK_RPM_CHG            0x0020		// 速度改变
#define	WORK_FILE_IDX_CHG       0x0021		// 文件序号改变


#define WORK_SIMULATION_FRAME	0x0026		// 空走边框
#define	WORK_GOTO_FEED			0x0027		// 回上料点
#define WORK_SET_OFFSET			0x0028		// 定偏移点
#define WORK_SET_FEED			0x0029		// 定上料点

#define WORK_ACT_OIL			0x0050		// 工作中加油

// 启动工作参数
#define	WKMD_ONCE				0
#define	WKMD_NORMAL				1	// 正常
#define	WKMD_SIMULATION			2	// 模拟（空走）
#define	WKMD_BACKWORD			3	// 回退


#endif


#ifdef UCMD_MOVE_TO

/*
		|-------------------------------------------------------|
		|-------------------------------------------------------|
		|		B6	B7 B8 B9		|	B10	B11	B12	B13			|
		|-------------------------------------------------------|
		|			x坐标			|		Y坐标				|
		|-------------------------------------------------------|
		|							|							|
		|							|  							|
		|  							| 							|
		|-------------------------------------------------------|
		|-------------------------------------------------------|

*/


#endif

//------------------------------------------------------------------------

// 启动文件传输
#ifdef UCMD_START_TRANS


#endif

//------------------------------------------------------------------------

// 文件传输命令
#ifdef UCMD_TRANS_FILE_DATA


#endif


//------------------------------------------------------------------------
#ifdef	UCMD_INVALID_FILE		// 文件失效命令


#endif


//------------------------------------------------------------------------

#ifdef	UCMD_SET_FILE_LIST		// 设置文件列表


#endif


//------------------------------------------------------------------------
#ifdef UCMD_TRA_BOARD


#endif
//------------------------------------------------------------------------


// 下位机升级
#ifdef UCMD_MC_UPDATE


#endif
  
//------------------------------------------------------------------------

// 发送传感信号
// u8  sendSensors.exData[MAX_EXDP_LEN]


#ifdef DCMD_SEND_SENSORS

	#define	DSS_DEF_IDX			0x03FE	// 未使用接口定义地址
	#define	DSS_DEF_BIT			0x01	// 未使用接口定义位
	
//----------------------------------------------------------------
// 位:
		#define	DSS_BIT1		0x01	// idx1
		#define	DSS_BIT2		0x02	// idx2
		#define	DSS_BIT3		0x04	// idx3
		#define	DSS_BIT4		0x08	// idx4
		#define	DSS_BIT5		0x10	// idx5
		#define	DSS_BIT6		0x20	// idx6
		#define	DSS_BIT7		0x40	// idx7
		#define	DSS_BIT8		0x80	// idx8	
		
// 机头1~16位:
		#define	DSS_HEAD_01		DSS_BIT1	// idx1
		#define	DSS_HEAD_02		DSS_BIT2	// idx2
		#define	DSS_HEAD_03		DSS_BIT3	// idx3
		#define	DSS_HEAD_04		DSS_BIT4	// idx4
		#define	DSS_HEAD_05		DSS_BIT5	// idx5
		#define	DSS_HEAD_06		DSS_BIT6	// idx6
		#define	DSS_HEAD_07		DSS_BIT7	// idx7
		#define	DSS_HEAD_08		DSS_BIT8	// idx8	 
		#define	DSS_HEAD_09		DSS_BIT1	// idx1
		#define	DSS_HEAD_10		DSS_BIT2	// idx2
		#define	DSS_HEAD_11		DSS_BIT3	// idx3
		#define	DSS_HEAD_12		DSS_BIT4	// idx4
		#define	DSS_HEAD_13		DSS_BIT5	// idx5
		#define	DSS_HEAD_14		DSS_BIT6	// idx6
		#define	DSS_HEAD_15		DSS_BIT7	// idx7
		#define	DSS_HEAD_16		DSS_BIT8	// idx8	
		
//----------------------------------------------------------------
// 1.基础信号 0x0000~0x001F
#if (1)
		//--------------------------------
		#define	DSS1_B_START_BT		0x0000	// 启动按钮(1~8)
		#define	DSS1_B_PAUSE_BT		0x0001	// 暂停按钮(1~8)
		#define	DSS1_B_JOG_BT		0x0002	// 点动按钮(1~8)
		#define	DSS1_B_FRMOP_BT		0x0003	// 开框按钮(1~8)
		#define	DSS1_B_AUTO_BT		0x0004	// 手动按钮(1~8)
		#define	DSS1_B_READY_BT		0x0005	// 就绪按钮(1~8)
		#define	DSS1_B_KEY_BT		0x0006	// 钥匙按钮(1~8)
		#define	DSS1_B_AIR_TEST		0x0007	// 气压检测(1~8)
		#define	DSS1_B_SAFE_TEST	0x0008	// 安全输入(1~8)
		#define	DSS1_B_TPLPOS		0x0009	// 模板到位(1~8)
		#define	DSS1_B_MOTO_ALM1	0x000A	// 电机报警(1~8)
		#define	DSS1_B_MOTO_ALM2	0x000B	// 电机报警(9~16)
		#define	DSS1_B_MOTO_ALM3	0x000C	// 电机报警(17~24)
		#define	DSS1_B_MOTO_ALM4	0x000D	// 电机报警(25~32)
		#define	DSS1_B_MOTO_ALM5	0x000E	// 电机报警(33~40)
		#define	DSS1_B_MOTO_ALM6	0x000F	// 电机报警(41~48)

		#define	DSS1_B_BASE_TEST	0x0010	// 安全输入(1~8)
		#define	DSS1_BASE_POW		DSS_BIT1	// 加电信号
		#define	DSS1_B_OIL_BT		0x0011	// 加油按钮(1~8)
//	0x0011 ~ 0x001F					// 基础信号 预留
#endif

//----------------------------------------------------------------
// 2.框位(轴)置信号 0x0020~0x007F
#if (1)		 
		//--------------------------------	 
		#define	DSS2_F1_ZERO_POS	0x0020	// 框架(轴)1 零位
		#define	DSS2_F1_SLOW_POS	0x0021	// 框架(轴)1 降速
		#define	DSS2_F1_NLIMT_POS	0x0022	// 框架(轴)1 限位-
		#define	DSS2_F1_PLIMT_POS	0x0023	// 框架(轴)1 限位+
			#define	DSS2_F1_X		DSS_BIT1	// X  (主框架X)
			#define	DSS2_F1_Y		DSS_BIT2	// Y  (主框架Y)
			#define	DSS2_F1_Y2		DSS_BIT3	// Y  (主框架Y2)
			#define	DSS2_F1_X2		DSS_BIT4	// X  (主框架X2)

		#define	DSS2_F2_ZERO_POS	0x0024	// 框架(轴)2 零位
		#define	DSS2_F2_SLOW_POS	0x0025	// 框架(轴)2 降速
		#define	DSS2_F2_NLIMT_POS	0x0026	// 框架(轴)2 限位-
		#define	DSS2_F2_PLIMT_POS	0x0027	// 框架(轴)2 限位+
			#define	DSS2_F2_SP0		DSS_BIT1	// 备用2
			#define	DSS2_F2_SP1		DSS_BIT2	// 备用2
			#define	DSS2_F2_SP2		DSS_BIT3	// 备用2
			#define	DSS2_F2_SP3		DSS_BIT4	// 备用2
			#define	DSS2_F2_SP4		DSS_BIT5	// 备用2
			#define	DSS2_F2_SP5		DSS_BIT6	// 备用2
			#define	DSS2_F2_SP6		DSS_BIT7	// 备用2
			#define	DSS2_F2_SP7		DSS_BIT8	// 备用2

		#define	DSS2_F3_ZERO_POS	0x0028	// 框架(轴)3 零位
		#define	DSS2_F3_SLOW_POS	0x0029	// 框架(轴)3 降速
		#define	DSS2_F3_NLIMT_POS	0x002A	// 框架(轴)3 限位-
		#define	DSS2_F3_PLIMT_POS	0x002B	// 框架(轴)3 限位+
			#define	DSS2_F3_SP0		DSS_BIT1	// 备用3
			#define	DSS2_F3_SP1		DSS_BIT2	// 备用3
			#define	DSS2_F3_SP2		DSS_BIT3	// 备用3
			#define	DSS2_F3_SP3		DSS_BIT4	// 备用3
			#define	DSS2_F3_SP4		DSS_BIT5	// 备用3
			#define	DSS2_F3_SP5		DSS_BIT6	// 备用3
			#define	DSS2_F3_SP6		DSS_BIT7	// 备用3
			#define	DSS2_F3_SP7		DSS_BIT8	// 备用3

		#define	DSS2_F4_ZERO_POS	0x002C	// 框架(轴)4 零位
		#define	DSS2_F4_SLOW_POS	0x002D	// 框架(轴)4 降速
		#define	DSS2_F4_NLIMT_POS	0x002E	// 框架(轴)4 限位-
		#define	DSS2_F4_PLIMT_POS	0x002F	// 框架(轴)4 限位+
			#define	DSS2_F4_SP0		DSS_BIT1	// 备用4
			#define	DSS2_F4_SP1		DSS_BIT2	// 备用4
			#define	DSS2_F4_SP2		DSS_BIT3	// 备用4
			#define	DSS2_F4_SP3		DSS_BIT4	// 备用4
			#define	DSS2_F4_SP4		DSS_BIT5	// 备用4
			#define	DSS2_F4_SP5		DSS_BIT6	// 备用4
			#define	DSS2_F4_SP6		DSS_BIT7	// 备用4
			#define	DSS2_F4_SP7		DSS_BIT8	// 备用4
		 
		//--------------------------------	  
		#define	DSS2_RU_ZERO1_POS	0x0030	// 缝纫上旋转零位(1~8)
		#define	DSS2_RU_ZERO2_POS	0x0031	// 缝纫上旋转零位(9~16)
		#define	DSS2_RU_NLIMT1_POS	0x0032	// 缝纫上旋转限位-(1~8)
		#define	DSS2_RU_NLIMT2_POS	0x0033	// 缝纫上旋转限位-(9~16)
		#define	DSS2_RU_PLIMT1_POS	0x0034	// 缝纫上旋转限位+(1~8)
		#define	DSS2_RU_PLIMT2_POS	0x0035	// 缝纫上旋转限位+(9~16)
		#define	DSS2_RD_ZERO1_POS	0x0036	// 缝纫下旋转零位(1~8)
		#define	DSS2_RD_ZERO2_POS	0x0037	// 缝纫下旋转零位(9~16)
		#define	DSS2_RD_NLIMT1_POS	0x0038	// 缝纫下旋转限位-(1~8)
		#define	DSS2_RD_NLIMT2_POS	0x0039	// 缝纫下旋转限位-(9~16)
		#define	DSS2_RD_PLIMT1_POS	0x003A	// 缝纫下旋转限位+(1~8)
		#define	DSS2_RD_PLIMT2_POS	0x003B	// 缝纫下旋转限位+(9~16)
		#define	DSS2_CT_ZERO1_POS	0x003C	// 裁刀旋转零位(1~8)
		#define	DSS2_CT_ZERO2_POS	0x003D	// 裁刀旋转零位(9~16)
		#define	DSS2_PU_SP1_POS		0x003E	// 冲孔旋转零位(1~8)
		#define	DSS2_PU_SP2_POS		0x003F	// 冲孔旋转零位(9~16)

		//--------------------------------	 
		#define	DSS2_UD_SU1_POS		0x0040	// 缝纫机头 高位(1~8)
		#define	DSS2_UD_SU2_POS		0x0041	// 缝纫机头 高位(9~16)
		#define	DSS2_UD_SD1_POS		0x0042	// 缝纫机头 低位(1~8)
		#define	DSS2_UD_SD2_POS		0x0043	// 缝纫机头 低位(9~16)
		#define	DSS2_UD_PU1_POS		0x0044	// 冲孔机头 高位(1~8)
		#define	DSS2_UD_PU2_POS		0x0045	// 冲孔机头 高位(9~16)
		#define	DSS2_UD_PD1_POS		0x0046	// 冲孔机头 低位(1~8)
		#define	DSS2_UD_PD2_POS		0x0047	// 冲孔机头 低位(9~16)
		#define	DSS2_UD_CU1_POS		0x0048	// 裁切机头 高位(1~8)
		#define	DSS2_UD_CU2_POS		0x0049	// 裁切机头 高位(9~16)
		#define	DSS2_UD_CD1_POS		0x004A	// 裁切机头 低位(1~8)
		#define	DSS2_UD_CD2_POS		0x004B	// 裁切机头 低位(9~16)
		#define	DSS2_UD_IU1_POS		0x004C	// 画笔机头 高位(1~8)
		#define	DSS2_UD_IU2_POS		0x004D	// 画笔机头 高位(9~16)
		#define	DSS2_UD_ID1_POS		0x004E	// 画笔机头 低位(1~8)
		#define	DSS2_UD_ID2_POS		0x004F	// 画笔机头 低位(9~16)
										  
		//--------------------------------	 
		#define	DSS2_UD_ZU1_POS		0x0050	// 压枣压头 高位(1~8)
		#define	DSS2_UD_ZU2_POS		0x0051	// 压枣压头 高位(9~16)
		#define	DSS2_UD_ZD1_POS		0x0052	// 压枣压头 低位(1~8)
		#define	DSS2_UD_ZD2_POS		0x0053	// 压枣压头 低位(9~16)
		#define	DSS2_UD_SP1U1_POS	0x0054	// 升降滑台备用 高位(1~8)
		#define	DSS2_UD_SP1U2_POS	0x0055	// 升降滑台备用 高位(9~16)
		#define	DSS2_UD_SP2D1_POS	0x0056	// 升降滑台备用 低位(1~8)
		#define	DSS2_UD_SP2D2_POS	0x0057	// 升降滑台备用 低位(9~16)
		#define	DSS2_UD_SP3U1_POS	0x0058	// 升降滑台备用 高位(1~8)
		#define	DSS2_UD_SP3U2_POS	0x0059	// 升降滑台备用 高位(9~16)
		#define	DSS2_UD_SP4D1_POS	0x005A	// 升降滑台备用 低位(1~8)
		#define	DSS2_UD_SP4D2_POS	0x005B	// 升降滑台备用 低位(9~16)
		#define	DSS2_UD_SP5U1_POS	0x005C	// 升降滑台备用 高位(1~8)
		#define	DSS2_UD_SP5U2_POS	0x005D	// 升降滑台备用 高位(9~16)
		#define	DSS2_UD_SP6D1_POS	0x005E	// 升降滑台备用 低位(1~8)
		#define	DSS2_UD_SP6D2_POS	0x005F	// 升降滑台备用 低位(9~16)
		 
		//	0x0060 ~ 0x007F					// 框架位置信号 预留
#endif
//----------------------------------------------------------------
// 3.主轴位置信号 0x080~0x00BF
#if (1)		
		//--------------------------------	  
		#define	DSS3_HS_UZ1_POS		0x0080	// 缝纫针停车位(1~8)
		#define	DSS3_HS_UZ2_POS		0x0081	// 缝纫针停车位(9~16)
		#define	DSS3_HS_UG1_POS		0x0082	// 缝纫针勾线位(1~8)
		#define	DSS3_HS_UG2_POS		0x0083	// 缝纫针勾线位(9~16)
		#define	DSS3_HS_UU1_POS		0x0084	// 缝纫针上位(1~8)
		#define	DSS3_HS_UU2_POS		0x0085	// 缝纫针上位(9~16)
		#define	DSS3_HS_UL1_POS		0x0086	// 缝纫离合对位(1~8)
		#define	DSS3_HS_UL2_POS		0x0087	// 缝纫离合对位(9~16)
		#define	DSS3_HS_DZ1_POS		0x0088	// 缝纫梭停车位(1~8)
		#define	DSS3_HS_DZ2_POS		0x0089	// 缝纫梭停车位(9~16)
		#define	DSS3_HS_DG1_POS		0x008A	// 缝纫梭勾线位(1~8)
		#define	DSS3_HS_DG2_POS		0x008B	// 缝纫梭勾线位(9~16)
		#define	DSS3_HS_SP1_POS		0x008C	// 缝纫主轴预留(1~8)
		#define	DSS3_HS_SP2_POS		0x008D	// 缝纫主轴预留(9~16)
		#define	DSS3_HS_SP3_POS		0x008E	// 缝纫主轴预留(1~8)
		#define	DSS3_HS_SP4_POS		0x008F	// 缝纫主轴预留(9~16)
		 
		//--------------------------------	 
		#define	DSS3_HE_PZ1_POS		0x0090	// 冲孔主轴零位(1~8)
		#define	DSS3_HE_PZ2_POS		0x0091	// 冲孔主轴零位(9~16)
		#define	DSS3_HE_CZ1_POS		0x0092	// 裁刀主轴零位(1~8)
		#define	DSS3_HE_CZ2_POS		0x0093	// 裁刀主轴零位(9~16)
		#define	DSS3_HE_TNZ1_POS	0x0094	// 毛巾主轴针零位(1~8)
		#define	DSS3_HE_TNZ2_POS	0x0095	// 毛巾主轴针零位(9~16)
		#define	DSS3_HE_TSZ1_POS	0x0096	// 毛巾主轴梭零位(1~8)
		#define	DSS3_HE_TSZ2_POS	0x0097	// 毛巾主轴梭零位(9~16)
		#define	DSS3_HE_EZ1_POS		0x0098	// 绣花主轴零位(1~8)
		#define	DSS3_HE_EZ2_POS		0x0099	// 绣花主轴零位(9~16)
		#define	DSS3_HE_SP1_POS		0x009A	// 非缝纫主轴预留(1~8)
		#define	DSS3_HE_SP2_POS		0x009B	// 非缝纫主轴预留(9~16)
		#define	DSS3_HE_EH1_POS		0x009C	// 绣花梭主轴零位(1~8)
		#define	DSS3_HE_EH2_POS		0x009D	// 绣花梭主轴零位(9~16)
		#define	DSS3_HE_SP5_POS		0x009E	// 非缝纫主轴预留(1~8)
		#define	DSS3_HE_SP6_POS		0x009F	// 非缝纫主轴预留(9~16)
		#define	DSS3_HE_PMP1_POS	0x00A0	// 冲孔主轴位置(1~8)
		#define	DSS3_HE_PMP2_POS	0x00A1	// 冲孔主轴位置(9~16)
		//	0x00A0 ~ 0x00BF					// 主轴位置信号 预留
#endif	 
  
//----------------------------------------------------------------
// 4.机头按钮(开关)信号 0x00C0~0x00FF
#if (1)
		//-------------------------------- 
		#define	DSS4_K_SU1_BT		0x00C0	// 缝纫升降按钮(1~8)
		#define	DSS4_K_SU2_BT		0x00C1	// 缝纫升降按钮(9~16)
		#define	DSS4_K_KU1_BT		0x00C2	// 冲孔升降按钮(1~8)
		#define	DSS4_K_KU2_BT		0x00C3	// 冲孔升降按钮(9~16)
		#define	DSS4_K_CU1_BT		0x00C4	// 裁刀升降按钮(1~8)
		#define	DSS4_K_CU2_BT		0x00C5	// 裁刀升降按钮(9~16)
		#define	DSS4_K_PU1_BT		0x00C6	// 画笔升降按钮(1~8)
		#define	DSS4_K_PU2_BT		0x00C7	// 画笔升降按钮(9~16)
		#define	DSS4_K_ZU1_BT		0x00C8	// 压枣升降按钮(1~8)
		#define	DSS4_K_ZU2_BT		0x00C9	// 压枣升降按钮(9~16)
		#define	DSS4_K_SL1_BT		0x00CA	// 缝纫锁头按钮(1~8)
		#define	DSS4_K_SL2_BT		0x00CB	// 缝纫锁头按钮(9~16)
		#define	DSS4_K_PL1_BT		0x00CC	// 冲孔锁头按钮(1~8)
		#define	DSS4_K_PL2_BT		0x00CD	// 冲孔锁头按钮(9~16)
		#define	DSS4_K_SR1_BT		0x00CE	// 缝纫补缝按钮(1~8)
		#define	DSS4_K_SR2_BT		0x00CF	// 缝纫补缝按钮(9~16)

		#define	DSS4_K_BLT_BT		0x00D0	// 传送带按钮
			#define	DSS4_K_BLT1		DSS_BIT1	// 传送带前进按钮
			#define	DSS4_K_BLT2		DSS_BIT2	// 传送带后退按钮
			#define	DSS4_K_BLT3		DSS_BIT3	// 上料传送带前进按钮
			#define	DSS4_K_BLT4		DSS_BIT4	// 上料传送带后退按钮
			#define	DSS4_K_BLT5		DSS_BIT5	// 缝纫传送带前进按钮
			#define	DSS4_K_BLT6		DSS_BIT6	// 缝纫传送带后退按钮
			#define	DSS4_K_BLT7		DSS_BIT7	// 备用
			#define	DSS4_K_BLT8		DSS_BIT8	// 备用



		//	0x00D0 ~ 0x00FF					// 机头按钮(开关)信号 预留
#endif

//----------------------------------------------------------------
// 5.机头检测信号 0x0100~0x01FF
#if (1)
	//--------------------------------  
	// 5.1 绣花机  0x0100~0x016F
	#if (1)   
		//	0x0100 ~ 0x016F					// 绣花机机头检测信号 预留
		#define	DSS5_ST0_DCZ1		0x0100	// 绣花下剪线回位(1~8)
		#define	DSS5_ST0_DCZ2		0x0101	// 绣花下剪线回位(9~16)
		#define DSS5_ST0_MAZP		0x0102	// M轴零位
			#define DSS5_MA_CHENILLE	DSS_BIT1	// 毛巾M轴零位
			#define DSS5_MA_RING	DSS_BIT2	// 毛巾打环零位
			#define DSS5_MA_COIL	DSS_BIT3	// 缠绕M轴零位
			#define DSS5_MA_CAP		DSS_BIT4	// 帽框到位

		#define DSS5_ST0_DEVS		0x0103	// 装置信号
			#define DSS5_ACS_ALM	DSS_BIT1	// 自动换梭报警
			#define DSS5_TR_ALM		DSS_BIT2	// 跟踪绳绣报警

		#define DSS5_ST0_QUI		0x0104	// 勾换零位
			#define DSS5_SZ_HOOK	DSS_BIT1	// 勾刀回位
			#define DSS5_SZ_COLOR	DSS_BIT2	// 换色零位
			#define DSS5_SZ_CPOS1	DSS_BIT3	// 换色位置1
			#define DSS5_SZ_CPOS2	DSS_BIT4	// 换色位置2
			#define DSS5_SZ_CPOS3	DSS_BIT5	// 换色位置3
			#define DSS5_SZ_CPOS4	DSS_BIT6	// 换色位置4
			#define DSS5_SZ_FOOT	DSS_BIT7	// 脚踏开关
		
	#endif
  
	//--------------------------------
	// 5.2 缝纫机 0x0170~0x01AF
	#if (1)  
		//--------------------------------
		#define	DSS5_ST1_BKU1		0x0170	// 缝纫面线断线检测(1~8)
		#define	DSS5_ST1_BKU2		0x0171	// 缝纫面线断线检测(9~16)
		#define	DSS5_ST1_BKD1		0x0172	// 缝纫底线断线检测(1~8)
		#define	DSS5_ST1_BKD2		0x0173	// 缝纫底线断线检测(9~16)
		#define	DSS5_ST1_DCZ1		0x0174	// 缝纫下剪线回位(1~8)
		#define	DSS5_ST1_DCZ2		0x0175	// 缝纫下剪线回位(9~16)
		#define	DSS5_ST1_FTZ1		0x0176	// 缝纫压脚提升零位(1~8)
		#define	DSS5_ST1_FTZ2		0x0177	// 缝纫压脚提升零位(9~16)
		#define	DSS5_ST1_JXH1		0x0178	// 缝纫夹线高位(1~8)
		#define	DSS5_ST1_JXH2		0x0179	// 缝纫夹线高位(9~16)
		#define	DSS5_ST1_JXL1		0x017A	// 缝纫夹线低位(1~8)
		#define	DSS5_ST1_JXL2		0x017B	// 缝纫夹线低位(9~16)
		#define	DSS5_ST1_JXO1		0x017C	// 缝纫夹线开位(1~8)
		#define	DSS5_ST1_JXO2		0x017D	// 缝纫夹线开位(9~16)
		#define	DSS5_ST1_JXC1		0x017E	// 缝纫夹线合位(1~8)
		#define	DSS5_ST1_JXC2		0x017F	// 缝纫夹线合位(9~16)
 
		//	0x0180 ~ 0x01AF					// 缝纫机机头检测信号 预留
		#define	DSS5_ST1_DCO1		0x0180	// 缝纫下剪线开位(1~8)
		#define	DSS5_ST1_DCO2		0x0181	// 缝纫下剪线开位(9~16)
		
		#define DSS5_ST1_NLC1		0x0182	// 针板盖检测(1~8)
		#define DSS5_ST1_NLC2		0x0183	// 针板盖检测(9~16)

		#define DSS5_ST1_SNZ1		0x0184	// 摆针零位(1~8)
		#define DSS5_ST1_SNZ2		0x0185	// 摆针零位(9~16)
	#endif		

//	0x0180 ~ 0x01AF					// 缝纫机机头检测信号 预留

	//--------------------------------
	// 5.3 激光/裁床/铣切 0x01B0~0x01FF
	#if (1)
		//--------------------------------     
		//	0x01B0 ~ 0x01FF					// 非缝绣机机头检测信号 预留
	#endif			
 
#endif				
							
//----------------------------------------------------------------
// 6.通用检测信号(按机型划分) 0x0200~0x02FF
#if (1)
//--------------------------------   

// 6.4 其他机型 0x02B0~0x02FF
	#if (1)
		//--------------------------------     
		//	0x02B0 ~ 0x02FF					// 其他机型检测信号 预留
		#define	DSS6_ADDR_02B0		0x02B0	// 自动换梭信号
									// BIT1 : 梭在位检测
									// BIT2 : 扣线伸出位
									// BIT3 : 换梭旋转伸出位
									// BIT4 : 换梭旋转收回位
									// BIT5 : 换梭推动伸出位
									// BIT6 : 换梭推动收回位
									// BIT7 : 换梭摆动伸出位
									// BIT8 : 换梭摆动收回位
		#define	DSS6_ADDR_02B1		0x02B1	// 自动对边信号
									// BIT1 : 对边1左限位
									// BIT2 : 对边1左位置
									// BIT3 : 对边1右位置
									// BIT4 : 对边1右限位
									// BIT5 : 对边2左限位
									// BIT6 : 对边2左位置
									// BIT7 : 对边2右位置
									// BIT8 : 对边2右限位
		#define	DSS6_ADDR_02B2		0x02B2	// 自动上料架信号
									// BIT1 : 上料架1缺料
									// BIT2 : 上料架1满料
									// BIT3 : 上料架1启动
									// BIT4 : 预留4
									// BIT5 : 上料架2缺料
									// BIT6 : 上料架2满料
									// BIT7 : 上料架2启动
									// BIT8 : 预留8
		#define	DSS6_ADDR_02B3		0x02B3	// 主动送料信号
									// BIT1 : 送料1启动
									// BIT2 : 送料1停止
									// BIT3 : 送料2启动
									// BIT4 : 送料2停止
									// BIT5 : 送料3启动
									// BIT6 : 送料3停止
									// BIT7 : 送料4启动
									// BIT8 : 送料4停止

		#define	DSS6_ADDR_02B8		0x02B8	// 床笠裙边机信号
									// BIT1 : 上机头零位
									// BIT2 : 下机头零位
									// BIT3 : 上机头断线检测
									// BIT4 : 下机头断线检测
									// BIT5 : 罗拉电机控制按钮
									// BIT6 : 缺料检测
									// BIT7 :
									// BIT8 :

		#define	DSS6_ADDR_02B9		0x02B9	// 床笠裙边机信号
									// BIT1 : 上料对边左限位
									// BIT2 : 上料对边右限位
									// BIT3 : 上料对边左检测
									// BIT4 : 上料对边右检测
									// BIT5 : 上机头对边左限位
									// BIT6 : 上机头对边右限位
									// BIT7 : 上机头对边左检测
									// BIT8 : 上机头对边右检测
	#endif			
 
#endif				


//----------------------------------------------------------------
// 7.个例检测信号(按添加日期划分) 0x0300~0x03FF
#if (1) 
	//--------------------------------   
	//	0x0300 ~ 0x030F					 
	 
	//--------------------------------  
	//	0x03D0 ~ 0x03DF					 
	#if (1)   
	#endif	
	 
	//--------------------------------  
	//	0x03E0 ~ 0x03EF					 
	#if (1)   
	#endif	
	 
	//--------------------------------  
	//	0x03F0 ~ 0x03FE					 
	#if (1)   
	#endif	
	  
				
#endif							
					 
#endif		//#ifdef DCMD_SEND_SENSORS	// 发送传感信号
//------------------------------------------------------------------------

// 命令结构定义

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 toggle;
		u8 rev[6];
		u16 crc;
	} __attribute__ ((packed)) getMcStatus;		// 读取机器状态

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 paraType;
		u16 paraId;		// 0, 所有参数; 1--256, 对应的参数号
		u8 rev[4];
		u16 crc;
	} __attribute__ ((packed)) getMcParas;		// 读取机器参数

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u32 begAddr;
		u16 rdSize;
		u8 rev[2];

		u16 crc;
	} __attribute__ ((packed)) getMemData;		// 读取内存数据

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 backType;
		u8 rev[6];
		u16 crc;
	} __attribute__ ((packed)) getSensors;		// 读取传感信号

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u8 fileType;
		u8 fileIdx;
		u8 rev[6];
		u16 crc;
	} __attribute__ ((packed)) getFileInfo;		// 读取文件信息

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 fileId;
		u8 rev[6];
		u16 crc;
	} __attribute__ ((packed)) getTransResult;	// 读取传输结果

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 exLen;
		u16 exCrc;

		u16 cfgItem;
		u8 rev[2];
		u16 crc;

		u8 exData[MAX_EXDP_LEN];
	} __attribute__ ((packed)) setMcConfig;		// 设置机器配置

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 staCode;
		u16 para;
		u8 rev[4];
		u16 crc;
	} __attribute__ ((packed)) setMcStatus;		// 设置机器状态

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 exLen;
		u16 exCrc;

		u16 paraType;
		u16 paraId;		// 0, 所有参数; 1--256, 对应的参数号
		u16 crc;

		u8 exData[MAX_EXDP_LEN];
	} __attribute__ ((packed)) setParas;		// 设置下位机参数

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 exLen;
		u16 exCrc;

		u32 begAddr;

		u16 crc;

		u8 exData[MAX_EXDP_LEN];
	} __attribute__ ((packed)) setMemData;		// 设置内存数据

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 exLen;
		u16 exCrc;

		u8 rev[4];
		u16 crc;

		u8 exData[MAX_EXDP_LEN];
	} __attribute__ ((packed)) setFileParas;	// 设置文件参数

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 exLen;
		u16 exCrc;

		u8 exDataType;		// 扩展数据类型
		u8 exDataIdx;
		u8 rev[2];
		u16 crc;

		u8 exData[MAX_EXDP_LEN];
	} __attribute__ ((packed)) setFileExData;	// 设置文件扩展数据

    struct
    {
        u8 sync[DP_SYNC_LEN];
        u16 cmdCode;

        u8 id;
        u8 nodetype;

        u8 rev[6];

        u16 crc;
    } __attribute__ ((packed)) setDefParas;     // 设置默认参数
	
	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)) setExecProgress;		// 设置进度命令

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 exLen;
		u16 exCrc;

		u8 rev[4];

		u16 crc;

		u8 exData[MAX_EXDP_LEN];

	} __attribute__ ((packed)) setInstallment;		// 设置分期密码

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u8 type;
		u32 time;			// 单位秒

		u8 rev[3];

		u16 crc;

	} __attribute__ ((packed)) setElapsedTime;		// UCMD_SET_ELAPSED_TIME 设置经过的时间

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 actCode;
		u16 para1;
		u16 para2;
		u16 para3;
		u16 crc;
	} __attribute__ ((packed)) actByhand;		// 手动动作功能

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 workCode;
		u32 para1;
		u16 para2;
		u16 crc;
	} __attribute__ ((packed)) mcWork;			// 机器工作命令

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		s32 posx;
		s32 posy;
		u16 crc;
	} __attribute__ ((packed)) moveFrameTo;			// 移动框架到位置命令

	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;		// 启动文件传输

	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;		// 文件数据传输

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 exLen;
		u16 exCrc;
		u32 fileIdxMap;
		u16 crc;

	} __attribute__ ((packed)) setFilesList;		// 设置文件列表

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;
		u16 upObj;
		u16 upFileID;
		u8 rev[4];
		u16 crc;
	} __attribute__ ((packed)) mcUpdate;			// 系统升级


	//----------------------------------

	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)) requestDatBlock;		// 请求文件数据

	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)) sendMcInfo;			// 发送机器信息

	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)) sendMcStatus;		// 发送机器状态

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 exLen;
		u16 exCrc;

		u16 paraType;
		u16 paraId;		// 0, 所有参数; 1--256, 对应的参数号
		u16 crc;

		u8 exData[MAX_EXDP_LEN];
	} __attribute__ ((packed)) sendMcParas;			// 发送机器参数

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 exLen;
		u16 exCrc;

		u32 begAddr;
		u16 crc;

		u8 exData[MAX_EXDP_LEN];
	} __attribute__ ((packed)) sendMemData;			// 发送内存数据
	
	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 exLen;
		u16 exCrc;

		u8 rev[4];
		u16 crc;

		u8 exData[MAX_EXDP_LEN];
	} __attribute__ ((packed)) sendSensors;			// 发送传感信号

	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)) sendFileInfo;		// 发送文件信息

	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)) sendTransResult;		// 发送传输结果

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;
		u16 exLen;
		u16 exCrc;
		u8 rev[4];
		u16 crc;
		u8 exData[MAX_EXDP_LEN];
	} __attribute__ ((packed)) sendDebugInfo;		// 发送调试信息

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u8 protocolType;		// 协议类型
		u8 nodeType;			// 遍历节点类型
		u8 traNum;				// 遍历个数
		u8 nodeId;				// 遍历起始节点ID
		u8 rev[4];
		u16 crc;
	} __attribute__ ((packed)) traverse;		// 遍历命令

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u8 rev[8];
		u16 crc;
	} __attribute__ ((packed)) rdBoardVer;		// 读取外围板程序版本

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u8 protocolType;		// 协议类型
		u8 nodeId;				// 节点ID
		u8 nodetype;			// 节点类型
		u8 rev[5];
		u16 crc;
	} __attribute__ ((packed)) updateBoard;		// 升级外围板

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 exLen;
		u16 exCrc;

		u8 protocolType;		// 协议类型
		u8 nodeId;				// 节点ID
		u8 nodeType;			// 节点类型
		u8 rev;
		u16 crc;

        u32 ver[8];
		u8 exData[MAX_EXDP_LEN-32];
	} __attribute__ ((packed)) sendBoardVer;			// 发送外围板程序版本

	struct
	{
		u8 sync[DP_SYNC_LEN];
		u16 cmdCode;

		u16 exLen;
		u16 exCrc;

		u8 nodeId;
		u8 nodeType;
		u8 paraid;
		u8 rev;
		u16 crc;

		u8 exData[MAX_EXDP_LEN];
	} __attribute__ ((packed)) boardPara;			// 发送外围板非易失性参数

}OperPacket;

//------------------------------------------------------------------------

void InitOperator(void);
void OperatorTask(void);
void OperatorTaskWhenRun(int revfile);
void OperatorTaskWhenBoot(void);

//------------------------------------------------------------------------

int IsNewOperCmd(void);

void SendMcStatus(int force);

void RequestFileData(u8 fileType, u8 fileIdx, u16 fileId, int datblockIdx);
int SendDebugInfo(char * pStr);
int SendFileParas(int beginX, int beginY);
 
//------------------------------------------------------------------------

#endif
