add rn signal paint

This commit is contained in:
168492376 2025-07-06 17:57:05 +08:00
parent 9b5e481c9e
commit 840846982d
13 changed files with 732 additions and 88 deletions

View File

@ -32,7 +32,8 @@ SOURCES += \
src/cpp/statusTestWin.cpp \
src/cpp/precisionTestWin.cpp \
src/cpp/testThread.cpp \
src/cpp/rnSignalPainter.cpp
src/cpp/rnSignalPainter.cpp \
src/cpp/rdSignalPainter.cpp
HEADERS += \
src/include/posTestWin.h \
@ -43,6 +44,7 @@ HEADERS += \
src/include/msgInputWin.h \
src/include/precisionTestWin.h \
src/include/qcustomplot.h \
src/include/rdSignalPainter.h \
src/include/rnSignalPainter.h \
src/include/serialport.h \
src/include/sqlitedb.h \
@ -52,6 +54,7 @@ HEADERS += \
src/include/utils.h
FORMS += \
src/ui/rdSignalPainter.ui \
src/ui/rnSignalPainter.ui \
src/ui/precisionTestWin.ui \
src/ui/posTestWin.ui \

View File

@ -127,6 +127,12 @@ MainWindow::MainWindow(QWidget *parent)
connect(this,SIGNAL(recvIidSignal(QString)),ui->statusTestWdg,SLOT(recvIidHandle(QString)),Qt::QueuedConnection);
connect(this,SIGNAL(recvIcmSignal(QString)),ui->statusTestWdg,SLOT(recvIcmHandle(QString)),Qt::QueuedConnection);
connect(this,SIGNAL(recvPmuSignal(QString)),ui->statusTestWdg,SLOT(recvPmuHandle(QString)),Qt::QueuedConnection);
//定位检测
connect(ui->posTestWdg,SIGNAL(writeDataSignal(QByteArray)),this,SIGNAL(writeDataSignal(QByteArray)),Qt::QueuedConnection);
connect(this,SIGNAL(recvBidSignal(QString)),ui->posTestWdg,SLOT(recvBidHandle(QString)),Qt::QueuedConnection);
connect(this,SIGNAL(recvGsvSignal(QString)),ui->posTestWdg,SIGNAL(recvGsvSignal(QString)),Qt::QueuedConnection);
connect(this,SIGNAL(recvGgaSignal(QString)),ui->posTestWdg,SLOT(recvGgaHandle(QString)),Qt::QueuedConnection);
}
MainWindow::~MainWindow()
@ -177,6 +183,12 @@ void MainWindow::receiverSerialDataHandle(const QByteArray &data)
emit recvIcmSignal(cmd);
}else if(cmd.startsWith("$BDPMU")){
emit recvPmuSignal(cmd);
}else if(cmd.startsWith("$BDBID")){
emit recvBidSignal(cmd);
}else if(cmd.startsWith("$BDGSV") || cmd.startsWith("$GPGSV") || cmd.startsWith("$GBGSV")){
emit recvGsvSignal(cmd);
}else if(cmd.contains(QRegularExpression("^[$][A-Z]{2}GGA"))){
emit recvGgaSignal(cmd);
}
}
}

View File

