This commit is contained in:
shuibing811
2025-07-07 20:50:55 +08:00
parent 085233ab44
commit 1746823aea
7 changed files with 200 additions and 89 deletions

2
app.ini Normal file
View File

@@ -0,0 +1,2 @@
[config]
ip = "127.0.0.1"

View File

@@ -23,7 +23,9 @@
#include <QToolTip>
#include <QtEndian>
#include <QLineEdit>
#include <QRegularExpressionValidator>>
#include <QRegularExpressionValidator>
#include <QSettings>
#include <QCoreApplication>
#include "msg.h"
@@ -73,18 +75,25 @@ MainWindow::MainWindow(QWidget *parent)
// // 获取 QComboBox 的 lineEdit 并设置校验器
// ui->cmbCallNumber->lineEdit()->setValidator(validator);
QString exeDir = QCoreApplication::applicationDirPath();
QSettings settings(exeDir + "/app.ini", QSettings::IniFormat);
m_udpIp = settings.value("config/ip","127.0.0.1").toString();
m_timer = new QTimer(this);
connect(m_timer, SIGNAL(timeout()), this, SLOT(on_timer_timeout_1s()));
connect(m_timer, SIGNAL(timeout()), this, SLOT(onTimerTimeout1s()));
m_timer->start(1000);
//测试
test();
//test();
// QString s = "你是谁";
// m_logger->info(u8"{}---{}---{}",1,u8"水电费",s.toStdString());
}
MainWindow::~MainWindow() { delete ui; }
void MainWindow::on_timer_timeout_1s(){
void MainWindow::onTimerTimeout1s(){
//模块状态
if(m_uhfModuleStatus == ModuleStatus::kChecking){
if(m_uhfModuleStatus == ModuleStatus::kChecking || m_uhfModuleStatus == ModuleStatus::kUpgrading){
if(m_uhfModuleStatusGrayIcon){
ui->btnUHFModuleStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
}else{
@@ -92,7 +101,7 @@ void MainWindow::on_timer_timeout_1s(){
}
m_uhfModuleStatusGrayIcon = !m_uhfModuleStatusGrayIcon;
}
if(m_tiantongModuleStatus == ModuleStatus::kChecking){
if(m_tiantongModuleStatus == ModuleStatus::kChecking|| m_uhfModuleStatus == ModuleStatus::kUpgrading){
if(m_tiantongModuleStatusGrayIcon){
ui->btnSModueStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
}else{
@@ -100,7 +109,7 @@ void MainWindow::on_timer_timeout_1s(){
}
m_tiantongModuleStatusGrayIcon = !m_tiantongModuleStatusGrayIcon;
}
if(m_beidouModuleStatus == ModuleStatus::kChecking){
if(m_beidouModuleStatus == ModuleStatus::kChecking|| m_uhfModuleStatus == ModuleStatus::kUpgrading){
if(m_beidouModuleStatusGrayIcon){
ui->btnBeiDouModuleStatus->setIcon(QIcon(":/rc/res/circle_green.png"));
}else{
@@ -214,8 +223,9 @@ void MainWindow::readPendingDatagrams(){
m_udpServerSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);
//TODO:处理数据包
qDebug() << "Received datagram from" << sender.toString() << ":" << senderPort;
qDebug() << "Data:" << datagram;
//m_logger->info("接收到udp消息, 长度 = {}, 数据 = {}",datagram.size(),datagram.toStdString());
m_logger->info("Received a udp message, len = {}, data = {}",datagram.size(),datagram.toStdString());
processCommand(datagram);
}
@@ -272,9 +282,6 @@ void MainWindow::test() {
m_recordQueryWidget->InsertRecords(m_msgList);
m_logger->info("{}---{}---{}",1,"22",30);
//通话中
// ui->cmbCallNumber->setEnabled(false);
// ui->btnCallAnswer->hide();
@@ -312,8 +319,6 @@ void MainWindow::test1(){
UpdateMessageList();
m_recordQueryWidget->InsertRecord(m_msgList.back());
m_logger->info("111");
}
// 槽函数实现
@@ -699,8 +704,6 @@ void MainWindow::on_btnSendMessageByUhfOrS_clicked() {
void MainWindow::on_btnSendMessageByBeiDou_clicked()
{
test1();
return;
QString number = ui->cmbMessageNumberForBeiDou->currentText();
if(!checkNumber(number)){
return;
@@ -738,11 +741,12 @@ void MainWindow::on_btnRecordQuery_clicked() {
// 与底层消息交互
//--------------------------------------------------------------------------------------
bool MainWindow::sendUdpMessage(const QByteArray &udpMessage) {
const QHostAddress address("127.0.0.1");
const QHostAddress address(m_udpIp);
quint16 port = 8080;
if (m_udpSocket->writeDatagram(udpMessage, address, port) !=
udpMessage.size()) {
m_logger->error("发送udp消息错误");
//m_logger->error("发送udp消息错误");
m_logger->error("An error occurred when sending a udp message");
return false;
}
return true;
@@ -754,131 +758,204 @@ void MainWindow::processCommand(const QByteArray& cmd){
if(cmd.size() < 5){
return;
}
switch(cmd[COMMAND_TYPE_INDEX]){
case int(CommandType::kTianTongVoice):
switch(uint8_t(cmd[COMMAND_TYPE_INDEX])){
case uint8_t(CommandType::kTianTongVoice):
processTianTongVoiceCmd(cmd);
break;
case int(CommandType::kUhfVoice):
case uint8_t(CommandType::kUhfVoice):
processUhfVoiceCmd(cmd);
break;
case int(CommandType::kTianTongShortMessage):
case uint8_t(CommandType::kTianTongShortMessage):
processTianTongShortMessageCmd(cmd);
break;
case int(CommandType::kUhfShortMessage):
case uint8_t(CommandType::kUhfShortMessage):
processUhfShortMessageCmd(cmd);
break;
case int(CommandType::kBeiDouShortMessage):
case uint8_t(CommandType::kBeiDouShortMessage):
processBeiDouShortMessageCmd(cmd);
break;
case int(CommandType::kStatusReport):
case uint8_t(CommandType::kStatusReport):
processStatusReportCmd(cmd);
break;
case int(CommandType::kSearchSatelliteStatusReport):
case uint8_t(CommandType::kSearchSatelliteStatusReport):
processSearchSatelliteStatusReport(cmd);
break;
}
}
void MainWindow::processTianTongVoiceCmd(const QByteArray& cmd){
switch(cmd[SUB_COMMAND_TYPE_INDEX]){
case int(TianTongVoiceSubCommandType::kDial):
switch(uint8_t(cmd[SUB_COMMAND_TYPE_INDEX])){
case uint8_t(TianTongVoiceSubCommandType::kDial):
if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kSucess)){//拨号成功
//this->m_logger->info("天通拨号成功, 号码为: {}",ui->cmbCallNumber->currentText().toStdString());
this->m_logger->info("Tiantong: dial was successful, number : {}",ui->cmbCallNumber->currentText().toStdString());
}else if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kFailure)){//拨号失败
//this->m_logger->info("天通拨号失败, 号码为: {}",ui->cmbCallNumber->currentText().toStdString());
this->m_logger->info("The Tiantong: dial was failed, number : {}",ui->cmbCallNumber->currentText().toStdString());
}
break;
case int(TianTongVoiceSubCommandType::kHangUp):
case uint8_t(TianTongVoiceSubCommandType::kHangUp):
if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kSucess)){//挂机成功
//this->m_logger->info("天通挂机成功, 号码为: {}",ui->cmbCallNumber->currentText().toStdString());
this->m_logger->info("Tiantong: hang up was successful, number : {}",ui->cmbCallNumber->currentText().toStdString());
}else if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kFailure)){//挂机失败
//this->m_logger->info("天通挂机失败, 号码为: {}",ui->cmbCallNumber->currentText().toStdString());
this->m_logger->info("The Tiantong: hang up was failed, number : {}",ui->cmbCallNumber->currentText().toStdString());
}
break;
case int(TianTongVoiceSubCommandType::kAnswer):
case uint8_t(TianTongVoiceSubCommandType::kAnswer):
if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kSucess)){//接听成功
//this->m_logger->info("天通接听成功, 号码为: {}",ui->cmbCallNumber->currentText().toStdString());
this->m_logger->info("Tiantong: answer was successful, number : {}",ui->cmbCallNumber->currentText().toStdString());
}else if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kFailure)){//接听失败
//this->m_logger->info("天通接听失败, 号码为: {}",ui->cmbCallNumber->currentText().toStdString());
this->m_logger->info("The Tiantong: answer was failed, number : {}",ui->cmbCallNumber->currentText().toStdString());
}
break;
case int(TianTongVoiceSubCommandType::kSendKeysWhenOnLine):
case uint8_t(TianTongVoiceSubCommandType::kSendKeysWhenOnLine):
if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kSucess)){//通话中发送按键成功
//this->m_logger->info("天通按键发送成功");
this->m_logger->info("Tiantong: senting keys was successful");
}else if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kFailure)){//通话中发送按键失败
//this->m_logger->info("天通按键发送失败");
this->m_logger->info("The Tiantong: sending keys was successful");
}
break;
}
}
void MainWindow::processUhfVoiceCmd(const QByteArray& cmd){
switch(cmd[SUB_COMMAND_TYPE_INDEX]){
case int(UhfVoiceSubCommandType::kDial):
switch(uint8_t(cmd[SUB_COMMAND_TYPE_INDEX])){
case uint8_t(UhfVoiceSubCommandType::kDial):
if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kSucess)){//拨号成功
//this->m_logger->info("UHF拨号成功, 号码为: {}",ui->cmbCallNumber->currentText().toStdString());
this->m_logger->info("UHF: dial was successful, number : {}",ui->cmbCallNumber->currentText().toStdString());
}else if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kFailure)){//拨号失败
//this->m_logger->info("UHF拨号失败, 号码为: {}",ui->cmbCallNumber->currentText().toStdString());
this->m_logger->info("UHF: dial was failed, number : {}",ui->cmbCallNumber->currentText().toStdString());
}
break;
case int(UhfVoiceSubCommandType::kHangUp):
case uint8_t(UhfVoiceSubCommandType::kHangUp):
if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kSucess)){//挂机成功
//this->m_logger->info("UHF挂机成功, 号码为: {}",ui->cmbCallNumber->currentText().toStdString());
this->m_logger->info("UHF: hang up was successful, number : {}",ui->cmbCallNumber->currentText().toStdString());
}else if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kFailure)){//挂机失败
//this->m_logger->info("UHF挂机失败, 号码为: {}",ui->cmbCallNumber->currentText().toStdString());
this->m_logger->info("UHF: hang up was failed, number : {}",ui->cmbCallNumber->currentText().toStdString());
}
break;
case int(UhfVoiceSubCommandType::kAnswer):
case uint8_t(UhfVoiceSubCommandType::kAnswer):
if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kSucess)){//通话中发送按键成功
//this->m_logger->info("UHF接听成功, 号码为: {}",ui->cmbCallNumber->currentText().toStdString());
this->m_logger->info("UHF: answer was successful, number : {}",ui->cmbCallNumber->currentText().toStdString());
}else if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kFailure)){//通话中发送按键失败
//this->m_logger->info("UHF接听失败, 号码为: {}",ui->cmbCallNumber->currentText().toStdString());
this->m_logger->info("UHF: answer was failed, number : {}",ui->cmbCallNumber->currentText().toStdString());
}
break;
}
}
std::pair<QString,QString> MainWindow::parseReceivedShortMessage(const QByteArray& cmd,Channel chan){
QString number = QString::fromStdString(std::string(cmd.data()+COMMAND_DATA_BEGIN_INDEX,20));
const char16_t * s = (char16_t*)(cmd.constData() + FRAME_MIN_LEN + 20);
size_t len = (cmd.size() - (FRAME_MIN_LEN + 20))/2;
QString message = QString::fromUtf16(s,len);
Record r;
r.beginTime = QDateTime::currentDateTime();
r.channel = chan;
r.type = CommType::ShortMessage;
r.direction = CommDirection::Receive;
r.number = number;
r.content = message;
r.isUnread = true;
r.callDuration = 0;
m_msgList.push_back(r);
UpdateMessageList();
m_recordQueryWidget->InsertRecord(m_msgList.back());
return std::make_pair(number,message);
}
void MainWindow::processTianTongShortMessageCmd(const QByteArray& cmd){
switch(cmd[SUB_COMMAND_TYPE_INDEX]){
case int(ShortMessageSubCommandType::kSendMessage):
switch(uint8_t(cmd[SUB_COMMAND_TYPE_INDEX])){
case uint8_t(ShortMessageSubCommandType::kSendMessage):
if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kSucess)){//短消息发送成功
//this->m_logger->info("天通短消息发送成功, 号码为: {}",ui->cmbMessageNumberForUhfAndS->currentText().toStdString());
this->m_logger->info("Tiantong: the message was sent successfully, number: {}",ui->cmbMessageNumberForUhfAndS->currentText().toStdString());
}else if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kFailure)){//短消息发送失败
//this->m_logger->info("天通短消息发送失败, 号码为: {}",ui->cmbMessageNumberForUhfAndS->currentText().toStdString());
this->m_logger->info("Tiantong: short message sending failed, number: {}",ui->cmbMessageNumberForUhfAndS->currentText().toStdString());
}
break;
case int(ShortMessageSubCommandType::kRecvMessage):
case uint8_t(ShortMessageSubCommandType::kRecvMessage):
//接收到短消息
if(cmd.size() <= FRAME_MIN_LEN + 20){
this->m_logger->error("接收的天通短消息长度不足, 长度 = {}",cmd.size());
this->m_logger->error("Tiantong: The length of the received short message is insufficient, len = {}",cmd.size());
return;
}
auto r = parseReceivedShortMessage(cmd,Channel::S);
//this->m_logger->info("从天通接收到短消息, 号码为: {}, 消息: {}",r.first.toStdString(),r.second.toStdString());
this->m_logger->info("Tiantong: Received a short message, number: {}, message: {}",r.first.toStdString(),r.second.toStdString());
break;
}
}
void MainWindow::processUhfShortMessageCmd(const QByteArray& cmd){
switch(cmd[SUB_COMMAND_TYPE_INDEX]){
case int(ShortMessageSubCommandType::kSendMessage):
switch(uint8_t(cmd[SUB_COMMAND_TYPE_INDEX])){
case uint8_t(ShortMessageSubCommandType::kSendMessage):
if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kSucess)){//短消息发送成功
//this->m_logger->info("UHF短消息发送成功, 号码为: {}",ui->cmbMessageNumberForUhfAndS->currentText().toStdString());
this->m_logger->info("UHF: the message was sent successfully, number: {}",ui->cmbMessageNumberForUhfAndS->currentText().toStdString());
}else if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kFailure)){//短消息发送失败
//this->m_logger->info("UHF短消息发送失败, 号码为: {}",ui->cmbMessageNumberForUhfAndS->currentText().toStdString());
this->m_logger->info("UHF: short message sending failed, number: {}",ui->cmbMessageNumberForUhfAndS->currentText().toStdString());
}
break;
case int(ShortMessageSubCommandType::kRecvMessage):
case uint8_t(ShortMessageSubCommandType::kRecvMessage):
//接收到短消息
if(cmd.size() <= FRAME_MIN_LEN + 20){
//this->m_logger->error("接收的UHF短消息长度不足, 长度 = {}",cmd.size());
this->m_logger->error("UHF: The length of the received short message is insufficient, len = {}",cmd.size());
return;
}
auto r = parseReceivedShortMessage(cmd,Channel::Uhf);
//this->m_logger->info("从UHF接收到短消息, 号码为: {}, 消息: {}",r.first.toStdString(),r.second.toStdString());
this->m_logger->info("UHF: Received a short message, number: {}, message: {}",r.first.toStdString(),r.second.toStdString());
break;
}
}
void MainWindow::processBeiDouShortMessageCmd(const QByteArray& cmd){
switch(cmd[SUB_COMMAND_TYPE_INDEX]){
case int(ShortMessageSubCommandType::kSendMessage):
switch(uint8_t(cmd[SUB_COMMAND_TYPE_INDEX])){
case uint8_t(ShortMessageSubCommandType::kSendMessage):
if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kSucess)){//短消息发送成功
//this->m_logger->info("北斗短消息发送成功, 号码为: {}",ui->cmbMessageNumberForBeiDou->currentText().toStdString());
this->m_logger->info("BeiDou: the message was sent successfully, number: {}",ui->cmbMessageNumberForBeiDou->currentText().toStdString());
}else if(cmd[COMMAND_DATA_BEGIN_INDEX] == int(VoiceAndShortMessageReponse::kFailure)){//短消息发送失败
//this->m_logger->info("北斗短消息发送失败, 号码为: {}",ui->cmbMessageNumberForBeiDou->currentText().toStdString());
this->m_logger->info("BeiDou: the message sending failed, number: {}",ui->cmbMessageNumberForBeiDou->currentText().toStdString());
}
break;
case int(ShortMessageSubCommandType::kRecvMessage):
case uint8_t(ShortMessageSubCommandType::kRecvMessage):
//接收到短消息
if(cmd.size() <= FRAME_MIN_LEN + 20){
//this->m_logger->error("接收的北斗短消息长度不足, 长度 = {}",cmd.size());
this->m_logger->error("BeiDou: The length of the received short message is insufficient, len = {}",cmd.size());
return;
}
auto r = parseReceivedShortMessage(cmd,Channel::BeiDou);
//this->m_logger->info("从北斗接收到短消息, 号码为: {}, 消息: {}",r.first.toStdString(),r.second.toStdString());
this->m_logger->info("BeiDou: Received a short message, number: {}, message: {}",r.first.toStdString(),r.second.toStdString());
break;
}
}
void MainWindow::processStatusReportCmd(const QByteArray& cmd){
if(cmd[SUB_COMMAND_TYPE_INDEX] != 0){
if(cmd.size() != FRAME_MIN_LEN + 26 + 26 + 2 + 26){
//m_logger->error("接收的状态包长度错误, 长度 = {}",cmd.size());
m_logger->error("The received status packet length is incorrect, len = {}",cmd.size());
return;
}
if(uint8_t(cmd[SUB_COMMAND_TYPE_INDEX]) != 0){
return;
}
int data_index = COMMAND_DATA_BEGIN_INDEX;
@@ -930,11 +1007,14 @@ void MainWindow::processStatusReportCmd(const QByteArray& cmd){
//天线电源B电压
int16_t antenna_power_supply_b_voltage_v = qFromLittleEndian<qint16>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));
data_index += 2;
float antenna_power_supply_b_voltage = antenna_power_supply_a_voltage_v * 0.001;//V
float antenna_power_supply_b_voltage = antenna_power_supply_b_voltage_v * 0.001;//V
//天线电源B电流
int16_t antenna_power_supply_b_current_v = qFromLittleEndian<qint16>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));
data_index += 2;
float antenna_power_supply_b_current = antenna_power_supply_a_current_v * 0.001;//A
float antenna_power_supply_b_current = antenna_power_supply_b_current_v * 0.001;//A
//天线温度
int16_t antenna_temperature = qFromLittleEndian<qint16>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));
data_index += 2;
//UHF发送锁相环频综状态
uint8_t phase_locked_loop_send = cmd[data_index++];
//UHF接收锁相环频综状态
@@ -972,24 +1052,32 @@ void MainWindow::processStatusReportCmd(const QByteArray& cmd){
// 处理液压缸升降高度状态
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")
ui->lblAntennaPowerSupply->setText(QString("电源A电压 %1 V, 电源A电流 %2 A, 电源B电压 %3 V, 电源B电流 %4 A, 温度 %5")
.arg(antenna_power_supply_a_voltage).arg(antenna_power_supply_a_current)
.arg(antenna_power_supply_b_voltage).arg(antenna_power_supply_b_current));
.arg(antenna_power_supply_b_voltage).arg(antenna_power_supply_b_current)
.arg(antenna_temperature));
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);
//m_logger->error("UHF发送锁相环频综非法值, phase_locked_loop_send = {}",phase_locked_loop_send);
m_logger->error("UHF: send phase locked loop illegal value, 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);
//m_logger->error("UHF接收锁相环频综非法值, phase_locked_loop_recv = {}",phase_locked_loop_recv);
m_logger->error("UHF: recv phase locked loop illegal value, phase_locked_loop_recv = {}",phase_locked_loop_send);
}
ui->lblPhaseLockedLoop->setText(s);
}
void MainWindow::processSearchSatelliteStatusReport(const QByteArray& cmd){
if(cmd[SUB_COMMAND_TYPE_INDEX] != 0){
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;
}
if(uint8_t(cmd[SUB_COMMAND_TYPE_INDEX]) != 0){
return;
}
int data_index = COMMAND_DATA_BEGIN_INDEX;
@@ -1027,7 +1115,8 @@ void MainWindow::processSearchSatelliteStatusReport(const QByteArray& cmd){
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);
//m_logger->error("UHF模块状态非法值, status = {}",status);
m_logger->error("UHF: module status illegal value, status = {}",status);
return;
}
m_uhfModuleStatus = ModuleStatus(status);
@@ -1051,7 +1140,8 @@ void MainWindow::processUhfModuleStatus(uint8_t status){
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);
//m_logger->error("天通模块状态非法值, status = {}",status);
m_logger->error("Tiantong: module status illegal value, status = {}",status);
return;
}
m_tiantongModuleStatus = ModuleStatus(status);
@@ -1075,7 +1165,8 @@ void MainWindow::processTianTongModuleStatus(uint8_t status){
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);
//m_logger->error("北斗模块状态非法值, status = {}",status);
m_logger->error("BeiDou: module status status illegal value, status = {}",status);
return;
}
m_beidouModuleStatus = ModuleStatus(status);
@@ -1100,7 +1191,8 @@ void MainWindow::processBeiDouModuleStatus(uint8_t status){
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);
//m_logger->error("UHF SIM卡状态非法值, status = {}",status);
m_logger->error("UHF: sim card status illegal value, status = {}",status);
return;
}
m_uhfSimCardStatus = SimCardStatus(status);
@@ -1121,7 +1213,8 @@ void MainWindow::processUhfSimCardStatus(uint8_t status){
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);
//m_logger->error("TianTong SIM卡状态非法值, status = {}",status);
m_logger->error("Tiantong: sim card status illegal value, status = {}",status);
return;
}
m_tiantongSimCardStatus = SimCardStatus(status);
@@ -1142,7 +1235,8 @@ void MainWindow::processTianTongSimCardStatus(uint8_t status){
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);
//m_logger->error("北斗 SIM卡状态非法值, status = {}",status);
m_logger->error("BeiDou: sim card status illegal value, status = {}",status);
return;
}
m_beidouSimCardStatus = SimCardStatus(status);
@@ -1164,7 +1258,8 @@ void MainWindow::processBeiDouSimCardStatus(uint8_t status){
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);
//m_logger->error("UHF M卡状态非法值, status = {}",status);
m_logger->error("UHF: m card status illegal value, status = {}",status);
return;
}
m_uhfMCardStatus = MCardStatus(status);
@@ -1189,7 +1284,8 @@ void MainWindow::processUhfMCardStatus(uint8_t status){
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);
//m_logger->error("天通M卡状态非法值, status = {}",status);
m_logger->error("Tiantong: m card status illegal value, status = {}",status);
return;
}
m_tiantongMCardStatus = MCardStatus(status);
@@ -1217,7 +1313,8 @@ void MainWindow::processUhfNetworkAccessStatus(uint8_t status){
&& status != uint8_t(NetworkAccessStatus::kConnecting)
&& status != uint8_t(NetworkAccessStatus::kConnectedDataIsNotActivated)
&& status != uint8_t(NetworkAccessStatus::kConnectedDataIsActivated)){
m_logger->error("uhf 入网状态非法值, status = {}",status);
//m_logger->error("uhf 入网状态非法值, status = {}",status);
m_logger->error("UHF: network access status illegal value, status = {}",status);
}
m_uhfNetworkAccessStatus = NetworkAccessStatus(status);
switch(m_uhfNetworkAccessStatus){
@@ -1243,7 +1340,8 @@ void MainWindow::processTianTongNetworkAccessStatus(uint8_t status){
&& status == uint8_t(NetworkAccessStatus::kConnecting)
&& status == uint8_t(NetworkAccessStatus::kConnectedDataIsNotActivated)
&& status == uint8_t(NetworkAccessStatus::kConnectedDataIsActivated)){
m_logger->error("天通入网状态非法值, status = {}",status);
//m_logger->error("天通入网状态非法值, status = {}",status);
m_logger->error("Tiantong: network access status illegal value, status = {}",status);
}
m_tiantongNetworkAccessStatus = NetworkAccessStatus(status);
switch(m_tiantongNetworkAccessStatus){
@@ -1298,7 +1396,6 @@ void MainWindow::processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call
ShutdownTalkingTimer();
break;
case CallStatus::kDialing://拨号中
case CallStatus::kPeerRingTheBell://对方振铃
//拨号中
ui->cmbCallNumber->setEnabled(false);
ui->btnCallAnswer->hide();
@@ -1306,6 +1403,14 @@ void MainWindow::processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call
ui->lblCallStatus->setText("拨号中...");
ui->lblCallDuration->hide();
break;
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);

View File

@@ -54,7 +54,7 @@ private slots:
void handleHovered(bool status, int index, QBarSet *barset);
void on_timer_timeout_1s();
void onTimerTimeout1s();
protected:
void keyPressEvent(QKeyEvent* event) override;
private:
@@ -100,6 +100,8 @@ private:
void ShutdownTalkingTimer();
void test();
std::pair<QString,QString> parseReceivedShortMessage(const QByteArray& cmd,Channel chan);
std::pair<bool,Channel> selectChannel(CommType comm_type);
bool checkNumber(const QString& number);
@@ -145,6 +147,8 @@ private:
int m_unReadMsgCount = 0;
int m_callDuration = 0;
QString m_udpIp{"127.0.0.1"};
QTimer* m_timer;
std::shared_ptr<QTimer> m_talkingTimer;
std::shared_ptr<spdlog::logger> m_logger;

View File

@@ -913,7 +913,7 @@
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>天线电源 </string>
<string>天线 </string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>

View File

@@ -1,8 +1,6 @@
#include "msg.h"
#include <QtEndian>
#define FRAME_MIN_LEN 5
void pack_len(QByteArray& cmd,uint16_t len){
uint16_t v = qToBigEndian(len);
memcpy(&cmd[0],reinterpret_cast<const char*>(&v),2);
@@ -67,8 +65,8 @@ QByteArray pack_uhf_answer(){
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());
QByteArray cmd(FRAME_MIN_LEN+20+message.size()*sizeof(char16_t), '\0');
pack_len(cmd,2 + 20 + message.size()*sizeof(char16_t));
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());

1
msg.h
View File

@@ -8,6 +8,7 @@
#define COMMAND_TYPE_INDEX 2
#define SUB_COMMAND_TYPE_INDEX 3
#define COMMAND_DATA_BEGIN_INDEX 4
#define FRAME_MIN_LEN 5
enum class CommandType : uint8_t{
kTianTongVoice = 0xA0,

1
note.txt Normal file
View File

@@ -0,0 +1 @@
1.打电话时发送按键的处理