Train_RFID_Linux/engine/GetRfidEngine/GetRfidEngine.cpp

147 lines
4.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "GetRfidEngine.h"
using namespace ai_matrix;
GetRfidEngine::GetRfidEngine() {}
GetRfidEngine::~GetRfidEngine() {}
APP_ERROR GetRfidEngine::Init()
{
strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0";
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 << "TCP 连接失败,重启中 ...";
usleep(20 * 1000 * 1000); // 20秒后重试
this->baseScoket_.Close();
this->baseScoket_.Open();
this->baseScoket_.Init();
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(1000 * 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;
}