@ -1,5 +1,7 @@
#include "posTestWin.h"
#include "ui_posTestWin.h"
#include "utils.h"
#include "globalParams.h"
#include <QPushButton>
#include <qDebug>
@ -13,6 +15,8 @@ PosTestWin::PosTestWin(QWidget *parent)
ui->gpbRnTest->setVisible(true);
ui->gpbRnSignal->setVisible(false);
connect(this,SIGNAL(recvGsvSignal(QString)),ui->rnSignalPainterWdg,SLOT(recvGsvHandle(QString)),Qt::QueuedConnection);
rnModel = new QStandardItemModel(this);
rnSelect = new QItemSelectionModel(rnModel);
rnModel->setColumnCount(10);
@ -41,7 +45,7 @@ PosTestWin::PosTestWin(QWidget *parent)
QFont font = ui->tableViewRn->font();
font.setBold(true);
QFont smallFont = font;
smallFont.setPointSize(font.pointSize()-2);
//smallFont.setPointSize(font.pointSize()-2);
smallFont.setBold(false);
QList<QStandardItem *> aItemList;
@ -79,43 +83,57 @@ PosTestWin::PosTestWin(QWidget *parent)
b1cBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
b1cBtn->setFont(smallFont);
b1cBtn->setDefault(true);
b1cBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(2,0),b1cBtn);
connect(b1cBtn,SIGNAL(clicked()),this,SLOT(b1cBtn_clicked()),Qt::QueuedConnection);
QPushButton *b3cBtn = new QPushButton("B3频点C码定位");
b3cBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
b3cBtn->setFont(smallFont);
b3cBtn->setDefault(true);
b3cBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(3,0),b3cBtn);
connect(b3cBtn,SIGNAL(clicked()),this,SLOT(b3cBtn_clicked()),Qt::QueuedConnection);
QPushButton *b1b3cBtn = new QPushButton("B1+B3频点C码定位");
b1b3cBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
b1b3cBtn->setFont(smallFont);
b1b3cBtn->setDefault(true);
b1b3cBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(4,0),b1b3cBtn);
connect(b1b3cBtn,SIGNAL(clicked()),this,SLOT(b1b3cBtn_clicked()),Qt::QueuedConnection);
QPushButton *gpsBtn = new QPushButton("GPS频点C码定位");
gpsBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
gpsBtn->setFont(smallFont);
gpsBtn->setDefault(true);
gpsBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(5,0),gpsBtn);
connect(gpsBtn,SIGNAL(clicked()),this,SLOT(gpsBtn_clicked()),Qt::QueuedConnection);
QPushButton *b1pBtn = new QPushButton("B1频点P码定位");
b1pBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
b1pBtn->setFont(smallFont);
b1pBtn->setDefault(true);
b1pBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(6,0),b1pBtn);
connect(b1pBtn,SIGNAL(clicked()),this,SLOT(b1pBtn_clicked()),Qt::QueuedConnection);
QPushButton *b3pBtn = new QPushButton("B3频点P码定位");
b3pBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
b3pBtn->setFont(smallFont);
b3pBtn->setDefault(true);
b3pBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(7,0),b3pBtn);
connect(b3pBtn,SIGNAL(clicked()),this,SLOT(b3pBtn_clicked()),Qt::QueuedConnection);
QPushButton *compatibleBtn = new QPushButton("兼容定位");
compatibleBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
compatibleBtn->setFont(smallFont);
compatibleBtn->setDefault(true);
compatibleBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(8,0),compatibleBtn);
connect(compatibleBtn,SIGNAL(clicked()),this,SLOT(compatibleBtn_clicked()),Qt::QueuedConnection);
rnModel->item(0,2)->setText("定位结果");
rnModel->item(0,2)->setFont(font);
@ -156,6 +174,7 @@ PosTestWin::PosTestWin(QWidget *parent)
viewB1CBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
viewB1CBtn->setFont(smallFont);
viewB1CBtn->setDefault(true);
viewB1CBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(2,10),viewB1CBtn);
connect(viewB1CBtn,SIGNAL(clicked()),this,SLOT(view_signal_clicked()),Qt::QueuedConnection);
@ -163,6 +182,7 @@ PosTestWin::PosTestWin(QWidget *parent)
viewB3CBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
viewB3CBtn->setFont(smallFont);
viewB3CBtn->setDefault(true);
viewB3CBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(3,10),viewB3CBtn);
connect(viewB3CBtn,SIGNAL(clicked()),this,SLOT(view_signal_clicked()),Qt::QueuedConnection);
@ -170,6 +190,7 @@ PosTestWin::PosTestWin(QWidget *parent)
viewB1B3CBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
viewB1B3CBtn->setFont(smallFont);
viewB1B3CBtn->setDefault(true);
viewB1B3CBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(4,10),viewB1B3CBtn);
connect(viewB1B3CBtn,SIGNAL(clicked()),this,SLOT(view_signal_clicked()),Qt::QueuedConnection);
@ -177,6 +198,7 @@ PosTestWin::PosTestWin(QWidget *parent)
viewGPSBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
viewGPSBtn->setFont(smallFont);
viewGPSBtn->setDefault(true);
viewGPSBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(5,10),viewGPSBtn);
connect(viewGPSBtn,SIGNAL(clicked()),this,SLOT(view_signal_clicked()),Qt::QueuedConnection);
@ -184,6 +206,7 @@ PosTestWin::PosTestWin(QWidget *parent)
viewB1PBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
viewB1PBtn->setFont(smallFont);
viewB1PBtn->setDefault(true);
viewB1PBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(6,10),viewB1PBtn);
connect(viewB1PBtn,SIGNAL(clicked()),this,SLOT(view_signal_clicked()),Qt::QueuedConnection);
@ -191,6 +214,7 @@ PosTestWin::PosTestWin(QWidget *parent)
viewB3PBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
viewB3PBtn->setFont(smallFont);
viewB3PBtn->setDefault(true);
viewB3PBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(7,10),viewB3PBtn);
connect(viewB3PBtn,SIGNAL(clicked()),this,SLOT(view_signal_clicked()),Qt::QueuedConnection);
@ -198,6 +222,7 @@ PosTestWin::PosTestWin(QWidget *parent)
viewCompatibleBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
viewCompatibleBtn->setFont(smallFont);
viewCompatibleBtn->setDefault(true);
viewCompatibleBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRn->setIndexWidget(rnModel->index(8,10),viewCompatibleBtn);
connect(viewCompatibleBtn,SIGNAL(clicked()),this,SLOT(view_signal_clicked()),Qt::QueuedConnection);
@ -209,24 +234,28 @@ PosTestWin::PosTestWin(QWidget *parent)
rdPosBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
rdPosBtn->setFont(font);
rdPosBtn->setDefault(true);
rdPosBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRd->setIndexWidget(rdModel->index(2,0),rdPosBtn);
QPushButton *rdContinuePosBtn = new QPushButton("RDSS连续定位");
rdContinuePosBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
rdContinuePosBtn->setFont(font);
rdContinuePosBtn->setDefault(true);
rdContinuePosBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRd->setIndexWidget(rdModel->index(3,0),rdContinuePosBtn);
QPushButton *rdEmergencyPosBtn = new QPushButton("RDSS紧急定位");
rdEmergencyPosBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
rdEmergencyPosBtn->setFont(font);
rdEmergencyPosBtn->setDefault(true);
rdEmergencyPosBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRd->setIndexWidget(rdModel->index(4,0),rdEmergencyPosBtn);
QPushButton *rdStopContinuePosBtn = new QPushButton("结束RDSS连续定位");
rdStopContinuePosBtn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
rdStopContinuePosBtn->setFont(font);
rdStopContinuePosBtn->setDefault(true);
rdStopContinuePosBtn->setCursor(Qt::PointingHandCursor);
ui->tableViewRd->setIndexWidget(rdModel->index(5,0),rdStopContinuePosBtn);
rdModel->item(0,2)->setText("定位结果");
@ -251,6 +280,127 @@ PosTestWin::~PosTestWin()
delete ui;
}
void PosTestWin::recvBidHandle(const QString &cmd)
{
QStringList paras = extractParaList(cmd);
if(paras.size()==2){
QString mode = paras[0];
QString code = paras[1];
if(mode=="1"){
globalParams::curRnPosMode = "B3"+code;
}else if(mode=="2"){
globalParams::curRnPosMode = QString("B1%1+B3%2").arg(code,code);
}else if(mode=="3"){
globalParams::curRnPosMode = "B1"+code;
}else if(mode=="5"){
globalParams::curRnPosMode = "L1"+code;
}else if(mode=="8"){
globalParams::curRnPosMode = QString("B3%1+L1%2").arg(code,code);;
}else{
globalParams::curRnPosMode = "";
}
}
}
void PosTestWin::recvGgaHandle(const QString &cmd)
{
QStringList paras = extractParaList(cmd);
if(paras.size()<14){
return;
}
QString time = paras[0];
bool ok;
QString lat = paras[1];
double dlat = lat.toDouble(&ok);
QString latitude,longitude,altitude;
if(ok){
dlat = degreeSecond2degree(dlat);
latitude = QString("%1°").arg(dlat,0,'f',8,QChar('0'));
}else{
latitude = "";
}
QString lon = paras[3];
double dlon = lon.toDouble(&ok);
if(ok){
dlon = degreeSecond2degree(dlon);
longitude = QString("%1°").arg(dlon,0,'f',8,QChar('0'));
}else{
longitude = "";
}
if(longitude.size()>latitude.size()){
while (longitude.size()>latitude.size()) {
latitude.append(" ");
}
}else if(longitude.size()<latitude.size()){
while (longitude.size()<latitude.size()) {
longitude.append(" ");
}
}
if(!latitude.isEmpty()){
latitude.append(paras[2]);
}
if(!longitude.isEmpty()){
longitude.append(paras[4]);
}
QString high = paras[8];
float fhigh = high.toFloat(&ok);
if(ok){
fhigh = fhigh + paras[10].toFloat();
altitude = QString("%1 m").arg(fhigh,0,'f',4,QChar('0'));
}else{
altitude = "";
}
QString status = paras[5];
QString satelliteCounts = paras[6];
QString hdop = paras[7];
QString vdop;
if(paras.size()>=15){
vdop = paras[14];
}
int row = -1;
if(globalParams::curRnPosMode=="B1C"){
row = 2;
}else if(globalParams::curRnPosMode=="B3C"){
row = 3;
}else if(globalParams::curRnPosMode=="B1C+B3C"){
row = 4;
}else if(globalParams::curRnPosMode=="L1C"){
row = 5;
}else if(globalParams::curRnPosMode=="B1P"){
row = 6;
}else if(globalParams::curRnPosMode=="B3P"){
row = 7;
}else if(globalParams::curRnPosMode=="B3C+L1C"){
row = 8;
}
if(status.toInt()!=0){
if(row >=0){
rnModel->item(row,2)->setText(time);
rnModel->item(row,3)->setText(longitude);
rnModel->item(row,4)->setText(latitude);
rnModel->item(row,5)->setText(altitude);
rnModel->item(row,7)->setText(vdop);
rnModel->item(row,8)->setText(hdop);
rnModel->item(row,9)->setText(satelliteCounts);
}
}else{
if(row >=0){
rnModel->item(row,2)->setText("");
rnModel->item(row,3)->setText("");
rnModel->item(row,4)->setText("");
rnModel->item(row,5)->setText("");
rnModel->item(row,7)->setText("");
rnModel->item(row,8)->setText("");
rnModel->item(row,9)->setText("");
}
}
}
void PosTestWin::on_btnRdTest_clicked()
{
ui->gpbRdTest->setVisible(true);
@ -273,3 +423,138 @@ void PosTestWin::view_signal_clicked()
ui->gpbRnSignal->setVisible(true);
}
void PosTestWin::on_btnBack_clicked()
{
ui->gpbRdTest->setVisible(false);
ui->gpbRnTest->setVisible(true);
ui->gpbRnSignal->setVisible(false);
}
void PosTestWin::b1cBtn_clicked()
{
for(int i=2;i<=9;i++){
rnModel->item(2,i)->setText("");
}
ui->tableViewRn->selectRow(2);
enableOnlyOneViewBtn(2);
QString cmd = "$CCMSS,Z,1,B1,C,,,,*16\r\n";
emit writeDataSignal(cmd.toLatin1());
}
void PosTestWin::b3cBtn_clicked()
{
for(int i=2;i<=9;i++){
rnModel->item(3,i)->setText("");
}
ui->tableViewRn->selectRow(3);
enableOnlyOneViewBtn(3);
QString cmd = "$CCMSS,Z,1,B3,C,,,,*14\r\n";
emit writeDataSignal(cmd.toLatin1());
}
void PosTestWin::b1b3cBtn_clicked()
{
for(int i=2;i<=9;i++){
rnModel->item(4,i)->setText("");
}
ui->tableViewRn->selectRow(4);
enableOnlyOneViewBtn(4);
QString cmd = "$CCMSS,Z,1,B3,C,B1,C,,*24\r\n";
emit writeDataSignal(cmd.toLatin1());
}
void PosTestWin::gpsBtn_clicked()
{
for(int i=2;i<=9;i++){
rnModel->item(5,i)->setText("");
}
ui->tableViewRn->selectRow(5);
enableOnlyOneViewBtn(5);
QString cmd = "$CCMSS,Z,1,L1,C,,,,*18\r\n";
emit writeDataSignal(cmd.toLatin1());
}
void PosTestWin::b1pBtn_clicked()
{
for(int i=2;i<=9;i++){
rnModel->item(6,i)->setText("");
}
ui->tableViewRn->selectRow(6);
enableOnlyOneViewBtn(6);
QString cmd = "$CCMSS,Z,1,B1,P,,,,*05\r\n";
emit writeDataSignal(cmd.toLatin1());
}
void PosTestWin::b3pBtn_clicked()
{
for(int i=2;i<=9;i++){
rnModel->item(7,i)->setText("");
}
ui->tableViewRn->selectRow(7);
enableOnlyOneViewBtn(7);
QString cmd = "$CCMSS,Z,1,B3,P,,,,*07\r\n";
emit writeDataSignal(cmd.toLatin1());
}
void PosTestWin::compatibleBtn_clicked()
{
for(int i=2;i<=9;i++){
rnModel->item(8,i)->setText("");
}
ui->tableViewRn->selectRow(8);
enableOnlyOneViewBtn(8);
QString cmd = "$CCMSS,Z,1,B3,C,L1,C,,*2A\r\n";
emit writeDataSignal(cmd.toLatin1());
}
void PosTestWin::enableOnlyOneViewBtn(int row)
{
QPushButton *viewB1CBtn = qobject_cast<QPushButton *>(ui->tableViewRn->indexWidget(rnModel->index(2,10)));
QPushButton *viewB3CBtn = qobject_cast<QPushButton *>(ui->tableViewRn->indexWidget(rnModel->index(3,10)));
QPushButton *viewB1B3CBtn = qobject_cast<QPushButton *>(ui->tableViewRn->indexWidget(rnModel->index(4,10)));
QPushButton *viewGPSBtn = qobject_cast<QPushButton *>(ui->tableViewRn->indexWidget(rnModel->index(5,10)));
QPushButton *viewB1PBtn = qobject_cast<QPushButton *>(ui->tableViewRn->indexWidget(rnModel->index(6,10)));
QPushButton *viewB3PBtn = qobject_cast<QPushButton *>(ui->tableViewRn->indexWidget(rnModel->index(7,10)));
QPushButton *viewCompatibleBtn = qobject_cast<QPushButton *>(ui->tableViewRn->indexWidget(rnModel->index(8,10)));
viewB1CBtn->setEnabled(false);
viewB3CBtn->setEnabled(false);
viewB1B3CBtn->setEnabled(false);
viewGPSBtn->setEnabled(false);
viewB1PBtn->setEnabled(false);
viewB3PBtn->setEnabled(false);
viewCompatibleBtn->setEnabled(false);
switch (row) {
case 2:
viewB1CBtn->setEnabled(true);
break;
case 3:
viewB3CBtn->setEnabled(true);
break;
case 4:
viewB1B3CBtn->setEnabled(true);
break;
case 5:
viewGPSBtn->setEnabled(true);
break;
case 6:
viewB1PBtn->setEnabled(true);
break;
case 7:
viewB3PBtn->setEnabled(true);
break;
case 8:
viewCompatibleBtn->setEnabled(true);
break;
default:
break;
}
}

