diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/TimeReplicatorForm.cpp b/DeviceHub/TimeReplicatorForm.cpp new file mode 100644 index 0000000..eb83370 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.cpp @@ -0,0 +1,19 @@ +#include "TimeReplicatorForm.h" +#include "ui_TimeReplicatorForm.h" + +TimeReplicatorForm::TimeReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TimeReplicatorForm) +{ + ui->setupUi(this); +} + +TimeReplicatorForm::~TimeReplicatorForm() +{ + delete ui; +} + +void TimeReplicatorForm::on_tmRepButt_clicked() +{ + +} diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/TimeReplicatorForm.cpp b/DeviceHub/TimeReplicatorForm.cpp new file mode 100644 index 0000000..eb83370 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.cpp @@ -0,0 +1,19 @@ +#include "TimeReplicatorForm.h" +#include "ui_TimeReplicatorForm.h" + +TimeReplicatorForm::TimeReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TimeReplicatorForm) +{ + ui->setupUi(this); +} + +TimeReplicatorForm::~TimeReplicatorForm() +{ + delete ui; +} + +void TimeReplicatorForm::on_tmRepButt_clicked() +{ + +} diff --git a/DeviceHub/TimeReplicatorForm.h b/DeviceHub/TimeReplicatorForm.h new file mode 100644 index 0000000..e6c9dc8 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.h @@ -0,0 +1,25 @@ +#ifndef TIMEREPLICATORFORM_H +#define TIMEREPLICATORFORM_H + +#include + +namespace Ui { +class TimeReplicatorForm; +} + +class TimeReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit TimeReplicatorForm(QWidget *parent = nullptr); + ~TimeReplicatorForm(); + +private slots: + void on_tmRepButt_clicked(); + +private: + Ui::TimeReplicatorForm *ui; +}; + +#endif // TIMEREPLICATORFORM_H diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/TimeReplicatorForm.cpp b/DeviceHub/TimeReplicatorForm.cpp new file mode 100644 index 0000000..eb83370 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.cpp @@ -0,0 +1,19 @@ +#include "TimeReplicatorForm.h" +#include "ui_TimeReplicatorForm.h" + +TimeReplicatorForm::TimeReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TimeReplicatorForm) +{ + ui->setupUi(this); +} + +TimeReplicatorForm::~TimeReplicatorForm() +{ + delete ui; +} + +void TimeReplicatorForm::on_tmRepButt_clicked() +{ + +} diff --git a/DeviceHub/TimeReplicatorForm.h b/DeviceHub/TimeReplicatorForm.h new file mode 100644 index 0000000..e6c9dc8 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.h @@ -0,0 +1,25 @@ +#ifndef TIMEREPLICATORFORM_H +#define TIMEREPLICATORFORM_H + +#include + +namespace Ui { +class TimeReplicatorForm; +} + +class TimeReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit TimeReplicatorForm(QWidget *parent = nullptr); + ~TimeReplicatorForm(); + +private slots: + void on_tmRepButt_clicked(); + +private: + Ui::TimeReplicatorForm *ui; +}; + +#endif // TIMEREPLICATORFORM_H diff --git a/DeviceHub/TimeReplicatorForm.ui b/DeviceHub/TimeReplicatorForm.ui new file mode 100644 index 0000000..bf39894 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.ui @@ -0,0 +1,34 @@ + + + + + TimeReplicatorForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock TimeReplicator + + + + + + diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/TimeReplicatorForm.cpp b/DeviceHub/TimeReplicatorForm.cpp new file mode 100644 index 0000000..eb83370 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.cpp @@ -0,0 +1,19 @@ +#include "TimeReplicatorForm.h" +#include "ui_TimeReplicatorForm.h" + +TimeReplicatorForm::TimeReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TimeReplicatorForm) +{ + ui->setupUi(this); +} + +TimeReplicatorForm::~TimeReplicatorForm() +{ + delete ui; +} + +void TimeReplicatorForm::on_tmRepButt_clicked() +{ + +} diff --git a/DeviceHub/TimeReplicatorForm.h b/DeviceHub/TimeReplicatorForm.h new file mode 100644 index 0000000..e6c9dc8 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.h @@ -0,0 +1,25 @@ +#ifndef TIMEREPLICATORFORM_H +#define TIMEREPLICATORFORM_H + +#include + +namespace Ui { +class TimeReplicatorForm; +} + +class TimeReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit TimeReplicatorForm(QWidget *parent = nullptr); + ~TimeReplicatorForm(); + +private slots: + void on_tmRepButt_clicked(); + +private: + Ui::TimeReplicatorForm *ui; +}; + +#endif // TIMEREPLICATORFORM_H diff --git a/DeviceHub/TimeReplicatorForm.ui b/DeviceHub/TimeReplicatorForm.ui new file mode 100644 index 0000000..bf39894 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.ui @@ -0,0 +1,34 @@ + + + + + TimeReplicatorForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock TimeReplicator + + + + + + diff --git a/DeviceHub/device/DeviceBase.cpp b/DeviceHub/device/DeviceBase.cpp index f1c6c59..289beb5 100644 --- a/DeviceHub/device/DeviceBase.cpp +++ b/DeviceHub/device/DeviceBase.cpp @@ -4,6 +4,7 @@ #include "TimeSwitcher.h" #include "FreqSwitcher.h" #include "BCodeTerminal.h" +#include "FreqReplicator.h" #include @@ -55,6 +56,9 @@ } else if (deviceType == "07") { base = new BCodeTerminal(parent); + } else if (deviceType == "10") + { + base = new FreqReplicator(parent); } return base; diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/TimeReplicatorForm.cpp b/DeviceHub/TimeReplicatorForm.cpp new file mode 100644 index 0000000..eb83370 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.cpp @@ -0,0 +1,19 @@ +#include "TimeReplicatorForm.h" +#include "ui_TimeReplicatorForm.h" + +TimeReplicatorForm::TimeReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TimeReplicatorForm) +{ + ui->setupUi(this); +} + +TimeReplicatorForm::~TimeReplicatorForm() +{ + delete ui; +} + +void TimeReplicatorForm::on_tmRepButt_clicked() +{ + +} diff --git a/DeviceHub/TimeReplicatorForm.h b/DeviceHub/TimeReplicatorForm.h new file mode 100644 index 0000000..e6c9dc8 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.h @@ -0,0 +1,25 @@ +#ifndef TIMEREPLICATORFORM_H +#define TIMEREPLICATORFORM_H + +#include + +namespace Ui { +class TimeReplicatorForm; +} + +class TimeReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit TimeReplicatorForm(QWidget *parent = nullptr); + ~TimeReplicatorForm(); + +private slots: + void on_tmRepButt_clicked(); + +private: + Ui::TimeReplicatorForm *ui; +}; + +#endif // TIMEREPLICATORFORM_H diff --git a/DeviceHub/TimeReplicatorForm.ui b/DeviceHub/TimeReplicatorForm.ui new file mode 100644 index 0000000..bf39894 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.ui @@ -0,0 +1,34 @@ + + + + + TimeReplicatorForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock TimeReplicator + + + + + + diff --git a/DeviceHub/device/DeviceBase.cpp b/DeviceHub/device/DeviceBase.cpp index f1c6c59..289beb5 100644 --- a/DeviceHub/device/DeviceBase.cpp +++ b/DeviceHub/device/DeviceBase.cpp @@ -4,6 +4,7 @@ #include "TimeSwitcher.h" #include "FreqSwitcher.h" #include "BCodeTerminal.h" +#include "FreqReplicator.h" #include @@ -55,6 +56,9 @@ } else if (deviceType == "07") { base = new BCodeTerminal(parent); + } else if (deviceType == "10") + { + base = new FreqReplicator(parent); } return base; diff --git a/DeviceHub/device/FreqReplicator.cpp b/DeviceHub/device/FreqReplicator.cpp index b4046fe..8767f90 100644 --- a/DeviceHub/device/FreqReplicator.cpp +++ b/DeviceHub/device/FreqReplicator.cpp @@ -1,18 +1,22 @@ #include "FreqReplicator.h" - +#include "DeviceHubWindow.h" #include #include FreqReplicator::FreqReplicator(QObject *parent) : DeviceBase(parent) { + this->devType = "10"; connect(&this->serialUtil, &QSerialPortUtil::dataRecieved, this, &FreqReplicator::dataReceivedHandler); - kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); - kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); - kafkaUtil.createProducer(); + connect(this, &FreqReplicator::sendDataToDraw, + ((DeviceHubWindow *)this->parent())->freqRepForm, &FreqReplicatorForm::drawDeviceFrameOnForm); - this->protocol = DeviceStatusProtocolBase::deviceStatusProtocolFactory(typeid (this).name()); + kafkaProducer.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); + kafkaProducer.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); + kafkaProducer.createProducer(); + + this->protocol = DeviceProtocolBase::deviceProtocolFactory(devType); } FreqReplicator::~FreqReplicator() @@ -21,6 +25,17 @@ this, &FreqReplicator::dataReceivedHandler); } +void FreqReplicator::mockReceivData() +{ + QByteArray buffer; + + // freq replicator + buffer = QByteUtil::hexStringToBytes("AA550015010001000101010101010101010101010101010101EB"); + buffer.append(QByteUtil::hexStringToBytes("AA550015020001000101010101010101010101010101010101E8")); + + this->dataReceivedHandler(buffer); +} + void FreqReplicator::dataReceivedHandler(QByteArray data) { this->dataBuff.append(data); @@ -50,6 +65,8 @@ frameDto->milisecond = now.toMSecsSinceEpoch(); frameDto->rawFrame = frameByte; + frameDto->devCode = devCode; + this->afterFramePhase(frameDto); } @@ -67,12 +84,28 @@ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl; std::cout << QByteUtil::binToHexString(frameDto->rawFrame).toStdString() << std::endl; + // 0. 输出到日志文件中 + QString date = frameDto->timestamp.mid(0, 10); + + // 1. 原始字节数组数据 + QString filename = "raw_" + devCode + ".log"; + QString content = frameDto->timestamp + " [recv] " + QByteUtil::binToHexString(frameDto->rawFrame); + QLogUtil::writeRawDataLogByDate(date, filename, content); + + // 2. 解析后的json数据 + QString frameFilename = "frame_" + devCode + ".log"; + QString frameContent = frameDto->timestamp + " [recv] " + QJsonDocument(frameDto->toJSON()).toJson(QJsonDocument::Compact); + QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); + // 3. 输出到中间件,执行后续处理过程 if (SettingConfig::getInstance().NEED_KAFKA == 1) { QJsonObject jsonObj = frameDto->toJSON(); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); jsonObj.insert("deviceId", deviceId); - kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); + kafkaProducer.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } + + // 4. 在界面上简单显示相差数据结果 + emit this->sendDataToDraw(frameDto); } diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/TimeReplicatorForm.cpp b/DeviceHub/TimeReplicatorForm.cpp new file mode 100644 index 0000000..eb83370 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.cpp @@ -0,0 +1,19 @@ +#include "TimeReplicatorForm.h" +#include "ui_TimeReplicatorForm.h" + +TimeReplicatorForm::TimeReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TimeReplicatorForm) +{ + ui->setupUi(this); +} + +TimeReplicatorForm::~TimeReplicatorForm() +{ + delete ui; +} + +void TimeReplicatorForm::on_tmRepButt_clicked() +{ + +} diff --git a/DeviceHub/TimeReplicatorForm.h b/DeviceHub/TimeReplicatorForm.h new file mode 100644 index 0000000..e6c9dc8 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.h @@ -0,0 +1,25 @@ +#ifndef TIMEREPLICATORFORM_H +#define TIMEREPLICATORFORM_H + +#include + +namespace Ui { +class TimeReplicatorForm; +} + +class TimeReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit TimeReplicatorForm(QWidget *parent = nullptr); + ~TimeReplicatorForm(); + +private slots: + void on_tmRepButt_clicked(); + +private: + Ui::TimeReplicatorForm *ui; +}; + +#endif // TIMEREPLICATORFORM_H diff --git a/DeviceHub/TimeReplicatorForm.ui b/DeviceHub/TimeReplicatorForm.ui new file mode 100644 index 0000000..bf39894 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.ui @@ -0,0 +1,34 @@ + + + + + TimeReplicatorForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock TimeReplicator + + + + + + diff --git a/DeviceHub/device/DeviceBase.cpp b/DeviceHub/device/DeviceBase.cpp index f1c6c59..289beb5 100644 --- a/DeviceHub/device/DeviceBase.cpp +++ b/DeviceHub/device/DeviceBase.cpp @@ -4,6 +4,7 @@ #include "TimeSwitcher.h" #include "FreqSwitcher.h" #include "BCodeTerminal.h" +#include "FreqReplicator.h" #include @@ -55,6 +56,9 @@ } else if (deviceType == "07") { base = new BCodeTerminal(parent); + } else if (deviceType == "10") + { + base = new FreqReplicator(parent); } return base; diff --git a/DeviceHub/device/FreqReplicator.cpp b/DeviceHub/device/FreqReplicator.cpp index b4046fe..8767f90 100644 --- a/DeviceHub/device/FreqReplicator.cpp +++ b/DeviceHub/device/FreqReplicator.cpp @@ -1,18 +1,22 @@ #include "FreqReplicator.h" - +#include "DeviceHubWindow.h" #include #include FreqReplicator::FreqReplicator(QObject *parent) : DeviceBase(parent) { + this->devType = "10"; connect(&this->serialUtil, &QSerialPortUtil::dataRecieved, this, &FreqReplicator::dataReceivedHandler); - kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); - kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); - kafkaUtil.createProducer(); + connect(this, &FreqReplicator::sendDataToDraw, + ((DeviceHubWindow *)this->parent())->freqRepForm, &FreqReplicatorForm::drawDeviceFrameOnForm); - this->protocol = DeviceStatusProtocolBase::deviceStatusProtocolFactory(typeid (this).name()); + kafkaProducer.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); + kafkaProducer.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); + kafkaProducer.createProducer(); + + this->protocol = DeviceProtocolBase::deviceProtocolFactory(devType); } FreqReplicator::~FreqReplicator() @@ -21,6 +25,17 @@ this, &FreqReplicator::dataReceivedHandler); } +void FreqReplicator::mockReceivData() +{ + QByteArray buffer; + + // freq replicator + buffer = QByteUtil::hexStringToBytes("AA550015010001000101010101010101010101010101010101EB"); + buffer.append(QByteUtil::hexStringToBytes("AA550015020001000101010101010101010101010101010101E8")); + + this->dataReceivedHandler(buffer); +} + void FreqReplicator::dataReceivedHandler(QByteArray data) { this->dataBuff.append(data); @@ -50,6 +65,8 @@ frameDto->milisecond = now.toMSecsSinceEpoch(); frameDto->rawFrame = frameByte; + frameDto->devCode = devCode; + this->afterFramePhase(frameDto); } @@ -67,12 +84,28 @@ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl; std::cout << QByteUtil::binToHexString(frameDto->rawFrame).toStdString() << std::endl; + // 0. 输出到日志文件中 + QString date = frameDto->timestamp.mid(0, 10); + + // 1. 原始字节数组数据 + QString filename = "raw_" + devCode + ".log"; + QString content = frameDto->timestamp + " [recv] " + QByteUtil::binToHexString(frameDto->rawFrame); + QLogUtil::writeRawDataLogByDate(date, filename, content); + + // 2. 解析后的json数据 + QString frameFilename = "frame_" + devCode + ".log"; + QString frameContent = frameDto->timestamp + " [recv] " + QJsonDocument(frameDto->toJSON()).toJson(QJsonDocument::Compact); + QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); + // 3. 输出到中间件,执行后续处理过程 if (SettingConfig::getInstance().NEED_KAFKA == 1) { QJsonObject jsonObj = frameDto->toJSON(); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); jsonObj.insert("deviceId", deviceId); - kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); + kafkaProducer.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } + + // 4. 在界面上简单显示相差数据结果 + emit this->sendDataToDraw(frameDto); } diff --git a/DeviceHub/device/FreqReplicator.h b/DeviceHub/device/FreqReplicator.h index 221924f..18bc01f 100644 --- a/DeviceHub/device/FreqReplicator.h +++ b/DeviceHub/device/FreqReplicator.h @@ -4,6 +4,7 @@ #include #include "device/DeviceBase.h" +#include "protocol/dto/FreqReplicatorStatusDto.h" class FreqReplicator : public DeviceBase { @@ -12,13 +13,18 @@ explicit FreqReplicator(QObject *parent = nullptr); ~FreqReplicator(); + void mockReceivData(); + void afterFramePhase(DeviceFrameBaseDto * frameDto); +// void sendDataToSerial(QByteArray data); signals: void sendDataToDraw(DeviceFrameBaseDto * frameData); +// void sendCommandToDisplay(QJsonObject command); public slots: void dataReceivedHandler(QByteArray data); +// void commandReceivedHandler(QJsonObject command); }; #endif // FREQREPLICATOR_H diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/TimeReplicatorForm.cpp b/DeviceHub/TimeReplicatorForm.cpp new file mode 100644 index 0000000..eb83370 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.cpp @@ -0,0 +1,19 @@ +#include "TimeReplicatorForm.h" +#include "ui_TimeReplicatorForm.h" + +TimeReplicatorForm::TimeReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TimeReplicatorForm) +{ + ui->setupUi(this); +} + +TimeReplicatorForm::~TimeReplicatorForm() +{ + delete ui; +} + +void TimeReplicatorForm::on_tmRepButt_clicked() +{ + +} diff --git a/DeviceHub/TimeReplicatorForm.h b/DeviceHub/TimeReplicatorForm.h new file mode 100644 index 0000000..e6c9dc8 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.h @@ -0,0 +1,25 @@ +#ifndef TIMEREPLICATORFORM_H +#define TIMEREPLICATORFORM_H + +#include + +namespace Ui { +class TimeReplicatorForm; +} + +class TimeReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit TimeReplicatorForm(QWidget *parent = nullptr); + ~TimeReplicatorForm(); + +private slots: + void on_tmRepButt_clicked(); + +private: + Ui::TimeReplicatorForm *ui; +}; + +#endif // TIMEREPLICATORFORM_H diff --git a/DeviceHub/TimeReplicatorForm.ui b/DeviceHub/TimeReplicatorForm.ui new file mode 100644 index 0000000..bf39894 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.ui @@ -0,0 +1,34 @@ + + + + + TimeReplicatorForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock TimeReplicator + + + + + + diff --git a/DeviceHub/device/DeviceBase.cpp b/DeviceHub/device/DeviceBase.cpp index f1c6c59..289beb5 100644 --- a/DeviceHub/device/DeviceBase.cpp +++ b/DeviceHub/device/DeviceBase.cpp @@ -4,6 +4,7 @@ #include "TimeSwitcher.h" #include "FreqSwitcher.h" #include "BCodeTerminal.h" +#include "FreqReplicator.h" #include @@ -55,6 +56,9 @@ } else if (deviceType == "07") { base = new BCodeTerminal(parent); + } else if (deviceType == "10") + { + base = new FreqReplicator(parent); } return base; diff --git a/DeviceHub/device/FreqReplicator.cpp b/DeviceHub/device/FreqReplicator.cpp index b4046fe..8767f90 100644 --- a/DeviceHub/device/FreqReplicator.cpp +++ b/DeviceHub/device/FreqReplicator.cpp @@ -1,18 +1,22 @@ #include "FreqReplicator.h" - +#include "DeviceHubWindow.h" #include #include FreqReplicator::FreqReplicator(QObject *parent) : DeviceBase(parent) { + this->devType = "10"; connect(&this->serialUtil, &QSerialPortUtil::dataRecieved, this, &FreqReplicator::dataReceivedHandler); - kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); - kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); - kafkaUtil.createProducer(); + connect(this, &FreqReplicator::sendDataToDraw, + ((DeviceHubWindow *)this->parent())->freqRepForm, &FreqReplicatorForm::drawDeviceFrameOnForm); - this->protocol = DeviceStatusProtocolBase::deviceStatusProtocolFactory(typeid (this).name()); + kafkaProducer.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); + kafkaProducer.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); + kafkaProducer.createProducer(); + + this->protocol = DeviceProtocolBase::deviceProtocolFactory(devType); } FreqReplicator::~FreqReplicator() @@ -21,6 +25,17 @@ this, &FreqReplicator::dataReceivedHandler); } +void FreqReplicator::mockReceivData() +{ + QByteArray buffer; + + // freq replicator + buffer = QByteUtil::hexStringToBytes("AA550015010001000101010101010101010101010101010101EB"); + buffer.append(QByteUtil::hexStringToBytes("AA550015020001000101010101010101010101010101010101E8")); + + this->dataReceivedHandler(buffer); +} + void FreqReplicator::dataReceivedHandler(QByteArray data) { this->dataBuff.append(data); @@ -50,6 +65,8 @@ frameDto->milisecond = now.toMSecsSinceEpoch(); frameDto->rawFrame = frameByte; + frameDto->devCode = devCode; + this->afterFramePhase(frameDto); } @@ -67,12 +84,28 @@ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl; std::cout << QByteUtil::binToHexString(frameDto->rawFrame).toStdString() << std::endl; + // 0. 输出到日志文件中 + QString date = frameDto->timestamp.mid(0, 10); + + // 1. 原始字节数组数据 + QString filename = "raw_" + devCode + ".log"; + QString content = frameDto->timestamp + " [recv] " + QByteUtil::binToHexString(frameDto->rawFrame); + QLogUtil::writeRawDataLogByDate(date, filename, content); + + // 2. 解析后的json数据 + QString frameFilename = "frame_" + devCode + ".log"; + QString frameContent = frameDto->timestamp + " [recv] " + QJsonDocument(frameDto->toJSON()).toJson(QJsonDocument::Compact); + QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); + // 3. 输出到中间件,执行后续处理过程 if (SettingConfig::getInstance().NEED_KAFKA == 1) { QJsonObject jsonObj = frameDto->toJSON(); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); jsonObj.insert("deviceId", deviceId); - kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); + kafkaProducer.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } + + // 4. 在界面上简单显示相差数据结果 + emit this->sendDataToDraw(frameDto); } diff --git a/DeviceHub/device/FreqReplicator.h b/DeviceHub/device/FreqReplicator.h index 221924f..18bc01f 100644 --- a/DeviceHub/device/FreqReplicator.h +++ b/DeviceHub/device/FreqReplicator.h @@ -4,6 +4,7 @@ #include #include "device/DeviceBase.h" +#include "protocol/dto/FreqReplicatorStatusDto.h" class FreqReplicator : public DeviceBase { @@ -12,13 +13,18 @@ explicit FreqReplicator(QObject *parent = nullptr); ~FreqReplicator(); + void mockReceivData(); + void afterFramePhase(DeviceFrameBaseDto * frameDto); +// void sendDataToSerial(QByteArray data); signals: void sendDataToDraw(DeviceFrameBaseDto * frameData); +// void sendCommandToDisplay(QJsonObject command); public slots: void dataReceivedHandler(QByteArray data); +// void commandReceivedHandler(QJsonObject command); }; #endif // FREQREPLICATOR_H diff --git a/DeviceHub/device/device.pri b/DeviceHub/device/device.pri index 5c6c099..645dbcb 100644 --- a/DeviceHub/device/device.pri +++ b/DeviceHub/device/device.pri @@ -5,7 +5,7 @@ HEADERS += $$PWD/TimeSwitcher.h HEADERS += $$PWD/FreqSwitcher.h #HEADERS += $$PWD/TimeReplicator.h -#HEADERS += $$PWD/FreqReplicator.h +HEADERS += $$PWD/FreqReplicator.h HEADERS += $$PWD/BCodeTerminal.h SOURCES += $$PWD/DeviceBase.cpp @@ -14,5 +14,5 @@ SOURCES += $$PWD/TimeSwitcher.cpp SOURCES += $$PWD/FreqSwitcher.cpp #SOURCES += $$PWD/TimeReplicator.cpp -#SOURCES += $$PWD/FreqReplicator.cpp +SOURCES += $$PWD/FreqReplicator.cpp SOURCES += $$PWD/BCodeTerminal.cpp diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/TimeReplicatorForm.cpp b/DeviceHub/TimeReplicatorForm.cpp new file mode 100644 index 0000000..eb83370 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.cpp @@ -0,0 +1,19 @@ +#include "TimeReplicatorForm.h" +#include "ui_TimeReplicatorForm.h" + +TimeReplicatorForm::TimeReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TimeReplicatorForm) +{ + ui->setupUi(this); +} + +TimeReplicatorForm::~TimeReplicatorForm() +{ + delete ui; +} + +void TimeReplicatorForm::on_tmRepButt_clicked() +{ + +} diff --git a/DeviceHub/TimeReplicatorForm.h b/DeviceHub/TimeReplicatorForm.h new file mode 100644 index 0000000..e6c9dc8 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.h @@ -0,0 +1,25 @@ +#ifndef TIMEREPLICATORFORM_H +#define TIMEREPLICATORFORM_H + +#include + +namespace Ui { +class TimeReplicatorForm; +} + +class TimeReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit TimeReplicatorForm(QWidget *parent = nullptr); + ~TimeReplicatorForm(); + +private slots: + void on_tmRepButt_clicked(); + +private: + Ui::TimeReplicatorForm *ui; +}; + +#endif // TIMEREPLICATORFORM_H diff --git a/DeviceHub/TimeReplicatorForm.ui b/DeviceHub/TimeReplicatorForm.ui new file mode 100644 index 0000000..bf39894 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.ui @@ -0,0 +1,34 @@ + + + + + TimeReplicatorForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock TimeReplicator + + + + + + diff --git a/DeviceHub/device/DeviceBase.cpp b/DeviceHub/device/DeviceBase.cpp index f1c6c59..289beb5 100644 --- a/DeviceHub/device/DeviceBase.cpp +++ b/DeviceHub/device/DeviceBase.cpp @@ -4,6 +4,7 @@ #include "TimeSwitcher.h" #include "FreqSwitcher.h" #include "BCodeTerminal.h" +#include "FreqReplicator.h" #include @@ -55,6 +56,9 @@ } else if (deviceType == "07") { base = new BCodeTerminal(parent); + } else if (deviceType == "10") + { + base = new FreqReplicator(parent); } return base; diff --git a/DeviceHub/device/FreqReplicator.cpp b/DeviceHub/device/FreqReplicator.cpp index b4046fe..8767f90 100644 --- a/DeviceHub/device/FreqReplicator.cpp +++ b/DeviceHub/device/FreqReplicator.cpp @@ -1,18 +1,22 @@ #include "FreqReplicator.h" - +#include "DeviceHubWindow.h" #include #include FreqReplicator::FreqReplicator(QObject *parent) : DeviceBase(parent) { + this->devType = "10"; connect(&this->serialUtil, &QSerialPortUtil::dataRecieved, this, &FreqReplicator::dataReceivedHandler); - kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); - kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); - kafkaUtil.createProducer(); + connect(this, &FreqReplicator::sendDataToDraw, + ((DeviceHubWindow *)this->parent())->freqRepForm, &FreqReplicatorForm::drawDeviceFrameOnForm); - this->protocol = DeviceStatusProtocolBase::deviceStatusProtocolFactory(typeid (this).name()); + kafkaProducer.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); + kafkaProducer.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); + kafkaProducer.createProducer(); + + this->protocol = DeviceProtocolBase::deviceProtocolFactory(devType); } FreqReplicator::~FreqReplicator() @@ -21,6 +25,17 @@ this, &FreqReplicator::dataReceivedHandler); } +void FreqReplicator::mockReceivData() +{ + QByteArray buffer; + + // freq replicator + buffer = QByteUtil::hexStringToBytes("AA550015010001000101010101010101010101010101010101EB"); + buffer.append(QByteUtil::hexStringToBytes("AA550015020001000101010101010101010101010101010101E8")); + + this->dataReceivedHandler(buffer); +} + void FreqReplicator::dataReceivedHandler(QByteArray data) { this->dataBuff.append(data); @@ -50,6 +65,8 @@ frameDto->milisecond = now.toMSecsSinceEpoch(); frameDto->rawFrame = frameByte; + frameDto->devCode = devCode; + this->afterFramePhase(frameDto); } @@ -67,12 +84,28 @@ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl; std::cout << QByteUtil::binToHexString(frameDto->rawFrame).toStdString() << std::endl; + // 0. 输出到日志文件中 + QString date = frameDto->timestamp.mid(0, 10); + + // 1. 原始字节数组数据 + QString filename = "raw_" + devCode + ".log"; + QString content = frameDto->timestamp + " [recv] " + QByteUtil::binToHexString(frameDto->rawFrame); + QLogUtil::writeRawDataLogByDate(date, filename, content); + + // 2. 解析后的json数据 + QString frameFilename = "frame_" + devCode + ".log"; + QString frameContent = frameDto->timestamp + " [recv] " + QJsonDocument(frameDto->toJSON()).toJson(QJsonDocument::Compact); + QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); + // 3. 输出到中间件,执行后续处理过程 if (SettingConfig::getInstance().NEED_KAFKA == 1) { QJsonObject jsonObj = frameDto->toJSON(); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); jsonObj.insert("deviceId", deviceId); - kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); + kafkaProducer.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } + + // 4. 在界面上简单显示相差数据结果 + emit this->sendDataToDraw(frameDto); } diff --git a/DeviceHub/device/FreqReplicator.h b/DeviceHub/device/FreqReplicator.h index 221924f..18bc01f 100644 --- a/DeviceHub/device/FreqReplicator.h +++ b/DeviceHub/device/FreqReplicator.h @@ -4,6 +4,7 @@ #include #include "device/DeviceBase.h" +#include "protocol/dto/FreqReplicatorStatusDto.h" class FreqReplicator : public DeviceBase { @@ -12,13 +13,18 @@ explicit FreqReplicator(QObject *parent = nullptr); ~FreqReplicator(); + void mockReceivData(); + void afterFramePhase(DeviceFrameBaseDto * frameDto); +// void sendDataToSerial(QByteArray data); signals: void sendDataToDraw(DeviceFrameBaseDto * frameData); +// void sendCommandToDisplay(QJsonObject command); public slots: void dataReceivedHandler(QByteArray data); +// void commandReceivedHandler(QJsonObject command); }; #endif // FREQREPLICATOR_H diff --git a/DeviceHub/device/device.pri b/DeviceHub/device/device.pri index 5c6c099..645dbcb 100644 --- a/DeviceHub/device/device.pri +++ b/DeviceHub/device/device.pri @@ -5,7 +5,7 @@ HEADERS += $$PWD/TimeSwitcher.h HEADERS += $$PWD/FreqSwitcher.h #HEADERS += $$PWD/TimeReplicator.h -#HEADERS += $$PWD/FreqReplicator.h +HEADERS += $$PWD/FreqReplicator.h HEADERS += $$PWD/BCodeTerminal.h SOURCES += $$PWD/DeviceBase.cpp @@ -14,5 +14,5 @@ SOURCES += $$PWD/TimeSwitcher.cpp SOURCES += $$PWD/FreqSwitcher.cpp #SOURCES += $$PWD/TimeReplicator.cpp -#SOURCES += $$PWD/FreqReplicator.cpp +SOURCES += $$PWD/FreqReplicator.cpp SOURCES += $$PWD/BCodeTerminal.cpp diff --git a/DeviceHub/protocol/DeviceProtocolBase.cpp b/DeviceHub/protocol/DeviceProtocolBase.cpp index 9c46989..e7b26ca 100644 --- a/DeviceHub/protocol/DeviceProtocolBase.cpp +++ b/DeviceHub/protocol/DeviceProtocolBase.cpp @@ -4,7 +4,7 @@ #include "TimeSwitcherProtocolBM.h" #include "FreqSwitcherProtocolBM.h" //#include "TimeReplicatorProtocolBM.h" -//#include "FreqReplicatorProtocolTX.h" +#include "FreqReplicatorProtocolTX.h" #include "BCodeTerminalProtocolBM.h" #include @@ -31,6 +31,9 @@ } else if (deviceType == "07") { return new BCodeTerminalProtocolBM(); + } else if (deviceType == "10") + { + return new FreqReplicatorProtocolTX(); } // if (deviceType.contains("SignalGenerator") == true) diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/TimeReplicatorForm.cpp b/DeviceHub/TimeReplicatorForm.cpp new file mode 100644 index 0000000..eb83370 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.cpp @@ -0,0 +1,19 @@ +#include "TimeReplicatorForm.h" +#include "ui_TimeReplicatorForm.h" + +TimeReplicatorForm::TimeReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TimeReplicatorForm) +{ + ui->setupUi(this); +} + +TimeReplicatorForm::~TimeReplicatorForm() +{ + delete ui; +} + +void TimeReplicatorForm::on_tmRepButt_clicked() +{ + +} diff --git a/DeviceHub/TimeReplicatorForm.h b/DeviceHub/TimeReplicatorForm.h new file mode 100644 index 0000000..e6c9dc8 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.h @@ -0,0 +1,25 @@ +#ifndef TIMEREPLICATORFORM_H +#define TIMEREPLICATORFORM_H + +#include + +namespace Ui { +class TimeReplicatorForm; +} + +class TimeReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit TimeReplicatorForm(QWidget *parent = nullptr); + ~TimeReplicatorForm(); + +private slots: + void on_tmRepButt_clicked(); + +private: + Ui::TimeReplicatorForm *ui; +}; + +#endif // TIMEREPLICATORFORM_H diff --git a/DeviceHub/TimeReplicatorForm.ui b/DeviceHub/TimeReplicatorForm.ui new file mode 100644 index 0000000..bf39894 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.ui @@ -0,0 +1,34 @@ + + + + + TimeReplicatorForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock TimeReplicator + + + + + + diff --git a/DeviceHub/device/DeviceBase.cpp b/DeviceHub/device/DeviceBase.cpp index f1c6c59..289beb5 100644 --- a/DeviceHub/device/DeviceBase.cpp +++ b/DeviceHub/device/DeviceBase.cpp @@ -4,6 +4,7 @@ #include "TimeSwitcher.h" #include "FreqSwitcher.h" #include "BCodeTerminal.h" +#include "FreqReplicator.h" #include @@ -55,6 +56,9 @@ } else if (deviceType == "07") { base = new BCodeTerminal(parent); + } else if (deviceType == "10") + { + base = new FreqReplicator(parent); } return base; diff --git a/DeviceHub/device/FreqReplicator.cpp b/DeviceHub/device/FreqReplicator.cpp index b4046fe..8767f90 100644 --- a/DeviceHub/device/FreqReplicator.cpp +++ b/DeviceHub/device/FreqReplicator.cpp @@ -1,18 +1,22 @@ #include "FreqReplicator.h" - +#include "DeviceHubWindow.h" #include #include FreqReplicator::FreqReplicator(QObject *parent) : DeviceBase(parent) { + this->devType = "10"; connect(&this->serialUtil, &QSerialPortUtil::dataRecieved, this, &FreqReplicator::dataReceivedHandler); - kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); - kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); - kafkaUtil.createProducer(); + connect(this, &FreqReplicator::sendDataToDraw, + ((DeviceHubWindow *)this->parent())->freqRepForm, &FreqReplicatorForm::drawDeviceFrameOnForm); - this->protocol = DeviceStatusProtocolBase::deviceStatusProtocolFactory(typeid (this).name()); + kafkaProducer.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); + kafkaProducer.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); + kafkaProducer.createProducer(); + + this->protocol = DeviceProtocolBase::deviceProtocolFactory(devType); } FreqReplicator::~FreqReplicator() @@ -21,6 +25,17 @@ this, &FreqReplicator::dataReceivedHandler); } +void FreqReplicator::mockReceivData() +{ + QByteArray buffer; + + // freq replicator + buffer = QByteUtil::hexStringToBytes("AA550015010001000101010101010101010101010101010101EB"); + buffer.append(QByteUtil::hexStringToBytes("AA550015020001000101010101010101010101010101010101E8")); + + this->dataReceivedHandler(buffer); +} + void FreqReplicator::dataReceivedHandler(QByteArray data) { this->dataBuff.append(data); @@ -50,6 +65,8 @@ frameDto->milisecond = now.toMSecsSinceEpoch(); frameDto->rawFrame = frameByte; + frameDto->devCode = devCode; + this->afterFramePhase(frameDto); } @@ -67,12 +84,28 @@ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl; std::cout << QByteUtil::binToHexString(frameDto->rawFrame).toStdString() << std::endl; + // 0. 输出到日志文件中 + QString date = frameDto->timestamp.mid(0, 10); + + // 1. 原始字节数组数据 + QString filename = "raw_" + devCode + ".log"; + QString content = frameDto->timestamp + " [recv] " + QByteUtil::binToHexString(frameDto->rawFrame); + QLogUtil::writeRawDataLogByDate(date, filename, content); + + // 2. 解析后的json数据 + QString frameFilename = "frame_" + devCode + ".log"; + QString frameContent = frameDto->timestamp + " [recv] " + QJsonDocument(frameDto->toJSON()).toJson(QJsonDocument::Compact); + QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); + // 3. 输出到中间件,执行后续处理过程 if (SettingConfig::getInstance().NEED_KAFKA == 1) { QJsonObject jsonObj = frameDto->toJSON(); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); jsonObj.insert("deviceId", deviceId); - kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); + kafkaProducer.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } + + // 4. 在界面上简单显示相差数据结果 + emit this->sendDataToDraw(frameDto); } diff --git a/DeviceHub/device/FreqReplicator.h b/DeviceHub/device/FreqReplicator.h index 221924f..18bc01f 100644 --- a/DeviceHub/device/FreqReplicator.h +++ b/DeviceHub/device/FreqReplicator.h @@ -4,6 +4,7 @@ #include #include "device/DeviceBase.h" +#include "protocol/dto/FreqReplicatorStatusDto.h" class FreqReplicator : public DeviceBase { @@ -12,13 +13,18 @@ explicit FreqReplicator(QObject *parent = nullptr); ~FreqReplicator(); + void mockReceivData(); + void afterFramePhase(DeviceFrameBaseDto * frameDto); +// void sendDataToSerial(QByteArray data); signals: void sendDataToDraw(DeviceFrameBaseDto * frameData); +// void sendCommandToDisplay(QJsonObject command); public slots: void dataReceivedHandler(QByteArray data); +// void commandReceivedHandler(QJsonObject command); }; #endif // FREQREPLICATOR_H diff --git a/DeviceHub/device/device.pri b/DeviceHub/device/device.pri index 5c6c099..645dbcb 100644 --- a/DeviceHub/device/device.pri +++ b/DeviceHub/device/device.pri @@ -5,7 +5,7 @@ HEADERS += $$PWD/TimeSwitcher.h HEADERS += $$PWD/FreqSwitcher.h #HEADERS += $$PWD/TimeReplicator.h -#HEADERS += $$PWD/FreqReplicator.h +HEADERS += $$PWD/FreqReplicator.h HEADERS += $$PWD/BCodeTerminal.h SOURCES += $$PWD/DeviceBase.cpp @@ -14,5 +14,5 @@ SOURCES += $$PWD/TimeSwitcher.cpp SOURCES += $$PWD/FreqSwitcher.cpp #SOURCES += $$PWD/TimeReplicator.cpp -#SOURCES += $$PWD/FreqReplicator.cpp +SOURCES += $$PWD/FreqReplicator.cpp SOURCES += $$PWD/BCodeTerminal.cpp diff --git a/DeviceHub/protocol/DeviceProtocolBase.cpp b/DeviceHub/protocol/DeviceProtocolBase.cpp index 9c46989..e7b26ca 100644 --- a/DeviceHub/protocol/DeviceProtocolBase.cpp +++ b/DeviceHub/protocol/DeviceProtocolBase.cpp @@ -4,7 +4,7 @@ #include "TimeSwitcherProtocolBM.h" #include "FreqSwitcherProtocolBM.h" //#include "TimeReplicatorProtocolBM.h" -//#include "FreqReplicatorProtocolTX.h" +#include "FreqReplicatorProtocolTX.h" #include "BCodeTerminalProtocolBM.h" #include @@ -31,6 +31,9 @@ } else if (deviceType == "07") { return new BCodeTerminalProtocolBM(); + } else if (deviceType == "10") + { + return new FreqReplicatorProtocolTX(); } // if (deviceType.contains("SignalGenerator") == true) diff --git a/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp b/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp new file mode 100644 index 0000000..f6fd3e9 --- /dev/null +++ b/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp @@ -0,0 +1,117 @@ +#include "FreqReplicatorProtocolTX.h" + +FreqReplicatorProtocolTX::FreqReplicatorProtocolTX(QObject *parent) : DeviceProtocolBase(parent) +{ + +} + +FreqReplicatorProtocolTX::~FreqReplicatorProtocolTX() +{ + +} + +DeviceFrameBaseDto * FreqReplicatorProtocolTX::frameFactory(int frameType) +{ + DeviceFrameBaseDto * frameData = new FreqReplicatorStatusDto(); + + return frameData; +} + +bool FreqReplicatorProtocolTX::parseDeviceFrameData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType) +{ + if (frameType != 1) + return false; + + QByteArray content = rawData.mid(4, rawData.size() - 5); + QByteArray inputACByte = content.mid(1, 2); + QByteArray inputBDByte = content.mid(3, 2); + QByteArray outputACByte = content.mid(5, 8); + QByteArray outputBDByte = content.mid(13, 8); + + QString inputAC = ""; + QString inputBD = ""; + QString outputAC = ""; + QString outputBD = ""; + + if (content.at(0) == 0x01) + { + ((FreqReplicatorStatusDto *) frameData)->abOrCd = "AB"; + + inputAC = QString("%1,%2").arg(inputACByte.at(1) == 0x01 ? "1" : "0").arg(inputACByte.at(0) == 0x01 ? "1" : "0"); + inputBD = QString("%1,%2").arg(inputBDByte.at(1) == 0x01 ? "1" : "0").arg(inputBDByte.at(0) == 0x01 ? "1" : "0"); + + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputAC); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputBD); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + + for (int i = 0; i < 8; i++) + { + outputAC += outputACByte.at(i) == 0x01 ? "1," : "0,"; + outputBD += outputBDByte.at(i) == 0x01 ? "1," : "0,"; + } + + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputAC.mid(0, outputAC.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputBD.mid(0, outputBD.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + } else + { + ((FreqReplicatorStatusDto *) frameData)->abOrCd = "CD"; + + inputAC = QString("%1,%2").arg(inputACByte.at(1) == 0x01 ? "1" : "0").arg(inputACByte.at(0) == 0x01 ? "1" : "0"); + inputBD = QString("%1,%2").arg(inputBDByte.at(1) == 0x01 ? "1" : "0").arg(inputBDByte.at(0) == 0x01 ? "1" : "0"); + + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputAC); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputBD); + + for (int i = 0; i < 8; i++) + { + outputAC += outputACByte.at(i) == 0x01 ? "1," : "0,"; + outputBD += outputBDByte.at(i) == 0x01 ? "1," : "0,"; + } + + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputAC.mid(0, outputAC.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputBD.mid(0, outputBD.size() - 1)); + } + + ((FreqReplicatorStatusDto *)frameData)->frameType = FREQ_REPLICATOR_STATUS_FRAME_TYPE; + + return true; +} + +QList FreqReplicatorProtocolTX::extractFrameList(QByteArray rawData) +{ + QList resultList; + while (QByteUtil::binToHexString(rawData.mid(0, 3)) == "AA5500") + { + QByteArray ba; + + qint8 length = rawData.mid(3, 1).toHex().toInt(0, 16); + if (rawData.length() >= length + 5) + { + ba.append(rawData.mid(0, length + 5)); + + resultList.append(ba); + ba.clear(); + + rawData = rawData.mid(length + 5, rawData.length() - length - 5); + } else + { + break; + } + } + + return resultList; +} + +int FreqReplicatorProtocolTX::checkFrame(QByteArray rawData) +{ + if (rawData.size() == 26) + return 1; + return 0; +} diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/TimeReplicatorForm.cpp b/DeviceHub/TimeReplicatorForm.cpp new file mode 100644 index 0000000..eb83370 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.cpp @@ -0,0 +1,19 @@ +#include "TimeReplicatorForm.h" +#include "ui_TimeReplicatorForm.h" + +TimeReplicatorForm::TimeReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TimeReplicatorForm) +{ + ui->setupUi(this); +} + +TimeReplicatorForm::~TimeReplicatorForm() +{ + delete ui; +} + +void TimeReplicatorForm::on_tmRepButt_clicked() +{ + +} diff --git a/DeviceHub/TimeReplicatorForm.h b/DeviceHub/TimeReplicatorForm.h new file mode 100644 index 0000000..e6c9dc8 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.h @@ -0,0 +1,25 @@ +#ifndef TIMEREPLICATORFORM_H +#define TIMEREPLICATORFORM_H + +#include + +namespace Ui { +class TimeReplicatorForm; +} + +class TimeReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit TimeReplicatorForm(QWidget *parent = nullptr); + ~TimeReplicatorForm(); + +private slots: + void on_tmRepButt_clicked(); + +private: + Ui::TimeReplicatorForm *ui; +}; + +#endif // TIMEREPLICATORFORM_H diff --git a/DeviceHub/TimeReplicatorForm.ui b/DeviceHub/TimeReplicatorForm.ui new file mode 100644 index 0000000..bf39894 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.ui @@ -0,0 +1,34 @@ + + + + + TimeReplicatorForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock TimeReplicator + + + + + + diff --git a/DeviceHub/device/DeviceBase.cpp b/DeviceHub/device/DeviceBase.cpp index f1c6c59..289beb5 100644 --- a/DeviceHub/device/DeviceBase.cpp +++ b/DeviceHub/device/DeviceBase.cpp @@ -4,6 +4,7 @@ #include "TimeSwitcher.h" #include "FreqSwitcher.h" #include "BCodeTerminal.h" +#include "FreqReplicator.h" #include @@ -55,6 +56,9 @@ } else if (deviceType == "07") { base = new BCodeTerminal(parent); + } else if (deviceType == "10") + { + base = new FreqReplicator(parent); } return base; diff --git a/DeviceHub/device/FreqReplicator.cpp b/DeviceHub/device/FreqReplicator.cpp index b4046fe..8767f90 100644 --- a/DeviceHub/device/FreqReplicator.cpp +++ b/DeviceHub/device/FreqReplicator.cpp @@ -1,18 +1,22 @@ #include "FreqReplicator.h" - +#include "DeviceHubWindow.h" #include #include FreqReplicator::FreqReplicator(QObject *parent) : DeviceBase(parent) { + this->devType = "10"; connect(&this->serialUtil, &QSerialPortUtil::dataRecieved, this, &FreqReplicator::dataReceivedHandler); - kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); - kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); - kafkaUtil.createProducer(); + connect(this, &FreqReplicator::sendDataToDraw, + ((DeviceHubWindow *)this->parent())->freqRepForm, &FreqReplicatorForm::drawDeviceFrameOnForm); - this->protocol = DeviceStatusProtocolBase::deviceStatusProtocolFactory(typeid (this).name()); + kafkaProducer.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); + kafkaProducer.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); + kafkaProducer.createProducer(); + + this->protocol = DeviceProtocolBase::deviceProtocolFactory(devType); } FreqReplicator::~FreqReplicator() @@ -21,6 +25,17 @@ this, &FreqReplicator::dataReceivedHandler); } +void FreqReplicator::mockReceivData() +{ + QByteArray buffer; + + // freq replicator + buffer = QByteUtil::hexStringToBytes("AA550015010001000101010101010101010101010101010101EB"); + buffer.append(QByteUtil::hexStringToBytes("AA550015020001000101010101010101010101010101010101E8")); + + this->dataReceivedHandler(buffer); +} + void FreqReplicator::dataReceivedHandler(QByteArray data) { this->dataBuff.append(data); @@ -50,6 +65,8 @@ frameDto->milisecond = now.toMSecsSinceEpoch(); frameDto->rawFrame = frameByte; + frameDto->devCode = devCode; + this->afterFramePhase(frameDto); } @@ -67,12 +84,28 @@ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl; std::cout << QByteUtil::binToHexString(frameDto->rawFrame).toStdString() << std::endl; + // 0. 输出到日志文件中 + QString date = frameDto->timestamp.mid(0, 10); + + // 1. 原始字节数组数据 + QString filename = "raw_" + devCode + ".log"; + QString content = frameDto->timestamp + " [recv] " + QByteUtil::binToHexString(frameDto->rawFrame); + QLogUtil::writeRawDataLogByDate(date, filename, content); + + // 2. 解析后的json数据 + QString frameFilename = "frame_" + devCode + ".log"; + QString frameContent = frameDto->timestamp + " [recv] " + QJsonDocument(frameDto->toJSON()).toJson(QJsonDocument::Compact); + QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); + // 3. 输出到中间件,执行后续处理过程 if (SettingConfig::getInstance().NEED_KAFKA == 1) { QJsonObject jsonObj = frameDto->toJSON(); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); jsonObj.insert("deviceId", deviceId); - kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); + kafkaProducer.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } + + // 4. 在界面上简单显示相差数据结果 + emit this->sendDataToDraw(frameDto); } diff --git a/DeviceHub/device/FreqReplicator.h b/DeviceHub/device/FreqReplicator.h index 221924f..18bc01f 100644 --- a/DeviceHub/device/FreqReplicator.h +++ b/DeviceHub/device/FreqReplicator.h @@ -4,6 +4,7 @@ #include #include "device/DeviceBase.h" +#include "protocol/dto/FreqReplicatorStatusDto.h" class FreqReplicator : public DeviceBase { @@ -12,13 +13,18 @@ explicit FreqReplicator(QObject *parent = nullptr); ~FreqReplicator(); + void mockReceivData(); + void afterFramePhase(DeviceFrameBaseDto * frameDto); +// void sendDataToSerial(QByteArray data); signals: void sendDataToDraw(DeviceFrameBaseDto * frameData); +// void sendCommandToDisplay(QJsonObject command); public slots: void dataReceivedHandler(QByteArray data); +// void commandReceivedHandler(QJsonObject command); }; #endif // FREQREPLICATOR_H diff --git a/DeviceHub/device/device.pri b/DeviceHub/device/device.pri index 5c6c099..645dbcb 100644 --- a/DeviceHub/device/device.pri +++ b/DeviceHub/device/device.pri @@ -5,7 +5,7 @@ HEADERS += $$PWD/TimeSwitcher.h HEADERS += $$PWD/FreqSwitcher.h #HEADERS += $$PWD/TimeReplicator.h -#HEADERS += $$PWD/FreqReplicator.h +HEADERS += $$PWD/FreqReplicator.h HEADERS += $$PWD/BCodeTerminal.h SOURCES += $$PWD/DeviceBase.cpp @@ -14,5 +14,5 @@ SOURCES += $$PWD/TimeSwitcher.cpp SOURCES += $$PWD/FreqSwitcher.cpp #SOURCES += $$PWD/TimeReplicator.cpp -#SOURCES += $$PWD/FreqReplicator.cpp +SOURCES += $$PWD/FreqReplicator.cpp SOURCES += $$PWD/BCodeTerminal.cpp diff --git a/DeviceHub/protocol/DeviceProtocolBase.cpp b/DeviceHub/protocol/DeviceProtocolBase.cpp index 9c46989..e7b26ca 100644 --- a/DeviceHub/protocol/DeviceProtocolBase.cpp +++ b/DeviceHub/protocol/DeviceProtocolBase.cpp @@ -4,7 +4,7 @@ #include "TimeSwitcherProtocolBM.h" #include "FreqSwitcherProtocolBM.h" //#include "TimeReplicatorProtocolBM.h" -//#include "FreqReplicatorProtocolTX.h" +#include "FreqReplicatorProtocolTX.h" #include "BCodeTerminalProtocolBM.h" #include @@ -31,6 +31,9 @@ } else if (deviceType == "07") { return new BCodeTerminalProtocolBM(); + } else if (deviceType == "10") + { + return new FreqReplicatorProtocolTX(); } // if (deviceType.contains("SignalGenerator") == true) diff --git a/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp b/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp new file mode 100644 index 0000000..f6fd3e9 --- /dev/null +++ b/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp @@ -0,0 +1,117 @@ +#include "FreqReplicatorProtocolTX.h" + +FreqReplicatorProtocolTX::FreqReplicatorProtocolTX(QObject *parent) : DeviceProtocolBase(parent) +{ + +} + +FreqReplicatorProtocolTX::~FreqReplicatorProtocolTX() +{ + +} + +DeviceFrameBaseDto * FreqReplicatorProtocolTX::frameFactory(int frameType) +{ + DeviceFrameBaseDto * frameData = new FreqReplicatorStatusDto(); + + return frameData; +} + +bool FreqReplicatorProtocolTX::parseDeviceFrameData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType) +{ + if (frameType != 1) + return false; + + QByteArray content = rawData.mid(4, rawData.size() - 5); + QByteArray inputACByte = content.mid(1, 2); + QByteArray inputBDByte = content.mid(3, 2); + QByteArray outputACByte = content.mid(5, 8); + QByteArray outputBDByte = content.mid(13, 8); + + QString inputAC = ""; + QString inputBD = ""; + QString outputAC = ""; + QString outputBD = ""; + + if (content.at(0) == 0x01) + { + ((FreqReplicatorStatusDto *) frameData)->abOrCd = "AB"; + + inputAC = QString("%1,%2").arg(inputACByte.at(1) == 0x01 ? "1" : "0").arg(inputACByte.at(0) == 0x01 ? "1" : "0"); + inputBD = QString("%1,%2").arg(inputBDByte.at(1) == 0x01 ? "1" : "0").arg(inputBDByte.at(0) == 0x01 ? "1" : "0"); + + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputAC); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputBD); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + + for (int i = 0; i < 8; i++) + { + outputAC += outputACByte.at(i) == 0x01 ? "1," : "0,"; + outputBD += outputBDByte.at(i) == 0x01 ? "1," : "0,"; + } + + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputAC.mid(0, outputAC.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputBD.mid(0, outputBD.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + } else + { + ((FreqReplicatorStatusDto *) frameData)->abOrCd = "CD"; + + inputAC = QString("%1,%2").arg(inputACByte.at(1) == 0x01 ? "1" : "0").arg(inputACByte.at(0) == 0x01 ? "1" : "0"); + inputBD = QString("%1,%2").arg(inputBDByte.at(1) == 0x01 ? "1" : "0").arg(inputBDByte.at(0) == 0x01 ? "1" : "0"); + + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputAC); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputBD); + + for (int i = 0; i < 8; i++) + { + outputAC += outputACByte.at(i) == 0x01 ? "1," : "0,"; + outputBD += outputBDByte.at(i) == 0x01 ? "1," : "0,"; + } + + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputAC.mid(0, outputAC.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputBD.mid(0, outputBD.size() - 1)); + } + + ((FreqReplicatorStatusDto *)frameData)->frameType = FREQ_REPLICATOR_STATUS_FRAME_TYPE; + + return true; +} + +QList FreqReplicatorProtocolTX::extractFrameList(QByteArray rawData) +{ + QList resultList; + while (QByteUtil::binToHexString(rawData.mid(0, 3)) == "AA5500") + { + QByteArray ba; + + qint8 length = rawData.mid(3, 1).toHex().toInt(0, 16); + if (rawData.length() >= length + 5) + { + ba.append(rawData.mid(0, length + 5)); + + resultList.append(ba); + ba.clear(); + + rawData = rawData.mid(length + 5, rawData.length() - length - 5); + } else + { + break; + } + } + + return resultList; +} + +int FreqReplicatorProtocolTX::checkFrame(QByteArray rawData) +{ + if (rawData.size() == 26) + return 1; + return 0; +} diff --git a/DeviceHub/protocol/FreqReplicatorProtocolTX.h b/DeviceHub/protocol/FreqReplicatorProtocolTX.h new file mode 100644 index 0000000..e219801 --- /dev/null +++ b/DeviceHub/protocol/FreqReplicatorProtocolTX.h @@ -0,0 +1,28 @@ +#ifndef FREQREPLICATORPROTOCOLTX_H +#define FREQREPLICATORPROTOCOLTX_H + +#include + +#include "common/utils/QByteUtil.h" +#include "DeviceProtocolBase.h" +#include "dto/FreqReplicatorStatusDto.h" + +class FreqReplicatorProtocolTX : public DeviceProtocolBase +{ + Q_OBJECT +public: + explicit FreqReplicatorProtocolTX(QObject *parent = nullptr); + ~FreqReplicatorProtocolTX(); + + // 解析数据 + bool parseDeviceFrameData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType); + DeviceFrameBaseDto * frameFactory(int frameType); + + // + QList extractFrameList(QByteArray rawData); + + // 检测帧格式,帧头帧尾 + int checkFrame(QByteArray rawData); +}; + +#endif // FREQREPLICATORPROTOCOLTX_H diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/TimeReplicatorForm.cpp b/DeviceHub/TimeReplicatorForm.cpp new file mode 100644 index 0000000..eb83370 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.cpp @@ -0,0 +1,19 @@ +#include "TimeReplicatorForm.h" +#include "ui_TimeReplicatorForm.h" + +TimeReplicatorForm::TimeReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TimeReplicatorForm) +{ + ui->setupUi(this); +} + +TimeReplicatorForm::~TimeReplicatorForm() +{ + delete ui; +} + +void TimeReplicatorForm::on_tmRepButt_clicked() +{ + +} diff --git a/DeviceHub/TimeReplicatorForm.h b/DeviceHub/TimeReplicatorForm.h new file mode 100644 index 0000000..e6c9dc8 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.h @@ -0,0 +1,25 @@ +#ifndef TIMEREPLICATORFORM_H +#define TIMEREPLICATORFORM_H + +#include + +namespace Ui { +class TimeReplicatorForm; +} + +class TimeReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit TimeReplicatorForm(QWidget *parent = nullptr); + ~TimeReplicatorForm(); + +private slots: + void on_tmRepButt_clicked(); + +private: + Ui::TimeReplicatorForm *ui; +}; + +#endif // TIMEREPLICATORFORM_H diff --git a/DeviceHub/TimeReplicatorForm.ui b/DeviceHub/TimeReplicatorForm.ui new file mode 100644 index 0000000..bf39894 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.ui @@ -0,0 +1,34 @@ + + + + + TimeReplicatorForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock TimeReplicator + + + + + + diff --git a/DeviceHub/device/DeviceBase.cpp b/DeviceHub/device/DeviceBase.cpp index f1c6c59..289beb5 100644 --- a/DeviceHub/device/DeviceBase.cpp +++ b/DeviceHub/device/DeviceBase.cpp @@ -4,6 +4,7 @@ #include "TimeSwitcher.h" #include "FreqSwitcher.h" #include "BCodeTerminal.h" +#include "FreqReplicator.h" #include @@ -55,6 +56,9 @@ } else if (deviceType == "07") { base = new BCodeTerminal(parent); + } else if (deviceType == "10") + { + base = new FreqReplicator(parent); } return base; diff --git a/DeviceHub/device/FreqReplicator.cpp b/DeviceHub/device/FreqReplicator.cpp index b4046fe..8767f90 100644 --- a/DeviceHub/device/FreqReplicator.cpp +++ b/DeviceHub/device/FreqReplicator.cpp @@ -1,18 +1,22 @@ #include "FreqReplicator.h" - +#include "DeviceHubWindow.h" #include #include FreqReplicator::FreqReplicator(QObject *parent) : DeviceBase(parent) { + this->devType = "10"; connect(&this->serialUtil, &QSerialPortUtil::dataRecieved, this, &FreqReplicator::dataReceivedHandler); - kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); - kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); - kafkaUtil.createProducer(); + connect(this, &FreqReplicator::sendDataToDraw, + ((DeviceHubWindow *)this->parent())->freqRepForm, &FreqReplicatorForm::drawDeviceFrameOnForm); - this->protocol = DeviceStatusProtocolBase::deviceStatusProtocolFactory(typeid (this).name()); + kafkaProducer.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); + kafkaProducer.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); + kafkaProducer.createProducer(); + + this->protocol = DeviceProtocolBase::deviceProtocolFactory(devType); } FreqReplicator::~FreqReplicator() @@ -21,6 +25,17 @@ this, &FreqReplicator::dataReceivedHandler); } +void FreqReplicator::mockReceivData() +{ + QByteArray buffer; + + // freq replicator + buffer = QByteUtil::hexStringToBytes("AA550015010001000101010101010101010101010101010101EB"); + buffer.append(QByteUtil::hexStringToBytes("AA550015020001000101010101010101010101010101010101E8")); + + this->dataReceivedHandler(buffer); +} + void FreqReplicator::dataReceivedHandler(QByteArray data) { this->dataBuff.append(data); @@ -50,6 +65,8 @@ frameDto->milisecond = now.toMSecsSinceEpoch(); frameDto->rawFrame = frameByte; + frameDto->devCode = devCode; + this->afterFramePhase(frameDto); } @@ -67,12 +84,28 @@ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl; std::cout << QByteUtil::binToHexString(frameDto->rawFrame).toStdString() << std::endl; + // 0. 输出到日志文件中 + QString date = frameDto->timestamp.mid(0, 10); + + // 1. 原始字节数组数据 + QString filename = "raw_" + devCode + ".log"; + QString content = frameDto->timestamp + " [recv] " + QByteUtil::binToHexString(frameDto->rawFrame); + QLogUtil::writeRawDataLogByDate(date, filename, content); + + // 2. 解析后的json数据 + QString frameFilename = "frame_" + devCode + ".log"; + QString frameContent = frameDto->timestamp + " [recv] " + QJsonDocument(frameDto->toJSON()).toJson(QJsonDocument::Compact); + QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); + // 3. 输出到中间件,执行后续处理过程 if (SettingConfig::getInstance().NEED_KAFKA == 1) { QJsonObject jsonObj = frameDto->toJSON(); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); jsonObj.insert("deviceId", deviceId); - kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); + kafkaProducer.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } + + // 4. 在界面上简单显示相差数据结果 + emit this->sendDataToDraw(frameDto); } diff --git a/DeviceHub/device/FreqReplicator.h b/DeviceHub/device/FreqReplicator.h index 221924f..18bc01f 100644 --- a/DeviceHub/device/FreqReplicator.h +++ b/DeviceHub/device/FreqReplicator.h @@ -4,6 +4,7 @@ #include #include "device/DeviceBase.h" +#include "protocol/dto/FreqReplicatorStatusDto.h" class FreqReplicator : public DeviceBase { @@ -12,13 +13,18 @@ explicit FreqReplicator(QObject *parent = nullptr); ~FreqReplicator(); + void mockReceivData(); + void afterFramePhase(DeviceFrameBaseDto * frameDto); +// void sendDataToSerial(QByteArray data); signals: void sendDataToDraw(DeviceFrameBaseDto * frameData); +// void sendCommandToDisplay(QJsonObject command); public slots: void dataReceivedHandler(QByteArray data); +// void commandReceivedHandler(QJsonObject command); }; #endif // FREQREPLICATOR_H diff --git a/DeviceHub/device/device.pri b/DeviceHub/device/device.pri index 5c6c099..645dbcb 100644 --- a/DeviceHub/device/device.pri +++ b/DeviceHub/device/device.pri @@ -5,7 +5,7 @@ HEADERS += $$PWD/TimeSwitcher.h HEADERS += $$PWD/FreqSwitcher.h #HEADERS += $$PWD/TimeReplicator.h -#HEADERS += $$PWD/FreqReplicator.h +HEADERS += $$PWD/FreqReplicator.h HEADERS += $$PWD/BCodeTerminal.h SOURCES += $$PWD/DeviceBase.cpp @@ -14,5 +14,5 @@ SOURCES += $$PWD/TimeSwitcher.cpp SOURCES += $$PWD/FreqSwitcher.cpp #SOURCES += $$PWD/TimeReplicator.cpp -#SOURCES += $$PWD/FreqReplicator.cpp +SOURCES += $$PWD/FreqReplicator.cpp SOURCES += $$PWD/BCodeTerminal.cpp diff --git a/DeviceHub/protocol/DeviceProtocolBase.cpp b/DeviceHub/protocol/DeviceProtocolBase.cpp index 9c46989..e7b26ca 100644 --- a/DeviceHub/protocol/DeviceProtocolBase.cpp +++ b/DeviceHub/protocol/DeviceProtocolBase.cpp @@ -4,7 +4,7 @@ #include "TimeSwitcherProtocolBM.h" #include "FreqSwitcherProtocolBM.h" //#include "TimeReplicatorProtocolBM.h" -//#include "FreqReplicatorProtocolTX.h" +#include "FreqReplicatorProtocolTX.h" #include "BCodeTerminalProtocolBM.h" #include @@ -31,6 +31,9 @@ } else if (deviceType == "07") { return new BCodeTerminalProtocolBM(); + } else if (deviceType == "10") + { + return new FreqReplicatorProtocolTX(); } // if (deviceType.contains("SignalGenerator") == true) diff --git a/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp b/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp new file mode 100644 index 0000000..f6fd3e9 --- /dev/null +++ b/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp @@ -0,0 +1,117 @@ +#include "FreqReplicatorProtocolTX.h" + +FreqReplicatorProtocolTX::FreqReplicatorProtocolTX(QObject *parent) : DeviceProtocolBase(parent) +{ + +} + +FreqReplicatorProtocolTX::~FreqReplicatorProtocolTX() +{ + +} + +DeviceFrameBaseDto * FreqReplicatorProtocolTX::frameFactory(int frameType) +{ + DeviceFrameBaseDto * frameData = new FreqReplicatorStatusDto(); + + return frameData; +} + +bool FreqReplicatorProtocolTX::parseDeviceFrameData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType) +{ + if (frameType != 1) + return false; + + QByteArray content = rawData.mid(4, rawData.size() - 5); + QByteArray inputACByte = content.mid(1, 2); + QByteArray inputBDByte = content.mid(3, 2); + QByteArray outputACByte = content.mid(5, 8); + QByteArray outputBDByte = content.mid(13, 8); + + QString inputAC = ""; + QString inputBD = ""; + QString outputAC = ""; + QString outputBD = ""; + + if (content.at(0) == 0x01) + { + ((FreqReplicatorStatusDto *) frameData)->abOrCd = "AB"; + + inputAC = QString("%1,%2").arg(inputACByte.at(1) == 0x01 ? "1" : "0").arg(inputACByte.at(0) == 0x01 ? "1" : "0"); + inputBD = QString("%1,%2").arg(inputBDByte.at(1) == 0x01 ? "1" : "0").arg(inputBDByte.at(0) == 0x01 ? "1" : "0"); + + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputAC); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputBD); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + + for (int i = 0; i < 8; i++) + { + outputAC += outputACByte.at(i) == 0x01 ? "1," : "0,"; + outputBD += outputBDByte.at(i) == 0x01 ? "1," : "0,"; + } + + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputAC.mid(0, outputAC.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputBD.mid(0, outputBD.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + } else + { + ((FreqReplicatorStatusDto *) frameData)->abOrCd = "CD"; + + inputAC = QString("%1,%2").arg(inputACByte.at(1) == 0x01 ? "1" : "0").arg(inputACByte.at(0) == 0x01 ? "1" : "0"); + inputBD = QString("%1,%2").arg(inputBDByte.at(1) == 0x01 ? "1" : "0").arg(inputBDByte.at(0) == 0x01 ? "1" : "0"); + + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputAC); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputBD); + + for (int i = 0; i < 8; i++) + { + outputAC += outputACByte.at(i) == 0x01 ? "1," : "0,"; + outputBD += outputBDByte.at(i) == 0x01 ? "1," : "0,"; + } + + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputAC.mid(0, outputAC.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputBD.mid(0, outputBD.size() - 1)); + } + + ((FreqReplicatorStatusDto *)frameData)->frameType = FREQ_REPLICATOR_STATUS_FRAME_TYPE; + + return true; +} + +QList FreqReplicatorProtocolTX::extractFrameList(QByteArray rawData) +{ + QList resultList; + while (QByteUtil::binToHexString(rawData.mid(0, 3)) == "AA5500") + { + QByteArray ba; + + qint8 length = rawData.mid(3, 1).toHex().toInt(0, 16); + if (rawData.length() >= length + 5) + { + ba.append(rawData.mid(0, length + 5)); + + resultList.append(ba); + ba.clear(); + + rawData = rawData.mid(length + 5, rawData.length() - length - 5); + } else + { + break; + } + } + + return resultList; +} + +int FreqReplicatorProtocolTX::checkFrame(QByteArray rawData) +{ + if (rawData.size() == 26) + return 1; + return 0; +} diff --git a/DeviceHub/protocol/FreqReplicatorProtocolTX.h b/DeviceHub/protocol/FreqReplicatorProtocolTX.h new file mode 100644 index 0000000..e219801 --- /dev/null +++ b/DeviceHub/protocol/FreqReplicatorProtocolTX.h @@ -0,0 +1,28 @@ +#ifndef FREQREPLICATORPROTOCOLTX_H +#define FREQREPLICATORPROTOCOLTX_H + +#include + +#include "common/utils/QByteUtil.h" +#include "DeviceProtocolBase.h" +#include "dto/FreqReplicatorStatusDto.h" + +class FreqReplicatorProtocolTX : public DeviceProtocolBase +{ + Q_OBJECT +public: + explicit FreqReplicatorProtocolTX(QObject *parent = nullptr); + ~FreqReplicatorProtocolTX(); + + // 解析数据 + bool parseDeviceFrameData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType); + DeviceFrameBaseDto * frameFactory(int frameType); + + // + QList extractFrameList(QByteArray rawData); + + // 检测帧格式,帧头帧尾 + int checkFrame(QByteArray rawData); +}; + +#endif // FREQREPLICATORPROTOCOLTX_H diff --git a/DeviceHub/protocol/dto/FreqReplicatorStatusDto.cpp b/DeviceHub/protocol/dto/FreqReplicatorStatusDto.cpp new file mode 100644 index 0000000..9b551db --- /dev/null +++ b/DeviceHub/protocol/dto/FreqReplicatorStatusDto.cpp @@ -0,0 +1,31 @@ +#include "FreqReplicatorStatusDto.h" + +FreqReplicatorStatusDto::FreqReplicatorStatusDto(QObject *parent) : DeviceFrameBaseDto(parent) +{ + +} + +QJsonObject FreqReplicatorStatusDto::toJSON() +{ + QJsonObject jsonObj; + + QJsonObject dataObj; + dataObj.insert("ABCD", this->abOrCd); + + QJsonArray inputArray; + QJsonArray outputArray; + + for (int i = 0; i < 4; i++) + { + inputArray.append(this->inValid.at(i)); + outputArray.append(outValid.at(i)); + } + dataObj.insert("inValid", inputArray); + dataObj.insert("outValid", outputArray); + + jsonObj.insert("ts", this->milisecond); + jsonObj.insert("frameType", this->frameType); + jsonObj.insert("data", dataObj); + + return jsonObj; +} diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/TimeReplicatorForm.cpp b/DeviceHub/TimeReplicatorForm.cpp new file mode 100644 index 0000000..eb83370 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.cpp @@ -0,0 +1,19 @@ +#include "TimeReplicatorForm.h" +#include "ui_TimeReplicatorForm.h" + +TimeReplicatorForm::TimeReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TimeReplicatorForm) +{ + ui->setupUi(this); +} + +TimeReplicatorForm::~TimeReplicatorForm() +{ + delete ui; +} + +void TimeReplicatorForm::on_tmRepButt_clicked() +{ + +} diff --git a/DeviceHub/TimeReplicatorForm.h b/DeviceHub/TimeReplicatorForm.h new file mode 100644 index 0000000..e6c9dc8 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.h @@ -0,0 +1,25 @@ +#ifndef TIMEREPLICATORFORM_H +#define TIMEREPLICATORFORM_H + +#include + +namespace Ui { +class TimeReplicatorForm; +} + +class TimeReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit TimeReplicatorForm(QWidget *parent = nullptr); + ~TimeReplicatorForm(); + +private slots: + void on_tmRepButt_clicked(); + +private: + Ui::TimeReplicatorForm *ui; +}; + +#endif // TIMEREPLICATORFORM_H diff --git a/DeviceHub/TimeReplicatorForm.ui b/DeviceHub/TimeReplicatorForm.ui new file mode 100644 index 0000000..bf39894 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.ui @@ -0,0 +1,34 @@ + + + + + TimeReplicatorForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock TimeReplicator + + + + + + diff --git a/DeviceHub/device/DeviceBase.cpp b/DeviceHub/device/DeviceBase.cpp index f1c6c59..289beb5 100644 --- a/DeviceHub/device/DeviceBase.cpp +++ b/DeviceHub/device/DeviceBase.cpp @@ -4,6 +4,7 @@ #include "TimeSwitcher.h" #include "FreqSwitcher.h" #include "BCodeTerminal.h" +#include "FreqReplicator.h" #include @@ -55,6 +56,9 @@ } else if (deviceType == "07") { base = new BCodeTerminal(parent); + } else if (deviceType == "10") + { + base = new FreqReplicator(parent); } return base; diff --git a/DeviceHub/device/FreqReplicator.cpp b/DeviceHub/device/FreqReplicator.cpp index b4046fe..8767f90 100644 --- a/DeviceHub/device/FreqReplicator.cpp +++ b/DeviceHub/device/FreqReplicator.cpp @@ -1,18 +1,22 @@ #include "FreqReplicator.h" - +#include "DeviceHubWindow.h" #include #include FreqReplicator::FreqReplicator(QObject *parent) : DeviceBase(parent) { + this->devType = "10"; connect(&this->serialUtil, &QSerialPortUtil::dataRecieved, this, &FreqReplicator::dataReceivedHandler); - kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); - kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); - kafkaUtil.createProducer(); + connect(this, &FreqReplicator::sendDataToDraw, + ((DeviceHubWindow *)this->parent())->freqRepForm, &FreqReplicatorForm::drawDeviceFrameOnForm); - this->protocol = DeviceStatusProtocolBase::deviceStatusProtocolFactory(typeid (this).name()); + kafkaProducer.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); + kafkaProducer.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); + kafkaProducer.createProducer(); + + this->protocol = DeviceProtocolBase::deviceProtocolFactory(devType); } FreqReplicator::~FreqReplicator() @@ -21,6 +25,17 @@ this, &FreqReplicator::dataReceivedHandler); } +void FreqReplicator::mockReceivData() +{ + QByteArray buffer; + + // freq replicator + buffer = QByteUtil::hexStringToBytes("AA550015010001000101010101010101010101010101010101EB"); + buffer.append(QByteUtil::hexStringToBytes("AA550015020001000101010101010101010101010101010101E8")); + + this->dataReceivedHandler(buffer); +} + void FreqReplicator::dataReceivedHandler(QByteArray data) { this->dataBuff.append(data); @@ -50,6 +65,8 @@ frameDto->milisecond = now.toMSecsSinceEpoch(); frameDto->rawFrame = frameByte; + frameDto->devCode = devCode; + this->afterFramePhase(frameDto); } @@ -67,12 +84,28 @@ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl; std::cout << QByteUtil::binToHexString(frameDto->rawFrame).toStdString() << std::endl; + // 0. 输出到日志文件中 + QString date = frameDto->timestamp.mid(0, 10); + + // 1. 原始字节数组数据 + QString filename = "raw_" + devCode + ".log"; + QString content = frameDto->timestamp + " [recv] " + QByteUtil::binToHexString(frameDto->rawFrame); + QLogUtil::writeRawDataLogByDate(date, filename, content); + + // 2. 解析后的json数据 + QString frameFilename = "frame_" + devCode + ".log"; + QString frameContent = frameDto->timestamp + " [recv] " + QJsonDocument(frameDto->toJSON()).toJson(QJsonDocument::Compact); + QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); + // 3. 输出到中间件,执行后续处理过程 if (SettingConfig::getInstance().NEED_KAFKA == 1) { QJsonObject jsonObj = frameDto->toJSON(); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); jsonObj.insert("deviceId", deviceId); - kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); + kafkaProducer.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } + + // 4. 在界面上简单显示相差数据结果 + emit this->sendDataToDraw(frameDto); } diff --git a/DeviceHub/device/FreqReplicator.h b/DeviceHub/device/FreqReplicator.h index 221924f..18bc01f 100644 --- a/DeviceHub/device/FreqReplicator.h +++ b/DeviceHub/device/FreqReplicator.h @@ -4,6 +4,7 @@ #include #include "device/DeviceBase.h" +#include "protocol/dto/FreqReplicatorStatusDto.h" class FreqReplicator : public DeviceBase { @@ -12,13 +13,18 @@ explicit FreqReplicator(QObject *parent = nullptr); ~FreqReplicator(); + void mockReceivData(); + void afterFramePhase(DeviceFrameBaseDto * frameDto); +// void sendDataToSerial(QByteArray data); signals: void sendDataToDraw(DeviceFrameBaseDto * frameData); +// void sendCommandToDisplay(QJsonObject command); public slots: void dataReceivedHandler(QByteArray data); +// void commandReceivedHandler(QJsonObject command); }; #endif // FREQREPLICATOR_H diff --git a/DeviceHub/device/device.pri b/DeviceHub/device/device.pri index 5c6c099..645dbcb 100644 --- a/DeviceHub/device/device.pri +++ b/DeviceHub/device/device.pri @@ -5,7 +5,7 @@ HEADERS += $$PWD/TimeSwitcher.h HEADERS += $$PWD/FreqSwitcher.h #HEADERS += $$PWD/TimeReplicator.h -#HEADERS += $$PWD/FreqReplicator.h +HEADERS += $$PWD/FreqReplicator.h HEADERS += $$PWD/BCodeTerminal.h SOURCES += $$PWD/DeviceBase.cpp @@ -14,5 +14,5 @@ SOURCES += $$PWD/TimeSwitcher.cpp SOURCES += $$PWD/FreqSwitcher.cpp #SOURCES += $$PWD/TimeReplicator.cpp -#SOURCES += $$PWD/FreqReplicator.cpp +SOURCES += $$PWD/FreqReplicator.cpp SOURCES += $$PWD/BCodeTerminal.cpp diff --git a/DeviceHub/protocol/DeviceProtocolBase.cpp b/DeviceHub/protocol/DeviceProtocolBase.cpp index 9c46989..e7b26ca 100644 --- a/DeviceHub/protocol/DeviceProtocolBase.cpp +++ b/DeviceHub/protocol/DeviceProtocolBase.cpp @@ -4,7 +4,7 @@ #include "TimeSwitcherProtocolBM.h" #include "FreqSwitcherProtocolBM.h" //#include "TimeReplicatorProtocolBM.h" -//#include "FreqReplicatorProtocolTX.h" +#include "FreqReplicatorProtocolTX.h" #include "BCodeTerminalProtocolBM.h" #include @@ -31,6 +31,9 @@ } else if (deviceType == "07") { return new BCodeTerminalProtocolBM(); + } else if (deviceType == "10") + { + return new FreqReplicatorProtocolTX(); } // if (deviceType.contains("SignalGenerator") == true) diff --git a/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp b/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp new file mode 100644 index 0000000..f6fd3e9 --- /dev/null +++ b/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp @@ -0,0 +1,117 @@ +#include "FreqReplicatorProtocolTX.h" + +FreqReplicatorProtocolTX::FreqReplicatorProtocolTX(QObject *parent) : DeviceProtocolBase(parent) +{ + +} + +FreqReplicatorProtocolTX::~FreqReplicatorProtocolTX() +{ + +} + +DeviceFrameBaseDto * FreqReplicatorProtocolTX::frameFactory(int frameType) +{ + DeviceFrameBaseDto * frameData = new FreqReplicatorStatusDto(); + + return frameData; +} + +bool FreqReplicatorProtocolTX::parseDeviceFrameData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType) +{ + if (frameType != 1) + return false; + + QByteArray content = rawData.mid(4, rawData.size() - 5); + QByteArray inputACByte = content.mid(1, 2); + QByteArray inputBDByte = content.mid(3, 2); + QByteArray outputACByte = content.mid(5, 8); + QByteArray outputBDByte = content.mid(13, 8); + + QString inputAC = ""; + QString inputBD = ""; + QString outputAC = ""; + QString outputBD = ""; + + if (content.at(0) == 0x01) + { + ((FreqReplicatorStatusDto *) frameData)->abOrCd = "AB"; + + inputAC = QString("%1,%2").arg(inputACByte.at(1) == 0x01 ? "1" : "0").arg(inputACByte.at(0) == 0x01 ? "1" : "0"); + inputBD = QString("%1,%2").arg(inputBDByte.at(1) == 0x01 ? "1" : "0").arg(inputBDByte.at(0) == 0x01 ? "1" : "0"); + + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputAC); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputBD); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + + for (int i = 0; i < 8; i++) + { + outputAC += outputACByte.at(i) == 0x01 ? "1," : "0,"; + outputBD += outputBDByte.at(i) == 0x01 ? "1," : "0,"; + } + + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputAC.mid(0, outputAC.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputBD.mid(0, outputBD.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + } else + { + ((FreqReplicatorStatusDto *) frameData)->abOrCd = "CD"; + + inputAC = QString("%1,%2").arg(inputACByte.at(1) == 0x01 ? "1" : "0").arg(inputACByte.at(0) == 0x01 ? "1" : "0"); + inputBD = QString("%1,%2").arg(inputBDByte.at(1) == 0x01 ? "1" : "0").arg(inputBDByte.at(0) == 0x01 ? "1" : "0"); + + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputAC); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputBD); + + for (int i = 0; i < 8; i++) + { + outputAC += outputACByte.at(i) == 0x01 ? "1," : "0,"; + outputBD += outputBDByte.at(i) == 0x01 ? "1," : "0,"; + } + + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputAC.mid(0, outputAC.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputBD.mid(0, outputBD.size() - 1)); + } + + ((FreqReplicatorStatusDto *)frameData)->frameType = FREQ_REPLICATOR_STATUS_FRAME_TYPE; + + return true; +} + +QList FreqReplicatorProtocolTX::extractFrameList(QByteArray rawData) +{ + QList resultList; + while (QByteUtil::binToHexString(rawData.mid(0, 3)) == "AA5500") + { + QByteArray ba; + + qint8 length = rawData.mid(3, 1).toHex().toInt(0, 16); + if (rawData.length() >= length + 5) + { + ba.append(rawData.mid(0, length + 5)); + + resultList.append(ba); + ba.clear(); + + rawData = rawData.mid(length + 5, rawData.length() - length - 5); + } else + { + break; + } + } + + return resultList; +} + +int FreqReplicatorProtocolTX::checkFrame(QByteArray rawData) +{ + if (rawData.size() == 26) + return 1; + return 0; +} diff --git a/DeviceHub/protocol/FreqReplicatorProtocolTX.h b/DeviceHub/protocol/FreqReplicatorProtocolTX.h new file mode 100644 index 0000000..e219801 --- /dev/null +++ b/DeviceHub/protocol/FreqReplicatorProtocolTX.h @@ -0,0 +1,28 @@ +#ifndef FREQREPLICATORPROTOCOLTX_H +#define FREQREPLICATORPROTOCOLTX_H + +#include + +#include "common/utils/QByteUtil.h" +#include "DeviceProtocolBase.h" +#include "dto/FreqReplicatorStatusDto.h" + +class FreqReplicatorProtocolTX : public DeviceProtocolBase +{ + Q_OBJECT +public: + explicit FreqReplicatorProtocolTX(QObject *parent = nullptr); + ~FreqReplicatorProtocolTX(); + + // 解析数据 + bool parseDeviceFrameData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType); + DeviceFrameBaseDto * frameFactory(int frameType); + + // + QList extractFrameList(QByteArray rawData); + + // 检测帧格式,帧头帧尾 + int checkFrame(QByteArray rawData); +}; + +#endif // FREQREPLICATORPROTOCOLTX_H diff --git a/DeviceHub/protocol/dto/FreqReplicatorStatusDto.cpp b/DeviceHub/protocol/dto/FreqReplicatorStatusDto.cpp new file mode 100644 index 0000000..9b551db --- /dev/null +++ b/DeviceHub/protocol/dto/FreqReplicatorStatusDto.cpp @@ -0,0 +1,31 @@ +#include "FreqReplicatorStatusDto.h" + +FreqReplicatorStatusDto::FreqReplicatorStatusDto(QObject *parent) : DeviceFrameBaseDto(parent) +{ + +} + +QJsonObject FreqReplicatorStatusDto::toJSON() +{ + QJsonObject jsonObj; + + QJsonObject dataObj; + dataObj.insert("ABCD", this->abOrCd); + + QJsonArray inputArray; + QJsonArray outputArray; + + for (int i = 0; i < 4; i++) + { + inputArray.append(this->inValid.at(i)); + outputArray.append(outValid.at(i)); + } + dataObj.insert("inValid", inputArray); + dataObj.insert("outValid", outputArray); + + jsonObj.insert("ts", this->milisecond); + jsonObj.insert("frameType", this->frameType); + jsonObj.insert("data", dataObj); + + return jsonObj; +} diff --git a/DeviceHub/protocol/dto/FreqReplicatorStatusDto.h b/DeviceHub/protocol/dto/FreqReplicatorStatusDto.h new file mode 100644 index 0000000..068395b --- /dev/null +++ b/DeviceHub/protocol/dto/FreqReplicatorStatusDto.h @@ -0,0 +1,21 @@ +#ifndef FREQREPLICATORSTATUSDTO_H +#define FREQREPLICATORSTATUSDTO_H + +#include + +#include "DeviceFrameBaseDto.h" + +class FreqReplicatorStatusDto : public DeviceFrameBaseDto +{ + Q_OBJECT +public: + explicit FreqReplicatorStatusDto(QObject * parent = nullptr); + + QString abOrCd; + QList inValid; + QList outValid; + + QJsonObject toJSON() override; +}; + +#endif // FREQREPLICATORSTATUSDTO_H diff --git a/DeviceHub/DeviceHub.pro b/DeviceHub/DeviceHub.pro index 6dc7b34..c0e5306 100644 --- a/DeviceHub/DeviceHub.pro +++ b/DeviceHub/DeviceHub.pro @@ -16,26 +16,35 @@ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += main.cpp \ - BCodeTerminalForm.cpp + KeyTimeSynchForm.cpp \ + TimeReplicatorForm.cpp SOURCES += DeviceHubWindow.cpp SOURCES += FrequencyTuningForm.cpp SOURCES += SignalGeneratorForm.cpp SOURCES += TimeSwitcherForm.cpp SOURCES += FreqSwitcherForm.cpp +SOURCES += BCodeTerminalForm.cpp +SOURCES += FreqReplicatorForm.cpp HEADERS += DeviceHubWindow.h \ - BCodeTerminalForm.h + KeyTimeSynchForm.h \ + TimeReplicatorForm.h HEADERS += FrequencyTuningForm.h HEADERS += SignalGeneratorForm.h HEADERS += TimeSwitcherForm.h HEADERS += FreqSwitcherForm.h +HEADERS += BCodeTerminalForm.h +HEADERS += FreqReplicatorForm.h FORMS += DeviceHubWindow.ui \ - BCodeTerminalForm.ui + KeyTimeSynchForm.ui \ + TimeReplicatorForm.ui FORMS += FrequencyTuningForm.ui FORMS += SignalGeneratorForm.ui FORMS += TimeSwitcherForm.ui FORMS += FreqSwitcherForm.ui +FORMS += BCodeTerminalForm.ui +FORMS += FreqReplicatorForm.ui DISTFILES += conf/config.ini diff --git a/DeviceHub/DeviceHubWindow.cpp b/DeviceHub/DeviceHubWindow.cpp index d2b0ac2..9060246 100644 --- a/DeviceHub/DeviceHubWindow.cpp +++ b/DeviceHub/DeviceHubWindow.cpp @@ -44,6 +44,15 @@ bCodeTermForm = new BCodeTerminalForm(this); ui->stackedWidget->addWidget(bCodeTermForm); + keyTmSynchForm = new KeyTimeSynchForm(this); + ui->stackedWidget->addWidget(keyTmSynchForm); + + timeRepForm = new TimeReplicatorForm(this); + ui->stackedWidget->addWidget(timeRepForm); + + freqRepForm = new FreqReplicatorForm(this); + ui->stackedWidget->addWidget(freqRepForm); + // kafka consumer kafkaConsumer = new QKafkaConsumer(this); kafkaConsumer->setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); diff --git a/DeviceHub/DeviceHubWindow.h b/DeviceHub/DeviceHubWindow.h index 9e2700e..3dbc8d6 100644 --- a/DeviceHub/DeviceHubWindow.h +++ b/DeviceHub/DeviceHubWindow.h @@ -12,6 +12,9 @@ #include "TimeSwitcherForm.h" #include "FreqSwitcherForm.h" #include "BCodeTerminalForm.h" +#include "KeyTimeSynchForm.h" +#include "TimeReplicatorForm.h" +#include "FreqReplicatorForm.h" QT_BEGIN_NAMESPACE namespace Ui { class DeviceHubWindow; } @@ -40,6 +43,9 @@ TimeSwitcherForm * tmSwitForm; FreqSwitcherForm * freqSwitForm; BCodeTerminalForm * bCodeTermForm; + KeyTimeSynchForm * keyTmSynchForm; + TimeReplicatorForm * timeRepForm; + FreqReplicatorForm * freqRepForm; private slots: void on_minButt_clicked(); diff --git a/DeviceHub/FreqReplicatorForm.cpp b/DeviceHub/FreqReplicatorForm.cpp new file mode 100644 index 0000000..32d6fac --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.cpp @@ -0,0 +1,42 @@ +#include "FreqReplicatorForm.h" +#include "ui_FreqReplicatorForm.h" +#include "DeviceHubWindow.h" + +FreqReplicatorForm::FreqReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::FreqReplicatorForm) +{ + ui->setupUi(this); +} + +FreqReplicatorForm::~FreqReplicatorForm() +{ + delete ui; +} + +void FreqReplicatorForm::on_freqRepButt_clicked() +{ + // 获取设备对象 + int devIndex = ((DeviceHubWindow *) this->parent()->parent())->currentDevIndex; + FreqReplicator * device = (FreqReplicator *) ((DeviceHubWindow *) this->parent()->parent())->allTypeDevList.value("10").at(devIndex); + device->mockReceivData(); +} + +void FreqReplicatorForm::drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData) +{ + // 当前显示的设备编号 + if (frameData->frameType == "1001") + { + FreqReplicatorStatusDto * statusFrameDto = (FreqReplicatorStatusDto *) frameData; + ui->frABCDStatus->setText(statusFrameDto->abOrCd); + + QJsonObject dataObj = statusFrameDto->toJSON().find("data")->toObject(); + QJsonDocument doc; + + doc.setArray(dataObj.find("inValid")->toArray()); + ui->frInStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + + doc.setArray(dataObj.find("outValid")->toArray()); + ui->frOutStatus->setText(QString::fromUtf8(doc.toJson(QJsonDocument::Compact).constData())); + } +} diff --git a/DeviceHub/FreqReplicatorForm.h b/DeviceHub/FreqReplicatorForm.h new file mode 100644 index 0000000..fb6dffc --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.h @@ -0,0 +1,30 @@ +#ifndef FREQREPLICATORFORM_H +#define FREQREPLICATORFORM_H + +#include +#include "device/FreqReplicator.h" + +namespace Ui { +class FreqReplicatorForm; +} + +class FreqReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit FreqReplicatorForm(QWidget *parent = nullptr); + ~FreqReplicatorForm(); + +public slots: + void drawDeviceFrameOnForm(DeviceFrameBaseDto * frameData); +// void displayDeviceCommandOnForm(QJsonObject command); + +private slots: + void on_freqRepButt_clicked(); + +private: + Ui::FreqReplicatorForm *ui; +}; + +#endif // FREQREPLICATORFORM_H diff --git a/DeviceHub/FreqReplicatorForm.ui b/DeviceHub/FreqReplicatorForm.ui new file mode 100644 index 0000000..54c86d4 --- /dev/null +++ b/DeviceHub/FreqReplicatorForm.ui @@ -0,0 +1,157 @@ + + + FreqReplicatorForm + + + + 0 + 0 + 1200 + 600 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock FreqReplicator + + + + + + 20 + 280 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 参数设置 + + + + + + 20 + 80 + 100 + 30 + + + + + 微软雅黑 + 12 + + + + 工作状态 + + + + + + 100 + 190 + 400 + 30 + + + + + + + 100 + 130 + 100 + 30 + + + + + + + 310 + 130 + 200 + 30 + + + + + + + 20 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + ABCD输入 + + + + + + 20 + 190 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输出监测 + + + + + + 230 + 130 + 80 + 30 + + + + + 微软雅黑 + 10 + + + + 输入状态 + + + + + + diff --git a/DeviceHub/KeyTimeSynchForm.cpp b/DeviceHub/KeyTimeSynchForm.cpp new file mode 100644 index 0000000..92d084d --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.cpp @@ -0,0 +1,14 @@ +#include "KeyTimeSynchForm.h" +#include "ui_KeyTimeSynchForm.h" + +KeyTimeSynchForm::KeyTimeSynchForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::KeyTimeSynchForm) +{ + ui->setupUi(this); +} + +KeyTimeSynchForm::~KeyTimeSynchForm() +{ + delete ui; +} diff --git a/DeviceHub/KeyTimeSynchForm.h b/DeviceHub/KeyTimeSynchForm.h new file mode 100644 index 0000000..f5c8a2a --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.h @@ -0,0 +1,22 @@ +#ifndef KEYTIMESYNCHFORM_H +#define KEYTIMESYNCHFORM_H + +#include + +namespace Ui { +class KeyTimeSynchForm; +} + +class KeyTimeSynchForm : public QWidget +{ + Q_OBJECT + +public: + explicit KeyTimeSynchForm(QWidget *parent = nullptr); + ~KeyTimeSynchForm(); + +private: + Ui::KeyTimeSynchForm *ui; +}; + +#endif // KEYTIMESYNCHFORM_H diff --git a/DeviceHub/KeyTimeSynchForm.ui b/DeviceHub/KeyTimeSynchForm.ui new file mode 100644 index 0000000..4fa9f26 --- /dev/null +++ b/DeviceHub/KeyTimeSynchForm.ui @@ -0,0 +1,32 @@ + + + KeyTimeSynchForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 90 + 60 + 151 + 16 + + + + 骨干时频同步设备 + + + + + + diff --git a/DeviceHub/TimeReplicatorForm.cpp b/DeviceHub/TimeReplicatorForm.cpp new file mode 100644 index 0000000..eb83370 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.cpp @@ -0,0 +1,19 @@ +#include "TimeReplicatorForm.h" +#include "ui_TimeReplicatorForm.h" + +TimeReplicatorForm::TimeReplicatorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TimeReplicatorForm) +{ + ui->setupUi(this); +} + +TimeReplicatorForm::~TimeReplicatorForm() +{ + delete ui; +} + +void TimeReplicatorForm::on_tmRepButt_clicked() +{ + +} diff --git a/DeviceHub/TimeReplicatorForm.h b/DeviceHub/TimeReplicatorForm.h new file mode 100644 index 0000000..e6c9dc8 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.h @@ -0,0 +1,25 @@ +#ifndef TIMEREPLICATORFORM_H +#define TIMEREPLICATORFORM_H + +#include + +namespace Ui { +class TimeReplicatorForm; +} + +class TimeReplicatorForm : public QWidget +{ + Q_OBJECT + +public: + explicit TimeReplicatorForm(QWidget *parent = nullptr); + ~TimeReplicatorForm(); + +private slots: + void on_tmRepButt_clicked(); + +private: + Ui::TimeReplicatorForm *ui; +}; + +#endif // TIMEREPLICATORFORM_H diff --git a/DeviceHub/TimeReplicatorForm.ui b/DeviceHub/TimeReplicatorForm.ui new file mode 100644 index 0000000..bf39894 --- /dev/null +++ b/DeviceHub/TimeReplicatorForm.ui @@ -0,0 +1,34 @@ + + + + + TimeReplicatorForm + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 50 + 20 + 180 + 40 + + + + Mock TimeReplicator + + + + + + diff --git a/DeviceHub/device/DeviceBase.cpp b/DeviceHub/device/DeviceBase.cpp index f1c6c59..289beb5 100644 --- a/DeviceHub/device/DeviceBase.cpp +++ b/DeviceHub/device/DeviceBase.cpp @@ -4,6 +4,7 @@ #include "TimeSwitcher.h" #include "FreqSwitcher.h" #include "BCodeTerminal.h" +#include "FreqReplicator.h" #include @@ -55,6 +56,9 @@ } else if (deviceType == "07") { base = new BCodeTerminal(parent); + } else if (deviceType == "10") + { + base = new FreqReplicator(parent); } return base; diff --git a/DeviceHub/device/FreqReplicator.cpp b/DeviceHub/device/FreqReplicator.cpp index b4046fe..8767f90 100644 --- a/DeviceHub/device/FreqReplicator.cpp +++ b/DeviceHub/device/FreqReplicator.cpp @@ -1,18 +1,22 @@ #include "FreqReplicator.h" - +#include "DeviceHubWindow.h" #include #include FreqReplicator::FreqReplicator(QObject *parent) : DeviceBase(parent) { + this->devType = "10"; connect(&this->serialUtil, &QSerialPortUtil::dataRecieved, this, &FreqReplicator::dataReceivedHandler); - kafkaUtil.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); - kafkaUtil.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); - kafkaUtil.createProducer(); + connect(this, &FreqReplicator::sendDataToDraw, + ((DeviceHubWindow *)this->parent())->freqRepForm, &FreqReplicatorForm::drawDeviceFrameOnForm); - this->protocol = DeviceStatusProtocolBase::deviceStatusProtocolFactory(typeid (this).name()); + kafkaProducer.setBrokers(SettingConfig::getInstance().KAFKA_BROKERS); + kafkaProducer.setTopic(SettingConfig::getInstance().KAFKA_DATA_TOPIC); + kafkaProducer.createProducer(); + + this->protocol = DeviceProtocolBase::deviceProtocolFactory(devType); } FreqReplicator::~FreqReplicator() @@ -21,6 +25,17 @@ this, &FreqReplicator::dataReceivedHandler); } +void FreqReplicator::mockReceivData() +{ + QByteArray buffer; + + // freq replicator + buffer = QByteUtil::hexStringToBytes("AA550015010001000101010101010101010101010101010101EB"); + buffer.append(QByteUtil::hexStringToBytes("AA550015020001000101010101010101010101010101010101E8")); + + this->dataReceivedHandler(buffer); +} + void FreqReplicator::dataReceivedHandler(QByteArray data) { this->dataBuff.append(data); @@ -50,6 +65,8 @@ frameDto->milisecond = now.toMSecsSinceEpoch(); frameDto->rawFrame = frameByte; + frameDto->devCode = devCode; + this->afterFramePhase(frameDto); } @@ -67,12 +84,28 @@ std::cout << "frame type: " << typeid(* frameDto).name() << std::endl; std::cout << QByteUtil::binToHexString(frameDto->rawFrame).toStdString() << std::endl; + // 0. 输出到日志文件中 + QString date = frameDto->timestamp.mid(0, 10); + + // 1. 原始字节数组数据 + QString filename = "raw_" + devCode + ".log"; + QString content = frameDto->timestamp + " [recv] " + QByteUtil::binToHexString(frameDto->rawFrame); + QLogUtil::writeRawDataLogByDate(date, filename, content); + + // 2. 解析后的json数据 + QString frameFilename = "frame_" + devCode + ".log"; + QString frameContent = frameDto->timestamp + " [recv] " + QJsonDocument(frameDto->toJSON()).toJson(QJsonDocument::Compact); + QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); + // 3. 输出到中间件,执行后续处理过程 if (SettingConfig::getInstance().NEED_KAFKA == 1) { QJsonObject jsonObj = frameDto->toJSON(); jsonObj.insert("clientId", SettingConfig::getInstance().CLIENT_ID); jsonObj.insert("deviceId", deviceId); - kafkaUtil.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); + kafkaProducer.produceMessage(QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); } + + // 4. 在界面上简单显示相差数据结果 + emit this->sendDataToDraw(frameDto); } diff --git a/DeviceHub/device/FreqReplicator.h b/DeviceHub/device/FreqReplicator.h index 221924f..18bc01f 100644 --- a/DeviceHub/device/FreqReplicator.h +++ b/DeviceHub/device/FreqReplicator.h @@ -4,6 +4,7 @@ #include #include "device/DeviceBase.h" +#include "protocol/dto/FreqReplicatorStatusDto.h" class FreqReplicator : public DeviceBase { @@ -12,13 +13,18 @@ explicit FreqReplicator(QObject *parent = nullptr); ~FreqReplicator(); + void mockReceivData(); + void afterFramePhase(DeviceFrameBaseDto * frameDto); +// void sendDataToSerial(QByteArray data); signals: void sendDataToDraw(DeviceFrameBaseDto * frameData); +// void sendCommandToDisplay(QJsonObject command); public slots: void dataReceivedHandler(QByteArray data); +// void commandReceivedHandler(QJsonObject command); }; #endif // FREQREPLICATOR_H diff --git a/DeviceHub/device/device.pri b/DeviceHub/device/device.pri index 5c6c099..645dbcb 100644 --- a/DeviceHub/device/device.pri +++ b/DeviceHub/device/device.pri @@ -5,7 +5,7 @@ HEADERS += $$PWD/TimeSwitcher.h HEADERS += $$PWD/FreqSwitcher.h #HEADERS += $$PWD/TimeReplicator.h -#HEADERS += $$PWD/FreqReplicator.h +HEADERS += $$PWD/FreqReplicator.h HEADERS += $$PWD/BCodeTerminal.h SOURCES += $$PWD/DeviceBase.cpp @@ -14,5 +14,5 @@ SOURCES += $$PWD/TimeSwitcher.cpp SOURCES += $$PWD/FreqSwitcher.cpp #SOURCES += $$PWD/TimeReplicator.cpp -#SOURCES += $$PWD/FreqReplicator.cpp +SOURCES += $$PWD/FreqReplicator.cpp SOURCES += $$PWD/BCodeTerminal.cpp diff --git a/DeviceHub/protocol/DeviceProtocolBase.cpp b/DeviceHub/protocol/DeviceProtocolBase.cpp index 9c46989..e7b26ca 100644 --- a/DeviceHub/protocol/DeviceProtocolBase.cpp +++ b/DeviceHub/protocol/DeviceProtocolBase.cpp @@ -4,7 +4,7 @@ #include "TimeSwitcherProtocolBM.h" #include "FreqSwitcherProtocolBM.h" //#include "TimeReplicatorProtocolBM.h" -//#include "FreqReplicatorProtocolTX.h" +#include "FreqReplicatorProtocolTX.h" #include "BCodeTerminalProtocolBM.h" #include @@ -31,6 +31,9 @@ } else if (deviceType == "07") { return new BCodeTerminalProtocolBM(); + } else if (deviceType == "10") + { + return new FreqReplicatorProtocolTX(); } // if (deviceType.contains("SignalGenerator") == true) diff --git a/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp b/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp new file mode 100644 index 0000000..f6fd3e9 --- /dev/null +++ b/DeviceHub/protocol/FreqReplicatorProtocolTX.cpp @@ -0,0 +1,117 @@ +#include "FreqReplicatorProtocolTX.h" + +FreqReplicatorProtocolTX::FreqReplicatorProtocolTX(QObject *parent) : DeviceProtocolBase(parent) +{ + +} + +FreqReplicatorProtocolTX::~FreqReplicatorProtocolTX() +{ + +} + +DeviceFrameBaseDto * FreqReplicatorProtocolTX::frameFactory(int frameType) +{ + DeviceFrameBaseDto * frameData = new FreqReplicatorStatusDto(); + + return frameData; +} + +bool FreqReplicatorProtocolTX::parseDeviceFrameData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType) +{ + if (frameType != 1) + return false; + + QByteArray content = rawData.mid(4, rawData.size() - 5); + QByteArray inputACByte = content.mid(1, 2); + QByteArray inputBDByte = content.mid(3, 2); + QByteArray outputACByte = content.mid(5, 8); + QByteArray outputBDByte = content.mid(13, 8); + + QString inputAC = ""; + QString inputBD = ""; + QString outputAC = ""; + QString outputBD = ""; + + if (content.at(0) == 0x01) + { + ((FreqReplicatorStatusDto *) frameData)->abOrCd = "AB"; + + inputAC = QString("%1,%2").arg(inputACByte.at(1) == 0x01 ? "1" : "0").arg(inputACByte.at(0) == 0x01 ? "1" : "0"); + inputBD = QString("%1,%2").arg(inputBDByte.at(1) == 0x01 ? "1" : "0").arg(inputBDByte.at(0) == 0x01 ? "1" : "0"); + + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputAC); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputBD); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + + for (int i = 0; i < 8; i++) + { + outputAC += outputACByte.at(i) == 0x01 ? "1," : "0,"; + outputBD += outputBDByte.at(i) == 0x01 ? "1," : "0,"; + } + + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputAC.mid(0, outputAC.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputBD.mid(0, outputBD.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + } else + { + ((FreqReplicatorStatusDto *) frameData)->abOrCd = "CD"; + + inputAC = QString("%1,%2").arg(inputACByte.at(1) == 0x01 ? "1" : "0").arg(inputACByte.at(0) == 0x01 ? "1" : "0"); + inputBD = QString("%1,%2").arg(inputBDByte.at(1) == 0x01 ? "1" : "0").arg(inputBDByte.at(0) == 0x01 ? "1" : "0"); + + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputAC); + ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputBD); + + for (int i = 0; i < 8; i++) + { + outputAC += outputACByte.at(i) == 0x01 ? "1," : "0,"; + outputBD += outputBDByte.at(i) == 0x01 ? "1," : "0,"; + } + + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputAC.mid(0, outputAC.size() - 1)); + ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputBD.mid(0, outputBD.size() - 1)); + } + + ((FreqReplicatorStatusDto *)frameData)->frameType = FREQ_REPLICATOR_STATUS_FRAME_TYPE; + + return true; +} + +QList FreqReplicatorProtocolTX::extractFrameList(QByteArray rawData) +{ + QList resultList; + while (QByteUtil::binToHexString(rawData.mid(0, 3)) == "AA5500") + { + QByteArray ba; + + qint8 length = rawData.mid(3, 1).toHex().toInt(0, 16); + if (rawData.length() >= length + 5) + { + ba.append(rawData.mid(0, length + 5)); + + resultList.append(ba); + ba.clear(); + + rawData = rawData.mid(length + 5, rawData.length() - length - 5); + } else + { + break; + } + } + + return resultList; +} + +int FreqReplicatorProtocolTX::checkFrame(QByteArray rawData) +{ + if (rawData.size() == 26) + return 1; + return 0; +} diff --git a/DeviceHub/protocol/FreqReplicatorProtocolTX.h b/DeviceHub/protocol/FreqReplicatorProtocolTX.h new file mode 100644 index 0000000..e219801 --- /dev/null +++ b/DeviceHub/protocol/FreqReplicatorProtocolTX.h @@ -0,0 +1,28 @@ +#ifndef FREQREPLICATORPROTOCOLTX_H +#define FREQREPLICATORPROTOCOLTX_H + +#include + +#include "common/utils/QByteUtil.h" +#include "DeviceProtocolBase.h" +#include "dto/FreqReplicatorStatusDto.h" + +class FreqReplicatorProtocolTX : public DeviceProtocolBase +{ + Q_OBJECT +public: + explicit FreqReplicatorProtocolTX(QObject *parent = nullptr); + ~FreqReplicatorProtocolTX(); + + // 解析数据 + bool parseDeviceFrameData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType); + DeviceFrameBaseDto * frameFactory(int frameType); + + // + QList extractFrameList(QByteArray rawData); + + // 检测帧格式,帧头帧尾 + int checkFrame(QByteArray rawData); +}; + +#endif // FREQREPLICATORPROTOCOLTX_H diff --git a/DeviceHub/protocol/dto/FreqReplicatorStatusDto.cpp b/DeviceHub/protocol/dto/FreqReplicatorStatusDto.cpp new file mode 100644 index 0000000..9b551db --- /dev/null +++ b/DeviceHub/protocol/dto/FreqReplicatorStatusDto.cpp @@ -0,0 +1,31 @@ +#include "FreqReplicatorStatusDto.h" + +FreqReplicatorStatusDto::FreqReplicatorStatusDto(QObject *parent) : DeviceFrameBaseDto(parent) +{ + +} + +QJsonObject FreqReplicatorStatusDto::toJSON() +{ + QJsonObject jsonObj; + + QJsonObject dataObj; + dataObj.insert("ABCD", this->abOrCd); + + QJsonArray inputArray; + QJsonArray outputArray; + + for (int i = 0; i < 4; i++) + { + inputArray.append(this->inValid.at(i)); + outputArray.append(outValid.at(i)); + } + dataObj.insert("inValid", inputArray); + dataObj.insert("outValid", outputArray); + + jsonObj.insert("ts", this->milisecond); + jsonObj.insert("frameType", this->frameType); + jsonObj.insert("data", dataObj); + + return jsonObj; +} diff --git a/DeviceHub/protocol/dto/FreqReplicatorStatusDto.h b/DeviceHub/protocol/dto/FreqReplicatorStatusDto.h new file mode 100644 index 0000000..068395b --- /dev/null +++ b/DeviceHub/protocol/dto/FreqReplicatorStatusDto.h @@ -0,0 +1,21 @@ +#ifndef FREQREPLICATORSTATUSDTO_H +#define FREQREPLICATORSTATUSDTO_H + +#include + +#include "DeviceFrameBaseDto.h" + +class FreqReplicatorStatusDto : public DeviceFrameBaseDto +{ + Q_OBJECT +public: + explicit FreqReplicatorStatusDto(QObject * parent = nullptr); + + QString abOrCd; + QList inValid; + QList outValid; + + QJsonObject toJSON() override; +}; + +#endif // FREQREPLICATORSTATUSDTO_H diff --git a/DeviceHub/protocol/protocol.pri b/DeviceHub/protocol/protocol.pri index 245a746..1318181 100644 --- a/DeviceHub/protocol/protocol.pri +++ b/DeviceHub/protocol/protocol.pri @@ -11,6 +11,8 @@ HEADERS += $$PWD/dto/FreqSwitcherInterfaceDto.h HEADERS += $$PWD/dto/FreqSwitcherStatusDto.h HEADERS += $$PWD/dto/BCodeTerminalStatusDto.h +#HEADERS += $$PWD/dto/TimeReplicatorStatusDto.h +HEADERS += $$PWD/dto/FreqReplicatorStatusDto.h HEADERS += $$PWD/DeviceProtocolBase.h HEADERS += $$PWD/FrequencyTuningProtocolBM.h @@ -18,14 +20,8 @@ HEADERS += $$PWD/TimeSwitcherProtocolBM.h HEADERS += $$PWD/FreqSwitcherProtocolBM.h HEADERS += $$PWD/BCodeTerminalProtocolBM.h - - -#HEADERS += $$PWD/dto/TimeReplicatorStatusDto.h -#HEADERS += $$PWD/dto/FreqReplicatorStatusDto.h - - #HEADERS += $$PWD/TimeReplicatorProtocolBM.h -#HEADERS += $$PWD/FreqReplicatorProtocolTX.h +HEADERS += $$PWD/FreqReplicatorProtocolTX.h SOURCES += $$PWD/dto/SignalGeneratorStatusDto.cpp @@ -42,10 +38,10 @@ SOURCES += $$PWD/DeviceProtocolBase.cpp SOURCES += $$PWD/FrequencyTuningProtocolBM.cpp SOURCES += $$PWD/SignalGeneratorProtocolBM.cpp -#SOURCES += $$PWD/dto/FreqReplicatorStatusDto.cpp +SOURCES += $$PWD/dto/FreqReplicatorStatusDto.cpp SOURCES += $$PWD/dto/BCodeTerminalStatusDto.cpp SOURCES += $$PWD/TimeSwitcherProtocolBM.cpp SOURCES += $$PWD/FreqSwitcherProtocolBM.cpp #SOURCES += $$PWD/TimeReplicatorProtocolBM.cpp -#SOURCES += $$PWD/FreqReplicatorProtocolTX.cpp +SOURCES += $$PWD/FreqReplicatorProtocolTX.cpp SOURCES += $$PWD/BCodeTerminalProtocolBM.cpp