- Timestamp:
- Feb 26, 2009, 10:48:01 PM (16 years ago)
- Location:
- trunk/BNS/RTCM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNS/RTCM/clock_orbit_rtcm.c
r1660 r1662 3 3 Name: clock_orbit_rtcm.c 4 4 Project: RTCM3 5 Version: $Id: clock_orbit_rtcm.c,v 1. 3 2009/02/12 11:56:16 stoeckerExp $5 Version: $Id: clock_orbit_rtcm.c,v 1.5 2008/11/18 14:50:37 mervart Exp $ 6 6 Authors: Dirk Stöcker 7 7 Description: state space approach for RTCM3 … … 85 85 #define SCALEADDBITS(a, b, c) ADDBITS(a, (int64_t)(b*c)) 86 86 87 #if 0 88 #define DEBUGSCALEADDBITS(n, a, b, c) \ 89 { \ 90 int64_t x = b*c, z; \ 91 uint64_t y; \ 92 y = (x&((1<<a)-1)); \ 93 z = ((int64_t)(y<<(64-a)))>>(64-a); \ 94 fprintf(stderr, "Type " # n " val %19.15f*%11.1f %16llX %16llX %16llX %s\n", \ 95 c, b, x, y, z, x != z ? "OVERFLOW" : "OK"); \ 96 } \ 97 SCALEADDBITS(a,b,c) 98 #else 99 #define DEBUGSCALEADDBITS(n, a, b, c) SCALEADDBITS(a,b,c) 100 #endif 101 87 102 /* standard values */ 88 103 #define T_MESSAGE_NUMBER(a) ADDBITS(12, a) /* DF002 */ 89 #define T_RESERVED 5 ADDBITS(5, 0) /* DF001 */104 #define T_RESERVED6 ADDBITS(6, 0) /* DF001 */ 90 105 #define T_GPS_SATELLITE_ID(a) ADDBITS(6, a) /* DF068 */ 91 106 #define T_GPS_IODE(a) ADDBITS(8, a) /* DF071 */ … … 93 108 94 109 /* defined values */ 95 #define T_DELTA_RADIAL(a) SCALEADDBITS(22, 10000.0, a) 96 #define T_DELTA_ALONG_TRACK(a) SCALEADDBITS(22, 10000.0, a) 97 #define T_DELTA_CROSS_TRACK(a) SCALEADDBITS(22, 10000.0, a) 98 #define T_DELTA_DOT_RADIAL(a) SCALEADDBITS(21, 1000000.0, a) 99 #define T_DELTA_DOT_ALONG_TRACK(a) SCALEADDBITS(21, 1000000.0, a) 100 #define T_DELTA_DOT_CROSS_TRACK(a) SCALEADDBITS(21, 1000000.0, a) 101 #define T_DELTA_DOT_DOT_RADIAL(a) SCALEADDBITS(27, 50000000.0, a) 102 #define T_DELTA_DOT_DOT_ALONG_TRACK(a) SCALEADDBITS(27, 50000000.0, a) 103 #define T_DELTA_DOT_DOT_CROSS_TRACK(a) SCALEADDBITS(27, 50000000.0, a) 104 #define T_SATELLITE_REFERENCE_POINT(a) ADDBITS(1, a) 105 106 #define T_SATELLITE_REFERENCE_DATUM(a) ADDBITS(1, a) 107 #define T_DELTA_CLOCK_C0(a) SCALEADDBITS(22, 10000.0, a) 108 #define T_DELTA_CLOCK_C1(a) SCALEADDBITS(21, 1000000.0, a) 109 #define T_DELTA_CLOCK_C2(a) SCALEADDBITS(27, 50000000.0, a) 110 #define T_NO_OF_CODE_BIASES(a) ADDBITS(5, a) 111 #define T_GPS_SIGNAL_IDENTIFIER(a) ADDBITS(5, a) 112 #define T_GLONASS_SIGNAL_IDENTIFIER(a) ADDBITS(5, a) 113 #define T_GALILEO_SIGNAL_IDENTIFIER(a) ADDBITS(5, a) 114 #define T_CODE_BIAS(a) SCALEADDBITS(14, 100.0, a) 115 #define T_GLONASS_SATELLITE_ID(a) ADDBITS(5, a) 116 110 #define T_MULTIPLE_MESSAGE_INDICATOR(a) ADDBITS(1, a) 117 111 #define T_GPS_EPOCH_TIME(a) ADDBITS(20, a) 118 112 #define T_GLONASS_EPOCH_TIME(a) ADDBITS(17, a) 119 #define T_NO_OF_SATELLITES(a) ADDBITS(6, a) 120 #define T_MULTIPLE_MESSAGE_INDICATOR(a) ADDBITS(1, a) 121 #define T_SSR_URA(a) ADDBITS(4, a) 122 #define T_HR_CLOCK_CORRECTION(a) SCALEADDBITS(22, 10000.0, a) 123 #define T_SSR_UPDATE_INTERVAL(a) ADDBITS(4, a) 113 #define T_GLONASS_SATELLITE_ID(a) ADDBITS(6, a) 114 #define T_NO_OF_SATELLITES(a) ADDBITS(5, a) 115 #define T_SATELLITE_REFERENCE_POINT(a) ADDBITS(1, a) 116 #define T_SATELLITE_REFERENCE_DATUM(a) ADDBITS(1, a) 117 #define T_NO_OF_CODE_BIASES(a) ADDBITS(5, a) 118 #define T_GPS_CODE_TYPE(a) ADDBITS(5, a) 119 #define T_GLONASS_CODE_TYPE(a) ADDBITS(5, a) 120 121 /* yet undefined values */ 122 #define T_DELTA_RADIAL(a) DEBUGSCALEADDBITS(dr, 20, 1000.0, a) 123 #define T_DELTA_ALONG_TRACK(a) DEBUGSCALEADDBITS(da, 20, 1000.0, a) 124 #define T_DELTA_CROSS_TRACK(a) DEBUGSCALEADDBITS(dc, 20, 1000.0, a) 125 #define T_DELTA_DOT_RADIAL(a) DEBUGSCALEADDBITS(Dr, 20, 100000.0, a) 126 #define T_DELTA_DOT_ALONG_TRACK(a) DEBUGSCALEADDBITS(Dr, 20, 100000.0, a) 127 #define T_DELTA_DOT_CROSS_TRACK(a) DEBUGSCALEADDBITS(Dr, 20, 100000.0, a) 128 #define T_DELTA_DOT_DOT_RADIAL(a) DEBUGSCALEADDBITS(DR, 20, 5000000.0, a) 129 #define T_DELTA_DOT_DOT_ALONG_TRACK(a) DEBUGSCALEADDBITS(DA, 20, 5000000.0, a) 130 #define T_DELTA_DOT_DOT_CROSS_TRACK(a) DEBUGSCALEADDBITS(DC, 20, 5000000.0, a) 131 #define T_DELTA_A0(a) DEBUGSCALEADDBITS(A0, 20, 1000.0, a) 132 #define T_DELTA_A1(a) DEBUGSCALEADDBITS(A1, 20, 100000.0, a) 133 #define T_DELTA_A2(a) DEBUGSCALEADDBITS(A2, 20, 5000000.0, a) 134 #define T_CODE_BIAS(a) DEBUGSCALEADDBITS(CB, 20, 100.0, a) 124 135 125 136 size_t MakeClockOrbit(const struct ClockOrbit *co, enum ClockOrbitType type, 126 137 int moremessagesfollow, char *buffer, size_t size) 127 138 { 128 int gpshr=0, gpsur=0, gpsor=0, gpscl=0, gpsco=0, glohr=0, glour=0, gloor=0, 129 glocl=0, gloco=0, mmi, i; 139 int gpsor=0, gpscl=0, gpsco=0, gloor=0, glocl=0, gloco=0, mmi, i; 130 140 STARTDATA 131 141 132 if(co->NumberOfGPSSat && co->HRDataSupplied133 && (type == COTYPE_AUTO || type == COTYPE_GPSHR))134 gpshr = 1;135 if(co->NumberOfGPSSat && co->URADataSupplied136 && (type == COTYPE_AUTO || type == COTYPE_GPSURA))137 gpsur = 1;138 142 if(co->NumberOfGPSSat && co->OrbitDataSupplied 139 143 && (type == COTYPE_AUTO || type == COTYPE_GPSORBIT)) … … 147 151 gpsco = 1; gpsor = 0; gpscl = 0; 148 152 } 149 if(co->NumberOfGLONASSSat && co->HRDataSupplied150 && (type == COTYPE_AUTO || type == COTYPE_GLONASSHR))151 glohr = 1;152 if(co->NumberOfGLONASSSat && co->URADataSupplied153 && (type == COTYPE_AUTO || type == COTYPE_GLONASSURA))154 glour = 1;155 153 if(co->NumberOfGLONASSSat && co->OrbitDataSupplied 156 154 && (type == COTYPE_AUTO || type == COTYPE_GLONASSORBIT)) … … 165 163 } 166 164 167 mmi = gps hr+gpsur+gpsor+gpscl+gpsco+glohr+glour+gloor+glocl+gloco; /* required for multimessage */165 mmi = gpsor+gpscl+gpsco+gloor+glocl+gloco; /* required for multimessage */ 168 166 if(!moremessagesfollow) --mmi; 169 167 … … 173 171 T_MESSAGE_NUMBER(COTYPE_GPSORBIT) 174 172 T_GPS_EPOCH_TIME(co->GPSEpochTime) 175 T_SSR_UPDATE_INTERVAL(co->UpdateInterval) 176 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 177 --mmi; 178 T_RESERVED5 173 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 174 --mmi; 175 T_RESERVED6 179 176 T_NO_OF_SATELLITES(co->NumberOfGPSSat) 180 177 for(i = 0; i < co->NumberOfGPSSat; ++i) … … 201 198 T_MESSAGE_NUMBER(COTYPE_GPSCLOCK) 202 199 T_GPS_EPOCH_TIME(co->GPSEpochTime) 203 T_SSR_UPDATE_INTERVAL(co->UpdateInterval) 204 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 205 --mmi; 206 T_RESERVED5 200 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 201 --mmi; 202 T_RESERVED6 207 203 T_NO_OF_SATELLITES(co->NumberOfGPSSat) 208 204 for(i = 0; i < co->NumberOfGPSSat; ++i) 209 205 { 210 206 T_GPS_SATELLITE_ID(co->Sat[i].ID) 211 T_DELTA_CLOCK_C0(co->Sat[i].Clock.DeltaA0) 212 T_DELTA_CLOCK_C1(co->Sat[i].Clock.DeltaA1) 213 T_DELTA_CLOCK_C2(co->Sat[i].Clock.DeltaA2) 207 T_GPS_IODE(co->Sat[i].IOD) 208 T_DELTA_A0(co->Sat[i].Clock.DeltaA0) 209 T_DELTA_A1(co->Sat[i].Clock.DeltaA1) 210 T_DELTA_A2(co->Sat[i].Clock.DeltaA2) 214 211 } 215 212 ENDBLOCK … … 220 217 T_MESSAGE_NUMBER(COTYPE_GPSCOMBINED) 221 218 T_GPS_EPOCH_TIME(co->GPSEpochTime) 222 T_SSR_UPDATE_INTERVAL(co->UpdateInterval) 223 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 224 --mmi; 225 T_RESERVED5 219 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 220 --mmi; 221 T_RESERVED6 226 222 T_NO_OF_SATELLITES(co->NumberOfGPSSat) 227 223 for(i = 0; i < co->NumberOfGPSSat; ++i) … … 240 236 T_SATELLITE_REFERENCE_POINT(co->SatRefPoint) 241 237 T_SATELLITE_REFERENCE_DATUM(co->SatRefDatum) 242 T_DELTA_CLOCK_C0(co->Sat[i].Clock.DeltaA0) 243 T_DELTA_CLOCK_C1(co->Sat[i].Clock.DeltaA1) 244 T_DELTA_CLOCK_C2(co->Sat[i].Clock.DeltaA2) 245 } 246 ENDBLOCK 247 } 248 if(gpshr) 249 { 250 INITBLOCK 251 T_MESSAGE_NUMBER(COTYPE_GPSHR) 252 T_GPS_EPOCH_TIME(co->GPSEpochTime) 253 T_SSR_UPDATE_INTERVAL(co->UpdateInterval) 254 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 255 --mmi; 256 T_RESERVED5 257 T_NO_OF_SATELLITES(co->NumberOfGPSSat) 258 for(i = 0; i < co->NumberOfGPSSat; ++i) 259 { 260 T_GPS_SATELLITE_ID(co->Sat[i].ID) 261 T_HR_CLOCK_CORRECTION(co->Sat[i].hrclock) 262 } 263 ENDBLOCK 264 } 265 if(gpsur) 266 { 267 INITBLOCK 268 T_MESSAGE_NUMBER(COTYPE_GPSURA) 269 T_GPS_EPOCH_TIME(co->GPSEpochTime) 270 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 271 --mmi; 272 T_RESERVED5 273 T_NO_OF_SATELLITES(co->NumberOfGPSSat) 274 for(i = 0; i < co->NumberOfGPSSat; ++i) 275 { 276 T_GPS_SATELLITE_ID(co->Sat[i].ID) 277 T_SSR_URA(co->Sat[i].URA) 238 T_DELTA_A0(co->Sat[i].Clock.DeltaA0) 239 T_DELTA_A1(co->Sat[i].Clock.DeltaA1) 240 T_DELTA_A2(co->Sat[i].Clock.DeltaA2) 278 241 } 279 242 ENDBLOCK … … 284 247 T_MESSAGE_NUMBER(COTYPE_GLONASSORBIT) 285 248 T_GLONASS_EPOCH_TIME(co->GLONASSEpochTime) 286 T_SSR_UPDATE_INTERVAL(co->UpdateInterval) 287 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 288 --mmi; 289 T_RESERVED5 249 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 250 --mmi; 251 T_RESERVED6 290 252 T_NO_OF_SATELLITES(co->NumberOfGLONASSSat) 291 253 for(i = CLOCKORBIT_NUMGPS; … … 313 275 T_MESSAGE_NUMBER(COTYPE_GLONASSCLOCK) 314 276 T_GLONASS_EPOCH_TIME(co->GLONASSEpochTime) 315 T_SSR_UPDATE_INTERVAL(co->UpdateInterval) 316 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 317 --mmi; 318 T_RESERVED5 277 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 278 --mmi; 279 T_RESERVED6 319 280 T_NO_OF_SATELLITES(co->NumberOfGLONASSSat) 320 281 for(i = CLOCKORBIT_NUMGPS; … … 323 284 T_GLONASS_SATELLITE_ID(co->Sat[i].ID) 324 285 T_GLONASS_IOD(co->Sat[i].IOD) 325 T_DELTA_ CLOCK_C0(co->Sat[i].Clock.DeltaA0)326 T_DELTA_ CLOCK_C1(co->Sat[i].Clock.DeltaA1)327 T_DELTA_ CLOCK_C2(co->Sat[i].Clock.DeltaA2)286 T_DELTA_A0(co->Sat[i].Clock.DeltaA0) 287 T_DELTA_A1(co->Sat[i].Clock.DeltaA1) 288 T_DELTA_A2(co->Sat[i].Clock.DeltaA2) 328 289 } 329 290 ENDBLOCK … … 334 295 T_MESSAGE_NUMBER(COTYPE_GLONASSCOMBINED) 335 296 T_GLONASS_EPOCH_TIME(co->GLONASSEpochTime) 336 T_SSR_UPDATE_INTERVAL(co->UpdateInterval) 337 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 338 --mmi; 339 T_RESERVED5 297 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 298 --mmi; 299 T_RESERVED6 340 300 T_NO_OF_SATELLITES(co->NumberOfGLONASSSat) 341 301 for(i = CLOCKORBIT_NUMGPS; … … 355 315 T_SATELLITE_REFERENCE_POINT(co->SatRefPoint) 356 316 T_SATELLITE_REFERENCE_DATUM(co->SatRefDatum) 357 T_DELTA_CLOCK_C0(co->Sat[i].Clock.DeltaA0) 358 T_DELTA_CLOCK_C1(co->Sat[i].Clock.DeltaA1) 359 T_DELTA_CLOCK_C2(co->Sat[i].Clock.DeltaA2) 360 } 361 ENDBLOCK 362 } 363 if(glohr) 364 { 365 INITBLOCK 366 T_MESSAGE_NUMBER(COTYPE_GLONASSHR) 367 T_GLONASS_EPOCH_TIME(co->GLONASSEpochTime) 368 T_SSR_UPDATE_INTERVAL(co->UpdateInterval) 369 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 370 --mmi; 371 T_RESERVED5 372 T_NO_OF_SATELLITES(co->NumberOfGLONASSSat) 373 for(i = CLOCKORBIT_NUMGPS; 374 i < CLOCKORBIT_NUMGPS+co->NumberOfGLONASSSat; ++i) 375 { 376 T_GPS_SATELLITE_ID(co->Sat[i].ID) 377 T_HR_CLOCK_CORRECTION(co->Sat[i].hrclock) 378 } 379 ENDBLOCK 380 } 381 if(glour) 382 { 383 INITBLOCK 384 T_MESSAGE_NUMBER(COTYPE_GLONASSURA) 385 T_GLONASS_EPOCH_TIME(co->GLONASSEpochTime) 386 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 387 --mmi; 388 T_RESERVED5 389 T_NO_OF_SATELLITES(co->NumberOfGLONASSSat) 390 for(i = CLOCKORBIT_NUMGPS; 391 i < CLOCKORBIT_NUMGPS+co->NumberOfGLONASSSat; ++i) 392 { 393 T_GPS_SATELLITE_ID(co->Sat[i].ID) 394 T_SSR_URA(co->Sat[i].URA) 317 T_DELTA_A0(co->Sat[i].Clock.DeltaA0) 318 T_DELTA_A1(co->Sat[i].Clock.DeltaA1) 319 T_DELTA_A2(co->Sat[i].Clock.DeltaA2) 395 320 } 396 321 ENDBLOCK … … 403 328 int moremessagesfollow, char *buffer, size_t size) 404 329 { 405 int gps, glo, mmi, i, j; 330 int gps = 0; 331 int glo = 0; 332 int mmi, i, j; 406 333 STARTDATA 407 334 … … 419 346 T_MESSAGE_NUMBER(BTYPE_GPS) 420 347 T_GPS_EPOCH_TIME(b->GPSEpochTime) 421 T_SSR_UPDATE_INTERVAL(b->UpdateInterval) 422 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 423 --mmi; 424 T_RESERVED5 348 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 349 --mmi; 350 T_RESERVED6 425 351 T_NO_OF_SATELLITES(b->NumberOfGPSSat) 426 352 for(i = 0; i < b->NumberOfGPSSat; ++i) … … 430 356 for(j = 0; j < b->Sat[i].NumberOfCodeBiases; ++j) 431 357 { 432 T_GPS_ SIGNAL_IDENTIFIER(b->Sat[i].Biases[j].Type)358 T_GPS_CODE_TYPE(b->Sat[i].Biases[j].Type) 433 359 T_CODE_BIAS(b->Sat[i].Biases[j].Bias) 434 360 } … … 441 367 T_MESSAGE_NUMBER(BTYPE_GLONASS) 442 368 T_GPS_EPOCH_TIME(b->GLONASSEpochTime) 443 T_SSR_UPDATE_INTERVAL(b->UpdateInterval) 444 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 445 --mmi; 446 T_RESERVED5 369 T_MULTIPLE_MESSAGE_INDICATOR(mmi ? 1 :0) 370 --mmi; 371 T_RESERVED6 447 372 T_NO_OF_SATELLITES(b->NumberOfGLONASSSat) 448 373 for(i = CLOCKORBIT_NUMGPS; … … 453 378 for(j = 0; j < b->Sat[i].NumberOfCodeBiases; ++j) 454 379 { 455 T_GLONASS_ SIGNAL_IDENTIFIER(b->Sat[i].Biases[j].Type)380 T_GLONASS_CODE_TYPE(b->Sat[i].Biases[j].Type) 456 381 T_CODE_BIAS(b->Sat[i].Biases[j].Bias) 457 382 } … … 462 387 return ressize; 463 388 } 464 465 389 #endif /* NOENCODE */ 466 390 … … 506 430 #define G_SIZE(a) GETBITS(a, 10) 507 431 #define G_MESSAGE_NUMBER(a) GETBITS(a, 12) /* DF002 */ 508 #define G_RESERVED 5 SKIPBITS(5) /* DF001 */432 #define G_RESERVED6 SKIPBITS(6) /* DF001 */ 509 433 #define G_GPS_SATELLITE_ID(a) {int temp; GETBITS(temp, 6) \ 510 434 if(a && a != temp) return GCOBR_DATAMISMATCH; a = temp;} /* DF068 */ … … 513 437 514 438 /* defined values */ 515 #define G_DELTA_RADIAL(a) GETFLOATSIGN(a, 22, 1/10000.0) 516 #define G_DELTA_ALONG_TRACK(a) GETFLOATSIGN(a, 22, 1/10000.0) 517 #define G_DELTA_CROSS_TRACK(a) GETFLOATSIGN(a, 22, 1/10000.0) 518 #define G_DELTA_DOT_RADIAL(a) GETFLOATSIGN(a, 21, 1/1000000.0) 519 #define G_DELTA_DOT_ALONG_TRACK(a) GETFLOATSIGN(a, 21, 1/1000000.0) 520 #define G_DELTA_DOT_CROSS_TRACK(a) GETFLOATSIGN(a, 21, 1/1000000.0) 521 #define G_DELTA_DOT_DOT_RADIAL(a) GETFLOATSIGN(a, 27, 1/50000000.0) 522 #define G_DELTA_DOT_DOT_ALONG_TRACK(a) GETFLOATSIGN(a, 27, 1/50000000.0) 523 #define G_DELTA_DOT_DOT_CROSS_TRACK(a) GETFLOATSIGN(a, 27, 1/50000000.0) 524 #define G_SATELLITE_REFERENCE_POINT(a) GETBITS(a, 1) 525 526 #define G_SATELLITE_REFERENCE_DATUM(a) GETBITS(a, 1) 527 #define G_DELTA_CLOCK_C0(a) GETFLOATSIGN(a, 22, 1/10000.0) 528 #define G_DELTA_CLOCK_C1(a) GETFLOATSIGN(a, 21, 1/1000000.0) 529 #define G_DELTA_CLOCK_C2(a) GETFLOATSIGN(a, 27, 1/50000000.0) 530 #define G_NO_OF_CODE_BIASES(a) GETBITS(a, 5) 531 #define G_GPS_SIGNAL_IDENTIFIER(a) GETBITS(a, 5) 532 #define G_GLONASS_SIGNAL_IDENTIFIER(a) GETBITS(a, 5) 533 #define G_GALILEO_SIGNAL_IDENTIFIER(a) GETBITS(a, 5) 534 #define G_CODE_BIAS(a) GETFLOATSIGN(a, 14, 1/100.0) 535 #define G_GLONASS_SATELLITE_ID(a) {int temp; GETBITS(temp, 5) \ 536 if(a && a != temp) return GCOBR_DATAMISMATCH; a = temp;} 537 439 #define G_MULTIPLE_MESSAGE_INDICATOR(a) GETBITS(a, 1) 538 440 #define G_GPS_EPOCH_TIME(a, b) {int temp; GETBITS(temp, 20) \ 539 441 if(b && a != temp) return GCOBR_TIMEMISMATCH; a = temp;} 540 442 #define G_GLONASS_EPOCH_TIME(a, b) {int temp; GETBITS(temp, 17) \ 541 443 if(b && a != temp) return GCOBR_TIMEMISMATCH; a = temp;} 542 #define G_ NO_OF_SATELLITES(a){int temp; GETBITS(temp, 6) \444 #define G_GLONASS_SATELLITE_ID(a) {int temp; GETBITS(temp, 6) \ 543 445 if(a && a != temp) return GCOBR_DATAMISMATCH; a = temp;} 544 #define G_MULTIPLE_MESSAGE_INDICATOR(a) GETBITS(a, 1) 545 #define G_SSR_URA(a) GETBITS(a, 4) 546 #define G_HR_CLOCK_CORRECTION(a) GETFLOATSIGN(a, 22, 1/10000.0) 547 #define G_SSR_UPDATE_INTERVAL(a) GETBITS(a, 4) 548 549 #ifdef OLD 550 enum OldClockOrbitType { OLDCOTYPE_GPSORBIT=4050, OLDCOTYPE_GPSCLOCK=4051, 551 OLDCOTYPE_GLONASSORBIT=4053, OLDCOTYPE_GLONASSCLOCK=4054, 552 OLDCOTYPE_GPSCOMBINED=4056, OLDCOTYPE_GLONASSCOMBINED=4057}; 553 enum OldBiasType { OLDBTYPE_GPS=4052, OLDBTYPE_GLONASS=4055}; 554 #define OLD_G_RESERVED6 SKIPBITS(6) /* DF001 */ 555 #define OLD_G_GLONASS_SATELLITE_ID(a) {int temp; GETBITS(temp, 6) \ 446 #define G_NO_OF_SATELLITES(a) {int temp; GETBITS(temp, 5) \ 556 447 if(a && a != temp) return GCOBR_DATAMISMATCH; a = temp;} 557 #define OLD_G_NO_OF_SATELLITES(a) {int temp; GETBITS(temp, 5) \ 558 if(a && a != temp) return GCOBR_DATAMISMATCH; a = temp;} 559 #define OLD_G_DELTA_RADIAL(a) GETFLOATSIGN(a, 20, 1/1000.0) 560 #define OLD_G_DELTA_ALONG_TRACK(a) GETFLOATSIGN(a, 20, 1/1000.0) 561 #define OLD_G_DELTA_CROSS_TRACK(a) GETFLOATSIGN(a, 20, 1/1000.0) 562 #define OLD_G_DELTA_DOT_RADIAL(a) GETFLOATSIGN(a, 20, 1/100000.0) 563 #define OLD_G_DELTA_DOT_ALONG_TRACK(a) GETFLOATSIGN(a, 20, 1/100000.0) 564 #define OLD_G_DELTA_DOT_CROSS_TRACK(a) GETFLOATSIGN(a, 20, 1/100000.0) 565 #define OLD_G_DELTA_DOT_DOT_RADIAL(a) GETFLOATSIGN(a, 20, 1/5000000.0) 566 #define OLD_G_DELTA_DOT_DOT_ALONG_TRACK(a) GETFLOATSIGN(a, 20, 1/5000000.0) 567 #define OLD_G_DELTA_DOT_DOT_CROSS_TRACK(a) GETFLOATSIGN(a, 20, 1/5000000.0) 568 #define OLD_G_DELTA_A0(a) GETFLOATSIGN(a, 20, 1/1000.0) 569 #define OLD_G_DELTA_A1(a) GETFLOATSIGN(a, 20, 1/100000.0) 570 #define OLD_G_DELTA_A2(a) GETFLOATSIGN(a, 20, 1/5000000.0) 571 #define OLD_G_CODE_BIAS(a) GETFLOATSIGN(a, 20, 1/100.0) 572 #endif 448 #define G_SATELLITE_REFERENCE_POINT(a) GETBITS(a, 1) 449 #define G_SATELLITE_REFERENCE_DATUM(a) GETBITS(a, 1) 450 #define G_NO_OF_CODE_BIASES(a) GETBITS(a, 5) 451 #define G_GPS_CODE_TYPE(a) GETBITS(a, 5) 452 #define G_GLONASS_CODE_TYPE(a) GETBITS(a, 5) 453 454 /* yet undefined values */ 455 #define G_DELTA_RADIAL(a) GETFLOATSIGN(a, 20, 1/1000.0) 456 #define G_DELTA_ALONG_TRACK(a) GETFLOATSIGN(a, 20, 1/1000.0) 457 #define G_DELTA_CROSS_TRACK(a) GETFLOATSIGN(a, 20, 1/1000.0) 458 #define G_DELTA_DOT_RADIAL(a) GETFLOATSIGN(a, 20, 1/100000.0) 459 #define G_DELTA_DOT_ALONG_TRACK(a) GETFLOATSIGN(a, 20, 1/100000.0) 460 #define G_DELTA_DOT_CROSS_TRACK(a) GETFLOATSIGN(a, 20, 1/100000.0) 461 #define G_DELTA_DOT_DOT_RADIAL(a) GETFLOATSIGN(a, 20, 1/5000000.0) 462 #define G_DELTA_DOT_DOT_ALONG_TRACK(a) GETFLOATSIGN(a, 20, 1/5000000.0) 463 #define G_DELTA_DOT_DOT_CROSS_TRACK(a) GETFLOATSIGN(a, 20, 1/5000000.0) 464 #define G_DELTA_A0(a) GETFLOATSIGN(a, 20, 1/1000.0) 465 #define G_DELTA_A1(a) GETFLOATSIGN(a, 20, 1/100000.0) 466 #define G_DELTA_A2(a) GETFLOATSIGN(a, 20, 1/5000000.0) 467 #define G_CODE_BIAS(a) GETFLOATSIGN(a, 20, 1/100.0) 573 468 574 469 enum GCOB_RETURN GetClockOrbitBias(struct ClockOrbit *co, struct Bias *b, … … 604 499 co->epochGPS[co->epochSize] = co->GPSEpochTime; /* Weber, for latency */ 605 500 if(co->epochSize < 100) {co->epochSize += 1;} /* Weber, for latency */ 606 G_SSR_UPDATE_INTERVAL(co->UpdateInterval) 607 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 608 G_RESERVED5 501 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 502 G_RESERVED6 609 503 G_NO_OF_SATELLITES(co->NumberOfGPSSat) 610 504 if(co->OrbitDataSupplied) … … 633 527 co->epochGPS[co->epochSize] = co->GPSEpochTime; /* Weber, for latency */ 634 528 if(co->epochSize < 100) {co->epochSize += 1;} /* Weber, for latency */ 635 G_SSR_UPDATE_INTERVAL(co->UpdateInterval) 636 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 637 G_RESERVED5 529 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 530 G_RESERVED6 638 531 G_NO_OF_SATELLITES(co->NumberOfGPSSat) 639 532 if(co->ClockDataSupplied) … … 643 536 { 644 537 G_GPS_SATELLITE_ID(co->Sat[i].ID) 645 G_DELTA_CLOCK_C0(co->Sat[i].Clock.DeltaA0) 646 G_DELTA_CLOCK_C1(co->Sat[i].Clock.DeltaA1) 647 G_DELTA_CLOCK_C2(co->Sat[i].Clock.DeltaA2) 538 G_GPS_IODE(co->Sat[i].IOD) 539 G_DELTA_A0(co->Sat[i].Clock.DeltaA0) 540 G_DELTA_A1(co->Sat[i].Clock.DeltaA1) 541 G_DELTA_A2(co->Sat[i].Clock.DeltaA2) 648 542 } 649 543 break; … … 653 547 co->epochGPS[co->epochSize] = co->GPSEpochTime; /* Weber, for latency */ 654 548 if(co->epochSize < 100) {co->epochSize += 1;} /* Weber, for latency */ 655 G_SSR_UPDATE_INTERVAL(co->UpdateInterval) 656 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 657 G_RESERVED5 549 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 550 G_RESERVED6 658 551 G_NO_OF_SATELLITES(co->NumberOfGPSSat) 659 552 if(co->ClockDataSupplied || co->OrbitDataSupplied) … … 676 569 G_SATELLITE_REFERENCE_POINT(co->SatRefPoint) 677 570 G_SATELLITE_REFERENCE_DATUM(co->SatRefDatum) 678 G_DELTA_CLOCK_C0(co->Sat[i].Clock.DeltaA0) 679 G_DELTA_CLOCK_C1(co->Sat[i].Clock.DeltaA1) 680 G_DELTA_CLOCK_C2(co->Sat[i].Clock.DeltaA2) 681 } 682 break; 683 case COTYPE_GPSURA: 684 if(!co) return GCOBR_NOCLOCKORBITPARAMETER; 685 G_GPS_EPOCH_TIME(co->GPSEpochTime, co->NumberOfGPSSat) 686 co->epochGPS[co->epochSize] = co->GPSEpochTime; /* Weber, for latency */ 687 if(co->epochSize < 100) {co->epochSize += 1;} /* Weber, for latency */ 688 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 689 G_RESERVED5 690 G_NO_OF_SATELLITES(co->NumberOfGPSSat) 691 if(co->URADataSupplied) 692 return GCOBR_DATAMISMATCH; 693 co->URADataSupplied = 1; 694 for(i = 0; i < co->NumberOfGPSSat; ++i) 695 { 696 G_GPS_SATELLITE_ID(co->Sat[i].ID) 697 G_SSR_URA(co->Sat[i].URA) 698 } 699 break; 700 case COTYPE_GPSHR: 701 if(!co) return GCOBR_NOCLOCKORBITPARAMETER; 702 G_GPS_EPOCH_TIME(co->GPSEpochTime, co->NumberOfGPSSat) 703 co->epochGPS[co->epochSize] = co->GPSEpochTime; /* Weber, for latency */ 704 if(co->epochSize < 100) {co->epochSize += 1;} /* Weber, for latency */ 705 G_SSR_UPDATE_INTERVAL(co->UpdateInterval) 706 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 707 G_RESERVED5 708 G_NO_OF_SATELLITES(co->NumberOfGPSSat) 709 if(co->HRDataSupplied) 710 return GCOBR_DATAMISMATCH; 711 co->HRDataSupplied = 1; 712 for(i = 0; i < co->NumberOfGPSSat; ++i) 713 { 714 G_GPS_SATELLITE_ID(co->Sat[i].ID) 715 G_HR_CLOCK_CORRECTION(co->Sat[i].hrclock) 571 G_DELTA_A0(co->Sat[i].Clock.DeltaA0) 572 G_DELTA_A1(co->Sat[i].Clock.DeltaA1) 573 G_DELTA_A2(co->Sat[i].Clock.DeltaA2) 716 574 } 717 575 break; … … 719 577 if(!co) return GCOBR_NOCLOCKORBITPARAMETER; 720 578 G_GLONASS_EPOCH_TIME(co->GLONASSEpochTime, co->NumberOfGLONASSSat) 721 G_SSR_UPDATE_INTERVAL(co->UpdateInterval) 722 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 723 G_RESERVED5 579 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 580 G_RESERVED6 724 581 G_NO_OF_SATELLITES(co->NumberOfGLONASSSat) 725 582 if(co->OrbitDataSupplied) … … 747 604 if(!co) return GCOBR_NOCLOCKORBITPARAMETER; 748 605 G_GLONASS_EPOCH_TIME(co->GLONASSEpochTime, co->NumberOfGLONASSSat) 749 G_SSR_UPDATE_INTERVAL(co->UpdateInterval) 750 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 751 G_RESERVED5 606 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 607 G_RESERVED6 752 608 G_NO_OF_SATELLITES(co->NumberOfGLONASSSat) 753 609 if(co->ClockDataSupplied) … … 758 614 { 759 615 G_GLONASS_SATELLITE_ID(co->Sat[i].ID) 760 G_DELTA_CLOCK_C0(co->Sat[i].Clock.DeltaA0) 761 G_DELTA_CLOCK_C1(co->Sat[i].Clock.DeltaA1) 762 G_DELTA_CLOCK_C2(co->Sat[i].Clock.DeltaA2) 616 G_GLONASS_IOD(co->Sat[i].IOD) 617 G_DELTA_A0(co->Sat[i].Clock.DeltaA0) 618 G_DELTA_A1(co->Sat[i].Clock.DeltaA1) 619 G_DELTA_A2(co->Sat[i].Clock.DeltaA2) 763 620 } 764 621 break; … … 766 623 if(!co) return GCOBR_NOCLOCKORBITPARAMETER; 767 624 G_GLONASS_EPOCH_TIME(co->GLONASSEpochTime, co->NumberOfGLONASSSat) 768 G_SSR_UPDATE_INTERVAL(co->UpdateInterval) 769 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 770 G_RESERVED5 625 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 626 G_RESERVED6 771 627 G_NO_OF_SATELLITES(co->NumberOfGLONASSSat) 772 628 if(co->ClockDataSupplied || co->OrbitDataSupplied) … … 790 646 G_SATELLITE_REFERENCE_POINT(co->SatRefPoint) 791 647 G_SATELLITE_REFERENCE_DATUM(co->SatRefDatum) 792 G_DELTA_CLOCK_C0(co->Sat[i].Clock.DeltaA0) 793 G_DELTA_CLOCK_C1(co->Sat[i].Clock.DeltaA1) 794 G_DELTA_CLOCK_C2(co->Sat[i].Clock.DeltaA2) 795 } 796 break; 797 case COTYPE_GLONASSURA: 798 if(!co) return GCOBR_NOCLOCKORBITPARAMETER; 799 G_GLONASS_EPOCH_TIME(co->GLONASSEpochTime, co->NumberOfGLONASSSat) 800 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 801 G_RESERVED5 802 G_NO_OF_SATELLITES(co->NumberOfGLONASSSat) 803 if(co->URADataSupplied) 804 return GCOBR_DATAMISMATCH; 805 co->URADataSupplied = 1; 806 for(i = CLOCKORBIT_NUMGPS; 807 i < CLOCKORBIT_NUMGPS+co->NumberOfGLONASSSat; ++i) 808 { 809 G_GLONASS_SATELLITE_ID(co->Sat[i].ID) 810 G_SSR_URA(co->Sat[i].URA) 811 } 812 break; 813 case COTYPE_GLONASSHR: 814 if(!co) return GCOBR_NOCLOCKORBITPARAMETER; 815 G_GLONASS_EPOCH_TIME(co->GLONASSEpochTime, co->NumberOfGLONASSSat) 816 G_SSR_UPDATE_INTERVAL(co->UpdateInterval) 817 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 818 G_RESERVED5 819 G_NO_OF_SATELLITES(co->NumberOfGLONASSSat) 820 if(co->HRDataSupplied) 821 return GCOBR_DATAMISMATCH; 822 co->HRDataSupplied = 1; 823 for(i = CLOCKORBIT_NUMGPS; 824 i < CLOCKORBIT_NUMGPS+co->NumberOfGLONASSSat; ++i) 825 { 826 G_GLONASS_SATELLITE_ID(co->Sat[i].ID) 827 G_HR_CLOCK_CORRECTION(co->Sat[i].hrclock) 648 G_DELTA_A0(co->Sat[i].Clock.DeltaA0) 649 G_DELTA_A1(co->Sat[i].Clock.DeltaA1) 650 G_DELTA_A2(co->Sat[i].Clock.DeltaA2) 828 651 } 829 652 break; … … 831 654 if(!b) return GCOBR_NOBIASPARAMETER; 832 655 G_GPS_EPOCH_TIME(b->GPSEpochTime, co->NumberOfGPSSat) 833 G_SSR_UPDATE_INTERVAL(co->UpdateInterval) 834 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 835 G_RESERVED5 656 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 657 G_RESERVED6 836 658 G_NO_OF_SATELLITES(b->NumberOfGPSSat) 837 659 for(i = 0; i < b->NumberOfGPSSat; ++i) … … 841 663 for(j = 0; j < b->Sat[i].NumberOfCodeBiases; ++j) 842 664 { 843 G_GPS_ SIGNAL_IDENTIFIER(b->Sat[i].Biases[j].Type)665 G_GPS_CODE_TYPE(b->Sat[i].Biases[j].Type) 844 666 G_CODE_BIAS(b->Sat[i].Biases[j].Bias) 845 667 } … … 849 671 if(!b) return GCOBR_NOBIASPARAMETER; 850 672 G_GPS_EPOCH_TIME(b->GLONASSEpochTime, co->NumberOfGLONASSSat) 851 G_SSR_UPDATE_INTERVAL(co->UpdateInterval) 852 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 853 G_RESERVED5 673 G_MULTIPLE_MESSAGE_INDICATOR(mmi) 674 G_RESERVED6 854 675 G_NO_OF_SATELLITES(b->NumberOfGLONASSSat) 855 676 for(i = CLOCKORBIT_NUMGPS; … … 860 681 for(j = 0; j < b->Sat[i].NumberOfCodeBiases; ++j) 861 682 { 862 G_GLONASS_ SIGNAL_IDENTIFIER(b->Sat[i].Biases[j].Type)683 G_GLONASS_CODE_TYPE(b->Sat[i].Biases[j].Type) 863 684 G_CODE_BIAS(b->Sat[i].Biases[j].Bias) 864 685 } 865 686 } 866 687 break; 867 #ifdef OLD868 case OLDCOTYPE_GPSORBIT:869 if(!co) return GCOBR_NOCLOCKORBITPARAMETER;870 G_GPS_EPOCH_TIME(co->GPSEpochTime, co->NumberOfGPSSat)871 co->epochGPS[co->epochSize] = co->GPSEpochTime; /* Weber, for latency */872 if(co->epochSize < 100) {co->epochSize += 1;} /* Weber, for latency */873 G_MULTIPLE_MESSAGE_INDICATOR(mmi)874 OLD_G_RESERVED6875 OLD_G_NO_OF_SATELLITES(co->NumberOfGPSSat)876 if(co->OrbitDataSupplied)877 return GCOBR_DATAMISMATCH;878 co->OrbitDataSupplied = 1;879 for(i = 0; i < co->NumberOfGPSSat; ++i)880 {881 G_GPS_SATELLITE_ID(co->Sat[i].ID)882 G_GPS_IODE(co->Sat[i].IOD)883 OLD_G_DELTA_RADIAL(co->Sat[i].Orbit.DeltaRadial)884 OLD_G_DELTA_ALONG_TRACK(co->Sat[i].Orbit.DeltaAlongTrack)885 OLD_G_DELTA_CROSS_TRACK(co->Sat[i].Orbit.DeltaCrossTrack)886 OLD_G_DELTA_DOT_RADIAL(co->Sat[i].Orbit.DotDeltaRadial)887 OLD_G_DELTA_DOT_ALONG_TRACK(co->Sat[i].Orbit.DotDeltaAlongTrack)888 OLD_G_DELTA_DOT_CROSS_TRACK(co->Sat[i].Orbit.DotDeltaCrossTrack)889 OLD_G_DELTA_DOT_DOT_RADIAL(co->Sat[i].Orbit.DotDotDeltaRadial)890 OLD_G_DELTA_DOT_DOT_ALONG_TRACK(co->Sat[i].Orbit.DotDotDeltaAlongTrack)891 OLD_G_DELTA_DOT_DOT_CROSS_TRACK(co->Sat[i].Orbit.DotDotDeltaCrossTrack)892 G_SATELLITE_REFERENCE_POINT(co->SatRefPoint)893 G_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)894 }895 break;896 case OLDCOTYPE_GPSCLOCK:897 if(!co) return GCOBR_NOCLOCKORBITPARAMETER;898 G_GPS_EPOCH_TIME(co->GPSEpochTime, co->NumberOfGPSSat)899 co->epochGPS[co->epochSize] = co->GPSEpochTime; /* Weber, for latency */900 if(co->epochSize < 100) {co->epochSize += 1;} /* Weber, for latency */901 G_MULTIPLE_MESSAGE_INDICATOR(mmi)902 OLD_G_RESERVED6903 OLD_G_NO_OF_SATELLITES(co->NumberOfGPSSat)904 if(co->ClockDataSupplied)905 return GCOBR_DATAMISMATCH;906 co->ClockDataSupplied = 1;907 for(i = 0; i < co->NumberOfGPSSat; ++i)908 {909 G_GPS_SATELLITE_ID(co->Sat[i].ID)910 G_GPS_IODE(co->Sat[i].IOD)911 OLD_G_DELTA_A0(co->Sat[i].Clock.DeltaA0)912 OLD_G_DELTA_A1(co->Sat[i].Clock.DeltaA1)913 OLD_G_DELTA_A2(co->Sat[i].Clock.DeltaA2)914 }915 break;916 case OLDCOTYPE_GPSCOMBINED:917 if(!co) return -5;918 G_GPS_EPOCH_TIME(co->GPSEpochTime, co->NumberOfGPSSat)919 co->epochGPS[co->epochSize] = co->GPSEpochTime; /* Weber, for latency */920 if(co->epochSize < 100) {co->epochSize += 1;} /* Weber, for latency */921 G_MULTIPLE_MESSAGE_INDICATOR(mmi)922 OLD_G_RESERVED6923 OLD_G_NO_OF_SATELLITES(co->NumberOfGPSSat)924 if(co->ClockDataSupplied || co->OrbitDataSupplied)925 return GCOBR_DATAMISMATCH;926 co->OrbitDataSupplied = 1;927 co->ClockDataSupplied = 1;928 for(i = 0; i < co->NumberOfGPSSat; ++i)929 {930 G_GPS_SATELLITE_ID(co->Sat[i].ID)931 G_GPS_IODE(co->Sat[i].IOD)932 OLD_G_DELTA_RADIAL(co->Sat[i].Orbit.DeltaRadial)933 OLD_G_DELTA_ALONG_TRACK(co->Sat[i].Orbit.DeltaAlongTrack)934 OLD_G_DELTA_CROSS_TRACK(co->Sat[i].Orbit.DeltaCrossTrack)935 OLD_G_DELTA_DOT_RADIAL(co->Sat[i].Orbit.DotDeltaRadial)936 OLD_G_DELTA_DOT_ALONG_TRACK(co->Sat[i].Orbit.DotDeltaAlongTrack)937 OLD_G_DELTA_DOT_CROSS_TRACK(co->Sat[i].Orbit.DotDeltaCrossTrack)938 OLD_G_DELTA_DOT_DOT_RADIAL(co->Sat[i].Orbit.DotDotDeltaRadial)939 OLD_G_DELTA_DOT_DOT_ALONG_TRACK(co->Sat[i].Orbit.DotDotDeltaAlongTrack)940 OLD_G_DELTA_DOT_DOT_CROSS_TRACK(co->Sat[i].Orbit.DotDotDeltaCrossTrack)941 G_SATELLITE_REFERENCE_POINT(co->SatRefPoint)942 G_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)943 OLD_G_DELTA_A0(co->Sat[i].Clock.DeltaA0)944 OLD_G_DELTA_A1(co->Sat[i].Clock.DeltaA1)945 OLD_G_DELTA_A2(co->Sat[i].Clock.DeltaA2)946 }947 break;948 case OLDCOTYPE_GLONASSORBIT:949 if(!co) return GCOBR_NOCLOCKORBITPARAMETER;950 G_GLONASS_EPOCH_TIME(co->GLONASSEpochTime, co->NumberOfGLONASSSat)951 G_MULTIPLE_MESSAGE_INDICATOR(mmi)952 OLD_G_RESERVED6953 OLD_G_NO_OF_SATELLITES(co->NumberOfGLONASSSat)954 if(co->OrbitDataSupplied)955 return GCOBR_DATAMISMATCH;956 co->OrbitDataSupplied = 1;957 for(i = CLOCKORBIT_NUMGPS;958 i < CLOCKORBIT_NUMGPS+co->NumberOfGLONASSSat; ++i)959 {960 OLD_G_GLONASS_SATELLITE_ID(co->Sat[i].ID)961 G_GLONASS_IOD(co->Sat[i].IOD)962 OLD_G_DELTA_RADIAL(co->Sat[i].Orbit.DeltaRadial)963 OLD_G_DELTA_ALONG_TRACK(co->Sat[i].Orbit.DeltaAlongTrack)964 OLD_G_DELTA_CROSS_TRACK(co->Sat[i].Orbit.DeltaCrossTrack)965 OLD_G_DELTA_DOT_RADIAL(co->Sat[i].Orbit.DotDeltaRadial)966 OLD_G_DELTA_DOT_ALONG_TRACK(co->Sat[i].Orbit.DotDeltaAlongTrack)967 OLD_G_DELTA_DOT_CROSS_TRACK(co->Sat[i].Orbit.DotDeltaCrossTrack)968 OLD_G_DELTA_DOT_DOT_RADIAL(co->Sat[i].Orbit.DotDotDeltaRadial)969 OLD_G_DELTA_DOT_DOT_ALONG_TRACK(co->Sat[i].Orbit.DotDotDeltaAlongTrack)970 OLD_G_DELTA_DOT_DOT_CROSS_TRACK(co->Sat[i].Orbit.DotDotDeltaCrossTrack)971 G_SATELLITE_REFERENCE_POINT(co->SatRefPoint)972 G_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)973 }974 break;975 case OLDCOTYPE_GLONASSCLOCK:976 if(!co) return GCOBR_NOCLOCKORBITPARAMETER;977 G_GLONASS_EPOCH_TIME(co->GLONASSEpochTime, co->NumberOfGLONASSSat)978 G_MULTIPLE_MESSAGE_INDICATOR(mmi)979 OLD_G_RESERVED6980 OLD_G_NO_OF_SATELLITES(co->NumberOfGLONASSSat)981 if(co->ClockDataSupplied)982 return GCOBR_DATAMISMATCH;983 co->ClockDataSupplied = 1;984 for(i = CLOCKORBIT_NUMGPS;985 i < CLOCKORBIT_NUMGPS+co->NumberOfGLONASSSat; ++i)986 {987 OLD_G_GLONASS_SATELLITE_ID(co->Sat[i].ID)988 G_GLONASS_IOD(co->Sat[i].IOD)989 OLD_G_DELTA_A0(co->Sat[i].Clock.DeltaA0)990 OLD_G_DELTA_A1(co->Sat[i].Clock.DeltaA1)991 OLD_G_DELTA_A2(co->Sat[i].Clock.DeltaA2)992 }993 break;994 case OLDCOTYPE_GLONASSCOMBINED:995 if(!co) return GCOBR_NOCLOCKORBITPARAMETER;996 G_GLONASS_EPOCH_TIME(co->GLONASSEpochTime, co->NumberOfGLONASSSat)997 G_MULTIPLE_MESSAGE_INDICATOR(mmi)998 OLD_G_RESERVED6999 OLD_G_NO_OF_SATELLITES(co->NumberOfGLONASSSat)1000 if(co->ClockDataSupplied || co->OrbitDataSupplied)1001 return GCOBR_DATAMISMATCH;1002 co->OrbitDataSupplied = 1;1003 co->ClockDataSupplied = 1;1004 for(i = CLOCKORBIT_NUMGPS;1005 i < CLOCKORBIT_NUMGPS+co->NumberOfGLONASSSat; ++i)1006 {1007 OLD_G_GLONASS_SATELLITE_ID(co->Sat[i].ID)1008 G_GLONASS_IOD(co->Sat[i].IOD)1009 OLD_G_DELTA_RADIAL(co->Sat[i].Orbit.DeltaRadial)1010 OLD_G_DELTA_ALONG_TRACK(co->Sat[i].Orbit.DeltaAlongTrack)1011 OLD_G_DELTA_CROSS_TRACK(co->Sat[i].Orbit.DeltaCrossTrack)1012 OLD_G_DELTA_DOT_RADIAL(co->Sat[i].Orbit.DotDeltaRadial)1013 OLD_G_DELTA_DOT_ALONG_TRACK(co->Sat[i].Orbit.DotDeltaAlongTrack)1014 OLD_G_DELTA_DOT_CROSS_TRACK(co->Sat[i].Orbit.DotDeltaCrossTrack)1015 OLD_G_DELTA_DOT_DOT_RADIAL(co->Sat[i].Orbit.DotDotDeltaRadial)1016 OLD_G_DELTA_DOT_DOT_ALONG_TRACK(co->Sat[i].Orbit.DotDotDeltaAlongTrack)1017 OLD_G_DELTA_DOT_DOT_CROSS_TRACK(co->Sat[i].Orbit.DotDotDeltaCrossTrack)1018 G_SATELLITE_REFERENCE_POINT(co->SatRefPoint)1019 G_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)1020 OLD_G_DELTA_A0(co->Sat[i].Clock.DeltaA0)1021 OLD_G_DELTA_A1(co->Sat[i].Clock.DeltaA1)1022 OLD_G_DELTA_A2(co->Sat[i].Clock.DeltaA2)1023 }1024 break;1025 case OLDBTYPE_GPS:1026 if(!b) return GCOBR_NOBIASPARAMETER;1027 G_GPS_EPOCH_TIME(b->GPSEpochTime, co->NumberOfGPSSat)1028 G_MULTIPLE_MESSAGE_INDICATOR(mmi)1029 OLD_G_RESERVED61030 OLD_G_NO_OF_SATELLITES(b->NumberOfGPSSat)1031 for(i = 0; i < b->NumberOfGPSSat; ++i)1032 {1033 G_GPS_SATELLITE_ID(b->Sat[i].ID)1034 G_NO_OF_CODE_BIASES(b->Sat[i].NumberOfCodeBiases)1035 for(j = 0; j < b->Sat[i].NumberOfCodeBiases; ++j)1036 {1037 G_GPS_SIGNAL_IDENTIFIER(b->Sat[i].Biases[j].Type)1038 OLD_G_CODE_BIAS(b->Sat[i].Biases[j].Bias)1039 }1040 }1041 break;1042 case OLDBTYPE_GLONASS:1043 if(!b) return GCOBR_NOBIASPARAMETER;1044 G_GPS_EPOCH_TIME(b->GLONASSEpochTime, co->NumberOfGLONASSSat)1045 G_MULTIPLE_MESSAGE_INDICATOR(mmi)1046 OLD_G_RESERVED61047 OLD_G_NO_OF_SATELLITES(b->NumberOfGLONASSSat)1048 for(i = CLOCKORBIT_NUMGPS;1049 i < CLOCKORBIT_NUMGPS+b->NumberOfGLONASSSat; ++i)1050 {1051 OLD_G_GLONASS_SATELLITE_ID(b->Sat[i].ID)1052 G_NO_OF_CODE_BIASES(b->Sat[i].NumberOfCodeBiases)1053 for(j = 0; j < b->Sat[i].NumberOfCodeBiases; ++j)1054 {1055 G_GLONASS_SIGNAL_IDENTIFIER(b->Sat[i].Biases[j].Type)1056 OLD_G_CODE_BIAS(b->Sat[i].Biases[j].Bias)1057 }1058 }1059 break;1060 #endif1061 688 default: 1062 689 return GCOBR_UNKNOWNTYPE; -
trunk/BNS/RTCM/clock_orbit_rtcm.h
r1660 r1662 6 6 Name: clock_orbit_rtcm.h 7 7 Project: RTCM3 8 Version: $Id: clock_orbit_rtcm.h,v 1.3 200 9/02/12 11:56:16 stoecker Exp $8 Version: $Id: clock_orbit_rtcm.h,v 1.3 2008/11/16 00:05:32 weber Exp $ 9 9 Authors: Dirk Stöcker 10 10 Description: state space approach for RTCM3 … … 15 15 enum SatelliteReferenceDatum { DATUM_ITRF=0, DATUM_LOCAL=1 }; 16 16 enum SatelliteReferencePoint { POINT_IONOFREE=0, POINT_CENTER=1 }; 17 enum ClockOrbitType { 18 COTYPE_GPSORBIT=4060, COTYPE_GPSCLOCK=4061, 19 COTYPE_GPSCOMBINED=4063, COTYPE_GPSURA=4064, COTYPE_GPSHR=4065, 20 21 COTYPE_GLONASSORBIT=4066, COTYPE_GLONASSCLOCK=4067, 22 COTYPE_GLONASSCOMBINED=4069, COTYPE_GLONASSURA=4070, COTYPE_GLONASSHR=4071, 23 17 enum ClockOrbitType { COTYPE_GPSORBIT=4050, COTYPE_GPSCLOCK=4051, 18 COTYPE_GLONASSORBIT=4053, COTYPE_GLONASSCLOCK=4054, 19 COTYPE_GPSCOMBINED=4056, COTYPE_GLONASSCOMBINED=4057, 24 20 COTYPE_AUTO=0 }; 25 enum BiasType { BTYPE_GPS=40 62, BTYPE_GLONASS=4068, BTYPE_AUTO = 0 };21 enum BiasType { BTYPE_GPS=4052, BTYPE_GLONASS=4055, BTYPE_AUTO = 0 }; 26 22 27 23 enum COR_CONSTANTS { … … 55 51 int NumberOfGLONASSSat; /* 0 .. 24 */ 56 52 int ClockDataSupplied; /* boolean */ 57 int HRDataSupplied; /* boolean */58 53 int OrbitDataSupplied; /* boolean */ 59 int URADataSupplied; /* boolean */60 54 int epochGPS[101]; /* Weber, for latency */ 61 55 int epochSize; /* Weber, for latency */ 62 int UpdateInterval;63 56 enum SatelliteReferencePoint SatRefPoint; 64 57 enum SatelliteReferenceDatum SatRefDatum; … … 66 59 int ID; /* GPS or GLONASS */ 67 60 int IOD; /* GPS or GLONASS */ 68 int URA;69 double hrclock;70 61 struct OrbitPart 71 62 { … … 95 86 int NumberOfGPSSat; /* 0 .. 32 */ 96 87 int NumberOfGLONASSSat; /* 0 .. 24 */ 97 int UpdateInterval;98 88 struct BiasSat 99 89 {
Note:
See TracChangeset
for help on using the changeset viewer.