diff --git a/apps/fm_receiver.grc b/apps/fm_receiver.grc index dfc0eef9cf201b5bd4ed011dda28187a40993829..c17180fa14b892b9b725c57d19998d4b8a8ad981 100644 --- a/apps/fm_receiver.grc +++ b/apps/fm_receiver.grc @@ -120,7 +120,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [568, 124.0] + coordinate: [576, 140.0] rotation: 0 state: true - name: audio_sink_0 @@ -137,7 +137,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [1088, 300.0] + coordinate: [944, 204.0] rotation: 0 state: true - name: bladeRF_source_0 @@ -145,7 +145,6 @@ blocks: parameters: affinity: '' alias: '' - args: '""' bb_gain0: '20' bb_gain1: '20' bias_tee0: 'False' @@ -158,7 +157,8 @@ blocks: dac: '10000' dc_offset_mode0: '0' dc_offset_mode1: '0' - fpga_image: '' + device_id: '0' + fpga_image: test freq0: freq freq1: 1e8 gain0: '10' @@ -175,16 +175,16 @@ blocks: nchan: '1' out_clk: 'False' power_monitoring: 'False' - ref_clk: '' + ref_clk: '1000000' sample_rate: samp_rate type: fc32 - xb_2000: 222M - xb_2001: auto + verbosity: silent + xb200: auto3db states: bus_sink: false bus_source: false bus_structure: null - coordinate: [16, 92.0] + coordinate: [48, 92.0] rotation: 0 state: true - name: blocks_multiply_const_vxx_0 @@ -202,7 +202,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [896, 348.0] + coordinate: [776, 300.0] rotation: 0 state: true - name: rational_resampler_xxx_0 @@ -222,7 +222,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [336, 108.0] + coordinate: [368, 124.0] rotation: 0 state: true diff --git a/grc/gen_bladerf_blocks.py b/grc/gen_bladerf_blocks.py index a5b2e99ff0335a036ec36b414a86a3a7377ffb42..27c31821abc0ff17d900a11a33cf1a346b5a7cd2 100644 --- a/grc/gen_bladerf_blocks.py +++ b/grc/gen_bladerf_blocks.py @@ -34,11 +34,11 @@ parameters: type: [fc32] hide: part -- id: args +- id: device_id label: 'Device' dtype: string - default: '""' - hide: ${'$'}{ 'none' if args else 'part'} + default: '0' + hide: ${'$'}{ 'none' if device_id else 'part'} - id: nchan label: 'Number Channels' @@ -88,6 +88,13 @@ parameters: dtype: real default: 10000 +- id: xb200 + label: 'XB-200' + dtype: enum + default: auto + options: ['auto', 'auto3db', '50M', '144M', '222M', 'custom'] + option_labels: ['auto', 'auto3db', '50M', '144M', '222M', 'custom'] + ${params} @@ -116,9 +123,17 @@ templates: import time make: | bladeRF.${sourk}( - args="numchan=" + str(${'$'}{nchan}) + "," - + "verbosity=" + '${'$'}{verbosity}' - + ${'$'}{args} + args="numchan=" + str(${'$'}{nchan}) + + ",type=" + '${'$'}{type}' + + ",bladerf=" + str(${'$'}{device_id}) + + ",verbosity=" + '${'$'}{verbosity}' + + ",fpga=" + str(${'$'}{fpga_image}) + + ",power_monitoring=" + str(${'$'}{power_monitoring}) + + ",ref_clk=" + str(${'$'}{ref_clk}) + + ",in_clk=" + '${'$'}{in_clk}' + + ",out_clk=" + str(${'$'}{out_clk}) + + ",dac=" + str(${'$'}{dac}) + + ",xb200=" + '${'$'}{xb200}' ) self.${'$'}{id}.set_sample_rate(${'$'}{sample_rate}) % for n in range(max_nchan): @@ -258,14 +273,6 @@ PARAMS_TMPL = """ default: False hide: ${'$'}{'none' if (nchan > ${n}) else 'all'} -- id: xb_200${n} - label: 'Ch${n}: XB-200' - dtype: enum - default: auto - options: ['auto', 'auto3db', '50M', '144M', '222M', 'custom'] - option_labels: [auto, auto3db, 50M, 144M, 222M, custom] - hide: ${'$'}{'none' if (nchan > ${n}) else 'all'} - % if sourk == 'source': - id: dc_offset_mode${n} label: 'Ch${n}: DC Offset Mode' diff --git a/lib/arg_helpers.h b/lib/arg_helpers.h index c2bebfce7a5a26ea361b33e5a7b09d1be7583b51..bbf84984259f868d9c2c92a7485ca118e04bc05e 100644 --- a/lib/arg_helpers.h +++ b/lib/arg_helpers.h @@ -122,46 +122,24 @@ struct is_nchan_argument inline gr::io_signature::sptr args_to_io_signature( const std::string &args ) { - size_t max_nchan = 0; + std::cout << "Args: " << args << std::endl; size_t dev_nchan = 0; std::vector< std::string > arg_list = params_to_vector( args ); - for (std::string arg : arg_list) { if ( arg.find( "numchan=" ) == 0 ) // try to parse global nchan value { pair_t pair = param_to_pair( arg ); - max_nchan = boost::lexical_cast<size_t>( pair.second ); - } - } - - arg_list.erase( std::remove_if( // remove any global nchan tokens - arg_list.begin(), - arg_list.end(), - is_nchan_argument() ), - arg_list.end() ); - - // try to parse device specific nchan values, assume 1 channel if none given - - for (std::string arg : arg_list) - { - dict_t dict = params_to_dict(arg); - if (dict.count("nchan")) - { - dev_nchan += boost::lexical_cast<size_t>( dict["nchan"] ); - } - else // no channels given via args - { - dev_nchan++; // assume one channel + dev_nchan = boost::lexical_cast<size_t>( pair.second ); + break; } } // if at least one nchan was given, perform a sanity check - if ( max_nchan && dev_nchan && max_nchan != dev_nchan ) + if ( !dev_nchan ) throw std::runtime_error("Wrong device arguments specified. Missing nchan?"); - const size_t nchan = std::max<size_t>(dev_nchan, 1); // assume at least one - return gr::io_signature::make(nchan, nchan, sizeof(gr_complex)); + return gr::io_signature::make(dev_nchan, dev_nchan, sizeof(gr_complex)); } #endif // OSMOSDR_ARG_HELPERS_H