Index: trunk/clock_and_orbit/lib/clock_orbit_rtcm.c
===================================================================
--- trunk/clock_and_orbit/lib/clock_orbit_rtcm.c	(revision 3495)
+++ trunk/clock_and_orbit/lib/clock_orbit_rtcm.c	(revision 3511)
@@ -94,6 +94,4 @@
 /* standard values */
 #define T_MESSAGE_NUMBER(a)              ADDBITS(12, a) /* DF002 */
-#define T_RESERVED4                      ADDBITS(4, 0)  /* DF001 */
-#define T_RESERVED5                      ADDBITS(5, 0)  /* DF001 */
 #define T_GPS_SATELLITE_ID(a)            ADDBITS(6, a)  /* DF068 */
 #define T_GPS_IODE(a)                    ADDBITS(8, a)  /* DF071 */
@@ -125,4 +123,8 @@
 #define T_HR_CLOCK_CORRECTION(a)         SCALEADDBITS(22,    10000.0, a)
 #define T_SSR_UPDATE_INTERVAL(a)         ADDBITS(4, a)
+
+#define T_SSR_IOD(a)                     ADDBITS(4, a)
+#define T_SSR_PROVIDER_ID(a)             ADDBITS(16, a)
+#define T_SSR_SOLUTION_ID(a)             ADDBITS(4, a)
 
 static double URAToValue(int ura)
@@ -206,5 +208,7 @@
     --mmi;
     T_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)
-    T_RESERVED4
+    T_SSR_IOD(co->SSRIOD)
+    T_SSR_PROVIDER_ID(co->SSRProviderID)
+    T_SSR_SOLUTION_ID(co->SSRSolutionID)
     T_NO_OF_SATELLITES(co->NumberOfGPSSat)
     for(i = 0; i < co->NumberOfGPSSat; ++i)
@@ -229,5 +233,7 @@
     T_MULTIPLE_MESSAGE_INDICATOR(/*mmi ? 1 :*/0)
     --mmi;
-    T_RESERVED5
+    T_SSR_IOD(co->SSRIOD)
+    T_SSR_PROVIDER_ID(co->SSRProviderID)
+    T_SSR_SOLUTION_ID(co->SSRSolutionID)
     T_NO_OF_SATELLITES(co->NumberOfGPSSat)
     for(i = 0; i < co->NumberOfGPSSat; ++i)
@@ -268,5 +274,7 @@
       --mmi;
       T_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)
-      T_RESERVED4
+      T_SSR_IOD(co->SSRIOD)
+      T_SSR_PROVIDER_ID(co->SSRProviderID)
+      T_SSR_SOLUTION_ID(co->SSRSolutionID)
 #ifdef SPLITBLOCK
       T_NO_OF_SATELLITES(nums)
@@ -305,5 +313,7 @@
     T_MULTIPLE_MESSAGE_INDICATOR(/*mmi ? 1 :*/0)
     --mmi;
-    T_RESERVED5
+    T_SSR_IOD(co->SSRIOD)
+    T_SSR_PROVIDER_ID(co->SSRProviderID)
+    T_SSR_SOLUTION_ID(co->SSRSolutionID)
     T_NO_OF_SATELLITES(co->NumberOfGPSSat)
     for(i = 0; i < co->NumberOfGPSSat; ++i)
@@ -321,5 +331,7 @@
     T_MULTIPLE_MESSAGE_INDICATOR(/*mmi ? 1 :*/0)
     --mmi;
-    T_RESERVED5
+    T_SSR_IOD(co->SSRIOD)
+    T_SSR_PROVIDER_ID(co->SSRProviderID)
+    T_SSR_SOLUTION_ID(co->SSRSolutionID)
     T_NO_OF_SATELLITES(co->NumberOfGPSSat)
     for(i = 0; i < co->NumberOfGPSSat; ++i)
@@ -339,5 +351,7 @@
     --mmi;
     T_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)
