]> code.octet-stream.net Git - m17rt/commitdiff
Fix packet encoding
authorThomas Karpiniec <tom.karpiniec@outlook.com>
Fri, 17 Jan 2025 10:24:39 +0000 (21:24 +1100)
committerThomas Karpiniec <tom.karpiniec@outlook.com>
Fri, 17 Jan 2025 10:24:39 +0000 (21:24 +1100)
m17core/src/decode.rs
m17core/src/encode.rs

index 115ff63fbf9101c9507143f38ff91ac1a01e5da2..6c8e02bfdc1431448a50d73c7886d3d89ee625cf 100755 (executable)
@@ -144,8 +144,8 @@ pub(crate) fn parse_packet(frame: &[f32] /* length 192 */) -> Option<PacketFrame
     };
     // 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 final_frame = (packet[25] & 0x80) > 0;
+    let number = (packet[25] >> 2) & 0x1f;
     let counter = if final_frame {
         PacketFrameCounter::FinalFrame {
             payload_len: number as usize,
index 4fc742939d71c42a38d053a5109deda4da69c7ca..5e0951e3ff4a3c8c30f8b959b83720fb4adfb060 100644 (file)
@@ -31,11 +31,11 @@ pub(crate) fn encode_packet(frame: &PacketFrame) -> [f32; 192] {
     match frame.counter {
         PacketFrameCounter::Frame { index } => {
             type1[0..25].copy_from_slice(&frame.payload);
-            type1[25] = (index as u8) << 3;
+            type1[25] = (index as u8) << 2;
         }
         PacketFrameCounter::FinalFrame { payload_len } => {
             type1[0..payload_len].copy_from_slice(&frame.payload[0..payload_len]);
-            type1[25] = ((payload_len as u8) << 3) | 0x04;
+            type1[25] = ((payload_len as u8) << 2) | 0x80;
         }
     }
     let type3 = fec::encode(&type1, 206, p_3);