You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
smokeboxidentification/src/CodeScanStation.cpp

133 lines
3.4 KiB
C++

#include "CodeScanStation.h"
#include "QZkJsonParser.h"
CodeScanStation::CodeScanStation()
{
m_pobjThread = new QThread;
moveToThread(m_pobjThread);
connect(m_pobjThread, &QThread::started, this, &CodeScanStation::onOpen);
connect(m_pobjThread, &QThread::finished,
this, &QObject::deleteLater);
m_bStartEmptyCheck = false;
}
CodeScanStation::~CodeScanStation()
{
closeComs();
if (m_pobjThread)
{
m_pobjThread->quit();
m_pobjThread->wait();
m_pobjThread = nullptr;
}
}
bool CodeScanStation::loadParameters(const QString& filePath)
{
int error;
QJsonObject objJson = QZkJsonParser::ReadJsonObject(filePath, &error);
if (!objJson.empty())
{
QJsonArray jArray = objJson["customer"].toArray();
for (int i = 0; i < jArray.size(); ++i)
{
QJsonObject COMObj = jArray[i].toObject();
SerialParam sp;
sp.port_name_ = COMObj["port_name"].toString();
sp.baud_ = COMObj["BAUD"].toInt();
sp.auto_connect_ = COMObj["auto_connect"].toBool();
sp.modbus_type_ = SERIAL_CUSTOM;
QString deviceName = COMObj["device_name"].toString();
if (deviceName == CODESCAN_COM_LEFT)
{
m_ComSensorIDMap.insert(sp.port_name_, em_LEFT);
m_DeviceParaMap.insert(em_LEFT, sp);
}
else if (deviceName == CODESCAN_COM_RIGHT)
{
m_ComSensorIDMap.insert(sp.port_name_, em_RIGHT);
m_DeviceParaMap.insert(em_RIGHT, sp);
}
}
}
else
{
qDebug() << "please check the comSetting file, err: " << error;
return false;
}
qDebug() << "Code scan load param successed";
return true;
}
void CodeScanStation::openComs()
{
m_pobjThread->start();
}
void CodeScanStation::closeComs()
{
for (auto iter = m_DeviceParaMap.begin(); iter != m_DeviceParaMap.end(); iter++)
{
lp_serial_manager::instance()->close(iter.value().port_name_);
}
}
Q_SLOT void CodeScanStation::onOpen()
{
for (auto iter = m_DeviceParaMap.begin(); iter != m_DeviceParaMap.end(); iter++)
{
if (lp_serial_manager::instance()->open(iter.value()) == -1)
{
qDebug() << "open " << iter.value().port_name_ << " fail.";
continue;
}
}
connect(lp_serial_manager::instance(), SIGNAL(signal_data_recv(const QString&, QSharedPointer<QByteArray>)),
this, SLOT(onSerialDataRecv(const QString&, QSharedPointer<QByteArray>)));
//connect(lp_serial_manager::instance(), SIGNAL(signal_state_changed(const QString&, SerialErrorType)),
// this, SLOT(onStateChanged(const QString&, SerialErrorType)));//<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>״̬
}
Q_SLOT void CodeScanStation::onSerialDataRecv(const QString& sn, QSharedPointer<QByteArray> data_ptr_)
{
qDebug() << "code scan com receive data";
if (m_ComSensorIDMap.contains(sn))
{
emit sgNewCodeScanData((int)m_ComSensorIDMap.value(sn), data_ptr_);
}
}
//Q_SLOT void CodeScanStation::onStateChanged(const QString& sn, SerialErrorType err)
//{
// /*
// <09><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>״̬
// */
// QString strMsg;
// if (err == OpenSuccess)
// {
// strMsg = QString("%1 open success!").arg(sn);
// qDebug() << strMsg;
// }
// else if (err == DeviceNotFoundError)
// {
// strMsg = QString("%1 not found! open failed.").arg(sn);
// qDebug() << strMsg;
// }
// else if (err == OpenError)
// {
// strMsg = QString("%1 open failed.").arg(sn);
// qDebug() << strMsg;
// }
// else if (err == CloseSuccess)
// {
// strMsg = QString("%1 close success.").arg(sn);
// qDebug() << strMsg;
// }
// else if (err == CloseError)
// {
// strMsg = QString("%1 Not found! close failed.").arg(sn);
// qDebug() << strMsg;
// }
//}