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 org.hipparchus.util.FastMath;
20 import org.junit.jupiter.api.Assertions;
21 import org.junit.jupiter.api.BeforeEach;
22 import org.junit.jupiter.api.Test;
23 import org.orekit.Utils;
24 import org.orekit.data.DataContext;
25 import org.orekit.gnss.SatelliteSystem;
26 import org.orekit.gnss.metric.messages.rtcm.ephemeris.Rtcm1044;
27 import org.orekit.gnss.metric.messages.rtcm.ephemeris.Rtcm1044Data;
28 import org.orekit.gnss.metric.parser.ByteArrayEncodedMessage;
29 import org.orekit.gnss.metric.parser.EncodedMessage;
30 import org.orekit.gnss.metric.parser.RtcmMessagesParser;
31 import org.orekit.propagation.analytical.gnss.GNSSPropagator;
32 import org.orekit.propagation.analytical.gnss.GNSSPropagatorBuilder;
33 import org.orekit.propagation.analytical.gnss.data.QZSSLegacyNavigationMessage;
34 import org.orekit.time.GNSSDate;
35
36 import java.util.ArrayList;
37
38 public class Rtcm1044Test {
39
40 private final double eps = 9.0e-10;
41
42 @BeforeEach
43 public void setUp() {
44 Utils.setDataRoot("gnss");
45 }
46
47 @Test
48 public void testParseMessage() {
49
50 final String m = "010000010100" +
51 "1100" +
52 "0000111101101111" +
53 "01111111" +
54 "0000101011111101" +
55 "0100101011111101111111" +
56 "10000100" +
57 "0000000000000000" +
58 "0111111011001111" +
59 "00000110110011111011100110011011" +
60 "0000000000000000" +
61 "00010011111101111000111000011001" +
62 "0000000000000000" +
63 "10100001000011000111111111111111" +
64 "1000100011100011" +
65 "0000000000000000" +
66 "00011100011100000111111000111111" +
67 "0000000000000000" +
68 "00101000001111100011110011110000" +
69 "0000000000000000" +
70 "00001100001111100011110011110000" +
71 "111111111011111111110100" +
72 "01011101111101" +
73 "10" +
74 "0110111001" +
75 "0001" +
76 "000000" +
77 "00000011" +
78 "1010110111" +
79 "0" +
80 "000";
81
82
83 final EncodedMessage message = new ByteArrayEncodedMessage(byteArrayFromBinary(m));
84 message.start();
85
86 ArrayList<Integer> messages = new ArrayList<>();
87 messages.add(1044);
88
89 final Rtcm1044 rtcm1044 = (Rtcm1044) new RtcmMessagesParser(messages, DataContext.getDefault().getTimeScales()).
90 parse(message, false);
91 final Rtcm1044Data ephemerisData = rtcm1044.getEphemerisData();
92 final QZSSLegacyNavigationMessage qzssMessage = ephemerisData.getQzssNavigationMessage();
93
94
95 final GNSSPropagator propagator = new GNSSPropagatorBuilder(qzssMessage).build();
96 Assertions.assertNotNull(propagator);
97 Assertions.assertEquals(0.0, qzssMessage.getDate().
98 durationFrom(new GNSSDate(qzssMessage.getWeek(), qzssMessage.getTime(), SatelliteSystem.QZSS).getDate()), eps);
99
100
101 Assertions.assertEquals(1044, rtcm1044.getTypeCode());
102 Assertions.assertEquals(1, rtcm1044.getData().size());
103
104
105 Assertions.assertEquals(204, qzssMessage.getPRN());
106 Assertions.assertEquals(441, qzssMessage.getWeek());
107 Assertions.assertEquals(2.1475894557210572E-9, qzssMessage.getIDot(), eps);
108 Assertions.assertEquals(132, qzssMessage.getIODE(), eps);
109 Assertions.assertEquals(3.524958E-15, qzssMessage.getAf2(), eps);
110 Assertions.assertEquals(3.1980107E-10, qzssMessage.getAf1(), eps);
111 Assertions.assertEquals(5.721445195376873E-4, qzssMessage.getAf0(), eps);
112 Assertions.assertEquals(695, qzssMessage.getIODC());
113 Assertions.assertEquals(0.0, qzssMessage.getCrs(), eps);
114 Assertions.assertEquals(1.4586338170358127E-4, qzssMessage.getMeanMotion0(), eps);
115 Assertions.assertEquals(1.4587496546628753E-4, qzssMessage.getMeanMotion0() + qzssMessage.getDeltaN0(), eps);
116 Assertions.assertEquals(0.1671775426328288, qzssMessage.getM0(), eps);
117 Assertions.assertEquals(0.0, qzssMessage.getCuc(), eps);
118 Assertions.assertEquals(0.0389980711042881, qzssMessage.getE(), eps);
119 Assertions.assertEquals(0.0, qzssMessage.getCus(), eps);
120 Assertions.assertEquals(5153.562498092651, FastMath.sqrt(qzssMessage.getSma()), eps);
121 Assertions.assertEquals(560688.0, qzssMessage.getTime(), eps);
122 Assertions.assertEquals(0.0, qzssMessage.getCic(), eps);
123 Assertions.assertEquals(0.0, qzssMessage.getCis(), eps);
124 Assertions.assertEquals(0.987714701321906, qzssMessage.getI0(), eps);
125 Assertions.assertEquals(0.0, qzssMessage.getCrc(), eps);
126 Assertions.assertEquals(0.30049130834913723, qzssMessage.getPa(), eps);
127 Assertions.assertEquals(-5.855958209879004E-9, qzssMessage.getOmegaDot(), eps);
128 Assertions.assertEquals(0.6980085385373721, qzssMessage.getOmega0(), eps);
129 Assertions.assertEquals(1.3969839E-9, qzssMessage.getTGD(), eps);
130
131
132 Assertions.assertEquals(204, ephemerisData.getSatelliteID());
133 Assertions.assertEquals(63216.0, ephemerisData.getQzssToc(), eps);
134 Assertions.assertEquals(2, ephemerisData.getQzssCodeOnL2());
135 Assertions.assertEquals(0, ephemerisData.getQzssFitInterval());
136 Assertions.assertEquals(ephemerisData.getAccuracyProvider().getAccuracy(), qzssMessage.getSvAccuracy(), eps);
137
138 }
139
140 @Test
141 public void testNullMessage() {
142
143 final String m = "010000010100" +
144 "1100" +
145 "0000111101101111" +
146 "01111111" +
147 "0000101011111101" +
148 "0100101011111101111111" +
149 "10000100" +
150 "0000000000000000" +
151 "0111111011001111" +
152 "00000110110011111011100110011011" +
153 "0000000000000000" +
154 "00010011111101111000111000011001" +
155 "0000000000000000" +
156 "10100001000011000111111111111111" +
157 "1000100011100011" +
158 "0000000000000000" +
159 "00011100011100000111111000111111" +
160 "0000000000000000" +
161 "00101000001111100011110011110000" +
162 "0000000000000000" +
163 "00001100001111100011110011110000" +
164 "111111111011111111110100" +
165 "01011101111101" +
166 "10" +
167 "0110111001" +
168 "0001" +
169 "000000" +
170 "00000011" +
171 "1010110111" +
172 "0" +
173 "000";
174
175 final EncodedMessage message = new ByteArrayEncodedMessage(byteArrayFromBinary(m));
176 message.start();
177
178 ArrayList<Integer> messages = new ArrayList<>();
179 messages.add(9999999);
180
181 final Rtcm1044 rtcm1044 = (Rtcm1044) new RtcmMessagesParser(messages, DataContext.getDefault().getTimeScales()).
182 parse(message, false);
183
184 Assertions.assertNull(rtcm1044);
185 }
186
187
188 private byte[] byteArrayFromBinary(String radix2Value) {
189 final byte[] array = new byte[radix2Value.length() / 8];
190 for (int i = 0; i < array.length; ++i) {
191 for (int j = 0; j < 8; ++j) {
192 if (radix2Value.charAt(8 * i + j) != '0') {
193 array[i] |= 0x1 << (7 - j);
194 }
195 }
196 }
197 return array;
198 }
199
200 }