9 #ifndef INCLUDED_GR_SOAPY_BLOCK_IMPL_H
10 #define INCLUDED_GR_SOAPY_BLOCK_IMPL_H
16 #include <SoapySDR/Device.hpp>
17 #include <SoapySDR/Modules.hpp>
18 #include <SoapySDR/Registry.hpp>
19 #include <SoapySDR/Version.hpp>
26 void operator()(SoapySDR::Device* d) { SoapySDR::Device::unmake(d); }
28 using device_ptr_t = std::unique_ptr<SoapySDR::Device, device_deleter>;
37 const int d_direction;
38 const std::string d_dev_str;
39 const std::string d_args;
43 std::string d_stream_args;
44 std::vector<size_t> d_channels;
45 std::string d_soapy_type;
46 std::map<pmt::pmt_t, cmd_handler_t> d_cmd_handlers;
54 void validate_channel(
size_t channel)
const;
58 const std::string& device,
59 const std::string& type,
61 const std::string& dev_args,
62 const std::string& stream_args,
63 const std::vector<std::string>& tune_args,
64 const std::vector<std::string>& other_settings);
80 }
else if (type ==
"sc16") {
82 }
else if (type ==
"sc8") {
117 const std::string&
name)
const override;
132 std::vector<std::string>
list_gains(
size_t channel)
const override;
133 void set_gain(
size_t channel,
double gain)
override;
134 void set_gain(
size_t channel,
const std::string&
name,
double gain)
override;
136 double get_gain(
size_t channel,
const std::string&
name)
const override;
184 std::string
read_sensor(
size_t channel,
const std::string& key)
const override;
191 const std::vector<unsigned>& value)
override;
192 std::vector<unsigned>
196 virtual void write_setting(
const std::string& key,
const std::string& value)
override;
197 virtual std::string
read_setting(
const std::string& key)
const override;
200 const std::string& key,
201 const std::string& value)
override;
203 const std::string& key)
const override;
206 void write_gpio(
const std::string& bank,
unsigned value)
override;
207 void write_gpio(
const std::string& bank,
unsigned value,
unsigned mask)
override;
208 unsigned read_gpio(
const std::string& bank)
const override;
210 void write_gpio_dir(
const std::string& bank,
unsigned dir,
unsigned mask)
override;
213 void write_i2c(
int addr,
const std::string& data)
override;
214 std::string
read_i2c(
int addr,
size_t num_bytes)
override;
216 unsigned transact_spi(
int addr,
unsigned data,
size_t num_bits)
override;
219 void write_uart(
const std::string& which,
const std::string& data)
override;
220 std::string
read_uart(
const std::string& which,
long timeout_us)
const override;
std::string name() const
Definition: basic_block.h:137
std::shared_ptr< io_signature > sptr
Definition: io_signature.h:34
Base block implementation for SDR devices.
Definition: block_impl.h:35
void cmd_handler_antenna(pmt::pmt_t val, size_t channel)
block_impl(block_impl &&)=delete
std::vector< std::string > list_sensors(size_t channel) const override
std::string get_hardware_key() const override
void write_gpio(const std::string &bank, unsigned value, unsigned mask) override
void cmd_handler_i2c(pmt::pmt_t val, size_t)
double get_gain(size_t channel, const std::string &name) const override
std::vector< std::string > list_sensors() const override
long long get_hardware_time(const std::string &what) const override
std::string get_antenna(size_t channel) const override
bool stop() override
Called to disable drivers, etc for i/o devices.
void write_gpio_dir(const std::string &bank, unsigned dir) override
virtual arginfo_list_t get_setting_info(size_t channel) const override
void cmd_handler_samp_rate(pmt::pmt_t val, size_t channel)
device_ptr_t d_device
Definition: block_impl.h:72
double get_frequency(size_t channel, const std::string &name) const override
void cmd_handler_iq_balance(pmt::pmt_t val, size_t channel)
std::string get_frontend_mapping() const override
std::string read_sensor(size_t channel, const std::string &key) const override
void set_gain_mode(size_t channel, bool enable) override
double get_sample_rate(size_t channel) const override
std::string read_i2c(int addr, size_t num_bytes) override
bool has_frequency_correction(size_t channel) const override
bool has_dc_offset_mode(size_t channel) const override
std::vector< std::string > list_gpio_banks() const override
void cmd_handler_gpio(pmt::pmt_t val, size_t)
arginfo_t get_sensor_info(const std::string &key) const override
void cmd_handler_gain(pmt::pmt_t val, size_t channel)
bool has_gain_mode(size_t channel) const override
virtual std::string read_setting(const std::string &key) const override
std::vector< std::string > list_time_sources() const override
void cmd_handler_registers(pmt::pmt_t val, size_t)
bool has_iq_balance_mode(size_t channel) const override
void cmd_handler_gain_mode(pmt::pmt_t val, size_t channel)
void cmd_handler_gpio_dir(pmt::pmt_t val, size_t)
void msg_handler_cmd(pmt::pmt_t msg)
void cmd_handler_hardware_time(pmt::pmt_t val, size_t)
void set_iq_balance(size_t channel, const gr_complexd &iq_balance) override
void cmd_handler_setting(pmt::pmt_t val, size_t channel)
virtual void write_setting(size_t channel, const std::string &key, const std::string &value) override
void cmd_handler_reference_clock_rate(pmt::pmt_t val, size_t)
void set_iq_balance_mode(size_t channel, bool automatic) override
void set_dc_offset_mode(size_t channel, bool automatic) override
void write_gpio(const std::string &bank, unsigned value) override
SoapySDR::Stream * d_stream
Definition: block_impl.h:73
double get_gain(size_t channel) const override
void cmd_handler_bw(pmt::pmt_t val, size_t channel)
range_list_t get_bandwidth_range(size_t channel) const override
unsigned transact_spi(int addr, unsigned data, size_t num_bits) override
std::string read_uart(const std::string &which, long timeout_us) const override
bool get_gain_mode(size_t channel) const override
block_impl(const block_impl &)=delete
gr_complexd get_iq_balance(size_t channel) const override
void cmd_handler_frequency(pmt::pmt_t val, size_t channel)
std::vector< unsigned > read_registers(const std::string &name, unsigned addr, size_t length) const override
unsigned read_gpio(const std::string &bank) const override
double get_frequency_correction(size_t channel) const override
range_t get_gain_range(size_t channel) const override
double get_frequency(size_t channel) const override
void set_time_source(const std::string &source) override
bool start() override
Called to enable drivers, etc for i/o devices.
bool get_dc_offset_mode(size_t channel) const override
range_list_t get_sample_rate_range(size_t channel) const override
bool has_dc_offset(size_t channel) const override
void write_registers(const std::string &name, unsigned addr, const std::vector< unsigned > &value) override
range_list_t get_reference_clock_rates() const override
std::vector< std::string > list_clock_sources() const override
block_impl(int direction, const std::string &device, const std::string &type, size_t nchan, const std::string &dev_args, const std::string &stream_args, const std::vector< std::string > &tune_args, const std::vector< std::string > &other_settings)
std::vector< std::string > list_frequencies(size_t channel) const override
void cmd_handler_iq_balance_mode(pmt::pmt_t val, size_t channel)
std::vector< std::string > list_register_interfaces() const override
range_list_t get_frequency_range(size_t channel) const override
block_impl & operator=(block_impl &&)=delete
arginfo_t get_sensor_info(size_t channel, const std::string &key) const override
void write_gpio_dir(const std::string &bank, unsigned dir, unsigned mask) override
unsigned read_gpio_dir(const std::string &bank) const override
void cmd_handler_dc_offset_mode(pmt::pmt_t val, size_t channel)
range_list_t get_frequency_range(size_t channel, const std::string &name) const override
void set_antenna(size_t channel, const std::string &name) override
void set_gain(size_t channel, double gain) override
std::string get_driver_key() const override
void set_frequency(size_t channel, double frequency) override
arginfo_list_t get_frequency_args_info(size_t channel) const override
range_list_t get_master_clock_rates() const override
void set_frequency_correction(size_t channel, double freq_correction) override
void cmd_handler_time_source(pmt::pmt_t val, size_t)
static io_signature::sptr args_to_io_sig(const std::string &type, size_t nchan)
Definition: block_impl.h:75
std::string read_sensor(const std::string &key) const override
void set_frequency(size_t channel, const std::string &name, double frequency) override
void set_gain(size_t channel, const std::string &name, double gain) override
virtual std::string read_setting(size_t channel, const std::string &key) const override
void set_bandwidth(size_t channel, double bandwidth) override
bool has_hardware_time(const std::string &what) const override
void set_reference_clock_rate(double rate) override
block_impl & operator=(const block_impl &)=delete
double get_reference_clock_rate() const override
std::string get_clock_source() const override
std::mutex d_device_mutex
Definition: block_impl.h:71
std::vector< std::string > list_gains(size_t channel) const override
std::vector< std::string > list_uarts() const override
gr_complexd get_dc_offset(size_t channel) const override
std::string get_time_source() const override
double get_bandwidth(size_t channel) const override
void cmd_handler_dc_offset(pmt::pmt_t val, size_t channel)
void write_uart(const std::string &which, const std::string &data) override
std::vector< std::string > list_antennas(int channel) const override
void cmd_handler_clock_source(pmt::pmt_t val, size_t)
double get_master_clock_rate() const override
void cmd_handler_uart(pmt::pmt_t val, size_t)
unsigned read_register(const std::string &name, unsigned addr) const override
bool has_iq_balance(size_t channel) const override
void cmd_handler_register(pmt::pmt_t val, size_t)
void set_master_clock_rate(double clock_rate) override
void set_hardware_time(long long timeNs, const std::string &what) override
void write_register(const std::string &name, unsigned addr, unsigned value) override
bool get_iq_balance_mode(size_t channel) const override
kwargs_t get_hardware_info() const override
void cmd_handler_master_clock_rate(pmt::pmt_t val, size_t)
void cmd_handler_frequency_correction(pmt::pmt_t val, size_t channel)
void write_i2c(int addr, const std::string &data) override
kwargs_t get_channel_info(size_t channel) const override
virtual arginfo_list_t get_setting_info() const override
void set_clock_source(const std::string &clock_source) override
range_t get_gain_range(size_t channel, const std::string &name) const override
void set_sample_rate(size_t channel, double sample_rate) override
void set_dc_offset(size_t channel, const gr_complexd &dc_offset) override
void set_frontend_mapping(const std::string &frontend_mapping) override
virtual void write_setting(const std::string &key, const std::string &value) override
Definition: gr-soapy/include/gnuradio/soapy/block.h:23
Definition: gr-soapy/include/gnuradio/soapy/source.h:41
std::complex< double > gr_complexd
Definition: gr_complex.h:16
static sptr make(int min_streams, int max_streams, int sizeof_stream_item)
Create an i/o signature.
std::unique_ptr< SoapySDR::Device, device_deleter > device_ptr_t
Definition: block_impl.h:28
SoapySDR::KwargsList kwargs_list_t
Definition: soapy_types.h:26
SoapySDR::RangeList range_list_t
Definition: soapy_types.h:29
SoapySDR::ArgInfoList arginfo_list_t
Definition: soapy_types.h:21
SoapySDR::Kwargs kwargs_t
Definition: soapy_types.h:25
SoapySDR::ArgInfo arginfo_t
Definition: soapy_types.h:20
SoapySDR::Range range_t
Definition: soapy_types.h:28
std::function< void(pmt::pmt_t, size_t)> cmd_handler_t
Definition: block_impl.h:24
boost::mutex mutex
Definition: thread.h:37
GNU Radio logging wrapper for log4cpp library (C++ port of log4j)
Definition: basic_block.h:29
PMT_API size_t length(const pmt_t &v)
Return the number of elements in v.
std::shared_ptr< pmt_base > pmt_t
typedef for shared pointer (transparent reference counting).
Definition: pmt.h:84
Definition: block_impl.h:25
void operator()(SoapySDR::Device *d)
Definition: block_impl.h:26