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/lpSerialStation.cpp

166 lines
4.1 KiB
C++

#include "lpSerialStation.h"
#include "QZkJsonParser.h"
lpSerialStation::lpSerialStation()
{
qRegisterMetaType<eSideID>("eSideID");
m_pobjThread = new QThread;
moveToThread(m_pobjThread);
connect(m_pobjThread, &QThread::started, this, &lpSerialStation::on_open);
connect(m_pobjThread, &QThread::finished,
this, &QObject::deleteLater);
m_bStartEmptyCheck = false;
}
lpSerialStation::~lpSerialStation()
{
closeComs();
if (m_pobjThread)
{
m_pobjThread->quit();
m_pobjThread->wait();
m_pobjThread = nullptr;
}
}
bool lpSerialStation::loadParameters(const QString& filePath)
{
int error;
QJsonObject objJson = QZkJsonParser::ReadJsonObject(filePath, &error);
if (!objJson.empty())
{
QJsonArray jArray = objJson["SinglechipCOM"].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_LEAPER;
m_commDeviceMap.insert(COMObj["device_name"].toString(), sp);
}
}
else
{
qDebug() << "please check the com self-define file, err: " << error;
return false;
}
qDebug() << "SensorsCom load param successed";
return true;
}
void lpSerialStation::openComs()
{
m_pobjThread->start();
}
void lpSerialStation::closeComs()
{
for (auto iter = m_commDeviceMap.begin(); iter != m_commDeviceMap.end(); iter++)
{
lp_serial_manager::instance()->close(iter.value().port_name_);
}
}
void lpSerialStation::onControlSideLight(lightCtrl mCmdData)
{
QSharedPointer<LpSerialFrame> byteArr_ptr = QSharedPointer<LpSerialFrame>(new LpSerialFrame);
byteArr_ptr->cmd = LP_SIDELIGHT_TURN_ON;
byteArr_ptr->data2 = mCmdData;
lp_serial_manager::instance()->on_data_send(m_commDeviceMap[DIAGACROSSSENSOR].port_name_, byteArr_ptr);
}
Q_SLOT void lpSerialStation::onStartEmptyPlaceCheck(QString szClient)
{
m_bStartEmptyCheck = true;
}
Q_SLOT void lpSerialStation::onStopEmptyPlaceCheck()
{
m_bStartEmptyCheck = false;
m_CodeScanResQ.clear();
}
Q_SLOT void lpSerialStation::onNewCodeScanResults(eSideID sdID, QSharedPointer<QByteArray> data_ptr_)
{
if (!m_bStartEmptyCheck)
{
return;
}
CodeScanResults csr;
csr.sdID = sdID;
csr.ResData = *data_ptr_;
m_CodeScanResQ.enqueue(csr);
QSharedPointer<LpSerialFrame> byteArr_ptr = QSharedPointer<LpSerialFrame>(new LpSerialFrame);
byteArr_ptr->cmd = 0x84;
if (sdID == 0)
{
byteArr_ptr->data1 = 1;
}
else
{
byteArr_ptr->data2 = 1;
}
lp_serial_manager::instance()->on_data_send(m_commDeviceMap[DIAGACROSSSENSOR].port_name_, byteArr_ptr);
}
Q_SLOT void lpSerialStation::on_open()
{
for (auto iter = m_commDeviceMap.begin(); iter != m_commDeviceMap.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<LpSerialFrame>)),
this, SLOT(on_data_receive(const QString&, QSharedPointer<LpSerialFrame>)));
}
Q_SLOT void lpSerialStation::on_data_receive(const QString& sn, QSharedPointer<LpSerialFrame> data_ptr_)
{
qDebug() << "monitor receive data";
// for monitor trigger
if (data_ptr_->cmd == 0x83)
{
qDebug() << "i rsv data 0:" << data_ptr_->data1;
qDebug() << "i rsv data 1:" << data_ptr_->data2;
if (data_ptr_->data1 == StockCheckTrigger::emMonitorTriggerStart)
{
emit sgMonitorSensorTriggerStart(em_RIGHT);
qDebug() << "i start right trigger";
}
else if (data_ptr_->data1 == StockCheckTrigger::emMonitorTriggerStop)
{
emit sgMonitorSensorTriggerStop(em_RIGHT);
qDebug() << "i stop left trigger";
}
if (data_ptr_->data2 == StockCheckTrigger::emMonitorTriggerStart)
{
emit sgMonitorSensorTriggerStart(em_LEFT);
qDebug() << "i start left trigger";
}
else if (data_ptr_->data2 == StockCheckTrigger::emMonitorTriggerStop)
{
emit sgMonitorSensorTriggerStop(em_LEFT);
qDebug() << "i stop left trigger";
}
return;
}
else if (data_ptr_->cmd == 0x84)
{
}
}