View File

@ -0,0 +1,14 @@
#include "rdSignalPainter.h"
#include "ui_rdSignalPainter.h"
RdSignalPainter::RdSignalPainter(QWidget *parent)
: QWidget(parent)
, ui(new Ui::RdSignalPainter)
{
ui->setupUi(this);
}
RdSignalPainter::~RdSignalPainter()
{
delete ui;
}

View File

@ -1,13 +1,20 @@
#include "rnSignalPainter.h"
#include "ui_rnSignalPainter.h"
#include "globalParams.h"
#include "utils.h"
#include <QPainter>
#include <QDebug>
RnSignalPainter::RnSignalPainter(QWidget *parent)
: QWidget(parent)
, ui(new Ui::RnSignalPainter)
{
ui->setupUi(this);
timerSnrTimeout = new QTimer(this);
timerSnrTimeout->stop();
timerSnrTimeout->setInterval(2000);
connect(timerSnrTimeout,SIGNAL(timeout()),this,SLOT(timerSnrTimeoutHandle()),Qt::QueuedConnection);
timerSnrTimeout->start();
}
RnSignalPainter::~RnSignalPainter()
@ -15,6 +22,62 @@ RnSignalPainter::~RnSignalPainter()
delete ui;
}
void RnSignalPainter::recvGsvHandle(const QString &cmd)
{
QString sys;
sys = cmd.mid(1,2);
if(sys=="GB"){
sys = "BD";
}
QStringList paras = extractParaList(cmd);
if(paras.size()<3){
return;
}
QString feq = "";
if(paras.size()%4==0){
feq = paras[paras.size()-1];
}
for(int i=0;i<(paras.size()-3)/4;i++){
QString satNum = paras[3+i*4].trimmed();
QString cnr = paras[3+i*4+3].trimmed();
if(satNum.isEmpty() || cnr.isEmpty()){
continue;
}
QPair<QString,QString> key(satNum,feq);
if(sys=="GP"){
gpsSnrMap[key] = cnr;
gpsTimeoutCountMap[key] = 0;
}else if(sys=="BD"){
bdSnrMap[key] = cnr;
bdsTimeoutCountMap[key] = 0;
}
}
update();
}
void RnSignalPainter::timerSnrTimeoutHandle()
{
for(QPair<QString,QString> key:gpsTimeoutCountMap.keys()){
gpsTimeoutCountMap[key]++;
if(gpsTimeoutCountMap[key]>=2){
gpsSnrMap.remove(key);
gpsTimeoutCountMap.remove(key);
}
}
for(QPair<QString,QString> key:bdsTimeoutCountMap.keys()){
bdsTimeoutCountMap[key]++;
if(bdsTimeoutCountMap[key]>=2){
bdSnrMap.remove(key);
bdsTimeoutCountMap.remove(key);
}
}
update();
}
void RnSignalPainter::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
@ -25,20 +88,116 @@ void RnSignalPainter::paintEvent(QPaintEvent *event)
pen.setColor(Qt::black);
pen.setStyle(Qt::SolidLine);
painter.setPen(pen);
QBrush brush;
brush.setStyle(Qt::SolidPattern);
int H=this->height(); //绘图区高度
int H = this->height(); //绘图区高度
int W = this->width();
QFontMetrics fontMetrics = painter.fontMetrics();
int fontHeight = fontMetrics.height();
int margin = 5;
int spacing = 5;
painter.drawText(margin,margin+fontMetrics.ascent(),QString("当前定位模式:%1").arg(globalParams::curRnPosMode));
QString posMode;
if(globalParams::curRnPosMode=="B3C"){
posMode = "B3频点C码定位";
}else if(globalParams::curRnPosMode=="B3P"){
posMode = "B3频点P码定位";
}else if(globalParams::curRnPosMode=="B1C+B3C"){
posMode = "B1+B3频点C码定位";
}else if(globalParams::curRnPosMode=="B1P+B3P"){
posMode = "B1+B3频点P码定位";
}else if(globalParams::curRnPosMode=="B1C"){
posMode = "B1频点C码定位";
}else if(globalParams::curRnPosMode=="B1P"){
posMode = "B1频点P码定位";
}else if(globalParams::curRnPosMode=="L1C"){
posMode = "GPS频点C码定位";
}else if(globalParams::curRnPosMode=="B3C+L1C"){
posMode = "兼容定位";
}else{
posMode = globalParams::curRnPosMode;
}
painter.drawText(margin,margin+fontMetrics.ascent(),QString("当前定位模式:%1").arg(posMode));
//BD坐标轴
int yb0 = (H-margin*2)/2-margin-fontMetrics.height();
QString tmp = "北斗卫星信号";
int xb0 = margin*2 + fontMetrics.horizontalAdvance(tmp);
int hb = yb0 - margin*2 - fontMetrics.height()*2;
int wb = W - margin*2 - fontMetrics.horizontalAdvance(tmp);
painter.drawText(margin,yb0-hb/2,tmp);
painter.drawLine(xb0,yb0,xb0+wb,yb0);
painter.drawLine(xb0,yb0,xb0,yb0-hb);
//GP坐标轴
int yg0 = H-margin-fontMetrics.height();
tmp = "GPS卫星信号";
int xg0 = xb0;
int hg = hb;
int wg = wb;
painter.drawText(margin,yg0-hg/2,tmp);
painter.drawLine(xg0,yg0,xg0+wg,yg0);
painter.drawLine(xg0,yg0,xg0,yg0-hg);
//坐标轴
int sw = fontMetrics.horizontalAdvance("00.0");
//BD信号
int xb = xb0+margin;
for(const QPair<QString,QString> &key:bdSnrMap.keys()){
double strength = bdSnrMap.value(key).toDouble();
QString satNum = key.first;
QString feq = key.second;
int red = 255 - feq.toInt(nullptr,16)*10;
QColor color = QColor(red,0,0);
brush.setColor(color);
painter.setBrush(brush);
xb = xb + margin;
int w0 = fontMetrics.horizontalAdvance(satNum);//宽度
painter.drawText(xb+(sw-w0)/2,yb0+fontMetrics.ascent(),satNum);
//int h = std::min(strength,50.0);
int h = std::min(hb/50.0*strength,hb*1.0);
int y = yb0-h;
QRect rect(xb,y,sw,h);
painter.drawRect(rect);
QString str = QString("%1").arg(strength,0,'g',3);
int w1 = fontMetrics.horizontalAdvance(str);//宽度
painter.drawText(xb+(sw-w1)/2,y-margin/2-fontMetrics.descent(),str);
xb = xb + sw;
}
//GPS信号
int xg = xb0+margin;
for(const QPair<QString,QString> &key:gpsSnrMap.keys()){
double strength = gpsSnrMap.value(key).toDouble();
QString satNum = key.first;
QString feq = key.second;
int green = 255 - feq.toInt(nullptr,16)*10;
QColor color = QColor(0,green,0);
brush.setColor(color);
painter.setBrush(brush);
xg = xg + margin;
int w0 = fontMetrics.horizontalAdvance(satNum);//宽度
painter.drawText(xg+(sw-w0)/2,yg0+fontMetrics.ascent(),satNum);
//int h = std::min(strength,50.0);
int h = std::min(hb/50.0*strength,hg*1.0);
int y = yg0-h;
QRect rect(xg,y,sw,h);
painter.drawRect(rect);
QString str = QString("%1").arg(strength,0,'g',3);
int w1 = fontMetrics.horizontalAdvance(str);//宽度
painter.drawText(xg+(sw-w1)/2,y-margin/2-fontMetrics.descent(),str);
xg = xg + sw;
}
return QWidget::paintEvent(event);
}

