16 #include "LibCyberRadio/Common/VitaIqSource.h" 24 size_t vita_header_size,
25 size_t vita_tail_size,
28 const std::string& host,
33 d_vita_type(vita_type),
34 d_payload_size(payload_size),
35 d_vita_header_size(vita_header_size),
36 d_vita_tail_size(vita_tail_size),
37 d_byte_swapped(byte_swapped),
38 d_iq_swapped(iq_swapped),
43 this->
debug(
"construction\n");
45 d_packet_size = (vita_type == 0 ? payload_size : vita_header_size + payload_size + vita_tail_size);
47 this->
debug(
" -- Packet Size: %d\n", d_packet_size);
56 this->
debug(
"destruction\n");
58 disconnect_udp_port();
63 int noutput_items_processed = 0;
64 bool got_data_on_loop =
false;
66 if ( d_udp_port_mtx.try_lock() )
71 got_data_on_loop =
false;
73 d_udp_port->read_data();
74 if ( d_udp_port->is_packet_ready() )
78 if ( noutput_items_processed < (
int)output_items.size() )
87 (
unsigned char*)(d_udp_port->recv_buffer),
99 (
unsigned char*)(d_udp_port->recv_buffer),
103 noutput_items_processed++;
105 d_udp_port->clear_buffer();
107 got_data_on_loop =
true;
109 }
while ( got_data_on_loop && (noutput_items_processed < noutput_items) );
110 d_udp_port_mtx.unlock();
112 return noutput_items_processed;
117 int noutput_items_processed = 0;
118 bool got_data_on_loop =
false;
120 if ( d_udp_port_mtx.try_lock() )
125 got_data_on_loop =
false;
127 d_udp_port->read_data();
128 if ( d_udp_port->is_packet_ready() )
137 (
unsigned char*)(d_udp_port->recv_buffer),
140 std::memcpy(buffer, temp.sampleData, d_payload_size);
142 noutput_items_processed++;
144 d_udp_port->clear_buffer();
146 got_data_on_loop =
true;
148 }
while ( got_data_on_loop && (noutput_items_processed < noutput_items) );
149 d_udp_port_mtx.unlock();
151 return noutput_items_processed;
156 return d_packet_size;
161 return d_byte_swapped;
171 return d_payload_size;
176 return d_vita_header_size;
181 return d_vita_tail_size;
189 void VitaIqSource::recalc_packet_size()
192 d_packet_size = (d_vita_type == 0 ? d_payload_size :
193 d_vita_header_size + d_payload_size + d_vita_tail_size);
195 disconnect_udp_port();
199 void VitaIqSource::connect_udp_port()
201 d_udp_port_mtx.lock();
203 this->
debug(
"connect udp %s/%d\n", d_host.c_str(), d_port);
204 d_udp_port =
new VitaIqUdpPort(d_host, d_port, d_packet_size,
isDebug());
205 this->
debug(
"-- connect result: %d\n", d_udp_port->connected);
206 d_udp_port_mtx.unlock();
209 void VitaIqSource::disconnect_udp_port()
211 d_udp_port_mtx.lock();
213 this->
debug(
"disconnect udp %s/%d\n", d_host.c_str(), d_port);
216 d_udp_port_mtx.unlock();
virtual int getPacketSize() const
Gets the VITA 49 or I/Q packet size.
size_t getPayloadSize() const
Gets the payload size.
virtual ~VitaIqSource()
Destroys a vita_iq_source object.
Class that supports debug output.
int getVitaType() const
Gets the VITA type.
size_t getVitaHeaderSize() const
Gets the VITA 49 frame header size.
virtual int debug(const char *format,...)
Outputs debug information.
bool isIqSwapped() const
Gets the I/Q-swapping state.
Defines functionality for LibCyberRadio applications.
VitaIqSource(const std::string &name="VitaIqSource", int vita_type=0, size_t payload_size=8192, size_t vita_header_size=0, size_t vita_tail_size=0, bool byte_swapped=false, bool iq_swapped=false, const std::string &host="0.0.0.0", unsigned short port=0, bool debug=false)
Creates a VitaIqSource object.
bool isByteSwapped() const
Gets the byte-swapping state.
size_t getVitaTailSize() const
Gets the VITA 49 frame trailer size.
virtual int getPacketsPayloadData(int noutput_items, void *buff)
Gets VITA 49 or I/Q data packets.
virtual int getPackets(int noutput_items, Vita49PacketVector &output_items)
Gets VITA 49 or I/Q data packets.
virtual bool isDebug() const
Gets whether this object produces debug output.
Decodes a VITA 49 or I/Q data packet.