]> code.octet-stream.net Git - m17rt/blobdiff - m17core/src/decode.rs
Fix timing bugs and add documentation
[m17rt] / m17core / src / decode.rs
index 86567d9a6a4d4488228d3d62f61acf7a3090ac68..d3dd7ba087fe0c59b3cdcbf0e557c4d44405cb65 100755 (executable)
@@ -3,8 +3,8 @@ use crate::{
     fec::{self, p_1, p_2, p_3},
     interleave::interleave,
     protocol::{
     fec::{self, p_1, p_2, p_3},
     interleave::interleave,
     protocol::{
-        LsfFrame, PacketFrame, PacketFrameCounter, StreamFrame, BERT_SYNC, LSF_SYNC, PACKET_SYNC,
-        STREAM_SYNC,
+        LsfFrame, PacketFrame, PacketFrameCounter, StreamFrame, BERT_SYNC, END_OF_TRANSMISSION,
+        LSF_SYNC, PACKET_SYNC, PREAMBLE, STREAM_SYNC,
     },
     random::random_xor,
 };
     },
     random::random_xor,
 };
@@ -33,6 +33,8 @@ pub(crate) enum SyncBurst {
     Bert,
     Stream,
     Packet,
     Bert,
     Stream,
     Packet,
+    Preamble,
+    EndOfTransmission,
 }
 
 impl SyncBurst {
 }
 
 impl SyncBurst {
@@ -42,6 +44,8 @@ impl SyncBurst {
             Self::Bert => BERT_SYNC,
             Self::Stream => STREAM_SYNC,
             Self::Packet => PACKET_SYNC,
             Self::Bert => BERT_SYNC,
             Self::Stream => STREAM_SYNC,
             Self::Packet => PACKET_SYNC,
+            Self::Preamble => PREAMBLE,
+            Self::EndOfTransmission => END_OF_TRANSMISSION,
         }
     }
 }
         }
     }
 }
@@ -142,8 +146,6 @@ 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] & 0x80) > 0;
     let number = (packet[25] >> 2) & 0x1f;
     let counter = if final_frame {
     let final_frame = (packet[25] & 0x80) > 0;
     let number = (packet[25] >> 2) & 0x1f;
     let counter = if final_frame {