[956] | 1 | #include "clock_orbit_rtcm.h"
|
---|
| 2 | #include "clock_orbit_rtcm.c"
|
---|
| 3 |
|
---|
| 4 | #include <stdio.h>
|
---|
| 5 |
|
---|
| 6 | /* prototype, don't use any of this code in a final application */
|
---|
| 7 |
|
---|
| 8 | struct ClockOrbit co;
|
---|
| 9 | double lasttow = -1.0;
|
---|
| 10 |
|
---|
| 11 | int main(void)
|
---|
| 12 | {
|
---|
| 13 | char buffer[4096];
|
---|
| 14 | char obuffer[CLOCKORBIT_BUFFERSIZE];
|
---|
| 15 |
|
---|
| 16 | while(gets(buffer))
|
---|
| 17 | {
|
---|
| 18 | char type;
|
---|
| 19 | int week, prn, iodc, iode;
|
---|
| 20 | double tow, clock, radial, along, outofplane;
|
---|
| 21 | int num = sscanf(buffer, "%d %lf %c%d %d %d %lf %lf %lf %lf\n", &week,
|
---|
| 22 | &tow, &type, &prn, &iodc, &iode, &clock, &radial, &along, &outofplane);
|
---|
| 23 | if(num == 10)
|
---|
| 24 | {
|
---|
| 25 | struct SatData *sd;
|
---|
| 26 | if(lasttow != tow) /* create block */
|
---|
| 27 | {
|
---|
| 28 | if(lasttow >= 0)
|
---|
| 29 | {
|
---|
| 30 | int l = MakeClockOrbit(&co, COTYPE_AUTO, 0, obuffer, sizeof(obuffer));
|
---|
| 31 | if(!l) fprintf(stderr, "BUILD ERROR\n");
|
---|
| 32 | else
|
---|
| 33 | {
|
---|
| 34 | int nl, ns;
|
---|
| 35 | struct ClockOrbit c;
|
---|
| 36 |
|
---|
| 37 | // fwrite(obuffer, l, 1, stdout);
|
---|
| 38 | memset(&c, 0, sizeof(c));
|
---|
| 39 | nl = GetClockOrbitBias(&c, 0, obuffer, l, &ns);
|
---|
| 40 | if(nl < 0) fprintf(stderr, "EXTRACT ERROR %d\n", nl);
|
---|
| 41 | else if(nl > 0) fprintf(stderr, "MULTIBLOCK UNSUPPORTED IN TEST\n");
|
---|
| 42 | else if(ns != l) fprintf(stderr, "SIZE MISMATCH (%d/%d)\n", ns,l);
|
---|
| 43 | else
|
---|
| 44 | {
|
---|
| 45 | int i;
|
---|
| 46 | for(i = 0; i < c.NumberOfGPSSat; ++i)
|
---|
| 47 | {
|
---|
| 48 | printf("%d G%d %d %f %f %f %f\n", c.GPSEpochTime,
|
---|
| 49 | c.Sat[i].ID, co.Sat[i].IOD, c.Sat[i].Clock.DeltaA0,
|
---|
| 50 | c.Sat[i].Orbit.DeltaRadial, c.Sat[i].Orbit.DeltaAlongTrack,
|
---|
| 51 | c.Sat[i].Orbit.DeltaCrossTrack);
|
---|
| 52 | }
|
---|
| 53 | }
|
---|
| 54 | }
|
---|
| 55 | }
|
---|
| 56 | memset(&co, 0, sizeof(co));
|
---|
| 57 | lasttow = tow;
|
---|
| 58 | co.GPSEpochTime = (int)tow;
|
---|
| 59 | /* co.GLONASSEpochTime = 0; */
|
---|
| 60 | co.ClockDataSupplied = 1;
|
---|
| 61 | co.OrbitDataSupplied = 1;
|
---|
| 62 | co.SatRefPoint = DATUM_ITRF;
|
---|
| 63 | co.SatRefDatum = POINT_IONOFREE;
|
---|
| 64 | }
|
---|
| 65 |
|
---|
| 66 | sd = co.Sat + co.NumberOfGPSSat;
|
---|
| 67 | sd->ID = prn;
|
---|
| 68 | sd->IOD = iode;
|
---|
| 69 | sd->Clock.DeltaA0 = clock;
|
---|
| 70 | sd->Orbit.DeltaRadial = radial;
|
---|
| 71 | sd->Orbit.DeltaAlongTrack = along;
|
---|
| 72 | sd->Orbit.DeltaCrossTrack = outofplane;
|
---|
| 73 | printf("%d %d/%f %c %d %d %d %f %f %f %f\n",num, week, tow, type, prn,
|
---|
| 74 | iodc, iode, clock, radial, along, outofplane);
|
---|
| 75 | ++co.NumberOfGPSSat;
|
---|
| 76 | }
|
---|
| 77 | }
|
---|
| 78 | return 0;
|
---|
| 79 | }
|
---|