1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.gnss.metric.messages.rtcm;
18
19 import java.util.ArrayList;
20
21 import org.hipparchus.util.FastMath;
22 import org.junit.Assert;
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.orekit.Utils;
26 import org.orekit.errors.OrekitException;
27 import org.orekit.errors.OrekitMessages;
28 import org.orekit.gnss.SatelliteSystem;
29 import org.orekit.gnss.metric.messages.rtcm.ephemeris.Rtcm1019;
30 import org.orekit.gnss.metric.messages.rtcm.ephemeris.Rtcm1019Data;
31 import org.orekit.gnss.metric.parser.ByteArrayEncodedMessages;
32 import org.orekit.gnss.metric.parser.EncodedMessage;
33 import org.orekit.gnss.metric.parser.RtcmDataField;
34 import org.orekit.gnss.metric.parser.RtcmMessagesParser;
35 import org.orekit.propagation.analytical.gnss.GNSSPropagator;
36 import org.orekit.propagation.analytical.gnss.GNSSPropagatorBuilder;
37 import org.orekit.propagation.analytical.gnss.data.GPSNavigationMessage;
38 import org.orekit.time.GNSSDate;
39
40 public class Rtcm1019Test {
41
42 private double eps = 1.0e-15;
43
44 @Before
45 public void setUp() {
46 Utils.setDataRoot("gnss");
47 }
48
49 @Test
50 public void testParseMessage() {
51
52 final String m = "001111111011" +
53 "001100" +
54 "1111111011" +
55 "0001" +
56 "11" +
57 "01011101111101" +
58 "10000100" +
59 "0000111101101111" +
60 "01111111" +
61 "0000101011111101" +
62 "0100101011111101111111" +
63 "1010110111" +
64 "0000000000000000" +
65 "0111111011001111" +
66 "00000110110011111011100110011011" +
67 "0000000000000000" +
68 "00010011111101111000111000011001" +
69 "0000000000000000" +
70 "10100001000011000111111111111111" +
71 "1000100011100011" +
72 "0000000000000000" +
73 "00011100011100000111111000111111" +
74 "0000000000000000" +
75 "00101000001111100011110011110000" +
76 "0000000000000000" +
77 "00001100001111100011110011110000" +
78 "111111111011111111110100" +
79 "00000011" +
80 "000000" +
81 "0" +
82 "0";
83
84 final EncodedMessage message = new ByteArrayEncodedMessages(byteArrayFromBinary(m));
85 message.start();
86
87 ArrayList<Integer> messages = new ArrayList<>();
88 messages.add(1019);
89
90 final Rtcm1019 rtcm1019 = (Rtcm1019) new RtcmMessagesParser(messages).parse(message, false);
91 final Rtcm1019Data ephemerisData = rtcm1019.getEphemerisData();
92 final GPSNavigationMessage gpsMessage = ephemerisData.getGpsNavigationMessage();
93
94
95 final GNSSPropagator propagator = new GNSSPropagatorBuilder(gpsMessage).build();
96 Assert.assertNotNull(propagator);
97 Assert.assertEquals(0.0, gpsMessage.getDate().
98 durationFrom(new GNSSDate(gpsMessage.getWeek(), 1000.0 * gpsMessage.getTime(), SatelliteSystem.GPS).getDate()), eps);
99
100
101 Assert.assertEquals(1019, rtcm1019.getTypeCode());
102 Assert.assertEquals(1, rtcm1019.getData().size());
103
104
105 Assert.assertEquals(12, gpsMessage.getPRN());
106 Assert.assertEquals(1019, gpsMessage.getWeek());
107 Assert.assertEquals(2.1475894557210572E-9, gpsMessage.getIDot(), eps);
108 Assert.assertEquals(132, gpsMessage.getIODE(), eps);
109 Assert.assertEquals(3.524958E-15, gpsMessage.getAf2(), eps);
110 Assert.assertEquals(3.1980107E-10, gpsMessage.getAf1(), eps);
111 Assert.assertEquals(5.721445195376873E-4, gpsMessage.getAf0(), eps);
112 Assert.assertEquals(695, gpsMessage.getIODC());
113 Assert.assertEquals(0.0, gpsMessage.getCrs(), eps);
114 Assert.assertEquals(1.4587497595315308E-4, gpsMessage.getMeanMotion(), eps);
115 Assert.assertEquals(0.16717753824407455, gpsMessage.getM0(), eps);
116 Assert.assertEquals(0.0, gpsMessage.getCuc(), eps);
117 Assert.assertEquals(0.0389980711042881, gpsMessage.getE(), eps);
118 Assert.assertEquals(0.0, gpsMessage.getCus(), eps);
119 Assert.assertEquals(5153.5625, FastMath.sqrt(gpsMessage.getSma()), eps);
120 Assert.assertEquals(560688.0, gpsMessage.getTime(), eps);
121 Assert.assertEquals(0.0, gpsMessage.getCic(), eps);
122 Assert.assertEquals(0.0, gpsMessage.getCis(), eps);
123 Assert.assertEquals(0.9877147247285952, gpsMessage.getI0(), eps);
124 Assert.assertEquals(0.0, gpsMessage.getCrc(), eps);
125 Assert.assertEquals(0.30049130834913723, gpsMessage.getPa(), eps);
126 Assert.assertEquals(-5.855958209879004E-9, gpsMessage.getOmegaDot(), eps);
127 Assert.assertEquals(0.6980085400002902, gpsMessage.getOmega0(), eps);
128 Assert.assertEquals(1.3969839E-9, gpsMessage.getTGD(), eps);
129 Assert.assertEquals(0.0, gpsMessage.getSvHealth(), eps);
130
131
132 Assert.assertEquals(12, ephemerisData.getSatelliteID());
133 Assert.assertEquals(63216, ephemerisData.getGpsToc(), eps);
134 Assert.assertEquals(3, ephemerisData.getGpsCodeOnL2());
135 Assert.assertEquals(0, ephemerisData.getGpsFitInterval());
136 Assert.assertTrue(ephemerisData.getGpsL2PDataFlag());
137 Assert.assertEquals(ephemerisData.getAccuracyProvider().getAccuracy(), gpsMessage.getSvAccuracy(), eps);
138
139 }
140
141 @Test
142 public void testNullMessage() {
143
144 final String m = "001111111011" +
145 "001100" +
146 "1111111011" +
147 "0001" +
148 "11" +
149 "01011101111101" +
150 "10000100" +
151 "0000111101101111" +
152 "01111111" +
153 "0000101011111101" +
154 "0100101011111101111111" +
155 "1010110111" +
156 "0000000000000000" +
157 "0111111011001111" +
158 "00000110110011111011100110011011" +
159 "0000000000000000" +
160 "00010011111101111000111000011001" +
161 "0000000000000000" +
162 "10100001000011000111111111111111" +
163 "1000100011100011" +
164 "0000000000000000" +
165 "00011100011100000111111000111111" +
166 "0000000000000000" +
167 "00101000001111100011110011110000" +
168 "0000000000000000" +
169 "00001100001111100011110011110000" +
170 "111111111011111111110100" +
171 "00000011" +
172 "000000" +
173 "0" +
174 "0";
175
176 final EncodedMessage message = new ByteArrayEncodedMessages(byteArrayFromBinary(m));
177 message.start();
178
179 ArrayList<Integer> messages = new ArrayList<>();
180 messages.add(9999999);
181
182 final Rtcm1019 rtcm1019 = (Rtcm1019) new RtcmMessagesParser(messages).parse(message, false);
183
184 Assert.assertNull(rtcm1019);
185 }
186
187 @Test
188 public void testDF103() {
189 final String m = "1111111111111111";
190 final EncodedMessage message = new ByteArrayEncodedMessages(byteArrayFromBinary(m));
191 Assert.assertFalse(RtcmDataField.DF103.booleanValue(message));
192 }
193
194 @Test
195 public void testEmptyMessage() {
196 try {
197 final byte[] array = new byte[0];
198 final EncodedMessage emptyMessage = new ByteArrayEncodedMessages(array);
199 new RtcmMessagesParser(new ArrayList<Integer>()).parse(emptyMessage, false);
200 Assert.fail("an exception should have been thrown");
201 } catch (OrekitException oe) {
202 Assert.assertEquals(OrekitMessages.END_OF_ENCODED_MESSAGE, oe.getSpecifier());
203 }
204
205 }
206
207 private byte[] byteArrayFromBinary(String radix2Value) {
208 final byte[] array = new byte[radix2Value.length() / 8];
209 for (int i = 0; i < array.length; ++i) {
210 for (int j = 0; j < 8; ++j) {
211 if (radix2Value.charAt(8 * i + j) != '0') {
212 array[i] |= 0x1 << (7 - j);
213 }
214 }
215 }
216 return array;
217 }
218
219 }