From d702eeae9a72b966bae8ff52bcf71b5ddb31826c Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Fri, 21 Jun 2024 22:48:22 -0400 Subject: [PATCH] update byte packing documentation on some headers/functions for -- future generations; --- src/common/network/BaseNetwork.cpp | 156 +++++++++++++++++++++- src/common/network/RTPExtensionHeader.cpp | 1 + src/common/network/RTPExtensionHeader.h | 6 + src/common/network/RTPFNEHeader.cpp | 1 + src/common/network/RTPFNEHeader.h | 14 ++ src/common/network/RTPHeader.cpp | 1 + src/common/network/RTPHeader.h | 10 ++ src/dfsi/frames/BlockHeader.h | 4 +- src/dfsi/frames/ControlOctet.h | 2 +- src/dfsi/frames/FullRateVoice.h | 16 +-- src/dfsi/frames/MotFullRateVoice.h | 2 +- src/dfsi/frames/MotStartOfStream.h | 2 +- src/dfsi/frames/MotStartVoiceFrame.h | 2 +- src/dfsi/frames/MotVoiceHeader1.h | 2 +- src/dfsi/frames/MotVoiceHeader2.h | 2 +- src/dfsi/frames/StartOfStream.h | 2 +- 16 files changed, 205 insertions(+), 18 deletions(-) diff --git a/src/common/network/BaseNetwork.cpp b/src/common/network/BaseNetwork.cpp index aa7f9d69..5fa51d56 100644 --- a/src/common/network/BaseNetwork.cpp +++ b/src/common/network/BaseNetwork.cpp @@ -205,8 +205,21 @@ bool BaseNetwork::writePeerStatus(json::object obj) /// /// Writes a group affiliation to the network. /// +/// +/// Below is the representation of the data layout for the group affiliation +/// announcement message. The message is 6 bytes in length. +/// +/// Byte 0 1 2 3 +/// Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Source ID | Dest ID | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// /// /// +/// bool BaseNetwork::announceGroupAffiliation(uint32_t srcId, uint32_t dstId) { if (m_status != NET_STAT_RUNNING && m_status != NET_STAT_MST_RUNNING) @@ -224,6 +237,18 @@ bool BaseNetwork::announceGroupAffiliation(uint32_t srcId, uint32_t dstId) /// Writes a unit registration to the network. /// /// +/// +/// Below is the representation of the data layout for the unit registration +/// announcement message. The message is 3 bytes in length. +/// +/// Byte 0 1 2 +/// Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Source ID | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// +/// +/// bool BaseNetwork::announceUnitRegistration(uint32_t srcId) { if (m_status != NET_STAT_RUNNING && m_status != NET_STAT_MST_RUNNING) @@ -256,6 +281,7 @@ bool BaseNetwork::announceUnitDeregistration(uint32_t srcId) /// Writes a complete update of the peer affiliation list to the network. /// /// +/// bool BaseNetwork::announceAffiliationUpdate(const std::unordered_map affs) { if (m_status != NET_STAT_RUNNING && m_status != NET_STAT_MST_RUNNING) @@ -281,6 +307,7 @@ bool BaseNetwork::announceAffiliationUpdate(const std::unordered_map /// +/// bool BaseNetwork::announceSiteVCs(const std::vector peers) { if (m_status != NET_STAT_RUNNING && m_status != NET_STAT_MST_RUNNING) @@ -794,6 +821,34 @@ uint16_t BaseNetwork::pktSeq(bool reset) /// /// Creates an DMR frame message. /// +/// +/// Below is the representation of the data layout for the DMR frame +/// message header. The header is 20 bytes in length. +/// +/// Byte 0 1 2 3 +/// Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Protocol Tag (DMRD) | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Seq No. | Source ID | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Destination ID | Reserved | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Reserved | Control Flags |S|G| Data Type | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Reserved | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// +/// The data starting at offset 20 for 33 bytes if the raw DMR frame. +/// +/// DMR frame message has 2 trailing bytes: +/// +/// Byte 53 54 +/// Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | BER | RSSI | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// /// /// /// @@ -828,7 +883,7 @@ UInt8Array BaseNetwork::createDMR_Message(uint32_t& length, const uint32_t strea FLCO::E flco = data.getFLCO(); buffer[15U] |= flco == FLCO::GROUP ? 0x00U : 0x40U; // Group - uint8_t dataType = data.getDataType(); + DataType::E dataType = data.getDataType(); if (dataType == DataType::VOICE_SYNC) { buffer[15U] |= 0x10U; } @@ -857,6 +912,44 @@ UInt8Array BaseNetwork::createDMR_Message(uint32_t& length, const uint32_t strea /// /// Creates an P25 frame message header. /// +/// +/// Below is the representation of the data layout for the P25 frame +/// message header. The header is 24 bytes in length. +/// +/// Byte 0 1 2 3 +/// Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Protocol Tag (P25D) | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | LCO | Source ID | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Destination ID | System ID | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | System ID | Reserved | Control Flags | MFId | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Network ID | Reserved | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | LSD1 | LSD2 | DUID | Frame Length | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// +/// The data starting at offset 20 for variable number of bytes (DUID dependant) +/// is the P25 frame. +/// +/// If the P25 frame message is a LDU1, it contains 13 trailing bytes that +/// contain the frame type, and encryption data. +/// +/// Byte 180 181 182 183 +/// Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Frame Type | Algorithm ID | Key ID | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Message Indicator | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | | +/// +-+-+-+-+-+-+-+-+ +/// /// /// /// @@ -923,6 +1016,10 @@ void BaseNetwork::createP25_MessageHdr(uint8_t* buffer, p25::defines::DUID::E du /// /// Creates an P25 LDU1 frame message. /// +/// +/// The data packed into a P25 LDU1 frame message is near standard DFSI messaging, just instead of +/// 9 individual frames, they are packed into a single message one right after another. +/// /// /// /// @@ -1005,6 +1102,10 @@ UInt8Array BaseNetwork::createP25_LDU1Message(uint32_t& length, const p25::lc::L /// /// Creates an P25 LDU2 frame message. /// +/// +/// The data packed into a P25 LDU2 frame message is near standard DFSI messaging, just instead of +/// 9 individual frames, they are packed into a single message one right after another. +/// /// /// /// @@ -1086,6 +1187,10 @@ UInt8Array BaseNetwork::createP25_LDU2Message(uint32_t& length, const p25::lc::L /// /// Creates an P25 TDU frame message. /// +/// +/// The data packed into a P25 TDU frame message is essentially just a message header with control bytes +/// set. +/// /// /// /// @@ -1113,6 +1218,10 @@ UInt8Array BaseNetwork::createP25_TDUMessage(uint32_t& length, const p25::lc::LC /// /// Creates an P25 TSDU frame message. /// +/// +/// The data packed into a P25 TSDU frame message is essentially just a message header with the FEC encoded +/// raw TSDU data. +/// /// /// /// @@ -1147,6 +1256,29 @@ UInt8Array BaseNetwork::createP25_TSDUMessage(uint32_t& length, const p25::lc::L /// /// Writes P25 PDU frame data to the network. /// +/// +/// Below is the representation of the data layout for the P25 frame +/// message header used for a PDU. The header is 24 bytes in length. +/// +/// Byte 0 1 2 3 +/// Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Protocol Tag (P25D) | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// |C| SAP | PDU Length (Bytes) | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Reserved | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | | MFId | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Reserved | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Blk to Flw | Current Block | DUID | Frame Length | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// +/// The data starting at offset 24 for variable number of bytes (DUID dependant) +/// is the P25 frame. +/// /// /// /// @@ -1202,6 +1334,28 @@ UInt8Array BaseNetwork::createP25_PDUMessage(uint32_t& length, const p25::data:: /// /// Writes NXDN frame data to the network. /// +/// +/// Below is the representation of the data layout for the NXDN frame +/// message header. The header is 24 bytes in length. +/// +/// Byte 0 1 2 3 +/// Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Protocol Tag (NXDD) | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Message Type | Source ID | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Destination ID | Reserved | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Reserved | Control Flags |R|G| Reserved | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | Reserved | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// | | Frame Length | +/// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/// +/// The data starting at offset 24 for 48 bytes if the raw NXDN frame. +/// /// /// /// diff --git a/src/common/network/RTPExtensionHeader.cpp b/src/common/network/RTPExtensionHeader.cpp index ba8e75bf..2e60827d 100644 --- a/src/common/network/RTPExtensionHeader.cpp +++ b/src/common/network/RTPExtensionHeader.cpp @@ -20,6 +20,7 @@ using namespace network::frame; // --------------------------------------------------------------------------- // Public Class Members // --------------------------------------------------------------------------- + /// /// Initializes a new instance of the RTPExtensionHeader class. /// diff --git a/src/common/network/RTPExtensionHeader.h b/src/common/network/RTPExtensionHeader.h index 05ab1610..ecd79868 100644 --- a/src/common/network/RTPExtensionHeader.h +++ b/src/common/network/RTPExtensionHeader.h @@ -32,6 +32,12 @@ namespace network // --------------------------------------------------------------------------- // Class Declaration // Represents an RTP Extension header. + // + // Byte 0 1 2 3 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 + // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // | Payload Type | Payload Length | + // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // --------------------------------------------------------------------------- class HOST_SW_API RTPExtensionHeader { diff --git a/src/common/network/RTPFNEHeader.cpp b/src/common/network/RTPFNEHeader.cpp index d09a5c0c..52506505 100644 --- a/src/common/network/RTPFNEHeader.cpp +++ b/src/common/network/RTPFNEHeader.cpp @@ -21,6 +21,7 @@ using namespace network::frame; // --------------------------------------------------------------------------- // Public Class Members // --------------------------------------------------------------------------- + /// /// Initializes a new instance of the RTPFNEHeader class. /// diff --git a/src/common/network/RTPFNEHeader.h b/src/common/network/RTPFNEHeader.h index 29eda868..388b036f 100644 --- a/src/common/network/RTPFNEHeader.h +++ b/src/common/network/RTPFNEHeader.h @@ -106,6 +106,20 @@ namespace network // --------------------------------------------------------------------------- // Class Declaration // Represents the FNE RTP Extension header. + // + // Byte 0 1 2 3 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 + // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // | Encoded RTP Extension Header | + // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // | Payload CRC-16 | Function | Sub-function | + // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // | Stream ID | + // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // | Peer ID | + // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // | Message Length | + // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // --------------------------------------------------------------------------- class HOST_SW_API RTPFNEHeader : public RTPExtensionHeader { diff --git a/src/common/network/RTPHeader.cpp b/src/common/network/RTPHeader.cpp index f0476fd2..72d372ab 100644 --- a/src/common/network/RTPHeader.cpp +++ b/src/common/network/RTPHeader.cpp @@ -29,6 +29,7 @@ hrc::hrc_t RTPHeader::m_wcStart = hrc::hrc_t(); // --------------------------------------------------------------------------- // Public Class Members // --------------------------------------------------------------------------- + /// /// Initializes a new instance of the RTPHeader class. /// diff --git a/src/common/network/RTPHeader.h b/src/common/network/RTPHeader.h index 85023c52..5ccc86e5 100644 --- a/src/common/network/RTPHeader.h +++ b/src/common/network/RTPHeader.h @@ -34,6 +34,16 @@ namespace network // --------------------------------------------------------------------------- // Class Declaration // Represents an RTP header. + // + // Byte 0 1 2 3 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 + // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // |Ver|P|E| CSRC |M| Payload Type| Sequence | + // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // | Timestamp | + // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // | SSRC | + // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // --------------------------------------------------------------------------- class HOST_SW_API RTPHeader { diff --git a/src/dfsi/frames/BlockHeader.h b/src/dfsi/frames/BlockHeader.h index cb1ea3a0..e75798da 100644 --- a/src/dfsi/frames/BlockHeader.h +++ b/src/dfsi/frames/BlockHeader.h @@ -30,14 +30,14 @@ namespace p25 // // Compact Form // Byte 0 - // Bit 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+ // |E| BT | // +-+-+-+-+-+-+-+-+ // // Verbose Form // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // |E| BT | TSO | BL | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ diff --git a/src/dfsi/frames/ControlOctet.h b/src/dfsi/frames/ControlOctet.h index 524a9623..ea8e6309 100644 --- a/src/dfsi/frames/ControlOctet.h +++ b/src/dfsi/frames/ControlOctet.h @@ -29,7 +29,7 @@ namespace p25 // Implements a DFSI control octet packet. // // Byte 0 - // Bit 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+ // |S|C| BHC | // +-+-+-+-+-+-+-+-+ diff --git a/src/dfsi/frames/FullRateVoice.h b/src/dfsi/frames/FullRateVoice.h index 050d1253..99539028 100644 --- a/src/dfsi/frames/FullRateVoice.h +++ b/src/dfsi/frames/FullRateVoice.h @@ -32,7 +32,7 @@ namespace p25 // CAI Frames 1, 2, 10 and 11. // // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | FT | U0(b11-0) | U1(b11-0) | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -47,7 +47,7 @@ namespace p25 // CAI Frames 3 - 8. // // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | FT | U0(b11-0) | U1(b11-0) | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -64,7 +64,7 @@ namespace p25 // CAI Frames 12 - 17. // // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | FT | U0(b11-0) | U1(b11-0) | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -81,7 +81,7 @@ namespace p25 // CAI Frames 9 and 10. // // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | FT | U0(b11-0) | U1(b11-0) | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -103,7 +103,7 @@ namespace p25 // CAI Frames 1, 2, 10 and 11. // // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | FT | IMBE 1 | IMBE 2 | IMBE 3 | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -118,7 +118,7 @@ namespace p25 // CAI Frames 3 - 8. // // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | FT | IMBE 1 | IMBE 2 | IMBE 3 | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -135,7 +135,7 @@ namespace p25 // CAI Frames 12 - 17. // // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | FT | IMBE 1 | IMBE 2 | IMBE 3 | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -152,7 +152,7 @@ namespace p25 // CAI Frames 9 and 10. // // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | FT | IMBE 1 | IMBE 2 | IMBE 3 | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ diff --git a/src/dfsi/frames/MotFullRateVoice.h b/src/dfsi/frames/MotFullRateVoice.h index f49052a6..6442f924 100644 --- a/src/dfsi/frames/MotFullRateVoice.h +++ b/src/dfsi/frames/MotFullRateVoice.h @@ -31,7 +31,7 @@ namespace p25 // Implements a P25 Motorola full rate voice packet. // // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | FT | Addtl Data | Addtl Data | Addtl Data | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ diff --git a/src/dfsi/frames/MotStartOfStream.h b/src/dfsi/frames/MotStartOfStream.h index bdc05e98..05956763 100644 --- a/src/dfsi/frames/MotStartOfStream.h +++ b/src/dfsi/frames/MotStartOfStream.h @@ -30,7 +30,7 @@ namespace p25 // Implements a P25 Motorola start of stream packet. // // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | Fixed Mark | RT Mode Flag | Start/Stop | Type Flag | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ diff --git a/src/dfsi/frames/MotStartVoiceFrame.h b/src/dfsi/frames/MotStartVoiceFrame.h index fc183b2d..1813d151 100644 --- a/src/dfsi/frames/MotStartVoiceFrame.h +++ b/src/dfsi/frames/MotStartVoiceFrame.h @@ -32,7 +32,7 @@ namespace p25 // Implements a P25 Motorola voice frame 1/10 start. // // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | Encoded Motorola Start of Stream | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ diff --git a/src/dfsi/frames/MotVoiceHeader1.h b/src/dfsi/frames/MotVoiceHeader1.h index 42442b01..943d9487 100644 --- a/src/dfsi/frames/MotVoiceHeader1.h +++ b/src/dfsi/frames/MotVoiceHeader1.h @@ -31,7 +31,7 @@ namespace p25 // Implements a P25 Motorola voice header frame 1. // // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | Encoded Motorola Start of Stream | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ diff --git a/src/dfsi/frames/MotVoiceHeader2.h b/src/dfsi/frames/MotVoiceHeader2.h index 94b5f353..09c3ca7b 100644 --- a/src/dfsi/frames/MotVoiceHeader2.h +++ b/src/dfsi/frames/MotVoiceHeader2.h @@ -31,7 +31,7 @@ namespace p25 // Implements a P25 Motorola voice header frame 2. // // Byte 0 1 2 3 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | Header Control Word | // + + diff --git a/src/dfsi/frames/StartOfStream.h b/src/dfsi/frames/StartOfStream.h index 6a41bc63..6606d812 100644 --- a/src/dfsi/frames/StartOfStream.h +++ b/src/dfsi/frames/StartOfStream.h @@ -29,7 +29,7 @@ namespace p25 // Implements a P25 DFSI start of stream packet. // // Byte 0 1 2 - // Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + // Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | NID | Rsvd | Err C | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+