1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.rinex.navigation.parsers.ephemeris;
18
19 import org.orekit.files.rinex.navigation.RinexNavigationParser;
20 import org.orekit.files.rinex.navigation.parsers.ParseInfo;
21 import org.orekit.files.rinex.navigation.parsers.RecordLineParser;
22 import org.orekit.propagation.analytical.gnss.data.CivilianNavigationMessage;
23 import org.orekit.utils.units.Unit;
24
25
26
27
28
29
30
31 public abstract class CivilianNavigationParser<T extends CivilianNavigationMessage<T>> extends RecordLineParser {
32
33
34 private final ParseInfo parseInfo;
35
36
37 private final T message;
38
39
40
41
42
43 protected CivilianNavigationParser(final ParseInfo parseInfo, final T message) {
44 this.parseInfo = parseInfo;
45 this.message = message;
46 }
47
48
49
50
51 public ParseInfo getParseInfo() {
52 return parseInfo;
53 }
54
55
56
57
58 public T getMessage() {
59 return message;
60 }
61
62
63 @Override
64 public void parseLine00() {
65 parseSvEpochSvClockLine(parseInfo.getTimeScales().getGPS(), parseInfo, message);
66 }
67
68
69 @Override
70 public void parseLine01() {
71 message.setADot(parseInfo.parseDouble1(RinexNavigationParser.M_PER_S));
72 message.setCrs(parseInfo.parseDouble2(Unit.METRE));
73 message.setDeltaN0(parseInfo.parseDouble3(RinexNavigationParser.RAD_PER_S));
74 message.setM0(parseInfo.parseDouble4(Unit.RADIAN));
75 }
76
77
78 @Override
79 public void parseLine02() {
80 message.setCuc(parseInfo.parseDouble1(Unit.RADIAN));
81 message.setE(parseInfo.parseDouble2(Unit.NONE));
82 message.setCus(parseInfo.parseDouble3(Unit.RADIAN));
83 message.setSqrtA(parseInfo.parseDouble4(RinexNavigationParser.SQRT_M));
84 }
85
86
87 @Override
88 public void parseLine03() {
89 message.setTime(parseInfo.parseDouble1(Unit.SECOND));
90 message.setCic(parseInfo.parseDouble2(Unit.RADIAN));
91 message.setOmega0(parseInfo.parseDouble3(Unit.RADIAN));
92 message.setCis(parseInfo.parseDouble4(Unit.RADIAN));
93 }
94
95
96 @Override
97 public void parseLine04() {
98 message.setI0(parseInfo.parseDouble1(Unit.RADIAN));
99 message.setCrc(parseInfo.parseDouble2(Unit.METRE));
100 message.setPa(parseInfo.parseDouble3(Unit.RADIAN));
101 message.setOmegaDot(parseInfo.parseDouble4(RinexNavigationParser.RAD_PER_S));
102 }
103
104
105 @Override
106 public void parseLine05() {
107 message.setIDot(parseInfo.parseDouble1(RinexNavigationParser.RAD_PER_S));
108 message.setDeltaN0Dot(parseInfo.parseDouble2(RinexNavigationParser.RAD_PER_S2));
109 message.setUraiNed0(parseInfo.parseInt3());
110 message.setUraiNed1(parseInfo.parseInt4());
111 }
112
113
114 @Override
115 public void parseLine06() {
116 message.setUraiEd(parseInfo.parseInt1());
117 message.setSvHealth(parseInfo.parseInt2());
118 message.setTGD(parseInfo.parseDouble3(Unit.SECOND));
119 message.setUraiNed2(parseInfo.parseInt4());
120 }
121
122
123 @Override
124 public void parseLine07() {
125 message.setIscL1CA(parseInfo.parseDouble1(Unit.SECOND));
126 message.setIscL2C(parseInfo.parseDouble2(Unit.SECOND));
127 message.setIscL5I5(parseInfo.parseDouble3(Unit.SECOND));
128 message.setIscL5Q5(parseInfo.parseDouble4(Unit.SECOND));
129 }
130
131
132 @Override
133 public void parseLine08() {
134 if (message.isCnv2()) {
135
136 message.setIscL1CD(parseInfo.parseDouble1(Unit.SECOND));
137 message.setIscL1CP(parseInfo.parseDouble2(Unit.SECOND));
138 } else {
139 parseTransmissionTimeLine();
140 }
141 }
142
143
144 @Override
145 public void parseLine09() {
146 parseTransmissionTimeLine();
147 }
148
149
150
151 protected void parseTransmissionTimeLine() {
152 message.setTransmissionTime(parseInfo.parseDouble1(Unit.SECOND));
153 message.setWeek(parseInfo.parseInt2());
154 message.setFlags(getParseInfo().parseInt3());
155 parseInfo.closePendingRecord();
156 }
157
158 }