164 lines
5.7 KiB
C++
164 lines
5.7 KiB
C++
|
||
#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<DeviceStatus> pDeviceStatus = std::make_shared<DeviceStatus>();
|
||
pDeviceStatus->strDeviceName = "RFID程序";
|
||
pDeviceStatus->strDeviceRunningStatus = "正常";
|
||
pDeviceStatus->strNetworkStatus = "异常";
|
||
pDeviceStatus->strDeviceWarnInfo = "“RFID车号识别”程序无法同RFID设备通讯!";
|
||
outputQueMap_[strPort1_]->push(std::static_pointer_cast<void>(pDeviceStatus));
|
||
usleep(5 * 1000 * 1000); // 20秒后重试
|
||
this->baseScoket_.Close();
|
||
this->baseScoket_.Open();
|
||
this->baseScoket_.Init();
|
||
if (this->baseScoket_.bRuning())
|
||
{
|
||
LogInfo << "RFID 连接成功 ...";
|
||
std::shared_ptr<DeviceStatus> pDeviceStatus = std::make_shared<DeviceStatus>();
|
||
pDeviceStatus->strDeviceName = "RFID程序";
|
||
pDeviceStatus->strDeviceRunningStatus = "正常";
|
||
pDeviceStatus->strNetworkStatus = "正常";
|
||
pDeviceStatus->strDeviceWarnInfo = "“RFID车号识别”程序同RFID设备通讯连接成功!";
|
||
outputQueMap_[strPort1_]->push(std::static_pointer_cast<void>(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<RfidInfo> pRfidTrain = std::make_shared<RfidInfo>();
|
||
pRfidTrain->strRfid = chbuffer;
|
||
pRfidTrain->strTime = TimeUtil::getins()->getDateTime();
|
||
|
||
iRet = outputQueMap_[strPort0_]->push(pRfidTrain);
|
||
if (iRet != 0)
|
||
{
|
||
LogError << "send data failure!";
|
||
}
|
||
}
|
||
return APP_ERR_OK;
|
||
}
|