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.
166 lines
4.1 KiB
C++
166 lines
4.1 KiB
C++
|
3 years ago
|
#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)
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|