Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
770e6f4
rtknavi_qt: correct freq change in SNR and sky plots
ourairquality Apr 20, 2026
590403b
preceph: fix code_bias_ix system indexing
ourairquality Apr 20, 2026
b8198ef
Fix incorrect install targets for some QT apps (launch, navi, plot, p…
Apr 22, 2026
fe5026c
rtknavi: fix the track plot expand and shrink for plots 3 and 4
ourairquality Apr 22, 2026
72dca37
Add BDS to the systems in the default process options
ourairquality Apr 25, 2026
ca3befa
rnx2rtkp: default nav sys to include Galileo and BDS
ourairquality Apr 25, 2026
dc6218a
Merge pull request #814 from ourairquality/code-bias-ix-sys
rtklibexplorer Apr 26, 2026
58c3066
Merge pull request #817 from ourairquality/rtknavi-track-expand-shrink
rtklibexplorer Apr 26, 2026
8969cc3
Merge pull request #820 from ourairquality/proc-opt-sys-bds
rtklibexplorer Apr 26, 2026
2595a36
Merge pull request #821 from ourairquality/rnx2rtkp-default-gal-bds
rtklibexplorer Apr 26, 2026
397d998
readsp3: handle arbitrary comment lines
ourairquality Apr 27, 2026
d3dc227
rinex header: fix clock file system parsing
ourairquality Apr 27, 2026
0bba414
Fix wrong constant in recent commits: SYS_BDS->SYS_CMP
rtklibexplorer Apr 27, 2026
640929b
Modify iono-free option to use iono-free combination of freq slots 1 …
rtklibexplorer Apr 28, 2026
bd43d0e
Merge pull request #813 from ourairquality/rtknavi-qt-plot-freq
JensReimann May 1, 2026
bf6432a
Merge pull request #815 from pabloleonbarriga/fix/qtapp-install-targets
JensReimann May 1, 2026
a67d8a8
code2bias: guard code being zero, and code_ix not found
ourairquality Apr 27, 2026
f8c403c
Merge pull request #822 from ourairquality/code2bias-guards
rtklibexplorer May 1, 2026
51cf4ea
Merge pull request #823 from ourairquality/readsp3-comments
rtklibexplorer May 1, 2026
30860a5
Merge pull request #824 from ourairquality/rinex-header-clk
rtklibexplorer May 1, 2026
f542de9
Make Beidou SSR clock and orbit correction message parsing functional
rtklibexplorer May 1, 2026
5b59da3
Some .BIA bias files leave SVN field blank, modify file parsing to ha…
rtklibexplorer May 1, 2026
9ada3b7
Apply code biases for PPP solutions as absolute instead of differenti…
rtklibexplorer May 1, 2026
28ad77c
- Initialize timestamps for SSR corrections in rtksvrinit
rtklibexplorer May 1, 2026
bfd6491
readrnxclk: interpolate the standard deviations
ourairquality May 8, 2026
5c9cd9d
satposs: fix to work with precise clocks from sp3 files
ourairquality May 7, 2026
bdb5af2
Merge pull request #832 from ourairquality/sp3-prec-clks
rtklibexplorer May 8, 2026
0a929ca
Merge pull request #833 from ourairquality/readrnxclk-std-interp
rtklibexplorer May 8, 2026
0e9a16a
Move $SAT output code to stat file for PPP solutions from rtkpos.c to…
rtklibexplorer May 8, 2026
17efff8
rtcm3 ssr: update types, codes, BDS offset, remove std-dev
ourairquality May 8, 2026
de3c4b5
rtkrcv ssr: options to include code and phase bias output
ourairquality May 10, 2026
2c64270
rtksrv update_ssr: remove check for ephemeris iode here
ourairquality May 10, 2026
66082e6
Merge pull request #834 from ourairquality/rtcm-ssr-update
rtklibexplorer May 10, 2026
a9df4ff
Merge pull request #836 from ourairquality/rtksrv-update-ssr
rtklibexplorer May 10, 2026
e31a503
rtknavi mondlg: increase width of ssr biases column
ourairquality May 9, 2026
1dbdc64
rtknavi, rtkrcv: consider all valid signals frequency indices
ourairquality May 11, 2026
c365315
Merge pull request #838 from ourairquality/rtknavi-qt-ssr-bias-width
JensReimann May 12, 2026
192ea5b
Extend cycle slip detection for PPP solutions to include freqs beyond…
rtklibexplorer May 12, 2026
e45e977
unicore decode_bdsephb: correct var declaration
ourairquality May 27, 2025
104bd5e
addpeph: grow the size at a faster rate
ourairquality Feb 27, 2025
ab75f42
code2obs: declare to return a const char*
ourairquality Jun 28, 2025
1f30e0e
rnx2rtkp: remove trailing comma
ourairquality Jun 14, 2025
e9675bc
ublox: misc
ourairquality Aug 25, 2024
eac7c0c
rtkplot: avoid interger overflow in intermediate calcs
ourairquality Nov 20, 2024
50f55bc
cmake include GNUInstallDirs
ourairquality May 12, 2026
7d13645
-Add VTEC spherical harmonics ionospheric model
rtklibexplorer May 13, 2026
5b26d81
Merge pull request #850 from ourairquality/cmake-gnuintalldirs
JensReimann May 14, 2026
e913138
Merge pull request #849 from ourairquality/rtkplot-overflow
JensReimann May 14, 2026
d8382f1
Merge pull request #835 from ourairquality/rtkrcv-ssr-biases
rtklibexplorer May 17, 2026
77f2a00
Merge pull request #837 from ourairquality/rtknavi-vsat-all-freq
rtklibexplorer May 17, 2026
05fea5b
Merge pull request #843 from ourairquality/unicore-bdsephb-var
rtklibexplorer May 17, 2026
d6f0189
Merge pull request #845 from ourairquality/addpeph-grow-rate
rtklibexplorer May 17, 2026
286aaea
Merge pull request #846 from ourairquality/code2obs-const
rtklibexplorer May 17, 2026
374ecea
Merge pull request #847 from ourairquality/rnx2rtkp-comma
rtklibexplorer May 17, 2026
89a735b
Merge pull request #848 from ourairquality/ublox-misc
rtklibexplorer May 17, 2026
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
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ message("RTKLIB version: ${VERSION}-${PATCH_LEVEL}")

project(rtklib LANGUAGES C CXX VERSION 2.4.3)

include(GNUInstallDirs)
include(CTest)

option(IERS_MODEL "Use Earth models from IERS" OFF)
Expand Down
4 changes: 2 additions & 2 deletions app/consapp/rnx2rtkp/rnx2rtkp.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ static const char *help[]={
" -x level debug trace level (0:off) [0]",
" --rover list rover names for processing, separated by a space",
" --base list base names for processing, separated by a space",
" --version display release version",
" --version display release version"
};
/* show message --------------------------------------------------------------*/
extern int showmsg(const char *format, ...)
Expand Down Expand Up @@ -193,7 +193,7 @@ int main(int argc, char **argv)
else if (n<MAXFILE) infile[n++]=argv[i];
}
if (!prcopt.navsys) {
prcopt.navsys=SYS_GPS|SYS_GLO;
prcopt.navsys=SYS_GPS|SYS_GLO|SYS_GAL|SYS_CMP;
}
if (n<=0) {
showmsg("error : no input file");
Expand Down
84 changes: 66 additions & 18 deletions app/consapp/rtkrcv/rtkrcv.c
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ static const char *helptxt[]={
"observ [-n] [cycle] : show observation data",
"navidata [cycle] : show navigation data",
"stream [cycle] : show stream status",
"ssr [cycle] : show ssr corrections",
"ssr [-c] [-p] [cycle] : show ssr corrections",
"error : show error/warning messages",
"option [opt] : show option(s)",
"set opt [val] : set option",
Expand Down Expand Up @@ -724,8 +724,14 @@ static void prstatus(vt_t *vt)
rtksvrunlock(&svr);

for (i=n=0;i<MAXSAT;i++) {
if (rtk->opt.mode==PMODE_SINGLE&&!rtk->ssat[i].vs) continue;
if (rtk->opt.mode!=PMODE_SINGLE&&!rtk->ssat[i].vsat[0]) continue;
if (rtk->opt.mode == PMODE_SINGLE) {
if (!rtk->ssat[i].vs) continue;
} else {
int any = 0;
for (int fi = 0; fi < NFREQ; fi++)
if (rtk->ssat[i].vsat[fi]) { any = 1; break; }
if (!any) continue;
}
azel[ n*2]=rtk->ssat[i].azel[0];
azel[1+n*2]=rtk->ssat[i].azel[1];
n++;
Expand Down Expand Up @@ -842,7 +848,7 @@ static void prsatellite(vt_t *vt, int nf)
*rtk=svr.rtk;
rtksvrunlock(&svr);
if (nf<=0||nf>NFREQ) nf=NFREQ;
vt_printf(vt,"\n%s%3s %2s %5s %4s",ESC_BOLD,"SAT","C1","Az","El");
vt_printf(vt,"\n%s%3s %2s %5s %4s",ESC_BOLD,"SAT","V","Az","El");
for (j=0;j<nf;j++) vt_printf(vt," L%d" ,frq[j]);
for (j=0;j<nf;j++) vt_printf(vt," Fix%d" ,frq[j]);
for (j=0;j<nf;j++) vt_printf(vt," P%dRes",frq[j]);
Expand All @@ -855,7 +861,14 @@ static void prsatellite(vt_t *vt, int nf)
for (i=0;i<MAXSAT;i++) {
if (rtk->ssat[i].azel[1]<=0.0) continue;
satno2id(i+1,id);
vt_printf(vt,"%3s %2s",id,rtk->ssat[i].vs?"OK":"-");
int vsat = 0;
if (rtk->opt.mode == PMODE_SINGLE) {
vsat = rtk->ssat[i].vs;
} else {
for (int fi = 0; fi < NFREQ; fi++)
if (rtk->ssat[i].vsat[fi]) { vsat = 1; break; }
}
vt_printf(vt,"%3s %2s",id,vsat?"OK":"-");
az=rtk->ssat[i].azel[0]*R2D; if (az<0.0) az+=360.0;
el=rtk->ssat[i].azel[1]*R2D;
vt_printf(vt," %5.1f %4.1f",az,el);
Expand Down Expand Up @@ -924,7 +937,7 @@ static void prnavidata(vt_t *vt)
double ion[8],utc[8];
gtime_t time;
char id[8],s1[64],s2[64],s3[64];
int i,valid,prn;
int i,valid;

trace(4,"prnavidata:\n");

Expand All @@ -940,8 +953,8 @@ static void prnavidata(vt_t *vt)
ESC_BOLD,"SAT","S","IOD","IOC","FRQ","A/A","SVH","Toe","Toc",
"Ttr/Tof","L2C","L2P",ESC_RESET);
for (i=0;i<MAXSAT;i++) {
int sys = satsys(i+1,&prn);
if (!(sys&(SYS_GPS|SYS_GAL|SYS_QZS|SYS_CMP))||
int sys = satsys(i + 1, NULL);
if ((sys & (SYS_GPS | SYS_GAL | SYS_QZS | SYS_CMP) & prcopt.navsys) == 0 ||
eph[i].sat!=i+1) continue;
// Mask QZS LEX health.
valid=eph[i].toe.time!=0&&fabs(timediff(time,eph[i].toe))<=MAXDTOE &&
Expand All @@ -955,7 +968,8 @@ static void prnavidata(vt_t *vt)
eph[i].svh,s1,s2,s3,eph[i].code,eph[i].flag);
}
for (i=0;i<MAXSAT;i++) {
if (!(satsys(i+1,&prn)&SYS_GLO)||geph[prn-1].sat!=i+1) continue;
int prn, sys = satsys(i + 1, &prn);
if ((sys & SYS_GLO & prcopt.navsys) == 0 || geph[prn - 1].sat != i + 1) continue;
valid=geph[prn-1].toe.time!=0&&fabs(timediff(time,geph[prn-1].toe))<=MAXDTOE_GLO &&
(geph[prn-1].svh & 9) == 0 && (geph[prn-1].svh & 6) != 4;
satno2id(i+1,id);
Expand Down Expand Up @@ -1024,7 +1038,7 @@ static void prstream(vt_t *vt)
}
}
/* print ssr correction ------------------------------------------------------*/
static void prssr(vt_t *vt)
static void prssr(vt_t *vt, int cbias, int pbias)
{
static char buff[128*MAXSAT];
gtime_t time;
Expand All @@ -1040,21 +1054,40 @@ static void prssr(vt_t *vt)
rtksvrunlock(&svr);

p+=sprintf(p,"\n%s%3s %3s %3s %3s %3s %19s %6s %6s %6s %6s %6s %6s %8s "
"%6s %6s %6s%s\n",
"%6s %6s %6s%s%s%s\n",
ESC_BOLD,"SAT","S","UDI","IOD","URA","T0","D0-A","D0-C","D0-R",
"D1-A","D1-C","D1-R","C0","C1","C2","C-HR",ESC_RESET);
"D1-A","D1-C","D1-R","C0","C1","C2","C-HR",
cbias ? " CBIAS" : "", pbias ? " PBIAS" : "", ESC_RESET);
for (i=0;i<MAXSAT;i++) {
if (!ssr[i].t0[0].time) continue;
if ((satsys(i + 1, NULL) & prcopt.navsys) == 0) continue;
satno2id(i+1,id);
valid=fabs(timediff(time,ssr[i].t0[0]))<=1800.0;
time2str(ssr[i].t0[0],tstr,0);
// udi[2] refd

p+=sprintf(p,"%3s %3s %3.0f %3d %3d %19s %6.3f %6.3f %6.3f %6.3f %6.3f "
"%6.3f %8.3f %6.3f %6.4f %6.3f\n",
"%6.3f %8.3f %6.3f %6.4f %6.3f ",
id,valid?"OK":"-",ssr[i].udi[0],ssr[i].iode,ssr[i].ura,tstr,
ssr[i].deph[0],ssr[i].deph[1],ssr[i].deph[2],
ssr[i].ddeph[0]*1E3,ssr[i].ddeph[1]*1E3,ssr[i].ddeph[2]*1E3,
ssr[i].dclk[0],ssr[i].dclk[1]*1E3,ssr[i].dclk[2]*1E3,
ssr[i].hrclk);

if (cbias) {
for (int k = 1; k < MAXCODE; k++) {
if (ssr[i].cbias[k - 1] == 0.0) continue;
p += sprintf(p, " %s: %7.3lf", code2obs(k), ssr[i].cbias[k - 1]);
}
if (pbias) p += sprintf(p, " /");
}
if (pbias) {
for (int k = 1; k < MAXCODE; k++) {
if (ssr[i].pbias[k - 1] == 0.0) continue;
p += sprintf(p, " %s: %6.3lf", code2obs(k), ssr[i].pbias[k - 1]);
}
}
p += sprintf(p, "\n");
}
vt_puts(vt,buff);
}
Expand Down Expand Up @@ -1202,15 +1235,25 @@ static void cmd_stream(char **args, int narg, vt_t *vt)
/* ssr command ---------------------------------------------------------------*/
static void cmd_ssr(char **args, int narg, vt_t *vt)
{
int cycle=0;

trace(3,"cmd_ssr:\n");

if (narg>1) cycle=(int)(atof(args[1])*1000.0);

int cycle = 0;
int cbias = 0, pbias = 0;
for (int i = 1; i < narg; i++) {
if (strcmp(args[i], "-c") == 0) {
cbias = 1;
continue;
}
if (strcmp(args[i], "-p") == 0) {
pbias = 1;
continue;
}
cycle = (int)(atof(args[i]) * 1000.0);
}

while (!vt_chkbrk(vt)) {
if (cycle>0) vt_printf(vt,ESC_CLEAR);
prssr(vt);
prssr(vt, cbias, pbias);
if (cycle>0) sleepms(cycle); else return;
}
vt_printf(vt,"\n");
Expand Down Expand Up @@ -1746,6 +1789,11 @@ static void deamonise(void)
* stream [cycle]
* Show stream status. Use option cycle for cyclic display.
*
* ssr [-c] [-p] [cycle]
* Show the RTCM SSR state, with option -c to include code biases and
* with option -p to include phase biases. Use option cycle for cyclic
* display.
*
* error
* Show error/warning messages. To stop messages, send break (ctr-C).
*
Expand Down
2 changes: 1 addition & 1 deletion app/qtapp/rtklaunch_qt/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ set_target_properties(rtklaunch_qt PROPERTIES
WIN32_EXECUTABLE ON
MACOSX_BUNDLE ON
)
install(TARGETS rtkget_qt RUNTIME DESTINATION bin BUNDLE DESTINATION bin)
install(TARGETS rtklaunch_qt RUNTIME DESTINATION bin BUNDLE DESTINATION bin)
if (UNIX)
install(FILES rtklaunch_qt.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
install(FILES ../icon/rtklaunch.png DESTINATION ${XDG_APPS_PIXMAPS_DIR})
Expand Down
2 changes: 1 addition & 1 deletion app/qtapp/rtknavi_qt/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ set_target_properties(rtknavi_qt PROPERTIES
WIN32_EXECUTABLE ON
MACOSX_BUNDLE ON
)
install(TARGETS rtkget_qt RUNTIME DESTINATION bin BUNDLE DESTINATION bin)
install(TARGETS rtknavi_qt RUNTIME DESTINATION bin BUNDLE DESTINATION bin)
if (UNIX)
install(FILES rtknavi_qt.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
install(FILES ../icon/rtknavi.png DESTINATION ${XDG_APPS_PIXMAPS_DIR})
Expand Down
27 changes: 19 additions & 8 deletions app/qtapp/rtknavi_qt/mondlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -464,8 +464,14 @@ void MonitorDialog::showRtk()
rtksvrunlock(rtksvr); // unlock

for (j = k = 0; j < MAXSAT; j++) {
if (rtk->opt.mode == PMODE_SINGLE && !rtk->ssat[j].vs) continue;
if (rtk->opt.mode != PMODE_SINGLE && !rtk->ssat[j].vsat[0]) continue;
if (rtk->opt.mode == PMODE_SINGLE) {
if (!rtk->ssat[j].vs) continue;
} else {
int any = 0;
for (int fi = 0; fi < NFREQ; fi++)
if (rtk->ssat[j].vsat[fi]) { any = 1; break; }
if (!any) continue;
}
azel[k * 2] = rtk->ssat[j].azel[0];
azel[k * 2 + 1] = rtk->ssat[j].azel[1];
k++;
Expand Down Expand Up @@ -792,8 +798,13 @@ void MonitorDialog::showSat()
rtksvrunlock(rtksvr);

for (i = 0; i < MAXSAT; i++) {
ssat = rtk->ssat + i;
vsat[i] = ssat->vs;
if (rtk->opt.mode == PMODE_SINGLE) {
vsat[i] = rtk->ssat[i].vs;
} else {
vsat[i] = 0;
for (int fi = 0; fi < NFREQ; fi++)
if (rtk->ssat[i].vsat[fi]) { vsat[i] = 1; break; }
}
}

for (i = 0, nsat = 0; i < MAXSAT; i++) {
Expand Down Expand Up @@ -821,7 +832,7 @@ void MonitorDialog::showSat()
if (ui->cBSelectSatellites->currentIndex() == 1 && !vsat[i]) continue;
satno2id(i + 1, id);
ui->tWConsole->item(n, j++)->setText(id);
ui->tWConsole->item(n, j++)->setText(ssat->vs ? tr("OK") : tr("-"));
ui->tWConsole->item(n, j++)->setText(vsat[i] ? tr("OK") : tr("-"));
az = ssat->azel[0] * R2D; if (az < 0.0) az += 360.0;
el = ssat->azel[1] * R2D;
ui->tWConsole->item(n, j++)->setText(QString::number(az, 'f', 1));
Expand Down Expand Up @@ -1065,7 +1076,7 @@ void MonitorDialog::setObservations()
//---------------------------------------------------------------------------
void MonitorDialog::showObservations()
{
char tstr[40], id[8], *code;
char tstr[40], id[8];
int i, k, n = 0, nex = ui->cBSelectObservation->currentIndex() ? NEXOBS : 0;
int sys = sys_tbl[ui->cBSelectNavigationSystems->currentIndex()];
int std = ui->cBSelectObservation->currentIndex();
Expand Down Expand Up @@ -1107,7 +1118,7 @@ void MonitorDialog::showObservations()
ui->tWConsole->item(i, j++)->setText(id);
ui->tWConsole->item(i, j++)->setText(QString("(%1)").arg(obs[i].rcv));
for (k = 0; k < NFREQ + nex; k++) {
code = code2obs(obs[i].code[k]);
const char *code = code2obs(obs[i].code[k]);
if (*code) ui->tWConsole->item(i, j++)->setText(code);
else ui->tWConsole->item(i, j++)->setText("-");
}
Expand Down Expand Up @@ -2063,7 +2074,7 @@ void MonitorDialog::setRtcmSsr()
header << tr("SAT") << tr("Status") << tr("UDI (s)") << tr("UDHR (s)") << tr("IOD") << tr("URA") << tr("Datum") << tr("T0")
<< tr("D0-A (m)") << tr("D0-C (m)") << tr("D0-R (m)") << tr("D1-A (mm/s)") << tr("D1-C (mm/s)") << tr("D1-R (mm/s)")
<< tr("C0 (m)") << tr("C1 (mm/s)") << tr("C2 (mm/s²)") << tr("C-HR (m)") << tr("Code Bias (m)") << tr("Phase Bias (m)");
int i, width[] = { 46, 60, 70, 90, 30, 25, 70, 115, 90, 90, 90, 120, 120, 120, 90, 120, 120, 120, 200, 200 };
int i, width[] = { 46, 60, 70, 90, 30, 25, 70, 115, 90, 90, 90, 120, 120, 120, 90, 120, 120, 120, 400, 400 };

ui->tWConsole->setColumnCount(20);
ui->tWConsole->setRowCount(0);
Expand Down
Loading