int HD8583STRUCT::Unnormalize() { for(int i = 0;i < FIELD_LENGTH;++i) { if(_fields[i].bit_flag) { switch(_fields[i].attribute) { case IFT_BYTE: _fields[i].data[0] = *_fields[i]._bValue; break; case IFT_CHAR: _fields[i].data[0] = *_fields[i]._cValue; break; case IFT_SHORT: SHORT_2_BUF(*_fields[i]._sValue,_fields[i].data); break; case IFT_USHORT: SHORT_2_BUF(*_fields[i]._usValue,_fields[i].data); break; case IFT_INT: INT_2_BUF(*_fields[i]._iValue,_fields[i].data); break; case IFT_UINT: INT_2_BUF(*_fields[i]._uiValue,_fields[i].data); break; case IFT_LONG: LONG_2_BUF(*_fields[i]._lValue,_fields[i].data); break; case IFT_ULONG: LONG_2_BUF(*_fields[i]._ulValue,_fields[i].data); break; case IFT_STRING: memcpy(_fields[i].data,_fields[i]._cValue,_fields[i].length_in_byte); break; case IFT_BUFFER: memcpy(_fields[i].data,_fields[i]._bValue,_fields[i].length_in_byte); break; case IFT_DATETIME: memcpy(_fields[i].data,_fields[i]._bValue,_fields[i].length_in_byte); break; default: return -1; } } } return 0; }
int sub_gpio_write( sub_handle hndl, int set, int* get, int mask ) { int rc; sub_pack outpk,inpk; outpk.tag.code = SUB_GPIO_WRITE; outpk.tag.size = sizeof(struct gpio_req_st); INT_2_BUF( set, outpk.tag.gpio_req.val ); INT_2_BUF( mask,outpk.tag.gpio_req.mask); inpk.tag.size = sizeof(struct gpio_resp_st); rc = sub_transaction( hndl, &outpk, &inpk, 10000 ); if( !rc ) BUF_2_INT( *get, inpk.tag.gpio_resp.val ); return rc; }
int HDDownloadBlkCard::DownloadBlackCard(BYTE addflag,KSGDeviceNode* node ,KSGDeviceNode::Task* task) { int ret = TASK_ERR_COMMON; try { int cardid = task->GetParams().GetParamIntVal(XML_KEY_CARDID); std::string version = task->GetParams().GetParam(XML_KEY_VERNUM); KSGDeviceNode* task_node = task->GetDeviceNode(); unsigned short addr; addr = GetDeviceAddress(task->GetDeviceNode()); HD8583STRUCT req; req.Init(); req.SetFieldValue(FIELD_ADDRESS,addr); req.SetFieldValue(FIELD_TERMINALID,task_node->GetTermId()); unsigned long encode_ver = EncodeVersionNum(version.c_str()); req.SetFieldValue(FIELD_VERSIONOFLIST,encode_ver); char data[256] = ""; ACE_OS::memset(data,0,sizeof data); data[0] = addflag; INT_2_BUF(cardid,data+1); req.SetFieldValue(FIELD_ADDITIONALDATA2,data,5); data[0] = 0x01; req.SetFieldValue(FIELD_ADDITIONALDATA3,data,1); ACE_OS::memset(data,0,sizeof data); ACE_HANDLE handler = ACE_INVALID_HANDLE; ACE_Time_Value tv = KSGGetTaskTimeoutIntval(); int recvlen = -1; size_t packlen; handler = task->_handle; if((packlen = PackRequestStruct(req,MT_UPDATELIST2,data,sizeof data,true)) == 0) { // 错误的数据包 ret = TASK_ERR_COMMON; } else if(HDSendBuffer(handler,data,packlen,&tv)) { ret = TASK_ERR_TIMEOUT; } else if((recvlen = HDRecvBuffer(handler,data,sizeof data,&tv)) <= 0) { ret = TASK_ERR_TIMEOUT; } else { HD8583STRUCT resp; MESSAGETYPE msg_type; if(UnPackResponseStruct(resp,&msg_type,data,(size_t)recvlen)) { ret = TASK_ERR_EXECUTE; } else if( (req->Address != resp->Address) || (req->VerOfList != resp->VerOfList)) { ret = TASK_ERR_EXECUTE; } else { KSGTaskResponse &tresp = task->GetResponse(); tresp.AddField(XML_KEY_CARDID,cardid); char version_str[14] = ""; DecodeVersionNum(resp->VerOfList,version_str); tresp.AddField(XML_KEY_VERNUM,version_str); ACE_DEBUG((LM_DEBUG,"更新设备黑名单版本成功id[%d][%s]" ,task_node->GetDevId(),version_str)); ret = TASK_SUCCESS; } } task->SetNeedResponse(); return ret; } catch(KeyNotFoundException& ) { return TASK_ERR_COMMON; } catch(...) { return TASK_ERR_COMMON; } }