MRTKLIB 0.7.14
Modernized GNSS Positioning Library
Loading...
Searching...
No Matches
mrtk_rcvraw.h
Go to the documentation of this file.
1/*------------------------------------------------------------------------------
2 * mrtk_rcvraw.h : receiver raw data type definitions and functions
3 *
4 * Copyright (C) 2026 H.SHIONO (MRTKLIB Project)
5 * Copyright (C) 2023-2025 Cabinet Office, Japan
6 * Copyright (C) 2024-2025 Lighthouse Technology & Consulting Co. Ltd.
7 * Copyright (C) 2023-2025 Japan Aerospace Exploration Agency
8 * Copyright (C) 2023-2025 TOSHIBA ELECTRONIC TECHNOLOGIES CORPORATION
9 * Copyright (C) 2015- Mitsubishi Electric Corp.
10 * Copyright (C) 2014 Geospatial Information Authority of Japan
11 * Copyright (C) 2014 T.SUZUKI
12 * Copyright (C) 2007-2023 T.TAKASU
13 *
14 * SPDX-License-Identifier: BSD-2-Clause
15 *----------------------------------------------------------------------------*/
16/**
17 * @file mrtk_rcvraw.h
18 * @brief MRTKLIB Receiver Raw Data Module — Receiver raw data types and
19 * decoder functions for various GNSS receiver protocols.
20 *
21 * This header provides the raw_t control struct, stream format constants,
22 * and all receiver-specific decoder function declarations extracted from
23 * rtklib.h/rcvraw.c with zero algorithmic changes.
24 *
25 * @note Core functions are implemented in mrtk_rcvraw.c.
26 * Receiver-specific decoders are in src/rcv/mrtk_rcv_*.c.
27 */
28#ifndef MRTK_RCVRAW_H
29#define MRTK_RCVRAW_H
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35#include <stdio.h>
36
37#include "mrtklib/mrtk_eph.h"
39#include "mrtklib/mrtk_nav.h"
40#include "mrtklib/mrtk_obs.h"
41#include "mrtklib/mrtk_opt.h"
42#include "mrtklib/mrtk_rtcm.h"
43#include "mrtklib/mrtk_time.h"
44
45/*============================================================================
46 * Stream Format Constants
47 *===========================================================================*/
48
49#define STRFMT_RTCM2 0 /* stream format: RTCM 2 */
50#define STRFMT_RTCM3 1 /* stream format: RTCM 3 */
51#define STRFMT_OEM4 2 /* stream format: NovAtel OEMV/4 */
52#define STRFMT_OEM3 3 /* stream format: NovAtel OEM3 */
53#define STRFMT_UBX 4 /* stream format: u-blox LEA-*T */
54#define STRFMT_SS2 5 /* stream format: NovAtel Superstar II */
55#define STRFMT_CRES 6 /* stream format: Hemisphere */
56#define STRFMT_STQ 7 /* stream format: SkyTraq S1315F */
57#define STRFMT_JAVAD 8 /* stream format: JAVAD GRIL/GREIS */
58#define STRFMT_NVS 9 /* stream format: NVS NVC08C */
59#define STRFMT_BINEX 10 /* stream format: BINEX */
60#define STRFMT_RT17 11 /* stream format: Trimble RT17 */
61#define STRFMT_SEPT 12 /* stream format: Septentrio */
62#define STRFMT_RINEX 13 /* stream format: RINEX */
63#define STRFMT_SP3 14 /* stream format: SP3 */
64#define STRFMT_RNXCLK 15 /* stream format: RINEX CLK */
65#define STRFMT_SBAS 16 /* stream format: SBAS messages */
66#define STRFMT_NMEA 17 /* stream format: NMEA 0183 */
67#define STRFMT_STAT 20 /* stream format: stat */
68#define STRFMT_L6E 21 /* stream format: L6E CSSR */
69#define STRFMT_CLAS 22 /* stream format: CLAS L6 CSSR */
70
71/*============================================================================
72 * Receiver Raw Data Control Type
73 *===========================================================================*/
74
75/**
76 * @brief Receiver raw data control type.
77 */
78typedef struct {
79 gtime_t time; /**< message time */
80 gtime_t tobs[MAXSAT][NFREQ + NEXOBS]; /**< observation data time */
81 obs_t obs; /**< observation data */
82 obs_t obuf; /**< observation data buffer */
83 nav_t nav; /**< satellite ephemerides */
84 sta_t sta; /**< station parameters */
85 int ephsat; /**< update satellite of ephemeris (0:no satellite) */
86 int ephset; /**< update set of ephemeris (0-1) */
87 sbsmsg_t sbsmsg; /**< SBAS message */
88 char msgtype[256]; /**< last message type */
89 uint8_t subfrm[MAXSAT][380]; /**< subframe buffer */
90 double lockt[MAXSAT][NFREQ + NEXOBS]; /**< lock time (s) */
91 double icpp[MAXSAT], off[MAXSAT], icpc; /**< carrier params for ss2 */
92 double prCA[MAXSAT], dpCA[MAXSAT]; /**< L1/CA pseudrange/doppler for javad */
93 uint8_t halfc[MAXSAT][NFREQ + NEXOBS]; /**< half-cycle add flag */
94 char freqn[MAXOBS]; /**< frequency number for javad */
95 int nbyte; /**< number of bytes in message buffer */
96 int len; /**< message length (bytes) */
97 int iod; /**< issue of data */
98 int tod; /**< time of day (ms) */
99 int tbase; /**< time base (0:gpst,1:utc(usno),2:glonass,3:utc(su)) */
100 int flag; /**< general purpose flag */
101 int outtype; /**< output message type */
102 uint8_t buff[MAXRAWLEN]; /**< message buffer */
103 uint8_t has_page[56]; /**< Galileo HAS page (56-byte, staged for ret=13) */
104 int has_prn; /**< Galileo HAS transmitting PRN (1-40) */
105 gtime_t has_time; /**< Galileo HAS page reception time (GPST) */
106 double l6tag; /**< receiver time tag of the last QZSS L6 frame (s, 0: none) */
107 char opt[256]; /**< receiver dependent options */
108 mrtk_sigcfg_t sigcfg[MRTK_NSYS]; /**< #189: per-constellation signal config (drives decoder code selection) */
109 int sigcfg_set; /**< #189: 1 if sigcfg is configured (else fall back to opt/-Rxxx defaults) */
110 int format; /**< receiver stream format */
111 void* rcv_data; /**< receiver dependent data */
112} raw_t;
113
114/*============================================================================
115 * Core Raw Data Functions
116 *===========================================================================*/
117
118/**
119 * @brief Initialize receiver raw data control struct.
120 * @param[out] raw Receiver raw data control struct
121 * @param[in] format Stream format (STRFMT_???)
122 * @return Status (1:ok, 0:memory allocation error)
123 */
124int init_raw(raw_t* raw, int format);
125
126/**
127 * @brief Free receiver raw data control struct.
128 * @param[in,out] raw Receiver raw data control struct
129 */
130void free_raw(raw_t* raw);
131
132/**
133 * @brief Input receiver raw data from stream (byte-by-byte).
134 * @param[in,out] raw Receiver raw data control struct
135 * @param[in,out] rtcm RTCM control struct
136 * @param[in] format Receiver raw data format (STRFMT_???)
137 * @param[in] data Stream data (1 byte)
138 * @return Status (-1:error, 0:no message, 1:obs data, 2:ephemeris,
139 * 3:sbas message, 9:ion/utc parameter,
140 * 10:ssr message, or (UBX/SBF) CLAS L6 frame in rtcm->buff,
141 * 13:Galileo HAS page staged in raw->has_page/has_prn/has_time,
142 * 15:MADOCA-PPP L6E SSR decoded (UBX/SBF),
143 * 16:MADOCA-PPP iono L6 frame in rtcm->buff (UBX/SBF),
144 * 17:QZNMA L6 frame in rtcm->buff (UBX/SBF))
145 */
146int input_raw(raw_t* raw, rtcm_t* rtcm, int format, uint8_t data);
147
148/**
149 * @brief Input receiver raw data from file.
150 * @param[in,out] raw Receiver raw data control struct
151 * @param[in,out] rtcm RTCM control struct
152 * @param[in] format Receiver raw data format (STRFMT_???)
153 * @param[in] fp File pointer
154 * @return Status (-2:end of file, -1...31:same as input_raw)
155 */
156int input_rawf(raw_t* raw, rtcm_t* rtcm, int format, FILE* fp);
157
158/*============================================================================
159 * Frame Decoding Functions
160 *===========================================================================*/
161
162int decode_frame(const uint8_t* buff, eph_t* eph, alm_t* alm, double* ion, double* utc);
163int test_glostr(const uint8_t* buff);
164int decode_glostr(const uint8_t* buff, geph_t* geph, double* utc);
165int decode_bds_d1(const uint8_t* buff, eph_t* eph, double* ion, double* utc);
166int decode_bds_d2(const uint8_t* buff, eph_t* eph, double* utc);
167int decode_gal_inav(const uint8_t* buff, eph_t* eph, double* ion, double* utc);
168int decode_gal_fnav(const uint8_t* buff, eph_t* eph, double* ion, double* utc);
169int decode_irn_nav(const uint8_t* buff, eph_t* eph, double* ion, double* utc);
170
171/**
172 * @brief Route one QZSS L6 frame received in a UBX/SBF container.
173 *
174 * The service is taken from the L6 header (vendor ID + MADOCA CSID), not from
175 * the PRN or the receiver's L6D/L6E channel. MADOCA-PPP frames are decoded
176 * into rtcm->ssr; other services are left in rtcm->buff for the caller.
177 *
178 * @param[in,out] rtcm RTCM control struct; rtcm->buff holds the 250-byte frame.
179 * @param[in] is_l6d 1 if the receiver reports the L6D signal (only used for null messages).
180 * @return 10: CLAS frame, 15: MADOCA SSR decoded, 16: MADOCA iono frame,
181 * 17: QZNMA frame, 0: no message / reserved vendor, -1: error.
182 */
183int decode_qzss_l6frame(rtcm_t* rtcm, int is_l6d);
184
185/*============================================================================
186 * Receiver-Specific Initialization Functions
187 *===========================================================================*/
188
189int init_rt17(raw_t* raw);
190void free_rt17(raw_t* raw);
191
192/*============================================================================
193 * Receiver-Specific Decoder Functions (byte-by-byte input)
194 *===========================================================================*/
195
196int input_oem4(raw_t* raw, uint8_t data);
197int input_oem3(raw_t* raw, uint8_t data);
198int input_ubx(raw_t* raw, rtcm_t* rtcm, uint8_t data);
199int input_ss2(raw_t* raw, uint8_t data);
200int input_cres(raw_t* raw, uint8_t data);
201int input_stq(raw_t* raw, uint8_t data);
202int input_javad(raw_t* raw, uint8_t data);
203int input_nvs(raw_t* raw, uint8_t data);
204int input_bnx(raw_t* raw, uint8_t data);
205int input_rt17(raw_t* raw, uint8_t data);
206int input_sbf(raw_t* raw, rtcm_t* rtcm, uint8_t data);
207
208/*============================================================================
209 * Receiver-Specific Decoder Functions (file input)
210 *===========================================================================*/
211
212int input_oem4f(raw_t* raw, FILE* fp);
213int input_oem3f(raw_t* raw, FILE* fp);
214int input_ubxf(raw_t* raw, rtcm_t* rtcm, FILE* fp);
215int input_ss2f(raw_t* raw, FILE* fp);
216int input_cresf(raw_t* raw, FILE* fp);
217int input_stqf(raw_t* raw, FILE* fp);
218int input_javadf(raw_t* raw, FILE* fp);
219int input_nvsf(raw_t* raw, FILE* fp);
220int input_bnxf(raw_t* raw, FILE* fp);
221int input_rt17f(raw_t* raw, FILE* fp);
222int input_sbff(raw_t* raw, rtcm_t* rtcm, FILE* fp);
223
224/*============================================================================
225 * BINEX File Reading Functions
226 *===========================================================================*/
227
228/**
229 * @brief Read BINEX observation/navigation data from file(s).
230 * @param[in] file File path (supports wildcards)
231 * @param[in] rcv Receiver number (1:rover, 2:base)
232 * @param[in] ts Start time (ts.time==0: no limit)
233 * @param[in] te End time (te.time==0: no limit)
234 * @param[in] tint Time interval (0: all)
235 * @param[in] opt RINEX options string
236 * @param[in,out] obs Observation data
237 * @param[in,out] nav Navigation data
238 * @param[in,out] sta Station information (NULL: not output)
239 * @param[in] popt Processing options (for navsys filtering)
240 * @return Status (-1:error, 0:no data, 1:ok)
241 */
242int readbnxt(const char* file, int rcv, gtime_t ts, gtime_t te, double tint, const char* opt, obs_t* obs, nav_t* nav,
243 sta_t* sta, const prcopt_t* popt);
244
245/*============================================================================
246 * Message Generation Functions
247 *===========================================================================*/
248
249int gen_ubx(const char* msg, uint8_t* buff);
250int gen_stq(const char* msg, uint8_t* buff);
251int gen_nvs(const char* msg, uint8_t* buff);
252
253#ifdef __cplusplus
254}
255#endif
256
257#endif /* MRTK_RCVRAW_H */
#define MAXSAT
Definition mrtk_coords.c:45
MRTKLIB Broadcast Ephemeris Module — Satellite orbit/clock types and Kepler/GLONASS/SBAS orbit comput...
struct nav_s nav_t
Definition mrtk_eph.h:40
MRTKLIB Foundation — Common types, standard includes, and system constants (MAXSAT,...
#define MAXOBS
#define MAXRAWLEN
MRTKLIB Navigation Module — Navigation data types and satellite/nav utility functions.
MRTKLIB Observation Module — Observation data types and utility functions.
#define MRTK_NSYS
Definition mrtk_obs.h:194
MRTKLIB Options Module — Processing and solution option types.
static rtcm_t * rtcm
void free_rt17(raw_t *raw)
int input_bnx(raw_t *raw, uint8_t data)
int decode_qzss_l6frame(rtcm_t *rtcm, int is_l6d)
Route one QZSS L6 frame received in a UBX/SBF container.
int gen_ubx(const char *msg, uint8_t *buff)
void free_raw(raw_t *raw)
Free receiver raw data control struct.
int input_ubxf(raw_t *raw, rtcm_t *rtcm, FILE *fp)
int input_bnxf(raw_t *raw, FILE *fp)
int input_stqf(raw_t *raw, FILE *fp)
int input_oem4(raw_t *raw, uint8_t data)
int input_rawf(raw_t *raw, rtcm_t *rtcm, int format, FILE *fp)
Input receiver raw data from file.
int decode_gal_fnav(const uint8_t *buff, eph_t *eph, double *ion, double *utc)
int decode_frame(const uint8_t *buff, eph_t *eph, alm_t *alm, double *ion, double *utc)
int input_javadf(raw_t *raw, FILE *fp)
int input_raw(raw_t *raw, rtcm_t *rtcm, int format, uint8_t data)
Input receiver raw data from stream (byte-by-byte).
int input_javad(raw_t *raw, uint8_t data)
int input_nvs(raw_t *raw, uint8_t data)
int gen_nvs(const char *msg, uint8_t *buff)
int input_oem4f(raw_t *raw, FILE *fp)
int input_sbff(raw_t *raw, rtcm_t *rtcm, FILE *fp)
int input_sbf(raw_t *raw, rtcm_t *rtcm, uint8_t data)
int input_oem3f(raw_t *raw, FILE *fp)
int test_glostr(const uint8_t *buff)
int input_ss2f(raw_t *raw, FILE *fp)
int input_rt17(raw_t *raw, uint8_t data)
int decode_glostr(const uint8_t *buff, geph_t *geph, double *utc)
int decode_bds_d2(const uint8_t *buff, eph_t *eph, double *utc)
int input_ss2(raw_t *raw, uint8_t data)
int decode_gal_inav(const uint8_t *buff, eph_t *eph, double *ion, double *utc)
int decode_bds_d1(const uint8_t *buff, eph_t *eph, double *ion, double *utc)
int decode_irn_nav(const uint8_t *buff, eph_t *eph, double *ion, double *utc)
int input_nvsf(raw_t *raw, FILE *fp)
int gen_stq(const char *msg, uint8_t *buff)
int init_raw(raw_t *raw, int format)
Initialize receiver raw data control struct.
int input_stq(raw_t *raw, uint8_t data)
int init_rt17(raw_t *raw)
int input_cres(raw_t *raw, uint8_t data)
int input_rt17f(raw_t *raw, FILE *fp)
int readbnxt(const char *file, int rcv, gtime_t ts, gtime_t te, double tint, const char *opt, obs_t *obs, nav_t *nav, sta_t *sta, const prcopt_t *popt)
Read BINEX observation/navigation data from file(s).
int input_cresf(raw_t *raw, FILE *fp)
int input_oem3(raw_t *raw, uint8_t data)
int input_ubx(raw_t *raw, rtcm_t *rtcm, uint8_t data)
MRTKLIB RTCM Module — RTCM message types and functions.
MRTKLIB Time Module — GNSS time types and conversion functions.
GPS/GAL/QZS/BDS/IRN almanac type.
Definition mrtk_eph.h:49
GPS/GAL/QZS/BDS/IRN broadcast ephemeris type.
Definition mrtk_eph.h:77
GLONASS broadcast ephemeris type.
Definition mrtk_eph.h:111
GNSS time representation.
Definition mrtk_time.h:49
Observation data collection.
Definition mrtk_obs.h:59
Receiver raw data control type.
Definition mrtk_rcvraw.h:78
sbsmsg_t sbsmsg
Definition mrtk_rcvraw.h:87
uint8_t subfrm[MAXSAT][380]
Definition mrtk_rcvraw.h:89
nav_t nav
Definition mrtk_rcvraw.h:83
double icpp[MAXSAT]
Definition mrtk_rcvraw.h:91
double lockt[MAXSAT][5+5]
Definition mrtk_rcvraw.h:90
mrtk_sigcfg_t sigcfg[MRTK_NSYS]
void * rcv_data
int tbase
Definition mrtk_rcvraw.h:99
int ephset
Definition mrtk_rcvraw.h:86
int has_prn
char freqn[MAXOBS]
Definition mrtk_rcvraw.h:94
int outtype
int sigcfg_set
obs_t obs
Definition mrtk_rcvraw.h:81
int format
int len
Definition mrtk_rcvraw.h:96
gtime_t has_time
uint8_t has_page[56]
uint8_t buff[MAXRAWLEN]
char msgtype[256]
Definition mrtk_rcvraw.h:88
double prCA[MAXSAT]
Definition mrtk_rcvraw.h:92
int nbyte
Definition mrtk_rcvraw.h:95
double l6tag
int flag
uint8_t halfc[MAXSAT][5+5]
Definition mrtk_rcvraw.h:93
char opt[256]
double dpCA[MAXSAT]
Definition mrtk_rcvraw.h:92
double icpc
Definition mrtk_rcvraw.h:91
sta_t sta
Definition mrtk_rcvraw.h:84
gtime_t tobs[MAXSAT][5+5]
Definition mrtk_rcvraw.h:80
int ephsat
Definition mrtk_rcvraw.h:85
double off[MAXSAT]
Definition mrtk_rcvraw.h:91
int iod
Definition mrtk_rcvraw.h:97
gtime_t time
Definition mrtk_rcvraw.h:79
int tod
Definition mrtk_rcvraw.h:98
obs_t obuf
Definition mrtk_rcvraw.h:82
RTCM control struct type.
Definition mrtk_rtcm.h:50