Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 36 additions & 1 deletion c/include/libsbp/observation.h
Original file line number Diff line number Diff line change
Expand Up @@ -342,14 +342,48 @@ typedef struct SBP_ATTR_PACKED {
} msg_ephemeris_bds_t;


/** Deprecated
*
* This observation message has been deprecated in favor of
* an ephemeris message with explicit source of NAV data.
*/
#define SBP_MSG_EPHEMERIS_GAL_DEP_A 0x0095
typedef struct SBP_ATTR_PACKED {
ephemeris_common_content_t common; /**< Values common for all ephemeris types */
float bgd_e1e5a; /**< E1-E5a Broadcast Group Delay [s] */
float bgd_e1e5b; /**< E1-E5b Broadcast Group Delay [s] */
float c_rs; /**< Amplitude of the sine harmonic correction term to the orbit radius [m] */
float c_rc; /**< Amplitude of the cosine harmonic correction term to the orbit radius [m] */
float c_uc; /**< Amplitude of the cosine harmonic correction term to the argument of latitude [rad] */
float c_us; /**< Amplitude of the sine harmonic correction term to the argument of latitude [rad] */
float c_ic; /**< Amplitude of the cosine harmonic correction term to the angle of inclination [rad] */
float c_is; /**< Amplitude of the sine harmonic correction term to the angle of inclination [rad] */
double dn; /**< Mean motion difference [rad/s] */
double m0; /**< Mean anomaly at reference time [rad] */
double ecc; /**< Eccentricity of satellite orbit */
double sqrta; /**< Square root of the semi-major axis of orbit [m^(1/2)] */
double omega0; /**< Longitude of ascending node of orbit plane at weekly epoch [rad] */
double omegadot; /**< Rate of right ascension [rad/s] */
double w; /**< Argument of perigee [rad] */
double inc; /**< Inclination [rad] */
double inc_dot; /**< Inclination first derivative [rad/s] */
double af0; /**< Polynomial clock correction coefficient (clock bias) [s] */
double af1; /**< Polynomial clock correction coefficient (clock drift) [s/s] */
float af2; /**< Polynomial clock correction coefficient (rate of clock drift) [s/s^2] */
gps_time_sec_t toc; /**< Clock reference */
u16 iode; /**< Issue of ephemeris data */
u16 iodc; /**< Issue of clock data */
} msg_ephemeris_gal_dep_a_t;


