Changeset 11034 in ntrip
- Timestamp:
- Sep 21, 2026, 2:06:01 PM (3 days ago)
- Location:
- trunk/BNC/src/RTCM3/clock_and_orbit
- Files:
-
- 2 edited
-
clock_orbit.h (modified) (5 diffs)
-
clock_orbit_rtcm_new.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit.h
r11031 r11034 78 78 GCOBR_NOPHASEBIASPARAMETER = -12, 79 79 GCOBR_NOVTECPARAMETER = -13, 80 GCOBR_NOANTENNAPARAMETER = -14, 80 81 /* data mismatch - data in storage does not match new data */ 81 82 GCOBR_TIMEMISMATCH = -20, … … 478 479 479 480 struct Antenna { 480 unsigned int SSRProviderID; 481 unsigned int SatelliteAntennaIOD; 482 unsigned int PhaseCenterInformationIndicator; 483 unsigned int GroupDelayInformationIndicator; 484 unsigned int NadirAngleDependentCorrectionIndicator; 485 unsigned int maximumOffNadirAngle; 486 unsigned int NadirAngleDependentCorrectionRangeExtension; 487 unsigned int SatelliteSetIndicator; 488 unsigned int SatelliteMask; 481 SatAntennaType messageType[CLOCKORBIT_SATNUM]; 482 unsigned int SSRProviderID[CLOCKORBIT_SATNUM]; 483 unsigned int SatelliteAntennaIOD[CLOCKORBIT_SATNUM]; 484 unsigned int PhaseCenterInformationIndicator[CLOCKORBIT_SATNUM]; 485 unsigned int GroupDelayInformationIndicator[CLOCKORBIT_SATNUM]; 486 unsigned int NadirAngleDependentCorrectionIndicator[CLOCKORBIT_SATNUM]; 487 unsigned int maximumOffNadirAngle[CLOCKORBIT_SATNUM]; 488 unsigned int NadirAngleDependentCorrectionRangeExtension[CLOCKORBIT_SATNUM]; 489 unsigned int SatelliteSetIndicator[CLOCKORBIT_SATNUM]; 490 uint64_t SatelliteMask[CLOCKORBIT_SATNUM]; 489 491 struct SatellitePart { 490 492 unsigned int FrequencySetIndicator; … … 496 498 } Freq[ANT_MAXFREQUENCIES]; 497 499 } Sat[CLOCKORBIT_COUNTSAT]; 498 } GNSS[CLOCKORBIT_SATNUM];500 }; 499 501 500 502 /* return size of resulting data or 0 in case of an error */ … … 598 600 #define E_NADIR_ANGLE_DEPENDENT_CORR_RANGE_EXTENSION(a) ADDBITS(4, a) /* DF+015 (new RTCM) to extend DF+021*/ 599 601 #define E_SATELLITE_SET_INDICATOR(a) ADDBITS(1, a) /* DF+016 (new RTCM) */ 602 #define E_SATELLITE_MASK(a) ADDBITS(64, a) /* DF394 */ 600 603 #define E_FREQUENCY_SET_INDICATOR(a) ADDBITS(1, a) /* DF+017 (new RTCM) */ 601 604 #define E_GNSS_FREQUENCY_MASK(a) ADDBITS(6, a) /* DF+018 (new RTCM) */ … … 843 846 /* Antenna Information*/ 844 847 #define D_SATELLITE_ANTENNA_IOD(a) GETSSRBITS(a, 6) /* DF+010 (new RTCM) */ 845 #define D_PHASE_CENTER_INFO_INDICATOR D(a)GETSSRBITS(a, 1) /* DF+011 (new RTCM) */848 #define D_PHASE_CENTER_INFO_INDICATOR(a) GETSSRBITS(a, 1) /* DF+011 (new RTCM) */ 846 849 #define D_GROUP_DELAY_INFO_INDICATOR(a) GETSSRBITS(a, 1) /* DF+012 (new RTCM) */ 847 850 #define D_NADIR_ANGLE_DEPENDENT_CORR_INDICATOR(a) GETSSRBITS(a, 1) /* DF+013 (new RTCM) */ 851 #define D_MAXIMUM_OFF_NADIR_ANGLE(a) GETSSRBITS(a, 5) /* DF+014 (new RTCM */ 848 852 #define D_NADIR_ANGLE_DEPENDENT_CORR_RANGE_EXTENSION(a) GETSSRBITS(a, 4) /* DF+015 (new RTCM) required to extend DF+021*/ 849 853 #define D_SATELLITE_SET_INDICATOR(a) GETSSRBITS(a, 1) /* DF+016 (new RTCM) */ 850 #define D_FREQUENCY_SET_INDICATOR (a) GETSSRBITS(a, 1) /* DF+017 (new RTCM) */ 851 #define D_GNSS_FREQUENCY_MASK (a) GETSSRBITS(a, 6) /* DF+018 (new RTCM) */ 854 /* GETSSRBITS cannot safely read a full 64 bits in one call: bitbuffer is 855 itself only 64 bits wide, so LOADSSRBITS's loop (which keeps whatever 856 residual (0-7) bits are already buffered from the previous field) can be 857 asked to hold residual+64 bits at once, silently shifting the residual 858 bits out before extraction. Split into two 32-bit reads instead, each of 859 which stays safely within bitbuffer's capacity. */ 860 #define D_SATELLITE_MASK(a) { \ 861 unsigned int maskHi32, maskLo32; \ 862 GETSSRBITS(maskHi32, 32) \ 863 GETSSRBITS(maskLo32, 32) \ 864 (a) = ((uint64_t)maskHi32 << 32) | maskLo32; \ 865 } /* DF394 */ 866 #define D_FREQUENCY_SET_INDICATOR(a) GETSSRBITS(a, 1) /* DF+017 (new RTCM) */ 867 #define D_GNSS_FREQUENCY_MASK(a) GETSSRBITS(a, 6) /* DF+018 (new RTCM) */ 852 868 #define D_NADIR_CORR_INDICATOR(a) GETSSRBITS(a, 1) /* DF+019 (new RTCM) */ 853 869 #define D_NADIR_CORRECTION(a) GETSSRFLOATSIGN(a, 12, 1/1000.0) /* DF+020 (new RTCM) in [m] */ -
trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp
r11032 r11034 1109 1109 } 1110 1110 } 1111 //else if (kind == COBOFS_) 1111 else if (kind == COBOFS_SATANT) { 1112 unsigned int k, satBlockIdx, numSatBlocks; 1113 unsigned int freqBlockIdx, numFreqBlocks, f; 1114 unsigned int deg; 1115 unsigned int satPositions[64], numSatPositions = 0; 1116 unsigned int freqPositions[ANT_MAXFREQUENCIES], numFreqPositions; 1117 if (!a) 1118 return GCOBR_NOANTENNAPARAMETER; 1119 a->messageType[s] = type; 1120 D_SSR_PROVIDER_ID(a->SSRProviderID[s]) 1121 D_SATELLITE_ANTENNA_IOD(a->SatelliteAntennaIOD[s]) 1122 D_PHASE_CENTER_INFO_INDICATOR(a->PhaseCenterInformationIndicator[s]) 1123 D_GROUP_DELAY_INFO_INDICATOR(a->GroupDelayInformationIndicator[s]) 1124 D_NADIR_ANGLE_DEPENDENT_CORR_INDICATOR(a->NadirAngleDependentCorrectionIndicator[s]) 1125 if (a->NadirAngleDependentCorrectionIndicator[s]) { 1126 D_MAXIMUM_OFF_NADIR_ANGLE(a->maximumOffNadirAngle[s]) 1127 D_NADIR_ANGLE_DEPENDENT_CORR_RANGE_EXTENSION(a->NadirAngleDependentCorrectionRangeExtension[s]) 1128 } 1129 else { 1130 a->maximumOffNadirAngle[s] = 0; 1131 a->NadirAngleDependentCorrectionRangeExtension[s] = 0; 1132 } 1133 D_SATELLITE_SET_INDICATOR(a->SatelliteSetIndicator[s]) 1134 D_SATELLITE_MASK(a->SatelliteMask[s]) 1135 #ifdef BNC_DEBUG_SSR 1136 fprintf(stderr, "type %d providerId %d satAntIOD %d PCInfoInd %d GDInfoInd %d NadirAngleDepCorrInd %d " 1137 " maxOffNadirAngle %d NadirAngleDepCorrRangeExt %d SatSetInd %d SatMask %llx\n", 1138 a->messageType[s], a->SSRProviderID[s], a->SatelliteAntennaIOD[s], 1139 a->PhaseCenterInformationIndicator[s], a->GroupDelayInformationIndicator[s], 1140 a->NadirAngleDependentCorrectionIndicator[s],a->maximumOffNadirAngle[s], 1141 a->NadirAngleDependentCorrectionRangeExtension[s], 1142 a->SatelliteSetIndicator[s], (unsigned long long)a->SatelliteMask[s]); 1143 #endif 1144 1145 /* DF394 satellite mask: MSB (bit 63) = satellite 1 within this system, 1146 same convention as the MSM satellite mask that shares this field. */ 1147 for (k = 0; k < 64 && satoffset[s] + k < satoffset[s + 1]; ++k) { 1148 if ((a->SatelliteMask[s] >> (63 - k)) & 1ULL) 1149 satPositions[numSatPositions++] = satoffset[s] + k; 1150 } 1151 numSatBlocks = a->SatelliteSetIndicator[s] ? (numSatPositions ? 1 : 0) : numSatPositions; 1152 1153 for (satBlockIdx = 0; satBlockIdx < numSatBlocks; ++satBlockIdx) { 1154 struct Antenna::SatellitePart satBlock; 1155 D_FREQUENCY_SET_INDICATOR(satBlock.FrequencySetIndicator) 1156 D_GNSS_FREQUENCY_MASK(satBlock.GnssFrequencyMask) 1157 1158 numFreqPositions = 0; 1159 for (k = 0; k < ANT_MAXFREQUENCIES; ++k) { 1160 if ((satBlock.GnssFrequencyMask >> k) & 1U) 1161 freqPositions[numFreqPositions++] = k; 1162 } 1163 numFreqBlocks = satBlock.FrequencySetIndicator ? (numFreqPositions ? 1 : 0) : numFreqPositions; 1164 1165 for (freqBlockIdx = 0; freqBlockIdx < numFreqBlocks; ++freqBlockIdx) { 1166 f = satBlock.FrequencySetIndicator ? freqPositions[0] : freqPositions[freqBlockIdx]; 1167 D_NADIR_CORR_INDICATOR(satBlock.Freq[f].NadirCorrectionIndicator) 1168 if (satBlock.Freq[f].NadirCorrectionIndicator) 1169 D_NADIR_CORRECTION(satBlock.Freq[f].NadirCorrection) 1170 if (a->NadirAngleDependentCorrectionIndicator[s]) { 1171 for (deg = 0; deg <= a->maximumOffNadirAngle[s] && deg < ANT_MAXNADIRDEGREES; ++deg) 1172 D_NADIR_ANGLE_DEPENDENT_CORRECTION(satBlock.Freq[f].NadirAngleCorrection[deg], 1173 a->NadirAngleDependentCorrectionRangeExtension[s]) 1174 } 1175 #ifdef BNC_DEBUG_SSR 1176 fprintf(stderr, " freq %d nadirCorrInd %d nadirCorr %d\n", 1177 f, satBlock.Freq[f].NadirCorrectionIndicator, satBlock.Freq[f].NadirCorrection); 1178 #endif 1179 if (satBlock.FrequencySetIndicator) { 1180 for (k = 1; k < numFreqPositions; ++k) 1181 satBlock.Freq[freqPositions[k]] = satBlock.Freq[f]; 1182 } 1183 } 1184 1185 if (a->SatelliteSetIndicator[s]) { 1186 for (k = 0; k < numSatPositions; ++k) 1187 a->Sat[satPositions[k]] = satBlock; 1188 } 1189 else { 1190 a->Sat[satPositions[satBlockIdx]] = satBlock; 1191 } 1192 } 1193 } 1112 1194 else { 1113 1195 /* COBOFS_SATANT / COBOFS_REGIONO: message numbers are
Note:
See TracChangeset
for help on using the changeset viewer.
