]> code.octet-stream.net Git - m17rt/blobdiff - m17core/src/decode.rs
Successful round tripping wav -> rrc -> audio out
[m17rt] / m17core / src / decode.rs
index 9fd83cdba625f9ead891b0c5a5ceb72783521ce5..115ff63fbf9101c9507143f38ff91ac1a01e5da2 100755 (executable)
@@ -62,6 +62,7 @@ pub(crate) fn sync_burst_correlation(target: [i8; 8], samples: &[f32]) -> (f32,
     if gain < SYNC_MIN_GAIN {
         return (f32::MAX, gain, shift);
     }
     if gain < SYNC_MIN_GAIN {
         return (f32::MAX, gain, shift);
     }
+
     let mut diff = 0.0;
     for i in 0..8 {
         let sym_diff = (((samples[i * 10] - shift) / gain) - target[i] as f32).abs();
     let mut diff = 0.0;
     for i in 0..8 {
         let sym_diff = (((samples[i * 10] - shift) / gain) - target[i] as f32).abs();
@@ -94,7 +95,7 @@ pub(crate) fn parse_lsf(frame: &[f32] /* length 192 */) -> Option<LsfFrame> {
         None => return None,
     };
     debug!("full lsf: {:?}", lsf.0);
         None => return None,
     };
     debug!("full lsf: {:?}", lsf.0);
-    let crc = lsf.crc();
+    let crc = lsf.check_crc();
     debug!("recv crc: {:04X}", crc);
     debug!("destination: {:?}", lsf.destination());
     debug!("source: {:?}", lsf.source());
     debug!("recv crc: {:04X}", crc);
     debug!("destination: {:?}", lsf.destination());
     debug!("source: {:?}", lsf.source());
@@ -141,6 +142,8 @@ pub(crate) fn parse_packet(frame: &[f32] /* length 192 */) -> Option<PacketFrame
         Some(packet) => packet,
         None => return None,
     };
         Some(packet) => packet,
         None => return None,
     };
+    // TODO: the spec is inconsistent about which bit in packet[25] is EOF
+    // https://github.com/M17-Project/M17_spec/issues/147
     let final_frame = (packet[25] & 0x04) > 0;
     let number = packet[25] >> 3;
     let counter = if final_frame {
     let final_frame = (packet[25] & 0x04) > 0;
     let number = packet[25] >> 3;
     let counter = if final_frame {