#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include #include "RecordQuery.h" #include "LoggerWidget.h" #include "ConfigParam.h" #include "msg.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class QPolarChart; class QChart; class QBarCategoryAxis; class QValueAxis; class QTableWidgetItem; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); void test1(); bool sendUdpMessage(const QByteArray &udpMessage); private slots: void on_btnCallAnswer_clicked(); void on_btnCallReject_clicked(); void on_btnSendMessageByUhfOrS_clicked(); void on_btnSendMessageByBeiDou_clicked(); void on_btnRecordQuery_clicked(); void readPendingDatagrams(); void on_tblMessageList_currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous); void handleHovered(bool status, int index, QBarSet *barset); void onTimerTimeout1s(); void onTimerLinkStatus(); void handleUdpRequest(const QByteArray &message); void on_btnConfigParam_clicked(); void on_rdbChannelS_clicked(); void on_rdbChannelUHF_clicked(); void on_rdbChannelAuto_clicked(); void on_sDataSwitch_checkStateChanged(const Qt::CheckState &arg1); void on_btnSoftReset_clicked(); protected: void keyPressEvent(QKeyEvent* event) override; private: void createBeiDouSignalStrengthChart(); void createAzimuthMapChart(); void setSignalStrengthValues(const QStringList& categories,const QList &yValues); void createBeiDouRDSSSignalStrengthChart(); void setRDSSSignalStrengthValues(uint8_t type, const QStringList &categories, const QList &yValues); void setAzimuthValues(const QList &points); //------------------------------------------------- // 消息列表操作 //------------------------------------------------- void UpdateMessageList(); //------------------------------------------------- // 与底层消息交互 //------------------------------------------------- //bool sendUdpMessage(const QByteArray &udpMessage); bool sendShortMessage(const QString &number,const QString& message); void processCommand(QByteArray& cmd); void processTianTongVoiceCmd(const QByteArray& cmd); void processUhfVoiceCmd(const QByteArray& cmd); void processTianTongShortMessageCmd(const QByteArray& cmd); void processUhfShortMessageCmd(const QByteArray& cmd); void processBeiDouShortMessageCmd(const QByteArray& cmd); void processStatusReportCmd(const QByteArray& cmd); void processSearchSatelliteStatusReport(const QByteArray& cmd); void processZhuanTaiStatusReportCmd(const QByteArray& cmd); void processDebugCmd(const QByteArray& cmd); void processConfigCmd(const QByteArray& cmd); // 处理模块状态 void processUhfModuleStatus(uint8_t status); void processTianTongModuleStatus(uint8_t status); void processBeiDouModuleStatus(uint8_t status); // 处理SIM卡状态 void processUhfSimCardStatus(uint8_t status); void processTianTongSimCardStatus(uint8_t status); void processBeiDouSimCardStatus(uint8_t status); // 处理M卡状态 void processUhfMCardStatus(uint8_t status); void processTianTongMCardStatus(uint8_t status); // 处理网络访问状态 void processUhfNetworkAccessStatus(uint8_t status); void processTianTongNetworkAccessStatus(uint8_t status); void processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call_status,const std::string& tiantong_number,const std::string& uhf_number); void StartupTalking(); void ShutdownTalking(); void test(); void queryDeviceInfo(); std::pair parseReceivedShortMessage(const QByteArray& cmd,Channel chan); std::pair selectChannel(ChannelType comm_type); bool checkNumber(const QString& number); bool checkMessage(const QString& message); private: Ui::MainWindow *ui; // 呼叫状态 CallStatus m_tiantongCallStatus{CallStatus::kIdle}; CallStatus m_uhfCallStatus{CallStatus::kIdle}; // 信号强度 uint8_t m_uhfSignalStrength{0}; uint8_t m_tiantongSignalStrength{0}; // 模块状态 ModuleStatus m_uhfModuleStatus{ModuleStatus::kFault}; ModuleStatus m_tiantongModuleStatus{ModuleStatus::kFault}; ModuleStatus m_beidouModuleStatus{ModuleStatus::kFault}; bool m_uhfModuleStatusGrayIcon = true; bool m_tiantongModuleStatusGrayIcon = true; bool m_beidouModuleStatusGrayIcon = true; // SIM卡状态 SimCardStatus m_uhfSimCardStatus{SimCardStatus::kNotExist}; SimCardStatus m_tiantongSimCardStatus{SimCardStatus::kNotExist}; SimCardStatus m_beidouSimCardStatus{SimCardStatus::kNotExist}; bool m_uhfSimCardStatusGrayIcon = true; bool m_tiantongSimCardStatusGrayIcon = true; bool m_beidouSimCardStatusGrayIcon = true; // M卡状态 MCardStatus m_uhfMCardStatus{MCardStatus::kNotExist}; MCardStatus m_tiantongMCardStatus{MCardStatus::kNotExist}; bool m_uhfMCardStatusGrayIcon = true; bool m_tiantongMCardStatusGrayIcon = true; // 网络访问状态 NetworkAccessStatus m_uhfNetworkAccessStatus{NetworkAccessStatus::kNotConnected}; NetworkAccessStatus m_tiantongNetworkAccessStatus{NetworkAccessStatus::kNotConnected}; NetworkAccessStatus m_beidouNetworkAccessStatus{NetworkAccessStatus::kNotConnected}; bool m_uhfNetworkAccessStatusGrayIcon = true; bool m_tiantongNetworkAccessStatusGrayIcon = true; bool m_beidouNetworkAccessStatusGrayIcon = true; std::vector m_msgList; int m_unReadMsgCount = 0; int m_callDuration = 0; std::string m_currentTalkingNumber; QDateTime m_currentTalkingBeginTime; Channel m_currentTalkingChan; CommDirection m_currentTalkingDirection; bool m_callStatusLabelBlack = true; QString m_udpIp{"127.0.0.1"}; uint16_t m_localPort{8000}; uint16_t m_peerPort{8080}; QDateTime m_lastUdpDataTime; // 记录最后收到UDP数据的时间 bool m_udpConnected = false; // UDP连接状态标志 bool m_versionQuery = false; // 版本号是否已查询 bool m_channelQuery = false; // 信道类型是否已查询 QTimer* m_timer; QTimer* m_status_timer; std::shared_ptr m_talkingTimer; std::shared_ptr m_logger; std::shared_ptr m_udpSocket; std::shared_ptr m_udpServerSocket; std::shared_ptr m_recordQueryWidget; std::shared_ptr m_loggerWidget; std::shared_ptr m_configParamWidget; QChart* m_signalStrengthChart; QPolarChart* m_azimuthChart; QBarCategoryAxis* m_signalStrengthChartXAxis; QValueAxis* m_signalStrengthChartYAxis; QStackedBarSeries *m_stackedSeries; QChart* m_RDS1signalStrengthChart; QBarCategoryAxis* m_RDS1signalStrengthChartXAxis; QValueAxis* m_RDS1signalStrengthChartYAxis; QChart* m_RDS2signalStrengthChart; QBarCategoryAxis* m_RDS2signalStrengthChartXAxis; QValueAxis* m_RDS2signalStrengthChartYAxis; }; #endif // MAINWINDOW_H