View File

@ -92,3 +92,11 @@ QStringList extractParaList(const QString &msg)
}
return paraList;
}
double degreeSecond2degree(double degreeSecond)
{
double degree = floor(degreeSecond/100);
double second = degreeSecond - degree*100;
double result = degree + second/60;
return result;
}

View File

@ -27,6 +27,9 @@ signals:
void recvIidSignal(const QString &cmd);
void recvIcmSignal(const QString &cmd);
void recvPmuSignal(const QString &cmd);
void recvBidSignal(const QString &cmd);
void recvGsvSignal(const QString &cmd);
void recvGgaSignal(const QString &cmd);
private slots:
void receiverSerialDataHandle(const QByteArray &data);

View File

@ -17,10 +17,24 @@ public:
explicit PosTestWin(QWidget *parent = nullptr);
~PosTestWin();
signals:
void writeDataSignal(const QByteArray &buf);
void recvGsvSignal(const QString &cmd);
private slots:
void recvBidHandle(const QString &cmd);
void recvGgaHandle(const QString &cmd);
void on_btnRdTest_clicked();
void on_btnRnTest_clicked();
void on_btnBack_clicked();
void view_signal_clicked();
void b1cBtn_clicked();
void b3cBtn_clicked();
void b1b3cBtn_clicked();
void gpsBtn_clicked();
void b1pBtn_clicked();
void b3pBtn_clicked();
void compatibleBtn_clicked();
private:
Ui::PosTestWin *ui;
@ -28,6 +42,7 @@ private:
QItemSelectionModel *rnSelect;
QStandardItemModel *rdModel;
QItemSelectionModel *rdSelect;
void enableOnlyOneViewBtn(int row);
};
#endif // POSTESTWIN_H