-    T_RESERVED4
+    T_SSR_IOD(co->SSRIOD)
+    T_SSR_PROVIDER_ID(co->SSRProviderID)
+    T_SSR_SOLUTION_ID(co->SSRSolutionID)
     T_NO_OF_SATELLITES(co->NumberOfGLONASSSat)
     for(i = CLOCKORBIT_NUMGPS;
@@ -363,5 +377,7 @@
     T_MULTIPLE_MESSAGE_INDICATOR(/*mmi ? 1 :*/0)
     --mmi;
-    T_RESERVED5
+    T_SSR_IOD(co->SSRIOD)
+    T_SSR_PROVIDER_ID(co->SSRProviderID)
+    T_SSR_SOLUTION_ID(co->SSRSolutionID)
     T_NO_OF_SATELLITES(co->NumberOfGLONASSSat)
     for(i = CLOCKORBIT_NUMGPS;
@@ -385,5 +401,7 @@
     --mmi;
     T_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)
-    T_RESERVED4
+    T_SSR_IOD(co->SSRIOD)
+    T_SSR_PROVIDER_ID(co->SSRProviderID)
+    T_SSR_SOLUTION_ID(co->SSRSolutionID)
     T_NO_OF_SATELLITES(co->NumberOfGLONASSSat)
     for(i = CLOCKORBIT_NUMGPS;
@@ -412,5 +430,7 @@
     T_MULTIPLE_MESSAGE_INDICATOR(/*mmi ? 1 :*/0)
     --mmi;
-    T_RESERVED5
+    T_SSR_IOD(co->SSRIOD)
+    T_SSR_PROVIDER_ID(co->SSRProviderID)
+    T_SSR_SOLUTION_ID(co->SSRSolutionID)
     T_NO_OF_SATELLITES(co->NumberOfGLONASSSat)
     for(i = CLOCKORBIT_NUMGPS;
@@ -429,5 +449,7 @@
     T_MULTIPLE_MESSAGE_INDICATOR(/*mmi ? 1 :*/0)
     --mmi;
-    T_RESERVED5
+    T_SSR_IOD(co->SSRIOD)
+    T_SSR_PROVIDER_ID(co->SSRProviderID)
+    T_SSR_SOLUTION_ID(co->SSRSolutionID)
     T_NO_OF_SATELLITES(co->NumberOfGLONASSSat)
     for(i = CLOCKORBIT_NUMGPS;
@@ -466,5 +488,7 @@
     T_MULTIPLE_MESSAGE_INDICATOR(/*mmi ? 1 :*/0)
     --mmi;
-    T_RESERVED5
+    T_SSR_IOD(b->SSRIOD)
+    T_SSR_PROVIDER_ID(b->SSRProviderID)
+    T_SSR_SOLUTION_ID(b->SSRSolutionID)
     T_NO_OF_SATELLITES(b->NumberOfGPSSat)
     for(i = 0; i < b->NumberOfGPSSat; ++i)
@@ -488,5 +512,7 @@
     T_MULTIPLE_MESSAGE_INDICATOR(/*mmi ? 1 :*/0)
     --mmi;
-    T_RESERVED5
+    T_SSR_IOD(b->SSRIOD)
+    T_SSR_PROVIDER_ID(b->SSRProviderID)
+    T_SSR_SOLUTION_ID(b->SSRSolutionID)
     T_NO_OF_SATELLITES(b->NumberOfGLONASSSat)
     for(i = CLOCKORBIT_NUMGPS;
@@ -550,6 +576,4 @@
 #define G_SIZE(a)                        GETBITS(a, 10)
 #define G_MESSAGE_NUMBER(a)              GETBITS(a, 12) /* DF002 */
-#define G_RESERVED4                      SKIPBITS(4)    /* DF001 */
-#define G_RESERVED5                      SKIPBITS(5)    /* DF001 */
 #define G_GPS_SATELLITE_ID(a)            GETBITS(a, 6)  /* DF068 */
 #define G_GPS_IODE(a)                    GETBITS(a, 8)  /* DF071 */
@@ -585,4 +609,8 @@
 #define G_SSR_UPDATE_INTERVAL(a)         GETBITS(a, 4)
 
+#define G_SSR_IOD(a)                     GETBITS(a, 4)
+#define G_SSR_PROVIDER_ID(a)             GETBITS(a, 16)
+#define G_SSR_SOLUTION_ID(a)             GETBITS(a, 4)
+
 enum GCOB_RETURN GetClockOrbitBias(struct ClockOrbit *co, struct Bias *b,
 const char *buffer, size_t size, int *bytesused)
@@ -630,5 +658,7 @@
     G_MULTIPLE_MESSAGE_INDICATOR(mmi)
     G_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)
-    G_RESERVED4
+    G_SSR_IOD(co->SSRIOD)
+    G_SSR_PROVIDER_ID(co->SSRProviderID)
+    G_SSR_SOLUTION_ID(co->SSRSolutionID)
     G_NO_OF_SATELLITES(nums)
     co->OrbitDataSupplied |= 1;
@@ -671,5 +701,7 @@
     G_SSR_UPDATE_INTERVAL(co->UpdateInterval)
     G_MULTIPLE_MESSAGE_INDICATOR(mmi)
-    G_RESERVED5
+    G_SSR_IOD(co->SSRIOD)
+    G_SSR_PROVIDER_ID(co->SSRProviderID)
+    G_SSR_SOLUTION_ID(co->SSRSolutionID)
     G_NO_OF_SATELLITES(nums)
     co->ClockDataSupplied |= 1;
@@ -706,5 +738,7 @@
     G_MULTIPLE_MESSAGE_INDICATOR(mmi)
     G_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)
-    G_RESERVED4
+    G_SSR_IOD(co->SSRIOD)
+    G_SSR_PROVIDER_ID(co->SSRProviderID)
+    G_SSR_SOLUTION_ID(co->SSRSolutionID)
     G_NO_OF_SATELLITES(nums)
     co->OrbitDataSupplied |= 1;
@@ -738,5 +772,7 @@
     if(co->epochSize < 100) {co->epochSize += 1;}     /* Weber, for latency */
     G_MULTIPLE_MESSAGE_INDICATOR(mmi)
-    G_RESERVED5
+    G_SSR_IOD(co->SSRIOD)
+    G_SSR_PROVIDER_ID(co->SSRProviderID)
+    G_SSR_SOLUTION_ID(co->SSRSolutionID)
     G_NO_OF_SATELLITES(nums)
     co->URADataSupplied |= 1;
@@ -761,5 +797,7 @@
     G_SSR_UPDATE_INTERVAL(co->UpdateInterval)
     G_MULTIPLE_MESSAGE_INDICATOR(mmi)
-    G_RESERVED5
+    G_SSR_IOD(co->SSRIOD)
+    G_SSR_PROVIDER_ID(co->SSRProviderID)
+    G_SSR_SOLUTION_ID(co->SSRSolutionID)
     G_NO_OF_SATELLITES(nums)
     co->HRDataSupplied |= 1;
@@ -783,5 +821,7 @@
     G_MULTIPLE_MESSAGE_INDICATOR(mmi)
     G_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)
-    G_RESERVED4
+    G_SSR_IOD(co->SSRIOD)
+    G_SSR_PROVIDER_ID(co->SSRProviderID)
+    G_SSR_SOLUTION_ID(co->SSRSolutionID)
     G_NO_OF_SATELLITES(nums)
     co->OrbitDataSupplied |= 2;
@@ -822,5 +862,7 @@
     G_SSR_UPDATE_INTERVAL(co->UpdateInterval)
     G_MULTIPLE_MESSAGE_INDICATOR(mmi)
-    G_RESERVED5
+    G_SSR_IOD(co->SSRIOD)
+    G_SSR_PROVIDER_ID(co->SSRProviderID)
+    G_SSR_SOLUTION_ID(co->SSRSolutionID)
     G_NO_OF_SATELLITES(nums)
     co->ClockDataSupplied |= 2;
@@ -855,5 +897,7 @@
     G_MULTIPLE_MESSAGE_INDICATOR(mmi)
     G_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)
-    G_RESERVED4
+    G_SSR_IOD(co->SSRIOD)
+    G_SSR_PROVIDER_ID(co->SSRProviderID)
+    G_SSR_SOLUTION_ID(co->SSRSolutionID)
     G_NO_OF_SATELLITES(nums)
     co->OrbitDataSupplied |= 2;
@@ -885,5 +929,7 @@
     G_GLONASS_EPOCH_TIME(co->GLONASSEpochTime, co->NumberOfGLONASSSat)
     G_MULTIPLE_MESSAGE_INDICATOR(mmi)
-    G_RESERVED5
+    G_SSR_IOD(co->SSRIOD)
+    G_SSR_PROVIDER_ID(co->SSRProviderID)
+    G_SSR_SOLUTION_ID(co->SSRSolutionID)
     G_NO_OF_SATELLITES(nums)
     co->URADataSupplied |= 2;
@@ -906,5 +952,7 @@
     G_SSR_UPDATE_INTERVAL(co->UpdateInterval)
     G_MULTIPLE_MESSAGE_INDICATOR(mmi)
-    G_RESERVED5
+    G_SSR_IOD(co->SSRIOD)
+    G_SSR_PROVIDER_ID(co->SSRProviderID)
+    G_SSR_SOLUTION_ID(co->SSRSolutionID)
     G_NO_OF_SATELLITES(nums)
     co->HRDataSupplied |= 2;
@@ -927,5 +975,7 @@
     G_SSR_UPDATE_INTERVAL(b->UpdateInterval)
     G_MULTIPLE_MESSAGE_INDICATOR(mmi)
-    G_RESERVED5
+    G_SSR_IOD(b->SSRIOD)
+    G_SSR_PROVIDER_ID(b->SSRProviderID)
+    G_SSR_SOLUTION_ID(b->SSRSolutionID)
     G_NO_OF_SATELLITES(nums)
     for(i = 0; i < nums; ++i)
@@ -952,5 +1002,7 @@
     G_SSR_UPDATE_INTERVAL(b->UpdateInterval)
     G_MULTIPLE_MESSAGE_INDICATOR(mmi)
-    G_RESERVED5
+    G_SSR_IOD(b->SSRIOD)
+    G_SSR_PROVIDER_ID(b->SSRProviderID)
+    G_SSR_SOLUTION_ID(b->SSRSolutionID)
     G_NO_OF_SATELLITES(nums)
     for(i = 0; i < nums; ++i)