/** Satellite broadcast ephemeris for Galileo
*
* The ephemeris message returns a set of satellite orbit
* parameters that is used to calculate Galileo satellite position,
* velocity, and clock offset. Please see the Signal In Space ICD
* OS SIS ICD, Issue 1.3, December 2016 for more details.
*/
#define SBP_MSG_EPHEMERIS_GAL 0x0095
#define SBP_MSG_EPHEMERIS_GAL 0x008D
typedef struct SBP_ATTR_PACKED {
ephemeris_common_content_t common; /**< Values common for all ephemeris types */
float bgd_e1e5a; /**< E1-E5a Broadcast Group Delay [s] */
Expand All @@ -375,6 +409,7 @@ typedef struct SBP_ATTR_PACKED {
gps_time_sec_t toc; /**< Clock reference */
u16 iode; /**< Issue of ephemeris data */
u16 iodc; /**< Issue of clock data */
u8 source; /**< 0=I/NAV, 1=F/NAV, ... */
} msg_ephemeris_gal_t;


Expand Down
Binary file modified docs/sbp.pdf
Binary file not shown.
6 changes: 6 additions & 0 deletions haskell/src/SwiftNav/SBP/Msg.hs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ data SBPMsg =
| SBPMsgEphemerisDepC MsgEphemerisDepC Msg
| SBPMsgEphemerisDepD MsgEphemerisDepD Msg
| SBPMsgEphemerisGal MsgEphemerisGal Msg
| SBPMsgEphemerisGalDepA MsgEphemerisGalDepA Msg
| SBPMsgEphemerisGlo MsgEphemerisGlo Msg
| SBPMsgEphemerisGloDepA MsgEphemerisGloDepA Msg
| SBPMsgEphemerisGloDepB MsgEphemerisGloDepB Msg
Expand Down Expand Up @@ -278,6 +279,7 @@ instance Binary SBPMsg where
| _msgSBPType == msgEphemerisDepC = SBPMsgEphemerisDepC (decode (fromStrict (unBytes _msgSBPPayload))) m
| _msgSBPType == msgEphemerisDepD = SBPMsgEphemerisDepD (decode (fromStrict (unBytes _msgSBPPayload))) m
| _msgSBPType == msgEphemerisGal = SBPMsgEphemerisGal (decode (fromStrict (unBytes _msgSBPPayload))) m
| _msgSBPType == msgEphemerisGalDepA = SBPMsgEphemerisGalDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
| _msgSBPType == msgEphemerisGlo = SBPMsgEphemerisGlo (decode (fromStrict (unBytes _msgSBPPayload))) m
| _msgSBPType == msgEphemerisGloDepA = SBPMsgEphemerisGloDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
| _msgSBPType == msgEphemerisGloDepB = SBPMsgEphemerisGloDepB (decode (fromStrict (unBytes _msgSBPPayload))) m
Expand Down Expand Up @@ -451,6 +453,7 @@ instance Binary SBPMsg where
encoder (SBPMsgEphemerisDepC _ m) = put m
encoder (SBPMsgEphemerisDepD _ m) = put m
encoder (SBPMsgEphemerisGal _ m) = put m
encoder (SBPMsgEphemerisGalDepA _ m) = put m
encoder (SBPMsgEphemerisGlo _ m) = put m
encoder (SBPMsgEphemerisGloDepA _ m) = put m
encoder (SBPMsgEphemerisGloDepB _ m) = put m
Expand Down Expand Up @@ -628,6 +631,7 @@ instance FromJSON SBPMsg where
| msgType == msgEphemerisDepC = SBPMsgEphemerisDepC <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
| msgType == msgEphemerisDepD = SBPMsgEphemerisDepD <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
| msgType == msgEphemerisGal = SBPMsgEphemerisGal <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
| msgType == msgEphemerisGalDepA = SBPMsgEphemerisGalDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
| msgType == msgEphemerisGlo = SBPMsgEphemerisGlo <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
| msgType == msgEphemerisGloDepA = SBPMsgEphemerisGloDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
| msgType == msgEphemerisGloDepB = SBPMsgEphemerisGloDepB <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
Expand Down Expand Up @@ -806,6 +810,7 @@ instance ToJSON SBPMsg where
toJSON (SBPMsgEphemerisDepC n m) = toJSON n <<>> toJSON m
toJSON (SBPMsgEphemerisDepD n m) = toJSON n <<>> toJSON m
toJSON (SBPMsgEphemerisGal n m) = toJSON n <<>> toJSON m
toJSON (SBPMsgEphemerisGalDepA n m) = toJSON n <<>> toJSON m
toJSON (SBPMsgEphemerisGlo n m) = toJSON n <<>> toJSON m
toJSON (SBPMsgEphemerisGloDepA n m) = toJSON n <<>> toJSON m
toJSON (SBPMsgEphemerisGloDepB n m) = toJSON n <<>> toJSON m
Expand Down Expand Up @@ -978,6 +983,7 @@ instance HasMsg SBPMsg where
msg f (SBPMsgEphemerisDepC n m) = SBPMsgEphemerisDepC n <$> f m
msg f (SBPMsgEphemerisDepD n m) = SBPMsgEphemerisDepD n <$> f m
msg f (SBPMsgEphemerisGal n m) = SBPMsgEphemerisGal n <$> f m
msg f (SBPMsgEphemerisGalDepA n m) = SBPMsgEphemerisGalDepA n <$> f m
msg f (SBPMsgEphemerisGlo n m) = SBPMsgEphemerisGlo n <$> f m
msg f (SBPMsgEphemerisGloDepA n m) = SBPMsgEphemerisGloDepA n <$> f m
msg f (SBPMsgEphemerisGloDepB n m) = SBPMsgEphemerisGloDepB n <$> f m
Expand Down
128 changes: 126 additions & 2 deletions haskell/src/SwiftNav/SBP/Observation.hs
Original file line number Diff line number Diff line change
Expand Up @@ -877,10 +877,130 @@ $(makeSBP 'msgEphemerisBds ''MsgEphemerisBds)
$(makeJSON "_msgEphemerisBds_" ''MsgEphemerisBds)
$(makeLenses ''MsgEphemerisBds)

msgEphemerisGalDepA :: Word16
msgEphemerisGalDepA = 0x0095

-- | SBP class for message MSG_EPHEMERIS_GAL_DEP_A (0x0095).
--
-- This observation message has been deprecated in favor of an ephemeris
-- message with explicit source of NAV data.
data MsgEphemerisGalDepA = MsgEphemerisGalDepA
{ _msgEphemerisGalDepA_common :: !EphemerisCommonContent
-- ^ Values common for all ephemeris types
, _msgEphemerisGalDepA_bgd_e1e5a :: !Float
-- ^ E1-E5a Broadcast Group Delay
, _msgEphemerisGalDepA_bgd_e1e5b :: !Float
-- ^ E1-E5b Broadcast Group Delay
, _msgEphemerisGalDepA_c_rs :: !Float
-- ^ Amplitude of the sine harmonic correction term to the orbit radius
, _msgEphemerisGalDepA_c_rc :: !Float
-- ^ Amplitude of the cosine harmonic correction term to the orbit radius
, _msgEphemerisGalDepA_c_uc :: !Float
-- ^ Amplitude of the cosine harmonic correction term to the argument of
-- latitude
, _msgEphemerisGalDepA_c_us :: !Float
-- ^ Amplitude of the sine harmonic correction term to the argument of
-- latitude
, _msgEphemerisGalDepA_c_ic :: !Float
-- ^ Amplitude of the cosine harmonic correction term to the angle of
-- inclination
, _msgEphemerisGalDepA_c_is :: !Float
-- ^ Amplitude of the sine harmonic correction term to the angle of
-- inclination
, _msgEphemerisGalDepA_dn :: !Double
-- ^ Mean motion difference
, _msgEphemerisGalDepA_m0 :: !Double
-- ^ Mean anomaly at reference time
, _msgEphemerisGalDepA_ecc :: !Double
-- ^ Eccentricity of satellite orbit
, _msgEphemerisGalDepA_sqrta :: !Double
-- ^ Square root of the semi-major axis of orbit
, _msgEphemerisGalDepA_omega0 :: !Double
-- ^ Longitude of ascending node of orbit plane at weekly epoch
, _msgEphemerisGalDepA_omegadot :: !Double
-- ^ Rate of right ascension
, _msgEphemerisGalDepA_w :: !Double
-- ^ Argument of perigee
, _msgEphemerisGalDepA_inc :: !Double
-- ^ Inclination
, _msgEphemerisGalDepA_inc_dot :: !Double
-- ^ Inclination first derivative
, _msgEphemerisGalDepA_af0 :: !Double
-- ^ Polynomial clock correction coefficient (clock bias)
, _msgEphemerisGalDepA_af1 :: !Double
-- ^ Polynomial clock correction coefficient (clock drift)
, _msgEphemerisGalDepA_af2 :: !Float
-- ^ Polynomial clock correction coefficient (rate of clock drift)
, _msgEphemerisGalDepA_toc :: !GpsTimeSec
-- ^ Clock reference
, _msgEphemerisGalDepA_iode :: !Word16
-- ^ Issue of ephemeris data
, _msgEphemerisGalDepA_iodc :: !Word16
-- ^ Issue of clock data
} deriving ( Show, Read, Eq )

instance Binary MsgEphemerisGalDepA where
get = do
_msgEphemerisGalDepA_common <- get
_msgEphemerisGalDepA_bgd_e1e5a <- getFloat32le
_msgEphemerisGalDepA_bgd_e1e5b <- getFloat32le
_msgEphemerisGalDepA_c_rs <- getFloat32le
_msgEphemerisGalDepA_c_rc <- getFloat32le
_msgEphemerisGalDepA_c_uc <- getFloat32le
_msgEphemerisGalDepA_c_us <- getFloat32le
_msgEphemerisGalDepA_c_ic <- getFloat32le
_msgEphemerisGalDepA_c_is <- getFloat32le
_msgEphemerisGalDepA_dn <- getFloat64le
_msgEphemerisGalDepA_m0 <- getFloat64le
_msgEphemerisGalDepA_ecc <- getFloat64le
_msgEphemerisGalDepA_sqrta <- getFloat64le
_msgEphemerisGalDepA_omega0 <- getFloat64le
_msgEphemerisGalDepA_omegadot <- getFloat64le
_msgEphemerisGalDepA_w <- getFloat64le
_msgEphemerisGalDepA_inc <- getFloat64le
_msgEphemerisGalDepA_inc_dot <- getFloat64le
_msgEphemerisGalDepA_af0 <- getFloat64le
_msgEphemerisGalDepA_af1 <- getFloat64le
_msgEphemerisGalDepA_af2 <- getFloat32le
_msgEphemerisGalDepA_toc <- get
_msgEphemerisGalDepA_iode <- getWord16le
_msgEphemerisGalDepA_iodc <- getWord16le
pure MsgEphemerisGalDepA {..}

put MsgEphemerisGalDepA {..} = do
put _msgEphemerisGalDepA_common
putFloat32le _msgEphemerisGalDepA_bgd_e1e5a
putFloat32le _msgEphemerisGalDepA_bgd_e1e5b
putFloat32le _msgEphemerisGalDepA_c_rs
putFloat32le _msgEphemerisGalDepA_c_rc
putFloat32le _msgEphemerisGalDepA_c_uc
putFloat32le _msgEphemerisGalDepA_c_us
putFloat32le _msgEphemerisGalDepA_c_ic
putFloat32le _msgEphemerisGalDepA_c_is
putFloat64le _msgEphemerisGalDepA_dn
putFloat64le _msgEphemerisGalDepA_m0
putFloat64le _msgEphemerisGalDepA_ecc
putFloat64le _msgEphemerisGalDepA_sqrta
putFloat64le _msgEphemerisGalDepA_omega0
putFloat64le _msgEphemerisGalDepA_omegadot
putFloat64le _msgEphemerisGalDepA_w
putFloat64le _msgEphemerisGalDepA_inc
putFloat64le _msgEphemerisGalDepA_inc_dot
putFloat64le _msgEphemerisGalDepA_af0
putFloat64le _msgEphemerisGalDepA_af1
putFloat32le _msgEphemerisGalDepA_af2
put _msgEphemerisGalDepA_toc
putWord16le _msgEphemerisGalDepA_iode
putWord16le _msgEphemerisGalDepA_iodc

$(makeSBP 'msgEphemerisGalDepA ''MsgEphemerisGalDepA)
$(makeJSON "_msgEphemerisGalDepA_" ''MsgEphemerisGalDepA)
$(makeLenses ''MsgEphemerisGalDepA)

msgEphemerisGal :: Word16
msgEphemerisGal = 0x0095
msgEphemerisGal = 0x008D

-- | SBP class for message MSG_EPHEMERIS_GAL (0x0095).
-- | SBP class for message MSG_EPHEMERIS_GAL (0x008D).
--
-- The ephemeris message returns a set of satellite orbit parameters that is
-- used to calculate Galileo satellite position, velocity, and clock offset.
Expand Down Expand Up @@ -939,6 +1059,8 @@ data MsgEphemerisGal = MsgEphemerisGal
-- ^ Issue of ephemeris data
, _msgEphemerisGal_iodc :: !Word16
-- ^ Issue of clock data
, _msgEphemerisGal_source :: !Word8
-- ^ 0=I/NAV, 1=F/NAV, ...
} deriving ( Show, Read, Eq )

instance Binary MsgEphemerisGal where
Expand Down Expand Up @@ -967,6 +1089,7 @@ instance Binary MsgEphemerisGal where
_msgEphemerisGal_toc <- get
_msgEphemerisGal_iode <- getWord16le
_msgEphemerisGal_iodc <- getWord16le
_msgEphemerisGal_source <- getWord8
pure MsgEphemerisGal {..}

put MsgEphemerisGal {..} = do
Expand Down Expand Up @@ -994,6 +1117,7 @@ instance Binary MsgEphemerisGal where
put _msgEphemerisGal_toc
putWord16le _msgEphemerisGal_iode
putWord16le _msgEphemerisGal_iodc
putWord8 _msgEphemerisGal_source

$(makeSBP 'msgEphemerisGal ''MsgEphemerisGal)
$(makeJSON "_msgEphemerisGal_" ''MsgEphemerisGal)
Expand Down
3 changes: 3 additions & 0 deletions java/src/com/swiftnav/sbp/client/MessageTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@
import com.swiftnav.sbp.observation.MsgEphemerisGPSDepF;
import com.swiftnav.sbp.observation.MsgEphemerisGPS;
import com.swiftnav.sbp.observation.MsgEphemerisBds;
import com.swiftnav.sbp.observation.MsgEphemerisGalDepA;
import com.swiftnav.sbp.observation.MsgEphemerisGal;
import com.swiftnav.sbp.observation.MsgEphemerisSbasDepA;
import com.swiftnav.sbp.observation.MsgEphemerisGloDepA;
Expand Down Expand Up @@ -343,6 +344,8 @@ static SBPMessage dispatch(SBPMessage msg) throws SBPBinaryException {
return new MsgEphemerisGPS(msg);
case MsgEphemerisBds.TYPE:
return new MsgEphemerisBds(msg);
case MsgEphemerisGalDepA.TYPE:
return new MsgEphemerisGalDepA(msg);
case MsgEphemerisGal.TYPE:
return new MsgEphemerisGal(msg);
case MsgEphemerisSbasDepA.TYPE:
Expand Down
10 changes: 8 additions & 2 deletions java/src/com/swiftnav/sbp/observation/MsgEphemerisGal.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import org.json.JSONArray;


/** SBP class for message MSG_EPHEMERIS_GAL (0x0095).
/** SBP class for message MSG_EPHEMERIS_GAL (0x008D).
*
* You can have MSG_EPHEMERIS_GAL inherent its fields directly from
* an inherited SBP object, or construct it inline using a dict of its
Expand All @@ -35,7 +35,7 @@
* OS SIS ICD, Issue 1.3, December 2016 for more details. */

public class MsgEphemerisGal extends SBPMessage {
public static final int TYPE = 0x0095;
public static final int TYPE = 0x008D;


/** Values common for all ephemeris types */
Expand Down Expand Up @@ -110,6 +110,9 @@ public class MsgEphemerisGal extends SBPMessage {
/** Issue of clock data */
public int iodc;

/** 0=I/NAV, 1=F/NAV, ... */
public int source;


public MsgEphemerisGal (int sender) { super(sender, TYPE); }
public MsgEphemerisGal () { super(TYPE); }
Expand Down Expand Up @@ -145,6 +148,7 @@ protected void parse(Parser parser) throws SBPBinaryException {
toc = new GPSTimeSec().parse(parser);
iode = parser.getU16();
iodc = parser.getU16();
source = parser.getU8();
}

@Override
Expand Down Expand Up @@ -173,6 +177,7 @@ protected void build(Builder builder) {
toc.build(builder);
builder.putU16(iode);
builder.putU16(iodc);
builder.putU8(source);
}

@Override
Expand Down Expand Up @@ -202,6 +207,7 @@ public JSONObject toJSON() {
obj.put("toc", toc.toJSON());
obj.put("iode", iode);
obj.put("iodc", iodc);
obj.put("source", source);
return obj;
}
}
Loading