Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 68 additions & 37 deletions app/consapp/rtkrcv/rtkrcv.c
Original file line number Diff line number Diff line change
Expand Up @@ -364,41 +364,69 @@ static int readcmd(const char *file, char *cmd, int type)
fclose(fp);
return 1;
}
/* read antenna file ---------------------------------------------------------*/
static void readant(vt_t *vt, prcopt_t *opt, nav_t *nav)
{
const pcv_t pcv0={0};
pcvs_t pcvr={0},pcvs={0};
pcv_t *pcv;
gtime_t time=timeget();
int i;

trace(3,"readant:\n");
/* Read antenna file ---------------------------------------------------------*/
static void readant(vt_t *vt, prcopt_t *opt, nav_t *nav, pcvs_t *pcvsr) {
trace(3,"readant:\n");

opt->pcvr[0]=opt->pcvr[1]=pcv0;
if (!*filopt.rcvantp) return;

if (readpcv(filopt.rcvantp,&pcvr)) {
for (i=0;i<2;i++) {
if (!*opt->anttype[i]) continue;
if (!(pcv=searchpcv(0,opt->anttype[i],time,&pcvr))) {
vt_printf(vt,"no antenna %s in %s",opt->anttype[i],filopt.rcvantp);
continue;
}
opt->pcvr[i]=*pcv;
const pcv_t pcv0 = {0};
opt->pcvr[0] = opt->pcvr[1] = pcv0;

if (*filopt.rcvantp) {
gtime_t time = timeget();
if (readpcv(filopt.rcvantp, pcvsr)) {
for (int i = 0; i < 2; i++) {
if (!*opt->anttype[i] || !strcmp(opt->anttype[i], "*")) continue;
pcv_t *pcv = searchpcv(0, opt->anttype[i], time, pcvsr);
if (!pcv) {
vt_printf(vt, "no antenna %s in %s", opt->anttype[i], filopt.rcvantp);
continue;
}
opt->pcvr[i] = *pcv;
}
} else
vt_printf(vt, "antenna file open error %s", filopt.rcvantp);
}

if (*filopt.satantp) {
pcvs_t pcvs = {0};
if (readpcv(filopt.satantp, &pcvs)) {
gtime_t time = timeget();
#ifdef TRACE
int found[MAXSAT] = {0}, missing = 0;
#endif
for (int i = 0; i < MAXSAT; i++) {
pcv_t *pcv = searchpcv(i + 1, "", time, &pcvs);
if (!pcv) {
#ifdef TRACE
missing++;
#endif
continue;
}
}
else vt_printf(vt,"antenna file open error %s",filopt.rcvantp);

if (readpcv(filopt.satantp,&pcvs)) {
for (i=0;i<MAXSAT;i++) {
if (!(pcv=searchpcv(i+1,"",time,&pcvs))) continue;
nav->pcvs[i]=*pcv;
nav->pcvs[i]=*pcv;
#ifdef TRACE
found[i] = 1;
#endif
}
free_pcvs(&pcvs);
#ifdef TRACE
if (missing > 0) {
// Report satellites not found.
char satlst[MAXSAT * 4] = "", *p = satlst;
for (int i = 0; i < MAXSAT; i++) {
if (!found[i]) {
char id[8];
satno2id(i + 1, id);
int len = strlen(satlst);
if (len + strlen(id) > sizeof(satlst) - 1) continue;
p += sprintf(p, " %s", id);
}
}
}
else vt_printf(vt,"antenna file open error %s",filopt.satantp);

free(pcvr.pcv); free(pcvs.pcv);
trace(2, "Satellites missing pcv in %s:%s\n", filopt.satantp, satlst);
}
#endif
} else
vt_printf(vt, "antenna file open error %s", filopt.satantp);
}
}
/* start rtk server ----------------------------------------------------------*/
static int startsvr(vt_t *vt)
Expand Down Expand Up @@ -442,9 +470,9 @@ static int startsvr(vt_t *vt)
pos[1]=nmeapos[1]*D2R;
pos[2]=nmeapos[2];
pos2ecef(pos,npos);

/* read antenna file */
readant(vt,&prcopt,&svr.nav);
readant(vt,&prcopt,&svr.nav,&svr.pcvsr);

/* read dcb file */
if (*filopt.dcb) {
Expand Down Expand Up @@ -488,6 +516,7 @@ static int startsvr(vt_t *vt)
solopt,&moni,errmsg)) {
trace(2,"rtk server start error (%s)\n",errmsg);
vt_printf(vt,"rtk server start error (%s)\n",errmsg);
free_pcvs(&svr.pcvsr);
return 0;
}
return 1;
Expand Down Expand Up @@ -522,7 +551,9 @@ static void stopsvr(vt_t *vt)
}
#endif
if (solopt[0].geoid>0) closegeoid();


free_pcvs(&svr.pcvsr);

vt_printf(vt,"stop rtk server\n");
}
/* print time ----------------------------------------------------------------*/
Expand Down Expand Up @@ -773,10 +804,10 @@ static void prstatus(vt_t *vt)
vt_printf(vt,"%-28s: %d\n","# of average single pos base",nave);
vt_printf(vt,"%-28s: %s\n","ant type rover",rtk->opt.pcvr[0].type);
del=rtk->opt.antdel[0];
vt_printf(vt,"%-28s: %.3f %.3f %.3f\n","ant delta rover",del[0],del[1],del[2]);
vt_printf(vt,"%-28s: %.4f %.4f %.4f\n","ant delta rover",del[0],del[1],del[2]);
vt_printf(vt,"%-28s: %s\n","ant type base" ,rtk->opt.pcvr[1].type);
del=rtk->opt.antdel[1];
vt_printf(vt,"%-28s: %.3f %.3f %.3f\n","ant delta base",del[0],del[1],del[2]);
vt_printf(vt,"%-28s: %.4f %.4f %.4f\n","ant delta base",del[0],del[1],del[2]);
ecef2enu(pos,rtk->rb+3,vel);
vt_printf(vt,"%-28s: %.3f,%.3f,%.3f\n","vel enu (m/s) base",
vel[0],vel[1],vel[2]);
Expand Down
92 changes: 57 additions & 35 deletions app/qtapp/appcmn_qt/navi_post_opt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,7 @@ OptDialog::OptDialog(QWidget *parent, int opts)

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

