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.gnss.SatelliteSystem;
25 import org.orekit.gnss.metric.messages.rtcm.ephemeris.Rtcm1045;
26 import org.orekit.gnss.metric.messages.rtcm.ephemeris.Rtcm1045Data;
27 import org.orekit.gnss.metric.parser.ByteArrayEncodedMessage;
28 import org.orekit.gnss.metric.parser.EncodedMessage;
29 import org.orekit.gnss.metric.parser.RtcmMessagesParser;
30 import org.orekit.propagation.analytical.gnss.GNSSPropagator;
31 import org.orekit.propagation.analytical.gnss.GNSSPropagatorBuilder;
32 import org.orekit.propagation.analytical.gnss.data.GalileoNavigationMessage;
33 import org.orekit.time.GNSSDate;
34
35 import java.util.ArrayList;
36
37 public class Rtcm1045Test {
38
39 private double eps = 8.2e-10;
40
41 @BeforeEach
42 public void setUp() {
43 Utils.setDataRoot("gnss");
44 }
45
46 @Test
47 public void testParseMessage() {
48
49 final String m = "010000010101" +
50 "001100" +
51 "111111101111" +
52 "1000010000" +
53 "01011110" +
54 "01011101111101" +
55 "00001111011011" +
56 "011111" +
57 "000010101111110111011" +
58 "0100101011111101111111101010011" +
59 "0000000000000000" +
60 "0111111011001111" +
61 "00000110110011111011100110011011" +
62 "0000000000000000" +
63 "00010011111101111000111000011001" +
64 "0000000000000000" +
65 "10100001000011000111111111111111" +
66 "10001000111011" +
67 "0000000000000000" +
68 "00011100011100000111111000111111" +
69 "0000000000000000" +
70 "00101000001111100011110011110000" +
71 "0000000000000000" +
72 "00001100001111100011110011110000" +
73 "111111111011111111110100" +
74 "0001101101" +
75 "00" +
76 "0" +
77 "0000000";
78
79
80 final EncodedMessage message = new ByteArrayEncodedMessage(byteArrayFromBinary(m));
81 message.start();
82
83 ArrayList<Integer> messages = new ArrayList<>();
84 messages.add(1045);
85
86 final Rtcm1045 rtcm1045 = (Rtcm1045) new RtcmMessagesParser(messages).parse(message, false);
87 final Rtcm1045Data ephemerisData = rtcm1045.getEphemerisData();
88 final GalileoNavigationMessage galileoMessage = ephemerisData.getGalileoNavigationMessage();
89
90
91 final GNSSPropagator propagator = new GNSSPropagatorBuilder(galileoMessage).build();
92 Assertions.assertNotNull(propagator);
93 Assertions.assertEquals(0.0, galileoMessage.getDate().
94 durationFrom(new GNSSDate(galileoMessage.getWeek(), galileoMessage.getTime(), SatelliteSystem.GALILEO).getDate()), eps);
95
96
97 Assertions.assertEquals(1045, rtcm1045.getTypeCode());
98 Assertions.assertEquals(1, rtcm1045.getData().size());
99
100
101 Assertions.assertEquals(12, galileoMessage.getPRN());
102 Assertions.assertEquals(4079, galileoMessage.getWeek());
103 Assertions.assertEquals(2.1475894557210572E-9, galileoMessage.getIDot(), eps);
104 Assertions.assertEquals(528, galileoMessage.getIODNav(), eps);
105 Assertions.assertEquals(3.3776428E-17, galileoMessage.getAf2(), eps);
106 Assertions.assertEquals(1.279588E-9, galileoMessage.getAf1(), eps);
107 Assertions.assertEquals(0.036617268982809, galileoMessage.getAf0(), eps);
108 Assertions.assertEquals(0.0, galileoMessage.getCrs(), eps);
109 Assertions.assertEquals(1.4587496546628753E-4, galileoMessage.getMeanMotion(), eps);
110 Assertions.assertEquals(0.1671775426328288, galileoMessage.getM0(), eps);
111 Assertions.assertEquals(0.0, galileoMessage.getCuc(), eps);
112 Assertions.assertEquals(0.0389980711042881, galileoMessage.getE(), eps);
113 Assertions.assertEquals(0.0, galileoMessage.getCus(), eps);
114 Assertions.assertEquals(5153.562498092651, FastMath.sqrt(galileoMessage.getSma()), eps);
115 Assertions.assertEquals(525780.0, galileoMessage.getTime(), eps);
116 Assertions.assertEquals(0.0, galileoMessage.getCic(), eps);
117 Assertions.assertEquals(0.0, galileoMessage.getCis(), eps);
118 Assertions.assertEquals(0.987714701321906, galileoMessage.getI0(), eps);
119 Assertions.assertEquals(0.0, galileoMessage.getCrc(), eps);
120 Assertions.assertEquals(0.30049130834913723, galileoMessage.getPa(), eps);
121 Assertions.assertEquals(-5.855958209879004E-9, galileoMessage.getOmegaDot(), eps);
122 Assertions.assertEquals(0.6980085385373721, galileoMessage.getOmega0(), eps);
123 Assertions.assertEquals(2.537854E-8, galileoMessage.getBGDE1E5a(), eps);
124
125
126 Assertions.assertEquals(12, ephemerisData.getSatelliteID());
127 Assertions.assertEquals(59220.0, ephemerisData.getGalileoToc(), eps);
128 Assertions.assertEquals(0, ephemerisData.getGalileoDataValidityStatus());
129 Assertions.assertEquals(ephemerisData.getAccuracyProvider().getAccuracy(), galileoMessage.getSisa(), eps);
130
131 }
132
133 @Test
134 public void testNullMessage() {
135
136 final String m = "010000010101" +
137 "001100" +
138 "111111101111" +
139 "1000010000" +
140 "01011110" +
141 "01011101111101" +
142 "00001111011011" +
143 "011111" +
144 "000010101111110111011" +
145 "0100101011111101111111101010011" +
146 "0000000000000000" +
147 "0111111011001111" +
148 "00000110110011111011100110011011" +
149 "0000000000000000" +
150 "00010011111101111000111000011001" +
151 "0000000000000000" +
152 "10100001000011000111111111111111" +
153 "10001000111011" +
154 "0000000000000000" +
155 "00011100011100000111111000111111" +
156 "0000000000000000" +
157 "00101000001111100011110011110000" +
158 "0000000000000000" +
159 "00001100001111100011110011110000" +
160 "111111111011111111110100" +
161 "0001101101" +
162 "00" +
163 "0" +
164 "0000000";
165
166 final EncodedMessage message = new ByteArrayEncodedMessage(byteArrayFromBinary(m));
167 message.start();
168
169 ArrayList<Integer> messages = new ArrayList<>();
170 messages.add(9999999);
171
172 final Rtcm1045 rtcm1045 = (Rtcm1045) new RtcmMessagesParser(messages).parse(message, false);
173
174 Assertions.assertNull(rtcm1045);
175 }
176
177
178 private byte[] byteArrayFromBinary(String radix2Value) {
179 final byte[] array = new byte[radix2Value.length() / 8];
180 for (int i = 0; i < array.length; ++i) {
181 for (int j = 0; j < 8; ++j) {
182 if (radix2Value.charAt(8 * i + j) != '0') {
183 array[i] |= 0x1 << (7 - j);
184 }
185 }
186 }
187 return array;
188 }
189
190 }