diff --git a/sbp.cabal b/sbp.cabal
--- a/sbp.cabal
+++ b/sbp.cabal
@@ -1,5 +1,5 @@
 name: sbp
-version: 2.2.17
+version: 2.3.0
 cabal-version: >=1.22
 build-type: Simple
 license: LGPL-3
diff --git a/src/SwiftNav/SBP/Acquisition.hs b/src/SwiftNav/SBP/Acquisition.hs
--- a/src/SwiftNav/SBP/Acquisition.hs
+++ b/src/SwiftNav/SBP/Acquisition.hs
@@ -37,9 +37,9 @@
 
 
 msgAcqResult :: Word16
-msgAcqResult = 0x001F
+msgAcqResult = 0x002F
 
--- | SBP class for message MSG_ACQ_RESULT (0x001F).
+-- | SBP class for message MSG_ACQ_RESULT (0x002F).
 --
 -- This message describes the results from an attempted GPS signal acquisition
 -- search for a satellite PRN over a code phase/carrier frequency range. It
@@ -74,6 +74,41 @@
 $(makeJSON "_msgAcqResult_" ''MsgAcqResult)
 $(makeLenses ''MsgAcqResult)
 
+msgAcqResultDepC :: Word16
+msgAcqResultDepC = 0x001F
+
+-- | SBP class for message MSG_ACQ_RESULT_DEP_C (0x001F).
+--
+-- Deprecated.
+data MsgAcqResultDepC = MsgAcqResultDepC
+  { _msgAcqResultDepC_cn0 :: !Float
+    -- ^ CN/0 of best point
+  , _msgAcqResultDepC_cp :: !Float
+    -- ^ Code phase of best point
+  , _msgAcqResultDepC_cf :: !Float
+    -- ^ Carrier frequency of best point
+  , _msgAcqResultDepC_sid :: !GnssSignalDep
+    -- ^ GNSS signal for which acquisition was attempted
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgAcqResultDepC where
+  get = do
+    _msgAcqResultDepC_cn0 <- getFloat32le
+    _msgAcqResultDepC_cp <- getFloat32le
+    _msgAcqResultDepC_cf <- getFloat32le
+    _msgAcqResultDepC_sid <- get
+    pure MsgAcqResultDepC {..}
+
+  put MsgAcqResultDepC {..} = do
+    putFloat32le _msgAcqResultDepC_cn0
+    putFloat32le _msgAcqResultDepC_cp
+    putFloat32le _msgAcqResultDepC_cf
+    put _msgAcqResultDepC_sid
+
+$(makeSBP 'msgAcqResultDepC ''MsgAcqResultDepC)
+$(makeJSON "_msgAcqResultDepC_" ''MsgAcqResultDepC)
+$(makeLenses ''MsgAcqResultDepC)
+
 msgAcqResultDepB :: Word16
 msgAcqResultDepB = 0x0014
 
@@ -88,7 +123,7 @@
     -- ^ Code phase of best point
   , _msgAcqResultDepB_cf :: !Float
     -- ^ Carrier frequency of best point
-  , _msgAcqResultDepB_sid :: !GnssSignal
+  , _msgAcqResultDepB_sid :: !GnssSignalDep
     -- ^ GNSS signal for which acquisition was attempted
   } deriving ( Show, Read, Eq )
 
@@ -212,10 +247,73 @@
 $(makeJSON "_acqSvProfile_" ''AcqSvProfile)
 $(makeLenses ''AcqSvProfile)
 
+-- | AcqSvProfileDep.
+--
+-- Deprecated.
+data AcqSvProfileDep = AcqSvProfileDep
+  { _acqSvProfileDep_job_type :: !Word8
+    -- ^ SV search job type (deep, fallback, etc)
+  , _acqSvProfileDep_status   :: !Word8
+    -- ^ Acquisition status 1 is Success, 0 is Failure
+  , _acqSvProfileDep_cn0      :: !Word16
+    -- ^ CN0 value. Only valid if status is '1'
+  , _acqSvProfileDep_int_time :: !Word8
+    -- ^ Acquisition integration time
+  , _acqSvProfileDep_sid      :: !GnssSignalDep
+    -- ^ GNSS signal for which acquisition was attempted
+  , _acqSvProfileDep_bin_width :: !Word16
+    -- ^ Acq frequency bin width
+  , _acqSvProfileDep_timestamp :: !Word32
+    -- ^ Timestamp of the job complete event
+  , _acqSvProfileDep_time_spent :: !Word32
+    -- ^ Time spent to search for sid.code
+  , _acqSvProfileDep_cf_min   :: !Int32
+    -- ^ Doppler range lowest frequency
+  , _acqSvProfileDep_cf_max   :: !Int32
+    -- ^ Doppler range highest frequency
+  , _acqSvProfileDep_cf       :: !Int32
+    -- ^ Doppler value of detected peak. Only valid if status is '1'
+  , _acqSvProfileDep_cp       :: !Word32
+    -- ^ Codephase of detected peak. Only valid if status is '1'
+  } deriving ( Show, Read, Eq )
+
+instance Binary AcqSvProfileDep where
+  get = do
+    _acqSvProfileDep_job_type <- getWord8
+    _acqSvProfileDep_status <- getWord8
+    _acqSvProfileDep_cn0 <- getWord16le
+    _acqSvProfileDep_int_time <- getWord8
+    _acqSvProfileDep_sid <- get
+    _acqSvProfileDep_bin_width <- getWord16le
+    _acqSvProfileDep_timestamp <- getWord32le
+    _acqSvProfileDep_time_spent <- getWord32le
+    _acqSvProfileDep_cf_min <- fromIntegral <$> getWord32le
+    _acqSvProfileDep_cf_max <- fromIntegral <$> getWord32le
+    _acqSvProfileDep_cf <- fromIntegral <$> getWord32le
+    _acqSvProfileDep_cp <- getWord32le
+    pure AcqSvProfileDep {..}
+
+  put AcqSvProfileDep {..} = do
+    putWord8 _acqSvProfileDep_job_type
+    putWord8 _acqSvProfileDep_status
+    putWord16le _acqSvProfileDep_cn0
+    putWord8 _acqSvProfileDep_int_time
+    put _acqSvProfileDep_sid
+    putWord16le _acqSvProfileDep_bin_width
+    putWord32le _acqSvProfileDep_timestamp
+    putWord32le _acqSvProfileDep_time_spent
+    putWord32le $ fromIntegral _acqSvProfileDep_cf_min
+    putWord32le $ fromIntegral _acqSvProfileDep_cf_max
+    putWord32le $ fromIntegral _acqSvProfileDep_cf
+    putWord32le _acqSvProfileDep_cp
+
+$(makeJSON "_acqSvProfileDep_" ''AcqSvProfileDep)
+$(makeLenses ''AcqSvProfileDep)
+
 msgAcqSvProfile :: Word16
-msgAcqSvProfile = 0x001E
+msgAcqSvProfile = 0x002E
 
--- | SBP class for message MSG_ACQ_SV_PROFILE (0x001E).
+-- | SBP class for message MSG_ACQ_SV_PROFILE (0x002E).
 --
 -- The message describes all SV profiles during acquisition time. The message
 -- is used to debug and measure the performance.
@@ -235,3 +333,26 @@
 $(makeSBP 'msgAcqSvProfile ''MsgAcqSvProfile)
 $(makeJSON "_msgAcqSvProfile_" ''MsgAcqSvProfile)
 $(makeLenses ''MsgAcqSvProfile)
+
+msgAcqSvProfileDep :: Word16
+msgAcqSvProfileDep = 0x001E
+
+-- | SBP class for message MSG_ACQ_SV_PROFILE_DEP (0x001E).
+--
+-- Deprecated.
+data MsgAcqSvProfileDep = MsgAcqSvProfileDep
+  { _msgAcqSvProfileDep_acq_sv_profile :: ![AcqSvProfileDep]
+    -- ^ SV profiles during acquisition time
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgAcqSvProfileDep where
+  get = do
+    _msgAcqSvProfileDep_acq_sv_profile <- whileM (not <$> isEmpty) get
+    pure MsgAcqSvProfileDep {..}
+
+  put MsgAcqSvProfileDep {..} = do
+    mapM_ put _msgAcqSvProfileDep_acq_sv_profile
+
+$(makeSBP 'msgAcqSvProfileDep ''MsgAcqSvProfileDep)
+$(makeJSON "_msgAcqSvProfileDep_" ''MsgAcqSvProfileDep)
+$(makeLenses ''MsgAcqSvProfileDep)
diff --git a/src/SwiftNav/SBP/Gnss.hs b/src/SwiftNav/SBP/Gnss.hs
--- a/src/SwiftNav/SBP/Gnss.hs
+++ b/src/SwiftNav/SBP/Gnss.hs
@@ -35,81 +35,81 @@
 {-# ANN module ("HLint: ignore Use newtype instead of data"::String) #-}
 
 
--- | GnssSignal16.
+-- | GnssSignal.
 --
 -- Signal identifier containing constellation, band, and satellite identifier
-data GnssSignal16 = GnssSignal16
-  { _gnssSignal16_sat :: !Word8
+data GnssSignal = GnssSignal
+  { _gnssSignal_sat :: !Word8
     -- ^ Constellation-specific satellite identifier
-  , _gnssSignal16_code :: !Word8
+  , _gnssSignal_code :: !Word8
     -- ^ Signal constellation, band and code
   } deriving ( Show, Read, Eq )
 
-instance Binary GnssSignal16 where
+instance Binary GnssSignal where
   get = do
-    _gnssSignal16_sat <- getWord8
-    _gnssSignal16_code <- getWord8
-    pure GnssSignal16 {..}
+    _gnssSignal_sat <- getWord8
+    _gnssSignal_code <- getWord8
+    pure GnssSignal {..}
 
-  put GnssSignal16 {..} = do
-    putWord8 _gnssSignal16_sat
-    putWord8 _gnssSignal16_code
+  put GnssSignal {..} = do
+    putWord8 _gnssSignal_sat
+    putWord8 _gnssSignal_code
 
-$(makeJSON "_gnssSignal16_" ''GnssSignal16)
-$(makeLenses ''GnssSignal16)
+$(makeJSON "_gnssSignal_" ''GnssSignal)
+$(makeLenses ''GnssSignal)
 
--- | GnssSignal.
+-- | GnssSignalDep.
 --
--- Signal identifier containing constellation, band, and satellite identifier
-data GnssSignal = GnssSignal
-  { _gnssSignal_sat    :: !Word16
-    -- ^ Constellation-specific satellite identifier.  Note: unlike GnssSignal16,
+-- Deprecated.
+data GnssSignalDep = GnssSignalDep
+  { _gnssSignalDep_sat    :: !Word16
+    -- ^ Constellation-specific satellite identifier.  Note: unlike GnssSignal,
     -- GPS satellites are encoded as (PRN - 1). Other constellations do not
     -- have this offset.
-  , _gnssSignal_code   :: !Word8
+  , _gnssSignalDep_code   :: !Word8
     -- ^ Signal constellation, band and code
-  , _gnssSignal_reserved :: !Word8
+  , _gnssSignalDep_reserved :: !Word8
     -- ^ Reserved
   } deriving ( Show, Read, Eq )
 
-instance Binary GnssSignal where
+instance Binary GnssSignalDep where
   get = do
-    _gnssSignal_sat <- getWord16le
-    _gnssSignal_code <- getWord8
-    _gnssSignal_reserved <- getWord8
-    pure GnssSignal {..}
+    _gnssSignalDep_sat <- getWord16le
+    _gnssSignalDep_code <- getWord8
+    _gnssSignalDep_reserved <- getWord8
+    pure GnssSignalDep {..}
 
-  put GnssSignal {..} = do
-    putWord16le _gnssSignal_sat
-    putWord8 _gnssSignal_code
-    putWord8 _gnssSignal_reserved
+  put GnssSignalDep {..} = do
+    putWord16le _gnssSignalDep_sat
+    putWord8 _gnssSignalDep_code
+    putWord8 _gnssSignalDep_reserved
 
-$(makeJSON "_gnssSignal_" ''GnssSignal)
-$(makeLenses ''GnssSignal)
+$(makeJSON "_gnssSignalDep_" ''GnssSignalDep)
+$(makeLenses ''GnssSignalDep)
 
--- | GPSTime.
+-- | GPSTimeDep.
 --
 -- A wire-appropriate GPS time, defined as the number of milliseconds since
 -- beginning of the week on the Saturday/Sunday transition.
-data GpsTime = GpsTime
-  { _gpsTime_tow :: !Word32
+data GpsTimeDep = GpsTimeDep
+  { _gpsTimeDep_tow :: !Word32
     -- ^ Milliseconds since start of GPS week
-  , _gpsTime_wn :: !Word16
+  , _gpsTimeDep_wn :: !Word16
     -- ^ GPS week number
   } deriving ( Show, Read, Eq )
 
-instance Binary GpsTime where
+instance Binary GpsTimeDep where
   get = do
-    _gpsTime_tow <- getWord32le
-    _gpsTime_wn <- getWord16le
-    pure GpsTime {..}
+    _gpsTimeDep_tow <- getWord32le
+    _gpsTimeDep_wn <- getWord16le
+    pure GpsTimeDep {..}
 
-  put GpsTime {..} = do
-    putWord32le _gpsTime_tow
-    putWord16le _gpsTime_wn
+  put GpsTimeDep {..} = do
+    putWord32le _gpsTimeDep_tow
+    putWord16le _gpsTimeDep_wn
 
-$(makeJSON "_gpsTime_" ''GpsTime)
-$(makeLenses ''GpsTime)
+$(makeJSON "_gpsTimeDep_" ''GpsTimeDep)
+$(makeLenses ''GpsTimeDep)
 
 -- | GPSTimeSec.
 --
@@ -135,35 +135,35 @@
 $(makeJSON "_gpsTimeSec_" ''GpsTimeSec)
 $(makeLenses ''GpsTimeSec)
 
--- | GPSTimeNano.
+-- | GPSTime.
 --
 -- A wire-appropriate receiver clock time, defined as the time since the
 -- beginning of the week on the Saturday/Sunday transition. In most cases,
 -- observations are epoch aligned so ns field will be 0.
-data GpsTimeNano = GpsTimeNano
-  { _gpsTimeNano_tow       :: !Word32
+data GpsTime = GpsTime
+  { _gpsTime_tow       :: !Word32
     -- ^ Milliseconds since start of GPS week
-  , _gpsTimeNano_ns_residual :: !Int32
+  , _gpsTime_ns_residual :: !Int32
     -- ^ Nanosecond residual of millisecond-rounded TOW (ranges from -500000 to
     -- 500000)
-  , _gpsTimeNano_wn        :: !Word16
+  , _gpsTime_wn        :: !Word16
     -- ^ GPS week number
   } deriving ( Show, Read, Eq )
 
-instance Binary GpsTimeNano where
+instance Binary GpsTime where
   get = do
-    _gpsTimeNano_tow <- getWord32le
-    _gpsTimeNano_ns_residual <- fromIntegral <$> getWord32le
-    _gpsTimeNano_wn <- getWord16le
-    pure GpsTimeNano {..}
+    _gpsTime_tow <- getWord32le
+    _gpsTime_ns_residual <- fromIntegral <$> getWord32le
+    _gpsTime_wn <- getWord16le
+    pure GpsTime {..}
 
-  put GpsTimeNano {..} = do
-    putWord32le _gpsTimeNano_tow
-    putWord32le $ fromIntegral _gpsTimeNano_ns_residual
-    putWord16le _gpsTimeNano_wn
+  put GpsTime {..} = do
+    putWord32le _gpsTime_tow
+    putWord32le $ fromIntegral _gpsTime_ns_residual
+    putWord16le _gpsTime_wn
 
-$(makeJSON "_gpsTimeNano_" ''GpsTimeNano)
-$(makeLenses ''GpsTimeNano)
+$(makeJSON "_gpsTime_" ''GpsTime)
+$(makeLenses ''GpsTime)
 
 -- | CarrierPhase.
 --
diff --git a/src/SwiftNav/SBP/Msg.hs b/src/SwiftNav/SBP/Msg.hs
--- a/src/SwiftNav/SBP/Msg.hs
+++ b/src/SwiftNav/SBP/Msg.hs
@@ -52,11 +52,15 @@
      SBPMsgAcqResult MsgAcqResult Msg
    | SBPMsgAcqResultDepA MsgAcqResultDepA Msg
    | SBPMsgAcqResultDepB MsgAcqResultDepB Msg
+   | SBPMsgAcqResultDepC MsgAcqResultDepC Msg
    | SBPMsgAcqSvProfile MsgAcqSvProfile Msg
+   | SBPMsgAcqSvProfileDep MsgAcqSvProfileDep Msg
    | SBPMsgAgeCorrections MsgAgeCorrections Msg
    | SBPMsgAlmanac MsgAlmanac Msg
    | SBPMsgAlmanacGlo MsgAlmanacGlo Msg
+   | SBPMsgAlmanacGloDep MsgAlmanacGloDep Msg
    | SBPMsgAlmanacGps MsgAlmanacGps Msg
+   | SBPMsgAlmanacGpsDep MsgAlmanacGpsDep Msg
    | SBPMsgBasePosEcef MsgBasePosEcef Msg
    | SBPMsgBasePosLlh MsgBasePosLlh Msg
    | SBPMsgBaselineEcef MsgBaselineEcef Msg
@@ -108,6 +112,7 @@
    | SBPMsgGpsTimeDepA MsgGpsTimeDepA Msg
    | SBPMsgGroupDelay MsgGroupDelay Msg
    | SBPMsgGroupDelayDepA MsgGroupDelayDepA Msg
+   | SBPMsgGroupDelayDepB MsgGroupDelayDepB Msg
    | SBPMsgHeartbeat MsgHeartbeat Msg
    | SBPMsgIarState MsgIarState Msg
    | SBPMsgImuAux MsgImuAux Msg
@@ -118,6 +123,7 @@
    | SBPMsgM25FlashWriteStatus MsgM25FlashWriteStatus Msg
    | SBPMsgMagRaw MsgMagRaw Msg
    | SBPMsgMaskSatellite MsgMaskSatellite Msg
+   | SBPMsgMaskSatelliteDep MsgMaskSatelliteDep Msg
    | SBPMsgNapDeviceDnaReq MsgNapDeviceDnaReq Msg
    | SBPMsgNapDeviceDnaResp MsgNapDeviceDnaResp Msg
    | SBPMsgNdbEvent MsgNdbEvent Msg
@@ -145,6 +151,7 @@
    | SBPMsgSettingsSave MsgSettingsSave Msg
    | SBPMsgSettingsWrite MsgSettingsWrite Msg
    | SBPMsgSpecan MsgSpecan Msg
+   | SBPMsgSpecanDep MsgSpecanDep Msg
    | SBPMsgStartup MsgStartup Msg
    | SBPMsgStmFlashLockSector MsgStmFlashLockSector Msg
    | SBPMsgStmFlashUnlockSector MsgStmFlashUnlockSector Msg
@@ -153,10 +160,12 @@
    | SBPMsgSvConfigurationGps MsgSvConfigurationGps Msg
    | SBPMsgThreadState MsgThreadState Msg
    | SBPMsgTrackingIq MsgTrackingIq Msg
+   | SBPMsgTrackingIqDep MsgTrackingIqDep Msg
    | SBPMsgTrackingState MsgTrackingState Msg
    | SBPMsgTrackingStateDepA MsgTrackingStateDepA Msg
    | SBPMsgTrackingStateDepB MsgTrackingStateDepB Msg
    | SBPMsgTrackingStateDetailed MsgTrackingStateDetailed Msg
+   | SBPMsgTrackingStateDetailedDep MsgTrackingStateDetailedDep Msg
    | SBPMsgTweet MsgTweet Msg
    | SBPMsgUartState MsgUartState Msg
    | SBPMsgUartStateDepa MsgUartStateDepa Msg
@@ -182,11 +191,15 @@
           | _msgSBPType == msgAcqResult = SBPMsgAcqResult (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgAcqResultDepA = SBPMsgAcqResultDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgAcqResultDepB = SBPMsgAcqResultDepB (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgAcqResultDepC = SBPMsgAcqResultDepC (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgAcqSvProfile = SBPMsgAcqSvProfile (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgAcqSvProfileDep = SBPMsgAcqSvProfileDep (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgAgeCorrections = SBPMsgAgeCorrections (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgAlmanac = SBPMsgAlmanac (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgAlmanacGlo = SBPMsgAlmanacGlo (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgAlmanacGloDep = SBPMsgAlmanacGloDep (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgAlmanacGps = SBPMsgAlmanacGps (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgAlmanacGpsDep = SBPMsgAlmanacGpsDep (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgBasePosEcef = SBPMsgBasePosEcef (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgBasePosLlh = SBPMsgBasePosLlh (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgBaselineEcef = SBPMsgBaselineEcef (decode (fromStrict (unBytes _msgSBPPayload))) m
@@ -238,6 +251,7 @@
           | _msgSBPType == msgGpsTimeDepA = SBPMsgGpsTimeDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgGroupDelay = SBPMsgGroupDelay (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgGroupDelayDepA = SBPMsgGroupDelayDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgGroupDelayDepB = SBPMsgGroupDelayDepB (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgHeartbeat = SBPMsgHeartbeat (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgIarState = SBPMsgIarState (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgImuAux = SBPMsgImuAux (decode (fromStrict (unBytes _msgSBPPayload))) m
@@ -248,6 +262,7 @@
           | _msgSBPType == msgM25FlashWriteStatus = SBPMsgM25FlashWriteStatus (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgMagRaw = SBPMsgMagRaw (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgMaskSatellite = SBPMsgMaskSatellite (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgMaskSatelliteDep = SBPMsgMaskSatelliteDep (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgNapDeviceDnaReq = SBPMsgNapDeviceDnaReq (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgNapDeviceDnaResp = SBPMsgNapDeviceDnaResp (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgNdbEvent = SBPMsgNdbEvent (decode (fromStrict (unBytes _msgSBPPayload))) m
@@ -275,6 +290,7 @@
           | _msgSBPType == msgSettingsSave = SBPMsgSettingsSave (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSettingsWrite = SBPMsgSettingsWrite (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSpecan = SBPMsgSpecan (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSpecanDep = SBPMsgSpecanDep (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgStartup = SBPMsgStartup (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgStmFlashLockSector = SBPMsgStmFlashLockSector (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgStmFlashUnlockSector = SBPMsgStmFlashUnlockSector (decode (fromStrict (unBytes _msgSBPPayload))) m
@@ -283,10 +299,12 @@
           | _msgSBPType == msgSvConfigurationGps = SBPMsgSvConfigurationGps (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgThreadState = SBPMsgThreadState (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgTrackingIq = SBPMsgTrackingIq (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgTrackingIqDep = SBPMsgTrackingIqDep (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgTrackingState = SBPMsgTrackingState (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgTrackingStateDepA = SBPMsgTrackingStateDepA (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgTrackingStateDepB = SBPMsgTrackingStateDepB (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgTrackingStateDetailed = SBPMsgTrackingStateDetailed (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgTrackingStateDetailedDep = SBPMsgTrackingStateDetailedDep (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgTweet = SBPMsgTweet (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgUartState = SBPMsgUartState (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgUartStateDepa = SBPMsgUartStateDepa (decode (fromStrict (unBytes _msgSBPPayload))) m
@@ -304,11 +322,15 @@
       encoder (SBPMsgAcqResult _ m) = put m
       encoder (SBPMsgAcqResultDepA _ m) = put m
       encoder (SBPMsgAcqResultDepB _ m) = put m
+      encoder (SBPMsgAcqResultDepC _ m) = put m
       encoder (SBPMsgAcqSvProfile _ m) = put m
+      encoder (SBPMsgAcqSvProfileDep _ m) = put m
       encoder (SBPMsgAgeCorrections _ m) = put m
       encoder (SBPMsgAlmanac _ m) = put m
       encoder (SBPMsgAlmanacGlo _ m) = put m
+      encoder (SBPMsgAlmanacGloDep _ m) = put m
       encoder (SBPMsgAlmanacGps _ m) = put m
+      encoder (SBPMsgAlmanacGpsDep _ m) = put m
       encoder (SBPMsgBasePosEcef _ m) = put m
       encoder (SBPMsgBasePosLlh _ m) = put m
       encoder (SBPMsgBaselineEcef _ m) = put m
@@ -360,6 +382,7 @@
       encoder (SBPMsgGpsTimeDepA _ m) = put m
       encoder (SBPMsgGroupDelay _ m) = put m
       encoder (SBPMsgGroupDelayDepA _ m) = put m
+      encoder (SBPMsgGroupDelayDepB _ m) = put m
       encoder (SBPMsgHeartbeat _ m) = put m
       encoder (SBPMsgIarState _ m) = put m
       encoder (SBPMsgImuAux _ m) = put m
@@ -370,6 +393,7 @@
       encoder (SBPMsgM25FlashWriteStatus _ m) = put m
       encoder (SBPMsgMagRaw _ m) = put m
       encoder (SBPMsgMaskSatellite _ m) = put m
+      encoder (SBPMsgMaskSatelliteDep _ m) = put m
       encoder (SBPMsgNapDeviceDnaReq _ m) = put m
       encoder (SBPMsgNapDeviceDnaResp _ m) = put m
       encoder (SBPMsgNdbEvent _ m) = put m
@@ -397,6 +421,7 @@
       encoder (SBPMsgSettingsSave _ m) = put m
       encoder (SBPMsgSettingsWrite _ m) = put m
       encoder (SBPMsgSpecan _ m) = put m
+      encoder (SBPMsgSpecanDep _ m) = put m
       encoder (SBPMsgStartup _ m) = put m
       encoder (SBPMsgStmFlashLockSector _ m) = put m
       encoder (SBPMsgStmFlashUnlockSector _ m) = put m
@@ -405,10 +430,12 @@
       encoder (SBPMsgSvConfigurationGps _ m) = put m
       encoder (SBPMsgThreadState _ m) = put m
       encoder (SBPMsgTrackingIq _ m) = put m
+      encoder (SBPMsgTrackingIqDep _ m) = put m
       encoder (SBPMsgTrackingState _ m) = put m
       encoder (SBPMsgTrackingStateDepA _ m) = put m
       encoder (SBPMsgTrackingStateDepB _ m) = put m
       encoder (SBPMsgTrackingStateDetailed _ m) = put m
+      encoder (SBPMsgTrackingStateDetailedDep _ m) = put m
       encoder (SBPMsgTweet _ m) = put m
       encoder (SBPMsgUartState _ m) = put m
       encoder (SBPMsgUartStateDepa _ m) = put m
@@ -430,11 +457,15 @@
         | msgType == msgAcqResult = SBPMsgAcqResult <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgAcqResultDepA = SBPMsgAcqResultDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgAcqResultDepB = SBPMsgAcqResultDepB <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgAcqResultDepC = SBPMsgAcqResultDepC <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgAcqSvProfile = SBPMsgAcqSvProfile <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgAcqSvProfileDep = SBPMsgAcqSvProfileDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgAgeCorrections = SBPMsgAgeCorrections <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgAlmanac = SBPMsgAlmanac <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgAlmanacGlo = SBPMsgAlmanacGlo <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgAlmanacGloDep = SBPMsgAlmanacGloDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgAlmanacGps = SBPMsgAlmanacGps <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgAlmanacGpsDep = SBPMsgAlmanacGpsDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgBasePosEcef = SBPMsgBasePosEcef <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgBasePosLlh = SBPMsgBasePosLlh <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgBaselineEcef = SBPMsgBaselineEcef <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
@@ -486,6 +517,7 @@
         | msgType == msgGpsTimeDepA = SBPMsgGpsTimeDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgGroupDelay = SBPMsgGroupDelay <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgGroupDelayDepA = SBPMsgGroupDelayDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgGroupDelayDepB = SBPMsgGroupDelayDepB <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgHeartbeat = SBPMsgHeartbeat <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgIarState = SBPMsgIarState <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgImuAux = SBPMsgImuAux <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
@@ -496,6 +528,7 @@
         | msgType == msgM25FlashWriteStatus = SBPMsgM25FlashWriteStatus <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgMagRaw = SBPMsgMagRaw <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgMaskSatellite = SBPMsgMaskSatellite <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgMaskSatelliteDep = SBPMsgMaskSatelliteDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgNapDeviceDnaReq = SBPMsgNapDeviceDnaReq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgNapDeviceDnaResp = SBPMsgNapDeviceDnaResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgNdbEvent = SBPMsgNdbEvent <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
@@ -523,6 +556,7 @@
         | msgType == msgSettingsSave = SBPMsgSettingsSave <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSettingsWrite = SBPMsgSettingsWrite <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSpecan = SBPMsgSpecan <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSpecanDep = SBPMsgSpecanDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgStartup = SBPMsgStartup <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgStmFlashLockSector = SBPMsgStmFlashLockSector <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgStmFlashUnlockSector = SBPMsgStmFlashUnlockSector <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
@@ -531,10 +565,12 @@
         | msgType == msgSvConfigurationGps = SBPMsgSvConfigurationGps <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgThreadState = SBPMsgThreadState <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgTrackingIq = SBPMsgTrackingIq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgTrackingIqDep = SBPMsgTrackingIqDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgTrackingState = SBPMsgTrackingState <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgTrackingStateDepA = SBPMsgTrackingStateDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgTrackingStateDepB = SBPMsgTrackingStateDepB <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgTrackingStateDetailed = SBPMsgTrackingStateDetailed <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgTrackingStateDetailedDep = SBPMsgTrackingStateDetailedDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgTweet = SBPMsgTweet <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgUartState = SBPMsgUartState <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgUartStateDepa = SBPMsgUartStateDepa <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
@@ -557,11 +593,15 @@
   toJSON (SBPMsgAcqResult n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgAcqResultDepA n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgAcqResultDepB n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgAcqResultDepC n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgAcqSvProfile n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgAcqSvProfileDep n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgAgeCorrections n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgAlmanac n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgAlmanacGlo n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgAlmanacGloDep n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgAlmanacGps n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgAlmanacGpsDep n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgBasePosEcef n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgBasePosLlh n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgBaselineEcef n m) = toJSON n <<>> toJSON m
@@ -613,6 +653,7 @@
   toJSON (SBPMsgGpsTimeDepA n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgGroupDelay n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgGroupDelayDepA n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgGroupDelayDepB n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgHeartbeat n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgIarState n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgImuAux n m) = toJSON n <<>> toJSON m
@@ -623,6 +664,7 @@
   toJSON (SBPMsgM25FlashWriteStatus n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgMagRaw n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgMaskSatellite n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgMaskSatelliteDep n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgNapDeviceDnaReq n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgNapDeviceDnaResp n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgNdbEvent n m) = toJSON n <<>> toJSON m
@@ -650,6 +692,7 @@
   toJSON (SBPMsgSettingsSave n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSettingsWrite n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSpecan n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSpecanDep n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgStartup n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgStmFlashLockSector n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgStmFlashUnlockSector n m) = toJSON n <<>> toJSON m
@@ -658,10 +701,12 @@
   toJSON (SBPMsgSvConfigurationGps n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgThreadState n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgTrackingIq n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgTrackingIqDep n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgTrackingState n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgTrackingStateDepA n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgTrackingStateDepB n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgTrackingStateDetailed n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgTrackingStateDetailedDep n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgTweet n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgUartState n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgUartStateDepa n m) = toJSON n <<>> toJSON m
@@ -678,11 +723,15 @@
   msg f (SBPMsgAcqResult n m) = SBPMsgAcqResult n <$> f m
   msg f (SBPMsgAcqResultDepA n m) = SBPMsgAcqResultDepA n <$> f m
   msg f (SBPMsgAcqResultDepB n m) = SBPMsgAcqResultDepB n <$> f m
+  msg f (SBPMsgAcqResultDepC n m) = SBPMsgAcqResultDepC n <$> f m
   msg f (SBPMsgAcqSvProfile n m) = SBPMsgAcqSvProfile n <$> f m
+  msg f (SBPMsgAcqSvProfileDep n m) = SBPMsgAcqSvProfileDep n <$> f m
   msg f (SBPMsgAgeCorrections n m) = SBPMsgAgeCorrections n <$> f m
   msg f (SBPMsgAlmanac n m) = SBPMsgAlmanac n <$> f m
   msg f (SBPMsgAlmanacGlo n m) = SBPMsgAlmanacGlo n <$> f m
+  msg f (SBPMsgAlmanacGloDep n m) = SBPMsgAlmanacGloDep n <$> f m
   msg f (SBPMsgAlmanacGps n m) = SBPMsgAlmanacGps n <$> f m
+  msg f (SBPMsgAlmanacGpsDep n m) = SBPMsgAlmanacGpsDep n <$> f m
   msg f (SBPMsgBasePosEcef n m) = SBPMsgBasePosEcef n <$> f m
   msg f (SBPMsgBasePosLlh n m) = SBPMsgBasePosLlh n <$> f m
   msg f (SBPMsgBaselineEcef n m) = SBPMsgBaselineEcef n <$> f m
@@ -734,6 +783,7 @@
   msg f (SBPMsgGpsTimeDepA n m) = SBPMsgGpsTimeDepA n <$> f m
   msg f (SBPMsgGroupDelay n m) = SBPMsgGroupDelay n <$> f m
   msg f (SBPMsgGroupDelayDepA n m) = SBPMsgGroupDelayDepA n <$> f m
+  msg f (SBPMsgGroupDelayDepB n m) = SBPMsgGroupDelayDepB n <$> f m
   msg f (SBPMsgHeartbeat n m) = SBPMsgHeartbeat n <$> f m
   msg f (SBPMsgIarState n m) = SBPMsgIarState n <$> f m
   msg f (SBPMsgImuAux n m) = SBPMsgImuAux n <$> f m
@@ -744,6 +794,7 @@
   msg f (SBPMsgM25FlashWriteStatus n m) = SBPMsgM25FlashWriteStatus n <$> f m
   msg f (SBPMsgMagRaw n m) = SBPMsgMagRaw n <$> f m
   msg f (SBPMsgMaskSatellite n m) = SBPMsgMaskSatellite n <$> f m
+  msg f (SBPMsgMaskSatelliteDep n m) = SBPMsgMaskSatelliteDep n <$> f m
   msg f (SBPMsgNapDeviceDnaReq n m) = SBPMsgNapDeviceDnaReq n <$> f m
   msg f (SBPMsgNapDeviceDnaResp n m) = SBPMsgNapDeviceDnaResp n <$> f m
   msg f (SBPMsgNdbEvent n m) = SBPMsgNdbEvent n <$> f m
@@ -771,6 +822,7 @@
   msg f (SBPMsgSettingsSave n m) = SBPMsgSettingsSave n <$> f m
   msg f (SBPMsgSettingsWrite n m) = SBPMsgSettingsWrite n <$> f m
   msg f (SBPMsgSpecan n m) = SBPMsgSpecan n <$> f m
+  msg f (SBPMsgSpecanDep n m) = SBPMsgSpecanDep n <$> f m
   msg f (SBPMsgStartup n m) = SBPMsgStartup n <$> f m
   msg f (SBPMsgStmFlashLockSector n m) = SBPMsgStmFlashLockSector n <$> f m
   msg f (SBPMsgStmFlashUnlockSector n m) = SBPMsgStmFlashUnlockSector n <$> f m
@@ -779,10 +831,12 @@
   msg f (SBPMsgSvConfigurationGps n m) = SBPMsgSvConfigurationGps n <$> f m
   msg f (SBPMsgThreadState n m) = SBPMsgThreadState n <$> f m
   msg f (SBPMsgTrackingIq n m) = SBPMsgTrackingIq n <$> f m
+  msg f (SBPMsgTrackingIqDep n m) = SBPMsgTrackingIqDep n <$> f m
   msg f (SBPMsgTrackingState n m) = SBPMsgTrackingState n <$> f m
   msg f (SBPMsgTrackingStateDepA n m) = SBPMsgTrackingStateDepA n <$> f m
   msg f (SBPMsgTrackingStateDepB n m) = SBPMsgTrackingStateDepB n <$> f m
   msg f (SBPMsgTrackingStateDetailed n m) = SBPMsgTrackingStateDetailed n <$> f m
+  msg f (SBPMsgTrackingStateDetailedDep n m) = SBPMsgTrackingStateDetailedDep n <$> f m
   msg f (SBPMsgTweet n m) = SBPMsgTweet n <$> f m
   msg f (SBPMsgUartState n m) = SBPMsgUartState n <$> f m
   msg f (SBPMsgUartStateDepa n m) = SBPMsgUartStateDepa n <$> f m
diff --git a/src/SwiftNav/SBP/Ndb.hs b/src/SwiftNav/SBP/Ndb.hs
--- a/src/SwiftNav/SBP/Ndb.hs
+++ b/src/SwiftNav/SBP/Ndb.hs
@@ -54,11 +54,11 @@
     -- ^ Event result.
   , _msgNdbEvent_data_source   :: !Word8
     -- ^ Data source for STORE event, reserved for other events.
-  , _msgNdbEvent_object_sid    :: !GnssSignal16
+  , _msgNdbEvent_object_sid    :: !GnssSignal
     -- ^ GNSS signal identifier, If object_type is Ephemeris OR Almanac, sid
     -- indicates for which signal the object belongs to. Reserved in other
     -- cases.
-  , _msgNdbEvent_src_sid       :: !GnssSignal16
+  , _msgNdbEvent_src_sid       :: !GnssSignal
     -- ^ GNSS signal identifier, If object_type is Almanac, Almanac WN, Iono OR
     -- L2C capabilities AND data_source is NDB_DS_RECEIVER sid indicates from
     -- which SV data was decoded. Reserved in other cases.
diff --git a/src/SwiftNav/SBP/Observation.hs b/src/SwiftNav/SBP/Observation.hs
--- a/src/SwiftNav/SBP/Observation.hs
+++ b/src/SwiftNav/SBP/Observation.hs
@@ -40,7 +40,7 @@
 --
 -- Header of a GNSS observation message.
 data ObservationHeader = ObservationHeader
-  { _observationHeader_t   :: !GpsTimeNano
+  { _observationHeader_t   :: !GpsTime
     -- ^ GNSS time of this observation
   , _observationHeader_n_obs :: !Word8
     -- ^ Total number of observations. First nibble is the size of the sequence
@@ -110,7 +110,7 @@
     -- ^ Measurement status flags. A bit field of flags providing the status of
     -- this observation.  If this field is 0 it means only the Cn0 estimate for
     -- the signal is valid.
-  , _packedObsContent_sid :: !GnssSignal16
+  , _packedObsContent_sid :: !GnssSignal
     -- ^ GNSS signal identifier (16 bit)
   } deriving ( Show, Read, Eq )
 
@@ -239,7 +239,7 @@
 $(makeLenses ''MsgBasePosEcef)
 
 data EphemerisCommonContent = EphemerisCommonContent
-  { _ephemerisCommonContent_sid        :: !GnssSignal16
+  { _ephemerisCommonContent_sid        :: !GnssSignal
     -- ^ GNSS signal identifier (16 bit)
   , _ephemerisCommonContent_toe        :: !GpsTimeSec
     -- ^ Time of Ephemerides
@@ -276,9 +276,9 @@
 $(makeLenses ''EphemerisCommonContent)
 
 data EphemerisCommonContentDepA = EphemerisCommonContentDepA
-  { _ephemerisCommonContentDepA_sid        :: !GnssSignal
+  { _ephemerisCommonContentDepA_sid        :: !GnssSignalDep
     -- ^ GNSS signal identifier
-  , _ephemerisCommonContentDepA_toe        :: !GpsTime
+  , _ephemerisCommonContentDepA_toe        :: !GpsTimeDep
     -- ^ Time of Ephemerides
   , _ephemerisCommonContentDepA_ura        :: !Double
     -- ^ User Range Accuracy
@@ -366,7 +366,7 @@
     -- ^ Polynomial clock correction coefficient (clock drift)
   , _msgEphemerisGpsDepE_af2    :: !Double
     -- ^ Polynomial clock correction coefficient (rate of clock drift)
-  , _msgEphemerisGpsDepE_toc    :: !GpsTime
+  , _msgEphemerisGpsDepE_toc    :: !GpsTimeDep
     -- ^ Clock reference
   , _msgEphemerisGpsDepE_iode   :: !Word8
     -- ^ Issue of ephemeris data
@@ -896,7 +896,7 @@
     -- ^ Is valid?
   , _msgEphemerisDepD_healthy :: !Word8
     -- ^ Satellite is healthy?
-  , _msgEphemerisDepD_sid    :: !GnssSignal
+  , _msgEphemerisDepD_sid    :: !GnssSignalDep
     -- ^ GNSS signal identifier
   , _msgEphemerisDepD_iode   :: !Word8
     -- ^ Issue of ephemeris data
@@ -1296,7 +1296,7 @@
     -- ^ Is valid?
   , _msgEphemerisDepC_healthy :: !Word8
     -- ^ Satellite is healthy?
-  , _msgEphemerisDepC_sid    :: !GnssSignal
+  , _msgEphemerisDepC_sid    :: !GnssSignalDep
     -- ^ GNSS signal identifier
   , _msgEphemerisDepC_iode   :: !Word8
     -- ^ Issue of ephemeris data
@@ -1378,7 +1378,7 @@
 --
 -- Header of a GPS observation message.
 data ObservationHeaderDep = ObservationHeaderDep
-  { _observationHeaderDep_t   :: !GpsTime
+  { _observationHeaderDep_t   :: !GpsTimeDep
     -- ^ GPS time of this observation
   , _observationHeaderDep_n_obs :: !Word8
     -- ^ Total number of observations. First nibble is the size of the sequence
@@ -1476,7 +1476,7 @@
     -- ^ Lock indicator. This value changes whenever a satellite signal has lost
     -- and regained lock, indicating that the carrier phase ambiguity may have
     -- changed.
-  , _packedObsContentDepB_sid :: !GnssSignal
+  , _packedObsContentDepB_sid :: !GnssSignalDep
     -- ^ GNSS signal identifier
   } deriving ( Show, Read, Eq )
 
@@ -1515,7 +1515,7 @@
     -- ^ Lock indicator. This value changes whenever a satellite signal has lost
     -- and regained lock, indicating that the carrier phase ambiguity may have
     -- changed.
-  , _packedObsContentDepC_sid :: !GnssSignal
+  , _packedObsContentDepC_sid :: !GnssSignalDep
     -- ^ GNSS signal identifier
   } deriving ( Show, Read, Eq )
 
@@ -1710,7 +1710,7 @@
 --
 -- Please see ICD-GPS-200 (30.3.3.3.1.1) for more details.
 data MsgGroupDelayDepA = MsgGroupDelayDepA
-  { _msgGroupDelayDepA_t_op   :: !GpsTime
+  { _msgGroupDelayDepA_t_op   :: !GpsTimeDep
     -- ^ Data Predict Time of Week
   , _msgGroupDelayDepA_prn    :: !Word8
     -- ^ Satellite number
@@ -1744,10 +1744,51 @@
 $(makeJSON "_msgGroupDelayDepA_" ''MsgGroupDelayDepA)
 $(makeLenses ''MsgGroupDelayDepA)
 
+msgGroupDelayDepB :: Word16
+msgGroupDelayDepB = 0x0093
+
+-- | SBP class for message MSG_GROUP_DELAY_DEP_B (0x0093).
+--
+-- Please see ICD-GPS-200 (30.3.3.3.1.1) for more details.
+data MsgGroupDelayDepB = MsgGroupDelayDepB
+  { _msgGroupDelayDepB_t_op   :: !GpsTimeSec
+    -- ^ Data Predict Time of Week
+  , _msgGroupDelayDepB_sid    :: !GnssSignalDep
+    -- ^ GNSS signal identifier
+  , _msgGroupDelayDepB_valid  :: !Word8
+    -- ^ bit-field indicating validity of the values, LSB indicating tgd validity
+    -- etc. 1 = value is valid, 0 = value is not valid.
+  , _msgGroupDelayDepB_tgd    :: !Int16
+  , _msgGroupDelayDepB_isc_l1ca :: !Int16
+  , _msgGroupDelayDepB_isc_l2c :: !Int16
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgGroupDelayDepB where
+  get = do
+    _msgGroupDelayDepB_t_op <- get
+    _msgGroupDelayDepB_sid <- get
+    _msgGroupDelayDepB_valid <- getWord8
+    _msgGroupDelayDepB_tgd <- fromIntegral <$> getWord16le
+    _msgGroupDelayDepB_isc_l1ca <- fromIntegral <$> getWord16le
+    _msgGroupDelayDepB_isc_l2c <- fromIntegral <$> getWord16le
+    pure MsgGroupDelayDepB {..}
+
+  put MsgGroupDelayDepB {..} = do
+    put _msgGroupDelayDepB_t_op
+    put _msgGroupDelayDepB_sid
+    putWord8 _msgGroupDelayDepB_valid
+    putWord16le $ fromIntegral _msgGroupDelayDepB_tgd
+    putWord16le $ fromIntegral _msgGroupDelayDepB_isc_l1ca
+    putWord16le $ fromIntegral _msgGroupDelayDepB_isc_l2c
+
+$(makeSBP 'msgGroupDelayDepB ''MsgGroupDelayDepB)
+$(makeJSON "_msgGroupDelayDepB_" ''MsgGroupDelayDepB)
+$(makeLenses ''MsgGroupDelayDepB)
+
 msgGroupDelay :: Word16
-msgGroupDelay = 0x0093
+msgGroupDelay = 0x0094
 
--- | SBP class for message MSG_GROUP_DELAY (0x0093).
+-- | SBP class for message MSG_GROUP_DELAY (0x0094).
 --
 -- Please see ICD-GPS-200 (30.3.3.3.1.1) for more details.
 data MsgGroupDelay = MsgGroupDelay
@@ -1830,10 +1871,117 @@
 $(makeJSON "_almanacCommonContent_" ''AlmanacCommonContent)
 $(makeLenses ''AlmanacCommonContent)
 
+data AlmanacCommonContentDep = AlmanacCommonContentDep
+  { _almanacCommonContentDep_sid        :: !GnssSignalDep
+    -- ^ GNSS signal identifier
+  , _almanacCommonContentDep_toa        :: !GpsTimeSec
+    -- ^ Reference time of almanac
+  , _almanacCommonContentDep_ura        :: !Double
+    -- ^ User Range Accuracy
+  , _almanacCommonContentDep_fit_interval :: !Word32
+    -- ^ Curve fit interval
+  , _almanacCommonContentDep_valid      :: !Word8
+    -- ^ Status of almanac, 1 = valid, 0 = invalid
+  , _almanacCommonContentDep_health_bits :: !Word8
+    -- ^ Satellite health status for GPS:   - bits 5-7: NAV data health status.
+    -- See IS-GPS-200H     Table 20-VII: NAV Data Health Indications.   - bits
+    -- 0-4: Signal health status. See IS-GPS-200H     Table 20-VIII. Codes for
+    -- Health of SV Signal     Components. Satellite health status for GLO:
+    -- See GLO ICD 5.1 table 5.1 for details   - bit 0: C(n), "unhealthy" flag
+    -- that is transmitted within     non-immediate data and indicates overall
+    -- constellation status     at the moment of almanac uploading.     '0'
+    -- indicates malfunction of n-satellite.     '1' indicates that n-satellite
+    -- is operational.   - bit 1: Bn(ln), '0' indicates the satellite is
+    -- operational     and suitable for navigation.
+  } deriving ( Show, Read, Eq )
+
+instance Binary AlmanacCommonContentDep where
+  get = do
+    _almanacCommonContentDep_sid <- get
+    _almanacCommonContentDep_toa <- get
+    _almanacCommonContentDep_ura <- getFloat64le
+    _almanacCommonContentDep_fit_interval <- getWord32le
+    _almanacCommonContentDep_valid <- getWord8
+    _almanacCommonContentDep_health_bits <- getWord8
+    pure AlmanacCommonContentDep {..}
+
+  put AlmanacCommonContentDep {..} = do
+    put _almanacCommonContentDep_sid
+    put _almanacCommonContentDep_toa
+    putFloat64le _almanacCommonContentDep_ura
+    putWord32le _almanacCommonContentDep_fit_interval
+    putWord8 _almanacCommonContentDep_valid
+    putWord8 _almanacCommonContentDep_health_bits
+
+$(makeJSON "_almanacCommonContentDep_" ''AlmanacCommonContentDep)
+$(makeLenses ''AlmanacCommonContentDep)
+
+msgAlmanacGpsDep :: Word16
+msgAlmanacGpsDep = 0x0070
+
+-- | SBP class for message MSG_ALMANAC_GPS_DEP (0x0070).
+--
+-- The almanac message returns a set of satellite orbit parameters. Almanac
+-- data is not very precise and is considered valid for up to several months.
+-- Please see the Navstar GPS Space Segment/Navigation user interfaces (ICD-
+-- GPS-200, Chapter 20.3.3.5.1.2 Almanac Data) for more details.
+data MsgAlmanacGpsDep = MsgAlmanacGpsDep
+  { _msgAlmanacGpsDep_common :: !AlmanacCommonContentDep
+    -- ^ Values common for all almanac types
+  , _msgAlmanacGpsDep_m0     :: !Double
+    -- ^ Mean anomaly at reference time
+  , _msgAlmanacGpsDep_ecc    :: !Double
+    -- ^ Eccentricity of satellite orbit
+  , _msgAlmanacGpsDep_sqrta  :: !Double
+    -- ^ Square root of the semi-major axis of orbit
+  , _msgAlmanacGpsDep_omega0 :: !Double
+    -- ^ Longitude of ascending node of orbit plane at weekly epoch
+  , _msgAlmanacGpsDep_omegadot :: !Double
+    -- ^ Rate of right ascension
+  , _msgAlmanacGpsDep_w      :: !Double
+    -- ^ Argument of perigee
+  , _msgAlmanacGpsDep_inc    :: !Double
+    -- ^ Inclination
+  , _msgAlmanacGpsDep_af0    :: !Double
+    -- ^ Polynomial clock correction coefficient (clock bias)
+  , _msgAlmanacGpsDep_af1    :: !Double
+    -- ^ Polynomial clock correction coefficient (clock drift)
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgAlmanacGpsDep where
+  get = do
+    _msgAlmanacGpsDep_common <- get
+    _msgAlmanacGpsDep_m0 <- getFloat64le
+    _msgAlmanacGpsDep_ecc <- getFloat64le
+    _msgAlmanacGpsDep_sqrta <- getFloat64le
+    _msgAlmanacGpsDep_omega0 <- getFloat64le
+    _msgAlmanacGpsDep_omegadot <- getFloat64le
+    _msgAlmanacGpsDep_w <- getFloat64le
+    _msgAlmanacGpsDep_inc <- getFloat64le
+    _msgAlmanacGpsDep_af0 <- getFloat64le
+    _msgAlmanacGpsDep_af1 <- getFloat64le
+    pure MsgAlmanacGpsDep {..}
+
+  put MsgAlmanacGpsDep {..} = do
+    put _msgAlmanacGpsDep_common
+    putFloat64le _msgAlmanacGpsDep_m0
+    putFloat64le _msgAlmanacGpsDep_ecc
+    putFloat64le _msgAlmanacGpsDep_sqrta
+    putFloat64le _msgAlmanacGpsDep_omega0
+    putFloat64le _msgAlmanacGpsDep_omegadot
+    putFloat64le _msgAlmanacGpsDep_w
+    putFloat64le _msgAlmanacGpsDep_inc
+    putFloat64le _msgAlmanacGpsDep_af0
+    putFloat64le _msgAlmanacGpsDep_af1
+
+$(makeSBP 'msgAlmanacGpsDep ''MsgAlmanacGpsDep)
+$(makeJSON "_msgAlmanacGpsDep_" ''MsgAlmanacGpsDep)
+$(makeLenses ''MsgAlmanacGpsDep)
+
 msgAlmanacGps :: Word16
-msgAlmanacGps = 0x0070
+msgAlmanacGps = 0x0072
 
--- | SBP class for message MSG_ALMANAC_GPS (0x0070).
+-- | SBP class for message MSG_ALMANAC_GPS (0x0072).
 --
 -- The almanac message returns a set of satellite orbit parameters. Almanac
 -- data is not very precise and is considered valid for up to several months.
@@ -1892,10 +2040,65 @@
 $(makeJSON "_msgAlmanacGps_" ''MsgAlmanacGps)
 $(makeLenses ''MsgAlmanacGps)
 
+msgAlmanacGloDep :: Word16
+msgAlmanacGloDep = 0x0071
+
+-- | SBP class for message MSG_ALMANAC_GLO_DEP (0x0071).
+--
+-- The almanac message returns a set of satellite orbit parameters. Almanac
+-- data is not very precise and is considered valid for up to several months.
+-- Please see the GLO ICD 5.1 "Chapter 4.5 Non-immediate information and
+-- almanac" for details.
+data MsgAlmanacGloDep = MsgAlmanacGloDep
+  { _msgAlmanacGloDep_common    :: !AlmanacCommonContentDep
+    -- ^ Values common for all almanac types
+  , _msgAlmanacGloDep_lambda_na :: !Double
+    -- ^ Longitude of the first ascending node of the orbit in PZ-90.02
+    -- coordinate system
+  , _msgAlmanacGloDep_t_lambda_na :: !Double
+    -- ^ Time of the first ascending node passage
+  , _msgAlmanacGloDep_i         :: !Double
+    -- ^ Value of inclination at instant of t_lambda
+  , _msgAlmanacGloDep_t         :: !Double
+    -- ^ Value of Draconian period at instant of t_lambda
+  , _msgAlmanacGloDep_t_dot     :: !Double
+    -- ^ Rate of change of the Draconian period
+  , _msgAlmanacGloDep_epsilon   :: !Double
+    -- ^ Eccentricity at instant of t_lambda
+  , _msgAlmanacGloDep_omega     :: !Double
+    -- ^ Argument of perigee at instant of t_lambda
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgAlmanacGloDep where
+  get = do
+    _msgAlmanacGloDep_common <- get
+    _msgAlmanacGloDep_lambda_na <- getFloat64le
+    _msgAlmanacGloDep_t_lambda_na <- getFloat64le
+    _msgAlmanacGloDep_i <- getFloat64le
+    _msgAlmanacGloDep_t <- getFloat64le
+    _msgAlmanacGloDep_t_dot <- getFloat64le
+    _msgAlmanacGloDep_epsilon <- getFloat64le
+    _msgAlmanacGloDep_omega <- getFloat64le
+    pure MsgAlmanacGloDep {..}
+
+  put MsgAlmanacGloDep {..} = do
+    put _msgAlmanacGloDep_common
+    putFloat64le _msgAlmanacGloDep_lambda_na
+    putFloat64le _msgAlmanacGloDep_t_lambda_na
+    putFloat64le _msgAlmanacGloDep_i
+    putFloat64le _msgAlmanacGloDep_t
+    putFloat64le _msgAlmanacGloDep_t_dot
+    putFloat64le _msgAlmanacGloDep_epsilon
+    putFloat64le _msgAlmanacGloDep_omega
+
+$(makeSBP 'msgAlmanacGloDep ''MsgAlmanacGloDep)
+$(makeJSON "_msgAlmanacGloDep_" ''MsgAlmanacGloDep)
+$(makeLenses ''MsgAlmanacGloDep)
+
 msgAlmanacGlo :: Word16
-msgAlmanacGlo = 0x0071
+msgAlmanacGlo = 0x0073
 
--- | SBP class for message MSG_ALMANAC_GLO (0x0071).
+-- | SBP class for message MSG_ALMANAC_GLO (0x0073).
 --
 -- The almanac message returns a set of satellite orbit parameters. Almanac
 -- data is not very precise and is considered valid for up to several months.
diff --git a/src/SwiftNav/SBP/Piksi.hs b/src/SwiftNav/SBP/Piksi.hs
--- a/src/SwiftNav/SBP/Piksi.hs
+++ b/src/SwiftNav/SBP/Piksi.hs
@@ -458,9 +458,9 @@
 $(makeLenses ''MsgIarState)
 
 msgMaskSatellite :: Word16
-msgMaskSatellite = 0x001B
+msgMaskSatellite = 0x002B
 
--- | SBP class for message MSG_MASK_SATELLITE (0x001B).
+-- | SBP class for message MSG_MASK_SATELLITE (0x002B).
 --
 -- This message allows setting a mask to prevent a particular satellite from
 -- being used in various Piksi subsystems.
@@ -485,6 +485,33 @@
 $(makeJSON "_msgMaskSatellite_" ''MsgMaskSatellite)
 $(makeLenses ''MsgMaskSatellite)
 
+msgMaskSatelliteDep :: Word16
+msgMaskSatelliteDep = 0x001B
+
+-- | SBP class for message MSG_MASK_SATELLITE_DEP (0x001B).
+--
+-- Deprecated.
+data MsgMaskSatelliteDep = MsgMaskSatelliteDep
+  { _msgMaskSatelliteDep_mask :: !Word8
+    -- ^ Mask of systems that should ignore this satellite.
+  , _msgMaskSatelliteDep_sid :: !GnssSignalDep
+    -- ^ GNSS signal for which the mask is applied
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgMaskSatelliteDep where
+  get = do
+    _msgMaskSatelliteDep_mask <- getWord8
+    _msgMaskSatelliteDep_sid <- get
+    pure MsgMaskSatelliteDep {..}
+
+  put MsgMaskSatelliteDep {..} = do
+    putWord8 _msgMaskSatelliteDep_mask
+    put _msgMaskSatelliteDep_sid
+
+$(makeSBP 'msgMaskSatelliteDep ''MsgMaskSatelliteDep)
+$(makeJSON "_msgMaskSatelliteDep_" ''MsgMaskSatelliteDep)
+$(makeLenses ''MsgMaskSatelliteDep)
+
 msgDeviceMonitor :: Word16
 msgDeviceMonitor = 0x00B5
 
@@ -683,10 +710,57 @@
 $(makeJSON "_msgNetworkStateResp_" ''MsgNetworkStateResp)
 $(makeLenses ''MsgNetworkStateResp)
 
+msgSpecanDep :: Word16
+msgSpecanDep = 0x0050
+
+-- | SBP class for message MSG_SPECAN_DEP (0x0050).
+--
+-- Deprecated.
+data MsgSpecanDep = MsgSpecanDep
+  { _msgSpecanDep_channel_tag   :: !Word16
+    -- ^ Channel ID
+  , _msgSpecanDep_t             :: !GpsTimeDep
+    -- ^ Receiver time of this observation
+  , _msgSpecanDep_freq_ref      :: !Float
+    -- ^ Reference frequency of this packet
+  , _msgSpecanDep_freq_step     :: !Float
+    -- ^ Frequency step of points in this packet
+  , _msgSpecanDep_amplitude_ref :: !Float
+    -- ^ Reference amplitude of this packet
+  , _msgSpecanDep_amplitude_unit :: !Float
+    -- ^ Amplitude unit value of points in this packet
+  , _msgSpecanDep_amplitude_value :: ![Word8]
+    -- ^ Amplitude values (in the above units) of points in this packet
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgSpecanDep where
+  get = do
+    _msgSpecanDep_channel_tag <- getWord16le
+    _msgSpecanDep_t <- get
+    _msgSpecanDep_freq_ref <- getFloat32le
+    _msgSpecanDep_freq_step <- getFloat32le
+    _msgSpecanDep_amplitude_ref <- getFloat32le
+    _msgSpecanDep_amplitude_unit <- getFloat32le
+    _msgSpecanDep_amplitude_value <- whileM (not <$> isEmpty) getWord8
+    pure MsgSpecanDep {..}
+
+  put MsgSpecanDep {..} = do
+    putWord16le _msgSpecanDep_channel_tag
+    put _msgSpecanDep_t
+    putFloat32le _msgSpecanDep_freq_ref
+    putFloat32le _msgSpecanDep_freq_step
+    putFloat32le _msgSpecanDep_amplitude_ref
+    putFloat32le _msgSpecanDep_amplitude_unit
+    mapM_ putWord8 _msgSpecanDep_amplitude_value
+
+$(makeSBP 'msgSpecanDep ''MsgSpecanDep)
+$(makeJSON "_msgSpecanDep_" ''MsgSpecanDep)
+$(makeLenses ''MsgSpecanDep)
+
 msgSpecan :: Word16
-msgSpecan = 0x0050
+msgSpecan = 0x0051
 
--- | SBP class for message MSG_SPECAN (0x0050).
+-- | SBP class for message MSG_SPECAN (0x0051).
 --
 -- Spectrum analyzer packet.
 data MsgSpecan = MsgSpecan
diff --git a/src/SwiftNav/SBP/Tracking.hs b/src/SwiftNav/SBP/Tracking.hs
--- a/src/SwiftNav/SBP/Tracking.hs
+++ b/src/SwiftNav/SBP/Tracking.hs
@@ -37,9 +37,9 @@
 
 
 msgTrackingStateDetailed :: Word16
-msgTrackingStateDetailed = 0x0011
+msgTrackingStateDetailed = 0x0021
 
--- | SBP class for message MSG_TRACKING_STATE_DETAILED (0x0011).
+-- | SBP class for message MSG_TRACKING_STATE_DETAILED (0x0021).
 --
 -- The tracking message returns a set tracking channel parameters for a single
 -- tracking channel useful for debugging issues.
@@ -146,12 +146,121 @@
 $(makeJSON "_msgTrackingStateDetailed_" ''MsgTrackingStateDetailed)
 $(makeLenses ''MsgTrackingStateDetailed)
 
+msgTrackingStateDetailedDep :: Word16
+msgTrackingStateDetailedDep = 0x0011
+
+-- | SBP class for message MSG_TRACKING_STATE_DETAILED_DEP (0x0011).
+--
+-- Deprecated.
+data MsgTrackingStateDetailedDep = MsgTrackingStateDetailedDep
+  { _msgTrackingStateDetailedDep_recv_time  :: !Word64
+    -- ^ Receiver clock time.
+  , _msgTrackingStateDetailedDep_tot        :: !GpsTimeDep
+    -- ^ Time of transmission of signal from satellite. TOW only valid when TOW
+    -- status is decoded or propagated. WN only valid when week number valid
+    -- flag is set.
+  , _msgTrackingStateDetailedDep_P          :: !Word32
+    -- ^ Pseudorange observation. Valid only when pseudorange valid flag is set.
+  , _msgTrackingStateDetailedDep_P_std      :: !Word16
+    -- ^ Pseudorange observation standard deviation. Valid only when pseudorange
+    -- valid flag is set.
+  , _msgTrackingStateDetailedDep_L          :: !CarrierPhase
+    -- ^ Carrier phase observation with typical sign convention. Valid only when
+    -- PLL pessimistic lock is achieved.
+  , _msgTrackingStateDetailedDep_cn0        :: !Word8
+    -- ^ Carrier-to-Noise density
+  , _msgTrackingStateDetailedDep_lock       :: !Word16
+    -- ^ Lock time. It is encoded according to DF402 from the RTCM 10403.2
+    -- Amendment 2 specification. Valid values range from 0 to 15.
+  , _msgTrackingStateDetailedDep_sid        :: !GnssSignalDep
+    -- ^ GNSS signal identifier.
+  , _msgTrackingStateDetailedDep_doppler    :: !Int32
+    -- ^ Carrier Doppler frequency.
+  , _msgTrackingStateDetailedDep_doppler_std :: !Word16
+    -- ^ Carrier Doppler frequency standard deviation.
+  , _msgTrackingStateDetailedDep_uptime     :: !Word32
+    -- ^ Number of seconds of continuous tracking. Specifies how much time signal
+    -- is in continuous track.
+  , _msgTrackingStateDetailedDep_clock_offset :: !Int16
+    -- ^ TCXO clock offset. Valid only when valid clock valid flag is set.
+  , _msgTrackingStateDetailedDep_clock_drift :: !Int16
+    -- ^ TCXO clock drift. Valid only when valid clock valid flag is set.
+  , _msgTrackingStateDetailedDep_corr_spacing :: !Word16
+    -- ^ Early-Prompt (EP) and Prompt-Late (PL) correlators spacing.
+  , _msgTrackingStateDetailedDep_acceleration :: !Int8
+    -- ^ Acceleration. Valid only when acceleration valid flag is set.
+  , _msgTrackingStateDetailedDep_sync_flags :: !Word8
+    -- ^ Synchronization status flags.
+  , _msgTrackingStateDetailedDep_tow_flags  :: !Word8
+    -- ^ TOW status flags.
+  , _msgTrackingStateDetailedDep_track_flags :: !Word8
+    -- ^ Tracking loop status flags.
+  , _msgTrackingStateDetailedDep_nav_flags  :: !Word8
+    -- ^ Navigation data status flags.
+  , _msgTrackingStateDetailedDep_pset_flags :: !Word8
+    -- ^ Parameters sets flags.
+  , _msgTrackingStateDetailedDep_misc_flags :: !Word8
+    -- ^ Miscellaneous flags.
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgTrackingStateDetailedDep where
+  get = do
+    _msgTrackingStateDetailedDep_recv_time <- getWord64le
+    _msgTrackingStateDetailedDep_tot <- get
+    _msgTrackingStateDetailedDep_P <- getWord32le
+    _msgTrackingStateDetailedDep_P_std <- getWord16le
+    _msgTrackingStateDetailedDep_L <- get
+    _msgTrackingStateDetailedDep_cn0 <- getWord8
+    _msgTrackingStateDetailedDep_lock <- getWord16le
+    _msgTrackingStateDetailedDep_sid <- get
+    _msgTrackingStateDetailedDep_doppler <- fromIntegral <$> getWord32le
+    _msgTrackingStateDetailedDep_doppler_std <- getWord16le
+    _msgTrackingStateDetailedDep_uptime <- getWord32le
+    _msgTrackingStateDetailedDep_clock_offset <- fromIntegral <$> getWord16le
+    _msgTrackingStateDetailedDep_clock_drift <- fromIntegral <$> getWord16le
+    _msgTrackingStateDetailedDep_corr_spacing <- getWord16le
+    _msgTrackingStateDetailedDep_acceleration <- fromIntegral <$> getWord8
+    _msgTrackingStateDetailedDep_sync_flags <- getWord8
+    _msgTrackingStateDetailedDep_tow_flags <- getWord8
+    _msgTrackingStateDetailedDep_track_flags <- getWord8
+    _msgTrackingStateDetailedDep_nav_flags <- getWord8
+    _msgTrackingStateDetailedDep_pset_flags <- getWord8
+    _msgTrackingStateDetailedDep_misc_flags <- getWord8
+    pure MsgTrackingStateDetailedDep {..}
+
+  put MsgTrackingStateDetailedDep {..} = do
+    putWord64le _msgTrackingStateDetailedDep_recv_time
+    put _msgTrackingStateDetailedDep_tot
+    putWord32le _msgTrackingStateDetailedDep_P
+    putWord16le _msgTrackingStateDetailedDep_P_std
+    put _msgTrackingStateDetailedDep_L
+    putWord8 _msgTrackingStateDetailedDep_cn0
+    putWord16le _msgTrackingStateDetailedDep_lock
+    put _msgTrackingStateDetailedDep_sid
+    putWord32le $ fromIntegral _msgTrackingStateDetailedDep_doppler
+    putWord16le _msgTrackingStateDetailedDep_doppler_std
+    putWord32le _msgTrackingStateDetailedDep_uptime
+    putWord16le $ fromIntegral _msgTrackingStateDetailedDep_clock_offset
+    putWord16le $ fromIntegral _msgTrackingStateDetailedDep_clock_drift
+    putWord16le _msgTrackingStateDetailedDep_corr_spacing
+    putWord8 $ fromIntegral _msgTrackingStateDetailedDep_acceleration
+    putWord8 _msgTrackingStateDetailedDep_sync_flags
+    putWord8 _msgTrackingStateDetailedDep_tow_flags
+    putWord8 _msgTrackingStateDetailedDep_track_flags
+    putWord8 _msgTrackingStateDetailedDep_nav_flags
+    putWord8 _msgTrackingStateDetailedDep_pset_flags
+    putWord8 _msgTrackingStateDetailedDep_misc_flags
+
+$(makeSBP 'msgTrackingStateDetailedDep ''MsgTrackingStateDetailedDep)
+$(makeJSON "_msgTrackingStateDetailedDep_" ''MsgTrackingStateDetailedDep)
+$(makeLenses ''MsgTrackingStateDetailedDep)
+
 -- | TrackingChannelState.
 --
 -- Tracking channel state for a specific satellite signal and measured signal
 -- power.
 data TrackingChannelState = TrackingChannelState
-  { _trackingChannelState_sid :: !GnssSignal16
+  { _trackingChannelState_sid :: !GnssSignal
     -- ^ GNSS signal being tracked
   , _trackingChannelState_fcn :: !Word8
     -- ^ Frequency channel number (GLONASS only)
@@ -223,9 +332,9 @@
 $(makeLenses ''TrackingChannelCorrelation)
 
 msgTrackingIq :: Word16
-msgTrackingIq = 0x001C
+msgTrackingIq = 0x002C
 
--- | SBP class for message MSG_TRACKING_IQ (0x001C).
+-- | SBP class for message MSG_TRACKING_IQ (0x002C).
 --
 -- When enabled, a tracking channel can output the correlations at each update
 -- interval.
@@ -254,6 +363,37 @@
 $(makeJSON "_msgTrackingIq_" ''MsgTrackingIq)
 $(makeLenses ''MsgTrackingIq)
 
+msgTrackingIqDep :: Word16
+msgTrackingIqDep = 0x001C
+
+-- | SBP class for message MSG_TRACKING_IQ_DEP (0x001C).
+--
+-- Deprecated.
+data MsgTrackingIqDep = MsgTrackingIqDep
+  { _msgTrackingIqDep_channel :: !Word8
+    -- ^ Tracking channel of origin
+  , _msgTrackingIqDep_sid   :: !GnssSignalDep
+    -- ^ GNSS signal identifier
+  , _msgTrackingIqDep_corrs :: ![TrackingChannelCorrelation]
+    -- ^ Early, Prompt and Late correlations
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgTrackingIqDep where
+  get = do
+    _msgTrackingIqDep_channel <- getWord8
+    _msgTrackingIqDep_sid <- get
+    _msgTrackingIqDep_corrs <- replicateM 3 get
+    pure MsgTrackingIqDep {..}
+
+  put MsgTrackingIqDep {..} = do
+    putWord8 _msgTrackingIqDep_channel
+    put _msgTrackingIqDep_sid
+    mapM_ put _msgTrackingIqDep_corrs
+
+$(makeSBP 'msgTrackingIqDep ''MsgTrackingIqDep)
+$(makeJSON "_msgTrackingIqDep_" ''MsgTrackingIqDep)
+$(makeLenses ''MsgTrackingIqDep)
+
 -- | TrackingChannelStateDepA.
 --
 -- Deprecated.
@@ -310,7 +450,7 @@
 data TrackingChannelStateDepB = TrackingChannelStateDepB
   { _trackingChannelStateDepB_state :: !Word8
     -- ^ Status of tracking channel
-  , _trackingChannelStateDepB_sid :: !GnssSignal
+  , _trackingChannelStateDepB_sid :: !GnssSignalDep
     -- ^ GNSS signal being tracked
   , _trackingChannelStateDepB_cn0 :: !Float
     -- ^ Carrier-to-noise density
