@@ -37,7 +37,7 @@ static void print_help(void)
37
37
/* test rtcm nav data --------------------------------------------------------*/
38
38
static int is_nav (int type )
39
39
{
40
- return type == 1019 || type == 1044 || type == 1045 || type == 1046 ;
40
+ return type == 1019 || type == 1042 || type == 1044 || type == 1045 || type == 1046 ;
41
41
}
42
42
/* test rtcm gnav data -------------------------------------------------------*/
43
43
static int is_gnav (int type )
@@ -61,28 +61,33 @@ static void gen_rtcm_obs(rtcm_t *rtcm, const int *type, int n, FILE *fp)
61
61
for (i = 0 ;i < n ;i ++ ) {
62
62
if (is_nav (type [i ])|| is_gnav (type [i ])|| is_ant (type [i ])) continue ;
63
63
64
- if (!gen_rtcm3 (rtcm ,type [i ],i != j )) continue ;
64
+ if (!gen_rtcm3 (rtcm ,type [i ],0 , i != j )) continue ;
65
65
if (fwrite (rtcm -> buff ,rtcm -> nbyte ,1 ,fp )< 1 ) break ;
66
66
}
67
67
}
68
68
/* generate rtcm nav data messages -------------------------------------------*/
69
69
static void gen_rtcm_nav (gtime_t time , rtcm_t * rtcm , const nav_t * nav ,
70
70
int * index , const int * type , int n , FILE * fp )
71
71
{
72
- int i ,j ,sat ,prn ;
72
+ int i ,j ,sat ,prn , code ;
73
73
74
74
for (i = index [0 ];i < nav -> n ;i ++ ) {
75
75
76
76
if (time .time && timediff (nav -> eph [i ].ttr ,time )> -0.1 ) continue ;
77
77
sat = nav -> eph [i ].sat ;
78
+ code = nav -> eph [i ].code ;
78
79
rtcm -> time = nav -> eph [i ].ttr ;
79
- rtcm -> nav .eph [sat - 1 ]= nav -> eph [i ];
80
+ if (satsys (sat ,& prn )!= SYS_GAL || ((code & 1 )== 1 )) { // non-GAL or GAL I/NAV
81
+ rtcm -> nav .eph [sat - 1 ]= nav -> eph [i ];
82
+ } else { // GAL F/NAV
83
+ rtcm -> nav .eph [sat - 1 + MAXSAT ]= nav -> eph [i ];
84
+ }
80
85
rtcm -> ephsat = sat ;
81
86
82
87
for (j = 0 ;j < n ;j ++ ) {
83
88
if (!is_nav (type [j ])) continue ;
84
89
85
- if (!gen_rtcm3 (rtcm ,type [j ],0 )) continue ;
90
+ if (!gen_rtcm3 (rtcm ,type [j ],0 , 0 )) continue ;
86
91
if (fwrite (rtcm -> buff ,rtcm -> nbyte ,1 ,fp )< 1 ) break ;
87
92
}
88
93
index [0 ]= i + 1 ;
@@ -99,7 +104,7 @@ static void gen_rtcm_nav(gtime_t time, rtcm_t *rtcm, const nav_t *nav,
99
104
for (j = 0 ;j < n ;j ++ ) {
100
105
if (!is_gnav (type [j ])) continue ;
101
106
102
- if (!gen_rtcm3 (rtcm ,type [j ],0 )) continue ;
107
+ if (!gen_rtcm3 (rtcm ,type [j ],0 , 0 )) continue ;
103
108
if (fwrite (rtcm -> buff ,rtcm -> nbyte ,1 ,fp )< 1 ) break ;
104
109
}
105
110
index [1 ]= i + 1 ;
@@ -113,7 +118,7 @@ static void gen_rtcm_ant(rtcm_t *rtcm, const int *type, int n, FILE *fp)
113
118
for (i = 0 ;i < n ;i ++ ) {
114
119
if (!is_ant (type [i ])) continue ;
115
120
116
- if (!gen_rtcm3 (rtcm ,type [i ],0 )) continue ;
121
+ if (!gen_rtcm3 (rtcm ,type [i ],0 , 0 )) continue ;
117
122
if (fwrite (rtcm -> buff ,rtcm -> nbyte ,1 ,fp )< 1 ) break ;
118
123
}
119
124
}
@@ -129,13 +134,13 @@ static int conv_rtcm(const int *type, int n, const char *outfile,
129
134
geph_t geph0 = {0 };
130
135
int i ,j ,prn ,index [2 ]= {0 };
131
136
132
- if (!(rtcm .nav .eph = (eph_t * )malloc (sizeof (eph_t )* MAXSAT ))||
137
+ if (!(rtcm .nav .eph = (eph_t * )malloc (sizeof (eph_t )* MAXSAT * 2 ))||
133
138
!(rtcm .nav .geph = (geph_t * )malloc (sizeof (geph_t )* MAXPRNGLO ))) return 0 ;
134
139
135
140
rtcm .staid = staid ;
136
141
rtcm .sta = * sta ;
137
142
138
- for (i = 0 ;i < MAXSAT ;i ++ ) rtcm .nav .eph [i ]= eph0 ;
143
+ for (i = 0 ;i < MAXSAT * 2 ;i ++ ) rtcm .nav .eph [i ]= eph0 ;
139
144
for (i = 0 ;i < MAXPRNGLO ;i ++ ) rtcm .nav .geph [i ]= geph0 ;
140
145
141
146
/* update glonass freq channel number */
0 commit comments