Skip to content

Commit 16ea494

Browse files
authored
Merge pull request #468 from ourairquality/rtknavi-qt-rtksvr-off-stack
rtknavi_qt: allocate the rtksvr structure off the stack
2 parents d4618a8 + bb73478 commit 16ea494

File tree

2 files changed

+46
-43
lines changed

2 files changed

+46
-43
lines changed

app/qtapp/rtknavi_qt/navimain.cpp

Lines changed: 45 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,9 @@ MainWindow::MainWindow(QWidget *parent)
172172
{ "", 0, NULL, "" }
173173
};
174174

175-
rtksvrinit(&rtksvr);
175+
rtksvr = (rtksvr_t *)malloc(sizeof(rtksvr_t));
176+
if (rtksvr == NULL) std::exit(1);
177+
rtksvrinit(rtksvr);
176178
strinit(&monistr);
177179

178180
setWindowTitle(tr("%1 ver. %2 %3").arg(PRGNAME).arg(VER_RTKLIB, PATCH_LEVEL));
@@ -187,7 +189,7 @@ MainWindow::MainWindow(QWidget *parent)
187189
inputStrDialog = new InputStrDialog(this);
188190
outputStrDialog = new OutputStrDialog(this);
189191
logStrDialog = new LogStrDialog(this);
190-
monitor = new MonitorDialog(this, &rtksvr, &monistr);
192+
monitor = new MonitorDialog(this, rtksvr, &monistr);
191193
markDialog = new MarkDialog(this);
192194
systemTray = new QSystemTrayIcon(this);
193195

@@ -276,7 +278,8 @@ MainWindow::~MainWindow()
276278
delete [] ages;
277279
delete [] ratioAR;
278280

279-
rtksvrfree(&rtksvr);
281+
rtksvrfree(rtksvr);
282+
free(rtksvr);
280283
}
281284

282285
// callback on form create --------------------------------------------------
@@ -326,7 +329,7 @@ void MainWindow::showEvent(QShowEvent *event)
326329
}
327330

328331
loadOptions();
329-
loadNavigation(&rtksvr.nav);
332+
loadNavigation(&rtksvr->nav);
330333
openMonitorPort(optDialog->monitorPort);
331334

332335
updatePanels();
@@ -359,7 +362,7 @@ void MainWindow::closeEvent(QCloseEvent *)
359362
strclose(&monistr);
360363
}
361364
saveOptions();
362-
saveNavigation(&rtksvr.nav);
365+
saveNavigation(&rtksvr->nav);
363366
}
364367
// update panel -------------------------------------------------------------
365368
void MainWindow::updatePanels()
@@ -782,7 +785,7 @@ void MainWindow::showOutputStreamDialog()
782785
for (i = 3; i < 5; i++) {
783786
if (!update[i - 3]) continue;
784787

785-
rtksvrclosestr(&rtksvr, i);
788+
rtksvrclosestr(rtksvr, i);
786789

787790
if (!streamEnabled[i]) continue;
788791

@@ -796,7 +799,7 @@ void MainWindow::showOutputStreamDialog()
796799
continue;
797800
}
798801
optDialog->solutionOptions.posf = inputFormat[i];
799-
rtksvropenstr(&rtksvr, i, str, qPrintable(path), &optDialog->solutionOptions);
802+
rtksvropenstr(rtksvr, i, str, qPrintable(path), &optDialog->solutionOptions);
800803
}
801804
}
802805
// callback on button-log-streams -------------------------------------------
@@ -851,7 +854,7 @@ void MainWindow::showLogStreamDialog()
851854
for (i = 5; i < 8; i++) {
852855
if (!update[i - 5]) continue;
853856

854-
rtksvrclosestr(&rtksvr, i);
857+
rtksvrclosestr(rtksvr, i);
855858

856859
if (!streamEnabled[i]) continue;
857860

@@ -864,7 +867,7 @@ void MainWindow::showLogStreamDialog()
864867
streamEnabled[i] = 0;
865868
continue;
866869
}
867-
rtksvropenstr(&rtksvr, i, str, qPrintable(path), &optDialog->solutionOptions);
870+
rtksvropenstr(rtksvr, i, str, qPrintable(path), &optDialog->solutionOptions);
868871
}
869872
}
870873
// callback on button-solution-show -----------------------------------------
@@ -1135,7 +1138,7 @@ void MainWindow::serverStart()
11351138
}
11361139
for (i = 0; i < MAXSAT; i++) {
11371140
if (!(pcv = searchpcv(i + 1, "", time, &pcvs))) continue;
1138-
rtksvr.nav.pcvs[i] = *pcv;
1141+
rtksvr->nav.pcvs[i] = *pcv;
11391142
}
11401143
free(pcvs.pcv);
11411144
}
@@ -1199,7 +1202,7 @@ void MainWindow::serverStart()
11991202
if (optDialog->solutionOptions.geoid > 0 && strlen(optDialog->fileOptions.geoid) > 0)
12001203
opengeoid(optDialog->solutionOptions.geoid, qPrintable(optDialog->fileOptions.geoid));
12011204
if (strlen(optDialog->fileOptions.dcb) > 0)
1202-
readdcb(optDialog->fileOptions.dcb, &rtksvr.nav, NULL);
1205+
readdcb(optDialog->fileOptions.dcb, &rtksvr->nav, NULL);
12031206

