/********************************************************************************************************* ** 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; }