Skip to content

Commit 15445ce

Browse files
committed
rtksvr: implement automated antenna selection, pos in static mode
Implement the automated antenna type selection along with the antenna delta from the input stream, from an RTCM or raw stream, the config options ant{1,2}-anttype="*". Have the config options ant{1,2}-postype RTCM and raw automatically set the position, and independently of the antenna type, and now including for the rover when in fixed mode. Previously only an antenna delta would be picked up as an offset to a base position, including a RTCM height, and only when the position was also being automatically set and only for the base and not the rover. If the antenna type is empty then the delta is still applied but the GUI apps were disabling input of the delta in this case. If the GUI apps have the antenna type check box off then the type is considered empty but the delta can still be supplied and will be applied. This allows a delta from a marker to an antenna ARP to be supplied in the GUI apps even when the antenna does not have an antenna type supplied. When the antenna type is enabled in the GUI apps and set to '*' (for auto) then the delta is still applied until it is updated from the RTCM or raw stream, so it is still enabled in this case in the GUI to allow setting an initial delta. Winapp: Enable the rcv and sat PCV check-boxes in relative modes as these can be applied, as already done for the qt app. There was no separate 'raw' antenna automated position mode, this is included under the 'rtcm' option.
1 parent 8caf06a commit 15445ce

20 files changed

Lines changed: 327 additions & 206 deletions

app/consapp/rtkrcv/rtkrcv.c

