#include "lpSerialStation.h" #include "QZkJsonParser.h" lpSerialStation::lpSerialStation() { qRegisterMetaType("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 byteArr_ptr = QSharedPointer(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 data_ptr_) { if (!m_bStartEmptyCheck) { return; } CodeScanResults csr; csr.sdID = sdID; csr.ResData = *data_ptr_; m_CodeScanResQ.enqueue(csr); QSharedPointer byteArr_ptr = QSharedPointer(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)), this, SLOT(on_data_receive(const QString&, QSharedPointer))); } Q_SLOT void lpSerialStation::on_data_receive(const QString& sn, QSharedPointer 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) { } }