
#ifndef __COLORCONTROL_H__
#define	__COLORCONTROL_H__

#include "controlbus.h"

#if (CONTROL_BUS == COMM_CAN)

/*

*/

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

typedef struct
{
	u8 nodeId;
	
	CtrlBusPacket ctrlCmd;		// 发给外围板的控制命令
	CtrlBusPacket exbSta;		// 外围板返回的状态命令
	BoardRegVal regVal;			// 外围板寄存器值
	CtrlBusPacket rdReg;		// 读取外围板寄存器值

	int cmdFlag;				// 有新命令标志
	int staFlag;				// 有新状态标志

	int refSta;					// 刷新状态标志

	int verFlag;				// 有新程序版本标志
	int refVer;					// 刷新程序版本标志

	int transFlag;				// 数据传输标志		发送数据

	u8 exbupdateFlag;			// 外围板程序升级标志

	u8 refNvPara;				// 刷新非易失性参数
	u8 nvParaFlag;				// 接收到非易失性参数标志

}ColorControl;

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

typedef union
{
	u8 buff[CAN_DATA_LEN];

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

	struct
	{
		u16 cmd;
		u8 subcmd;
		u8 para[5];
	} __attribute__ ((packed)) colorCtrl;	// 控制

	struct
	{
		u16 cmd;
		u8 needleNums;	// 针杆数量
		u8 rev[5];		// 预留
	} __attribute__ ((packed)) colorPara;	// 参数

	struct
	{
		u16 cmd;
		u8 parablockID;		// 参数块ID
		u8 paraID;			// 参数ID
		s32	paraval;		// 参数值
	} __attribute__ ((packed)) colorNvPara;	// 非易失性参数

	struct
	{
		u16 staBits;	// 状态位
		u16 potValue;	// 电位器值
		s8 curNeedle;	// 当前针位
		s8 needleNums;	// 针杆数量
		u8 rev[2];
	} __attribute__ ((packed)) colorSta;	// 状态

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

	struct
	{
		u16 cmd;
		u8 subcmd;		// 子命令
		u8 para[5];
	} __attribute__ ((packed)) chenilleCtrl;	// 毛巾绣控制

	struct
	{
		u16 staBits;	// 状态位
		u16 potValue;	// 电位器值(松紧线电机电位器)
		s8 curNeedle;	// 当前针位
		s8 needleNums;	// 针杆数量
		s8 elasticWirePos; // 松紧线电机位置
		u8 rev;
	} __attribute__ ((packed)) chenilleSta;	// 毛巾绣状态

	struct
	{
		u16 cmd;
		u8 para[6];	// 预留
	} __attribute__ ((packed)) chenillePara;	// 毛巾绣参数

}ColorCommand;

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


//-------------------------------------------------------------------------------
// 命令

/*
#define	CTRL_CMD_EMB_HEAD_CTRL			0x1000		// 平绣机头板控制
#define	CTRL_CMD_EMB_HEAD_PARA			0x1001		// 平绣机头板参数设置
#define CTRL_CMD_HEAD_NVPARA			0x1002		// 平绣机头非易失性参数设置

#define	CTRL_CMD_CHENILLE_HEAD_CTRL		0x1010		// 毛巾机头板控制
#define	CTRL_CMD_CHENILLE_HEAD_PARA		0x1011		// 毛巾机头板参数设置
#define CTRL_CMD_CHENILLE_NVPARA		0x1012		// 毛巾机头非易失性参数设置

#define	CTRL_CMD_COIL_HEAD_CTRL			0x1020		// 缠绕机头板控制
#define	CTRL_CMD_COIL_HEAD_PARA			0x1021		// 缠绕机头板参数设置
#define CTRL_CMD_COIL_NVPARA			0x1022		// 缠绕机头非易失性参数设置
*/

#define	CTRL_CMD_COLOR_CTRL				0x1100		// 控制命令
#define	CTRL_CMD_COLOR_PARA				0x1101		// 参数设置命令
#define CTRL_CMD_COLOR_NVPARA			0x1102		// 非易失性参数设置

// 控制命令的子命令
#define CTRL_SUBCMD_SWITCH_NEEDLE		0x01	// 换色控制
#define CTRL_SUBCMD_CHG_MOTO_CTRL		0x02	// 换色电机控制

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

//-------------------------------------------------------------------------------
// 毛巾绣控制
#define CTRL_CMD_CHENILLE_CTRL 		   	0x1110			//毛巾控制

// 子命令
#define CTRL_SUBCMD_ELASTIC_CTRL		0x01			// 松紧线控制
#define	CTRL_SUBCMD_CHENILLE_COLOR		0x02  		    // 毛巾换色控制

// 松紧线控制para[0]定义
#define	ELASTICWIRE_COLORCHANGE_POS				1				   // 松紧线电机换色位
#define	ELASTICWIRE_TRIMMING_POS			    2				   // 松紧线电机剪线位
#define ELASTICWIRE_CHAIN_POS					3				   // 松紧线电机链式位
#define	ELASTICWIRE_CHENILLE_POS				4				   // 松紧线电机毛巾位

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

void InitColorControl(ColorControl * pCtrl);

void SendColorCommand(ColorControl * pCtrl, ColorCommand * pCmd);

void RequestColorStatus(ColorControl * pCtrl);

void RequestColorVersion(ColorControl * pCtrl);

void RequestColorNvPara(ColorControl * pCtrl);

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




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

#endif
#endif
