Train_RFID_Linux/engine/GetRfidEngine/GetRfidEngine.cpp

147 lines
4.5 KiB
C++
Raw Normal View History

#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 << "服务端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 << "开启通讯...";
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;
}