Lines changed: 68 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -364,41 +364,69 @@ static int readcmd(const char *file, char *cmd, int type)
364364
fclose(fp);
365365
return 1;
366366
}
367-
/* read antenna file ---------------------------------------------------------*/
368-
static void readant(vt_t *vt, prcopt_t *opt, nav_t *nav)
369-
{
370-
const pcv_t pcv0={0};
371-
pcvs_t pcvr={0},pcvs={0};
372-
pcv_t *pcv;
373-
gtime_t time=timeget();
374-
int i;
375-
376-
trace(3,"readant:\n");
367+
/* Read antenna file ---------------------------------------------------------*/
368+
static void readant(vt_t *vt, prcopt_t *opt, nav_t *nav, pcvs_t *pcvsr) {
369+
trace(3,"readant:\n");
377370

378-
opt->pcvr[0]=opt->pcvr[1]=pcv0;
379-
if (!*filopt.rcvantp) return;
380-
381-
if (readpcv(filopt.rcvantp,&pcvr)) {
382-
for (i=0;i<2;i++) {
383-
if (!*opt->anttype[i]) continue;
384-
if (!(pcv=searchpcv(0,opt->anttype[i],time,&pcvr))) {
385-
vt_printf(vt,"no antenna %s in %s",opt->anttype[i],filopt.rcvantp);
386-
continue;
387-
}
388-
opt->pcvr[i]=*pcv;
371+
const pcv_t pcv0 = {0};
372+
opt->pcvr[0] = opt->pcvr[1] = pcv0;
373+
374+
if (*filopt.rcvantp) {
375+
gtime_t time = timeget();
376+
if (readpcv(filopt.rcvantp, pcvsr)) {
377+
for (int i = 0; i < 2; i++) {
378+
if (!*opt->anttype[i] || !strcmp(opt->anttype[i], "*")) continue;
379+
pcv_t *pcv = searchpcv(0, opt->anttype[i], time, pcvsr);
380+
if (!pcv) {
381+
vt_printf(vt, "no antenna %s in %s", opt->anttype[i], filopt.rcvantp);
382+
continue;
383+
}
384+
opt->pcvr[i] = *pcv;
385+
}
386+
} else
387+
vt_printf(vt, "antenna file open error %s", filopt.rcvantp);
388+
}
389+
390+
if (*filopt.satantp) {
391+
pcvs_t pcvs = {0};
392+
if (readpcv(filopt.satantp, &pcvs)) {
393+
gtime_t time = timeget();
394+
#ifdef TRACE
395+
int found[MAXSAT] = {0}, missing = 0;
396+
#endif
397+
for (int i = 0; i < MAXSAT; i++) {
398+
pcv_t *pcv = searchpcv(i + 1, "", time, &pcvs);
399+
if (!pcv) {
400+
#ifdef TRACE
401+
missing++;
402+
#endif
403+
continue;
389404
}
390-
}
391-
else vt_printf(vt,"antenna file open error %s",filopt.rcvantp);
392-
393-
if (readpcv(filopt.satantp,&pcvs)) {
394-
for (i=0;i<MAXSAT;i++) {
395-
if (!(pcv=searchpcv(i+1,"",time,&pcvs))) continue;
396-
nav->pcvs[i]=*pcv;
405+
nav->pcvs[i]=*pcv;
406+
#ifdef TRACE
407+
found[i] = 1;
408+
#endif
409+
}
410+
free_pcvs(&pcvs);
411+
#ifdef TRACE
412+
if (missing > 0) {
413+
// Report satellites not found.
414+
char satlst[MAXSAT * 4] = "", *p = satlst;
415+
for (int i = 0; i < MAXSAT; i++) {
416+
if (!found[i]) {
417+
char id[8];
418+
satno2id(i + 1, id);
419+
int len = strlen(satlst);
420+
if (len + strlen(id) > sizeof(satlst) - 1) continue;
421+
p += sprintf(p, " %s", id);
422+
}
397423
}
398-
}
399-
else vt_printf(vt,"antenna file open error %s",filopt.satantp);
400-
401-
free(pcvr.pcv); free(pcvs.pcv);
424+
trace(2, "Satellites missing pcv in %s:%s\n", filopt.satantp, satlst);
425+
}
426+
#endif
427+
} else
428+
vt_printf(vt, "antenna file open error %s", filopt.satantp);
429+
}
402430
}
403431
/* start rtk server ----------------------------------------------------------*/
404432
static int startsvr(vt_t *vt)
@@ -442,9 +470,9 @@ static int startsvr(vt_t *vt)
442470
pos[1]=nmeapos[1]*D2R;
443471
pos[2]=nmeapos[2];
444472
pos2ecef(pos,npos);
445-
473+
446474
/* read antenna file */
447-
readant(vt,&prcopt,&svr.nav);
475+
readant(vt,&prcopt,&svr.nav,&svr.pcvsr);
448476

449477
/* read dcb file */
450478
if (*filopt.dcb) {
@@ -488,6 +516,7 @@ static int startsvr(vt_t *vt)
488516
solopt,&moni,errmsg)) {
489517
trace(2,"rtk server start error (%s)\n",errmsg);
490518
vt_printf(vt,"rtk server start error (%s)\n",errmsg);
519+
free_pcvs(&svr.pcvsr);
491520
return 0;
492521
}
493522
return 1;
@@ -522,7 +551,9 @@ static void stopsvr(vt_t *vt)
522551
}
523552
#endif
524553
if (solopt[0].geoid>0) closegeoid();
525-
554+
555+
free_pcvs(&svr.pcvsr);
556+
526557
vt_printf(vt,"stop rtk server\n");
527558
}
528559
/* print time ----------------------------------------------------------------*/
@@ -773,10 +804,10 @@ static void prstatus(vt_t *vt)
773804
vt_printf(vt,"%-28s: %d\n","# of average single pos base",nave);
774805
vt_printf(vt,"%-28s: %s\n","ant type rover",rtk->opt.pcvr[0].type);
775806
del=rtk->opt.antdel[0];
776-
vt_printf(vt,"%-28s: %.3f %.3f %.3f\n","ant delta rover",del[0],del[1],del[2]);
807+
vt_printf(vt,"%-28s: %.4f %.4f %.4f\n","ant delta rover",del[0],del[1],del[2]);
777808
vt_printf(vt,"%-28s: %s\n","ant type base" ,rtk->opt.pcvr[1].type);
778809
del=rtk->opt.antdel[1];
779-
vt_printf(vt,"%-28s: %.3f %.3f %.3f\n","ant delta base",del[0],del[1],del[2]);
810+
vt_printf(vt,"%-28s: %.4f %.4f %.4f\n","ant delta base",del[0],del[1],del[2]);
780811
ecef2enu(pos,rtk->rb+3,vel);
781812
vt_printf(vt,"%-28s: %.3f,%.3f,%.3f\n","vel enu (m/s) base",
782813
vel[0],vel[1],vel[2]);

