修改了一些问题
This commit is contained in:
@@ -15,6 +15,11 @@ RecordQuery::RecordQuery(QWidget *parent)
|
||||
ui->setupUi(this);
|
||||
InitDatabase();
|
||||
m_logger = spdlog::get("logger");
|
||||
QDateTime current = QDateTime::currentDateTime();
|
||||
ui->dteBeginTime->setDateTime(current.addYears(-1));
|
||||
QDate today = QDate::currentDate();
|
||||
QTime endOfDay(23, 59, 59);
|
||||
ui->dteEndTime->setDateTime(QDateTime(today, endOfDay));
|
||||
}
|
||||
|
||||
RecordQuery::~RecordQuery()
|
||||
@@ -116,7 +121,13 @@ void RecordQuery::UpdateRecordList(const std::vector<DbRecord>& records){
|
||||
ui->tblRecordList->setItem(rowIndex, column_index, item);
|
||||
column_index = column_index + 1;
|
||||
// 方向
|
||||
item = new QTableWidgetItem(r.direction==int(CommDirection::Receive)?"接收":"发送");
|
||||
QString s;
|
||||
if(r.type == int(CommType::Call)){
|
||||
s = (r.direction==int(CommDirection::Receive)?"来电":"去电");
|
||||
}else{
|
||||
s = (r.direction==int(CommDirection::Receive)?"接收":"发送");
|
||||
}
|
||||
item = new QTableWidgetItem(s);
|
||||
item->setTextAlignment(Qt::AlignCenter);
|
||||
ui->tblRecordList->setItem(rowIndex, column_index, item);
|
||||
column_index = column_index + 1;
|
||||
|
||||
147
mainwindow.cpp
147
mainwindow.cpp
@@ -82,7 +82,14 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
// // 获取 QComboBox 的 lineEdit 并设置校验器
|
||||
// ui->cmbCallNumber->lineEdit()->setValidator(validator);
|
||||
|
||||
|
||||
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_talkingTimer->stop();
|
||||
|
||||
m_timer = new QTimer(this);
|
||||
connect(m_timer, SIGNAL(timeout()), this, SLOT(onTimerTimeout1s()));
|
||||
@@ -180,6 +187,21 @@ void MainWindow::onTimerTimeout1s(){
|
||||
}
|
||||
m_tiantongNetworkAccessStatusGrayIcon = !m_tiantongNetworkAccessStatusGrayIcon;
|
||||
}
|
||||
// 呼叫状态
|
||||
CallStatus callStatus;
|
||||
if(m_uhfCallStatus != CallStatus::kIdle){
|
||||
callStatus = m_uhfCallStatus;
|
||||
}else{
|
||||
callStatus = m_tiantongCallStatus;
|
||||
}
|
||||
if(callStatus != CallStatus::kIdle && callStatus != CallStatus::kOnLine){
|
||||
if(m_callStatusLabelBlack){
|
||||
ui->lblCallStatus->setStyleSheet("color: green;");
|
||||
}else{
|
||||
ui->lblCallStatus->setStyleSheet("color: blue;");
|
||||
}
|
||||
m_callStatusLabelBlack = !m_callStatusLabelBlack;
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::keyPressEvent(QKeyEvent* event){
|
||||
@@ -190,29 +212,31 @@ void MainWindow::keyPressEvent(QKeyEvent* event){
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::StartupTalkingTimer(){
|
||||
if(m_talkingTimer){
|
||||
if(m_talkingTimer->isActive()){
|
||||
return;
|
||||
}
|
||||
m_callDuration = 0;
|
||||
m_talkingTimer->start(1000);
|
||||
}else{
|
||||
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);
|
||||
void MainWindow::StartupTalking(){
|
||||
if(m_talkingTimer->isActive()){
|
||||
return;
|
||||
}
|
||||
m_currentTalkingBeginTime = QDateTime::currentDateTime();
|
||||
m_callDuration = 0;
|
||||
m_talkingTimer->start(1000);
|
||||
}
|
||||
void MainWindow::ShutdownTalkingTimer(){
|
||||
if(m_talkingTimer){
|
||||
m_talkingTimer->stop();
|
||||
void MainWindow::ShutdownTalking(){
|
||||
if(!m_talkingTimer->isActive()){
|
||||
return;
|
||||
}
|
||||
|
||||
Record r;
|
||||
r.beginTime = m_currentTalkingBeginTime;
|
||||
r.channel = m_currentTalkingChan;
|
||||
r.type = CommType::Call;
|
||||
r.direction = m_currentTalkingDirection;
|
||||
r.number = QString::fromStdString(m_currentTalkingNumber);
|
||||
r.content = "";
|
||||
r.isUnread = true;
|
||||
r.callDuration = m_callDuration;
|
||||
m_recordQueryWidget->InsertRecord(r);
|
||||
|
||||
m_talkingTimer->stop();
|
||||
}
|
||||
|
||||
void MainWindow::readPendingDatagrams(){
|
||||
@@ -226,10 +250,8 @@ void MainWindow::readPendingDatagrams(){
|
||||
// 读取数据报
|
||||
m_udpServerSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);
|
||||
|
||||
//TODO:处理数据包
|
||||
|
||||
//m_logger->info("接收到udp消息, 长度 = {}, 数据 = {}",datagram.size(),datagram.toStdString());
|
||||
m_logger->info("Received a udp message, len = {}, data = {}",datagram.size(),datagram.toStdString());
|
||||
m_logger->info("Received a udp message, len = {}, data = {}",datagram.size(),datagram.toHex(' ').toStdString());
|
||||
|
||||
processCommand(datagram);
|
||||
}
|
||||
@@ -286,13 +308,6 @@ void MainWindow::test() {
|
||||
|
||||
m_recordQueryWidget->InsertRecords(m_msgList);
|
||||
|
||||
//通话中
|
||||
// ui->cmbCallNumber->setEnabled(false);
|
||||
// ui->btnCallAnswer->hide();
|
||||
// ui->btnCallReject->show();
|
||||
// ui->lblCallStatus->setText("通话中...");
|
||||
// ui->lblCallDuration->show();
|
||||
// StartupTalkingTimer();
|
||||
}
|
||||
|
||||
void MainWindow::test1(){
|
||||
@@ -599,7 +614,6 @@ bool MainWindow::checkNumber(const QString& number){
|
||||
return false;
|
||||
}
|
||||
// TODO: 检查电话号码格式是否满足要求
|
||||
|
||||
return true;
|
||||
}
|
||||
bool MainWindow::checkMessage(const QString& message){
|
||||
@@ -616,7 +630,6 @@ bool MainWindow::checkMessage(const QString& 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);
|
||||
@@ -649,6 +662,7 @@ void MainWindow::on_btnCallAnswer_clicked() {
|
||||
// 呼叫
|
||||
if(ui->rdbChannelUHF->isChecked()){
|
||||
sendUdpMessage(pack_uhf_dial_cmd(number.toStdString()));
|
||||
m_currentTalkingDirection = CommDirection::Send;
|
||||
}else if(ui->rdbChannelS->isChecked()){
|
||||
sendUdpMessage(pack_tiantong_dial_cmd(number.toStdString()));
|
||||
}else if(ui->rdbChannelAuto->isChecked()){
|
||||
@@ -746,6 +760,7 @@ void MainWindow::on_btnRecordQuery_clicked() {
|
||||
//--------------------------------------------------------------------------------------
|
||||
bool MainWindow::sendUdpMessage(const QByteArray &udpMessage) {
|
||||
const QHostAddress address(m_udpIp);
|
||||
m_logger->info("send a udp message, len = {}, data = {}",udpMessage.size(),udpMessage.toHex(' ').toStdString());
|
||||
if (m_udpSocket->writeDatagram(udpMessage, address, m_peerPort) !=
|
||||
udpMessage.size()) {
|
||||
//m_logger->error("发送udp消息错误");
|
||||
@@ -990,36 +1005,37 @@ void MainWindow::processStatusReportCmd(const QByteArray& cmd){
|
||||
//位置
|
||||
int32_t longitude_v = qFromLittleEndian<qint32>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));
|
||||
data_index += 4;
|
||||
float longitude = longitude_v * 0.000001;
|
||||
float longitude = longitude_v / 1e6;
|
||||
int32_t latitude_v = qFromLittleEndian<qint32>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));
|
||||
data_index += 4;
|
||||
float latitude = latitude_v * 0.000001;
|
||||
float latitude = latitude_v / 1e6;
|
||||
int32_t altitude_v = qFromLittleEndian<qint32>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));
|
||||
data_index += 4;
|
||||
float altitude = altitude_v * 0.1;
|
||||
float altitude = altitude_v / 10.0;
|
||||
//液压缸升降高度状态
|
||||
int16_t oil_level_position_v = qFromLittleEndian<qint16>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));
|
||||
data_index += 2;
|
||||
float oil_level_position = oil_level_position_v * 0.01;//米
|
||||
float oil_level_position = oil_level_position_v /1000.0;//米
|
||||
//自检状态
|
||||
//天线电源A电压
|
||||
int16_t antenna_power_supply_a_voltage_v = qFromLittleEndian<qint16>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));
|
||||
data_index += 2;
|
||||
float antenna_power_supply_a_voltage = antenna_power_supply_a_voltage_v * 0.001;//V
|
||||
float antenna_power_supply_a_voltage = antenna_power_supply_a_voltage_v / 1000.0;//V
|
||||
//天线电源A电流
|
||||
int16_t antenna_power_supply_a_current_v = qFromLittleEndian<qint16>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));
|
||||
data_index += 2;
|
||||
float antenna_power_supply_a_current = antenna_power_supply_a_current_v * 0.001;//A
|
||||
float antenna_power_supply_a_current = antenna_power_supply_a_current_v / 1000.0;//A
|
||||
//天线电源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_b_voltage_v * 0.001;//V
|
||||
float antenna_power_supply_b_voltage = antenna_power_supply_b_voltage_v / 1000.0;//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_b_current_v * 0.001;//A
|
||||
float antenna_power_supply_b_current = antenna_power_supply_b_current_v / 1000.0;//A
|
||||
//天线温度
|
||||
int16_t antenna_temperature = qFromLittleEndian<qint16>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));
|
||||
int16_t antenna_temperature_v = qFromLittleEndian<qint16>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));
|
||||
float antenna_temperature = antenna_temperature_v/100.0;
|
||||
data_index += 2;
|
||||
//UHF发送锁相环频综状态
|
||||
uint8_t phase_locked_loop_send = cmd[data_index++];
|
||||
@@ -1041,7 +1057,7 @@ void MainWindow::processStatusReportCmd(const QByteArray& cmd){
|
||||
processUhfMCardStatus(uhf_m_card_status);
|
||||
processTianTongMCardStatus(tiantong_m_card_status);
|
||||
//处理呼叫状态
|
||||
processCallStatus(tiantong_call_status,uhf_call_status);
|
||||
processCallStatus(tiantong_call_status,uhf_call_status,tiantong_number,uhf_number);
|
||||
// 处理信号强度,信号强度范围是否是0~100之间???
|
||||
m_uhfSignalStrength = uhf_satellite_signal_strength;
|
||||
m_tiantongSignalStrength = tiantong_satellite_signal_strength;
|
||||
@@ -1088,7 +1104,11 @@ void MainWindow::processSearchSatelliteStatusReport(const QByteArray& cmd){
|
||||
}
|
||||
int data_index = COMMAND_DATA_BEGIN_INDEX;
|
||||
uint8_t number_of_satellite = cmd[data_index++];//卫星数量
|
||||
//TODO: 做长度检查
|
||||
|
||||
if(cmd.size() < FRAME_MIN_LEN + 1 + 6* number_of_satellite){
|
||||
//m_logger->error("接收的搜星状态包长度错误, 卫星个数 = {}, 长度 = {}",number_of_satellite,cmd.size());
|
||||
m_logger->error("The received search satellite status packet length is incorrect, satellite_num = {}, len = {}",number_of_satellite,cmd.size());
|
||||
}
|
||||
|
||||
std::vector<SatelliteStatus> all_satellite_status;
|
||||
for(int i = 0 ; i < number_of_satellite; ++i){
|
||||
@@ -1370,7 +1390,7 @@ void MainWindow::processTianTongNetworkAccessStatus(uint8_t status){
|
||||
}
|
||||
}
|
||||
// 处理呼叫状态
|
||||
void MainWindow::processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call_status){
|
||||
void MainWindow::processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call_status,const std::string& tiantong_number,const std::string& uhf_number){
|
||||
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)){
|
||||
@@ -1381,15 +1401,17 @@ void MainWindow::processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call
|
||||
&& uhf_call_status != uint8_t(CallStatus::kCallIsComing)){
|
||||
return;
|
||||
}
|
||||
CallStatus m_tiantongCallStatus = CallStatus(tiantong_call_status);
|
||||
CallStatus m_uhfCallStaus = CallStatus(uhf_call_status);
|
||||
m_tiantongCallStatus = CallStatus(tiantong_call_status);
|
||||
m_uhfCallStatus = CallStatus(uhf_call_status);
|
||||
|
||||
//TODO: 会不会有冲突的情况?
|
||||
CallStatus status;
|
||||
Channel chan;
|
||||
if(m_tiantongCallStatus != CallStatus::kIdle){
|
||||
status = m_tiantongCallStatus;
|
||||
chan = Channel::S;
|
||||
}else{
|
||||
status = m_uhfCallStaus;
|
||||
status = m_uhfCallStatus;
|
||||
chan = Channel::Uhf;
|
||||
}
|
||||
switch(status){
|
||||
case CallStatus::kIdle://空闲
|
||||
@@ -1398,8 +1420,10 @@ void MainWindow::processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call
|
||||
ui->btnCallAnswer->show();
|
||||
ui->btnCallReject->hide();
|
||||
ui->lblCallStatus->setText("空闲中...");
|
||||
ui->lblCallStatus->setStyleSheet("color: black;");
|
||||
m_callStatusLabelBlack = true;
|
||||
ui->lblCallDuration->hide();
|
||||
ShutdownTalkingTimer();
|
||||
ShutdownTalking();
|
||||
break;
|
||||
case CallStatus::kDialing://拨号中
|
||||
//拨号中
|
||||
@@ -1419,16 +1443,37 @@ void MainWindow::processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call
|
||||
break;
|
||||
case CallStatus::kOnLine://通话中
|
||||
//通话中
|
||||
if(chan == Channel::S){
|
||||
m_currentTalkingNumber = tiantong_number;
|
||||
|
||||
ui->cmbCallNumber->setCurrentText(QString::fromStdString(tiantong_number));
|
||||
}else{
|
||||
m_currentTalkingNumber = uhf_number;
|
||||
ui->cmbCallNumber->setCurrentText(QString::fromStdString(uhf_number));
|
||||
}
|
||||
m_currentTalkingChan = chan;
|
||||
|
||||
ui->cmbCallNumber->setEnabled(false);
|
||||
ui->btnCallAnswer->hide();
|
||||
ui->btnCallReject->show();
|
||||
ui->lblCallStatus->setText("通话中...");
|
||||
ui->lblCallStatus->setStyleSheet("color: green;");
|
||||
m_callStatusLabelBlack = false;
|
||||
ui->lblCallDuration->show();
|
||||
StartupTalkingTimer();
|
||||
StartupTalking();
|
||||
break;
|
||||
case CallStatus::kCallIsComing://来电中
|
||||
//有来电
|
||||
ui->cmbCallNumber->setEnabled(false);
|
||||
if(chan == Channel::S){
|
||||
m_currentTalkingNumber = tiantong_number;
|
||||
ui->cmbCallNumber->setCurrentText(QString::fromStdString(tiantong_number));
|
||||
}else{
|
||||
m_currentTalkingNumber = uhf_number;
|
||||
ui->cmbCallNumber->setCurrentText(QString::fromStdString(uhf_number));
|
||||
}
|
||||
m_currentTalkingDirection = CommDirection::Receive;
|
||||
|
||||
ui->btnCallAnswer->show();
|
||||
ui->btnCallReject->show();
|
||||
ui->lblCallStatus->setText("来电中...");
|
||||
|
||||
12
mainwindow.h
12
mainwindow.h
@@ -94,10 +94,10 @@ private:
|
||||
// 处理网络访问状态
|
||||
void processUhfNetworkAccessStatus(uint8_t status);
|
||||
void processTianTongNetworkAccessStatus(uint8_t status);
|
||||
void processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call_status);
|
||||
void processCallStatus(uint8_t tiantong_call_status,uint8_t uhf_call_status,const std::string& tiantong_number,const std::string& uhf_number);
|
||||
|
||||
void StartupTalkingTimer();
|
||||
void ShutdownTalkingTimer();
|
||||
void StartupTalking();
|
||||
void ShutdownTalking();
|
||||
void test();
|
||||
|
||||
std::pair<QString,QString> parseReceivedShortMessage(const QByteArray& cmd,Channel chan);
|
||||
@@ -146,6 +146,12 @@ private:
|
||||
std::vector<Record> m_msgList;
|
||||
int m_unReadMsgCount = 0;
|
||||
int m_callDuration = 0;
|
||||
std::string m_currentTalkingNumber;
|
||||
QDateTime m_currentTalkingBeginTime;
|
||||
Channel m_currentTalkingChan;
|
||||
CommDirection m_currentTalkingDirection;
|
||||
bool m_callStatusLabelBlack = true;
|
||||
|
||||
|
||||
QString m_udpIp{"127.0.0.1"};
|
||||
uint16_t m_localPort{8000};
|
||||
|
||||
Reference in New Issue
Block a user