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.errors.OrekitException;
20 import org.orekit.errors.OrekitMessages;
21 import org.orekit.files.rinex.navigation.RinexNavigation;
22 import org.orekit.files.rinex.navigation.RinexNavigationParser;
23 import org.orekit.files.rinex.navigation.parsers.ParseInfo;
24 import org.orekit.gnss.PredefinedGnssSignal;
25 import org.orekit.propagation.analytical.gnss.data.BeidouCivilianNavigationMessage;
26 import org.orekit.propagation.analytical.gnss.data.BeidouSatelliteType;
27 import org.orekit.utils.units.Unit;
28
29
30
31
32
33
34 public class BeidouCnv123Parser extends AbstractNavigationParser<BeidouCivilianNavigationMessage> {
35
36
37
38
39
40 public BeidouCnv123Parser(final ParseInfo parseInfo, final BeidouCivilianNavigationMessage message) {
41 super(parseInfo, message);
42 }
43
44
45 @Override
46 public void parseLine00() {
47 final ParseInfo parseInfo = getParseInfo();
48 final BeidouCivilianNavigationMessage message = getMessage();
49 parseSvEpochSvClockLine(parseInfo.getTimeScales().getBDT(), parseInfo, message);
50 }
51
52
53 @Override
54 public void parseLine01() {
55 super.parseLine01();
56 getMessage().setADot(getParseInfo().parseDouble1(RinexNavigationParser.M_PER_S));
57 }
58
59
60 @Override
61 public void parseLine05() {
62 final ParseInfo parseInfo = getParseInfo();
63 final BeidouCivilianNavigationMessage message = getMessage();
64 message.setIDot(parseInfo.parseDouble1(RinexNavigationParser.RAD_PER_S));
65 message.setDeltaN0Dot(parseInfo.parseDouble2(RinexNavigationParser.RAD_PER_S2));
66 try {
67 message.setSatelliteType(BeidouSatelliteType.parseSatelliteType(parseInfo.parseInt3()));
68 } catch (IllegalArgumentException iae) {
69 throw new OrekitException(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE,
70 parseInfo.getLineNumber(), parseInfo.getName(),
71 parseInfo.getLine());
72 }
73 message.setTime(parseInfo.parseDouble4(Unit.SECOND));
74 }
75
76
77 @Override
78 public void parseLine06() {
79 final ParseInfo parseInfo = getParseInfo();
80 final BeidouCivilianNavigationMessage message = getMessage();
81 message.setSisaiOe(parseInfo.parseInt1());
82 message.setSisaiOcb(parseInfo.parseInt2());
83 message.setSisaiOc1(parseInfo.parseInt3());
84 message.setSisaiOc2(parseInfo.parseInt4());
85 }
86
87
88 @Override
89 public void parseLine07() {
90 final ParseInfo parseInfo = getParseInfo();
91 final BeidouCivilianNavigationMessage message = getMessage();
92 if (message.getRadioWave().closeTo(PredefinedGnssSignal.B1C)) {
93 message.setIscB1CD(parseInfo.parseDouble1(Unit.SECOND));
94
95 message.setTgdB1Cp(parseInfo.parseDouble3(Unit.SECOND));
96 message.setTgdB2ap(parseInfo.parseDouble4(Unit.SECOND));
97 } else if (message.getRadioWave().closeTo(PredefinedGnssSignal.B2A)) {
98
99 message.setIscB2AD(parseInfo.parseDouble2(Unit.SECOND));
100 message.setTgdB1Cp(parseInfo.parseDouble3(Unit.SECOND));
101 message.setTgdB2ap(parseInfo.parseDouble4(Unit.SECOND));
102 } else {
103 parseSismaiHealthIntegrity();
104 }
105 }
106
107
108 @Override
109 public void parseLine08() {
110 final ParseInfo parseInfo = getParseInfo();
111 final BeidouCivilianNavigationMessage message = getMessage();
112 if (message.getRadioWave().closeTo(PredefinedGnssSignal.B2B)) {
113 message.setTransmissionTime(parseInfo.parseDouble1(Unit.SECOND));
114 parseInfo.closePendingRecord();
115 } else {
116 parseSismaiHealthIntegrity();
117 }
118 }
119
120
121 @Override
122 public void parseLine09() {
123 final ParseInfo parseInfo = getParseInfo();
124 final BeidouCivilianNavigationMessage message = getMessage();
125 message.setTransmissionTime(parseInfo.parseDouble1(Unit.SECOND));
126
127
128 message.setIODE(parseInfo.parseInt4());
129 parseInfo.closePendingRecord();
130 }
131
132
133 @Override
134 public void closeRecord(final RinexNavigation file) {
135 file.addBeidouCivilianNavigationMessage(getMessage());
136 }
137
138
139
140
141 private void parseSismaiHealthIntegrity() {
142 final ParseInfo parseInfo = getParseInfo();
143 final BeidouCivilianNavigationMessage message = getMessage();
144 message.setSismai(parseInfo.parseInt1());
145 message.setHealth(parseInfo.parseInt2());
146 message.setIntegrityFlags(parseInfo.parseInt3());
147 message.setIODC(parseInfo.parseInt4());
148 }
149
150 }