#ifndef _CDCFrameCkCmdFrame_
#define _CDCFrameCkCmdFrame_

//数据注入指令从控发送数据协议

#pragma once
//#include "framelib/basetype.h"
//#include "framelib/DataInject.h"
#pragma pack(1)

typedef struct struProtocalDataInject_DC
{
	UINT8		DCtype;						//吊舱类型
	union
	{
		struct  
		{
			UINT8		SwitchCmd;					//开关指令
			INT16		param1;						//参数1
			INT16		param2;						//参数2
			UINT8		reserve[9];					//保留
		}DC_13Ins;//13所吊舱控制指令
		struct
		{
			BYTE		param;						//参数
			BYTE		param2;						//参数
			BYTE		param3;						//参数
			BYTE		param4;						//参数
			BYTE		param5;						//参数
			BYTE		param6;						//参数
			BYTE		param7;						//参数
			BYTE		param8;						//参数
			BYTE		param9;						//参数
			BYTE		param10;					//参数
			BYTE		param11;					//参数
			BYTE		param12;					//参数
			BYTE		param13;					//参数
			BYTE		param14;					//参数
		}DC_WHTJ;	//天进吊舱控制指令
		BYTE DataIn[14];//14个字节
	};
}ProtocalDataInject_DC;

typedef struct struDataInject_DC
{
	UINT8		DCtype;						//吊舱类型
	union
	{
		struct
		{
			UINT8		SwitchCmd;					//开关指令
			double		param1;						//参数1
			double		param2;						//参数2
			UINT8		reserve[9];					//保留
		}DC_13Ins;//13所吊舱控制指令
		struct
		{
			BYTE		param;						//参数
			BYTE		param2;						//参数
			BYTE		param3;						//参数
			BYTE		param4;						//参数
			BYTE		param5;						//参数
			BYTE		param6;						//参数
			BYTE		param7;						//参数
			BYTE		param8;						//参数
			BYTE		param9;						//参数
			BYTE		param10;					//参数
			BYTE		param11;					//参数
			BYTE		param12;					//参数
			BYTE		param13;					//参数
			BYTE		param14;					//参数
		}DC_WHTJ;//天进吊舱控制指令
		BYTE DC_Data[14];//14个字节
	};
}DataInject_DC;


//数据注入指令从控发送数据帧---13所吊舱
typedef struct struDCFrameCkCmd 
{
	UINT8 FrameHead[2];								//帧头EB 90
	UINT8 fcode;									//数据注入指令码
	ProtocalDataInject_DC protocalDataInject_DC;
	UINT16 crc16;									//校验位
}DCFrameCkCmd;


#pragma pack()
//数据结构体
typedef struct struDCFrameCkCmdData
{
	UINT8	fcode;									//数据注入指令码
	DataInject_DC dataInject_DC;
	UINT16   crc16;									//校验位
}DCFrameCkCmdData;
#pragma pack()

class CDCFrameCkCmdFrame : public CFrameAbstract
{
public:
	DCFrameCkCmdData Data;
public:
	CDCFrameCkCmdFrame()
	{
		//具体数据长度
		_tcscpy(Name, _T("DateInject_CK_DC"));//数据注入 从控 吊舱
		FrameLength = 20;
		HeadLength = 2;
		Head[0] = 0xEB;
		Head[1] = 0x90;
		memcpy(Addr(), Head, HeadLength);//把Head的第一位到HeadLength位的值赋值给Addr()
		CheckLength = 2;
		CheckPos = FrameLength - 2;
		FrameType = ftFKu;
		memset(&Data,0,sizeof(DCFrameCkCmdData));//将Data中的数据全都初始化为0
	}

