49static void setstr(
char* dst,
const char* src,
int n) {
53 while (*q && q < src + n) {
54 if (p == dst && *q ==
' ') {
62 while (p >= dst && *p ==
' ') {
72 if (code ==
'G' || code ==
' ') {
121 if ((p = strchr(str,
'#'))) {
124 for (p = str + strlen(str) - 1; p >= str && !isgraph((
int)*p); p--) {
134 if (nav->
nimax <= 0) {
140 trace(NULL, 1,
"addisbdata: memalloc error n=%d\n", nav->
nimax);
148 nav->
isb[nav->
ni++] = *data;
157 int sys, i, s_code, res;
158 char stationname[21] = {0};
159 char stationname0[21] = {0};
160 char stationname_base[21] = {0};
161 char stationname0_base[21] = {0};
171 trace(NULL, 3,
"readisbf: file=%s\n", file);
173 if (!(fp = fopen(file,
"r"))) {
174 trace(NULL, 2,
"isb parameters file open error: %s\n", file);
177 while (fgets(buff,
sizeof(buff), fp)) {
185 if (strcmp(buff,
"******************** * * * **********************") == 0) {
187 }
else if (strcmp(buff,
"******************** ******************** * * * **********************") == 0) {
193 nbuf = (int)strlen(buff);
195 trace(NULL, 2,
"isb parameter error: %s (%s:%d)\n", buff, file, n);
201 setstr(stationname, buff, 20);
202 bias =
str2num(buff, 27, nbuf - 27);
203 freq = (int)
str2num(buff, 23, 1);
208 if (
' ' != buff[20] ||
' ' != buff[22] ||
' ' != buff[24] ||
' ' != buff[26] ||
209 (
'P' != type &&
'L' != type) || (1 != freq && 2 != freq && 5 != freq) || -1 == s_code) {
210 trace(NULL, 2,
"isb parameter error: %s (%s:%d)\n", buff, file, n);
214 ifreq = (5 == freq) ? 2 : freq - 1;
215 itype = (
'L' == type) ? 0 : 1;
217 if (stationname[0] !=
'\0') {
218 strcpy(stationname0, stationname);
220 if (stationname0[0] !=
'\0') {
222 for (i = 0; i < nav->
ni; i++) {
223 if (strcmp(nav->
isb[i].
sta_name, stationname0) == 0) {
224 nav->
isb[i].
gsb[s_code][ifreq][itype] = bias * 1E-9 *
CLIGHT;
230 memset(&data, 0,
sizeof(data));
231 strcpy(data.
sta_name, stationname0);
232 data.
gsb[s_code][ifreq][itype] = bias * 1E-9 *
CLIGHT;
236 }
else if (ver == 1) {
238 setstr(stationname, buff, 20);
239 setstr(stationname_base, buff + 21, 20);
240 bias =
str2num(buff, 48, nbuf - 48);
241 freq = (int)
str2num(buff, 44, 1);
246 if (
' ' != buff[20] ||
' ' != buff[41] ||
' ' != buff[43] ||
' ' != buff[45] ||
' ' != buff[47] ||
247 (
'P' != type &&
'L' != type) || (1 != freq && 2 != freq && 5 != freq) || -1 == s_code) {
248 trace(NULL, 2,
"isb parameter error: %s (%s:%d)\n", buff, file, n);
252 ifreq = (5 == freq) ? 2 : freq - 1;
253 itype = (
'L' == type) ? 0 : 1;
255 if (stationname[0] !=
'\0') {
256 strcpy(stationname0, stationname);
257 stationname0_base[0] =
'\0';
258 if (stationname_base[0] !=
'\0') {
259 strcpy(stationname0_base, stationname_base);
261 }
else if (stationname0[0] !=
'\0') {
262 if (stationname_base[0] !=
'\0') {
263 strcpy(stationname0_base, stationname_base);
267 if (stationname0[0] !=
'\0') {
269 for (i = 0; i < nav->
ni; i++) {
270 if (strcmp(nav->
isb[i].
sta_name, stationname0) == 0 &&
272 nav->
isb[i].
gsb[s_code][ifreq][itype] = bias * 1E-9 *
CLIGHT;
278 memset(&data, 0,
sizeof(data));
279 strcpy(data.
sta_name, stationname0);
281 data.
gsb[s_code][ifreq][itype] = bias * 1E-9 *
CLIGHT;
285 if (stationname0_base[0] !=
'\0') {
286 memset(&data, 0,
sizeof(data));
288 strcpy(data.
sta_name, stationname0_base);
289 data.
gsb[s_code][ifreq][itype] = -bias * 1E-9 *
CLIGHT;
298 trace(NULL, 3,
"readisbf: ni=%d\n", nav->
ni);
312 trace(NULL, 3,
"readisb: file=%s\n", file);
315 if (!(efiles[i] = (
char*)
malloc(1024))) {
316 for (i--; i >= 0; i--) {
326 for (i = 0; i < n; i++) {
333 trace(NULL, 3,
"readisb: total ni=%d\n", nav->
ni);
343 isb_t* pisb[2] = {NULL, NULL};
345 trace(NULL, 3,
"setisb: rover=%s ref=%s ni=%d\n", rectype0 ? rectype0 :
"(null)", rectype1 ? rectype1 :
"(null)",
350 for (i = 0; i <
NSYS; ++i) {
351 for (j = 0; j < NFREQ; ++j) {
352 for (k = 0; k < 2; ++k) {
353 sta0->
isb[i][j][k] = 0.0;
359 for (i = 0; i <
NSYS; ++i) {
360 for (j = 0; j < NFREQ; ++j) {
361 for (k = 0; k < 2; ++k) {
362 sta1->
isb[i][j][k] = 0.0;
372 for (m = 0; m < nav->
ni; ++m) {
377 for (i = 0; i <
NSYS; ++i) {
378 for (j = 0; j < NFREQ; ++j) {
379 for (k = 0; k < 2; ++k) {
380 sta0->
isb[i][j][k] = nav->
isb[m].
gsb[i][j][k];
390 if (rectype1 && !strcmp(rectype1, nav->
isb[m].
sta_name)) {
393 for (i = 0; i <
NSYS; ++i) {
394 for (j = 0; j < NFREQ; ++j) {
395 for (k = 0; k < 2; ++k) {
396 sta0->
isb[i][j][k] = -nav->
isb[m].
gsb[i][j][k];
408 pisb[0] = &nav->
isb[m];
410 pisb[1] = &nav->
isb[m];
415 if (pisb[0] && sta0) {
416 for (i = 0; i <
NSYS; ++i) {
417 for (j = 0; j < NFREQ; ++j) {
418 for (k = 0; k < 2; ++k) {
419 sta0->
isb[i][j][k] = pisb[0]->
gsb[i][j][k];
424 if (pisb[1] && sta1) {
425 for (i = 0; i <
NSYS; ++i) {
426 for (j = 0; j < NFREQ; ++j) {
427 for (k = 0; k < 2; ++k) {
428 sta1->
isb[i][j][k] = pisb[1]->
gsb[i][j][k];
437 for (i = 0; i <
NSYS; ++i) {
438 for (j = 0; j < NFREQ; ++j) {
439 if (sta0->
isb[i][j][0] != 0.0 || sta0->
isb[i][j][1] != 0.0) {
440 trace(NULL, 3,
"setisb: sys=%d freq=%d L=%.6f P=%.6f m\n", i, j, sta0->
isb[i][j][0],
455 for (i = 0; i < NFREQ; ++i) {
456 for (j = 0; j < 2; ++j) {
468 for (i = 0; i < NFREQ; ++i) {
469 for (j = 0; j < 2; ++j) {
470 y[i][j] = sta->
isb[isys][i][j];
477 char* p = str + strlen(str) - 1;
478 while (p >= str && (*p ==
' ' || *p ==
'\t' || *p ==
'\r' || *p ==
'\n')) {
491 char buff[1024], ori[33] =
"Quarter-Cycle Phase Shifts Table";
492 int countheader = 1, nod = 0;
495 trace(NULL, 3,
"readL2C: file=%s\n", file);
500 if ((fp = fopen(file,
"r")) == NULL) {
501 trace(NULL, 1,
"l2c file open error: %s\n", file);
505 while (fgets(buff,
sizeof(buff), fp)) {
506 if (countheader == 1) {
507 if (strncmp(buff, ori, 32) != 0) {
508 trace(NULL, 1,
"l2c file title error: %s\n", file);
513 if (countheader > 4) {
514 lenBuf = (int)strlen(buff);
515 if (22 < lenBuf && 45 > lenBuf) {
519 }
else if (23 > lenBuf && buff[0] !=
'\n') {
520 strncpy(nav->
sfts.
rectyp[nod], buff, lenBuf - 1);
523 trace(NULL, 1,
"l2c file format error: %s\n", file);
530 trace(NULL, 1,
"l2c file size error: %s\n", file);
538 trace(NULL, 3,
"readL2C: n=%d\n", nav->
sfts.
n);
539 if (nav->
sfts.
n < 1) {
540 trace(NULL, 1,
"no l2c data error: %s\n", file);
CLAS (QZSS L6D) CSSR decoder and grid correction type definitions.
static void trim_str(char *str)
static int code2sys(char code)
int readL2C(const char *file, nav_t *nav)
Read L2C 1/4 cycle phase shift table from file.
static void setstr(char *dst, const char *src, int n)
static void chop_isb(char *str)
void chk_isb(int sysno, const prcopt_t *opt, const sta_t *sta, double y[5][2])
Get ISB correction values for a satellite system.
static int sys2isbidx(int sys)
static int readisbf(const char *file, nav_t *nav)
int readisb(const char *file, nav_t *nav)
Read ISB correction table from file.
int isL2C(int code)
Check if observation code is L2C.
void setisb(const nav_t *nav, const char *rectype0, const char *rectype1, sta_t *sta0, sta_t *sta1)
Set ISB corrections for rover and reference stations.
static int addisbdata(nav_t *nav, const isb_t *data)
MRTKLIB Constants — Physical, navigation, and system constants.
MRTKLIB Foundation — Common types, standard includes, and system constants (MAXSAT,...
MRTKLIB Navigation Module — Navigation data types and satellite/nav utility functions.
MRTKLIB Observation Module — Observation data types and utility functions.
MRTKLIB Options Module — Processing and solution option types.
int expath(const char *path, char *paths[], int nmax)
Expand file path with wild-card (*) in file.
double str2num(const char *s, int i, int n)
Convert substring in string to number.
MRTKLIB System Module — OS/filesystem utility functions.
void trace(mrtk_ctx_t *ctx, int level, const char *format,...)
Output trace message.
MRTKLIB Trace Module — debug trace and logging functions.