12041207
for (i = 0; i < 2; i++) {
12051208
solopt[i] = optDialog->solutionOptions;
@@ -1211,11 +1214,11 @@ void MainWindow::serverStart()
12111214
stropt[3] = optDialog->serverBufferSize;
12121215
stropt[4] = optDialog->fileSwapMargin;
12131216
strsetopt(stropt);
1214-
strncpy(rtksvr.cmd_reset, qPrintable(resetCommand), 4095);
1215-
rtksvr.bl_reset = maxBaseLine;
1217+
strncpy(rtksvr->cmd_reset, qPrintable(resetCommand), 4095);
1218+
rtksvr->bl_reset = maxBaseLine;
12161219

12171220
// start rtk server
1218-
if (!rtksvrstart(&rtksvr, optDialog->serverCycle, optDialog->serverBufferSize, streamTypes, (const char **)serverPaths, inputFormat, optDialog->navSelect,
1221+
if (!rtksvrstart(rtksvr, optDialog->serverCycle, optDialog->serverBufferSize, streamTypes, (const char **)serverPaths, inputFormat, optDialog->navSelect,
12191222
(const char **)cmds, (const char **)cmds_periodic, (const char **)rcvopts, optDialog->nmeaCycle, nmeaRequestType, nmeapos,
12201223
&optDialog->processingOptions, solopt, &monistr, errmsg)) {
12211224

@@ -1273,7 +1276,7 @@ void MainWindow::serverStop()
12731276

12741277
for (i = 0; i < 3; i++) {
12751278
cmds[i] = NULL;
1276-
streamTypes = rtksvr.stream[i].type;
1279+
streamTypes = rtksvr->stream[i].type;
12771280

12781281
if (streamTypes == STR_SERIAL) {
12791282
cmds[i] = new char[1024];
@@ -1285,7 +1288,7 @@ void MainWindow::serverStop()
12851288
if (commandEnableTcp[i][1]) strncpy(cmds[i], qPrintable(commandsTcp[i][1]), 1023);
12861289
}
12871290
}
1288-
rtksvrstop(&rtksvr, (const char **)cmds);
1291+
rtksvrstop(rtksvr, (const char **)cmds);
12891292

12901293
for (i = 0; i < 3; i++) delete[] cmds[i];
12911294

@@ -1328,17 +1331,17 @@ void MainWindow::updateServer()
13281331

13291332
timerCycle++;
13301333

1331-
rtksvrlock(&rtksvr);
1334+
rtksvrlock(rtksvr);
13321335

1333-
for (i = 0; i < rtksvr.nsol; i++) {
1334-
sol = rtksvr.solbuf + i;
1335-
updateLog(sol->stat, sol->time, sol->rr, sol->qr, rtksvr.rtk.rb, sol->ns, sol->age, sol->ratio);
1336+
for (i = 0; i < rtksvr->nsol; i++) {
1337+
sol = rtksvr->solbuf + i;
1338+
updateLog(sol->stat, sol->time, sol->rr, sol->qr, rtksvr->rtk.rb, sol->ns, sol->age, sol->ratio);
13361339
update = 1;
13371340
}
1338-
rtksvr.nsol = 0;
1339-
solutionCurrentStatus = rtksvr.state ? rtksvr.rtk.sol.stat : 0;
1341+
rtksvr->nsol = 0;
1342+
solutionCurrentStatus = rtksvr->state ? rtksvr->rtk.sol.stat : 0;
13401343

1341-
rtksvrunlock(&rtksvr);
1344+
rtksvrunlock(rtksvr);
13421345

13431346
if (update) {
13441347
updateTime();
@@ -1354,7 +1357,7 @@ void MainWindow::updateServer()
13541357
} else {
13551358
setWidgetBackgroundColor(ui->lblIndicatorSolution, QColor(Qt::white));
13561359
setWidgetTextColor(ui->lblSolution, QColor(Qt::darkGray));
1357-
setWidgetBackgroundColor(ui->lblServer, rtksvr.state ? QColor(Qt::darkGreen) : QColor(Qt::darkGray));
1360+
setWidgetBackgroundColor(ui->lblServer, rtksvr->state ? QColor(Qt::darkGreen) : QColor(Qt::darkGray));
13581361
}
13591362

13601363
if (!(++timerCycle % 5)) updatePlot();
@@ -1495,15 +1498,15 @@ void MainWindow::updatePosition()
14951498

14961499
trace(4, "updatePosition\n");
14971500

1498-
if (rtksvr.rtk.opt.mode == PMODE_STATIC || rtksvr.rtk.opt.mode == PMODE_PPP_STATIC)
1501+
if (rtksvr->rtk.opt.mode == PMODE_STATIC || rtksvr->rtk.opt.mode == PMODE_PPP_STATIC)
14991502
ext = " (S)";
1500-
else if (rtksvr.rtk.opt.mode == PMODE_FIXED || rtksvr.rtk.opt.mode == PMODE_PPP_FIXED)
1503+
else if (rtksvr->rtk.opt.mode == PMODE_FIXED || rtksvr->rtk.opt.mode == PMODE_PPP_FIXED)
15011504
ext = " (F)";
15021505
ui->lblSolutionText->setText(tr("Solution%1:").arg(ext));
15031506

15041507
ui->lblSolution->setText(sol[stat]);
1505-
setWidgetTextColor(ui->lblSolution, rtksvr.state ? color[stat] : QColor(Qt::darkGray));
1506-
setWidgetBackgroundColor(ui->lblIndicatorSolution, rtksvr.state ? color[stat] : QColor(Qt::white));
1508+
setWidgetTextColor(ui->lblSolution, rtksvr->state ? color[stat] : QColor(Qt::darkGray));
1509+
setWidgetBackgroundColor(ui->lblIndicatorSolution, rtksvr->state ? color[stat] : QColor(Qt::white));
15071510
ui->lblIndicatorSolution->setToolTip(sol[stat]);
15081511

15091512
if (norm(rrover, 3) > 0.0 && norm(rbase, 3) > 0.0)
@@ -1607,7 +1610,7 @@ void MainWindow::updateStream()
16071610

16081611
trace(4, "updateStream\n");
16091612

1610-
rtksvrsstat(&rtksvr, sstat, msg);
1613+
rtksvrsstat(rtksvr, sstat, msg);
16111614
for (i = 0; i < MAXSTRRTK; i++) {
16121615
setWidgetBackgroundColor(ind[i], color[sstat[i]+1]);
16131616
if (sstat[i]) {
@@ -1655,13 +1658,13 @@ void MainWindow::drawSolutionPlot(QLabel *plot, int type, int freq)
16551658
snr0[i] = snr[0][i];
16561659
snr1[i] = snr[1][i];
16571660
}
1658-
ns[0] = rtksvrostat(&rtksvr, 0, &time, sat[0], az[0], el[0], snr0, vsat[0]);
1659-
ns[1] = rtksvrostat(&rtksvr, 1, &time, sat[1], az[1], el[1], snr1, vsat[1]);
1661+
ns[0] = rtksvrostat(rtksvr, 0, &time, sat[0], az[0], el[0], snr0, vsat[0]);
1662+
ns[1] = rtksvrostat(rtksvr, 1, &time, sat[1], az[1], el[1], snr1, vsat[1]);
16601663

1661-
rtksvrlock(&rtksvr);
1662-
matcpy(rr, rtksvr.rtk.sol.rr, 3, 1);
1664+
rtksvrlock(rtksvr);
1665+
matcpy(rr, rtksvr->rtk.sol.rr, 3, 1);
16631666
ecef2pos(rr, pos);
1664-
rtksvrunlock(&rtksvr);
1667+
rtksvrunlock(rtksvr);
16651668

16661669
for (i = 0; i < 2; i++) {
16671670
if (ns[i] > 0) {
@@ -1934,7 +1937,7 @@ void MainWindow::drawBaseline(QPainter &c, int id, int w, int h)
19341937
trace(4, "drawBaseline: w=%d h=%d\n", w, h);
19351938

19361939
if (PMODE_DGPS <= optDialog->processingOptions.mode && optDialog->processingOptions.mode <= PMODE_FIXED) {
1937-
col = (rtksvr.state && solutionStatus[solutionsCurrent] && solutionCurrentStatus) ? colors[solutionStatus[solutionsCurrent]] : Qt::white;
1940+
col = (rtksvr->state && solutionStatus[solutionsCurrent] && solutionCurrentStatus) ? colors[solutionStatus[solutionsCurrent]] : Qt::white;
19381941

19391942
if (norm(rrover, 3) > 0.0 && norm(rbase, 3) > 0.0)
19401943
for (i = 0; i < 3; i++)
@@ -2082,10 +2085,10 @@ void MainWindow::drawTrack(QPainter &c, int id, QPaintDevice *plot)
20822085
if (numPoints > 0) {
20832086
graph->toPoint(x[currentPointNo], y[currentPointNo], p1);
20842087
graph->drawMark(c, p1, Graph::MarkerTypes::Dot, Qt::white, 18, 0);
2085-
graph->drawMark(c, p1, Graph::MarkerTypes::Circle, rtksvr.state ? Qt::black : Qt::darkGray, 16, 0);
2086-
graph->drawMark(c, p1, Graph::MarkerTypes::Plus, rtksvr.state ? Qt::black : Qt::darkGray, 20, 0);
2087-
graph->drawMark(c, p1, Graph::MarkerTypes::Dot, rtksvr.state ? Qt::black : Qt::darkGray, 12, 0);
2088-
graph->drawMark(c, p1, Graph::MarkerTypes::Dot, rtksvr.state ? color[currentPointNo] : Qt::white, 10, 0);
2088+
graph->drawMark(c, p1, Graph::MarkerTypes::Circle, rtksvr->state ? Qt::black : Qt::darkGray, 16, 0);
2089+
graph->drawMark(c, p1, Graph::MarkerTypes::Plus, rtksvr->state ? Qt::black : Qt::darkGray, 20, 0);
2090+
graph->drawMark(c, p1, Graph::MarkerTypes::Dot, rtksvr->state ? Qt::black : Qt::darkGray, 12, 0);
2091+
graph->drawMark(c, p1, Graph::MarkerTypes::Dot, rtksvr->state ? color[currentPointNo] : Qt::white, 10, 0);
20892092
}
20902093

20912094
// draw scale
@@ -2646,19 +2649,19 @@ void MainWindow::saveOptions()
26462649
//---------------------------------------------------------------------------
26472650
void MainWindow::btnMarkClicked()
26482651
{
2649-
markDialog->setPositionMode(rtksvr.rtk.opt.mode);
2652+
markDialog->setPositionMode(rtksvr->rtk.opt.mode);
26502653
markDialog->setName(markerName);
26512654
markDialog->setComment(markerComment);
26522655
markDialog->setStationPositionFile(optDialog->fileOptions.stapos);
26532656

26542657
if (markDialog->exec() != QDialog::Accepted) return;
26552658

2656-
rtksvr.rtk.opt.mode = markDialog->getPositionMode();
2659+
rtksvr->rtk.opt.mode = markDialog->getPositionMode();
26572660
markerName = markDialog->getName();
26582661
markerComment = markDialog->getComment();
26592662

26602663
if (!markerName.isEmpty())
2661-
rtksvrmark(&rtksvr, qPrintable(markerName), qPrintable(markerComment));
2664+
rtksvrmark(rtksvr, qPrintable(markerName), qPrintable(markerComment));
26622665

26632666
updatePosition();
26642667
}

app/qtapp/rtknavi_qt/navimain.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public slots:
8484
void showEvent(QShowEvent*);
8585
void closeEvent(QCloseEvent *);
8686

87-
rtksvr_t rtksvr; // rtk server struct
87+
rtksvr_t *rtksvr; // rtk server struct
8888
stream_t monistr; // monitor stream
8989

9090
private:

0 commit comments

Comments
 (0)