53#define R2D (180.0 / 3.1415926535897932)
60#define MIN_INT_RESET 30000
75 memcpy(svr->
sbuf[index] + svr->
nsb[index], buff, n);
86 tracet(NULL, 4,
"writesol: index=%d\n", index);
88 for (i = 0; i < 2; i++) {
129 for (j = 0, frq = -999; j < 3; j++) {
135 if (frq < -7 || frq > 6) {
139 for (j = 0; j < 3; j++) {
150 int i, n = 0, sat, sys;
153 for (i = 0; i < obs->
n; i++) {
160 svr->
obs[index][iobs].
data[n++].
rcv = index + 1;
162 svr->
obs[index][iobs].
n = n;
165 svr->
nmsg[index][0]++;
169 eph_t *eph1, *eph2, *eph3;
170 geph_t *geph1, *geph2, *geph3;
176 eph1 = nav->
eph + ephsat - 1 +
MAXSAT * ephset;
178 eph3 = svr->
nav.
eph + ephsat - 1 +
MAXSAT * (2 + ephset);
186 svr->
nmsg[index][1]++;
189 geph1 = nav->
geph + prn - 1;
190 geph2 = svr->
nav.
geph + prn - 1;
198 svr->
nmsg[index][6]++;
205 if (sbsmsg && (sbssat == sbsmsg->
prn || sbssat == 0)) {
206 sbsmsg->
rcv = index + 1;
217 svr->
nmsg[index][3]++;
235 svr->
nmsg[index][2]++;
240 double pos[3], del[3] = {0}, dr[3];
250 for (i = 0; i < 3; i++) {
258 for (i = 0; i < 3; i++) {
259 svr->
rtk.
rb[i] += sta->
del[i] + dr[i];
263 for (i = 0; i < 3; i++) {
264 svr->
rtk.
rb[i] += dr[i];
268 svr->
nmsg[index][4]++;
272 int i, sys, prn, iode;
275 for (i = 0; i <
MAXSAT; i++) {
287 sys =
satsys(i + 1, &prn);
302 svr->
nmsg[index][7]++;
312 sprintf(staname,
"sta%d", index);
319 svr->
nmsg[index][10]++;
327 svr->
nmsg[index][11]++;
347 int index,
int iobs) {
348 tracet(NULL, 4,
"updatesvr: ret=%d ephsat=%d ephset=%d index=%d\n", ret, ephsat, ephset, index);
352 }
else if (ret == 2) {
354 }
else if (ret == 3) {
356 }
else if (ret == 9) {
358 }
else if (ret == 5) {
360 }
else if (ret == 7) {
361 svr->
nmsg[index][5]++;
362 }
else if (ret == 10 || ret == 15) {
364 }
else if (ret == 17) {
365 svr->
nmsg[index][8]++;
366 }
else if (ret == 11) {
368 }
else if (ret == 12) {
370 }
else if (ret == -1) {
371 svr->
nmsg[index][9]++;
379 int i, ret = 0, ephsat = 0, ephset = 0, fobs = 0;
380 static int init_flg = 1;
381 static char buff[3][4096];
382 static int nbyte[3] = {0};
384 tracet(NULL, 4,
"decoderaw: index=%d\n", index);
393 for (i = 0; i < svr->
nb[index]; i++) {
411 int ch = (index == 1) ? 1 : 0;
425 int remain = svr->
nb[index] - i;
427 memmove(svr->
buff[index], svr->
buff[index] + i, remain);
429 svr->
nb[index] = remain;
461 int net2, nfound = 0;
479 obs = &svr->
raw[index].
obs;
480 nav = &svr->
raw[index].
nav;
496 update_svr(svr, ret, obs, nav, ephsat, ephset, sbsmsg, index, fobs);
502 int k, ch, cret, max_cret = 0;
527 trace(NULL, 3,
"L6 redirect: fmt=%d ch=%d prn=%d index=%d\n", svr->
format[index], ch,
539 trace(NULL, 2,
"L6 redirect: week_ref initialized to %d\n", week);
544 for (k = 0; k < 250; k++) {
547 if (cret > max_cret) {
551 trace(NULL, 2,
"L6 CSSR epoch: ch=%d k=%d\n", ch, k);
575 trace(NULL, 2,
"L6 redirect: max_cret=%d ch=%d nframe=%d havebit=%d nbit=%d\n", max_cret, ch,
608 for (k = 0; k < 250; k++) {
616 for (s = 0; s <
MAXSAT; s++) {
620 trace(NULL, 3,
"L6D iono: prn=%d rid=%d index=%d\n", prn, rid, index);
629 if (svr->
has && ret == 13) {
634 for (k = 0; k <
MAXSAT; k++) {
642 trace(NULL, 2,
"HAS MT1 decoded: prn=%d index=%d\n", svr->
raw[index].
has_prn, index);
666 tracet(NULL, 4,
"decodefile: index=%d\n", index);
671 if ((nb = svr->
nb[index]) <= 2 || svr->
buff[index][nb - 2] !=
'\r' || svr->
buff[index][nb - 1] !=
'\n') {
675 strncpy(file, (
char*)svr->
buff[index], nb - 2);
683 tracet(NULL, 1,
"decodefile: nav_t alloc error\n");
692 tracet(NULL, 1,
"sp3 file read error: %s\n", file);
705 strcpy(svr->
files[index], file);
712 tracet(NULL, 1,
"rinex clock file read error: %s\n", file);
725 strcpy(svr->
files[index], file);
734 const char *p = cmd, *q;
738 for (p = cmd;; p = q + 1) {
740 if (*q ==
'\r' || *q ==
'\n' || *q ==
'\0') {
749 if ((r = strrchr(msg,
'#'))) {
750 sscanf(r,
"# %d", &period);
752 while (*--r ==
' ') {
759 if (*msg && cycle % period == 0) {
776 for (i = 0; i < 3; i++) {
777 dr[i] = rtk->
sol.
rr[i] - rtk->
rb[i];
779 return norm(dr, 3) * 0.001;
783 sol_t sol_nmea = {{0}};
797 }
else if (svr->
nmeareq == 2) {
805 }
else if (svr->
nmeareq == 3) {
812 tracet(NULL, 2,
"send reset: bl=%.3f rr=%.3f %.3f %.3f rb=%.3f %.3f %.3f\n", bl, svr->
rtk.
sol.
rr[0],
825 for (i = 0; i < 3; i++) {
831 tracet(NULL, 3,
"send nmea: rr=%.3f %.3f %.3f\n", sol_nmea.
rr[0], sol_nmea.
rr[1], sol_nmea.
rr[2]);
842 uint32_t tick, ticknmea, tick1hz, tickreset;
845 int i, j, n, fobs[3] = {0}, cycle, cputime;
847 tracet(ctx, 3,
"rtksvrthread:\n");
855 ticknmea = tick1hz = svr->
tick - 1000;
858 for (cycle = 0; svr->
state; cycle++) {
860 for (i = 0; i < 3; i++) {
861 p = svr->
buff[i] + svr->
nb[i];
875 memcpy(svr->
pbuf[i] + svr->
npb[i], p, n);
879 for (i = 0; i < 3; i++) {
893 for (i = 0; i < 3; i++) {
897 for (i = 0; i < 3; i++) {
901 for (i = 0; i < fobs[0]; i++) {
903 for (j = 0; j < svr->
obs[0][i].
n && obs.
n <
MAXOBS * 2; j++) {
906 for (j = 0; j < svr->
obs[1][0].
n && obs.
n <
MAXOBS * 2; j++) {
914 for (ii = 0; ii < 6; ii++) {
930 svr->
prcout += fobs[0] - i - 1;
939 for (i = 0; i < 3; i++) {
947 if ((cputime = (
int)(
tickget() - tick)) > 0) {
957 for (i = 0; i < 3; i++) {
958 svr->
nb[i] = svr->
npb[i] = 0;
966 for (i = 0; i < 2; i++) {
982 eph_t eph0 = {0, -1, -1};
987 tracet(NULL, 3,
"rtksvrinit:\n");
990 for (i = 0; i < 3; i++) {
994 for (i = 0; i < 3; i++) {
997 for (i = 0; i < 2; i++) {
1002 for (i = 0; i < 3; i++) {
1005 for (i = 0; i < 2; i++) {
1008 for (i = 0; i < 3; i++) {
1011 for (i = 0; i < 3; i++) {
1012 svr->
buff[i] = NULL;
1014 for (i = 0; i < 2; i++) {
1015 svr->
sbuf[i] = NULL;
1017 for (i = 0; i < 3; i++) {
1018 svr->
pbuf[i] = NULL;
1023 for (i = 0; i < 3; i++) {
1024 for (j = 0; j < 12; j++) {
1025 svr->
nmsg[i][j] = 0;
1028 for (i = 0; i < 3; i++) {
1029 svr->
ftime[i] = time0;
1031 for (i = 0; i < 3; i++) {
1032 svr->
files[i][0] =
'\0';
1038 for (i = 0; i < 3; i++) {
1042 memset(&svr->
nav, 0,
sizeof(
nav_t));
1046 tracet(NULL, 1,
"rtksvrinit: malloc error\n");
1049 for (i = 0; i <
MAXSAT * 4; i++) {
1052 for (i = 0; i <
NSATGLO * 2; i++) {
1055 for (i = 0; i <
NSATSBS * 2; i++) {
1064 for (i = 0; i < 3; i++) {
1067 tracet(NULL, 1,
"rtksvrinit: malloc error\n");
1072 for (i = 0; i < 3; i++) {
1073 memset(svr->
raw + i, 0,
sizeof(
raw_t));
1080 for (i = 0; i < 3; i++) {
1103 for (i = 0; i < 3; i++) {
1182 char** cmds,
char** cmds_periodic,
char** rcvopts,
int nmeacycle,
int nmeareq,
1188 tracet(NULL, 3,
"rtksvrstart: cycle=%d buffsize=%d navsel=%d nmeacycle=%d nmeareq=%d\n", cycle,
buffsize, navsel,
1189 nmeacycle, nmeareq);
1192 sprintf(
errmsg,
"server already started");
1196 svr->
cycle = cycle > 1 ? cycle : 1;
1197 svr->
nmeacycle = nmeacycle > 1000 ? nmeacycle : 1000;
1199 for (i = 0; i < 3; i++) {
1203 for (i = 0; i < 3; i++) {
1204 svr->
format[i] = formats[i];
1215 for (i = 0; i < 3; i++) {
1219 for (i = 0; i < 3; i++) {
1220 svr->
nb[i] = svr->
npb[i] = 0;
1222 tracet(NULL, 1,
"rtksvrstart: malloc error\n");
1223 sprintf(
errmsg,
"rtk server malloc error");
1226 for (j = 0; j < 12; j++) {
1227 svr->
nmsg[i][j] = 0;
1230 svr->
obs[i][j].
n = 0;
1232 strcpy(svr->
cmds_periodic[i], !cmds_periodic[i] ?
"" : cmds_periodic[i]);
1239 strcpy(svr->
raw[i].
opt, rcvopts[i]);
1240 strcpy(svr->
rtcm[i].
opt, rcvopts[i]);
1252 for (i = 0; i < 2; i++) {
1254 tracet(NULL, 1,
"rtksvrstart: malloc error\n");
1255 sprintf(
errmsg,
"rtk server malloc error");
1260 for (i = 0; i < 2; i++) {
1261 svr->
solopt[i] = solopt[i];
1265 for (i = 0; i < 6; i++) {
1266 svr->
rtk.
rb[i] = i < 3 ? prcopt->
rb[i] : 0.0;
1270 for (i = 0; i <
MAXSAT * 4; i++) {
1273 for (i = 0; i <
NSATGLO * 2; i++) {
1276 for (i = 0; i <
NSATSBS * 2; i++) {
1287 for (i = 0; i < 3; i++) {
1306 tracet(NULL, 1,
"rtksvrstart: HAS context alloc error\n");
1336 tracet(NULL, 1,
"rtksvrstart: MADOCA iono context alloc error\n");
1343 for (i = 0; i < 8; i++) {
1349 sprintf(
errmsg,
"str%d open error path=%s", i + 1, paths[i]);
1350 for (i--; i >= 0; i--) {
1357 if (rst.
time != 0) {
1376 for (i = 0; i < 3; i++) {
1385 for (i = 3; i < 5; i++) {
1390 pthread_attr_t attr;
1392 pthread_attr_init(&attr);
1393 pthread_attr_setstacksize(&attr, 8 * 1024 * 1024);
1395 pthread_attr_destroy(&attr);
1400 sprintf(
errmsg,
"thread create error\n");
1418 tracet(NULL, 3,
"rtksvrstop:\n");
1422 for (i = 0; i < 3; i++) {
1433 pthread_join(svr->
thread, NULL);
1447 tracet(NULL, 3,
"rtksvropenstr: index=%d str=%d path=%s\n", index, str, path);
1449 if (index < 3 || index > 7 || !svr->
state) {
1460 tracet(NULL, 2,
"stream open error: index=%d\n", index);
1465 svr->
solopt[index - 3] = *solopt;
1482 tracet(NULL, 3,
"rtksvrclosestr: index=%d\n", index);
1484 if (index < 3 || index > 7 || !svr->
state) {
1510 tracet(NULL, 4,
"rtksvrostat: rcv=%d\n", rcv);
1516 ns = svr->
obs[rcv][0].
n;
1520 for (i = 0; i < ns; i++) {
1524 for (j = 0; j < NFREQ; j++) {
1547 tracet(NULL, 4,
"rtksvrsstat:\n");
1553 p += sprintf(p,
"(%d) %s ", i + 1, s);
1566 char buff[
MAXSOLMSG + 1], tstr[32], *p, *q;
1570 tracet(NULL, 4,
"rtksvrmark:name=%s comment=%s\n", name, comment);
1582 for (i = 0; i < 2; i++) {
1585 p += sprintf(p,
"$MARK,%d,%.3f,%d,%.4f,%.4f,%.4f,%s,%s\r\n", week, tow, svr->
rtk.
sol.
stat,
1588 p += sprintf(p,
"$GPTXT,01,01,02,MARK:%s,%s,%.9f,%.9f,%.4f,%d,%s", name, tstr, pos[0] *
R2D, pos[1] *
R2D,
1590 for (q = (
char*)buff + 1, sum = 0; *q; q++) {
1593 p += sprintf(p,
"*%02X\r\n", sum);
1595 p += sprintf(p,
"%s MARK: %s,%s,%.9f,%.9f,%.4f,%d,%s\r\n",
COMMENTH, name, tstr, pos[0] *
R2D, pos[1] *
R2D,
1599 saveoutbuf(svr, (uint8_t*)buff, (
int)(p - buff), i);
1603 p += sprintf(p,
"%s MARK: %s,%s,%.9f,%.9f,%.4f,%d,%s\r\n",
COMMENTH, name, tstr, pos[0] *
R2D, pos[1] *
R2D,
void clas_check_grid_status(clas_ctx_t *ctx, const clas_corr_t *corr, int ch)
Check and update grid status flags based on correction availability.
int clas_route_l6frame(clas_ctx_t *ctx, int prn, int ptn, int l6mrg, gtime_t now)
Route one interleaved L6D frame to a CLAS channel (or drop it).
int clas_input_cssr(clas_ctx_t *ctx, uint8_t data, int ch)
Input CSSR byte stream (one byte at a time, real-time).
void clas_set_l6tag(clas_ctx_t *ctx, int ch, double tag)
Set the receiver time tag of the L6 frame about to be input.
void clas_ctx_free(clas_ctx_t *ctx)
Free CLAS context (release heap-allocated bank control).
int clas_bank_get_close(const clas_ctx_t *ctx, gtime_t time, int network, int ch, clas_corr_t *corr)
Merge closest corrections from all banks into a clas_corr_t snapshot.
void clas_update_global(nav_t *nav, const clas_corr_t *corr, int ch)
Apply global corrections (orbit/clock/bias) to nav_t.ssr[].
int clas_ctx_init(clas_ctx_t *ctx)
Initialize CLAS context (allocate bank control on heap).
int clas_decode_msg(clas_ctx_t *ctx, int ch)
Decode the next pending CSSR message from the assembled bit buffer.
mrtk_ctx_t * g_mrtk_ctx
Global context pointer for transitional migration.
void enu2ecef(const double *pos, const double *e, double *r)
Transform local tangential coordinate vector to ECEF.
void ecef2pos(const double *r, double *pos)
Transform ECEF position to geodetic position.
MRTKLIB Coordinates Module — Coordinate transformations and geometry.
int satsys(int sat, int *prn)
MRTKLIB Broadcast Ephemeris Module — Satellite orbit/clock types and Kepler/GLONASS/SBAS orbit comput...
void has_free(has_t *has)
Free a Galileo HAS decode context.
int has_input_page(has_t *has, int prn, const uint8_t *page56, gtime_t time)
Input one received Galileo HAS page.
has_t * has_new(void)
Allocate and initialize a Galileo HAS decode context.
const l6_prn_info_t * l6_prn_info(int prn)
Look up the auxiliary information of an L6 PRN.
int l6_parse_header(const uint8_t *frame, l6_header_t *h)
Parse the header of one L6 frame and classify its service.
MRTKLIB L6 Module — QZSS L6 frame header parsing.
void init_mcssr(const gtime_t gt)
Initialize MADOCA-PPP CSSR control struct for current channel.
int input_qzssl6e(rtcm_t *rtcm, const uint8_t data)
Stack QZSS L6E message and synchronize frame with L6 preamble.
MRTKLIB MADOCA-PPP Module — QZSS L6E CSSR message decode functions.
void init_miono(const gtime_t gt)
Initialize MADOCA-PPP L6D ionospheric correction control.
int input_qzssl6d(mdcl6d_t *mdcl6d, const uint8_t data)
Input QZSS L6D message byte-by-byte.
int strwrite(struct stream_tag *stream, uint8_t *buff, int n)
int getstano(stat_t *stat, const char *pntname)
Search for a point by name or add a new point if not found.
int block2stat(rtcm_t *rtcm, stat_t *stat)
Convert RTCM3 block data to station statistics.
int input_stat(sstat_t *sstat, const char data, char *buff, int *nbyte)
Stack stat message and synchronize frame with stat preamble.
MRTKLIB MADOCA Local Correction Module — local correction common functions and constants.
void matcpy(double *A, const double *B, int n, int m)
Copy matrix.
double norm(const double *a, int n)
Euclidean norm of vector.
MRTKLIB Matrix Module — Matrix/vector operations and estimation.
int satno(int sys, int prn)
Convert satellite system+prn/slot number to satellite number.
MRTKLIB Navigation Module — Navigation data types and satellite/nav utility functions.
int sortobs(obs_t *obs)
Sort observation data by time, receiver, and satellite.
MRTKLIB Observation Module — Observation data types and utility functions.
const prcopt_t prcopt_default
const solopt_t solopt_default
MRTKLIB Options Module — Processing and solution option types.
void readsp3(const char *file, nav_t *nav, int opt)
Read sp3 precise ephemeris file.
MRTKLIB Precise Ephemeris Module — Earth rotation parameter types and ERP I/O functions.
MRTKLIB Precise Point Positioning (PPP) Module.
void free_raw(raw_t *raw)
Free receiver raw data control struct.
int input_raw(raw_t *raw, rtcm_t *rtcm, int format, uint8_t data)
Input receiver raw data from stream (byte-by-byte).
int init_raw(raw_t *raw, int format)
Initialize receiver raw data control struct.
MRTKLIB Receiver Raw Data Module — Receiver raw data types and decoder functions for various GNSS rec...
int readrnxc(const char *file, nav_t *nav)
Read RINEX clock files.
MRTKLIB RINEX Module — RINEX file read/write types and functions.
void free_rtcm(rtcm_t *rtcm)
Free RTCM control struct.
int init_rtcm(rtcm_t *rtcm)
Initialize RTCM control struct.
int input_rtcm2(rtcm_t *rtcm, uint8_t data)
Input RTCM 2 message from stream (byte-by-byte).
int input_rtcm3(rtcm_t *rtcm, uint8_t data)
Input RTCM 3 message from stream (byte-by-byte).
MRTKLIB RTCM Module — RTCM message types and functions.
static void errmsg(rtk_t *rtk, const char *format,...)
int rtkpos(mrtk_ctx_t *ctx, rtk_t *rtk, const obsd_t *obs, int n, nav_t *nav)
Compute rover position by precise positioning.
int rtkoutstat(rtk_t *rtk, char *buff)
Write solution status to buffer.
void rtkfree(rtk_t *rtk)
Free memory for RTK control struct.
void rtkinit(rtk_t *rtk, const prcopt_t *opt)
Initialize RTK control struct.
MRTKLIB RTK Positioning Module — relative and precise positioning.
void rtksvrunlock(rtksvr_t *svr)
Unlock RTK server mutex.
int rtksvrmark(rtksvr_t *svr, const char *name, const char *comment)
Mark current position in solution.
static void update_sbs(rtksvr_t *svr, sbsmsg_t *sbsmsg, int index)
void rtksvrstop(rtksvr_t *svr, char **cmds)
Stop RTK server.
static void update_ionutc(rtksvr_t *svr, nav_t *nav, int index)
static void * rtksvrthread(void *arg)
static void update_glofcn(rtksvr_t *svr)
static void update_lcl(rtksvr_t *svr, int index)
static void update_ssr(rtksvr_t *svr, int index)
static void writesolhead(stream_t *stream, const solopt_t *solopt)
void rtksvrclosestr(rtksvr_t *svr, int index)
Close RTK server output/log stream.
static void update_obs(rtksvr_t *svr, obs_t *obs, int index, int iobs)
static void writesol(rtksvr_t *svr, int index)
static void send_nmea(rtksvr_t *svr, uint32_t *tickreset)
void rtksvrsstat(rtksvr_t *svr, int *sstat, char *msg)
Get stream status.
int rtksvr_ssr_applicable(const rtksvr_t *svr, int index, int ret)
Decide whether a decoded SSR result may be applied to nav.ssr_ch[0].
static void periodic_cmd(int cycle, const char *cmd, stream_t *stream)
static void update_antpos(rtksvr_t *svr, int index)
static double baseline_len(const rtk_t *rtk)
int rtksvrinit(rtksvr_t *svr)
Initialize RTK server.
int rtksvropenstr(rtksvr_t *svr, int index, int str, const char *path, const solopt_t *solopt)
Open RTK server output/log stream.
int rtksvrostat(rtksvr_t *svr, int rcv, gtime_t *time, int *sat, double *az, double *el, int **snr, int *vsat)
Get observation data status.
int rtksvrstart(rtksvr_t *svr, int cycle, int buffsize, int *strs, char **paths, int *formats, int navsel, char **cmds, char **cmds_periodic, char **rcvopts, int nmeacycle, int nmeareq, const double *nmeapos, prcopt_t *prcopt, solopt_t *solopt, stream_t *moni, gtime_t rst, char *errmsg)
Start RTK server.
static void update_stat(rtksvr_t *svr, int index)
static void update_svr(rtksvr_t *svr, int ret, obs_t *obs, nav_t *nav, int ephsat, int ephset, sbsmsg_t *sbsmsg, int index, int iobs)
void rtksvrfree(rtksvr_t *svr)
Free RTK server resources.
static void update_eph(rtksvr_t *svr, nav_t *nav, int ephsat, int ephset, int index)
static int decoderaw(rtksvr_t *svr, int index)
static void saveoutbuf(rtksvr_t *svr, uint8_t *buff, int n, int index)
static void decodefile(rtksvr_t *svr, int index)
void rtksvrlock(rtksvr_t *svr)
Lock RTK server mutex.
MRTKLIB RTK Server Module — real-time positioning server.
int sbsupdatecorr(const sbsmsg_t *msg, nav_t *nav)
Update SBAS corrections in navigation data.
MRTKLIB SBAS Module — SBAS message decoding and corrections.
int outsols(uint8_t *buff, const sol_t *sol, const double *rb, const solopt_t *opt)
Output solution to buffer.
int outsolexs(uint8_t *buff, const sol_t *sol, const ssat_t *ssat, const solopt_t *opt)
Output solution extended data to buffer.
int outsolheads(uint8_t *buff, const solopt_t *opt)
Output solution header to buffer.
MRTKLIB Solution Module — Solution data types and I/O functions.
int pntpos(mrtk_ctx_t *ctx, const obsd_t *obs, int n, const nav_t *nav, const prcopt_t *opt, sol_t *sol, double *azel, ssat_t *ssat, char *msg)
Compute receiver position, velocity, clock bias by single-point positioning with pseudorange and dopp...
MRTKLIB Single-Point Positioning Module — SPP functions.
void strinit(stream_t *stream)
Initialize stream structure.
int strstat(stream_t *stream, char *msg)
Get stream status.
gtime_t strgettime(stream_t *stream)
Get stream time.
int strread(stream_t *stream, uint8_t *buff, int n)
Read data from stream.
void strsendnmea(stream_t *stream, const sol_t *sol)
Send NMEA request to stream.
void strinitcom(void)
Initialize stream communication system.
void strclose(stream_t *stream)
Close stream.
int stropen(stream_t *stream, int type, int mode, const char *path)
Open stream.
void strsync(stream_t *stream1, stream_t *stream2)
Sync streams.
void strsendcmd(stream_t *str, const char *cmd)
Send receiver command to stream.
MRTKLIB Stream Module — stream I/O abstraction layer.
struct stream_tag stream_t
MRTKLIB System Module — OS/filesystem utility functions.
void sleepms(int ms)
Sleep for specified milliseconds.
void time2str(gtime_t t, char *s, int n)
Convert gtime_t struct to string.
gtime_t gpst2utc(gtime_t t)
Convert GPS time to UTC considering leap seconds.
double timediff(gtime_t t1, gtime_t t2)
Compute time difference (t1 - t2).
double time2gpst(gtime_t t, int *week)
Convert gtime_t to GPS week/tow.
gtime_t timeadd(gtime_t t, double sec)
Add seconds to gtime_t.
char * time_str(gtime_t t, int n)
Get time string (not reentrant).
gtime_t utc2gpst(gtime_t t)
Convert UTC to GPS time considering leap seconds.
gtime_t timeget(void)
Get current time in UTC.
uint32_t tickget(void)
Get current tick in milliseconds.
MRTKLIB Time Module — GNSS time types and conversion functions.
void tracet(mrtk_ctx_t *ctx, int level, const char *format,...)
Output trace message with elapsed time.
void trace(mrtk_ctx_t *ctx, int level, const char *format,...)
Output trace message.
MRTKLIB Trace Module — debug trace and logging functions.
int tow_ref[CSSR_REF_MAX]
clas_bank_ctrl_t * bank[2]
int week_ref[CSSR_REF_MAX]
GPS/GAL/QZS/BDS/IRN broadcast ephemeris type.
GLONASS broadcast ephemeris type.
GNSS time representation.
Auxiliary per-PRN information for one L6 PRN.
QZSS L6D message control struct.
miono_area_t area[MIONO_MAX_ANUM]
Runtime context for MRTKLIB processing.
ssr_t ssr_ch[SSR_CH_NUM][MAXSAT]
Observation data collection.
miono_region_t re[MIONO_MAX_RID]
mrtk_sigcfg_t sigcfg[MRTK_NSYS]
Receiver raw data control type.
mrtk_sigcfg_t sigcfg[MRTK_NSYS]
RTCM control struct type.
char files[3][MAXSTRPATH]
char cmds_periodic[3][MAXRCVCMD]
sbsmsg_t sbsmsg[MAXSBSMSG]
char cmd_reset[MAXRCVCMD]