1   /* Copyright 2002-2024 Luc Maisonobe
2    * Licensed to CS GROUP (CS) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * CS licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.orekit.propagation.analytical.gnss.data;
18  
19  import org.orekit.gnss.Frequency;
20  
21  /**
22   * Container for data contained in a Beidou civilian navigation message.
23   * @author Luc Maisonobe
24   * @since 12.0
25   */
26  public class BeidouCivilianNavigationMessage extends AbstractNavigationMessage {
27  
28      /** Identifier for Beidou-3 B1C message type. */
29      public static final String CNV1 = "CNV1";
30  
31      /** Identifier for Beidou-3 B2A message type. */
32      public static final String CNV2 = "CNV2";
33  
34      /** Identifier for Beidou-3 B2B message type. */
35      public static final String CNV3 = "CNV3";
36  
37      /** Signal on which navigation signal is sent. */
38      private final Frequency signal;
39  
40      /** Change rate in semi-major axis (m/s). */
41      private double aDot;
42  
43      /** Change rate in Δn₀. */
44      private double deltaN0Dot;
45  
46      /** Issue of Data, Ephemeris. */
47      private int iode;
48  
49      /** Issue of Data, Clock. */
50      private int iodc;
51  
52      /** Inter Signal Delay for B1 CD. */
53      private double iscB1CD;
54  
55      /** Inter Signal Delay for B1 CP. */
56      private double iscB1CP;
57  
58      /** Inter Signal Delay for B2 AD. */
59      private double iscB2AD;
60  
61      /** Signal In Space Accuracy Index (along track and across track). */
62      private int sisaiOe;
63  
64      /** Signal In Space Accuracy Index (radial and clock). */
65      private int sisaiOcb;
66  
67      /** Signal In Space Accuracy Index (clock drift accuracy). */
68      private int sisaiOc1;
69  
70      /** Signal In Space Accuracy Index (clock drift rate accuracy). */
71      private int sisaiOc2;
72  
73      /** Signal In Space Monitoring Accuracy Index. */
74      private int sismai;
75  
76      /** Health. */
77      private int health;
78  
79      /** Integrity flags. */
80      private int integrityFlags;
81  
82      /** B1/B3 Group Delay Differential (s). */
83      private double tgdB1Cp;
84  
85      /** B2 AP Group Delay Differential (s). */
86      private double tgdB2ap;
87  
88      /** B2B_i / B3I Group Delay Differential (s). */
89      private double tgdB2bI;
90  
91      /** Satellite type. */
92      private BeidouSatelliteType satelliteType;
93  
94      /**
95       * Constructor.
96       * @param signal signal on which navigation signal is sent
97       */
98      public BeidouCivilianNavigationMessage(final Frequency signal) {
99          super(GNSSConstants.BEIDOU_MU, GNSSConstants.BEIDOU_AV, GNSSConstants.BEIDOU_WEEK_NB);
100         this.signal = signal;
101     }
102 
103     /**
104      * Getter for signal.
105      * @return signal on which navigation signal is sent
106      */
107     public Frequency getSignal() {
108         return signal;
109     }
110 
111     /**
112      * Getter for the change rate in semi-major axis.
113      * @return the change rate in semi-major axis
114      */
115     public double getADot() {
116         return aDot;
117     }
118 
119     /**
120      * Setter for the change rate in semi-major axis.
121      * @param value the change rate in semi-major axis
122      */
123     public void setADot(final double value) {
124         this.aDot = value;
125     }
126 
127     /**
128      * Getter for change rate in Δn₀.
129      * @return change rate in Δn₀
130      */
131     public double getDeltaN0Dot() {
132         return deltaN0Dot;
133     }
134 
135     /**
136      * Setter for change rate in Δn₀.
137      * @param deltaN0Dot change rate in Δn₀
138      */
139     public void setDeltaN0Dot(final double deltaN0Dot) {
140         this.deltaN0Dot = deltaN0Dot;
141     }
142 
143     /**
144      * Getter for the Issue Of Data Ephemeris (IODE).
145      * @return the Issue Of Data Ephemeris (IODE)
146      */
147     public int getIODE() {
148         return iode;
149     }
150 
151     /**
152      * Setter for the Issue of Data Ephemeris.
153      * @param value the IODE to set
154      */
155     public void setIODE(final int value) {
156         this.iode = value;
157     }
158 
159     /**
160      * Getter for the Issue Of Data Clock (IODC).
161      * @return the Issue Of Data Clock (IODC)
162      */
163     public int getIODC() {
164         return iodc;
165     }
166 
167     /**
168      * Setter for the Issue of Data Clock.
169      * @param value the IODC to set
170      */
171     public void setIODC(final int value) {
172         this.iodc = value;
173     }
174 
175     /**
176      * Getter for inter Signal Delay for B1 CD.
177      * @return inter signal delay
178      */
179     public double getIscB1CD() {
180         return iscB1CD;
181     }
182 
183     /**
184      * Setter for inter Signal Delay for B1 CD.
185      * @param delay delay to set
186      */
187     public void setIscB1CD(final double delay) {
188         this.iscB1CD = delay;
189     }
190 
191     /**
192      * Getter for inter Signal Delay for B2 AD.
193      * @return inter signal delay
194      */
195     public double getIscB2AD() {
196         return iscB2AD;
197     }
198 
199     /**
200      * Setter for inter Signal Delay for B2 AD.
201      * @param delay delay to set
202      */
203     public void setIscB2AD(final double delay) {
204         this.iscB2AD = delay;
205     }
206 
207     /**
208      * Getter for inter Signal Delay for B1 CP.
209      * @return inter signal delay
210      */
211     public double getIscB1CP() {
212         return iscB1CP;
213     }
214 
215     /**
216      * Setter for inter Signal Delay for B1 CP.
217      * @param delay delay to set
218      */
219     public void setIscB1CP(final double delay) {
220         this.iscB1CP = delay;
221     }
222 
223     /**
224      * Getter for Signal In Space Accuracy Index (along track and across track).
225      * @return Signal In Space Accuracy Index (along track and across track)
226      */
227     public int getSisaiOe() {
228         return sisaiOe;
229     }
230 
231     /**
232      * Setter for Signal In Space Accuracy Index (along track and across track).
233      * @param sisaiOe Signal In Space Accuracy Index (along track and across track)
234      */
235     public void setSisaiOe(final int sisaiOe) {
236         this.sisaiOe = sisaiOe;
237     }
238 
239     /**
240      * Getter for Signal In Space Accuracy Index (radial and clock).
241      * @return Signal In Space Accuracy Index (radial and clock)
242      */
243     public int getSisaiOcb() {
244         return sisaiOcb;
245     }
246 
247     /**
248      * Setter for Signal In Space Accuracy Index (radial and clock).
249      * @param sisaiOcb Signal In Space Accuracy Index (radial and clock)
250      */
251     public void setSisaiOcb(final int sisaiOcb) {
252         this.sisaiOcb = sisaiOcb;
253     }
254 
255     /**
256      * Getter for Signal In Space Accuracy Index (clock drift accuracy).
257      * @return Signal In Space Accuracy Index (clock drift accuracy)
258      */
259     public int getSisaiOc1() {
260         return sisaiOc1;
261     }
262 
263     /**
264      * Setter for Signal In Space Accuracy Index (clock drift accuracy).
265      * @param sisaiOc1 Signal In Space Accuracy Index (clock drift accuracy)
266      */
267     public void setSisaiOc1(final int sisaiOc1) {
268         this.sisaiOc1 = sisaiOc1;
269     }
270 
271     /**
272      * Getter for Signal In Space Accuracy Index (clock drift rate accuracy).
273      * @return Signal In Space Accuracy Index (clock drift rate accuracy)
274      */
275     public int getSisaiOc2() {
276         return sisaiOc2;
277     }
278 
279     /**
280      * Setter for Signal In Space Accuracy Index (clock drift rate accuracy).
281      * @param sisaiOc2 Signal In Space Accuracy Index (clock drift rate accuracy)
282      */
283     public void setSisaiOc2(final int sisaiOc2) {
284         this.sisaiOc2 = sisaiOc2;
285     }
286 
287     /**
288      * Getter for Signal In Space Monitoring Accuracy Index.
289      * @return Signal In Space Monitoring Accuracy Index
290      */
291     public int getSismai() {
292         return sismai;
293     }
294 
295     /**
296      * Setter for Signal In Space Monitoring Accuracy Index.
297      * @param sismai Signal In Space Monitoring Accuracy Index
298      */
299     public void setSismai(final int sismai) {
300         this.sismai = sismai;
301     }
302 
303     /**
304      * Getter for health.
305      * @return health
306      */
307     public int getHealth() {
308         return health;
309     }
310 
311     /**
312      * Setter for health.
313      * @param health health
314      */
315     public void setHealth(final int health) {
316         this.health = health;
317     }
318 
319     /**
320      * Getter for B1C integrity flags.
321      * @return B1C integrity flags
322      */
323     public int getIntegrityFlags() {
324         return integrityFlags;
325     }
326 
327     /**
328      * Setter for B1C integrity flags.
329      * @param integrityFlags integrity flags
330      */
331     public void setIntegrityFlags(final int integrityFlags) {
332         this.integrityFlags = integrityFlags;
333     }
334 
335     /**
336      * Getter for B1/B3 Group Delay Differential (s).
337      * @return B1/B3 Group Delay Differential (s)
338      */
339     public double getTgdB1Cp() {
340         return tgdB1Cp;
341     }
342 
343     /**
344      * Setter for B1/B3 Group Delay Differential (s).
345      * @param tgdB1Cp B1/B3 Group Delay Differential (s)
346      */
347     public void setTgdB1Cp(final double tgdB1Cp) {
348         this.tgdB1Cp = tgdB1Cp;
349     }
350 
351     /**
352      * Getter for B2 AP Group Delay Differential (s).
353      * @return B2 AP Group Delay Differential (s)
354      */
355     public double getTgdB2ap() {
356         return tgdB2ap;
357     }
358 
359     /**
360      * Setter for B2 AP Group Delay Differential (s).
361      * @param tgdB2ap B2 AP Group Delay Differential (s)
362      */
363     public void setTgdB2ap(final double tgdB2ap) {
364         this.tgdB2ap = tgdB2ap;
365     }
366 
367     /**
368      * Getter for B2B_i / B3I Group Delay Differential (s).
369      * @return B2B_i / B3I Group Delay Differential (s)
370      */
371     public double getTgdB2bI() {
372         return tgdB2bI;
373     }
374 
375     /**
376      * Setter for B2B_i / B3I Group Delay Differential (s).
377      * @param tgdB2bI B2B_i / B3I Group Delay Differential (s)
378      */
379     public void setTgdB2bI(final double tgdB2bI) {
380         this.tgdB2bI = tgdB2bI;
381     }
382 
383     /**
384      * Getter for satellite type.
385      * @return satellite type
386      */
387     public BeidouSatelliteType getSatelliteType() {
388         return satelliteType;
389     }
390 
391     /**
392      * Setter for satellite type.
393      * @param satelliteType satellite type
394      */
395     public void setSatelliteType(final BeidouSatelliteType satelliteType) {
396         this.satelliteType = satelliteType;
397     }
398 
399 }