1   /* Copyright 2022-2026 Thales Alenia Space
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  
18  package org.orekit.gnss.metric.messages.rtcm.msm;
19  
20  import org.orekit.gnss.metric.messages.rtcm.msm.headers.RtcmMsmSignalId;
21  
22  /**
23   * Container for RTCM MSM signal-specific data fields.
24   * @author Nathan Schiffmacher
25   * @since 14.0
26   */
27  public class RtcmMsmSignalData {
28  
29      /** MSM signal identifier. */
30      private RtcmMsmSignalId signalId;
31  
32      /** GNSS signal fine Pseudoranges (DF400, DF405). */
33      private double finePseudorange;
34  
35      /** GNSS signal fine Phaserange data (DF401, DF406). */
36      private double finePhaserange;
37  
38      /** GNSS Phaserange Lock Time Indicator (DF402, DF407). */
39      private int lockTimeIndicator;
40  
41      /** Half-cycle ambiguity indicator (DF420). */
42      private boolean halfCycleAmbiguityIndicator;
43  
44      /** GNSS signal CNRs (DF403, DF408). */
45      private double cnr;
46  
47      /** GNSS signal fine Phaserange Rates (DF404). */
48      private double finePhaserangeRate;
49  
50      /** Simple constructor. */
51      public RtcmMsmSignalData() {
52          // nothing to do
53      }
54  
55      /**
56       * Get the MSM signal identifier.
57       * @return MSM signal identifier
58       */
59      public RtcmMsmSignalId getSignalId() {
60          return signalId;
61      }
62  
63      /**
64       * Set the MSM signal identifier.
65       * @param signalId MSM signal identifier
66       */
67      public void setSignalId(final RtcmMsmSignalId signalId) {
68          this.signalId = signalId;
69      }
70  
71      /**
72       * Get the fine pseudorange.
73       * @return fine pseudorange in meters
74       */
75      public double getFinePseudorange() {
76          return finePseudorange;
77      }
78  
79      /**
80       * Set the fine pseudorange.
81       * @param finePseudorange fine pseudorange in meters
82       */
83      public void setFinePseudorange(final double finePseudorange) {
84          this.finePseudorange = finePseudorange;
85      }
86  
87      /**
88       * Get the fine phaserange.
89       * @return fine phaserange in meters
90       */
91      public double getFinePhaserange() {
92          return finePhaserange;
93      }
94  
95      /**
96       * Set the fine phaserange.
97       * @param finePhaserange fine phaserange in meters
98       */
99      public void setFinePhaserange(final double finePhaserange) {
100         this.finePhaserange = finePhaserange;
101     }
102 
103     /**
104      * Get the phaserange lock time indicator.
105      * @return lock time indicator value
106      */
107     public int getLockTimeIndicator() {
108         return lockTimeIndicator;
109     }
110 
111     /**
112      * Set the phaserange lock time indicator.
113      * @param lockTimeIndicator lock time indicator value
114      */
115     public void setLockTimeIndicator(final int lockTimeIndicator) {
116         this.lockTimeIndicator = lockTimeIndicator;
117     }
118 
119     /**
120      * Get the half-cycle ambiguity indicator.
121      * @return true if half-cycle ambiguity is present, false otherwise
122      */
123     public boolean getHalfCycleAmbiguityIndicator() {
124         return halfCycleAmbiguityIndicator;
125     }
126 
127     /**
128      * Set the half-cycle ambiguity indicator.
129      * @param halfCycleAmbiguityIndicator true if half-cycle ambiguity is present, false otherwise
130      */
131     public void setHalfCycleAmbiguityIndicator(final boolean halfCycleAmbiguityIndicator) {
132         this.halfCycleAmbiguityIndicator = halfCycleAmbiguityIndicator;
133     }
134 
135     /**
136      * Get the carrier-to-noise ratio.
137      * @return CNR in dB-Hz
138      */
139     public double getCnr() {
140         return cnr;
141     }
142 
143     /**
144      * Set the carrier-to-noise ratio.
145      * @param cnr CNR in dB-Hz
146      */
147     public void setCnr(final double cnr) {
148         this.cnr = cnr;
149     }
150 
151     /**
152      * Get the fine phaserange rate.
153      * @return fine phaserange rate in meters per second
154      */
155     public double getFinePhaserangeRate() {
156         return finePhaserangeRate;
157     }
158 
159     /**
160      * Set the fine phaserange rate.
161      * @param finePhaserangeRate fine phaserange rate in meters per second
162      */
163     public void setFinePhaserangeRate(final double finePhaserangeRate) {
164         this.finePhaserangeRate = finePhaserangeRate;
165     }
166 }