View File

@ -0,0 +1,22 @@
#ifndef RDSIGNALPAINTER_H
#define RDSIGNALPAINTER_H
#include <QWidget>
namespace Ui {
class RdSignalPainter;
}
class RdSignalPainter : public QWidget
{
Q_OBJECT
public:
explicit RdSignalPainter(QWidget *parent = nullptr);
~RdSignalPainter();
private:
Ui::RdSignalPainter *ui;
};
#endif // RDSIGNALPAINTER_H

View File

@ -2,6 +2,8 @@
#define RNSIGNALPAINTER_H
#include <QWidget>
#include <QMap>
#include <QTimer>
namespace Ui {
class RnSignalPainter;
@ -15,11 +17,20 @@ public:
explicit RnSignalPainter(QWidget *parent = nullptr);
~RnSignalPainter();
private slots:
void recvGsvHandle(const QString &cmd);
void timerSnrTimeoutHandle();
protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
private:
Ui::RnSignalPainter *ui;
QTimer *timerSnrTimeout;
QMap<QPair<QString,QString>,QString> bdSnrMap;
QMap<QPair<QString,QString>,QString> gpsSnrMap;
QMap<QPair<QString,QString>,int> gpsTimeoutCountMap;
QMap<QPair<QString,QString>,int> bdsTimeoutCountMap;
};
#endif // RNSIGNALPAINTER_H