	virtual ~CDCFrameCkCmdFrame(){}
	virtual void Encode()
	{
		DCFrameCkCmd *pBuff = (DCFrameCkCmd*) Addr();
		pBuff->fcode							= Data.fcode;
		pBuff->protocalDataInject_DC.DCtype		= Data.dataInject_DC.DCtype;
		switch(Data.dataInject_DC.DCtype)
		{
		case 0x01:
			pBuff->protocalDataInject_DC.DC_13Ins.SwitchCmd		= Data.dataInject_DC.DC_13Ins.SwitchCmd;
			pBuff->protocalDataInject_DC.DC_13Ins.param1		= Data.dataInject_DC.DC_13Ins.param1;
			pBuff->protocalDataInject_DC.DC_13Ins.param2		= Data.dataInject_DC.DC_13Ins.param2;
			memset(&(pBuff->protocalDataInject_DC.DC_13Ins.reserve),0,sizeof(pBuff->protocalDataInject_DC.DC_13Ins.reserve));
			break;
		case 0x02:
			pBuff->protocalDataInject_DC.DC_WHTJ.param			= Data.dataInject_DC.DC_WHTJ.param;
			pBuff->protocalDataInject_DC.DC_WHTJ.param2			= Data.dataInject_DC.DC_WHTJ.param2;
			pBuff->protocalDataInject_DC.DC_WHTJ.param3			= Data.dataInject_DC.DC_WHTJ.param3;
			pBuff->protocalDataInject_DC.DC_WHTJ.param4			= Data.dataInject_DC.DC_WHTJ.param4;
			pBuff->protocalDataInject_DC.DC_WHTJ.param5			= Data.dataInject_DC.DC_WHTJ.param5;
			pBuff->protocalDataInject_DC.DC_WHTJ.param6			= Data.dataInject_DC.DC_WHTJ.param6;
			pBuff->protocalDataInject_DC.DC_WHTJ.param7			= Data.dataInject_DC.DC_WHTJ.param7;
			pBuff->protocalDataInject_DC.DC_WHTJ.param8			= Data.dataInject_DC.DC_WHTJ.param8;
			pBuff->protocalDataInject_DC.DC_WHTJ.param9			= Data.dataInject_DC.DC_WHTJ.param9;
			pBuff->protocalDataInject_DC.DC_WHTJ.param10		= Data.dataInject_DC.DC_WHTJ.param10;
			pBuff->protocalDataInject_DC.DC_WHTJ.param11		= Data.dataInject_DC.DC_WHTJ.param11;
			pBuff->protocalDataInject_DC.DC_WHTJ.param12		= Data.dataInject_DC.DC_WHTJ.param12;
			pBuff->protocalDataInject_DC.DC_WHTJ.param13		= Data.dataInject_DC.DC_WHTJ.param13;
			pBuff->protocalDataInject_DC.DC_WHTJ.param14		= Data.dataInject_DC.DC_WHTJ.param14;
			break;
		default:
			break;
		}
		/*
		switch(Data.fcode)
		{
		case 0x70:
			if(Data.details.DataZ70.DCtype == 0x01){
				EncodeUZ70( &( pBuff->details ),&( Data.details ));
			}
			if(Data.details.DataZ70_TJDC.DCTpye == 0x02){
				EncodeUZ70_TJDC( &( pBuff->details ),&( Data.details ));
			}
			break;
		default:
			break;
		}
		*/
	}
	virtual void Decode()
	{
		DCFrameCkCmd *pBuff = (DCFrameCkCmd*) Addr();
		Data.fcode									= pBuff->fcode;
		Data.dataInject_DC.DCtype					= pBuff->protocalDataInject_DC.DCtype;
		switch(pBuff->protocalDataInject_DC.DCtype)
		{
		case 0x01:
			Data.dataInject_DC.DC_13Ins.SwitchCmd	= pBuff->protocalDataInject_DC.DC_13Ins.SwitchCmd;
			Data.dataInject_DC.DC_13Ins.param1		= pBuff->protocalDataInject_DC.DC_13Ins.param1;
			Data.dataInject_DC.DC_13Ins.param2		= pBuff->protocalDataInject_DC.DC_13Ins.param2;
			memset(&(Data.dataInject_DC.DC_13Ins.reserve),0,sizeof(Data.dataInject_DC.DC_13Ins.reserve));
			break;
		case 0x02:
			Data.dataInject_DC.DC_WHTJ.param		= pBuff->protocalDataInject_DC.DC_WHTJ.param;
			Data.dataInject_DC.DC_WHTJ.param2		= pBuff->protocalDataInject_DC.DC_WHTJ.param2;
			Data.dataInject_DC.DC_WHTJ.param3		= pBuff->protocalDataInject_DC.DC_WHTJ.param3;
			Data.dataInject_DC.DC_WHTJ.param4		= pBuff->protocalDataInject_DC.DC_WHTJ.param4;
			Data.dataInject_DC.DC_WHTJ.param5		= pBuff->protocalDataInject_DC.DC_WHTJ.param5;
			Data.dataInject_DC.DC_WHTJ.param6		= pBuff->protocalDataInject_DC.DC_WHTJ.param6;
			Data.dataInject_DC.DC_WHTJ.param7		= pBuff->protocalDataInject_DC.DC_WHTJ.param7;
			Data.dataInject_DC.DC_WHTJ.param8		= pBuff->protocalDataInject_DC.DC_WHTJ.param8;
			Data.dataInject_DC.DC_WHTJ.param9		= pBuff->protocalDataInject_DC.DC_WHTJ.param9;
			Data.dataInject_DC.DC_WHTJ.param10		= pBuff->protocalDataInject_DC.DC_WHTJ.param10;
			Data.dataInject_DC.DC_WHTJ.param11		= pBuff->protocalDataInject_DC.DC_WHTJ.param11;
			Data.dataInject_DC.DC_WHTJ.param12		= pBuff->protocalDataInject_DC.DC_WHTJ.param12;
			Data.dataInject_DC.DC_WHTJ.param13		= pBuff->protocalDataInject_DC.DC_WHTJ.param13;
			Data.dataInject_DC.DC_WHTJ.param14		= pBuff->protocalDataInject_DC.DC_WHTJ.param14;
			break;
		default:
			break;
		}
		Data.crc16			= pBuff->crc16;
	}
	//void Phrase(const BYTE* Src, const UINT32 Count)
	//{

	//}

	virtual struCHECK CheckCRC(BYTE* const p)
	{
		//return MakeCheckSum_WuHanTJDC(p,31);
		return MakeCheckCRC(p+2,16);
	}

};

#endif//_CDCFrameCkCmdFrame_