app/qtapp/appcmn_qt/navi_post_opt.cpp

Lines changed: 57 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,7 @@ OptDialog::OptDialog(QWidget *parent, int opts)
347347

348348
if (options == PostOptions) {
349349
refPosModel->item(6)->setFlags(refPosModel->item(6)->flags() & ~Qt::ItemIsEnabled); // disable "RTCM/Raw Antenna Position"
350+
rovPosModel->item(6)->setFlags(refPosModel->item(6)->flags() & ~Qt::ItemIsEnabled); // disable "RTCM/Raw Antenna Position"
350351
} else if (options == NaviOptions) {
351352
refPosModel->item(4)->setFlags(refPosModel->item(4)->flags() & ~Qt::ItemIsEnabled); // disable "Get from Position File"
352353
refPosModel->item(5)->setFlags(refPosModel->item(5)->flags() & ~Qt::ItemIsEnabled); // disable "RINEX Header Position"
@@ -656,7 +657,7 @@ void OptDialog::updateOptions()
656657
QLineEdit *editu[] = {ui->lERoverPosition1, ui->lERoverPosition2, ui->lERoverPosition3 };
657658
QLineEdit *editr[] = {ui->lEReferencePosition1, ui->lEReferencePosition2, ui->lEReferencePosition3 };
658659
pcvs_t pcvr;
659-
pcv_t *pcv, pcv0;
660+
pcv_t pcv0;
660661
gtime_t time = timeget();
661662

662663
memset(&pcvr, 0, sizeof(pcvs_t));
@@ -775,53 +776,53 @@ void OptDialog::updateOptions()
775776
processingOptions.rovpos = POSOPT_POS_LLH;
776777
if (ui->cBRoverPositionType->currentIndex() < 2) processingOptions.rovpos = POSOPT_POS_LLH;
777778
else if (ui->cBRoverPositionType->currentIndex() == 2) processingOptions.rovpos = POSOPT_POS_XYZ;
778-
else if (options == PostOptions) {
779+
else if (options == NaviOptions) {
780+
if (ui->cBRoverPositionType->currentIndex() == 6) processingOptions.rovpos = POSOPT_RTCM;
781+
} else if (options == PostOptions) {
779782
processingOptions.rovpos = ui->cBRoverPositionType->currentIndex() - 1; /* 2:single, 3:posfile, 4:rinex */
780783
}
781784

785+
processingOptions.antdel[0][0] = ui->sBRoverAntennaE->value();
786+
processingOptions.antdel[0][1] = ui->sBRoverAntennaN->value();
787+
processingOptions.antdel[0][2] = ui->sBRoverAntennaU->value();
782788
if (ui->cBRoverAntennaPcv->isChecked()) {
783789
strncpy(processingOptions.anttype[0], qPrintable(ui->cBRoverAntenna->currentText()), 63);
784-
processingOptions.antdel[0][0] = ui->sBRoverAntennaE->value();
785-
processingOptions.antdel[0][1] = ui->sBRoverAntennaN->value();
786-
processingOptions.antdel[0][2] = ui->sBRoverAntennaU->value();
787790
} else {
788791
strncpy(processingOptions.anttype[0], "", sizeof(processingOptions.anttype[0]) - 1);
789-
processingOptions.antdel[0][0] = 0;
790-
processingOptions.antdel[0][1] = 0;
791-
processingOptions.antdel[0][2] = 0;
792792
}
793793

794+
processingOptions.antdel[1][0] = ui->sBReferenceAntennaE->value();
795+
processingOptions.antdel[1][1] = ui->sBReferenceAntennaN->value();
796+
processingOptions.antdel[1][2] = ui->sBReferenceAntennaU->value();
794797
if (ui->cBReferenceAntennaPcv->isChecked()) {
795798
strncpy(processingOptions.anttype[1], qPrintable(ui->cBReferenceAntenna->currentText()), 63);
796-
processingOptions.antdel[1][0] = ui->sBReferenceAntennaE->value();
797-
processingOptions.antdel[1][1] = ui->sBReferenceAntennaN->value();
798-
processingOptions.antdel[1][2] = ui->sBReferenceAntennaU->value();
799799
} else {
800800
strncpy(processingOptions.anttype[1], "", sizeof(processingOptions.anttype[1]) - 1);
801-
processingOptions.antdel[1][0] = 0;
802-
processingOptions.antdel[1][1] = 0;
803-
processingOptions.antdel[1][2] = 0;
804801
}
805802

806803
processingOptions.pcvr[0] = processingOptions.pcvr[1] = pcv0; // initialize antenna PCV
807-
if ((ui->cBRoverAntennaPcv->isChecked() || ui->cBReferenceAntennaPcv->isChecked()) && !readpcv(fileOptions.rcvantp, &pcvr)) {
804+
if ((ui->cBRoverAntennaPcv->isChecked() || ui->cBReferenceAntennaPcv->isChecked()) &&
805+
fileOptions.rcvantp[0] != '\0' && !readpcv(fileOptions.rcvantp, &pcvr)) {
808806
QMessageBox::warning(this, tr("Error"), tr("Antenna file read error: \"%1\"").arg(fileOptions.rcvantp));
809807
return;
810808
}
811-
if (ui->cBRoverAntennaPcv->isChecked() && (processingOptions.anttype[0] != QStringLiteral("*"))) {
812-
if ((pcv = searchpcv(0, processingOptions.anttype[0], time, &pcvr)))
809+
if (ui->cBRoverAntennaPcv->isChecked() && processingOptions.anttype[0] != QStringLiteral("") &&
810+
processingOptions.anttype[0] != QStringLiteral("*")) {
811+
pcv_t *pcv = searchpcv(0, processingOptions.anttype[0], time, &pcvr);
812+
if (pcv)
813813
processingOptions.pcvr[0] = *pcv;
814814
else
815815
QMessageBox::warning(this, tr("Error"), tr("No rover antenna PCV: \"%1\"").arg(processingOptions.anttype[0]));
816816
}
817-
if (ui->cBReferenceAntennaPcv->isChecked()&& (processingOptions.anttype[1] != QStringLiteral("*"))) {
818-
if ((pcv = searchpcv(0, processingOptions.anttype[1], time, &pcvr)))
817+
if (ui->cBReferenceAntennaPcv->isChecked() && processingOptions.anttype[1] != QStringLiteral("") &&
818+
processingOptions.anttype[1] != QStringLiteral("*")) {
819+
pcv_t *pcv = searchpcv(0, processingOptions.anttype[1], time, &pcvr);
820+
if (pcv)
819821
processingOptions.pcvr[1] = *pcv;
820822
else
821823
QMessageBox::warning(this, tr("Error"), tr("No reference station antenna PCV: \"%1\"").arg(processingOptions.anttype[1]));
822824
}
823-
if (ui->cBRoverAntennaPcv->isChecked() || ui->cBReferenceAntennaPcv->isChecked())
824-
free(pcvr.pcv);
825+
free_pcvs(&pcvr);
825826
fillExcludedSatellites(&processingOptions, ui->lEExcludedSatellites->text());
826827
processingOptions.maxaveep = ui->sBMaxAveEp->value();
827828
processingOptions.initrst = ui->cBInitRestart->isChecked();
@@ -946,6 +947,7 @@ void OptDialog::updateUi(const prcopt_t &prcopt, const solopt_t &solopt, const f
946947
ui->cBRoverPositionType->setCurrentIndex(0);
947948
if (prcopt.rovpos == POSOPT_POS_LLH) ui->cBRoverPositionType->setCurrentIndex(0);
948949
else if (prcopt.rovpos == POSOPT_POS_XYZ) ui->cBRoverPositionType->setCurrentIndex(2);
950+
else if (prcopt.rovpos == POSOPT_RTCM) ui->cBRoverPositionType->setCurrentIndex(6);
949951

950952
ui->cBReferencePositionType->setCurrentIndex(0);
951953
if (prcopt.refpos == POSOPT_POS_LLH) ui->cBReferencePositionType->setCurrentIndex(0);
@@ -1143,14 +1145,18 @@ void OptDialog::save(const QString &file)
11431145
else if (options == PostOptions)
11441146
procOpts.sbassatsel = ui->sBSbasSat->value();
11451147

1146-
procOpts.rovpos = ui->cBRoverPositionType->currentIndex() < 2 ? POSOPT_POS_LLH : ui->cBRoverPositionType->currentIndex() == 2 ? POSOPT_POS_XYZ : ui->cBRoverPositionType->currentIndex() - 1;
11471148
if (options == NaviOptions) {
1149+
procOpts.rovpos = POSOPT_POS_LLH;
1150+
if (ui->cBRoverPositionType->currentIndex() < 2) procOpts.rovpos = POSOPT_POS_LLH;
1151+
else if (ui->cBRoverPositionType->currentIndex() == 2) procOpts.rovpos = POSOPT_POS_XYZ;
1152+
else if (ui->cBRoverPositionType->currentIndex() == 6) procOpts.rovpos = POSOPT_RTCM;
11481153
procOpts.refpos = POSOPT_POS_LLH;
11491154
if (ui->cBReferencePositionType->currentIndex() < 2) procOpts.refpos = POSOPT_POS_LLH;
11501155
else if (ui->cBReferencePositionType->currentIndex() == 2) procOpts.refpos = POSOPT_POS_XYZ;
11511156
else if (ui->cBReferencePositionType->currentIndex() == 3) procOpts.refpos = POSOPT_SINGLE;
11521157
else if (ui->cBReferencePositionType->currentIndex() == 6) procOpts.refpos = POSOPT_RTCM;
11531158
} else if (options == PostOptions) {
1159+
procOpts.rovpos = ui->cBRoverPositionType->currentIndex() < 2 ? POSOPT_POS_LLH : ui->cBRoverPositionType->currentIndex() == 2 ? POSOPT_POS_XYZ : ui->cBRoverPositionType->currentIndex() - 1;
11541160
procOpts.refpos = ui->cBReferencePositionType->currentIndex() < 2 ? POSOPT_POS_LLH : ui->cBReferencePositionType->currentIndex() == 2 ? POSOPT_POS_XYZ : ui->cBReferencePositionType->currentIndex() - 1;
11551161
}
11561162
procOpts.eratio[0] = ui->sBMeasurementErrorR1->value();
@@ -1741,6 +1747,7 @@ void OptDialog::updateEnable()
17411747
ui->sBBaselineLen->setEnabled(ui->cBBaselineConstrain->isChecked() && ui->cBPositionMode->currentIndex() == PMODE_MOVEB);
17421748
ui->sBBaselineSig->setEnabled(ui->cBBaselineConstrain->isChecked() && ui->cBPositionMode->currentIndex() == PMODE_MOVEB);
17431749
ui->cBRoverPositionType->setEnabled(ui->cBPositionMode->currentIndex() == PMODE_FIXED || ui->cBPositionMode->currentIndex() == PMODE_PPP_FIXED);
1750+
setComboBoxItemEnabled(ui->cBRoverPositionType, 6, options == NaviOptions);
17441751
ui->lERoverPosition1->setEnabled(ui->cBRoverPositionType->isEnabled() && ui->cBRoverPositionType->currentIndex() <= 2);
17451752
ui->lERoverPosition2->setEnabled(ui->cBRoverPositionType->isEnabled() && ui->cBRoverPositionType->currentIndex() <= 2);
17461753
ui->lERoverPosition3->setEnabled(ui->cBRoverPositionType->isEnabled() && ui->cBRoverPositionType->currentIndex() <= 2);
@@ -1756,21 +1763,37 @@ void OptDialog::updateEnable()
17561763
ui->btnReferencePosition->setEnabled(ui->cBReferencePositionType->isEnabled() && ui->cBReferencePositionType->currentIndex() <= 2);
17571764
ui->cBRoverAntennaPcv->setEnabled(rel || ppp);
17581765
ui->cBRoverAntenna->setEnabled((rel || ppp) && ui->cBRoverAntennaPcv->isChecked());
1759-
ui->sBRoverAntennaE->setEnabled((rel || ppp) && ui->cBRoverAntennaPcv->isChecked() && ui->cBRoverAntenna->currentText()!="*");
1760-
ui->sBRoverAntennaN->setEnabled((rel || ppp) && ui->cBRoverAntennaPcv->isChecked() && ui->cBRoverAntenna->currentText()!="*");
1761-
ui->sBRoverAntennaU->setEnabled((rel || ppp) && ui->cBRoverAntennaPcv->isChecked() && ui->cBRoverAntenna->currentText()!="*");
1762-
ui->lblRoverAntennaD->setEnabled((rel || ppp) && ui->cBRoverAntennaPcv->isChecked() && ui->cBRoverAntenna->currentText()!="*");
17631766
ui->cBReferenceAntennaPcv->setEnabled(rel);
17641767
ui->cBReferenceAntenna->setEnabled(rel && ui->cBReferenceAntennaPcv->isChecked());
1765-
ui->sBReferenceAntennaE->setEnabled(rel && ui->cBReferenceAntennaPcv->isChecked() && ui->cBReferenceAntenna->currentText()!="*");
1766-
ui->sBReferenceAntennaN->setEnabled(rel && ui->cBReferenceAntennaPcv->isChecked() && ui->cBReferenceAntenna->currentText()!="*");
1767-
ui->sBReferenceAntennaU->setEnabled(rel && ui->cBReferenceAntennaPcv->isChecked() && ui->cBReferenceAntenna->currentText()!="*");
1768-
ui->lblReferenceAntennaD->setEnabled(rel && ui->cBReferenceAntennaPcv->isChecked() && ui->cBReferenceAntenna->currentText()!="*");
17691768
if (options == NaviOptions) {
1769+
// For rtknavi the delta can be supplied even when antenna selection is
1770+
// automated, in which case the delta fills in until overwritten when
1771+
// the antenna and it's delta are known.
1772+
ui->sBRoverAntennaE->setEnabled(rel || ppp);
1773+
ui->sBRoverAntennaN->setEnabled(rel || ppp);
1774+
ui->sBRoverAntennaU->setEnabled(rel || ppp);
1775+
ui->lblRoverAntennaD->setEnabled(rel || ppp);
1776+
ui->sBReferenceAntennaE->setEnabled(rel);
1777+
ui->sBReferenceAntennaN->setEnabled(rel);
1778+
ui->sBReferenceAntennaU->setEnabled(rel);
1779+
ui->lblReferenceAntennaD->setEnabled(rel);
17701780
ui->lblMaxAveEp->setVisible(ui->cBReferencePositionType->currentIndex() == 3);
17711781
ui->sBMaxAveEp->setVisible(ui->cBReferencePositionType->currentIndex() == 3);
17721782
ui->cBInitRestart->setVisible(ui->cBReferencePositionType->currentIndex() == 3);
17731783
} else {
1784+
// For rtkpost, and when setting the antenna and delta automatically,
1785+
// this should occur before processing, so disable the delta setting
1786+
// here in that case.
1787+
int rovp = !ui->cBRoverAntennaPcv->isChecked() || ui->cBRoverAntenna->currentText() != "*";
1788+
ui->sBRoverAntennaE->setEnabled((rel || ppp) && rovp);
1789+
ui->sBRoverAntennaN->setEnabled((rel || ppp) && rovp);
1790+
ui->sBRoverAntennaU->setEnabled((rel || ppp) && rovp);
1791+
ui->lblRoverAntennaD->setEnabled((rel || ppp) && rovp);
1792+
int refp = !ui->cBReferenceAntennaPcv->isChecked() || ui->cBReferenceAntenna->currentText() != "*";
1793+
ui->sBReferenceAntennaE->setEnabled(rel && refp);
1794+
ui->sBReferenceAntennaN->setEnabled(rel && refp);
1795+
ui->sBReferenceAntennaU->setEnabled(rel && refp);
1796+
ui->lblReferenceAntennaD->setEnabled(rel && refp);
17741797
ui->lblMaxAveEp->setVisible(false);
17751798
ui->sBMaxAveEp->setVisible(false);
17761799
ui->cBInitRestart->setVisible(false);
@@ -1936,8 +1959,6 @@ void OptDialog::readAntennaList()
19361959
QString currentRoverAntenna, currentReferenceAntenna;
19371960
int i;
19381961

1939-
if (!readpcv(qPrintable(ui->lEAntennaPcvFile->text()), &pcvs)) return;
1940-
19411962
/* Save currently defined antennas */
19421963
currentRoverAntenna = ui->cBRoverAntenna->currentText();
19431964
currentReferenceAntenna = ui->cBReferenceAntenna->currentText();
@@ -1949,21 +1970,22 @@ void OptDialog::readAntennaList()
19491970
ui->cBRoverAntenna->addItem(""); ui->cBReferenceAntenna->addItem("");
19501971
ui->cBRoverAntenna->addItem("*"); ui->cBReferenceAntenna->addItem("*");
19511972

1952-
for (int i = 0; i < pcvs.n; i++) {
1973+
if (readpcv(qPrintable(ui->lEAntennaPcvFile->text()), &pcvs)) {
1974+
for (int i = 0; i < pcvs.n; i++) {
19531975
if (pcvs.pcv[i].sat) continue;
19541976
if ((p = strchr(pcvs.pcv[i].type, ' '))) *p = '\0';
19551977
if (i > 0 && !strcmp(pcvs.pcv[i].type, pcvs.pcv[i - 1].type)) continue;
19561978
ui->cBRoverAntenna->addItem(pcvs.pcv[i].type);
19571979
ui->cBReferenceAntenna->addItem(pcvs.pcv[i].type);
1980+
}
1981+
free_pcvs(&pcvs);
19581982
}
19591983

19601984
/* Restore previously defined antennas */
19611985
i = ui->cBRoverAntenna->findText(currentRoverAntenna);
19621986
ui->cBRoverAntenna->setCurrentIndex(i == -1 ? 0 : i);
19631987
i = ui->cBReferenceAntenna->findText(currentReferenceAntenna);
19641988
ui->cBReferenceAntenna->setCurrentIndex(i == -1 ? 0 : i);
1965-
1966-
free(pcvs.pcv);
19671989
}
19681990
//---------------------------------------------------------------------------
19691991
void OptDialog::showKeyDialog()

app/qtapp/appcmn_qt/navi_post_opt.ui

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2392,6 +2392,11 @@
23922392
<string>RINEX Header Position</string>
23932393
</property>
23942394
</item>
2395+
<item>
2396+
<property name="text">
2397+
<string>RTCM/Raw Antenna Position</string>
2398+
</property>
2399+
</item>
23952400
</widget>
23962401
</item>
23972402
<item row="0" column="5">

0 commit comments

Comments
 (0)