GNU Radio's DIFI Package
The DIFI Out of Tree (OOT) Module allows users to leverage and easily use cloud resources in GNU Radio.
difi_sink_cpp_impl.h
Go to the documentation of this file.
1// -*- c++ -*-
2// Copyright (c) Microsoft Corporation and Welkin Sciences, LLC.
3// Licensed under the GNU General Public License v3.0 or later.
4// See License.txt in the project root for license information.
5
6
7
8#ifndef INCLUDED_DIFI_SINK_CPP_IMPL_H
9#define INCLUDED_DIFI_SINK_CPP_IMPL_H
10
11#include <difi/difi_sink_cpp.h>
12#include <difi/difi_common.h>
13
14
15
16namespace gr {
17 namespace difi {
18
19 class tcp_client;
20 class udp_socket;
21
22 template <class T>
24 {
25 private:
26 void pack_u64(unsigned char * start, u_int64_t val)
27 {
28 val = htobe64(val);
29 memcpy(start, &val, sizeof(val));
30 }
31 void pack_u32(unsigned char * start, u_int32_t val)
32 {
33 val = htonl(val);
34 memcpy(start, &val, sizeof(val));
35 }
36
37 void pack_u64(int8_t * start, u_int64_t val)
38 {
39 val = htobe64(val);
40 memcpy(start, &val, sizeof(val));
41 }
42 void pack_u32(int8_t * start, u_int32_t val)
43 {
44 val = htonl(val);
45 memcpy(start, &val, sizeof(val));
46 }
47
48 void process_tags(int noutput_items);
49 void pack_T(T val);
50 std::vector<int8_t> pack_data();
51 void send_context();
52 std::tuple<u_int32_t, u_int64_t> add_frac_full();
53
54 int d_stream_number;
55 u_int32_t d_full_samp;
56 static const long d_alt_oui = 0x7c386c;
57 static const long d_oui = 0x6a621e;
58 pmt::pmt_t d_context_key;
59 pmt::pmt_t d_pkt_n_key;
60 pmt::pmt_t d_static_change_key;
61 u_int32_t d_full;
62 u_int64_t d_frac;
63 u_int32_t d_data_len;
64 u_int8_t d_pkt_n;
65 int32_t d_static_bits;
66 std::vector<int8_t> d_raw;
67 std::vector<u_int8_t> d_context_raw;
68 std::vector<int8_t> d_out_buf;
69 double d_time_adj;
70 u_int64_t d_pcks_since_last_reference;
71 int d_current_buff_idx;
72 bool d_is_paired_mode;
73 u_int64_t d_contex_packet_interval;
74 u_int64_t d_packet_count;
75 u_int32_t d_context_packet_count;
76 long d_last_context_packet_sent_packet_number;
77 u_int16_t d_context_packet_size;
78 u_int32_t d_context_static_bits;
79 u_int32_t d_unpack_idx_size;
80 u_int32_t d_samples_per_packet;
81 int d_scaling_mode;
82 float d_gain;
83 gr_complex d_offset;
84 float d_max_iq;
85 float d_min_iq;
86
87 tcp_client* p_tcpsocket;
88 udp_socket* p_udpsocket;
89
90 public:
91 difi_sink_cpp_impl(u_int32_t reference_time_full, u_int64_t reference_time_frac, std::string ip_addr, uint32_t port, uint8_t socket_type, bool mode,
92 uint32_t samples_per_packet, int stream_number, u_int64_t samp_rate,
93 int context_interval, int context_pack_size, int bit_depth, int scaling, float gain, gr_complex offset, float max_iq, float min_iq);
95
96 // Where all the action really happens
97 int work(
98 int noutput_items,
99 gr_vector_const_void_star &input_items,
100 gr_vector_void_star &output_items
101 );
102 };
103
104 } // namespace difi
105} // namespace gr
106
107#endif /* INCLUDED_DIFI_SINK_CPP_IMPL_H */
108
int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
difi_sink_cpp_impl(u_int32_t reference_time_full, u_int64_t reference_time_frac, std::string ip_addr, uint32_t port, uint8_t socket_type, bool mode, uint32_t samples_per_packet, int stream_number, u_int64_t samp_rate, int context_interval, int context_pack_size, int bit_depth, int scaling, float gain, gr_complex offset, float max_iq, float min_iq)
Definition difi_sink_cpp.h:18
Definition tcp_client.h:17
Definition udp_socket.h:16
Definition difi_common.h:14
Definition difi_common.h:13