GNU Radio's CYBERRADIO Package
vita_iq_source_impl.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /***************************************************************************
3  * \file vita_iq_source_impl.h
4  *
5  * \brief Implementation of a generic VITA 49-compatible I/Q data source
6  * block.
7  *
8  * \author DA
9  * \copyright 2015 CyberRadio Solutions, Inc.
10  */
11 
12 #ifndef INCLUDED_CYBERRADIO_VITA_IQ_SOURCE_IMPL_H
13 #define INCLUDED_CYBERRADIO_VITA_IQ_SOURCE_IMPL_H
14 
16 #include <LibCyberRadio/Common/Vita49Packet.h>
17 #include <boost/asio.hpp>
18 #include <boost/format.hpp>
19 #include <boost/thread.hpp>
20 #include <stdio.h>
21 #include <string>
22 #include <sys/types.h>
23 #include <time.h>
24 #include <vector>
25 
27 
28 namespace gr {
29 namespace CyberRadio {
30 
31 /*
32  * Class that grabs channel I/Q data from a UDP port.
33  */
35 public:
36  vita_iq_udp_port(const std::string &host = "0.0.0.0", int port = 40001,
37  int packet_size = 8192, bool debug = false);
39  void read_data();
40  void clear_buffer();
41  bool is_packet_ready() const;
42 
43 protected:
44  // Debug output helper
45  int debug(const char *format, ...);
46 
47 public:
48  std::string host;
49  int port;
51  bool connected; // are we connected?
52  boost::asio::ip::udp::socket *socket;
53  boost::asio::ip::udp::endpoint endpoint;
54  boost::asio::io_service io_service;
55  char *recv_buffer;
57  bool d_debug;
58 };
59 
61 public:
62  vita_iq_source_impl(int vita_type, size_t payload_size,
63  size_t vita_header_size, size_t vita_tail_size,
64  bool byte_swapped, bool iq_swapped, float iq_scale_factor,
65  const std::string &host,
66  const std::vector<unsigned short> &port_list, bool tagged,
67  bool debug);
69  // Where all the action really happens
70  int work(int noutput_items, gr_vector_const_void_star &input_items,
71  gr_vector_void_star &output_items);
72  float get_realtime_sample_rate(int output);
73 
74 protected:
75  // Debug output helper
76  int debug(const char *format, ...);
77  // Packet size recalculator
78  void recalc_packet_size();
79  // Connect all UDP ports
80  void connect_udp_ports();
81  // Disconnect all UDP ports
82  void disconnect_udp_ports();
83  // Generate tags for an output stream from a Vita 49
84  // packet
85  void generate_vita_tags(int output, const Vita49Packet &vp);
86 
87 private:
88  int d_vita_type;
89  size_t d_payload_size; // maximum transmission unit (packet length)
90  size_t d_vita_header_size;
91  size_t d_vita_tail_size;
92  bool d_byte_swapped;
93  bool d_iq_swapped;
94  float d_iq_scale_factor;
95  int d_num_outputs;
96  std::string d_host;
97  std::vector<unsigned short> d_port_list;
98  size_t d_packet_size;
99  bool d_tagged;
100  bool d_debug;
101  std::vector<vita_iq_udp_port *> d_udp_ports;
102  boost::mutex d_udp_port_mtx;
103  std::vector<float> d_realtime_sample_rates;
104  std::vector<long> d_realtime_sample_counts;
105  time_t d_realtime_last_time;
106 };
107 
108 } // namespace CyberRadio
109 } // namespace gr
110 
111 #endif /* INCLUDED_CYBERRADIO_VITA_IQ_SOURCE_IMPL_H */
boost::asio::io_service io_service
Definition: vita_iq_source_impl.h:54
float get_realtime_sample_rate(int output)
Gets the real-time calculated sample rate for a specific output.
int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
std::string host
Definition: vita_iq_source_impl.h:48
int packet_size
Definition: vita_iq_source_impl.h:50
char * recv_buffer
Definition: vita_iq_source_impl.h:55
int port
Definition: vita_iq_source_impl.h:49
Definition: vita_iq_source_impl.h:34
int bytes_recvd
Definition: vita_iq_source_impl.h:56
boost::asio::ip::udp::endpoint endpoint
Definition: vita_iq_source_impl.h:53
Provides GNU Radio blocks.
Definition: NDR651_duc_sink_mk2.h:21
bool connected
Definition: vita_iq_source_impl.h:51
void generate_vita_tags(int output, const Vita49Packet &vp)
LibCyberRadio::Vita49Packet Vita49Packet
Definition: vita_iq_source_impl.h:26
A generic VITA 49-compatible I/Q data source block.
Definition: vita_iq_source.h:66
Definition: vita_iq_source_impl.h:60
LibCyberRadio::Vita49Packet Vita49Packet
Definition: vita_iq_source_2_impl.h:26
vita_iq_udp_port(const std::string &host="0.0.0.0", int port=40001, int packet_size=8192, bool debug=false)
vita_iq_source_impl(int vita_type, size_t payload_size, size_t vita_header_size, size_t vita_tail_size, bool byte_swapped, bool iq_swapped, float iq_scale_factor, const std::string &host, const std::vector< unsigned short > &port_list, bool tagged, bool debug)
boost::asio::ip::udp::socket * socket
Definition: vita_iq_source_impl.h:52