View File

@ -9,4 +9,6 @@ void base64_decode(const unsigned char *code,int code_len,unsigned char *res,int
QStringList extractParaList(const QString &msg);
double degreeSecond2degree(double degreeSecond);
#endif // UTILS_H

View File

@ -25,6 +25,32 @@
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QTableView" name="tableViewRn">
<property name="palette">
<palette>
<active/>
<inactive>
<colorrole role="Highlight">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>120</green>
<blue>215</blue>
</color>
</brush>
</colorrole>
<colorrole role="HighlightedText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled/>
</palette>
</property>
<property name="styleSheet">
<string notr="true">QTableView
{
@ -81,6 +107,9 @@
</item>
<item>
<widget class="QPushButton" name="btnRnAutoTest">
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string>自动测试</string>
</property>
@ -104,6 +133,9 @@
</item>
<item>
<widget class="QPushButton" name="btnSave">
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string>保存</string>
</property>
@ -127,6 +159,9 @@
</item>
<item>
<widget class="QPushButton" name="btnRdTest">
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string>RDSS定位测试</string>
</property>
@ -164,7 +199,7 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="RnSignalPainter" name="widget" native="true">
<widget class="RnSignalPainter" name="rnSignalPainterWdg" native="true">
<property name="minimumSize">
<size>
<width>0</width>
@ -173,6 +208,66 @@
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string/>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer_8">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>174</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnBack">
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string>返回</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
@ -184,11 +279,11 @@
<property name="title">
<string/>
</property>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,2">
<item>
<widget class="QWidget" name="widget_2" native="true"/>
<layout class="QGridLayout" name="gridLayout_2" columnstretch="1,2">
<item row="0" column="0">
<widget class="QWidget" name="rdSignalPainterWdg" native="true"/>
</item>
<item>
<item row="0" column="1">
<widget class="QGroupBox" name="groupBox_2">
<property name="styleSheet">
<string notr="true">QGroupBox{border:none;}</string>
@ -202,6 +297,9 @@
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
@ -251,89 +349,82 @@
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string/>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string/>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnRdAutoTest">
<property name="text">
<string>自动测试</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnRnTest">
<property name="text">
<string>RNSS定位测试</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_7">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_4">
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnRdAutoTest">
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string>自动测试</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnRnTest">
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string>RNSS定位测试</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_7">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>

19
src/ui/rdSignalPainter.ui Normal file
View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>RdSignalPainter</class>
<widget class="QWidget" name="RdSignalPainter">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
</widget>
<resources/>
<connections/>
</ui>