/*! \page page_rtp Radio Transport Protocols

\tableofcontents

Radio transport protocols are used to exchange samples (or other items) between host and devices.
If one were to sniff Ethernet traffic between a USRP and a PC, the packets would conform to a
radio transport protocol.

For USRP devices, three radio transport protocols are relevant:
- CHDR (used by all Generation-3 and above devices)
- Legacy CHDR. All RFNoC devices used to use this in UHD 3.x. In current versions,
  only B200 series uses it.
- VRT (the VITA Radio Transport protocol). This is used by Generation-1 and
  Generation-2 devices.

\section rtp_chdr CHDR

The CHDR protocol is described in detail in the
[RFNoC Specification](https://files.ettus.com/app_notes/RFNoC_Specification.pdf).
Please refer to the specification document for protocol format information.


\section rtp_legacy_chdr Legacy CHDR (Used by B200-series devices)

For the third generation of Ettus devices, a new type transport protocol was designed.
It reduces the complexity of the original standard and uses a fixed-length 64-Bit header
for everything except the timestamp. Because it is "compressed" into a 64-bit header, it
was dubbed CHDR (pronounced like the cheese "cheddar").

By compressing all information into a 64-bit line, the header can efficiently be parsed
in newer FPGAs, where the common streaming protocol is 64-Bit AXI. The first line in a
packet already provides all necessary information to proceed.

The form of a CHDR packet is the following:

Address (Bytes) | Length (Bytes) | Payload
----------------|----------------|----------------------------
0               | 8              | Compressed Header (CHDR)
8               | 8              | Fractional Time (Optional!)
8/16            | -              | Data

If there is no timestamp present, the data starts at address 8, otherwise, it starts at 16.

The 64 Bits in the compressed header have the following meaning:

Bits   | Meaning
-------|--------------------------------------------------
63:62  | Packet Type
61     | Has fractional time stamp (1: Yes)
60     | End-of-burst or error flag
59:48  | 12-bit sequence number
47:32  | Total packet length in Bytes
31:0   | Stream ID (SID).

The packet type is determined mainly by the first two bits, although
the EOB or error flag are also taken into consideration (the third bit does not
affect the packet type):

Bit 63 | Bit 62 | Bit 61 | Bit 60 | Packet Type
-------|--------|--------|--------|--------------
0      | 0      | x      | 0      | Data
0      | 0      | x      | 1      | Data (End-of-burst)
0      | 1      | x      | 0      | Flow Control
1      | 0      | x      | 0      | Command Packet
1      | 1      | x      | 0      | Command Response
1      | 1      | x      | 1      | Command Response (Error)


\section rtp_vrt VRT

VRT is an open protocol defined by the VITA-49 standard. It was designed for
interoperability, and to allow different device types to work with different
software stacks.

VRT is a very verbose standard, and only a subset is implemented in UHD/USRPs.
The full standard is available from the VITA website: http://www.vita.com .

Note that USRP 1 and 2 do not use VRL. Only VRT (version 49.0) is used, with some
USRP-specific modifications.

\section vrt_tools Tools

For CHDR, we provide a Wireshark dissector under tools/chdr_dissector. It can be used
for Ethernet links as well as USB (e.g., for the B210).

\section vrt_code Code

Relevant code sections for the radio transport layer are:
* uhd::transport::vrt - Namespace for radio transport protocol related functions and definitions

*/
// vim:ft=doxygen:
