libcyberradio  22.01.24
PacketTypes.h
1 /***************************************************************************
2  * \file PacketTypes.h
3  *
4  * \brief Defines data structures for handling VITA 49-formatted data packets.
5  *
6  * \author NH
7  * \copyright Copyright (c) 2015-2021 CyberRadio Solutions, Inc.
8  *
9  */
10 
11 #ifndef INCLUDED_LIBCYBERRADIO_NDR651_PACKETTYPES_H_
12 #define INCLUDED_LIBCYBERRADIO_NDR651_PACKETTYPES_H_
13 
14 #include <linux/if_ether.h>
15 #include <netinet/ip.h>
16 #include <netinet/udp.h>
17 #include <stdint.h>
18 
19 #define SAMPLES_PER_FRAME 1024
20 
21 #define VRLP 0x56524c50
22 #define VEND 0x56454e44
23 
27 namespace LibCyberRadio
28 {
33  namespace NDR651
34  {
35 
39  struct Vita49Header {
40  uint32_t frameStart;
41  uint32_t frameSize:20;
42  uint32_t frameCount:12;
43  uint16_t packetSize;
44  uint16_t packetCount:4;
45  uint16_t TSF:2;
46  uint16_t TSI:2;
47  uint16_t RSVD:2;
48  uint16_t T:1;
49  uint16_t C:1;
50  uint16_t packetType:4;
51  uint32_t streamId;
52 
57  uint32_t classId1;
64  uint32_t classId2;
65  uint32_t timeSeconds;
66  uint32_t timeFracSecMSB;
67  uint32_t timeFracSecLSB;
68  } __attribute__((packed));
69 
73  struct Payload {
74  int16_t samples[2*SAMPLES_PER_FRAME];
75  } __attribute__((packed));
76 
80  struct Vita49Trailer {
81  uint32_t frameEnd;
82  } __attribute__((packed));
83 
87  struct TxFrame {
88  struct ethhdr eth;
89  struct iphdr ip;
90  struct udphdr udp;
91  struct Vita49Header v49;
92  struct Payload payload;
94  } __attribute__((aligned));
95 
99  struct TxStatusPayload {
100  uint32_t contextIndicator:31;
101  uint32_t CI:1;
102 
103  uint32_t spaceAvailable;
104 
105  uint32_t overrunCount:7;
106  uint32_t overrunFlag:1;
107  uint32_t underrunCount:7;
108  uint32_t underrunFlag:1;
109  uint32_t packetLossCount:7;
110  uint32_t packetLossFlag:1;
111  uint32_t fullFlag:1;
112  uint32_t emptyFlag:1;
113  uint32_t RSVD:6;
114 
115  uint32_t PF:1;
116  uint32_t PE:1;
117  uint32_t PP:1;
118  uint32_t PAD:29;
119  } __attribute__((packed));;
120 
124  struct TxStatusFrame {
125  struct Vita49Header v49;
128  };
129 
130  }
131 
132 }
133 
134 #endif /* INCLUDED_LIBCYBERRADIO_NDR651_PACKETTYPES_H_ */
uint16_t packetSize
Packet size, in 32-bit words.
Definition: PacketTypes.h:43
uint32_t timeSeconds
Timestamp integer field.
Definition: PacketTypes.h:65
struct Payload payload
VITA 49 payload.
Definition: PacketTypes.h:92
Transmit status information.
Definition: PacketTypes.h:99
uint32_t underrunCount
Underrun count.
Definition: PacketTypes.h:107
struct iphdr ip
IP header.
Definition: PacketTypes.h:89
uint32_t timeFracSecMSB
Timestamp fractional field, MSW.
Definition: PacketTypes.h:66
uint16_t packetType
Packet type.
Definition: PacketTypes.h:50
uint32_t packetLossCount
Packet loss count.
Definition: PacketTypes.h:109
VITA 49 transmit-over-UDP frame information.
Definition: PacketTypes.h:87
uint32_t frameCount
Frame Count.
Definition: PacketTypes.h:42
uint32_t contextIndicator
Context indicator.
Definition: PacketTypes.h:100
uint32_t overrunFlag
Overrun flag.
Definition: PacketTypes.h:106
uint32_t underrunFlag
Underrun flag.
Definition: PacketTypes.h:108
uint32_t classId1
Class ID Field Part 1.
Definition: PacketTypes.h:57
uint32_t overrunCount
Overrun count.
Definition: PacketTypes.h:105
uint32_t packetLossFlag
Packet loss flag.
Definition: PacketTypes.h:110
VITA 49 frame header information.
Definition: PacketTypes.h:39
uint16_t packetCount
Packet counter.
Definition: PacketTypes.h:44
uint32_t spaceAvailable
Space available.
Definition: PacketTypes.h:103
struct Vita49Header v49
VITA 49 frame header.
Definition: PacketTypes.h:125
struct Vita49Trailer vend
VITA 49 frame trailer.
Definition: PacketTypes.h:93
uint16_t TSF
Timestamp fractional field format.
Definition: PacketTypes.h:45
Defines functionality for LibCyberRadio applications.
Definition: App.h:23
int16_t samples[2 *SAMPLES_PER_FRAME]
Interleaved I and Q samples.
Definition: PacketTypes.h:74
uint16_t C
Class ID field present indicator.
Definition: PacketTypes.h:49
uint32_t frameEnd
Frame end word (ASCII string "VEND")
Definition: PacketTypes.h:81
uint32_t frameSize
Frame size, in 32-bit words.
Definition: PacketTypes.h:41
uint32_t frameStart
Frame start word (ASCII string "VRLP")
Definition: PacketTypes.h:40
struct ethhdr eth
Ethernet header.
Definition: PacketTypes.h:88
Transmit status frame information.
Definition: PacketTypes.h:124
struct Vita49Trailer vend
VITA 49 frame trailer.
Definition: PacketTypes.h:127
uint16_t TSI
Timestamp integer field format.
Definition: PacketTypes.h:46
uint32_t PE
Emptying trigger.
Definition: PacketTypes.h:116
struct Vita49Header v49
VITA 49 frame header.
Definition: PacketTypes.h:91
struct udphdr udp
UDP header.
Definition: PacketTypes.h:90
uint32_t CI
Change Indicator.
Definition: PacketTypes.h:101
uint32_t classId2
Class ID Field Part 2.
Definition: PacketTypes.h:64
uint16_t T
Frame trailer present indicator.
Definition: PacketTypes.h:48
VITA 49 frame payload information.
Definition: PacketTypes.h:73
uint32_t PF
Filling trigger.
Definition: PacketTypes.h:115
uint32_t timeFracSecLSB
Timestamp fractional field, LSW.
Definition: PacketTypes.h:67
struct TxStatusPayload status
Transmit status information.
Definition: PacketTypes.h:126
uint32_t PP
Periodic notification.
Definition: PacketTypes.h:117
VITA 49 frame trailer information.
Definition: PacketTypes.h:80