#include "GetRfidEngine.h" using namespace ai_matrix; GetRfidEngine::GetRfidEngine() {} GetRfidEngine::~GetRfidEngine() {} APP_ERROR GetRfidEngine::Init() { strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0"; strPort1_ = engineName_ + "_" + std::to_string(engineId_) + "_1"; this->baseConfig_ = Config::GetIns()->getBaseConfig(); this->serialConfig_ = Config::GetIns()->getSerialConfig(); this->ethernetConfig_ = Config::GetIns()->getEthernetConfig(); this->iConnectType = this->baseConfig_.iConnectType; LogInfo << "GetRfidEngine Init ok"; return APP_ERR_OK; } APP_ERROR GetRfidEngine::DeInit() { if (this->iConnectType == AEI_SOCKET_TYPE) { this->baseScoket_.Close(); } else if (this->iConnectType == AEI_COM_TYPE) { this->baseComPort_.ttyClose(); } LogInfo << "GetRfidEngine DeInit ok"; return APP_ERR_OK; } APP_ERROR GetRfidEngine::Process() { int iRet = APP_ERR_OK; if (this->iConnectType == AEI_SOCKET_TYPE) { LogInfo << "RFID服务端IP:" << this->ethernetConfig_.strIp << " 端口:" << this->ethernetConfig_.iPort; this->baseScoket_.Open(); this->baseScoket_.SetPort(this->ethernetConfig_.iPort, this->ethernetConfig_.strIp); this->baseScoket_.Init(); } else if (this->iConnectType == AEI_COM_TYPE) { if(this->baseComPort_.ttyOpen(this->serialConfig_.strComName) < 0){ LogError << "串口:" << this->serialConfig_.strComName << " 开启失败!"; } if(this->baseComPort_.ttySetBaud(this->serialConfig_.iBaud, this->serialConfig_.iDataBits, this->serialConfig_.strParityBits, this->serialConfig_.iStopBits) < 0) { LogError << "串口设置参数失败"; } LogInfo << this->serialConfig_.strComName << "com 开启成功"; } else { LogError << "通讯类型设置异常!"; } LogInfo << "RFID开启通讯..."; while (!isStop_) { char chbuffer[AEI_COMM_BUFFER_SIZE] = {0}; int nRevSize = 0; memset(chbuffer, 0x00, sizeof(chbuffer)); if (this->iConnectType == AEI_SOCKET_TYPE) { if (!this->baseScoket_.bRuning()) { LogError << "RFID 连接失败,重启中 ..."; std::shared_ptr pDeviceStatus = std::make_shared(); pDeviceStatus->strDeviceName = "RFID程序"; pDeviceStatus->strDeviceRunningStatus = "正常"; pDeviceStatus->strNetworkStatus = "异常"; pDeviceStatus->strDeviceWarnInfo = "“RFID车号识别”程序无法同RFID设备通讯!"; outputQueMap_[strPort1_]->push(std::static_pointer_cast(pDeviceStatus)); usleep(5 * 1000 * 1000); // 20秒后重试 this->baseScoket_.Close(); this->baseScoket_.Open(); this->baseScoket_.Init(); if (this->baseScoket_.bRuning()) { LogInfo << "RFID 连接成功 ..."; std::shared_ptr pDeviceStatus = std::make_shared(); pDeviceStatus->strDeviceName = "RFID程序"; pDeviceStatus->strDeviceRunningStatus = "正常"; pDeviceStatus->strNetworkStatus = "正常"; pDeviceStatus->strDeviceWarnInfo = "“RFID车号识别”程序同RFID设备通讯连接成功!"; outputQueMap_[strPort1_]->push(std::static_pointer_cast(pDeviceStatus)); } continue; } nRevSize = this->baseScoket_.Read(); if (nRevSize <= 0) { this->baseScoket_.Monitor(); continue; } else { memcpy(chbuffer, this->baseScoket_.chbuffer, nRevSize); } } else if (this->iConnectType == AEI_COM_TYPE) { if(!this->baseComPort_.bRuning()) { LogError << this->serialConfig_.strComName << " 连接失败,重启中 ..."; usleep(20 * 1000 * 1000); // 20秒后重试 if(this->baseComPort_.ttyOpen(this->serialConfig_.strComName) < 0) { continue; } LogInfo << this->serialConfig_.strComName << "com 开启成功"; if(this->baseComPort_.ttySetBaud(this->serialConfig_.iBaud, this->serialConfig_.iDataBits, this->serialConfig_.strParityBits, this->serialConfig_.iStopBits) < 0) { this->baseComPort_.ttyClose(); continue; } } nRevSize = this->baseComPort_.ttyRead(); if(nRevSize <= 0) { usleep(1 * 1000); //comporthandle.ttyClose(); } else { nRevSize = this->baseComPort_.vGetBuffer(chbuffer, (int32_t)sizeof(chbuffer)); } } else { LogError << "通讯类型设置异常!"; continue; } std::shared_ptr pRfidTrain = std::make_shared(); pRfidTrain->strRfid = chbuffer; pRfidTrain->strTime = TimeUtil::getins()->getDateTime(); iRet = outputQueMap_[strPort0_]->push(pRfidTrain); if (iRet != 0) { LogError << "send data failure!"; } } return APP_ERR_OK; }