MCPcopy Create free account
hub / github.com/FutureSDR/FutureSDR / preamble

Method preamble

examples/rattlegram/src/decoder.rs:1154–1223  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

1152 }
1153
1154 let mut md = 0u64;
1155 for i in 0..55 {
1156 md |= if get_be_bit(&self.data, i) { 1 << i } else { 0 };
1157 }
1158 let mut cs = 0;
1159 for i in 0..16 {
1160 cs |= if get_be_bit(&self.data, i + 55) {
1161 1 << i
1162 } else {
1163 0
1164 };
1165 }
1166
1167 if Self::CRC.checksum(&(md << 9).to_le_bytes()) != cs {
1168 return DecoderResult::Fail;
1169 }
1170
1171 self.staged_mode = (md & 0xff).into();
1172 self.staged_call = md >> 8;
1173
1174 if self.staged_mode == OperationMode::Null
1175 && self.staged_call != 0
1176 && self.staged_call < 129961739795077
1177 {
1178 return DecoderResult::Ping;
1179 }
1180
1181 if self.staged_call == 0 || self.staged_call >= 129961739795077 {
1182 self.staged_call = 0;
1183 return DecoderResult::Nope;
1184 }
1185
1186 DecoderResult::Okay
1187 }
1188
1189 pub fn staged(&self, cfo: &mut f32, mode: &mut OperationMode, call: &mut [u8]) {
1190 *cfo = self.staged_cfo_rad * (Self::RATE as f32 / std::f32::consts::TAU);
1191 *mode = self.staged_mode;
1192 Self::base37(call, self.staged_call, 9);
1193 }
1194
1195 pub fn fetch(&mut self, payload: &mut [u8]) -> i32 {
1196 let (data_bits, frozen_bits) = match self.operation_mode {
1197 OperationMode::Null => return -1,
1198 OperationMode::Mode14 => (1360, &FROZEN_2048_1392),
1199 OperationMode::Mode15 => (1024, &FROZEN_2048_1056),
1200 OperationMode::Mode16 => (680, &FROZEN_2048_712),
1201 };
1202 let result = self
1203 .polar
1204 .decode(payload, &self.code, frozen_bits, data_bits);
1205 let mut scrambler = Xorshift32::new();
1206 for i in 0..data_bits / 8 {
1207 payload[i] ^= scrambler.next() as u8;
1208 }
1209 for i in data_bits / 8..170 {
1210 payload[i] = 0;
1211 }

Callers 1

processMethod · 0.45

Calls 6

get_be_bitFunction · 0.85
omegaMethod · 0.80
intoMethod · 0.80
getMethod · 0.45
nextMethod · 0.45
processMethod · 0.45

Tested by

no test coverage detected