memset(&pcvr, 0, sizeof(pcvs_t));
Expand Down Expand Up @@ -775,53 +776,53 @@ void OptDialog::updateOptions()
processingOptions.rovpos = POSOPT_POS_LLH;
if (ui->cBRoverPositionType->currentIndex() < 2) processingOptions.rovpos = POSOPT_POS_LLH;
else if (ui->cBRoverPositionType->currentIndex() == 2) processingOptions.rovpos = POSOPT_POS_XYZ;
else if (options == PostOptions) {
else if (options == NaviOptions) {
if (ui->cBRoverPositionType->currentIndex() == 6) processingOptions.rovpos = POSOPT_RTCM;
} else if (options == PostOptions) {
processingOptions.rovpos = ui->cBRoverPositionType->currentIndex() - 1; /* 2:single, 3:posfile, 4:rinex */
}

processingOptions.antdel[0][0] = ui->sBRoverAntennaE->value();
processingOptions.antdel[0][1] = ui->sBRoverAntennaN->value();
processingOptions.antdel[0][2] = ui->sBRoverAntennaU->value();
if (ui->cBRoverAntennaPcv->isChecked()) {
strncpy(processingOptions.anttype[0], qPrintable(ui->cBRoverAntenna->currentText()), 63);
processingOptions.antdel[0][0] = ui->sBRoverAntennaE->value();
processingOptions.antdel[0][1] = ui->sBRoverAntennaN->value();
processingOptions.antdel[0][2] = ui->sBRoverAntennaU->value();
} else {
strncpy(processingOptions.anttype[0], "", sizeof(processingOptions.anttype[0]) - 1);
processingOptions.antdel[0][0] = 0;
processingOptions.antdel[0][1] = 0;
processingOptions.antdel[0][2] = 0;
}

processingOptions.antdel[1][0] = ui->sBReferenceAntennaE->value();
processingOptions.antdel[1][1] = ui->sBReferenceAntennaN->value();
processingOptions.antdel[1][2] = ui->sBReferenceAntennaU->value();
if (ui->cBReferenceAntennaPcv->isChecked()) {
strncpy(processingOptions.anttype[1], qPrintable(ui->cBReferenceAntenna->currentText()), 63);
processingOptions.antdel[1][0] = ui->sBReferenceAntennaE->value();
processingOptions.antdel[1][1] = ui->sBReferenceAntennaN->value();
processingOptions.antdel[1][2] = ui->sBReferenceAntennaU->value();
} else {
strncpy(processingOptions.anttype[1], "", sizeof(processingOptions.anttype[1]) - 1);
processingOptions.antdel[1][0] = 0;
processingOptions.antdel[1][1] = 0;
processingOptions.antdel[1][2] = 0;
}

processingOptions.pcvr[0] = processingOptions.pcvr[1] = pcv0; // initialize antenna PCV
if ((ui->cBRoverAntennaPcv->isChecked() || ui->cBReferenceAntennaPcv->isChecked()) && !readpcv(fileOptions.rcvantp, &pcvr)) {
if ((ui->cBRoverAntennaPcv->isChecked() || ui->cBReferenceAntennaPcv->isChecked()) &&
fileOptions.rcvantp[0] != '\0' && !readpcv(fileOptions.rcvantp, &pcvr)) {
QMessageBox::warning(this, tr("Error"), tr("Antenna file read error: \"%1\"").arg(fileOptions.rcvantp));
return;
}
if (ui->cBRoverAntennaPcv->isChecked() && (processingOptions.anttype[0] != QStringLiteral("*"))) {
if ((pcv = searchpcv(0, processingOptions.anttype[0], time, &pcvr)))
if (ui->cBRoverAntennaPcv->isChecked() && processingOptions.anttype[0] != QStringLiteral("") &&
processingOptions.anttype[0] != QStringLiteral("*")) {
pcv_t *pcv = searchpcv(0, processingOptions.anttype[0], time, &pcvr);
if (pcv)
processingOptions.pcvr[0] = *pcv;
else
QMessageBox::warning(this, tr("Error"), tr("No rover antenna PCV: \"%1\"").arg(processingOptions.anttype[0]));
}
if (ui->cBReferenceAntennaPcv->isChecked()&& (processingOptions.anttype[1] != QStringLiteral("*"))) {
if ((pcv = searchpcv(0, processingOptions.anttype[1], time, &pcvr)))
if (ui->cBReferenceAntennaPcv->isChecked() && processingOptions.anttype[1] != QStringLiteral("") &&
processingOptions.anttype[1] != QStringLiteral("*")) {
pcv_t *pcv = searchpcv(0, processingOptions.anttype[1], time, &pcvr);
if (pcv)
processingOptions.pcvr[1] = *pcv;
else
QMessageBox::warning(this, tr("Error"), tr("No reference station antenna PCV: \"%1\"").arg(processingOptions.anttype[1]));
}
if (ui->cBRoverAntennaPcv->isChecked() || ui->cBReferenceAntennaPcv->isChecked())
free(pcvr.pcv);
free_pcvs(&pcvr);
fillExcludedSatellites(&processingOptions, ui->lEExcludedSatellites->text());
processingOptions.maxaveep = ui->sBMaxAveEp->value();
processingOptions.initrst = ui->cBInitRestart->isChecked();
Expand Down Expand Up @@ -946,6 +947,7 @@ void OptDialog::updateUi(const prcopt_t &prcopt, const solopt_t &solopt, const f
ui->cBRoverPositionType->setCurrentIndex(0);
if (prcopt.rovpos == POSOPT_POS_LLH) ui->cBRoverPositionType->setCurrentIndex(0);
else if (prcopt.rovpos == POSOPT_POS_XYZ) ui->cBRoverPositionType->setCurrentIndex(2);
else if (prcopt.rovpos == POSOPT_RTCM) ui->cBRoverPositionType->setCurrentIndex(6);

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

procOpts.rovpos = ui->cBRoverPositionType->currentIndex() < 2 ? POSOPT_POS_LLH : ui->cBRoverPositionType->currentIndex() == 2 ? POSOPT_POS_XYZ : ui->cBRoverPositionType->currentIndex() - 1;
if (options == NaviOptions) {
procOpts.rovpos = POSOPT_POS_LLH;
if (ui->cBRoverPositionType->currentIndex() < 2) procOpts.rovpos = POSOPT_POS_LLH;
else if (ui->cBRoverPositionType->currentIndex() == 2) procOpts.rovpos = POSOPT_POS_XYZ;
else if (ui->cBRoverPositionType->currentIndex() == 6) procOpts.rovpos = POSOPT_RTCM;
procOpts.refpos = POSOPT_POS_LLH;
if (ui->cBReferencePositionType->currentIndex() < 2) procOpts.refpos = POSOPT_POS_LLH;
else if (ui->cBReferencePositionType->currentIndex() == 2) procOpts.refpos = POSOPT_POS_XYZ;
else if (ui->cBReferencePositionType->currentIndex() == 3) procOpts.refpos = POSOPT_SINGLE;
else if (ui->cBReferencePositionType->currentIndex() == 6) procOpts.refpos = POSOPT_RTCM;
} else if (options == PostOptions) {
procOpts.rovpos = ui->cBRoverPositionType->currentIndex() < 2 ? POSOPT_POS_LLH : ui->cBRoverPositionType->currentIndex() == 2 ? POSOPT_POS_XYZ : ui->cBRoverPositionType->currentIndex() - 1;
procOpts.refpos = ui->cBReferencePositionType->currentIndex() < 2 ? POSOPT_POS_LLH : ui->cBReferencePositionType->currentIndex() == 2 ? POSOPT_POS_XYZ : ui->cBReferencePositionType->currentIndex() - 1;
}
procOpts.eratio[0] = ui->sBMeasurementErrorR1->value();
Expand Down Expand Up @@ -1741,6 +1747,7 @@ void OptDialog::updateEnable()
ui->sBBaselineLen->setEnabled(ui->cBBaselineConstrain->isChecked() && ui->cBPositionMode->currentIndex() == PMODE_MOVEB);
ui->sBBaselineSig->setEnabled(ui->cBBaselineConstrain->isChecked() && ui->cBPositionMode->currentIndex() == PMODE_MOVEB);
ui->cBRoverPositionType->setEnabled(ui->cBPositionMode->currentIndex() == PMODE_FIXED || ui->cBPositionMode->currentIndex() == PMODE_PPP_FIXED);
setComboBoxItemEnabled(ui->cBRoverPositionType, 6, options == NaviOptions);
ui->lERoverPosition1->setEnabled(ui->cBRoverPositionType->isEnabled() && ui->cBRoverPositionType->currentIndex() <= 2);
ui->lERoverPosition2->setEnabled(ui->cBRoverPositionType->isEnabled() && ui->cBRoverPositionType->currentIndex() <= 2);
ui->lERoverPosition3->setEnabled(ui->cBRoverPositionType->isEnabled() && ui->cBRoverPositionType->currentIndex() <= 2);
Expand All @@ -1756,21 +1763,37 @@ void OptDialog::updateEnable()
ui->btnReferencePosition->setEnabled(ui->cBReferencePositionType->isEnabled() && ui->cBReferencePositionType->currentIndex() <= 2);
ui->cBRoverAntennaPcv->setEnabled(rel || ppp);
ui->cBRoverAntenna->setEnabled((rel || ppp) && ui->cBRoverAntennaPcv->isChecked());
ui->sBRoverAntennaE->setEnabled((rel || ppp) && ui->cBRoverAntennaPcv->isChecked() && ui->cBRoverAntenna->currentText()!="*");
ui->sBRoverAntennaN->setEnabled((rel || ppp) && ui->cBRoverAntennaPcv->isChecked() && ui->cBRoverAntenna->currentText()!="*");
ui->sBRoverAntennaU->setEnabled((rel || ppp) && ui->cBRoverAntennaPcv->isChecked() && ui->cBRoverAntenna->currentText()!="*");
ui->lblRoverAntennaD->setEnabled((rel || ppp) && ui->cBRoverAntennaPcv->isChecked() && ui->cBRoverAntenna->currentText()!="*");
ui->cBReferenceAntennaPcv->setEnabled(rel);
ui->cBReferenceAntenna->setEnabled(rel && ui->cBReferenceAntennaPcv->isChecked());
ui->sBReferenceAntennaE->setEnabled(rel && ui->cBReferenceAntennaPcv->isChecked() && ui->cBReferenceAntenna->currentText()!="*");
ui->sBReferenceAntennaN->setEnabled(rel && ui->cBReferenceAntennaPcv->isChecked() && ui->cBReferenceAntenna->currentText()!="*");
ui->sBReferenceAntennaU->setEnabled(rel && ui->cBReferenceAntennaPcv->isChecked() && ui->cBReferenceAntenna->currentText()!="*");
ui->lblReferenceAntennaD->setEnabled(rel && ui->cBReferenceAntennaPcv->isChecked() && ui->cBReferenceAntenna->currentText()!="*");
if (options == NaviOptions) {
// For rtknavi the delta can be supplied even when antenna selection is
// automated, in which case the delta fills in until overwritten when
// the antenna and it's delta are known.
ui->sBRoverAntennaE->setEnabled(rel || ppp);
ui->sBRoverAntennaN->setEnabled(rel || ppp);
ui->sBRoverAntennaU->setEnabled(rel || ppp);
ui->lblRoverAntennaD->setEnabled(rel || ppp);
ui->sBReferenceAntennaE->setEnabled(rel);
ui->sBReferenceAntennaN->setEnabled(rel);
ui->sBReferenceAntennaU->setEnabled(rel);
ui->lblReferenceAntennaD->setEnabled(rel);
ui->lblMaxAveEp->setVisible(ui->cBReferencePositionType->currentIndex() == 3);
ui->sBMaxAveEp->setVisible(ui->cBReferencePositionType->currentIndex() == 3);
ui->cBInitRestart->setVisible(ui->cBReferencePositionType->currentIndex() == 3);
} else {
// For rtkpost, and when setting the antenna and delta automatically,
// this should occur before processing, so disable the delta setting
// here in that case.
int rovp = !ui->cBRoverAntennaPcv->isChecked() || ui->cBRoverAntenna->currentText() != "*";
ui->sBRoverAntennaE->setEnabled((rel || ppp) && rovp);
ui->sBRoverAntennaN->setEnabled((rel || ppp) && rovp);
ui->sBRoverAntennaU->setEnabled((rel || ppp) && rovp);
ui->lblRoverAntennaD->setEnabled((rel || ppp) && rovp);
int refp = !ui->cBReferenceAntennaPcv->isChecked() || ui->cBReferenceAntenna->currentText() != "*";
ui->sBReferenceAntennaE->setEnabled(rel && refp);
ui->sBReferenceAntennaN->setEnabled(rel && refp);
ui->sBReferenceAntennaU->setEnabled(rel && refp);
ui->lblReferenceAntennaD->setEnabled(rel && refp);
ui->lblMaxAveEp->setVisible(false);
ui->sBMaxAveEp->setVisible(false);
ui->cBInitRestart->setVisible(false);
Expand Down Expand Up @@ -1936,8 +1959,6 @@ void OptDialog::readAntennaList()
QString currentRoverAntenna, currentReferenceAntenna;
int i;

if (!readpcv(qPrintable(ui->lEAntennaPcvFile->text()), &pcvs)) return;

/* Save currently defined antennas */
currentRoverAntenna = ui->cBRoverAntenna->currentText();
currentReferenceAntenna = ui->cBReferenceAntenna->currentText();
Expand All @@ -1949,21 +1970,22 @@ void OptDialog::readAntennaList()
ui->cBRoverAntenna->addItem(""); ui->cBReferenceAntenna->addItem("");
ui->cBRoverAntenna->addItem("*"); ui->cBReferenceAntenna->addItem("*");

for (int i = 0; i < pcvs.n; i++) {
if (readpcv(qPrintable(ui->lEAntennaPcvFile->text()), &pcvs)) {
for (int i = 0; i < pcvs.n; i++) {
if (pcvs.pcv[i].sat) continue;
if ((p = strchr(pcvs.pcv[i].type, ' '))) *p = '\0';
if (i > 0 && !strcmp(pcvs.pcv[i].type, pcvs.pcv[i - 1].type)) continue;
ui->cBRoverAntenna->addItem(pcvs.pcv[i].type);
ui->cBReferenceAntenna->addItem(pcvs.pcv[i].type);
}
free_pcvs(&pcvs);
}

/* Restore previously defined antennas */
i = ui->cBRoverAntenna->findText(currentRoverAntenna);
ui->cBRoverAntenna->setCurrentIndex(i == -1 ? 0 : i);
i = ui->cBReferenceAntenna->findText(currentReferenceAntenna);
ui->cBReferenceAntenna->setCurrentIndex(i == -1 ? 0 : i);

free(pcvs.pcv);
}
//---------------------------------------------------------------------------
void OptDialog::showKeyDialog()
Expand Down
5 changes: 5 additions & 0 deletions app/qtapp/appcmn_qt/navi_post_opt.ui
Original file line number Diff line number Diff line change
Expand Up @@ -2392,6 +2392,11 @@
<string>RINEX Header Position</string>
</property>
</item>
<item>
<property name="text">
<string>RTCM/Raw Antenna Position</string>
</property>
</item>
</widget>
</item>
<item row="0" column="5">
Expand Down
Loading