
//-------------------------------------------------------------------------------
// File Name:	headcontrol.h
// Brief: 
// Version:		1.0.0
// Create Date: 2018/05/02
// Create by: 	Marshal Lee
// Copyright: 
//				Copyright (c)  2017, GetonAgain Co., LTD.
//				All rights reserved.
//
// Modify by:	Marshal Lee
// Modify Date:	2018/05/02
//-------------------------------------------------------------------------------


#ifndef __SEWHDCONTROL_H__
#define	__SEWHDCONTROL_H__

#include "controlbus.h"

#if (CONTROL_BUS == COMM_CAN)
/*
	机头板控制板

*/

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

typedef struct
{
	u8 nodeTye;		// 节点类型
	u8 nodeId;		// 节点ID

	CtrlBusPacket ctrlCmd;		// 发给外围板的控制命令
	CtrlBusPacket exbSta;		// 外围板返回的状态命令
	CtrlBusPacket busSta;		// 外围板返回的总线状态命令
	CtrlBusPacket traCmd;		// 发给外围板的遍历命令
	BoardRegVal regVal;			// 外围板寄存器值
	CtrlBusPacket rdReg;		// 读取外围板寄存器值

	u8 cmdFlag;				// 有新命令标志		N5--接收到控制命令

	u8 staFlag;				// 有新状态标志		N5--发送BN_CMD_EXSTA
	u8 refSta;				// 刷新状态标志		N5--接收BN_CMD_EXSTA

	u8 traFlag;				// 有新命令标志		N5--接收到遍历命令
	u8 busFlag;				// 有新状态标志		N5--发送BN_CMD_BUSSTA

	u8 refVer;
	u8 verFlag;

	u8 transFlag;			// 数据传输标志		发送数据
	u8 exbupdateFlag;		// 外围板程序升级标志

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

	u8 refHeadPara;			// 刷新机头参数
	u8 headParaFlag;		// 接收机头参数标志

}SewHeadControl;

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

typedef union
{
	u8 buff[CAN_DATA_LEN];

	struct
	{
		u16 cmd;
		u8 subcmd;
		u8 para[5];
	} __attribute__ ((packed)) headCtrl;	// 机头板控制

	struct
	{
		u16 cmd;
		u16 pataId;
		s32 paraVal;		// 保留
	} __attribute__ ((packed)) headPara;	// 机头板参数

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

	struct
	{
		u32 staBits;	// 状态位
		u8 setedNP;		// 设置的当前针位
		u16 potValue;	// 电位器数值(毛巾提升电机)
		s8 curHoistLevel;	// 提升电机当前档位
	} __attribute__ ((packed)) headSta;		// 状态命令

	struct
	{
		u32 staBits;	// 状态位
		u8 setedNP;		// 设置的当前针位
		s16 footmotopos;	// 压脚电机位置
		u8 rev;
	} __attribute__ ((packed)) footHeadSta;		// 状态命令(独立压脚)

}SewHeadCommand;

//-------------------------------------------------------------------------------
// 控制命令定义

#define	CTRL_CMD_SEW_HEAD_CTRL			0x1000		// 缝纫机头板控制
#define	CTRL_CMD_SEW_HEAD_PARA			0x1001		// 缝纫机头板参数设置
#define CTRL_CMD_SEW_HEAD_NVPARA		0x1002		// 缝纫机头非易失性参数设置

//-------------------------------------------------------------------------------
// 子控制命令定义

#define CTRL_SUBCMD_SEW_WORK_STA			0x00		// 工作状态刷新
#define	CTRL_SUBCMD_SEW_ENABLE				0x01		// 机头控制功能打开
#define	CTRL_SUBCMD_SEW_DISABLE				0x02		// 机头控制功能关闭
#define CTRL_SUBCMD_SEW_OUTPUT_CTRL			0x03		// IO输出控制
#define CTRL_SUBCMD_SEW_ELCLIP_CTRL			0x04		// 电子夹线控制
#define CTRL_SUBCMD_SEW_IN_WORK				0x05		// 进入工作状态

#define CTRL_SUBCMD_SEW_PFOOT_CTRL			0x10		// 压脚电机控制
//-------------------------------------------------------------------------------
		#define CTRL_PFOOT_CMD_TO_ZERO			0x00		// 压脚电机归零
		#define CTRL_PFOOT_CMD_DIS				0x01		// 压脚电机失能
		#define CTRL_PFOOT_CMD_EN				0x02		// 压脚电机使能
		#define CTRL_PFOOT_CMD_RESET			0x03		// 压脚电机重启
		#define CTRL_PFOOT_CMD_UP				0x04		// 压脚电机上升
		#define CTRL_PFOOT_CMD_DOWN				0x05		// 压脚电机下降
		#define CTRL_PFOOT_CMD_BACK				0x06		// 压脚电机去回针位
//-------------------------------------------------------------------------------
#define CTRL_SUBCMD_SEW_PFOOT_FOLLOW_CTRL	0x11		// 压脚电机跟随
#define CTRL_SUBCMD_SEW_PFOOT_SET_POS		0x12		// 设定压脚工作下位
#define CTRL_SUBCMD_SEW_PFOOT_SET_ECD		0x13		// 校正编码器位置


// 状态位定义

#define	HDSTA_SEW_HEAD_LOCK			0x00000001		// 锁头状态标志（无论按钮锁头或软件锁头）

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

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

void InitSewHeadControl(SewHeadControl * pCtrl);

void SendSewHeadCommand(SewHeadControl * pCtrl, SewHeadCommand * pCmd);

void RequestSewHeadStatus(SewHeadControl * pCtrl);

void RequestSewHeadVersion(SewHeadControl * pCtrl);

void RequestSewHeadNvPara(SewHeadControl * pCtrl);

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




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

#endif

#endif
