卫星终端控制软件_V1.0.3
1、增加北斗RDSS卫星状态显示; 2、修改模组状态/信号强度/注M状态/入网状态图标显示 3、增加转台状态显示 4、增加参数配置功能 5、解决通话时间显示上一次市场的问题 6、解决来电号码为00字符的问题
@@ -30,6 +30,8 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
|
||||
LoggerWidget.h LoggerWidget.cpp LoggerWidget.ui
|
||||
msg.h
|
||||
msg.cpp
|
||||
|
||||
ConfigParam.h ConfigParam.cpp ConfigParam.ui
|
||||
)
|
||||
# Define target properties for Android with Qt 6 as:
|
||||
# set_property(TARGET Satellite APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
|
||||
|
||||
142
ConfigParam.cpp
Normal file
@@ -0,0 +1,142 @@
|
||||
#include "ConfigParam.h"
|
||||
#include "ui_ConfigParam.h"
|
||||
#include "msg.h"
|
||||
#include <QMessageBox>
|
||||
|
||||
ConfigParam::ConfigParam(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, ui(new Ui::ConfigParam)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
}
|
||||
|
||||
ConfigParam::~ConfigParam()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
bool ConfigParam::checkNumber(char type, const QString& number){
|
||||
if (number.isEmpty()) {
|
||||
QMessageBox::information(this, "错误", QString("请输入%1电话号码").arg(QChar(type)));
|
||||
return false;
|
||||
}
|
||||
// 检查号码是否只包含数字 0-9
|
||||
QRegularExpression digitOnly("^[0-9]*$"); // 正则表达式:只允许数字
|
||||
if (!digitOnly.match(number).hasMatch()) {
|
||||
QMessageBox::information(this, "错误", QString("%1电话号码只能包含数字0-9").arg(QChar(type)));
|
||||
return false;
|
||||
}
|
||||
//检查号码长度
|
||||
if (number.size() > 20){
|
||||
QMessageBox::information(this, "错误", QString("%1电话号码长度不能超过20").arg(QChar(type)));
|
||||
return false;
|
||||
}
|
||||
// TODO: 检查电话号码格式是否满足要求
|
||||
return true;
|
||||
}
|
||||
|
||||
void ConfigParam::on_btnGetDefaultChannelAndNumber_clicked()
|
||||
{
|
||||
emit sendUdpRequest(pack_config_cmd_DefaultChannelAndNumberGet());
|
||||
}
|
||||
|
||||
|
||||
void ConfigParam::on_btnSetDefaultChannelAndNumber_clicked()
|
||||
{
|
||||
uint8_t channelType = ui->defaultChannelType->currentIndex();
|
||||
if(channelType == 0)
|
||||
{
|
||||
QMessageBox::information(this, "错误", "请选择默认话音通道");
|
||||
return;
|
||||
}
|
||||
// 检查电话号码是否为空
|
||||
QString u_number = ui->uDefaultNum->text();
|
||||
if(!checkNumber('U', u_number)){
|
||||
return;
|
||||
}
|
||||
|
||||
QString s_number = ui->sDefaultNum->text();
|
||||
if(!checkNumber('S', s_number)){
|
||||
return;
|
||||
}
|
||||
|
||||
emit sendUdpRequest(pack_config_cmd_DefaultChannelAndNumberSet((channelType - 1), u_number.toStdString(), s_number.toStdString()));
|
||||
}
|
||||
|
||||
|
||||
void ConfigParam::on_btnGetUDataChannelKeepTime_clicked()
|
||||
{
|
||||
emit sendUdpRequest(pack_config_cmd_UDataChannelKeepTimeGet());
|
||||
}
|
||||
|
||||
|
||||
void ConfigParam::on_btnSetUDataChannelKeepTime_clicked()
|
||||
{
|
||||
bool result;
|
||||
QString keeptime = ui->uDataChannelKeepTime->text();
|
||||
if (keeptime.isEmpty()) {
|
||||
QMessageBox::information(this, "错误", "U数据通道保持时间不能为空");
|
||||
return;
|
||||
}
|
||||
|
||||
int keeptimeValue = keeptime.toInt(&result);
|
||||
|
||||
if(!result || (keeptimeValue < 0) || (keeptimeValue > 65535))
|
||||
{
|
||||
QMessageBox::information(this, "错误", "U数据通道保持时间参数错误,取值范围为0~65535");
|
||||
return;
|
||||
}
|
||||
|
||||
emit sendUdpRequest(pack_config_cmd_UDataChannelKeepTimeSet(keeptimeValue));
|
||||
}
|
||||
|
||||
void ConfigParam::processConfigCmd(const QByteArray& cmd){
|
||||
switch(uint8_t(cmd[COMMAND_TYPE_INDEX])){
|
||||
case uint8_t(CommandType::kConfigCmdDefaultChannelAndNumber):
|
||||
if(cmd[SUB_COMMAND_TYPE_INDEX] == uint8_t(ConfigCommandType::kGetType))
|
||||
{
|
||||
int data_index = COMMAND_DATA_BEGIN_INDEX;
|
||||
uint8_t channelType = cmd[data_index++];//通道类型
|
||||
ui->defaultChannelType->setCurrentIndex(channelType + 1);
|
||||
// U号码,使用 QByteArray 处理
|
||||
QByteArray u_data = QByteArray::fromRawData(cmd.constData() + data_index, 20);
|
||||
u_data.replace('\0', ""); // 移除所有空字符
|
||||
// 转换为 std::string
|
||||
std::string u_number = u_data.toStdString();
|
||||
data_index += 20;
|
||||
// S号码,使用 QByteArray 处理
|
||||
QByteArray s_data = QByteArray::fromRawData(cmd.constData() + data_index, 20);
|
||||
s_data.replace('\0', ""); // 移除所有空字符
|
||||
// 转换为 std::string
|
||||
std::string s_number = s_data.toStdString();
|
||||
data_index += 20;
|
||||
ui->uDefaultNum->setText(QString::fromStdString(u_number));
|
||||
ui->sDefaultNum->setText(QString::fromStdString(s_number));
|
||||
}
|
||||
else if(cmd[SUB_COMMAND_TYPE_INDEX] == uint8_t(ConfigCommandType::kSetType))
|
||||
{
|
||||
if(cmd[COMMAND_DATA_BEGIN_INDEX] == uint8_t(VoiceAndShortMessageReponse::kSucess)){//设置成功
|
||||
QMessageBox::information(this, "提示", "默认话音通道与电话号码设置成功");
|
||||
}else if(cmd[COMMAND_DATA_BEGIN_INDEX] == uint8_t(VoiceAndShortMessageReponse::kFailure)){//设置失败
|
||||
QMessageBox::information(this, "提示", "默认话音通道与电话号码设置失败");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case uint8_t(CommandType::kConfigCmdUDataChannelKeepTime):
|
||||
if(cmd[SUB_COMMAND_TYPE_INDEX] == uint8_t(ConfigCommandType::kGetType))
|
||||
{
|
||||
uint16_t keeptime = ((uint16_t)cmd[COMMAND_DATA_BEGIN_INDEX] << 8) | cmd[COMMAND_DATA_BEGIN_INDEX + 1];
|
||||
ui->uDataChannelKeepTime->setText(QString("%1").arg(keeptime));
|
||||
}
|
||||
else if(cmd[SUB_COMMAND_TYPE_INDEX] == uint8_t(ConfigCommandType::kSetType))
|
||||
{
|
||||
if(cmd[COMMAND_DATA_BEGIN_INDEX] == uint8_t(VoiceAndShortMessageReponse::kSucess)){//设置成功
|
||||
QMessageBox::information(this, "提示", "U数据通道保持时间设置成功");
|
||||
}else if(cmd[COMMAND_DATA_BEGIN_INDEX] == uint8_t(VoiceAndShortMessageReponse::kFailure)){//设置失败
|
||||
QMessageBox::information(this, "提示", "U数据通道保持时间设置失败");
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
37
ConfigParam.h
Normal file
@@ -0,0 +1,37 @@
|
||||
#ifndef CONFIGPARAM_H
|
||||
#define CONFIGPARAM_H
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
namespace Ui {
|
||||
class ConfigParam;
|
||||
}
|
||||
|
||||
class ConfigParam : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ConfigParam(QWidget *parent = nullptr);
|
||||
~ConfigParam();
|
||||
void processConfigCmd(const QByteArray& cmd);
|
||||
|
||||
signals:
|
||||
void sendUdpRequest(const QByteArray &message);
|
||||
|
||||
private slots:
|
||||
void on_btnGetDefaultChannelAndNumber_clicked();
|
||||
|
||||
void on_btnSetDefaultChannelAndNumber_clicked();
|
||||
|
||||
void on_btnGetUDataChannelKeepTime_clicked();
|
||||
|
||||
void on_btnSetUDataChannelKeepTime_clicked();
|
||||
|
||||
private:
|
||||
Ui::ConfigParam *ui;
|
||||
|
||||
bool checkNumber(char type, const QString& number);
|
||||
};
|
||||
|
||||
#endif // CONFIGPARAM_H
|
||||
221
ConfigParam.ui
Normal file
@@ -0,0 +1,221 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>ConfigParam</class>
|
||||
<widget class="QWidget" name="ConfigParam">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>500</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>参数配置</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="3" column="4">
|
||||
<widget class="QPushButton" name="btnGetUDataChannelKeepTime">
|
||||
<property name="text">
|
||||
<string>查 询</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="5">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>84</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QLineEdit" name="uDataChannelKeepTime">
|
||||
<property name="whatsThis">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="5">
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>84</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>U数据通道保持时间:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>185</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="4">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>84</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="5">
|
||||
<widget class="QPushButton" name="btnSetDefaultChannelAndNumber">
|
||||
<property name="text">
|
||||
<string>设 置</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="4">
|
||||
<widget class="QPushButton" name="btnGetDefaultChannelAndNumber">
|
||||
<property name="text">
|
||||
<string>查 询</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="4">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>84</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="5">
|
||||
<widget class="QPushButton" name="btnSetUDataChannelKeepTime">
|
||||
<property name="text">
|
||||
<string>设 置</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="6">
|
||||
<spacer name="horizontalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QLineEdit" name="sDefaultNum">
|
||||
<property name="whatsThis">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QLineEdit" name="uDefaultNum">
|
||||
<property name="whatsThis">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QComboBox" name="defaultChannelType">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>请选择</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>S通道</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>U通道</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>自动</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>默认话音通道:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>U默认电话号码:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>S默认电话号码:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -1,7 +1,4 @@
|
||||
#include "RecordQuery.h"
|
||||
|
||||
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QMessageBox>
|
||||
#include <filesystem>
|
||||
@@ -136,8 +133,28 @@ void RecordQuery::UpdateRecordList(const std::vector<DbRecord>& records){
|
||||
item->setTextAlignment(Qt::AlignCenter);
|
||||
ui->tblRecordList->setItem(rowIndex, column_index, item);
|
||||
column_index = column_index + 1;
|
||||
// 通话时长
|
||||
item = new QTableWidgetItem(QString::asprintf("%d s",r.callDuration));
|
||||
// 通话时长,根据时长按x时x分x秒显示
|
||||
QString callDurationStr = "";
|
||||
if(r.type == int(CommType::Call))
|
||||
{
|
||||
QTime time(0, 0, 0);
|
||||
time = time.addSecs(r.callDuration);
|
||||
|
||||
if (r.callDuration >= 3600) {
|
||||
callDurationStr = QString("%1 时 %2 分 %3 秒")
|
||||
.arg(time.hour())
|
||||
.arg(time.minute())
|
||||
.arg(time.second());
|
||||
} else if (r.callDuration >= 60) {
|
||||
callDurationStr = QString("%1 分 %2 秒")
|
||||
.arg(time.minute())
|
||||
.arg(time.second());
|
||||
} else {
|
||||
callDurationStr = QString("%1 秒").arg(time.second());
|
||||
}
|
||||
}
|
||||
|
||||
item = new QTableWidgetItem(callDurationStr);
|
||||
item->setTextAlignment(Qt::AlignCenter);
|
||||
ui->tblRecordList->setItem(rowIndex, column_index, item);
|
||||
column_index = column_index + 1;
|
||||
|
||||
611
mainwindow.cpp
@@ -35,6 +35,8 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent), ui(new Ui::MainWindow) {
|
||||
ui->setupUi(this);
|
||||
|
||||
setWindowTitle("卫星终端控制软件_V1.0.3");
|
||||
|
||||
//创建logger窗口
|
||||
m_loggerWidget = std::make_shared<LoggerWidget>();//需要在RecordQuery创建前
|
||||
m_loggerWidget->hide();
|
||||
@@ -43,10 +45,17 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
//创建记录查询窗口
|
||||
m_recordQueryWidget = std::make_shared<RecordQuery>();
|
||||
m_recordQueryWidget->hide();
|
||||
//创建参数配置窗口
|
||||
m_configParamWidget = std::make_shared<ConfigParam>();
|
||||
m_configParamWidget->hide();
|
||||
connect(&*m_configParamWidget, &ConfigParam::sendUdpRequest,
|
||||
this, &MainWindow::handleUdpRequest);
|
||||
//创建并初始化图表
|
||||
createBeiDouSignalStrengthChart();
|
||||
createAzimuthMapChart();
|
||||
|
||||
createBeiDouRDSSSignalStrengthChart();
|
||||
|
||||
//
|
||||
QSplitter *splitter = new QSplitter(Qt::Horizontal);
|
||||
splitter->addWidget(ui->widgetCallAndMessage);
|
||||
@@ -54,6 +63,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
setCentralWidget(splitter);
|
||||
|
||||
ui->lblPosition->clear();
|
||||
ui->lblZhuanTaiStatus->clear();
|
||||
ui->lblHydraulicCylinderHeight->clear();
|
||||
ui->lblAntennaPowerSupply->clear();
|
||||
ui->lblPhaseLockedLoop->clear();
|
||||
@@ -65,6 +75,20 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
ui->lblCallDuration->hide();
|
||||
ui->btnCallReject->hide();
|
||||
|
||||
// 禁用控件
|
||||
ui->btnUHFSimCardStatus->setEnabled(false);
|
||||
ui->labelUHFSimCardStatus->setEnabled(false);
|
||||
|
||||
// 设置透明样式
|
||||
QString transparentStyle =
|
||||
"QToolButton:disabled, QLabel:disabled {"
|
||||
" background: transparent;"
|
||||
" border: none;"
|
||||
" color: transparent;"
|
||||
"}";
|
||||
|
||||
ui->btnUHFSimCardStatus->setStyleSheet(transparentStyle);
|
||||
ui->labelUHFSimCardStatus->setStyleSheet(transparentStyle);
|
||||
|
||||
QString exeDir = QCoreApplication::applicationDirPath();
|
||||
QSettings settings(exeDir + "/app.ini", QSettings::IniFormat);
|
||||
@@ -131,14 +155,14 @@ void MainWindow::onTimerTimeout1s(){
|
||||
m_beidouModuleStatusGrayIcon = !m_beidouModuleStatusGrayIcon;
|
||||
}
|
||||
//sim卡状态
|
||||
if(m_uhfSimCardStatus == SimCardStatus::kChecking){
|
||||
if(m_uhfSimCardStatusGrayIcon){
|
||||
ui->btnUHFSimCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
}else{
|
||||
ui->btnUHFSimCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
}
|
||||
m_uhfSimCardStatusGrayIcon = !m_uhfSimCardStatusGrayIcon;
|
||||
}
|
||||
//if(m_uhfSimCardStatus == SimCardStatus::kChecking){
|
||||
// if(m_uhfSimCardStatusGrayIcon){
|
||||
// ui->btnUHFSimCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
// }else{
|
||||
// ui->btnUHFSimCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
// }
|
||||
// m_uhfSimCardStatusGrayIcon = !m_uhfSimCardStatusGrayIcon;
|
||||
//}
|
||||
if(m_tiantongSimCardStatus == SimCardStatus::kChecking){
|
||||
if(m_tiantongSimCardStatusGrayIcon){
|
||||
ui->btnSSimCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
@@ -175,17 +199,17 @@ void MainWindow::onTimerTimeout1s(){
|
||||
// 入网状态
|
||||
if(m_uhfNetworkAccessStatus == NetworkAccessStatus::kConnecting){
|
||||
if(m_uhfNetworkAccessStatusGrayIcon){
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/net_in_no_data.png"));
|
||||
}else{
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/net_out.png"));
|
||||
}
|
||||
m_uhfNetworkAccessStatusGrayIcon = !m_uhfNetworkAccessStatusGrayIcon;
|
||||
}
|
||||
if(m_tiantongNetworkAccessStatus == NetworkAccessStatus::kConnecting){
|
||||
if(m_tiantongNetworkAccessStatusGrayIcon){
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/net_in_no_data.png"));
|
||||
}else{
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/net_out.png"));
|
||||
}
|
||||
m_tiantongNetworkAccessStatusGrayIcon = !m_tiantongNetworkAccessStatusGrayIcon;
|
||||
}
|
||||
@@ -212,6 +236,7 @@ void MainWindow::handleUdpRequest(const QByteArray &message)
|
||||
//m_loggerWidget->updateRespStatus(message);
|
||||
}
|
||||
|
||||
//ctrl+l用于打开日志窗口
|
||||
void MainWindow::keyPressEvent(QKeyEvent* event){
|
||||
if(event->key() == Qt::Key_L && event->modifiers() & Qt::ControlModifier){
|
||||
m_loggerWidget->show();
|
||||
@@ -221,11 +246,16 @@ void MainWindow::keyPressEvent(QKeyEvent* event){
|
||||
}
|
||||
|
||||
void MainWindow::StartupTalking(){
|
||||
if(m_talkingTimer->isActive()){
|
||||
if(m_talkingTimer->isActive()){
|
||||
ui->lblCallDuration->show();
|
||||
return;
|
||||
}
|
||||
m_currentTalkingBeginTime = QDateTime::currentDateTime();
|
||||
m_callDuration = 0;
|
||||
QTime t(0,0,0);
|
||||
t = t.addSecs(m_callDuration);
|
||||
ui->lblCallDuration->setText(t.toString("hh:mm:ss"));
|
||||
ui->lblCallDuration->show();
|
||||
m_talkingTimer->start(1000);
|
||||
}
|
||||
void MainWindow::ShutdownTalking(){
|
||||
@@ -268,13 +298,13 @@ void MainWindow::readPendingDatagrams(){
|
||||
void MainWindow::test() {
|
||||
// 随机生成信号能量数据
|
||||
setSignalStrengthValues(
|
||||
QStringList{"1号星", "2号星", "3号星", "4号星", "5号星", "6号星"},
|
||||
QStringList{"01", "02", "03", "04", "05", "06", "07", "08", "09"},
|
||||
QList{get_rand(10.0), get_rand(10.0), get_rand(10.0), get_rand(10.0),
|
||||
get_rand(10.0), get_rand(10.0)});
|
||||
get_rand(10.0), get_rand(10.0), get_rand(50.0), get_rand(33.0), get_rand(27.0)});
|
||||
|
||||
// 随机生成方向图数据
|
||||
QList<QPointF> values;
|
||||
for (int i = 0; i < 6; i += 1) {
|
||||
for (int i = 0; i < 9; i += 1) {
|
||||
values.append(QPointF(get_rand(360.0), get_rand(360.0)));
|
||||
}
|
||||
setAzimuthValues(values);
|
||||
@@ -321,7 +351,7 @@ void MainWindow::test() {
|
||||
void MainWindow::test1(){
|
||||
// 随机生成信号能量数据
|
||||
setSignalStrengthValues(
|
||||
QStringList{"1号星", "2号星", "3号星", "4号星", "5号星", "6号星"},
|
||||
QStringList{"01", "02", "03", "04", "05", "06"},
|
||||
QList{get_rand(20.0), get_rand(45.0), get_rand(50.0), get_rand(45.0),
|
||||
get_rand(50.0), get_rand(40.0)});
|
||||
|
||||
@@ -381,9 +411,8 @@ void MainWindow::handleHovered(bool status, int index, QBarSet* barset)
|
||||
//--------------------------------------------------------------------------------------
|
||||
//--------------------------------------------------------------------------------------
|
||||
void MainWindow::createBeiDouSignalStrengthChart() {
|
||||
|
||||
m_signalStrengthChart = new QChart;
|
||||
m_signalStrengthChart->setTitle("信号强度");
|
||||
m_signalStrengthChart->setTitle("载噪比");
|
||||
m_signalStrengthChart->legend()->setVisible(false);
|
||||
m_signalStrengthChart->legend()->setAlignment(Qt::AlignBottom);
|
||||
// m_signalStrengthChart->setAnimationOptions(QChart::SeriesAnimations);
|
||||
@@ -489,6 +518,125 @@ void MainWindow::setSignalStrengthValues(const QStringList &categories,
|
||||
// 更新卫星数量显示
|
||||
ui->lblSatelliteCount->setText(QString::asprintf("%d", categories.count()));
|
||||
}
|
||||
void MainWindow::createBeiDouRDSSSignalStrengthChart() {
|
||||
m_RDS1signalStrengthChart = new QChart;
|
||||
m_RDS1signalStrengthChart->setTitle("载噪比");
|
||||
m_RDS1signalStrengthChart->legend()->setVisible(false);
|
||||
m_RDS1signalStrengthChart->legend()->setAlignment(Qt::AlignBottom);
|
||||
// m_RDS1signalStrengthChart->setAnimationOptions(QChart::SeriesAnimations);
|
||||
|
||||
m_RDS1signalStrengthChartXAxis = new QBarCategoryAxis;
|
||||
m_RDS1signalStrengthChart->addAxis(m_RDS1signalStrengthChartXAxis, Qt::AlignBottom);
|
||||
|
||||
m_RDS1signalStrengthChartYAxis = new QValueAxis;
|
||||
m_RDS1signalStrengthChartYAxis->setRange(0, 50);
|
||||
m_RDS1signalStrengthChart->addAxis(m_RDS1signalStrengthChartYAxis, Qt::AlignLeft);
|
||||
// series->attachAxis(axisY);
|
||||
|
||||
QChartView *chartView = new QChartView(m_RDS1signalStrengthChart, this);
|
||||
chartView->setRenderHint(QPainter::Antialiasing);
|
||||
ui->vboxChannelBeidouRDS1SignalStrength->addWidget(chartView);
|
||||
|
||||
m_RDS2signalStrengthChart = new QChart;
|
||||
m_RDS2signalStrengthChart->setTitle("载噪比");
|
||||
m_RDS2signalStrengthChart->legend()->setVisible(false);
|
||||
m_RDS2signalStrengthChart->legend()->setAlignment(Qt::AlignBottom);
|
||||
// m_RDS2signalStrengthChart->setAnimationOptions(QChart::SeriesAnimations);
|
||||
|
||||
m_RDS2signalStrengthChartXAxis = new QBarCategoryAxis;
|
||||
m_RDS2signalStrengthChart->addAxis(m_RDS2signalStrengthChartXAxis, Qt::AlignBottom);
|
||||
|
||||
m_RDS2signalStrengthChartYAxis = new QValueAxis;
|
||||
m_RDS2signalStrengthChartYAxis->setRange(0, 50);
|
||||
m_RDS2signalStrengthChart->addAxis(m_RDS2signalStrengthChartYAxis, Qt::AlignLeft);
|
||||
// series->attachAxis(axisY);
|
||||
|
||||
QChartView *chartView2 = new QChartView(m_RDS2signalStrengthChart, this);
|
||||
chartView->setRenderHint(QPainter::Antialiasing);
|
||||
ui->vboxChannelBeidouRDS2SignalStrength->addWidget(chartView2);
|
||||
}
|
||||
void MainWindow::setRDSSSignalStrengthValues(uint8_t type, const QStringList &categories,
|
||||
const QList<qreal> &yValues) {
|
||||
if((type != uint8_t(RDSSType::RDSS_S1)) && (type != uint8_t(RDSSType::RDSS_S2))){
|
||||
m_logger->error("RDSSType: type illegal value, type = {}", type);
|
||||
return;
|
||||
}
|
||||
if(type == uint8_t(RDSSType::RDSS_S1))
|
||||
{
|
||||
// 清空旧数据
|
||||
m_RDS1signalStrengthChart->removeAllSeries();
|
||||
m_RDS1signalStrengthChartXAxis->clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 清空旧数据
|
||||
m_RDS2signalStrengthChart->removeAllSeries();
|
||||
m_RDS2signalStrengthChartXAxis->clear();
|
||||
}
|
||||
|
||||
// 创建数据集
|
||||
QBarSet *set0 = new QBarSet("Power");
|
||||
QBarSet *set1 = new QBarSet("Power2");
|
||||
foreach (qreal val, yValues) {
|
||||
if(val >= 36.0)
|
||||
{
|
||||
*set0 << 0;
|
||||
*set1 << val;
|
||||
}
|
||||
else
|
||||
{
|
||||
*set0 << val;
|
||||
*set1 << 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 动态设置柱形颜色
|
||||
set0->setBrush(QBrush(QColor("#C0C0C0")));
|
||||
set1->setBrush(QBrush(QColor("#0000FF")));
|
||||
|
||||
QStackedBarSeries *series2 = new QStackedBarSeries();
|
||||
|
||||
series2->append(set0);
|
||||
series2->append(set1);
|
||||
|
||||
// 添加对象追踪防止内存泄漏
|
||||
set0->setParent(series2); // 建立父子关系
|
||||
set1->setParent(series2); // 建立父子关系
|
||||
|
||||
if(type == uint8_t(RDSSType::RDSS_S1))
|
||||
{
|
||||
m_RDS1signalStrengthChart->addSeries(series2);
|
||||
|
||||
series2->attachAxis(m_RDS1signalStrengthChartYAxis);
|
||||
|
||||
// 设置X轴标签
|
||||
m_RDS1signalStrengthChartXAxis->append(categories);
|
||||
|
||||
// 优化显示效果
|
||||
series2->setLabelsVisible(false); // 隐藏数值标签
|
||||
m_RDS1signalStrengthChart->legend()->hide(); // 隐藏图例
|
||||
|
||||
// 更新卫星数量显示
|
||||
ui->rds1SatelliteCount->setText(QString::asprintf("%d", categories.count()));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_RDS2signalStrengthChart->addSeries(series2);
|
||||
|
||||
series2->attachAxis(m_RDS2signalStrengthChartYAxis);
|
||||
|
||||
// 设置X轴标签
|
||||
m_RDS2signalStrengthChartXAxis->append(categories);
|
||||
|
||||
// 优化显示效果
|
||||
series2->setLabelsVisible(false); // 隐藏数值标签
|
||||
m_RDS2signalStrengthChart->legend()->hide(); // 隐藏图例
|
||||
|
||||
// 更新卫星数量显示
|
||||
ui->rds2SatelliteCount->setText(QString::asprintf("%d", categories.count()));
|
||||
}
|
||||
|
||||
}
|
||||
void MainWindow::createAzimuthMapChart() {
|
||||
const qreal angularMin = 0;
|
||||
const qreal angularMax = 360;
|
||||
@@ -616,6 +764,12 @@ bool MainWindow::checkNumber(const QString& number){
|
||||
QMessageBox::information(this, "错误", "请输入电话号码");
|
||||
return false;
|
||||
}
|
||||
// 检查号码是否只包含数字 0-9
|
||||
QRegularExpression digitOnly("^[0-9]*$"); // 正则表达式:只允许数字
|
||||
if (!digitOnly.match(number).hasMatch()) {
|
||||
QMessageBox::information(this, "错误", "电话号码只能包含数字0-9");
|
||||
return false;
|
||||
}
|
||||
//检查号码长度
|
||||
if (number.size() > 20){
|
||||
QMessageBox::information(this, "错误", "电话号码长度不能超过20");
|
||||
@@ -637,27 +791,59 @@ bool MainWindow::checkMessage(const QString& message){
|
||||
}
|
||||
return true;
|
||||
}
|
||||
std::pair<bool,Channel> MainWindow::selectChannel(CommType comm_type){
|
||||
bool isUhfChannelOk = (m_uhfModuleStatus == ModuleStatus::kChecking || m_uhfModuleStatus == ModuleStatus::kNormal)
|
||||
&& (m_uhfSimCardStatus == SimCardStatus::kExist || m_uhfSimCardStatus == SimCardStatus::kChecking)
|
||||
std::pair<bool,Channel> MainWindow::selectChannel(ChannelType comm_type){
|
||||
bool isUhfChannelOk = (m_uhfModuleStatus == ModuleStatus::kNormal)
|
||||
&& (m_uhfSimCardStatus == SimCardStatus::kExist)
|
||||
&& (m_uhfNetworkAccessStatus == NetworkAccessStatus::kConnectedDataIsActivated || m_uhfNetworkAccessStatus == NetworkAccessStatus::kConnectedDataIsNotActivated);
|
||||
bool isSChannelOk = (m_tiantongModuleStatus == ModuleStatus::kChecking || m_tiantongModuleStatus == ModuleStatus::kNormal)
|
||||
&& (m_tiantongSimCardStatus == SimCardStatus::kExist || m_tiantongSimCardStatus == SimCardStatus::kChecking)
|
||||
bool isSChannelOk = (m_tiantongModuleStatus == ModuleStatus::kNormal)
|
||||
&& (m_tiantongSimCardStatus == SimCardStatus::kExist)
|
||||
&& (m_tiantongNetworkAccessStatus == NetworkAccessStatus::kConnectedDataIsActivated || m_tiantongNetworkAccessStatus == NetworkAccessStatus::kConnectedDataIsNotActivated);
|
||||
if(!isUhfChannelOk && !isSChannelOk){
|
||||
QMessageBox::information(this, "提示", "UHF和S通道都不正常, 无法进行通信");
|
||||
return std::make_pair(false,Channel::Uhf);
|
||||
}
|
||||
if(isUhfChannelOk && !isSChannelOk){
|
||||
return std::make_pair(true,Channel::Uhf);
|
||||
}else if(!isUhfChannelOk && isSChannelOk){
|
||||
return std::make_pair(true,Channel::S);;
|
||||
}else{
|
||||
if(m_uhfSignalStrength >= m_tiantongSignalStrength){
|
||||
return std::make_pair(true,Channel::Uhf);
|
||||
}else{
|
||||
return std::make_pair(true,Channel::S);
|
||||
if(comm_type == ChannelType::ChannelUHF)
|
||||
{
|
||||
if(!isUhfChannelOk)
|
||||
{
|
||||
QMessageBox::information(this, "提示", "UHF通道不正常, 无法进行通信");
|
||||
return std::make_pair(false,Channel::Uhf);
|
||||
}
|
||||
else
|
||||
{
|
||||
return std::make_pair(true,Channel::Uhf);
|
||||
}
|
||||
}
|
||||
else if(comm_type == ChannelType::ChannelS)
|
||||
{
|
||||
if(!isSChannelOk)
|
||||
{
|
||||
QMessageBox::information(this, "提示", "S通道不正常, 无法进行通信");
|
||||
return std::make_pair(false,Channel::S);
|
||||
}
|
||||
else
|
||||
{
|
||||
return std::make_pair(true,Channel::S);
|
||||
}
|
||||
}
|
||||
else if(comm_type == ChannelType::ChannelAuto)
|
||||
{
|
||||
if(!isUhfChannelOk && !isSChannelOk){
|
||||
QMessageBox::information(this, "提示", "UHF和S通道都不正常, 无法进行通信");
|
||||
return std::make_pair(false,Channel::S);
|
||||
}
|
||||
if(isUhfChannelOk && !isSChannelOk){
|
||||
return std::make_pair(true,Channel::Uhf);
|
||||
}else if(!isUhfChannelOk && isSChannelOk){
|
||||
return std::make_pair(true,Channel::S);
|
||||
}else{
|
||||
if(m_tiantongSignalStrength >= m_uhfSignalStrength){
|
||||
return std::make_pair(true,Channel::S);
|
||||
}else{
|
||||
return std::make_pair(true,Channel::Uhf);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox::information(this, "提示", "通道错误, 无法进行通信");
|
||||
return std::make_pair(false,Channel::Uhf);
|
||||
}
|
||||
}
|
||||
void MainWindow::on_btnCallAnswer_clicked() {
|
||||
@@ -667,25 +853,28 @@ void MainWindow::on_btnCallAnswer_clicked() {
|
||||
if(!checkNumber(number)){
|
||||
return;
|
||||
}
|
||||
ChannelType commtype;
|
||||
// 呼叫
|
||||
if(ui->rdbChannelUHF->isChecked()){
|
||||
sendUdpMessage(pack_uhf_dial_cmd(number.toStdString()));
|
||||
m_currentTalkingDirection = CommDirection::Send;
|
||||
commtype = ChannelType::ChannelUHF;
|
||||
}else if(ui->rdbChannelS->isChecked()){
|
||||
sendUdpMessage(pack_tiantong_dial_cmd(number.toStdString()));
|
||||
commtype = ChannelType::ChannelS;
|
||||
}else if(ui->rdbChannelAuto->isChecked()){
|
||||
std::pair<bool,Channel> r = selectChannel(CommType::Call);
|
||||
if(!r.first){
|
||||
return;
|
||||
}
|
||||
if(r.second == Channel::Uhf){
|
||||
sendUdpMessage(pack_uhf_dial_cmd(number.toStdString()));
|
||||
}else if(r.second == Channel::S){
|
||||
sendUdpMessage(pack_tiantong_dial_cmd(number.toStdString()));
|
||||
}
|
||||
commtype = ChannelType::ChannelAuto;
|
||||
}else{
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(m_uhfCallStatus == CallStatus::kCallIsComing){
|
||||
std::pair<bool,Channel> r = selectChannel(commtype);
|
||||
if(!r.first){
|
||||
return;
|
||||
}
|
||||
m_currentTalkingDirection = CommDirection::Send;
|
||||
if(r.second == Channel::Uhf){
|
||||
sendUdpMessage(pack_uhf_dial_cmd(number.toStdString()));
|
||||
}else if(r.second == Channel::S){
|
||||
sendUdpMessage(pack_tiantong_dial_cmd(number.toStdString()));
|
||||
}
|
||||
}else if(m_uhfCallStatus == CallStatus::kCallIsComing){
|
||||
sendUdpMessage(pack_uhf_answer());
|
||||
}else if(m_tiantongCallStatus == CallStatus::kCallIsComing){
|
||||
sendUdpMessage(pack_tiantong_answer());
|
||||
@@ -703,6 +892,7 @@ void MainWindow::on_btnCallReject_clicked() {
|
||||
|
||||
void MainWindow::on_btnSendMessageByUhfOrS_clicked() {
|
||||
QString number = ui->cmbMessageNumberForUhfAndS->currentText();
|
||||
ChannelType commtype;
|
||||
if(!checkNumber(number)){
|
||||
return;
|
||||
}
|
||||
@@ -712,19 +902,22 @@ void MainWindow::on_btnSendMessageByUhfOrS_clicked() {
|
||||
}
|
||||
// 发送信息
|
||||
if(ui->rdbChannelUHF->isChecked()){
|
||||
commtype = ChannelType::ChannelUHF;
|
||||
}else if(ui->rdbChannelS->isChecked()){
|
||||
commtype = ChannelType::ChannelS;
|
||||
}else if(ui->rdbChannelAuto->isChecked()){
|
||||
commtype = ChannelType::ChannelAuto;
|
||||
}else{
|
||||
return;
|
||||
}
|
||||
std::pair<bool,Channel> r = selectChannel(commtype);
|
||||
if(!r.first){
|
||||
return;
|
||||
}
|
||||
if(r.second == Channel::Uhf){
|
||||
sendUdpMessage(pack_uhf_short_message_cmd(number.toStdString(),message.toStdU16String()));
|
||||
}else if(ui->rdbChannelS->isChecked()){
|
||||
}else if(r.second == Channel::S){
|
||||
sendUdpMessage(pack_tiantong_short_message_cmd(number.toStdString(),message.toStdU16String()));
|
||||
}else if(ui->rdbChannelAuto->isChecked()){
|
||||
std::pair<bool,Channel> r = selectChannel(CommType::Call);
|
||||
if(!r.first){
|
||||
return;
|
||||
}
|
||||
if(r.second == Channel::Uhf){
|
||||
sendUdpMessage(pack_uhf_short_message_cmd(number.toStdString(),message.toStdU16String()));
|
||||
}else if(r.second == Channel::S){
|
||||
sendUdpMessage(pack_tiantong_short_message_cmd(number.toStdString(),message.toStdU16String()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -812,6 +1005,13 @@ void MainWindow::processCommand(QByteArray& cmd){
|
||||
case uint8_t(CommandType::kSearchSatelliteStatusReport):
|
||||
processSearchSatelliteStatusReport(cmd);
|
||||
break;
|
||||
case uint8_t(CommandType::kSearchZhuanTaiStatusReport):
|
||||
processZhuanTaiStatusReportCmd(cmd);
|
||||
break;
|
||||
case uint8_t(CommandType::kConfigCmdDefaultChannelAndNumber):
|
||||
case uint8_t(CommandType::kConfigCmdUDataChannelKeepTime):
|
||||
m_configParamWidget->processConfigCmd(cmd);
|
||||
break;
|
||||
case uint8_t(CommandType::kDebugCmd):
|
||||
processDebugCmd(cmd);
|
||||
break;
|
||||
@@ -1006,7 +1206,11 @@ void MainWindow::processStatusReportCmd(const QByteArray& cmd){
|
||||
uint8_t uhf_m_card_status = cmd[data_index++];//m卡状态
|
||||
uint8_t uhf_call_status = cmd[data_index++];//通话状态
|
||||
uint8_t uhf_satellite_signal_strength = cmd[data_index++];
|
||||
std::string uhf_number = std::string(cmd.data()+data_index,20);
|
||||
// 使用 QByteArray 处理
|
||||
QByteArray uhf_data = QByteArray::fromRawData(cmd.constData() + data_index, 20);
|
||||
uhf_data.replace('\0', ""); // 移除所有空字符
|
||||
// 转换为 std::string
|
||||
std::string uhf_number = uhf_data.toStdString();
|
||||
data_index += 20;
|
||||
//天通状态
|
||||
uint8_t tiantong_module_status = cmd[data_index++];//模块状态
|
||||
@@ -1015,7 +1219,11 @@ void MainWindow::processStatusReportCmd(const QByteArray& cmd){
|
||||
uint8_t tiantong_m_card_status = cmd[data_index++];//m卡状态
|
||||
uint8_t tiantong_call_status = cmd[data_index++];//通话状态
|
||||
uint8_t tiantong_satellite_signal_strength = cmd[data_index++];
|
||||
std::string tiantong_number = std::string(cmd.constData()+data_index,20);
|
||||
// 使用 QByteArray 处理
|
||||
QByteArray tiantong_data = QByteArray::fromRawData(cmd.constData() + data_index, 20);
|
||||
tiantong_data.replace('\0', ""); // 移除所有空字符
|
||||
// 转换为 std::string
|
||||
std::string tiantong_number = tiantong_data.toStdString();
|
||||
data_index += 20;
|
||||
|
||||
//北斗状态
|
||||
@@ -1071,7 +1279,7 @@ void MainWindow::processStatusReportCmd(const QByteArray& cmd){
|
||||
processUhfNetworkAccessStatus(uhf_network_access_status);
|
||||
processTianTongNetworkAccessStatus(tiantong_network_access_status);
|
||||
// 处理sim卡状态
|
||||
processUhfSimCardStatus(uhf_sim_card_status);
|
||||
//processUhfSimCardStatus(uhf_sim_card_status);
|
||||
processTianTongSimCardStatus(tiantong_sim_card_status);
|
||||
processBeiDouSimCardStatus(beidou_sim_card_status);
|
||||
// 处理m卡状态
|
||||
@@ -1079,17 +1287,54 @@ void MainWindow::processStatusReportCmd(const QByteArray& cmd){
|
||||
processTianTongMCardStatus(tiantong_m_card_status);
|
||||
//处理呼叫状态
|
||||
processCallStatus(tiantong_call_status,uhf_call_status,tiantong_number,uhf_number);
|
||||
// 处理信号强度,信号强度范围是否是0~100之间???
|
||||
m_uhfSignalStrength = uhf_satellite_signal_strength;
|
||||
m_tiantongSignalStrength = tiantong_satellite_signal_strength;
|
||||
ui->progressChannelUHFSignalStrength->setValue(m_uhfSignalStrength);
|
||||
ui->progressChannelSSignalStrength->setValue(m_tiantongSignalStrength);
|
||||
|
||||
// 处理信号强度,信号强度范围转换
|
||||
//m_uhfSignalStrength = uhf_satellite_signal_strength;
|
||||
// 计算大致区间
|
||||
if (uhf_satellite_signal_strength == 0) {
|
||||
m_uhfSignalStrength = 0;
|
||||
ui->btnUHFSignalStrength->setIcon(QIcon(":/rc/res/signal_0.png"));
|
||||
} else if (uhf_satellite_signal_strength <= 63) {
|
||||
m_uhfSignalStrength = 25;
|
||||
ui->btnUHFSignalStrength->setIcon(QIcon(":/rc/res/signal_1.png"));
|
||||
} else if (uhf_satellite_signal_strength <= 127) {
|
||||
m_uhfSignalStrength = 50;
|
||||
ui->btnUHFSignalStrength->setIcon(QIcon(":/rc/res/signal_2.png"));
|
||||
} else if (uhf_satellite_signal_strength <= 191) {
|
||||
m_uhfSignalStrength = 75;
|
||||
ui->btnUHFSignalStrength->setIcon(QIcon(":/rc/res/signal_3.png"));
|
||||
} else {
|
||||
m_uhfSignalStrength = 100;
|
||||
ui->btnUHFSignalStrength->setIcon(QIcon(":/rc/res/signal_4.png"));
|
||||
}
|
||||
ui->btnUHFSignalStrength->setToolTip(QString("%1").arg(uhf_satellite_signal_strength));
|
||||
|
||||
//m_tiantongSignalStrength = tiantong_satellite_signal_strength;
|
||||
if (tiantong_satellite_signal_strength == 0) {
|
||||
m_tiantongSignalStrength = 0;
|
||||
ui->btnSSignalStrength->setIcon(QIcon(":/rc/res/signal_0.png"));
|
||||
} else if (tiantong_satellite_signal_strength >= 1 && tiantong_satellite_signal_strength <= 3) {
|
||||
m_tiantongSignalStrength = 25;
|
||||
ui->btnSSignalStrength->setIcon(QIcon(":/rc/res/signal_1.png"));
|
||||
} else if (tiantong_satellite_signal_strength > 3 && tiantong_satellite_signal_strength <= 6) {
|
||||
m_tiantongSignalStrength = 50;
|
||||
ui->btnSSignalStrength->setIcon(QIcon(":/rc/res/signal_2.png"));
|
||||
} else if (tiantong_satellite_signal_strength > 6 && tiantong_satellite_signal_strength <= 9) {
|
||||
m_tiantongSignalStrength = 75;
|
||||
ui->btnSSignalStrength->setIcon(QIcon(":/rc/res/signal_3.png"));
|
||||
} else if (tiantong_satellite_signal_strength > 10) {
|
||||
m_tiantongSignalStrength = 100;
|
||||
ui->btnSSignalStrength->setIcon(QIcon(":/rc/res/signal_4.png"));
|
||||
}
|
||||
ui->btnSSignalStrength->setToolTip(QString("%1").arg(tiantong_satellite_signal_strength));
|
||||
|
||||
// 处理来电号码,在processCallStatus中处理
|
||||
//if(!uhf_number.empty()){
|
||||
// ui->cmbCallNumber->setCurrentText(QString::fromStdString(uhf_number));
|
||||
//}else{
|
||||
// ui->cmbCallNumber->setCurrentText(QString::fromStdString(tiantong_number));
|
||||
//}
|
||||
|
||||
// 处理位置
|
||||
if(beidou_pos_status == 0x01)
|
||||
{
|
||||
@@ -1122,46 +1367,141 @@ void MainWindow::processStatusReportCmd(const QByteArray& cmd){
|
||||
ui->lblPhaseLockedLoop->setText(s);
|
||||
}
|
||||
void MainWindow::processSearchSatelliteStatusReport(const QByteArray& cmd){
|
||||
if(cmd.size() < FRAME_MIN_LEN + 1){
|
||||
//m_logger->error("接收的搜星状态包长度错误, 长度 = {}",cmd.size());
|
||||
m_logger->error("The received search satellite status packet length is incorrect, len = {}",cmd.size());
|
||||
return;
|
||||
int data_index, i;
|
||||
uint8_t number_of_satellite, number_of_rds1satellite, number_of_rds2satellite;
|
||||
std::vector<SatelliteStatus> all_satellite_status;
|
||||
std::vector<RDSSSatelliteStatus> rdss_s1satellite_status, rdss_s2satellite_status;
|
||||
QList<QString> categories, s1categories, s2categories;
|
||||
QList<qreal> yValues, s1yValues, s2yValues;
|
||||
QList<QPointF> azimuth_pitch_values;
|
||||
|
||||
switch(uint8_t(cmd[SUB_COMMAND_TYPE_INDEX]))
|
||||
{
|
||||
case uint8_t(SearchSatelliteStatusReportSubCommandType::kRnss):
|
||||
if(cmd.size() < FRAME_MIN_LEN + 1){
|
||||
//m_logger->error("接收的搜星状态包长度错误, 长度 = {}",cmd.size());
|
||||
m_logger->error("The received search satellite status packet length is incorrect, len = {}",cmd.size());
|
||||
return;
|
||||
}
|
||||
data_index = COMMAND_DATA_BEGIN_INDEX;
|
||||
number_of_satellite = cmd[data_index++];//卫星数量
|
||||
|
||||
if(cmd.size() < (FRAME_MIN_LEN + 1 + 6* number_of_satellite)){
|
||||
//m_logger->error("接收的rnss搜星状态包长度错误, 卫星个数 = {}, 长度 = {}",number_of_satellite,cmd.size());
|
||||
m_logger->error("The received search rnss satellite status packet length is incorrect, satellite_num = {}, len = {}",number_of_satellite,cmd.size());
|
||||
}
|
||||
|
||||
for(i = 0 ; i < number_of_satellite; i++){
|
||||
SatelliteStatus status;
|
||||
status.number = cmd[data_index++];//卫星编号
|
||||
status.locate_flag = cmd[data_index++];//卫星定位标志
|
||||
status.snr = cmd[data_index++];//卫星信噪比
|
||||
status.azimuth = qFromLittleEndian<quint16>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));//卫星方位角
|
||||
data_index += 2;
|
||||
status.pitch = cmd[data_index++];//卫星俯仰角
|
||||
all_satellite_status.push_back(status);
|
||||
}
|
||||
// 处理卫星状态
|
||||
for(i = 0 ; i < all_satellite_status.size(); i++){
|
||||
//categories.push_back(QString("%1").arg(i));
|
||||
//categories.push_back(QString("%1").arg(all_satellite_status[i].number));
|
||||
//categories.push_back(QString("%1").arg(all_satellite_status[i].number, 2, 10, QChar('0')));//与下面等效
|
||||
categories.push_back(QString::asprintf("%02d", all_satellite_status[i].number));
|
||||
yValues.push_back(all_satellite_status[i].snr);
|
||||
azimuth_pitch_values.push_back(QPointF(all_satellite_status[i].azimuth,all_satellite_status[i].pitch));
|
||||
}
|
||||
// 设置信号能量
|
||||
setSignalStrengthValues(categories,yValues);
|
||||
// 设置方位俯仰角
|
||||
setAzimuthValues(azimuth_pitch_values);
|
||||
break;
|
||||
case uint8_t(SearchSatelliteStatusReportSubCommandType::kRdss):
|
||||
if(cmd.size() < FRAME_MIN_LEN + 2){
|
||||
//m_logger->error("接收的rdss搜星状态包长度错误, 长度 = {}",cmd.size());
|
||||
m_logger->error("The received search rdss satellite status packet length is incorrect, len = {}",cmd.size());
|
||||
return;
|
||||
}
|
||||
data_index = COMMAND_DATA_BEGIN_INDEX;
|
||||
number_of_rds1satellite = cmd[data_index++];//RDSS S1波束数量
|
||||
number_of_rds2satellite = cmd[data_index+3*number_of_rds1satellite];//RDSS S2波束数量
|
||||
|
||||
if(cmd.size() < (FRAME_MIN_LEN + 2 + 3 * (number_of_rds1satellite + number_of_rds2satellite))){
|
||||
//m_logger->error("接收的rdss搜星状态包长度错误, RDSS S1波束个数 = {}, RDSS S2波束个数 = {}, 长度 = {}",number_of_rds1satellite,number_of_rds1satellite,cmd.size());
|
||||
m_logger->error("The received search rdss satellite status packet length is incorrect, rds1satellite_num = {}, rds2satellite_num = {}, len = {}",number_of_rds1satellite,number_of_rds2satellite,cmd.size());
|
||||
}
|
||||
|
||||
for(i = 0 ; i < number_of_rds1satellite; i++){
|
||||
RDSSSatelliteStatus s1status;
|
||||
s1status.number = cmd[data_index++]; //波束编号
|
||||
s1status.snr1 = cmd[data_index++]; //波束载噪比1
|
||||
s1status.snr2 = cmd[data_index++]; //波束载噪比2
|
||||
rdss_s1satellite_status.push_back(s1status);
|
||||
}
|
||||
// 处理卫星状态
|
||||
for(i = 0 ; i < rdss_s1satellite_status.size(); i++){
|
||||
//s1categories.push_back(QString("%1").arg(rdss_s1satellite_status[i].number, 2, 10, QChar('0')));//与下面等效
|
||||
s1categories.push_back(QString::asprintf("%02d", rdss_s1satellite_status[i].number));
|
||||
s1yValues.push_back(rdss_s1satellite_status[i].snr1); //两个载噪比基本一致
|
||||
}
|
||||
// 设置信号能量
|
||||
setRDSSSignalStrengthValues(uint8_t(RDSSType::RDSS_S1), s1categories, s1yValues);
|
||||
|
||||
data_index++; //S2波束锁定数量
|
||||
|
||||
for(i = 0 ; i < number_of_rds2satellite; i++){
|
||||
RDSSSatelliteStatus s2status;
|
||||
s2status.number = cmd[data_index++]; //波束编号
|
||||
s2status.snr1 = cmd[data_index++]; //波束载噪比1
|
||||
s2status.snr2 = cmd[data_index++]; //波束载噪比2
|
||||
rdss_s2satellite_status.push_back(s2status);
|
||||
}
|
||||
// 处理卫星状态
|
||||
for(i = 0 ; i < rdss_s2satellite_status.size(); i++){
|
||||
//s2categories.push_back(QString("%1").arg(rdss_s2satellite_status[i].number, 2, 10, QChar('0')));//与下面等效
|
||||
s2categories.push_back(QString::asprintf("%02d", rdss_s2satellite_status[i].number));
|
||||
s2yValues.push_back(rdss_s2satellite_status[i].snr1); //两个载噪比基本一致
|
||||
}
|
||||
setRDSSSignalStrengthValues(uint8_t(RDSSType::RDSS_S2), s2categories, s2yValues);
|
||||
break;
|
||||
default:
|
||||
m_logger->error("SearchSatelliteStatusReportSubCommandType is incorrect, type = 0x{:02X}", cmd[SUB_COMMAND_TYPE_INDEX] & 0xFF);
|
||||
break;
|
||||
}
|
||||
if(uint8_t(cmd[SUB_COMMAND_TYPE_INDEX]) != 0){
|
||||
}
|
||||
void MainWindow::processZhuanTaiStatusReportCmd(const QByteArray& cmd){
|
||||
if(cmd.size() != FRAME_LEN_ZHUANTAISTATUSREPORT){
|
||||
//m_logger->error("接收的转台状态包长度错误, 长度 = {}",cmd.size());
|
||||
m_logger->error("The received zhuantai status packet length is incorrect, len = {}",cmd.size());
|
||||
return;
|
||||
}
|
||||
int data_index = COMMAND_DATA_BEGIN_INDEX;
|
||||
uint8_t number_of_satellite = cmd[data_index++];//卫星数量
|
||||
//通信状态
|
||||
uint8_t commu_state = cmd[data_index++];
|
||||
//定位状态
|
||||
uint8_t locate_state = cmd[data_index++];
|
||||
uint16_t az_angle = ((uint16_t)cmd[data_index] << 8) | cmd[data_index+1];
|
||||
data_index += 2;
|
||||
|
||||
if(cmd.size() < FRAME_MIN_LEN + 1 + 6* number_of_satellite){
|
||||
//m_logger->error("接收的搜星状态包长度错误, 卫星个数 = {}, 长度 = {}",number_of_satellite,cmd.size());
|
||||
m_logger->error("The received search satellite status packet length is incorrect, satellite_num = {}, len = {}",number_of_satellite,cmd.size());
|
||||
}
|
||||
uint16_t el_angle = ((uint16_t)cmd[data_index] << 8) | cmd[data_index+1];
|
||||
data_index += 2;
|
||||
|
||||
std::vector<SatelliteStatus> all_satellite_status;
|
||||
for(int i = 0 ; i < number_of_satellite; ++i){
|
||||
SatelliteStatus status;
|
||||
status.number = cmd[data_index++];//卫星编号
|
||||
status.locate_flag = cmd[data_index++];//卫星定位标志
|
||||
status.snr = cmd[data_index++];//卫星信噪比
|
||||
status.azimuth = qFromLittleEndian<quint16>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));//卫星方位角
|
||||
data_index += 2;
|
||||
status.pitch = cmd[data_index++];//卫星俯仰角
|
||||
all_satellite_status.push_back(status);
|
||||
QString s;
|
||||
if(commu_state == uint8_t(PhaseLockedLoopStatus::kLocked) || commu_state == uint8_t(PhaseLockedLoopStatus::kUnlocked)){
|
||||
s = QString("通信状态: %1, ").arg(commu_state == uint8_t(PhaseLockedLoopStatus::kLocked)?"正常":"异常");
|
||||
}else{
|
||||
s = QString("通信状态: 未知 ");
|
||||
}
|
||||
// 处理卫星状态
|
||||
QList<QString> categories;
|
||||
QList<qreal> yValues;
|
||||
QList<QPointF> azimuth_pitch_values;
|
||||
for(size_t i = 0 ; i < all_satellite_status.size(); ++i){
|
||||
categories.push_back(QString("%1号星").arg(i));
|
||||
yValues.push_back(all_satellite_status[i].snr);
|
||||
azimuth_pitch_values.push_back(QPointF(all_satellite_status[i].azimuth,all_satellite_status[i].pitch));
|
||||
if(commu_state == uint8_t(PhaseLockedLoopStatus::kLocked))
|
||||
{
|
||||
if(locate_state == uint8_t(PhaseLockedLoopStatus::kLocked) || locate_state == uint8_t(PhaseLockedLoopStatus::kUnlocked)){
|
||||
s += QString("定位状态: %1, ").arg(locate_state == uint8_t(PhaseLockedLoopStatus::kLocked)?"锁定":"未锁定");
|
||||
}else{
|
||||
s += QString("定位状态: 未知, ");
|
||||
}
|
||||
s += QString("方位角: %1, ").arg((double)az_angle/100, 0, 'f', 2);
|
||||
s += QString("俯仰角: %1 ").arg((double)el_angle/100, 0, 'f', 2);
|
||||
}
|
||||
// 设置信号能量
|
||||
setSignalStrengthValues(categories,yValues);
|
||||
// 设置方位俯仰角
|
||||
setAzimuthValues(azimuth_pitch_values);
|
||||
ui->lblZhuanTaiStatus->setText(s);
|
||||
}
|
||||
|
||||
void MainWindow::processDebugCmd(const QByteArray& cmd){
|
||||
@@ -1204,14 +1544,15 @@ void MainWindow::processUhfModuleStatus(uint8_t status){
|
||||
ui->btnUHFModuleStatus->setToolTip("检测中");
|
||||
break;
|
||||
case ModuleStatus::kNormal:
|
||||
ui->btnUHFModuleStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnUHFModuleStatus->setIcon(QIcon(":/rc/res/module_ok.png"));
|
||||
ui->btnUHFModuleStatus->setToolTip("正常");
|
||||
break;
|
||||
case ModuleStatus::kFault:
|
||||
ui->btnUHFModuleStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
ui->btnUHFModuleStatus->setIcon(QIcon(":/rc/res/module_error.png"));
|
||||
ui->btnUHFModuleStatus->setToolTip("故障");
|
||||
break;
|
||||
case ModuleStatus::kUpgrading:
|
||||
ui->btnUHFModuleStatus->setIcon(QIcon(":/rc/res/module_update.png"));
|
||||
ui->btnUHFModuleStatus->setToolTip("升级中");
|
||||
break;
|
||||
}
|
||||
@@ -1229,14 +1570,15 @@ void MainWindow::processTianTongModuleStatus(uint8_t status){
|
||||
ui->btnSModueStatus->setToolTip("检测中");
|
||||
break;
|
||||
case ModuleStatus::kNormal:
|
||||
ui->btnSModueStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnSModueStatus->setIcon(QIcon(":/rc/res/module_ok.png"));
|
||||
ui->btnSModueStatus->setToolTip("正常");
|
||||
break;
|
||||
case ModuleStatus::kFault:
|
||||
ui->btnSModueStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
ui->btnSModueStatus->setIcon(QIcon(":/rc/res/module_error.png"));
|
||||
ui->btnSModueStatus->setToolTip("故障");
|
||||
break;
|
||||
case ModuleStatus::kUpgrading:
|
||||
ui->btnSModueStatus->setIcon(QIcon(":/rc/res/module_update.png"));
|
||||
ui->btnSModueStatus->setToolTip("升级中");
|
||||
break;
|
||||
}
|
||||
@@ -1255,14 +1597,15 @@ void MainWindow::processBeiDouModuleStatus(uint8_t status){
|
||||
ui->btnBeiDouModuleStatus->setToolTip("检测中");
|
||||
break;
|
||||
case ModuleStatus::kNormal:
|
||||
ui->btnBeiDouModuleStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnBeiDouModuleStatus->setIcon(QIcon(":/rc/res/module_ok.png"));
|
||||
ui->btnBeiDouModuleStatus->setToolTip("正常");
|
||||
break;
|
||||
case ModuleStatus::kFault:
|
||||
ui->btnBeiDouModuleStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
ui->btnBeiDouModuleStatus->setIcon(QIcon(":/rc/res/module_error.png"));
|
||||
ui->btnBeiDouModuleStatus->setToolTip("故障");
|
||||
break;
|
||||
case ModuleStatus::kUpgrading:
|
||||
ui->btnBeiDouModuleStatus->setIcon(QIcon(":/rc/res/module_update.png"));
|
||||
ui->btnBeiDouModuleStatus->setToolTip("升级中");
|
||||
break;
|
||||
}
|
||||
@@ -1281,11 +1624,11 @@ void MainWindow::processUhfSimCardStatus(uint8_t status){
|
||||
ui->btnUHFSimCardStatus->setToolTip("正在检测");
|
||||
break;
|
||||
case SimCardStatus::kExist:
|
||||
ui->btnUHFSimCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnUHFSimCardStatus->setIcon(QIcon(":/rc/res/sim_card_exist.png"));
|
||||
ui->btnUHFSimCardStatus->setToolTip("存在");
|
||||
break;
|
||||
case SimCardStatus::kNotExist:
|
||||
ui->btnUHFSimCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
ui->btnUHFSimCardStatus->setIcon(QIcon(":/rc/res/sim_card_not_exist.png"));
|
||||
ui->btnUHFSimCardStatus->setToolTip("不存在");
|
||||
break;
|
||||
}
|
||||
@@ -1303,11 +1646,11 @@ void MainWindow::processTianTongSimCardStatus(uint8_t status){
|
||||
ui->btnSSimCardStatus->setToolTip("正在检测");
|
||||
break;
|
||||
case SimCardStatus::kExist:
|
||||
ui->btnSSimCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnSSimCardStatus->setIcon(QIcon(":/rc/res/sim_card_exist.png"));
|
||||
ui->btnSSimCardStatus->setToolTip("存在");
|
||||
break;
|
||||
case SimCardStatus::kNotExist:
|
||||
ui->btnSSimCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
ui->btnSSimCardStatus->setIcon(QIcon(":/rc/res/sim_card_not_exist.png"));
|
||||
ui->btnSSimCardStatus->setToolTip("不存在");
|
||||
break;
|
||||
}
|
||||
@@ -1325,11 +1668,11 @@ void MainWindow::processBeiDouSimCardStatus(uint8_t status){
|
||||
ui->btnBeiDouSimCardStatus->setToolTip("正在检测");
|
||||
break;
|
||||
case SimCardStatus::kExist:
|
||||
ui->btnBeiDouSimCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnBeiDouSimCardStatus->setIcon(QIcon(":/rc/res/sim_card_exist.png"));
|
||||
ui->btnBeiDouSimCardStatus->setToolTip("存在");
|
||||
break;
|
||||
case SimCardStatus::kNotExist:
|
||||
ui->btnBeiDouSimCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
ui->btnBeiDouSimCardStatus->setIcon(QIcon(":/rc/res/sim_card_not_exist.png"));
|
||||
ui->btnBeiDouSimCardStatus->setToolTip("不存在");
|
||||
break;
|
||||
}
|
||||
@@ -1348,15 +1691,15 @@ void MainWindow::processUhfMCardStatus(uint8_t status){
|
||||
ui->btnUHFMCardStatus->setToolTip("正在检测");
|
||||
break;
|
||||
case MCardStatus::kExistNotEncryted:
|
||||
ui->btnUHFMCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnUHFMCardStatus->setIcon(QIcon(":/rc/res/m_card_no_stick.png"));
|
||||
ui->btnUHFMCardStatus->setToolTip("存在未注密");
|
||||
break;
|
||||
case MCardStatus::kExistEncryted:
|
||||
ui->btnUHFMCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnUHFMCardStatus->setIcon(QIcon(":/rc/res/m_card_stick.png"));
|
||||
ui->btnUHFMCardStatus->setToolTip("存在已注密");
|
||||
break;
|
||||
case MCardStatus::kNotExist:
|
||||
ui->btnUHFMCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
ui->btnUHFMCardStatus->setIcon(QIcon(":/rc/res/m_card_not_exist.png"));
|
||||
ui->btnUHFMCardStatus->setToolTip("不存在");
|
||||
break;
|
||||
}
|
||||
@@ -1374,15 +1717,15 @@ void MainWindow::processTianTongMCardStatus(uint8_t status){
|
||||
ui->btnSMCardStatus->setToolTip("正在检测");
|
||||
break;
|
||||
case MCardStatus::kExistNotEncryted:
|
||||
ui->btnSMCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnSMCardStatus->setIcon(QIcon(":/rc/res/m_card_no_stick.png"));
|
||||
ui->btnSMCardStatus->setToolTip("存在未注密");
|
||||
break;
|
||||
case MCardStatus::kExistEncryted:
|
||||
ui->btnSMCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnSMCardStatus->setIcon(QIcon(":/rc/res/m_card_stick.png"));
|
||||
ui->btnSMCardStatus->setToolTip("存在已注密");
|
||||
break;
|
||||
case MCardStatus::kNotExist:
|
||||
ui->btnSMCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
ui->btnSMCardStatus->setIcon(QIcon(":/rc/res/m_card_not_exist.png"));
|
||||
ui->btnSMCardStatus->setToolTip("不存在");
|
||||
break;
|
||||
}
|
||||
@@ -1399,18 +1742,18 @@ void MainWindow::processUhfNetworkAccessStatus(uint8_t status){
|
||||
m_uhfNetworkAccessStatus = NetworkAccessStatus(status);
|
||||
switch(m_uhfNetworkAccessStatus){
|
||||
case NetworkAccessStatus::kNotConnected:
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/net_out.png"));
|
||||
ui->btnUHFNetworkAccessStatus->setToolTip("未入网");
|
||||
break;
|
||||
case NetworkAccessStatus::kConnecting:
|
||||
ui->btnUHFNetworkAccessStatus->setToolTip("正在入网");
|
||||
break;
|
||||
case NetworkAccessStatus::kConnectedDataIsNotActivated:
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/net_in_no_data.png"));
|
||||
ui->btnUHFNetworkAccessStatus->setToolTip("已入网, 数据未激活");
|
||||
break;
|
||||
case NetworkAccessStatus::kConnectedDataIsActivated:
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/net_in_data.png"));
|
||||
ui->btnUHFNetworkAccessStatus->setToolTip("已入网, 数据已激活");
|
||||
break;
|
||||
}
|
||||
@@ -1426,19 +1769,19 @@ void MainWindow::processTianTongNetworkAccessStatus(uint8_t status){
|
||||
m_tiantongNetworkAccessStatus = NetworkAccessStatus(status);
|
||||
switch(m_tiantongNetworkAccessStatus){
|
||||
case NetworkAccessStatus::kNotConnected:
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/net_out.png"));
|
||||
ui->btnSNetworkAccessStatus->setToolTip("未入网");
|
||||
break;
|
||||
case NetworkAccessStatus::kConnecting:
|
||||
// ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
// ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/net_out.png"));
|
||||
ui->btnSNetworkAccessStatus->setToolTip("正在入网");
|
||||
break;
|
||||
case NetworkAccessStatus::kConnectedDataIsNotActivated:
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/net_in_no_data.png"));
|
||||
ui->btnSNetworkAccessStatus->setToolTip("已入网, 数据未激活");
|
||||
break;
|
||||
case NetworkAccessStatus::kConnectedDataIsActivated:
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/net_in_data.png"));
|
||||
ui->btnSNetworkAccessStatus->setToolTip("已入网, 数据已激活");
|
||||
break;
|
||||
}
|
||||
@@ -1476,8 +1819,9 @@ void MainWindow::processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call
|
||||
ui->lblCallStatus->setText("空闲");
|
||||
ui->lblCallStatus->setStyleSheet("color: black;");
|
||||
m_callStatusLabelBlack = true;
|
||||
ui->lblCallDuration->hide();
|
||||
ShutdownTalking();
|
||||
ui->lblCallDuration->hide();
|
||||
ui->lblCallDuration->setText(""); //清空
|
||||
break;
|
||||
case CallStatus::kDialing://拨号中
|
||||
//拨号中
|
||||
@@ -1486,6 +1830,7 @@ void MainWindow::processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call
|
||||
ui->btnCallReject->show();
|
||||
ui->lblCallStatus->setText("拨号中...");
|
||||
ui->lblCallDuration->hide();
|
||||
ui->lblCallDuration->setText(""); //清空
|
||||
break;
|
||||
case CallStatus::kPeerRingTheBell://对方振铃
|
||||
//对方振铃中
|
||||
@@ -1494,12 +1839,12 @@ void MainWindow::processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call
|
||||
ui->btnCallReject->show();
|
||||
ui->lblCallStatus->setText("对方振铃...");
|
||||
ui->lblCallDuration->hide();
|
||||
ui->lblCallDuration->setText(""); //清空
|
||||
break;
|
||||
case CallStatus::kOnLine://通话中
|
||||
//通话中
|
||||
if(chan == Channel::S){
|
||||
m_currentTalkingNumber = tiantong_number;
|
||||
|
||||
ui->cmbCallNumber->setCurrentText(QString::fromStdString(tiantong_number));
|
||||
}else{
|
||||
m_currentTalkingNumber = uhf_number;
|
||||
@@ -1513,7 +1858,6 @@ void MainWindow::processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call
|
||||
ui->lblCallStatus->setText("通话中...");
|
||||
ui->lblCallStatus->setStyleSheet("color: green;");
|
||||
m_callStatusLabelBlack = false;
|
||||
ui->lblCallDuration->show();
|
||||
StartupTalking();
|
||||
break;
|
||||
case CallStatus::kCallIsComing://来电中
|
||||
@@ -1532,9 +1876,16 @@ void MainWindow::processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call
|
||||
ui->btnCallReject->show();
|
||||
ui->lblCallStatus->setText("来电中...");
|
||||
ui->lblCallDuration->hide();
|
||||
ui->lblCallDuration->setText(""); //清空
|
||||
break;
|
||||
}
|
||||
}
|
||||
//--------------------------------------------------------------------------------------
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
void MainWindow::on_btnConfigParam_clicked()
|
||||
{
|
||||
m_configParamWidget->show();
|
||||
}
|
||||
|
||||
|
||||
17
mainwindow.h
@@ -11,10 +11,9 @@
|
||||
|
||||
#include "RecordQuery.h"
|
||||
#include "LoggerWidget.h"
|
||||
#include "ConfigParam.h"
|
||||
#include "msg.h"
|
||||
|
||||
#include "spdlog/spdlog.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
namespace Ui {
|
||||
class MainWindow;
|
||||
@@ -58,12 +57,16 @@ private slots:
|
||||
void onTimerTimeout1s();
|
||||
|
||||
void handleUdpRequest(const QByteArray &message);
|
||||
void on_btnConfigParam_clicked();
|
||||
|
||||
protected:
|
||||
void keyPressEvent(QKeyEvent* event) override;
|
||||
private:
|
||||
void createBeiDouSignalStrengthChart();
|
||||
void createAzimuthMapChart();
|
||||
void setSignalStrengthValues(const QStringList& categories,const QList<qreal> &yValues);
|
||||
void createBeiDouRDSSSignalStrengthChart();
|
||||
void setRDSSSignalStrengthValues(uint8_t type, const QStringList &categories, const QList<qreal> &yValues);
|
||||
void setAzimuthValues(const QList<QPointF> &points);
|
||||
//-------------------------------------------------
|
||||
// 消息列表操作
|
||||
@@ -82,6 +85,7 @@ private:
|
||||
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 processUhfModuleStatus(uint8_t status);
|
||||
@@ -105,7 +109,7 @@ private:
|
||||
|
||||
std::pair<QString,QString> parseReceivedShortMessage(const QByteArray& cmd,Channel chan);
|
||||
|
||||
std::pair<bool,Channel> selectChannel(CommType comm_type);
|
||||
std::pair<bool,Channel> selectChannel(ChannelType comm_type);
|
||||
|
||||
bool checkNumber(const QString& number);
|
||||
bool checkMessage(const QString& message);
|
||||
@@ -167,10 +171,17 @@ private:
|
||||
std::shared_ptr<QUdpSocket> m_udpServerSocket;
|
||||
std::shared_ptr<RecordQuery> m_recordQueryWidget;
|
||||
std::shared_ptr<LoggerWidget> m_loggerWidget;
|
||||
std::shared_ptr<ConfigParam> 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
|
||||
|
||||
406
mainwindow.ui
@@ -11,7 +11,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>卫星终端</string>
|
||||
<string>卫星终端控制软件</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="QWidget" name="widgetCallAndMessage" native="true">
|
||||
@@ -36,16 +36,16 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="rdbChannelUHF">
|
||||
<widget class="QRadioButton" name="rdbChannelS">
|
||||
<property name="text">
|
||||
<string>UHF</string>
|
||||
<string>S</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="rdbChannelS">
|
||||
<widget class="QRadioButton" name="rdbChannelUHF">
|
||||
<property name="text">
|
||||
<string>S</string>
|
||||
<string>UHF</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -73,7 +73,7 @@
|
||||
<string>对方号码:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -90,7 +90,7 @@
|
||||
<string>状态:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -197,7 +197,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_18">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -265,7 +265,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_23">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -301,7 +301,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_19">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -330,13 +330,13 @@
|
||||
<item>
|
||||
<widget class="QTableWidget" name="tblMessageList">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
<set>QAbstractItemView::EditTrigger::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
<enum>QAbstractItemView::SelectionMode::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
<enum>QAbstractItemView::SelectionBehavior::SelectRows</enum>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderStretchLastSection">
|
||||
<bool>true</bool>
|
||||
@@ -385,7 +385,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_20">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -415,7 +415,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_21">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -425,6 +425,13 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnConfigParam">
|
||||
<property name="text">
|
||||
<string>参数配置</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnRecordQuery">
|
||||
<property name="text">
|
||||
@@ -447,10 +454,10 @@
|
||||
<widget class="QWidget" name="widgetSatelliteStatus" native="true">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1020</x>
|
||||
<y>280</y>
|
||||
<width>755</width>
|
||||
<height>432</height>
|
||||
<x>984</x>
|
||||
<y>71</y>
|
||||
<width>580</width>
|
||||
<height>571</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
@@ -459,7 +466,7 @@
|
||||
<property name="title">
|
||||
<string>卫星状态</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_30" stretch="0,0,1,1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_30" stretch="0,0,1">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_48">
|
||||
<property name="title">
|
||||
@@ -494,7 +501,10 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_116">
|
||||
<widget class="QLabel" name="labelUHFSimCardStatus">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string> SIM卡状态:</string>
|
||||
</property>
|
||||
@@ -506,11 +516,7 @@
|
||||
<string>不存在</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="res.qrc">
|
||||
<normaloff>:/rc/res/card_gray.png</normaloff>:/rc/res/card_gray.png</iconset>
|
||||
<string/>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
@@ -518,12 +524,15 @@
|
||||
<height>24</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_127">
|
||||
<property name="text">
|
||||
<string> M卡状态:</string>
|
||||
<string> M卡状态:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -564,7 +573,7 @@
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="res.qrc">
|
||||
<normaloff>:/rc/res/circle_gray.png</normaloff>:/rc/res/circle_gray.png</iconset>
|
||||
<normaloff>:/rc/res/net_out.png</normaloff>:/rc/res/net_out.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
@@ -588,15 +597,38 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QProgressBar" name="progressChannelUHFSignalStrength">
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
<widget class="QToolButton" name="btnUHFSignalStrength">
|
||||
<property name="toolTip">
|
||||
<string>0</string>
|
||||
</property>
|
||||
<property name="format">
|
||||
<string/>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="res.qrc">
|
||||
<normaloff>:/rc/res/signal_0.png</normaloff>:/rc/res/signal_0.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>24</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -704,7 +736,7 @@
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="res.qrc">
|
||||
<normaloff>:/rc/res/circle_gray.png</normaloff>:/rc/res/circle_gray.png</iconset>
|
||||
<normaloff>:/rc/res/net_out.png</normaloff>:/rc/res/net_out.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
@@ -737,15 +769,38 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QProgressBar" name="progressChannelSSignalStrength">
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
<widget class="QToolButton" name="btnSSignalStrength">
|
||||
<property name="toolTip">
|
||||
<string>0</string>
|
||||
</property>
|
||||
<property name="format">
|
||||
<string/>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="res.qrc">
|
||||
<normaloff>:/rc/res/signal_0.png</normaloff>:/rc/res/signal_0.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>24</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -754,7 +809,7 @@
|
||||
<property name="title">
|
||||
<string>北斗</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_31" stretch="0,1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_31" stretch="0,0">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_67">
|
||||
<item>
|
||||
@@ -763,7 +818,7 @@
|
||||
<string>模块状态:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -793,7 +848,7 @@
|
||||
<string> SIM卡状态:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -818,12 +873,46 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_123">
|
||||
<widget class="QLabel" name="label_128">
|
||||
<property name="text">
|
||||
<string> 收星数:</string>
|
||||
<string> RDSS_S1波束锁定数量:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="rds1SatelliteCount">
|
||||
<property name="text">
|
||||
<string>0</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_129">
|
||||
<property name="text">
|
||||
<string> RDSS_S2波束锁定数量:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="rds2SatelliteCount">
|
||||
<property name="text">
|
||||
<string>0</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_123">
|
||||
<property name="text">
|
||||
<string> RNSS收星数:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -837,7 +926,7 @@
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_22">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -850,19 +939,121 @@
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="vboxChannelBeidouSignalStrength"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_51">
|
||||
<property name="title">
|
||||
<string>方位图</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_68">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="vboxAzimuthMap"/>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
<string>RDSS卫星</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_53">
|
||||
<property name="title">
|
||||
<string>S1波束</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_71">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="vboxChannelBeidouRDS1SignalStrength"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_54">
|
||||
<property name="title">
|
||||
<string>S2波束</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_72">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="vboxChannelBeidouRDS2SignalStrength"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_2">
|
||||
<attribute name="title">
|
||||
<string>RNSS卫星</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_52">
|
||||
<property name="title">
|
||||
<string>直方图</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_70">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="vboxChannelBeidouSignalStrength"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_51">
|
||||
<property name="title">
|
||||
<string>分布图</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_68">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="vboxAzimuthMap"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@@ -882,7 +1073,48 @@
|
||||
<string>位置 :</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>天线 :</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="lblHydraulicCylinderHeight">
|
||||
<property name="text">
|
||||
<string>CCCCCCCCCCCCCCCCC</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLabel" name="lblPhaseLockedLoop">
|
||||
<property name="text">
|
||||
<string>EEEEEEEEEEEEEEEEEE</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>锁相环 :</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLabel" name="lblAntennaPowerSupply">
|
||||
<property name="text">
|
||||
<string>AAAAAAAAAAAAAAAAAAA</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -893,54 +1125,30 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>液压杠升级高度 :</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>转台 :</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLabel" name="lblHydraulicCylinderHeight">
|
||||
<widget class="QLabel" name="lblZhuanTaiStatus">
|
||||
<property name="text">
|
||||
<string>CCCCCCCCCCCCCCCCC</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>天线 :</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="lblAntennaPowerSupply">
|
||||
<property name="text">
|
||||
<string>AAAAAAAAAAAAAAAAAAA</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>锁相环 :</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLabel" name="lblPhaseLockedLoop">
|
||||
<property name="text">
|
||||
<string>EEEEEEEEEEEEEEEEEE</string>
|
||||
<string>BBBBBBBBBBBBBBBBBBB</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -956,7 +1164,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1893</width>
|
||||
<height>21</height>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
|
||||
42
msg.cpp
@@ -180,6 +180,48 @@ QByteArray pack_debug_cmd_CmdCtrl(uint8_t type, const std::string& cmd_content){
|
||||
return pack_slip(cmd);
|
||||
}
|
||||
|
||||
QByteArray pack_config_cmd_DefaultChannelAndNumberGet(){
|
||||
QByteArray cmd(FRAME_MIN_LEN, '\0');
|
||||
pack_len(cmd,2);
|
||||
cmd[COMMAND_TYPE_INDEX] = uint8_t(CommandType::kConfigCmdDefaultChannelAndNumber);
|
||||
cmd[SUB_COMMAND_TYPE_INDEX] = uint8_t(ConfigCommandType::kGetType);
|
||||
calc_checksum(cmd);
|
||||
return pack_slip(cmd);
|
||||
}
|
||||
|
||||
QByteArray pack_config_cmd_DefaultChannelAndNumberSet(uint8_t type, const std::string& u_number, const std::string& s_number){
|
||||
assert((u_number.size() <= 20) && (s_number.size() <= 20));
|
||||
QByteArray cmd(FRAME_MIN_LEN + 1 + 20 + 20, '\0');
|
||||
pack_len(cmd,2 + 1 + 20 + 20);
|
||||
cmd[COMMAND_TYPE_INDEX] = uint8_t(CommandType::kConfigCmdDefaultChannelAndNumber);
|
||||
cmd[SUB_COMMAND_TYPE_INDEX] = uint8_t(ConfigCommandType::kSetType);
|
||||
cmd[COMMAND_DATA_BEGIN_INDEX] = type;
|
||||
memcpy(&cmd[COMMAND_DATA_BEGIN_INDEX + 1],u_number.c_str(),u_number.size());
|
||||
memcpy(&cmd[COMMAND_DATA_BEGIN_INDEX + 1 + 20],s_number.c_str(),s_number.size());
|
||||
calc_checksum(cmd);
|
||||
return pack_slip(cmd);
|
||||
}
|
||||
|
||||
QByteArray pack_config_cmd_UDataChannelKeepTimeGet(){
|
||||
QByteArray cmd(FRAME_MIN_LEN, '\0');
|
||||
pack_len(cmd,2);
|
||||
cmd[COMMAND_TYPE_INDEX] = uint8_t(CommandType::kConfigCmdUDataChannelKeepTime);
|
||||
cmd[SUB_COMMAND_TYPE_INDEX] = uint8_t(ConfigCommandType::kGetType);
|
||||
calc_checksum(cmd);
|
||||
return pack_slip(cmd);
|
||||
}
|
||||
|
||||
QByteArray pack_config_cmd_UDataChannelKeepTimeSet(uint16_t time){
|
||||
QByteArray cmd(FRAME_MIN_LEN + 2, '\0');
|
||||
pack_len(cmd,2 + 2);
|
||||
cmd[COMMAND_TYPE_INDEX] = uint8_t(CommandType::kConfigCmdUDataChannelKeepTime);
|
||||
cmd[SUB_COMMAND_TYPE_INDEX] = uint8_t(ConfigCommandType::kSetType);
|
||||
cmd[COMMAND_DATA_BEGIN_INDEX] = (time >> 8) & 0xFF;
|
||||
cmd[COMMAND_DATA_BEGIN_INDEX + 1] = time & 0xFF;
|
||||
calc_checksum(cmd);
|
||||
return pack_slip(cmd);
|
||||
}
|
||||
|
||||
QByteArray pack_short_message_cmd(CommandType cmd_type,const std::string& number, const std::u16string& message){
|
||||
assert(number.size() <= 20);
|
||||
QByteArray cmd(FRAME_MIN_LEN+20+message.size()*sizeof(char16_t), '\0');
|
||||
|
||||
38
msg.h
@@ -12,8 +12,9 @@
|
||||
#define COMMAND_TYPE_INDEX 2
|
||||
#define SUB_COMMAND_TYPE_INDEX 3
|
||||
#define COMMAND_DATA_BEGIN_INDEX 4
|
||||
#define FRAME_MIN_LEN 5
|
||||
#define FRAME_MIN_LEN 5 //不含帧头帧尾
|
||||
#define FRAME_LEN_STATUSREPORT (FRAME_MIN_LEN + 81)
|
||||
#define FRAME_LEN_ZHUANTAISTATUSREPORT (FRAME_MIN_LEN + 6)
|
||||
|
||||
enum class CommandType : uint8_t{
|
||||
kTianTongVoice = 0xA0,
|
||||
@@ -23,6 +24,9 @@ enum class CommandType : uint8_t{
|
||||
kBeiDouShortMessage = 0xB2,
|
||||
kStatusReport = 0x80,
|
||||
kSearchSatelliteStatusReport = 0x90,
|
||||
kSearchZhuanTaiStatusReport = 0x91,
|
||||
kConfigCmdDefaultChannelAndNumber = 0xD0,
|
||||
kConfigCmdUDataChannelKeepTime = 0xD1,
|
||||
kDebugCmd = 0xE0,
|
||||
};
|
||||
enum class TianTongVoiceSubCommandType: uint8_t{
|
||||
@@ -43,6 +47,11 @@ enum class ShortMessageSubCommandType: uint8_t{
|
||||
kRecvMessage = 0x02, //接收短消息
|
||||
};
|
||||
|
||||
enum class SearchSatelliteStatusReportSubCommandType: uint8_t{
|
||||
kRnss = 0x01, //RNSS卫星状态
|
||||
kRdss = 0x02, //RDSS卫星状态
|
||||
};
|
||||
|
||||
enum class VoiceAndShortMessageReponse{
|
||||
kSucess = 0x00,
|
||||
kFailure = 0x01,
|
||||
@@ -98,6 +107,22 @@ enum class DebugCommandType: uint8_t{
|
||||
kCmdCtrl = 0x06,
|
||||
};
|
||||
|
||||
enum class ConfigCommandType: uint8_t{
|
||||
kGetType = 0x00,
|
||||
kSetType = 0x01,
|
||||
};
|
||||
|
||||
enum class RDSSType: uint8_t{
|
||||
RDSS_S1 = 0x00,
|
||||
RDSS_S2 = 0x01,
|
||||
};
|
||||
|
||||
enum class ChannelType: uint8_t{
|
||||
ChannelS = 0x00,
|
||||
ChannelUHF = 0x01,
|
||||
ChannelAuto = 0x02,
|
||||
};
|
||||
|
||||
struct SatelliteStatus{
|
||||
uint8_t number;
|
||||
uint8_t locate_flag;
|
||||
@@ -106,6 +131,12 @@ struct SatelliteStatus{
|
||||
uint8_t pitch;
|
||||
};
|
||||
|
||||
struct RDSSSatelliteStatus{
|
||||
uint8_t number;
|
||||
uint8_t snr1;
|
||||
uint8_t snr2;
|
||||
};
|
||||
|
||||
void calc_checksum(QByteArray&cmd);
|
||||
QByteArray pack_tiantong_dial_cmd(const std::string& number);
|
||||
QByteArray pack_tiantong_hang_up_cmd();
|
||||
@@ -124,6 +155,11 @@ QByteArray pack_debug_cmd_PASwitch(uint8_t s_switch, uint8_t u_switch, uint8_t b
|
||||
QByteArray pack_debug_cmd_ZTCtrl(uint8_t type);
|
||||
QByteArray pack_debug_cmd_CmdCtrl(uint8_t type, const std::string& cmd_content);
|
||||
|
||||
QByteArray pack_config_cmd_DefaultChannelAndNumberGet();
|
||||
QByteArray pack_config_cmd_DefaultChannelAndNumberSet(uint8_t type, const std::string& u_number, const std::string& s_number);
|
||||
QByteArray pack_config_cmd_UDataChannelKeepTimeGet();
|
||||
QByteArray pack_config_cmd_UDataChannelKeepTimeSet(uint16_t time);
|
||||
|
||||
QByteArray pack_slip(QByteArray &message);
|
||||
int pack_deslip(QByteArray &message);
|
||||
QByteArray pack_tiantong_short_message_cmd(const std::string& number,const std::u16string& message);
|
||||
|
||||
21
res.qrc
@@ -11,5 +11,26 @@
|
||||
<file>res/last_page.png</file>
|
||||
<file>res/next_page.png</file>
|
||||
<file>res/previous_page.png</file>
|
||||
<file>res/signal_4.png</file>
|
||||
<file>res/module_error.png</file>
|
||||
<file>res/m_card_no_stick.png</file>
|
||||
<file>res/m_card_not_exist.png</file>
|
||||
<file>res/m_card_stick.png</file>
|
||||
<file>res/module_ok.png</file>
|
||||
<file>res/module_update.png</file>
|
||||
<file>res/s_signal_0.png</file>
|
||||
<file>res/s_signal_1.png</file>
|
||||
<file>res/s_signal_2.png</file>
|
||||
<file>res/s_signal_3.png</file>
|
||||
<file>res/s_signal_4.png</file>
|
||||
<file>res/signal_0.png</file>
|
||||
<file>res/signal_1.png</file>
|
||||
<file>res/signal_2.png</file>
|
||||
<file>res/signal_3.png</file>
|
||||
<file>res/sim_card_exist.png</file>
|
||||
<file>res/sim_card_not_exist.png</file>
|
||||
<file>res/net_in_data.png</file>
|
||||
<file>res/net_out.png</file>
|
||||
<file>res/net_in_no_data.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
BIN
res/m_card_no_stick.png
Normal file
|
After Width: | Height: | Size: 725 B |
BIN
res/m_card_not_exist.png
Normal file
|
After Width: | Height: | Size: 407 B |
BIN
res/m_card_not_exist_nouse.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
res/m_card_stick.png
Normal file
|
After Width: | Height: | Size: 433 B |
BIN
res/module_error.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
res/module_ok.png
Normal file
|
After Width: | Height: | Size: 714 B |
BIN
res/module_update.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
res/net_in_data.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
res/net_in_data2.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
res/net_in_no_data.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
res/net_out.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
res/s_signal_0.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
res/s_signal_1.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
res/s_signal_2.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
res/s_signal_3.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
res/s_signal_4.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
res/signal_0.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
res/signal_1.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
res/signal_2.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
res/signal_3.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
res/signal_4.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
res/sim_card_exist.png
Normal file
|
After Width: | Height: | Size: 433 B |
BIN
res/sim_card_not_exist.png
Normal file
|
After Width: | Height: | Size: 407 B |
BIN
res/sim_card_not_exist_no_use.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |