完善功能
This commit is contained in:
761
mainwindow.cpp
761
mainwindow.cpp
@@ -18,9 +18,12 @@
|
||||
#include <QScatterSeries>
|
||||
#include <QSplineSeries>
|
||||
#include <QStackedBarSeries>
|
||||
#include <QSplitter>
|
||||
|
||||
#include <QToolTip>
|
||||
#include <QtEndian>
|
||||
#include <QLineEdit>
|
||||
#include <QRegularExpressionValidator>>
|
||||
|
||||
#include "msg.h"
|
||||
|
||||
@@ -40,6 +43,17 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
createBeiDouSignalStrengthChart();
|
||||
createAzimuthMapChart();
|
||||
|
||||
//
|
||||
QSplitter *splitter = new QSplitter(Qt::Horizontal);
|
||||
splitter->addWidget(ui->widgetCallAndMessage);
|
||||
splitter->addWidget(ui->widgetSatelliteStatus);
|
||||
setCentralWidget(splitter);
|
||||
|
||||
ui->lblPosition->clear();
|
||||
ui->lblHydraulicCylinderHeight->clear();
|
||||
ui->lblAntennaPowerSupply->clear();
|
||||
ui->lblPhaseLockedLoop->clear();
|
||||
|
||||
//获取日志实例
|
||||
m_logger = spdlog::get("logger");
|
||||
|
||||
@@ -52,12 +66,109 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
m_udpServerSocket = std::make_shared<QUdpSocket>();
|
||||
m_udpServerSocket->bind(8000);
|
||||
connect(&*m_udpServerSocket, &QUdpSocket::readyRead, this, &MainWindow::readPendingDatagrams);
|
||||
|
||||
// 对电话号码添加校验器
|
||||
// QRegularExpression regExp("[0-9A-Za-z]{1,20}");
|
||||
// QRegularExpressionValidator *validator = new QRegularExpressionValidator(regExp, this);
|
||||
// // 获取 QComboBox 的 lineEdit 并设置校验器
|
||||
// ui->cmbCallNumber->lineEdit()->setValidator(validator);
|
||||
|
||||
m_timer = new QTimer(this);
|
||||
connect(m_timer, SIGNAL(timeout()), this, SLOT(on_timer_timeout_1s()));
|
||||
m_timer->start(1000);
|
||||
//测试
|
||||
test();
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow() { delete ui; }
|
||||
|
||||
void MainWindow::on_timer_timeout_1s(){
|
||||
//模块状态
|
||||
if(m_uhfModuleStatus == ModuleStatus::kChecking){
|
||||
if(m_uhfModuleStatusGrayIcon){
|
||||
ui->btnUHFModuleStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
}else{
|
||||
ui->btnUHFModuleStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
}
|
||||
m_uhfModuleStatusGrayIcon = !m_uhfModuleStatusGrayIcon;
|
||||
}
|
||||
if(m_tiantongModuleStatus == ModuleStatus::kChecking){
|
||||
if(m_tiantongModuleStatusGrayIcon){
|
||||
ui->btnSModueStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
}else{
|
||||
ui->btnSModueStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
}
|
||||
m_tiantongModuleStatusGrayIcon = !m_tiantongModuleStatusGrayIcon;
|
||||
}
|
||||
if(m_beidouModuleStatus == ModuleStatus::kChecking){
|
||||
if(m_beidouModuleStatusGrayIcon){
|
||||
ui->btnBeiDouModuleStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
}else{
|
||||
ui->btnBeiDouModuleStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
}
|
||||
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_tiantongSimCardStatus == SimCardStatus::kChecking){
|
||||
if(m_tiantongSimCardStatusGrayIcon){
|
||||
ui->btnSSimCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
}else{
|
||||
ui->btnSSimCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
}
|
||||
m_tiantongSimCardStatusGrayIcon = !m_tiantongSimCardStatusGrayIcon;
|
||||
}
|
||||
if(m_beidouSimCardStatus == SimCardStatus::kChecking){
|
||||
if(m_beidouSimCardStatusGrayIcon){
|
||||
ui->btnBeiDouSimCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
}else{
|
||||
ui->btnBeiDouSimCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
}
|
||||
m_beidouSimCardStatusGrayIcon = !m_beidouSimCardStatusGrayIcon;
|
||||
}
|
||||
//m卡状态
|
||||
if(m_uhfMCardStatus == MCardStatus::kChecking){
|
||||
if(m_uhfMCardStatusGrayIcon){
|
||||
ui->btnUHFMCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
}else{
|
||||
ui->btnUHFMCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
}
|
||||
m_uhfMCardStatusGrayIcon = !m_uhfMCardStatusGrayIcon;
|
||||
}
|
||||
if(m_tiantongMCardStatus == MCardStatus::kChecking){
|
||||
if(m_tiantongMCardStatusGrayIcon){
|
||||
ui->btnSMCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
}else{
|
||||
ui->btnSMCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
}
|
||||
m_tiantongMCardStatusGrayIcon = !m_tiantongMCardStatusGrayIcon;
|
||||
}
|
||||
// 入网状态
|
||||
if(m_uhfNetworkAccessStatus == NetworkAccessStatus::kConnecting){
|
||||
if(m_uhfNetworkAccessStatusGrayIcon){
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
}else{
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
}
|
||||
m_uhfNetworkAccessStatusGrayIcon = !m_uhfNetworkAccessStatusGrayIcon;
|
||||
}
|
||||
if(m_tiantongNetworkAccessStatus == NetworkAccessStatus::kConnecting){
|
||||
if(m_tiantongNetworkAccessStatusGrayIcon){
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
}else{
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
}
|
||||
m_tiantongNetworkAccessStatusGrayIcon = !m_tiantongNetworkAccessStatusGrayIcon;
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::keyPressEvent(QKeyEvent* event){
|
||||
if(event->key() == Qt::Key_L && event->modifiers() & Qt::ControlModifier){
|
||||
m_loggerWidget->show();
|
||||
@@ -67,23 +178,27 @@ void MainWindow::keyPressEvent(QKeyEvent* event){
|
||||
}
|
||||
|
||||
void MainWindow::StartupTalkingTimer(){
|
||||
if(m_timer){
|
||||
m_timer->stop();
|
||||
if(m_talkingTimer){
|
||||
if(m_talkingTimer->isActive()){
|
||||
return;
|
||||
}
|
||||
m_callDuration = 0;
|
||||
m_talkingTimer->start(1000);
|
||||
}else{
|
||||
m_timer = std::make_shared<QTimer>();
|
||||
QObject::connect(&*m_timer, &QTimer::timeout, [this]() {
|
||||
m_talkingTimer = std::make_shared<QTimer>();
|
||||
QObject::connect(&*m_talkingTimer, &QTimer::timeout, [this]() {
|
||||
m_callDuration += 1;
|
||||
QTime t(0,0,0);
|
||||
t = t.addSecs(m_callDuration);
|
||||
ui->lblCallDuration->setText(t.toString("hh:mm:ss"));
|
||||
});
|
||||
m_callDuration = 0;
|
||||
m_talkingTimer->start(1000);
|
||||
}
|
||||
m_callDuration = 0;
|
||||
m_timer->start(1000);
|
||||
}
|
||||
void MainWindow::ShutdownTalkingTimer(){
|
||||
if(m_timer){
|
||||
m_timer->stop();
|
||||
if(m_talkingTimer){
|
||||
m_talkingTimer->stop();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -423,6 +538,7 @@ void MainWindow::UpdateMessageList() {
|
||||
int column_index = 0;
|
||||
// 读取状态
|
||||
auto item = new QTableWidgetItem(r.isUnread ? "未读" : "已读");
|
||||
item->setData(Qt::UserRole,index);
|
||||
item->setTextAlignment(Qt::AlignCenter);
|
||||
if(r.isUnread){
|
||||
item->setBackground(Qt::cyan);
|
||||
@@ -463,92 +579,139 @@ void MainWindow::UpdateMessageList() {
|
||||
//--------------------------------------------------------------------------------------
|
||||
// 槽函数
|
||||
//--------------------------------------------------------------------------------------
|
||||
void MainWindow::on_rdbChannelUHF_clicked() {
|
||||
ui->cmbCallNumber->setEnabled(true);
|
||||
ui->btnCallAnswer->setEnabled(true);
|
||||
}
|
||||
|
||||
void MainWindow::on_rdbChannelS_clicked() {
|
||||
ui->cmbCallNumber->setEnabled(true);
|
||||
ui->btnCallAnswer->setEnabled(true);
|
||||
}
|
||||
|
||||
void MainWindow::on_rdbChannelBeiDou_clicked() {
|
||||
if (m_callStatus == CallStatus::kIdle) {
|
||||
ui->cmbCallNumber->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_rdbChannelAuto_clicked() {
|
||||
ui->cmbCallNumber->setEnabled(true);
|
||||
ui->btnCallAnswer->setEnabled(true);
|
||||
}
|
||||
|
||||
void MainWindow::on_btnCallAnswer_clicked() {
|
||||
switch (m_callStatus) {
|
||||
case CallStatus::kIdle: {
|
||||
// 检查电话号码是否为空
|
||||
QString number = ui->cmbCallNumber->currentText();
|
||||
if (number.isEmpty()) { // TODO:进一步判断电话号码格式是否满足要求
|
||||
QMessageBox::information(this, "错误", "请输入电话号码");
|
||||
return;
|
||||
}
|
||||
// TODO: 检查电话号码格式是否满足要求,比如长度
|
||||
|
||||
// 呼叫
|
||||
call(number);
|
||||
} break;
|
||||
case CallStatus::kCallIsComing:
|
||||
// 接听
|
||||
acceptCall();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_btnCallReject_clicked() {
|
||||
switch (m_callStatus) {
|
||||
case CallStatus::kIdle:
|
||||
break;
|
||||
case CallStatus::kDialing://拨号中
|
||||
// 挂断
|
||||
hangUpCall();
|
||||
break;
|
||||
case CallStatus::kCallIsComing://来电中
|
||||
// 拒接
|
||||
rejectCall();
|
||||
break;
|
||||
case CallStatus::kOnLine://通话中
|
||||
// 挂断
|
||||
hangUpCall();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_btnSendMessage_clicked() {
|
||||
// 检查电话号码是否为空
|
||||
QString number = ui->cmbMessageNumber->currentText();
|
||||
bool MainWindow::checkNumber(const QString& number){
|
||||
if (number.isEmpty()) {
|
||||
QMessageBox::information(this, "错误", "请输入电话号码");
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
// TODO: 检查电话号码格式是否满足要求,比如长度
|
||||
//检查号码长度
|
||||
if (number.size() > 20){
|
||||
QMessageBox::information(this, "错误", "电话号码长度不能超过20");
|
||||
return false;
|
||||
}
|
||||
// TODO: 检查电话号码格式是否满足要求
|
||||
|
||||
return true;
|
||||
}
|
||||
bool MainWindow::checkMessage(const QString& message){
|
||||
// 检查消息是否为空
|
||||
QString message = ui->txtMessageContent->toPlainText();
|
||||
if (message.isEmpty()) {
|
||||
QMessageBox::information(this, "错误", "请输入要发送的消息");
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
// 检查消息长度
|
||||
if (message.length() > 140) {
|
||||
QMessageBox::information(this, "错误", "消息太长,不能超过140个字符");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 发送信息
|
||||
sendShortMessage(number, message);
|
||||
return true;
|
||||
}
|
||||
std::pair<bool,Channel> MainWindow::selectChannel(CommType comm_type){
|
||||
//TODO: 是否区别通话还是短信,入网状态的数据是否激活对发送短信是否有影响???
|
||||
bool isUhfChannelOk = (m_uhfModuleStatus == ModuleStatus::kChecking || m_uhfModuleStatus == ModuleStatus::kNormal)
|
||||
&& (m_uhfSimCardStatus == SimCardStatus::kExist || m_uhfSimCardStatus == SimCardStatus::kChecking)
|
||||
&& (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)
|
||||
&& (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);
|
||||
}
|
||||
}
|
||||
}
|
||||
void MainWindow::on_btnCallAnswer_clicked() {
|
||||
if(m_uhfCallStatus == CallStatus::kIdle && m_tiantongCallStatus == CallStatus::kIdle){
|
||||
// 检查电话号码是否为空
|
||||
QString number = ui->cmbCallNumber->currentText();
|
||||
if(!checkNumber(number)){
|
||||
return;
|
||||
}
|
||||
// 呼叫
|
||||
if(ui->rdbChannelUHF->isChecked()){
|
||||
sendUdpMessage(pack_uhf_dial_cmd(number.toStdString()));
|
||||
}else if(ui->rdbChannelS->isChecked()){
|
||||
sendUdpMessage(pack_tiantong_dial_cmd(number.toStdString()));
|
||||
}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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
if(m_uhfCallStatus == CallStatus::kCallIsComing){
|
||||
sendUdpMessage(pack_uhf_answer());
|
||||
}else if(m_tiantongCallStatus == CallStatus::kCallIsComing){
|
||||
sendUdpMessage(pack_tiantong_answer());
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_btnCallReject_clicked() {
|
||||
if(m_uhfCallStatus != CallStatus::kIdle){
|
||||
sendUdpMessage(pack_uhf_hang_up_cmd());
|
||||
}
|
||||
if(m_tiantongCallStatus != CallStatus::kIdle){
|
||||
sendUdpMessage(pack_tiantong_hang_up_cmd());
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_btnSendMessageByUhfOrS_clicked() {
|
||||
QString number = ui->cmbMessageNumberForUhfAndS->currentText();
|
||||
if(!checkNumber(number)){
|
||||
return;
|
||||
}
|
||||
QString message = ui->txtMessageContentForUhfAndS->toPlainText();
|
||||
if(!checkMessage(message)){
|
||||
return;
|
||||
}
|
||||
// 发送信息
|
||||
if(ui->rdbChannelUHF->isChecked()){
|
||||
sendUdpMessage(pack_uhf_short_message_cmd(number.toStdString(),message.toStdU16String()));
|
||||
}else if(ui->rdbChannelS->isChecked()){
|
||||
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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_btnSendMessageByBeiDou_clicked()
|
||||
{
|
||||
test1();
|
||||
return;
|
||||
QString number = ui->cmbMessageNumberForBeiDou->currentText();
|
||||
if(!checkNumber(number)){
|
||||
return;
|
||||
}
|
||||
QString message = ui->txtMessageContentForBeiDou->toPlainText();
|
||||
if(!checkMessage(message)){
|
||||
return;
|
||||
}
|
||||
sendUdpMessage(pack_beidou_short_message_cmd(number.toStdString(),message.toStdU16String()));
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::on_tblMessageList_currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
|
||||
{
|
||||
@@ -556,9 +719,10 @@ void MainWindow::on_tblMessageList_currentItemChanged(QTableWidgetItem *current,
|
||||
if(currentRow == -1){
|
||||
ui->txtCurrentItemMessageContent->clear();
|
||||
}else{
|
||||
ui->txtCurrentItemMessageContent->setText(m_msgList[currentRow].content);
|
||||
if(m_msgList[currentRow].isUnread){
|
||||
m_msgList[currentRow].isUnread = false;
|
||||
int index = ui->tblMessageList->item(currentRow,0)->data(Qt::UserRole).toInt();
|
||||
ui->txtCurrentItemMessageContent->setText(m_msgList[index].content);
|
||||
if(m_msgList[index].isUnread){
|
||||
m_msgList[index].isUnread = false;
|
||||
ui->tblMessageList->item(currentRow,0)->setText("已读");
|
||||
ui->tblMessageList->item(currentRow,0)->setBackground(Qt::white);
|
||||
--m_unReadMsgCount;
|
||||
@@ -567,7 +731,6 @@ void MainWindow::on_tblMessageList_currentItemChanged(QTableWidgetItem *current,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::on_btnRecordQuery_clicked() {
|
||||
m_recordQueryWidget->show();
|
||||
}
|
||||
@@ -579,37 +742,11 @@ bool MainWindow::sendUdpMessage(const QByteArray &udpMessage) {
|
||||
quint16 port = 8080;
|
||||
if (m_udpSocket->writeDatagram(udpMessage, address, port) !=
|
||||
udpMessage.size()) {
|
||||
// 发送错误
|
||||
m_logger->error("发送udp消息错误");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
bool MainWindow::call(const QString &number) {
|
||||
// TODO:
|
||||
QString udpMessage = "";
|
||||
return sendUdpMessage(udpMessage.toUtf8());
|
||||
}
|
||||
bool MainWindow::hangUpCall() {
|
||||
// TODO:
|
||||
QString udpMessage = "";
|
||||
return sendUdpMessage(udpMessage.toUtf8());
|
||||
}
|
||||
bool MainWindow::acceptCall() {
|
||||
// TODO:
|
||||
QString udpMessage = "";
|
||||
return sendUdpMessage(udpMessage.toUtf8());
|
||||
}
|
||||
bool MainWindow::rejectCall() {
|
||||
// TODO:
|
||||
QString udpMessage = "";
|
||||
return sendUdpMessage(udpMessage.toUtf8());
|
||||
}
|
||||
bool MainWindow::sendShortMessage(const QString &number,
|
||||
const QString &message) {
|
||||
// TODO:
|
||||
QString udpMessage = "";
|
||||
return sendUdpMessage(udpMessage.toUtf8());
|
||||
}
|
||||
//--------------------------------------------------------------------------------------
|
||||
// 处理命令
|
||||
//--------------------------------------------------------------------------------------
|
||||
@@ -640,36 +777,6 @@ void MainWindow::processCommand(const QByteArray& cmd){
|
||||
processSearchSatelliteStatusReport(cmd);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
//有来电
|
||||
ui->cmbCallNumber->setEnabled(false);
|
||||
ui->btnCallAnswer->show();
|
||||
ui->btnCallReject->show();
|
||||
ui->lblCallStatus->setText("来电中...");
|
||||
ui->lblCallDuration->hide();
|
||||
//通话中
|
||||
ui->cmbCallNumber->setEnabled(false);
|
||||
ui->btnCallAnswer->hide();
|
||||
ui->btnCallReject->show();
|
||||
ui->lblCallStatus->setText("通话中...");
|
||||
ui->lblCallDuration->show();
|
||||
StartupTalkingTimer();
|
||||
//挂断电话
|
||||
ui->cmbCallNumber->setEnabled(true);
|
||||
ui->btnCallAnswer->show();
|
||||
ui->btnCallReject->hide();
|
||||
ui->lblCallStatus->setText("空闲中...");
|
||||
ui->lblCallDuration->hide();
|
||||
ShutdownTalkingTimer();
|
||||
//拨号中
|
||||
ui->cmbCallNumber->setEnabled(false);
|
||||
ui->btnCallAnswer->hide();
|
||||
ui->btnCallReject->show();
|
||||
ui->lblCallStatus->setText("拨号中...");
|
||||
ui->lblCallDuration->hide();
|
||||
|
||||
test1();
|
||||
}
|
||||
void MainWindow::processTianTongVoiceCmd(const QByteArray& cmd){
|
||||
switch(cmd[SUB_COMMAND_TYPE_INDEX]){
|
||||
@@ -777,7 +884,7 @@ void MainWindow::processStatusReportCmd(const QByteArray& cmd){
|
||||
int data_index = COMMAND_DATA_BEGIN_INDEX;
|
||||
//uhf状态
|
||||
uint8_t uhf_module_status = cmd[data_index++];//模块状态
|
||||
uint8_t uhf_connected_network_status = cmd[data_index++];//入网状态
|
||||
uint8_t uhf_network_access_status = cmd[data_index++];//入网状态
|
||||
uint8_t uhf_sim_card_status = cmd[data_index++];//sim卡状态
|
||||
uint8_t uhf_m_card_status = cmd[data_index++];//m卡状态
|
||||
uint8_t uhf_call_status = cmd[data_index++];//通话状态
|
||||
@@ -786,13 +893,14 @@ void MainWindow::processStatusReportCmd(const QByteArray& cmd){
|
||||
data_index += 20;
|
||||
//天通状态
|
||||
uint8_t tiantong_module_status = cmd[data_index++];//模块状态
|
||||
uint8_t tiantong_connected_network_status = cmd[data_index++];//入网状态
|
||||
uint8_t tiantong_network_access_status = cmd[data_index++];//入网状态
|
||||
uint8_t tiantong_sim_card_status = cmd[data_index++];//sim卡状态
|
||||
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);
|
||||
data_index += 20;
|
||||
|
||||
//北斗状态
|
||||
uint8_t beidou_module_status = cmd[data_index++];//模块状态
|
||||
uint8_t beidou_sim_card_status = cmd[data_index++];//sim卡状态
|
||||
@@ -832,6 +940,53 @@ void MainWindow::processStatusReportCmd(const QByteArray& cmd){
|
||||
//UHF接收锁相环频综状态
|
||||
uint8_t phase_locked_loop_recv = cmd[data_index++];
|
||||
|
||||
//处理模块状态
|
||||
processUhfModuleStatus(uhf_module_status);
|
||||
processTianTongModuleStatus(tiantong_module_status);
|
||||
processBeiDouModuleStatus(beidou_module_status);
|
||||
//处理入网状态
|
||||
processUhfNetworkAccessStatus(uhf_network_access_status);
|
||||
processTianTongNetworkAccessStatus(tiantong_network_access_status);
|
||||
// 处理sim卡状态
|
||||
processUhfSimCardStatus(uhf_sim_card_status);
|
||||
processTianTongSimCardStatus(tiantong_sim_card_status);
|
||||
processBeiDouSimCardStatus(beidou_sim_card_status);
|
||||
// 处理m卡状态
|
||||
processUhfMCardStatus(uhf_m_card_status);
|
||||
processTianTongMCardStatus(tiantong_m_card_status);
|
||||
//处理呼叫状态
|
||||
processCallStatus(tiantong_call_status,uhf_call_status);
|
||||
// 处理信号强度,信号强度范围是否是0~100之间???
|
||||
m_uhfSignalStrength = uhf_satellite_signal_strength;
|
||||
m_tiantongSignalStrength = tiantong_satellite_signal_strength;
|
||||
ui->progressChannelUHFSignalStrength->setValue(m_uhfSignalStrength);
|
||||
ui->progressChannelSSignalStrength->setValue(m_tiantongSignalStrength);
|
||||
// 处理来电号码
|
||||
if(!uhf_number.empty()){
|
||||
ui->cmbCallNumber->setCurrentText(QString::fromStdString(uhf_number));
|
||||
}else{
|
||||
ui->cmbCallNumber->setCurrentText(QString::fromStdString(tiantong_number));
|
||||
}
|
||||
// 处理位置
|
||||
ui->lblPosition->setText(QString(" 经度: %1, 纬度: %2, 高度, %3").arg(longitude).arg(latitude).arg(altitude));
|
||||
// 处理液压缸升降高度状态
|
||||
ui->lblHydraulicCylinderHeight->setText(QString("%1 米").arg(oil_level_position));
|
||||
// 处理自检状态
|
||||
ui->lblAntennaPowerSupply->setText(QString("电源A电压 %1 V, 电源A电流 %2 A, 电源B电压 %1 V, 电源B电流 %2 A")
|
||||
.arg(antenna_power_supply_a_voltage).arg(antenna_power_supply_a_current)
|
||||
.arg(antenna_power_supply_b_voltage).arg(antenna_power_supply_b_current));
|
||||
QString s;
|
||||
if(phase_locked_loop_send == uint8_t(PhaseLockedLoopStatus::kLocked) || phase_locked_loop_send == uint8_t(PhaseLockedLoopStatus::kUnlocked)){
|
||||
s = QString("UHF发送锁相环频综: %1 ").arg(phase_locked_loop_send == uint8_t(PhaseLockedLoopStatus::kLocked)?"锁定":"失锁");
|
||||
}else{
|
||||
m_logger->error("UHF发送锁相环频综非法值, phase_locked_loop_send = {}",phase_locked_loop_send);
|
||||
}
|
||||
if(phase_locked_loop_recv == uint8_t(PhaseLockedLoopStatus::kLocked) || phase_locked_loop_recv == uint8_t(PhaseLockedLoopStatus::kUnlocked)){
|
||||
s += QString("UHF接收锁相环频综: %1").arg(phase_locked_loop_recv == uint8_t(PhaseLockedLoopStatus::kLocked)?"锁定":"失锁");
|
||||
}else{
|
||||
m_logger->error("UHF接收锁相环频综非法值, phase_locked_loop_recv = {}",phase_locked_loop_recv);
|
||||
}
|
||||
ui->lblPhaseLockedLoop->setText(s);
|
||||
}
|
||||
void MainWindow::processSearchSatelliteStatusReport(const QByteArray& cmd){
|
||||
if(cmd[SUB_COMMAND_TYPE_INDEX] != 0){
|
||||
@@ -852,6 +1007,324 @@ void MainWindow::processSearchSatelliteStatusReport(const QByteArray& cmd){
|
||||
status.pitch = cmd[data_index++];//卫星俯仰角
|
||||
all_satellite_status.push_back(status);
|
||||
}
|
||||
// 处理卫星状态
|
||||
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));
|
||||
}
|
||||
// 设置信号能量
|
||||
setSignalStrengthValues(categories,yValues);
|
||||
// 设置方位俯仰角
|
||||
setAzimuthValues(azimuth_pitch_values);
|
||||
}
|
||||
//--------------------------------------------------------------------------------------
|
||||
//--------------------------------------------------------------------------------------
|
||||
// 处理模块状态
|
||||
void MainWindow::processUhfModuleStatus(uint8_t status){
|
||||
if(status != uint8_t(ModuleStatus::kChecking) && status != uint8_t(ModuleStatus::kNormal)
|
||||
&& status != uint8_t(ModuleStatus::kFault) && status != uint8_t(ModuleStatus::kUpgrading)){
|
||||
m_logger->error("UHF模块状态非法值, status = {}",status);
|
||||
return;
|
||||
}
|
||||
m_uhfModuleStatus = ModuleStatus(status);
|
||||
switch(m_uhfModuleStatus){
|
||||
case ModuleStatus::kChecking:
|
||||
ui->btnUHFModuleStatus->setToolTip("检测中");
|
||||
break;
|
||||
case ModuleStatus::kNormal:
|
||||
ui->btnUHFModuleStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnUHFModuleStatus->setToolTip("正常");
|
||||
break;
|
||||
case ModuleStatus::kFault:
|
||||
ui->btnUHFModuleStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
ui->btnUHFModuleStatus->setToolTip("故障");
|
||||
break;
|
||||
case ModuleStatus::kUpgrading:
|
||||
ui->btnUHFModuleStatus->setToolTip("升级中");
|
||||
break;
|
||||
}
|
||||
}
|
||||
void MainWindow::processTianTongModuleStatus(uint8_t status){
|
||||
if(status != uint8_t(ModuleStatus::kChecking) && status != uint8_t(ModuleStatus::kNormal)
|
||||
&& status != uint8_t(ModuleStatus::kFault) && status != uint8_t(ModuleStatus::kUpgrading)){
|
||||
m_logger->error("天通模块状态非法值, status = {}",status);
|
||||
return;
|
||||
}
|
||||
m_tiantongModuleStatus = ModuleStatus(status);
|
||||
switch(m_tiantongModuleStatus){
|
||||
case ModuleStatus::kChecking:
|
||||
ui->btnSModueStatus->setToolTip("检测中");
|
||||
break;
|
||||
case ModuleStatus::kNormal:
|
||||
ui->btnSModueStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnSModueStatus->setToolTip("正常");
|
||||
break;
|
||||
case ModuleStatus::kFault:
|
||||
ui->btnSModueStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
ui->btnSModueStatus->setToolTip("故障");
|
||||
break;
|
||||
case ModuleStatus::kUpgrading:
|
||||
ui->btnSModueStatus->setToolTip("升级中");
|
||||
break;
|
||||
}
|
||||
}
|
||||
void MainWindow::processBeiDouModuleStatus(uint8_t status){
|
||||
if(status != uint8_t(ModuleStatus::kChecking) && status != uint8_t(ModuleStatus::kNormal)
|
||||
&& status != uint8_t(ModuleStatus::kFault) && status != uint8_t(ModuleStatus::kUpgrading)){
|
||||
m_logger->error("北斗模块状态非法值, status = {}",status);
|
||||
return;
|
||||
}
|
||||
m_beidouModuleStatus = ModuleStatus(status);
|
||||
switch(m_beidouModuleStatus){
|
||||
case ModuleStatus::kChecking:
|
||||
ui->btnBeiDouModuleStatus->setToolTip("检测中");
|
||||
break;
|
||||
case ModuleStatus::kNormal:
|
||||
ui->btnBeiDouModuleStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnBeiDouModuleStatus->setToolTip("正常");
|
||||
break;
|
||||
case ModuleStatus::kFault:
|
||||
ui->btnBeiDouModuleStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
ui->btnBeiDouModuleStatus->setToolTip("故障");
|
||||
break;
|
||||
case ModuleStatus::kUpgrading:
|
||||
ui->btnBeiDouModuleStatus->setToolTip("升级中");
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 处理SIM卡状态
|
||||
void MainWindow::processUhfSimCardStatus(uint8_t status){
|
||||
if(status != uint8_t(SimCardStatus::kChecking) && status != uint8_t(SimCardStatus::kExist)
|
||||
&& status != uint8_t(SimCardStatus::kNotExist)){
|
||||
m_logger->error("UHF SIM卡状态非法值, status = {}",status);
|
||||
return;
|
||||
}
|
||||
m_uhfSimCardStatus = SimCardStatus(status);
|
||||
switch(m_uhfSimCardStatus){
|
||||
case SimCardStatus::kChecking:
|
||||
ui->btnUHFSimCardStatus->setToolTip("正在检测");
|
||||
break;
|
||||
case SimCardStatus::kExist:
|
||||
ui->btnUHFSimCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnUHFSimCardStatus->setToolTip("存在");
|
||||
break;
|
||||
case SimCardStatus::kNotExist:
|
||||
ui->btnUHFSimCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
ui->btnUHFSimCardStatus->setToolTip("不存在");
|
||||
break;
|
||||
}
|
||||
}
|
||||
void MainWindow::processTianTongSimCardStatus(uint8_t status){
|
||||
if(status != uint8_t(SimCardStatus::kChecking) && status != uint8_t(SimCardStatus::kExist)
|
||||
&& status != uint8_t(SimCardStatus::kNotExist)){
|
||||
m_logger->error("UHF SIM卡状态非法值, status = {}",status);
|
||||
return;
|
||||
}
|
||||
m_tiantongSimCardStatus = SimCardStatus(status);
|
||||
switch(m_tiantongSimCardStatus){
|
||||
case SimCardStatus::kChecking:
|
||||
ui->btnSSimCardStatus->setToolTip("正在检测");
|
||||
break;
|
||||
case SimCardStatus::kExist:
|
||||
ui->btnSSimCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnSSimCardStatus->setToolTip("存在");
|
||||
break;
|
||||
case SimCardStatus::kNotExist:
|
||||
ui->btnSSimCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
ui->btnSSimCardStatus->setToolTip("不存在");
|
||||
break;
|
||||
}
|
||||
}
|
||||
void MainWindow::processBeiDouSimCardStatus(uint8_t status){
|
||||
if(status != uint8_t(SimCardStatus::kChecking) && status != uint8_t(SimCardStatus::kExist)
|
||||
&& status != uint8_t(SimCardStatus::kNotExist)){
|
||||
m_logger->error("UHF SIM卡状态非法值, status = {}",status);
|
||||
return;
|
||||
}
|
||||
m_beidouSimCardStatus = SimCardStatus(status);
|
||||
switch(m_beidouSimCardStatus){
|
||||
case SimCardStatus::kChecking:
|
||||
ui->btnBeiDouSimCardStatus->setToolTip("正在检测");
|
||||
break;
|
||||
case SimCardStatus::kExist:
|
||||
ui->btnBeiDouSimCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnBeiDouSimCardStatus->setToolTip("存在");
|
||||
break;
|
||||
case SimCardStatus::kNotExist:
|
||||
ui->btnBeiDouSimCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
ui->btnBeiDouSimCardStatus->setToolTip("不存在");
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 处理M卡状态
|
||||
void MainWindow::processUhfMCardStatus(uint8_t status){
|
||||
if(status != uint8_t(MCardStatus::kChecking) && status != uint8_t(MCardStatus::kExistNotEncryted)
|
||||
&& status != uint8_t(MCardStatus::kExistEncryted)&& status != uint8_t(MCardStatus::kNotExist)){
|
||||
m_logger->error("UHF M卡状态非法值, status = {}",status);
|
||||
return;
|
||||
}
|
||||
m_uhfMCardStatus = MCardStatus(status);
|
||||
switch(m_uhfMCardStatus){
|
||||
case MCardStatus::kChecking:
|
||||
ui->btnUHFMCardStatus->setToolTip("正在检测");
|
||||
break;
|
||||
case MCardStatus::kExistNotEncryted:
|
||||
ui->btnUHFMCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnUHFMCardStatus->setToolTip("存在未注密");
|
||||
break;
|
||||
case MCardStatus::kExistEncryted:
|
||||
ui->btnUHFMCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnUHFMCardStatus->setToolTip("存在已注密");
|
||||
break;
|
||||
case MCardStatus::kNotExist:
|
||||
ui->btnUHFMCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
ui->btnUHFMCardStatus->setToolTip("不存在");
|
||||
break;
|
||||
}
|
||||
}
|
||||
void MainWindow::processTianTongMCardStatus(uint8_t status){
|
||||
if(status != uint8_t(MCardStatus::kChecking) && status != uint8_t(MCardStatus::kExistNotEncryted)
|
||||
&& status != uint8_t(MCardStatus::kExistEncryted)&& status != uint8_t(MCardStatus::kNotExist)){
|
||||
m_logger->error("天通M卡状态非法值, status = {}",status);
|
||||
return;
|
||||
}
|
||||
m_tiantongMCardStatus = MCardStatus(status);
|
||||
switch(m_tiantongMCardStatus){
|
||||
case MCardStatus::kChecking:
|
||||
ui->btnSMCardStatus->setToolTip("正在检测");
|
||||
break;
|
||||
case MCardStatus::kExistNotEncryted:
|
||||
ui->btnSMCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnSMCardStatus->setToolTip("存在未注密");
|
||||
break;
|
||||
case MCardStatus::kExistEncryted:
|
||||
ui->btnSMCardStatus->setIcon(QIcon(":/rc/res/card_green.png"));
|
||||
ui->btnSMCardStatus->setToolTip("存在已注密");
|
||||
break;
|
||||
case MCardStatus::kNotExist:
|
||||
ui->btnSMCardStatus->setIcon(QIcon(":/rc/res/card_gray.png"));
|
||||
ui->btnSMCardStatus->setToolTip("不存在");
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 处理网络访问状态
|
||||
void MainWindow::processUhfNetworkAccessStatus(uint8_t status){
|
||||
if(status != uint8_t(NetworkAccessStatus::kNotConnected)
|
||||
&& status != uint8_t(NetworkAccessStatus::kConnecting)
|
||||
&& status != uint8_t(NetworkAccessStatus::kConnectedDataIsNotActivated)
|
||||
&& status != uint8_t(NetworkAccessStatus::kConnectedDataIsActivated)){
|
||||
m_logger->error("uhf 入网状态非法值, status = {}",status);
|
||||
}
|
||||
m_uhfNetworkAccessStatus = NetworkAccessStatus(status);
|
||||
switch(m_uhfNetworkAccessStatus){
|
||||
case NetworkAccessStatus::kNotConnected:
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_gray.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->setToolTip("已入网, 数据未激活");
|
||||
break;
|
||||
case NetworkAccessStatus::kConnectedDataIsActivated:
|
||||
ui->btnUHFNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnUHFNetworkAccessStatus->setToolTip("已入网, 数据已激活");
|
||||
break;
|
||||
}
|
||||
}
|
||||
void MainWindow::processTianTongNetworkAccessStatus(uint8_t status){
|
||||
if(status == uint8_t(NetworkAccessStatus::kNotConnected)
|
||||
&& status == uint8_t(NetworkAccessStatus::kConnecting)
|
||||
&& status == uint8_t(NetworkAccessStatus::kConnectedDataIsNotActivated)
|
||||
&& status == uint8_t(NetworkAccessStatus::kConnectedDataIsActivated)){
|
||||
m_logger->error("天通入网状态非法值, status = {}",status);
|
||||
}
|
||||
m_tiantongNetworkAccessStatus = NetworkAccessStatus(status);
|
||||
switch(m_tiantongNetworkAccessStatus){
|
||||
case NetworkAccessStatus::kNotConnected:
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
ui->btnSNetworkAccessStatus->setToolTip("未入网");
|
||||
break;
|
||||
case NetworkAccessStatus::kConnecting:
|
||||
// ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_gray.png"));
|
||||
ui->btnSNetworkAccessStatus->setToolTip("正在入网");
|
||||
break;
|
||||
case NetworkAccessStatus::kConnectedDataIsNotActivated:
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnSNetworkAccessStatus->setToolTip("已入网, 数据未激活");
|
||||
break;
|
||||
case NetworkAccessStatus::kConnectedDataIsActivated:
|
||||
ui->btnSNetworkAccessStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
|
||||
ui->btnSNetworkAccessStatus->setToolTip("已入网, 数据已激活");
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 处理呼叫状态
|
||||
void MainWindow::processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call_status){
|
||||
if(tiantong_call_status != uint8_t(CallStatus::kIdle) && tiantong_call_status != uint8_t(CallStatus::kDialing)
|
||||
&& tiantong_call_status != uint8_t(CallStatus::kPeerRingTheBell) && tiantong_call_status != uint8_t(CallStatus::kOnLine)
|
||||
&& tiantong_call_status != uint8_t(CallStatus::kCallIsComing)){
|
||||
return;
|
||||
}
|
||||
if(uhf_call_status != uint8_t(CallStatus::kIdle) && uhf_call_status != uint8_t(CallStatus::kDialing)
|
||||
&& uhf_call_status != uint8_t(CallStatus::kPeerRingTheBell) && uhf_call_status != uint8_t(CallStatus::kOnLine)
|
||||
&& uhf_call_status != uint8_t(CallStatus::kCallIsComing)){
|
||||
return;
|
||||
}
|
||||
CallStatus m_tiantongCallStatus = CallStatus(tiantong_call_status);
|
||||
CallStatus m_uhfCallStaus = CallStatus(uhf_call_status);
|
||||
|
||||
//TODO: 会不会有冲突的情况?
|
||||
CallStatus status;
|
||||
if(m_tiantongCallStatus != CallStatus::kIdle){
|
||||
status = m_tiantongCallStatus;
|
||||
}else{
|
||||
status = m_uhfCallStaus;
|
||||
}
|
||||
switch(status){
|
||||
case CallStatus::kIdle://空闲
|
||||
//挂断电话
|
||||
ui->cmbCallNumber->setEnabled(true);
|
||||
ui->btnCallAnswer->show();
|
||||
ui->btnCallReject->hide();
|
||||
ui->lblCallStatus->setText("空闲中...");
|
||||
ui->lblCallDuration->hide();
|
||||
ShutdownTalkingTimer();
|
||||
break;
|
||||
case CallStatus::kDialing://拨号中
|
||||
case CallStatus::kPeerRingTheBell://对方振铃
|
||||
//拨号中
|
||||
ui->cmbCallNumber->setEnabled(false);
|
||||
ui->btnCallAnswer->hide();
|
||||
ui->btnCallReject->show();
|
||||
ui->lblCallStatus->setText("拨号中...");
|
||||
ui->lblCallDuration->hide();
|
||||
break;
|
||||
case CallStatus::kOnLine://通话中
|
||||
//通话中
|
||||
ui->cmbCallNumber->setEnabled(false);
|
||||
ui->btnCallAnswer->hide();
|
||||
ui->btnCallReject->show();
|
||||
ui->lblCallStatus->setText("通话中...");
|
||||
ui->lblCallDuration->show();
|
||||
StartupTalkingTimer();
|
||||
break;
|
||||
case CallStatus::kCallIsComing://来电中
|
||||
//有来电
|
||||
ui->cmbCallNumber->setEnabled(false);
|
||||
ui->btnCallAnswer->show();
|
||||
ui->btnCallReject->show();
|
||||
ui->lblCallStatus->setText("来电中...");
|
||||
ui->lblCallDuration->hide();
|
||||
break;
|
||||
}
|
||||
}
|
||||
//--------------------------------------------------------------------------------------
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
80
mainwindow.h
80
mainwindow.h
@@ -27,6 +27,7 @@ class QChart;
|
||||
class QBarCategoryAxis;
|
||||
class QValueAxis;
|
||||
class QTableWidgetItem;
|
||||
|
||||
class MainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -36,26 +37,24 @@ public:
|
||||
~MainWindow();
|
||||
void test1();
|
||||
private slots:
|
||||
void on_rdbChannelUHF_clicked();
|
||||
|
||||
void on_rdbChannelS_clicked();
|
||||
|
||||
void on_rdbChannelBeiDou_clicked();
|
||||
|
||||
void on_rdbChannelAuto_clicked();
|
||||
|
||||
void on_btnCallAnswer_clicked();
|
||||
|
||||
void on_btnCallReject_clicked();
|
||||
|
||||
void on_btnSendMessage_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 on_timer_timeout_1s();
|
||||
protected:
|
||||
void keyPressEvent(QKeyEvent* event) override;
|
||||
private:
|
||||
@@ -71,10 +70,6 @@ private:
|
||||
// 与底层消息交互
|
||||
//-------------------------------------------------
|
||||
bool sendUdpMessage(const QByteArray &udpMessage);
|
||||
bool call(const QString& number);
|
||||
bool hangUpCall();
|
||||
bool acceptCall();
|
||||
bool rejectCall();
|
||||
bool sendShortMessage(const QString &number,const QString& message);
|
||||
void processCommand(const QByteArray& cmd);
|
||||
void processTianTongVoiceCmd(const QByteArray& cmd);
|
||||
@@ -85,16 +80,73 @@ private:
|
||||
void processStatusReportCmd(const QByteArray& cmd);
|
||||
void processSearchSatelliteStatusReport(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);
|
||||
|
||||
void StartupTalkingTimer();
|
||||
void ShutdownTalkingTimer();
|
||||
void test();
|
||||
|
||||
std::pair<bool,Channel> selectChannel(CommType comm_type);
|
||||
|
||||
bool checkNumber(const QString& number);
|
||||
bool checkMessage(const QString& message);
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
CallStatus m_callStatus = CallStatus::kIdle;
|
||||
|
||||
// 呼叫状态
|
||||
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<Record> m_msgList;
|
||||
int m_unReadMsgCount = 0;
|
||||
int m_callDuration = 0;
|
||||
std::shared_ptr<QTimer> m_timer;
|
||||
|
||||
QTimer* m_timer;
|
||||
std::shared_ptr<QTimer> m_talkingTimer;
|
||||
std::shared_ptr<spdlog::logger> m_logger;
|
||||
std::shared_ptr<QUdpSocket> m_udpSocket;
|
||||
std::shared_ptr<QUdpSocket> m_udpServerSocket;
|
||||
|
||||
1441
mainwindow.ui
1441
mainwindow.ui
File diff suppressed because it is too large
Load Diff
10
msg.cpp
10
msg.cpp
@@ -65,23 +65,23 @@ QByteArray pack_uhf_answer(){
|
||||
return cmd;
|
||||
}
|
||||
|
||||
QByteArray pack_short_message_cmd(CommandType cmd_type,const std::string& number, const std::string& message){
|
||||
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(), '\0');
|
||||
pack_len(cmd,2 + 20 + message.size());
|
||||
cmd[COMMAND_TYPE_INDEX] = uint8_t(cmd_type);
|
||||
cmd[SUB_COMMAND_TYPE_INDEX] = uint8_t(ShortMessageSubCommandType::kSendMessage);
|
||||
memcpy(&cmd[COMMAND_DATA_BEGIN_INDEX],number.c_str(),number.size());
|
||||
memcpy(&cmd[COMMAND_DATA_BEGIN_INDEX+20],message.c_str(),message.size());
|
||||
memcpy(&cmd[COMMAND_DATA_BEGIN_INDEX+20],message.c_str(),message.size()*sizeof(char16_t));
|
||||
return cmd;
|
||||
}
|
||||
|
||||
QByteArray pack_tiantong_short_message_cmd(const std::string& number, const std::string& message){
|
||||
QByteArray pack_tiantong_short_message_cmd(const std::string& number, const std::u16string& message){
|
||||
return pack_short_message_cmd(CommandType::kTianTongShortMessage,number,message);
|
||||
}
|
||||
QByteArray pack_uhf_short_message_cmd(const std::string& number, const std::string& message){
|
||||
QByteArray pack_uhf_short_message_cmd(const std::string& number, const std::u16string& message){
|
||||
return pack_short_message_cmd(CommandType::kUhfShortMessage,number,message);
|
||||
}
|
||||
QByteArray pack_beidou_short_message_cmd(const std::string& number, const std::string& message){
|
||||
QByteArray pack_beidou_short_message_cmd(const std::string& number, const std::u16string& message){
|
||||
return pack_short_message_cmd(CommandType::kBeiDouShortMessage,number,message);
|
||||
}
|
||||
|
||||
10
msg.h
10
msg.h
@@ -48,7 +48,7 @@ enum class ModuleStatus: uint8_t{
|
||||
kUpgrading = 0x03, //升级中
|
||||
};
|
||||
|
||||
enum class ConnectedNetworkStatus: uint8_t{
|
||||
enum class NetworkAccessStatus: uint8_t{
|
||||
kNotConnected = 0x00, //未入网
|
||||
kConnecting = 0x01, //正在入网
|
||||
kConnectedDataIsNotActivated = 0x02, //已入网, 数据未激活
|
||||
@@ -64,7 +64,7 @@ enum class SimCardStatus: uint8_t{
|
||||
enum class MCardStatus: uint8_t{
|
||||
kChecking = 0x00,//正在检测
|
||||
kExistNotEncryted = 0x01,//存在未注密
|
||||
kExistEncryted = 0x02,//存在已注密码
|
||||
kExistEncryted = 0x02,//存在已注密
|
||||
kNotExist = 0x03,//不存在
|
||||
};
|
||||
|
||||
@@ -98,9 +98,9 @@ QByteArray pack_uhf_dial_cmd(const std::string& number);
|
||||
QByteArray pack_uhf_hang_up_cmd();
|
||||
QByteArray pack_uhf_answer();
|
||||
|
||||
QByteArray pack_tiantong_short_message_cmd(const std::string& number,const std::string& message);
|
||||
QByteArray pack_uhf_short_message_cmd(const std::string& number, const std::string& message);
|
||||
QByteArray pack_beidou_short_message_cmd(const std::string& number, const std::string& message);
|
||||
QByteArray pack_tiantong_short_message_cmd(const std::string& number,const std::u16string& message);
|
||||
QByteArray pack_uhf_short_message_cmd(const std::string& number, const std::u16string& message);
|
||||
QByteArray pack_beidou_short_message_cmd(const std::string& number, const std::u16string& message);
|
||||
|
||||
|
||||
#endif // MSG_H
|
||||
|
||||
4
res.qrc
4
res.qrc
@@ -3,8 +3,8 @@
|
||||
<file>res/call_cancelled.png</file>
|
||||
<file>res/circle_gray.png</file>
|
||||
<file>res/circle_green.png</file>
|
||||
<file>res/sim_gray.png</file>
|
||||
<file>res/sim_green.png</file>
|
||||
<file>res/card_gray.png</file>
|
||||
<file>res/card_green.png</file>
|
||||
<file>res/call_accepted.png</file>
|
||||
<file>res/call_gray.png</file>
|
||||
<file>res/first_page.png</file>
|
||||
|
||||
|
Before Width: | Height: | Size: 407 B After Width: | Height: | Size: 407 B |
|
Before Width: | Height: | Size: 433 B After Width: | Height: | Size: 433 B |
Reference in New Issue
Block a user