#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)), this, SLOT(onSerialDataRecv(const QString&, QSharedPointer))); //connect(lp_serial_manager::instance(), SIGNAL(signal_state_changed(const QString&, SerialErrorType)), // this, SLOT(onStateChanged(const QString&, SerialErrorType)));//串口打开状态 } Q_SLOT void CodeScanStation::onSerialDataRecv(const QString& sn, QSharedPointer 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) //{ // /* // 显示串口状态 // */ // 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; // } //}