]> code.octet-stream.net Git - m17rt/blobdiff - m17core/src/protocol.rs
Finish implementation of SoftModulator, hopefully
[m17rt] / m17core / src / protocol.rs
index 375c3f0f8533fd56cf9a439ddf9b1bee56f0e1e7..82a5721b543752cf8369f5d00554f429beaa2efb 100755 (executable)
@@ -29,7 +29,7 @@ pub enum EncryptionType {
 pub enum Frame {
     Lsf(LsfFrame),
     Stream(StreamFrame),
-    // Packet
+    Packet(PacketFrame),
     // BERT
 }
 
@@ -158,6 +158,33 @@ pub struct StreamFrame {
     pub stream_data: [u8; 16],
 }
 
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct PacketFrame {
+    /// Application packet payload (chunk)
+    pub payload: [u8; 25],
+
+    /// Frame counter, which provides different information depending on whether this is the last frame or not.
+    pub counter: PacketFrameCounter,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub enum PacketFrameCounter {
+    /// Any packet frame that comes after the LSF and is not the final frame.
+    Frame {
+        /// Which frame this is in the superframe, from 0 to 31 inclusive.
+        ///
+        /// If a 33rd frame exists (index 32), it will be a `FinalFrame` instead.
+        ///
+        /// All 25 bytes of of `payload` are filled and valid.
+        index: usize,
+    },
+    /// The final frame in the packet superframe.
+    FinalFrame {
+        /// The number of bytes in `payload` that are filled.
+        payload_len: usize,
+    },
+}
+
 pub struct LichCollection([Option<[u8; 5]>; 6]);
 
 impl LichCollection {