Example #1
0
/*********************************************************************************************************
** Function name:     	HopperAccepter_Handle
** Descriptions:	    EVB设备操作控制函数
** input parameters:    DeviceCmdType:需要操作控制的设备类型
						Address:设备的硬件物理地址
						nbuf:操作内容,如Hopper出币操作的出币数量
** output parameters:   无
** Returned value:      1:收到应答;0:未收到应答即通讯失败
*********************************************************************************************************/
unsigned char HopperAccepter_Handle(unsigned char DeviceCmdType,unsigned char Address,unsigned char *nbuf)
{
	uint8_t EvbAckMsg[36],i,j;
	uint8_t MsgHead,MsgType,MsgAdd;
	uint16_t MsgDate;
	uint8_t res,DevNum=0;
	static uint8_t sn=0;
	
	//Hopper查询操作指令	
	if(DeviceCmdType == EVBHANDLE_HPQUERY)
	{
		TraceChange("HpAdd=%d\r\n",Address);
		MsgHead = 0xED;
		MsgType = EVBHANDLE_HPQUERY;
		MsgAdd = Address;
		MsgDate = 0;	
	}
	else
	//Hopper出币操作指令
	if(DeviceCmdType == EVBHANDLE_HPOUTPUT)
	{
		sn++;
		MsgHead = 0xED;
		MsgType = EVBHANDLE_HPOUTPUT;
		MsgAdd = Address;
		MsgDate = (nbuf[0]<<8)|(nbuf[1]&0x00ff);	
	}
	for(j=0;j<5;j++)
	{
		//发送操作包,并判断应答包
		res = EvbConversation(1,MsgHead,sn,MsgType,MsgAdd,MsgDate,EvbAckMsg);
		if(res == 1)
		{
			if(DeviceCmdType == EVBHANDLE_HPOUTPUT && EvbAckMsg[1] == 0x06)//出币命令且返回ACK  6字节
			{
				//if(EvbAckMsg[3] & 0x01)//重包
				//{
				//	sn++;
				//	continue;
				//}
				return 1;
			}
			else if(DeviceCmdType == EVBHANDLE_HPQUERY && EvbAckMsg[1] == 0x08)//查询命令并返回 状态结果 8字节
			{
				for(i=0;i<3;i++) 
				{
					if(stEvbHp[i].Add == EvbAckMsg[4])
					{
						DevNum = i;
						break;
					}
				}
				if(i>=3)
					return 0;
				TraceChange("1_EvbAckMsg=%x state=%d\r\n",EvbAckMsg[3],stEvbHp[DevNum].State);
				if((EvbAckMsg[3]==0x00)||(EvbAckMsg[3]==0x01))
					stEvbHp[DevNum].State = 0x00;
				else
				if((EvbAckMsg[3]==0x20)||(EvbAckMsg[3]==0x29))
					stEvbHp[DevNum].State = 0x02;
				else
				if((EvbAckMsg[3]==0x11)||(EvbAckMsg[3]==0x39)||(EvbAckMsg[3]==0x28)||(EvbAckMsg[3]==0x41))
					stEvbHp[DevNum].State = 0x03;	
				stEvbHp[DevNum].OutPutCount = INTEG16(EvbAckMsg[6],EvbAckMsg[5]);
				TraceChange("2_EvbAckMsg=%x state=%d\r\n",EvbAckMsg[3],stEvbHp[DevNum].State);	
				stEvbHp[DevNum].StateChk=EvbAckMsg[3];
				return 1;
	
			}
	
		}
		else
		{
			for(i=0;i<3;i++)
			{
				if(stEvbHp[i].Add == MsgAdd)
				{
					stEvbHp[i].State = 0x03;
					stEvbHp[i].StateChk=0x80;
					break;
				}
			}		
		}
	}
	return 0;
}
/*********************************************************************************************************
** Function name:     	HopperAccepter_Handle
** Descriptions:	    EVB设备操作控制函数
** input parameters:    DeviceCmdType:需要操作控制的设备类型
						Address:设备的硬件物理地址
						nbuf:操作内容,如Hopper出币操作的出币数量
** output parameters:   无
** Returned value:      1:收到应答;0:未收到应答即通讯失败
*********************************************************************************************************/
unsigned char HopperAccepter_Handle(unsigned char DeviceCmdType,unsigned char Address,unsigned char *nbuf)
{
	uint8_t EvbAckMsg[36],i,j;
	uint8_t MsgHead,MsgType,MsgAdd;
	uint16_t MsgDate;
	uint8_t res,DevNum=0;
	static uint8_t sn=0;
	
	//Hopper查询操作指令	
	if(DeviceCmdType == EVBHANDLE_HPQUERY)
	{
		Trace("HpAdd=%d\r\n",Address);
		MsgHead = 0xED;
		MsgType = EVBHANDLE_HPQUERY;
		MsgAdd = Address;
		MsgDate = 0;	
	}
	else
	//Hopper出币操作指令
	if(DeviceCmdType == EVBHANDLE_HPOUTPUT)
	{
		MsgHead = 0xED;
		MsgType = EVBHANDLE_HPOUTPUT;
		MsgAdd = Address;
		MsgDate = (nbuf[0]<<8)|(nbuf[1]&0x00ff);	
	}
	for(j=0;j<5;j++)
	{
		//发送操作包,并判断应答包
		res = EvbConversation(1,MsgHead,sn,MsgType,MsgAdd,MsgDate,EvbAckMsg);
		if(res == 1)
		{
			if((DeviceCmdType == EVBHANDLE_HPQUERY)||(DeviceCmdType == EVBHANDLE_HPOUTPUT))
			{
				for(i=0;i<3;i++)
				{
					if(stEvbHp[i].Add == EvbAckMsg[4])
					{
						DevNum = i;
						break;
					}
				}
				if(i>=3)
					return 0;
				sn++;
				Trace("1_EvbAckMsg=%x state=%d\r\n",EvbAckMsg[3],stEvbHp[DevNum].State);
				if(EvbAckMsg[3]==0x00)
					stEvbHp[DevNum].State = 0x00;
				else
				if((EvbAckMsg[3]==0x20)||(EvbAckMsg[3]==0x29))
					stEvbHp[DevNum].State = 0x02;
				else
				if((EvbAckMsg[3]==0x11)||(EvbAckMsg[3]==0x39)||(EvbAckMsg[3]==0x28)||(EvbAckMsg[3]==0x41))
					stEvbHp[DevNum].State = 0x03;	
				stEvbHp[DevNum].OutPutCount = (EvbAckMsg[5]<<8)+(EvbAckMsg[5]&0x00ff);
				Trace("2_EvbAckMsg=%x state=%d\r\n",EvbAckMsg[3],stEvbHp[DevNum].State);	
				return 1;
			}	
		}
		else
		{
			for(i=0;i<3;i++)
			{
				if(stEvbHp[i].Add == MsgAdd)
				{
					stEvbHp[i].State = 0x03;
					break;
				}
			}		
		}
	}
	return 0;
}