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.SatRefDatum = DATUM_ITRF;
|
---|
63 | }
|
---|
64 |
|
---|
65 | sd = co.Sat + co.NumberOfGPSSat;
|
---|
66 | sd->ID = prn;
|
---|
67 | sd->IOD = iode;
|
---|
68 | sd->Clock.DeltaA0 = clock;
|
---|
69 | sd->Orbit.DeltaRadial = radial;
|
---|
70 | sd->Orbit.DeltaAlongTrack = along;
|
---|
71 | sd->Orbit.DeltaCrossTrack = outofplane;
|
---|
72 | printf("%d %d/%f %c %d %d %d %f %f %f %f\n",num, week, tow, type, prn,
|
---|
73 | iodc, iode, clock, radial, along, outofplane);
|
---|
74 | ++co.NumberOfGPSSat;
|
---|
75 | }
|
---|
76 | }
|
---|
77 | return 0;
|
---|
78 | }
|
---|