调试
This commit is contained in:
271
mainwindow.cpp
271
mainwindow.cpp
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
6
msg.cpp
6
msg.cpp
@@ -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
1
msg.h
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user