source: ntrip/trunk/BNS/RTCM/clock_orbit_rtcm.h@ 2297

Last change on this file since 2297 was 2297, checked in by mervart, 14 years ago

* empty log message *

  • Property svn:executable set to *
File size: 4.7 KB
Line 
1#ifndef RTCM3_CLOCK_ORBIT_RTCM_H
2#define RTCM3_CLOCK_ORBIT_RTCM_H
3
4/* Programheader
5
6 Name: clock_orbit_rtcm.h
7 Project: RTCM3
8 Version: $Id: clock_orbit_rtcm.h,v 1.11 2009/07/06 05:42:44 mervart Exp $
9 Authors: Dirk Stöcker
10 Description: state space approach for RTCM3
11*/
12
13#include <string.h>
14
15enum SatelliteReferenceDatum { DATUM_ITRF=0, DATUM_LOCAL=1 };
16enum SatelliteReferencePoint { POINT_IONOFREE=0, POINT_CENTER=1 };
17enum ClockOrbitType {
18 COTYPE_GPSORBIT=1057, COTYPE_GPSCLOCK=1058,
19 COTYPE_GPSCOMBINED=1060, COTYPE_GPSURA=1061, COTYPE_GPSHR=1062,
20
21 COTYPE_GLONASSORBIT=1063, COTYPE_GLONASSCLOCK=1064,
22 COTYPE_GLONASSCOMBINED=1066, COTYPE_GLONASSURA=1067, COTYPE_GLONASSHR=1068,
23
24 COTYPE_AUTO=0 };
25enum BiasType { BTYPE_GPS=1059, BTYPE_GLONASS=1065, BTYPE_AUTO = 0 };
26
27enum COR_CONSTANTS {
28 CLOCKORBIT_BUFFERSIZE=2048,
29 CLOCKORBIT_NUMGPS=32,
30 CLOCKORBIT_NUMGLONASS=24,
31 CLOCKORBIT_NUMBIAS=10
32};
33
34enum CodeType {
35 CODETYPEGPS_L1_CA = 0,
36 CODETYPEGPS_L1_P = 1,
37 CODETYPEGPS_L1_Z = 2,
38 /* ... */
39 CODETYPEGPS_L2_P = 10,
40 /* ... */
41 CODETYPEGLONASS_L1_CA = 0,
42 CODETYPEGLONASS_L1_P = 1,
43 CODETYPEGLONASS_L2_CA = 2,
44 CODETYPEGLONASS_L2_P = 3,
45};
46
47/* GLONASS data is stored with offset CLOCKORBIT_NUMGPS in the data structures.
48So first GLONASS satellite is at xxx->Sat[CLOCKORBIT_NUMGPS], first
49GPS satellite is xxx->Sat[0]. */
50
51struct ClockOrbit
52{
53 enum ClockOrbitType messageType;
54 int GPSEpochTime; /* 0 .. 604799 s */
55 int GLONASSEpochTime; /* 0 .. 86399 s (86400 for leap second) */
56 int NumberOfGPSSat; /* 0 .. 32 */
57 int NumberOfGLONASSSat; /* 0 .. 24 */
58 int ClockDataSupplied; /* boolean */
59 int HRDataSupplied; /* boolean */
60 int OrbitDataSupplied; /* boolean */
61 int URADataSupplied; /* boolean */
62 int epochGPS[101]; /* Weber, for latency */
63 int epochSize; /* Weber, for latency */
64 int UpdateInterval;
65 enum SatelliteReferencePoint SatRefPoint;
66 enum SatelliteReferenceDatum SatRefDatum;
67 struct SatData {
68 int ID; /* GPS or GLONASS */
69 int IOD; /* GPS or GLONASS */
70 int URA;
71 double hrclock;
72 struct OrbitPart
73 {
74 double DeltaRadial; /* m */
75 double DeltaAlongTrack; /* m */
76 double DeltaCrossTrack; /* m */
77 double DotDeltaRadial; /* m/s */
78 double DotDeltaAlongTrack; /* m/s */
79 double DotDeltaCrossTrack; /* m/s */
80 double DotDotDeltaRadial; /* m/ss */
81 double DotDotDeltaAlongTrack; /* m/ss */
82 double DotDotDeltaCrossTrack; /* m/ss */
83 } Orbit;
84 struct ClockPart
85 {
86 double DeltaA0; /* m */
87 double DeltaA1; /* m/s */
88 double DeltaA2; /* m/ss */
89 } Clock;
90 } Sat[CLOCKORBIT_NUMGPS+CLOCKORBIT_NUMGLONASS];
91};
92
93struct Bias
94{
95 enum BiasType messageType;
96 int GPSEpochTime; /* 0 .. 604799 s */
97 int GLONASSEpochTime; /* 0 .. 86399 s (86400 for leap second) */
98 int NumberOfGPSSat; /* 0 .. 32 */
99 int NumberOfGLONASSSat; /* 0 .. 24 */
100 int UpdateInterval;
101 struct BiasSat
102 {
103 int ID; /* GPS or GLONASS */
104 int NumberOfCodeBiases;
105 struct CodeBias
106 {
107 enum CodeType Type;
108 float Bias; /* m */
109 } Biases[CLOCKORBIT_NUMBIAS];
110 } Sat[CLOCKORBIT_NUMGPS+CLOCKORBIT_NUMGLONASS];
111};
112
113/* return size of resulting data or 0 in case of an error */
114size_t MakeClockOrbit(const struct ClockOrbit *co, enum ClockOrbitType type,
115 int moremessagesfollow, char *buffer, size_t size);
116size_t MakeBias(const struct Bias *b, enum BiasType type,
117 int moremessagesfollow, char *buffer, size_t size);
118
119enum GCOB_RETURN {
120 /* all well */
121 GCOBR_MESSAGEFOLLOWS = 1,
122 GCOBR_OK = 0,
123 /* unknown data, a warning */
124 GCOBR_UNKNOWNTYPE = -1,
125 GCOBR_UNKNOWNDATA = -2,
126 GCOBR_CRCMISMATCH = -3,
127 GCOBR_SHORTMESSAGE = -4,
128 /* failed to do the work */
129 GCOBR_NOCLOCKORBITPARAMETER = -10,
130 GCOBR_NOBIASPARAMETER = -11,
131 /* data mismatch - data in storage does not match new data */
132 GCOBR_TIMEMISMATCH = -20,
133 GCOBR_DATAMISMATCH = -21,
134 /* not enough data - can decode the block completely */
135 GCOBR_SHORTBUFFER = -30,
136 GCOBR_MESSAGEEXCEEDSBUFFER = -31};
137
138/* NOTE: When an error message has been emitted, the output structures may have been modified. Make a copy of the previous variant before calling the
139function to have a clean state. */
140
141/* buffer should point to a RTCM3 block */
142enum GCOB_RETURN GetClockOrbitBias(struct ClockOrbit *co, struct Bias *b,
143 const char *buffer, size_t size, int *bytesused);
144
145#endif /* RTCM3_CLOCK_ORBIT_RTCM_H */
Note: See TracBrowser for help on using the repository browser.