summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrej Rode <mail@andrejro.de>2018-06-23 17:44:58 +0200
committerAndrej Rode <mail@andrejro.de>2018-06-23 17:44:58 +0200
commit5e07e65fe9350a51cd45f8f21cfa6bf144e42e1c (patch)
treeb88dde44a0ba1f2ce1b382bbca02e80050f77a17
parent9f7e39ee5141791f93dbc1c842b1d1a49e33b068 (diff)
parente82e337d0c74fa7ea5e8b8429de29bec43818552 (diff)
Merge branch 'python3_fix' into python3_merge
-rw-r--r--cmake/Modules/GrPython.cmake1
-rw-r--r--gr-analog/grc/CMakeLists.txt4
-rw-r--r--gr-analog/grc/analog.tree.yml39
-rw-r--r--gr-analog/grc/analog_agc2_xx.block.yml53
-rw-r--r--gr-analog/grc/analog_agc2_xx.xml71
-rw-r--r--gr-analog/grc/analog_agc3_xx.block.yml57
-rw-r--r--gr-analog/grc/analog_agc3_xx.xml77
-rw-r--r--gr-analog/grc/analog_agc_xx.block.yml48
-rw-r--r--gr-analog/grc/analog_agc_xx.xml64
-rw-r--r--gr-analog/grc/analog_am_demod_cf.block.yml33
-rw-r--r--gr-analog/grc/analog_am_demod_cf.xml47
-rw-r--r--gr-analog/grc/analog_block_tree.xml81
-rw-r--r--gr-analog/grc/analog_const_source_x.block.yml28
-rw-r--r--gr-analog/grc/analog_const_source_x.xml52
-rw-r--r--gr-analog/grc/analog_cpfsk_bc.block.yml31
-rw-r--r--gr-analog/grc/analog_cpfsk_bc.xml38
-rw-r--r--gr-analog/grc/analog_ctcss_squelch_ff.block.yml45
-rw-r--r--gr-analog/grc/analog_ctcss_squelch_ff.xml80
-rw-r--r--gr-analog/grc/analog_dpll_bb.block.yml26
-rw-r--r--gr-analog/grc/analog_dpll_bb.xml31
-rw-r--r--gr-analog/grc/analog_fastnoise_source_x.block.yml45
-rw-r--r--gr-analog/grc/analog_fastnoise_source_x.xml86
-rw-r--r--gr-analog/grc/analog_feedforward_agc_cc.block.yml26
-rw-r--r--gr-analog/grc/analog_feedforward_agc_cc.xml32
-rw-r--r--gr-analog/grc/analog_fm_deemph.block.yml25
-rw-r--r--gr-analog/grc/analog_fm_deemph.xml31
-rw-r--r--gr-analog/grc/analog_fm_demod_cf.block.yml46
-rw-r--r--gr-analog/grc/analog_fm_demod_cf.xml68
-rw-r--r--gr-analog/grc/analog_fm_preemph.block.yml29
-rw-r--r--gr-analog/grc/analog_fm_preemph.xml37
-rw-r--r--gr-analog/grc/analog_fmdet_cf.block.yml31
-rw-r--r--gr-analog/grc/analog_fmdet_cf.xml45
-rw-r--r--gr-analog/grc/analog_frequency_modulator_fc.block.yml23
-rw-r--r--gr-analog/grc/analog_frequency_modulator_fc.xml26
-rw-r--r--gr-analog/grc/analog_nbfm_rx.block.yml38
-rw-r--r--gr-analog/grc/analog_nbfm_rx.xml56
-rw-r--r--gr-analog/grc/analog_nbfm_tx.block.yml42
-rw-r--r--gr-analog/grc/analog_nbfm_tx.xml64
-rw-r--r--gr-analog/grc/analog_noise_source_x.block.yml38
-rw-r--r--gr-analog/grc/analog_noise_source_x.xml77
-rw-r--r--gr-analog/grc/analog_phase_modulator_fc.block.yml23
-rw-r--r--gr-analog/grc/analog_phase_modulator_fc.xml26
-rw-r--r--gr-analog/grc/analog_pll_carriertracking_cc.block.yml31
-rw-r--r--gr-analog/grc/analog_pll_carriertracking_cc.xml38
-rw-r--r--gr-analog/grc/analog_pll_freqdet_cf.block.yml31
-rw-r--r--gr-analog/grc/analog_pll_freqdet_cf.xml38
-rw-r--r--gr-analog/grc/analog_pll_refout_cc.block.yml31
-rw-r--r--gr-analog/grc/analog_pll_refout_cc.xml38
-rw-r--r--gr-analog/grc/analog_probe_avg_mag_sqrd_x.block.yml47
-rw-r--r--gr-analog/grc/analog_probe_avg_mag_sqrd_x.xml68
-rw-r--r--gr-analog/grc/analog_pwr_squelch_xx.block.yml44
-rw-r--r--gr-analog/grc/analog_pwr_squelch_xx.xml67
-rw-r--r--gr-analog/grc/analog_quadrature_demod_cf.block.yml47
-rw-r--r--gr-analog/grc/analog_quadrature_demod_cf.xml55
-rw-r--r--gr-analog/grc/analog_rail_ff.block.yml27
-rw-r--r--gr-analog/grc/analog_rail_ff.xml54
-rw-r--r--gr-analog/grc/analog_random_source_x.block.yml47
-rw-r--r--gr-analog/grc/analog_random_source_x.xml75
-rw-r--r--gr-analog/grc/analog_random_uniform_source_x.block.yml32
-rw-r--r--gr-analog/grc/analog_random_uniform_source_x.xml55
-rw-r--r--gr-analog/grc/analog_sig_source_x.block.yml57
-rw-r--r--gr-analog/grc/analog_sig_source_x.xml109
-rw-r--r--gr-analog/grc/analog_simple_squelch_cc.block.yml27
-rw-r--r--gr-analog/grc/analog_simple_squelch_cc.xml32
-rw-r--r--gr-analog/grc/analog_standard_squelch.block.yml28
-rw-r--r--gr-analog/grc/analog_standard_squelch.xml32
-rw-r--r--gr-analog/grc/analog_wfm_rcv.block.yml25
-rw-r--r--gr-analog/grc/analog_wfm_rcv.xml33
-rw-r--r--gr-analog/grc/analog_wfm_rcv_pll.block.yml29
-rw-r--r--gr-analog/grc/analog_wfm_rcv_pll.xml37
-rw-r--r--gr-analog/grc/analog_wfm_tx.block.yml40
-rw-r--r--gr-analog/grc/analog_wfm_tx.xml55
-rw-r--r--gr-audio/grc/CMakeLists.txt4
-rw-r--r--gr-audio/grc/audio_sink.block.yml49
-rw-r--r--gr-audio/grc/audio_sink.xml87
-rw-r--r--gr-audio/grc/audio_source.block.yml49
-rw-r--r--gr-audio/grc/audio_source.xml87
-rw-r--r--gr-blocks/grc/CMakeLists.txt10
-rw-r--r--gr-blocks/grc/blocks.tree.yml171
-rw-r--r--gr-blocks/grc/blocks_abs_xx.block.yml32
-rw-r--r--gr-blocks/grc/blocks_abs_xx.xml48
-rw-r--r--gr-blocks/grc/blocks_add_const_vxx.block.yml43
-rw-r--r--gr-blocks/grc/blocks_add_const_vxx.xml67
-rw-r--r--gr-blocks/grc/blocks_add_xx.block.yml42
-rw-r--r--gr-blocks/grc/blocks_add_xx.xml63
-rw-r--r--gr-blocks/grc/blocks_and_const_xx.block.yml31
-rw-r--r--gr-blocks/grc/blocks_and_const_xx.xml48
-rw-r--r--gr-blocks/grc/blocks_and_xx.block.yml34
-rw-r--r--gr-blocks/grc/blocks_and_xx.xml48
-rw-r--r--gr-blocks/grc/blocks_argmax_xx.block.yml45
-rw-r--r--gr-blocks/grc/blocks_argmax_xx.xml61
-rw-r--r--gr-blocks/grc/blocks_block_tree.xml239
-rw-r--r--gr-blocks/grc/blocks_burst_tagger.block.yml52
-rw-r--r--gr-blocks/grc/blocks_burst_tagger.xml87
-rw-r--r--gr-blocks/grc/blocks_char_to_float.block.yml31
-rw-r--r--gr-blocks/grc/blocks_char_to_float.xml35
-rw-r--r--gr-blocks/grc/blocks_char_to_short.block.yml25
-rw-r--r--gr-blocks/grc/blocks_char_to_short.xml28
-rw-r--r--gr-blocks/grc/blocks_complex_to_arg.block.yml28
-rw-r--r--gr-blocks/grc/blocks_complex_to_arg.xml29
-rw-r--r--gr-blocks/grc/blocks_complex_to_float.block.yml34
-rw-r--r--gr-blocks/grc/blocks_complex_to_float.xml36
-rw-r--r--gr-blocks/grc/blocks_complex_to_imag.block.yml28
-rw-r--r--gr-blocks/grc/blocks_complex_to_imag.xml29
-rw-r--r--gr-blocks/grc/blocks_complex_to_interleaved_char.block.yml28
-rw-r--r--gr-blocks/grc/blocks_complex_to_interleaved_char.xml37
-rw-r--r--gr-blocks/grc/blocks_complex_to_interleaved_short.block.yml28
-rw-r--r--gr-blocks/grc/blocks_complex_to_interleaved_short.xml37
-rw-r--r--gr-blocks/grc/blocks_complex_to_mag.block.yml28
-rw-r--r--gr-blocks/grc/blocks_complex_to_mag.xml29
-rw-r--r--gr-blocks/grc/blocks_complex_to_mag_squared.block.yml28
-rw-r--r--gr-blocks/grc/blocks_complex_to_mag_squared.xml29
-rw-r--r--gr-blocks/grc/blocks_complex_to_magphase.block.yml34
-rw-r--r--gr-blocks/grc/blocks_complex_to_magphase.xml36
-rw-r--r--gr-blocks/grc/blocks_complex_to_real.block.yml29
-rw-r--r--gr-blocks/grc/blocks_complex_to_real.xml30
-rw-r--r--gr-blocks/grc/blocks_conjugate_cc.block.yml16
-rw-r--r--gr-blocks/grc/blocks_conjugate_cc.xml20
-rw-r--r--gr-blocks/grc/blocks_copy.block.yml57
-rw-r--r--gr-blocks/grc/blocks_copy.xml104
-rw-r--r--gr-blocks/grc/blocks_ctrlport_performance.block.yml17
-rw-r--r--gr-blocks/grc/blocks_ctrlport_performance.xml48
-rw-r--r--gr-blocks/grc/blocks_ctrlport_probe2_c.block.yml41
-rw-r--r--gr-blocks/grc/blocks_ctrlport_probe2_c.xml92
-rw-r--r--gr-blocks/grc/blocks_ctrlport_probe2_x.block.yml48
-rw-r--r--gr-blocks/grc/blocks_ctrlport_probe2_x.xml123
-rw-r--r--gr-blocks/grc/blocks_ctrlport_probe_c.block.yml25
-rw-r--r--gr-blocks/grc/blocks_ctrlport_probe_c.xml55
-rw-r--r--gr-blocks/grc/blocks_ctrlport_viewer.block.yml17
-rw-r--r--gr-blocks/grc/blocks_ctrlport_viewer.xml48
-rw-r--r--gr-blocks/grc/blocks_deinterleave.block.yml48
-rw-r--r--gr-blocks/grc/blocks_deinterleave.xml74
-rw-r--r--gr-blocks/grc/blocks_delay.block.yml50
-rw-r--r--gr-blocks/grc/blocks_delay.xml75
-rw-r--r--gr-blocks/grc/blocks_divide_XX.block.yml42
-rw-r--r--gr-blocks/grc/blocks_divide_XX.xml63
-rw-r--r--gr-blocks/grc/blocks_endian_swap.block.yml26
-rw-r--r--gr-blocks/grc/blocks_endian_swap.xml41
-rw-r--r--gr-blocks/grc/blocks_exponentiate_const_cci.block.yml43
-rw-r--r--gr-blocks/grc/blocks_exponentiate_const_cci.xml45
-rw-r--r--gr-blocks/grc/blocks_file_descriptor_sink.block.yml34
-rw-r--r--gr-blocks/grc/blocks_file_descriptor_sink.xml59
-rw-r--r--gr-blocks/grc/blocks_file_descriptor_source.block.yml37
-rw-r--r--gr-blocks/grc/blocks_file_descriptor_source.xml73
-rw-r--r--gr-blocks/grc/blocks_file_meta_sink.block.yml70
-rw-r--r--gr-blocks/grc/blocks_file_meta_sink.xml124
-rw-r--r--gr-blocks/grc/blocks_file_meta_source.block.yml48
-rw-r--r--gr-blocks/grc/blocks_file_meta_source.xml94
-rw-r--r--gr-blocks/grc/blocks_file_sink.block.yml51
-rw-r--r--gr-blocks/grc/blocks_file_sink.xml92
-rw-r--r--gr-blocks/grc/blocks_file_source.block.yml51
-rw-r--r--gr-blocks/grc/blocks_file_source.xml85
-rw-r--r--gr-blocks/grc/blocks_float_to_char.block.yml31
-rw-r--r--gr-blocks/grc/blocks_float_to_char.xml35
-rw-r--r--gr-blocks/grc/blocks_float_to_complex.block.yml34
-rw-r--r--gr-blocks/grc/blocks_float_to_complex.xml36
-rw-r--r--gr-blocks/grc/blocks_float_to_int.block.yml31
-rw-r--r--gr-blocks/grc/blocks_float_to_int.xml35
-rw-r--r--gr-blocks/grc/blocks_float_to_short.block.yml31
-rw-r--r--gr-blocks/grc/blocks_float_to_short.xml35
-rw-r--r--gr-blocks/grc/blocks_float_uchar.block.yml16
-rw-r--r--gr-blocks/grc/blocks_float_uchar.xml20
-rw-r--r--gr-blocks/grc/blocks_head.block.yml42
-rw-r--r--gr-blocks/grc/blocks_head.xml66
-rw-r--r--gr-blocks/grc/blocks_int_to_float.block.yml31
-rw-r--r--gr-blocks/grc/blocks_int_to_float.xml35
-rw-r--r--gr-blocks/grc/blocks_integrate_xx.block.yml35
-rw-r--r--gr-blocks/grc/blocks_integrate_xx.xml58
-rw-r--r--gr-blocks/grc/blocks_interleave.block.yml48
-rw-r--r--gr-blocks/grc/blocks_interleave.xml74
-rw-r--r--gr-blocks/grc/blocks_interleaved_char_to_complex.block.yml28
-rw-r--r--gr-blocks/grc/blocks_interleaved_char_to_complex.xml37
-rw-r--r--gr-blocks/grc/blocks_interleaved_short_to_complex.block.yml37
-rw-r--r--gr-blocks/grc/blocks_interleaved_short_to_complex.xml53
-rw-r--r--gr-blocks/grc/blocks_keep_m_in_n.block.yml49
-rw-r--r--gr-blocks/grc/blocks_keep_m_in_n.xml76
-rw-r--r--gr-blocks/grc/blocks_keep_one_in_n.block.yml44
-rw-r--r--gr-blocks/grc/blocks_keep_one_in_n.xml67
-rw-r--r--gr-blocks/grc/blocks_magphase_to_complex.block.yml34
-rw-r--r--gr-blocks/grc/blocks_magphase_to_complex.xml36
-rw-r--r--gr-blocks/grc/blocks_max_xx.block.yml47
-rw-r--r--gr-blocks/grc/blocks_max_xx.xml64
-rw-r--r--gr-blocks/grc/blocks_message_debug.block.yml19
-rw-r--r--gr-blocks/grc/blocks_message_debug.xml27
-rw-r--r--gr-blocks/grc/blocks_message_strobe.block.yml33
-rw-r--r--gr-blocks/grc/blocks_message_strobe.xml37
-rw-r--r--gr-blocks/grc/blocks_message_strobe_random.block.yml50
-rw-r--r--gr-blocks/grc/blocks_message_strobe_random.xml69
-rw-r--r--gr-blocks/grc/blocks_min_xx.block.yml47
-rw-r--r--gr-blocks/grc/blocks_min_xx.xml64
-rw-r--r--gr-blocks/grc/blocks_moving_average_xx.block.yml49
-rw-r--r--gr-blocks/grc/blocks_moving_average_xx.xml77
-rw-r--r--gr-blocks/grc/blocks_multiply_by_tag_value_cc.block.yml25
-rw-r--r--gr-blocks/grc/blocks_multiply_by_tag_value_cc.xml32
-rw-r--r--gr-blocks/grc/blocks_multiply_conjugate_cc.block.yml33
-rw-r--r--gr-blocks/grc/blocks_multiply_conjugate_cc.xml35
-rw-r--r--gr-blocks/grc/blocks_multiply_const_vxx.block.yml43
-rw-r--r--gr-blocks/grc/blocks_multiply_const_vxx.xml67
-rw-r--r--gr-blocks/grc/blocks_multiply_const_xx.block.yml41
-rw-r--r--gr-blocks/grc/blocks_multiply_const_xx.xml62
-rw-r--r--gr-blocks/grc/blocks_multiply_matrix_xx.block.yml47
-rw-r--r--gr-blocks/grc/blocks_multiply_matrix_xx.xml68
-rw-r--r--gr-blocks/grc/blocks_multiply_xx.block.yml42
-rw-r--r--gr-blocks/grc/blocks_multiply_xx.xml63
-rw-r--r--gr-blocks/grc/blocks_mute_xx.block.yml35
-rw-r--r--gr-blocks/grc/blocks_mute_xx.xml66
-rw-r--r--gr-blocks/grc/blocks_nlog10_ff.block.yml37
-rw-r--r--gr-blocks/grc/blocks_nlog10_ff.xml42
-rw-r--r--gr-blocks/grc/blocks_nop.block.yml44
-rw-r--r--gr-blocks/grc/blocks_nop.xml68
-rw-r--r--gr-blocks/grc/blocks_not_xx.block.yml25
-rw-r--r--gr-blocks/grc/blocks_not_xx.xml40
-rw-r--r--gr-blocks/grc/blocks_null_sink.block.yml43
-rw-r--r--gr-blocks/grc/blocks_null_sink.xml71
-rw-r--r--gr-blocks/grc/blocks_null_source.block.yml39
-rw-r--r--gr-blocks/grc/blocks_null_source.xml70
-rw-r--r--gr-blocks/grc/blocks_or_xx.block.yml34
-rw-r--r--gr-blocks/grc/blocks_or_xx.xml48
-rw-r--r--gr-blocks/grc/blocks_pack_k_bits_bb.block.yml24
-rw-r--r--gr-blocks/grc/blocks_pack_k_bits_bb.xml30
-rw-r--r--gr-blocks/grc/blocks_packed_to_unpacked_xx.block.yml44
-rw-r--r--gr-blocks/grc/blocks_packed_to_unpacked_xx.xml68
-rw-r--r--gr-blocks/grc/blocks_patterned_interleaver.block.yml42
-rw-r--r--gr-blocks/grc/blocks_patterned_interleaver.xml66
-rw-r--r--gr-blocks/grc/blocks_pdu_filter.block.yml40
-rw-r--r--gr-blocks/grc/blocks_pdu_filter.xml52
-rw-r--r--gr-blocks/grc/blocks_pdu_remove.block.yml28
-rw-r--r--gr-blocks/grc/blocks_pdu_remove.xml30
-rw-r--r--gr-blocks/grc/blocks_pdu_set.block.yml33
-rw-r--r--gr-blocks/grc/blocks_pdu_set.xml37
-rw-r--r--gr-blocks/grc/blocks_pdu_to_tagged_stream.block.yml29
-rw-r--r--gr-blocks/grc/blocks_pdu_to_tagged_stream.xml46
-rw-r--r--gr-blocks/grc/blocks_peak_detector2_fb.block.yml38
-rw-r--r--gr-blocks/grc/blocks_peak_detector2_fb.xml46
-rw-r--r--gr-blocks/grc/blocks_peak_detector_xb.block.yml47
-rw-r--r--gr-blocks/grc/blocks_peak_detector_xb.xml68
-rw-r--r--gr-blocks/grc/blocks_plateau_detector_fb.block.yml25
-rw-r--r--gr-blocks/grc/blocks_plateau_detector_fb.xml26
-rw-r--r--gr-blocks/grc/blocks_probe_rate.block.yml44
-rw-r--r--gr-blocks/grc/blocks_probe_rate.xml71
-rw-r--r--gr-blocks/grc/blocks_probe_signal_vx.block.yml35
-rw-r--r--gr-blocks/grc/blocks_probe_signal_vx.xml59
-rw-r--r--gr-blocks/grc/blocks_probe_signal_x.block.yml26
-rw-r--r--gr-blocks/grc/blocks_probe_signal_x.xml51
-rw-r--r--gr-blocks/grc/blocks_random_pdu.block.yml38
-rw-r--r--gr-blocks/grc/blocks_random_pdu.xml47
-rw-r--r--gr-blocks/grc/blocks_regenerate_bb.block.yml25
-rw-r--r--gr-blocks/grc/blocks_regenerate_bb.xml32
-rw-r--r--gr-blocks/grc/blocks_repack_bits_bb.block.yml47
-rw-r--r--gr-blocks/grc/blocks_repack_bits_bb.xml70
-rw-r--r--gr-blocks/grc/blocks_repeat.block.yml41
-rw-r--r--gr-blocks/grc/blocks_repeat.xml65
-rw-r--r--gr-blocks/grc/blocks_rms_xx.block.yml31
-rw-r--r--gr-blocks/grc/blocks_rms_xx.xml42
-rw-r--r--gr-blocks/grc/blocks_rotator_cc.block.yml24
-rw-r--r--gr-blocks/grc/blocks_rotator_cc.xml27
-rw-r--r--gr-blocks/grc/blocks_sample_and_hold_xx.block.yml28
-rw-r--r--gr-blocks/grc/blocks_sample_and_hold_xx.xml49
-rw-r--r--gr-blocks/grc/blocks_short_to_char.block.yml25
-rw-r--r--gr-blocks/grc/blocks_short_to_char.xml28
-rw-r--r--gr-blocks/grc/blocks_short_to_float.block.yml31
-rw-r--r--gr-blocks/grc/blocks_short_to_float.xml35
-rw-r--r--gr-blocks/grc/blocks_skiphead.block.yml40
-rw-r--r--gr-blocks/grc/blocks_skiphead.xml65
-rw-r--r--gr-blocks/grc/blocks_socket_pdu.block.yml63
-rw-r--r--gr-blocks/grc/blocks_socket_pdu.xml88
-rw-r--r--gr-blocks/grc/blocks_stream_mux.block.yml48
-rw-r--r--gr-blocks/grc/blocks_stream_mux.xml75
-rw-r--r--gr-blocks/grc/blocks_stream_to_streams.block.yml43
-rw-r--r--gr-blocks/grc/blocks_stream_to_streams.xml67
-rw-r--r--gr-blocks/grc/blocks_stream_to_tagged_stream.block.yml43
-rw-r--r--gr-blocks/grc/blocks_stream_to_tagged_stream.xml66
-rw-r--r--gr-blocks/grc/blocks_stream_to_vector.block.yml42
-rw-r--r--gr-blocks/grc/blocks_stream_to_vector.xml66
-rw-r--r--gr-blocks/grc/blocks_stream_to_vector_decimator.block.yml47
-rw-r--r--gr-blocks/grc/blocks_stream_to_vector_decimator.xml77
-rw-r--r--gr-blocks/grc/blocks_streams_to_stream.block.yml43
-rw-r--r--gr-blocks/grc/blocks_streams_to_stream.xml67
-rw-r--r--gr-blocks/grc/blocks_streams_to_vector.block.yml43
-rw-r--r--gr-blocks/grc/blocks_streams_to_vector.xml67
-rw-r--r--gr-blocks/grc/blocks_stretch_ff.block.yml28
-rw-r--r--gr-blocks/grc/blocks_stretch_ff.xml34
-rw-r--r--gr-blocks/grc/blocks_sub_xx.block.yml42
-rw-r--r--gr-blocks/grc/blocks_sub_xx.xml63
-rw-r--r--gr-blocks/grc/blocks_tag_debug.block.yml53
-rw-r--r--gr-blocks/grc/blocks_tag_debug.xml88
-rw-r--r--gr-blocks/grc/blocks_tag_gate.block.yml50
-rw-r--r--gr-blocks/grc/blocks_tag_gate.xml78
-rw-r--r--gr-blocks/grc/blocks_tag_object.block.yml44
-rw-r--r--gr-blocks/grc/blocks_tag_object.xml52
-rw-r--r--gr-blocks/grc/blocks_tag_share.block.yml48
-rw-r--r--gr-blocks/grc/blocks_tag_share.xml96
-rw-r--r--gr-blocks/grc/blocks_tagged_file_sink.block.yml35
-rw-r--r--gr-blocks/grc/blocks_tagged_file_sink.xml60
-rw-r--r--gr-blocks/grc/blocks_tagged_stream_align.block.yml37
-rw-r--r--gr-blocks/grc/blocks_tagged_stream_align.xml59
-rw-r--r--gr-blocks/grc/blocks_tagged_stream_multiply_length.block.yml46
-rw-r--r--gr-blocks/grc/blocks_tagged_stream_multiply_length.xml70
-rw-r--r--gr-blocks/grc/blocks_tagged_stream_mux.block.yml46
-rw-r--r--gr-blocks/grc/blocks_tagged_stream_mux.xml71
-rw-r--r--gr-blocks/grc/blocks_tagged_stream_to_pdu.block.yml30
-rw-r--r--gr-blocks/grc/blocks_tagged_stream_to_pdu.xml47
-rw-r--r--gr-blocks/grc/blocks_tags_strobe.block.yml49
-rw-r--r--gr-blocks/grc/blocks_tags_strobe.xml76
-rw-r--r--gr-blocks/grc/blocks_tcp_server_sink.block.yml42
-rw-r--r--gr-blocks/grc/blocks_tcp_server_sink.xml77
-rw-r--r--gr-blocks/grc/blocks_test_tag_variable_rate_ff.block.yml29
-rw-r--r--gr-blocks/grc/blocks_test_tag_variable_rate_ff.xml47
-rw-r--r--gr-blocks/grc/blocks_threshold_ff.block.yml33
-rw-r--r--gr-blocks/grc/blocks_threshold_ff.xml40
-rw-r--r--gr-blocks/grc/blocks_throttle.block.yml48
-rw-r--r--gr-blocks/grc/blocks_throttle.xml74
-rw-r--r--gr-blocks/grc/blocks_transcendental.block.yml30
-rw-r--r--gr-blocks/grc/blocks_transcendental.xml41
-rw-r--r--gr-blocks/grc/blocks_tuntap_pdu.block.yml34
-rw-r--r--gr-blocks/grc/blocks_tuntap_pdu.xml48
-rw-r--r--gr-blocks/grc/blocks_uchar_to_float.block.yml16
-rw-r--r--gr-blocks/grc/blocks_uchar_to_float.xml20
-rw-r--r--gr-blocks/grc/blocks_udp_sink.block.yml45
-rw-r--r--gr-blocks/grc/blocks_udp_sink.xml76
-rw-r--r--gr-blocks/grc/blocks_udp_source.block.yml48
-rw-r--r--gr-blocks/grc/blocks_udp_source.xml79
-rw-r--r--gr-blocks/grc/blocks_unpack_k_bits_bb.block.yml21
-rw-r--r--gr-blocks/grc/blocks_unpack_k_bits_bb.xml25
-rw-r--r--gr-blocks/grc/blocks_unpacked_to_packed_xx.block.yml44
-rw-r--r--gr-blocks/grc/blocks_unpacked_to_packed_xx.xml68
-rw-r--r--gr-blocks/grc/blocks_vco_c.block.yml27
-rw-r--r--gr-blocks/grc/blocks_vco_c.xml35
-rw-r--r--gr-blocks/grc/blocks_vco_f.block.yml27
-rw-r--r--gr-blocks/grc/blocks_vco_f.xml35
-rw-r--r--gr-blocks/grc/blocks_vector_insert_x.block.yml44
-rw-r--r--gr-blocks/grc/blocks_vector_insert_x.xml80
-rw-r--r--gr-blocks/grc/blocks_vector_sink_x.block.yml30
-rw-r--r--gr-blocks/grc/blocks_vector_sink_x.xml54
-rw-r--r--gr-blocks/grc/blocks_vector_source_x.block.yml47
-rw-r--r--gr-blocks/grc/blocks_vector_source_x.xml86
-rw-r--r--gr-blocks/grc/blocks_vector_to_stream.block.yml42
-rw-r--r--gr-blocks/grc/blocks_vector_to_stream.xml66
-rw-r--r--gr-blocks/grc/blocks_vector_to_streams.block.yml43
-rw-r--r--gr-blocks/grc/blocks_vector_to_streams.xml67
-rw-r--r--gr-blocks/grc/blocks_wavfile_sink.block.yml36
-rw-r--r--gr-blocks/grc/blocks_wavfile_sink.xml43
-rw-r--r--gr-blocks/grc/blocks_wavfile_source.block.yml32
-rw-r--r--gr-blocks/grc/blocks_wavfile_source.xml44
-rw-r--r--gr-blocks/grc/blocks_xor_xx.block.yml34
-rw-r--r--gr-blocks/grc/blocks_xor_xx.xml48
-rw-r--r--gr-blocks/grc/xmlrpc_client.block.yml30
-rw-r--r--gr-blocks/grc/xmlrpc_client.xml42
-rw-r--r--gr-blocks/grc/xmlrpc_server.block.yml34
-rw-r--r--gr-blocks/grc/xmlrpc_server.xml41
-rw-r--r--gr-channels/grc/CMakeLists.txt4
-rw-r--r--gr-channels/grc/channels.tree.yml20
-rw-r--r--gr-channels/grc/channels_amp_bal.block.yml24
-rw-r--r--gr-channels/grc/channels_amp_bal.xml27
-rw-r--r--gr-channels/grc/channels_block_tree.xml55
-rw-r--r--gr-channels/grc/channels_cfo_model.block.yml44
-rw-r--r--gr-channels/grc/channels_cfo_model.xml52
-rw-r--r--gr-channels/grc/channels_channel_model.block.yml56
-rw-r--r--gr-channels/grc/channels_channel_model.xml79
-rw-r--r--gr-channels/grc/channels_channel_model2.block.yml56
-rw-r--r--gr-channels/grc/channels_channel_model2.xml79
-rw-r--r--gr-channels/grc/channels_conj_fs_iqcorr.block.yml29
-rw-r--r--gr-channels/grc/channels_conj_fs_iqcorr.xml34
-rw-r--r--gr-channels/grc/channels_distortion_2_gen.block.yml24
-rw-r--r--gr-channels/grc/channels_distortion_2_gen.xml27
-rw-r--r--gr-channels/grc/channels_distortion_3_gen.block.yml24
-rw-r--r--gr-channels/grc/channels_distortion_3_gen.xml27
-rw-r--r--gr-channels/grc/channels_dynamic_channel_model.block.yml98
-rw-r--r--gr-channels/grc/channels_dynamic_channel_model.xml136
-rw-r--r--gr-channels/grc/channels_fading_model.block.yml57
-rw-r--r--gr-channels/grc/channels_fading_model.xml75
-rw-r--r--gr-channels/grc/channels_impairments.block.yml60
-rw-r--r--gr-channels/grc/channels_impairments.xml76
-rw-r--r--gr-channels/grc/channels_iqbal_gen.block.yml29
-rw-r--r--gr-channels/grc/channels_iqbal_gen.xml34
-rw-r--r--gr-channels/grc/channels_phase_bal.block.yml24
-rw-r--r--gr-channels/grc/channels_phase_bal.xml27
-rw-r--r--gr-channels/grc/channels_phase_noise_gen.block.yml29
-rw-r--r--gr-channels/grc/channels_phase_noise_gen.xml34
-rw-r--r--gr-channels/grc/channels_quantizer.block.yml24
-rw-r--r--gr-channels/grc/channels_quantizer.xml27
-rw-r--r--gr-channels/grc/channels_selective_fading_model.block.yml87
-rw-r--r--gr-channels/grc/channels_selective_fading_model.xml109
-rw-r--r--gr-channels/grc/channels_selective_fading_model2.block.yml100
-rw-r--r--gr-channels/grc/channels_selective_fading_model2.xml128
-rw-r--r--gr-channels/grc/channels_sro_model.block.yml44
-rw-r--r--gr-channels/grc/channels_sro_model.xml52
-rw-r--r--gr-digital/grc/CMakeLists.txt4
-rw-r--r--gr-digital/grc/digital.tree.yml85
-rw-r--r--gr-digital/grc/digital_additive_scrambler_bb.block.yml43
-rw-r--r--gr-digital/grc/digital_additive_scrambler_bb.xml56
-rw-r--r--gr-digital/grc/digital_binary_slicer_fb.block.yml16
-rw-r--r--gr-digital/grc/digital_binary_slicer_fb.xml20
-rw-r--r--gr-digital/grc/digital_block_tree.xml134
-rw-r--r--gr-digital/grc/digital_burst_shaper.block.yml50
-rw-r--r--gr-digital/grc/digital_burst_shaper.xml71
-rw-r--r--gr-digital/grc/digital_chunks_to_symbols.block.yml53
-rw-r--r--gr-digital/grc/digital_chunks_to_symbols.xml78
-rw-r--r--gr-digital/grc/digital_clock_recovery_mm_xx.block.yml51
-rw-r--r--gr-digital/grc/digital_clock_recovery_mm_xx.xml69
-rw-r--r--gr-digital/grc/digital_cma_equalizer_cc.block.yml33
-rw-r--r--gr-digital/grc/digital_cma_equalizer_cc.xml42
-rw-r--r--gr-digital/grc/digital_constellation.block.yml72
-rw-r--r--gr-digital/grc/digital_constellation.xml113
-rw-r--r--gr-digital/grc/digital_constellation_decoder_cb.block.yml21
-rw-r--r--gr-digital/grc/digital_constellation_decoder_cb.xml25
-rw-r--r--gr-digital/grc/digital_constellation_modulator.block.yml58
-rw-r--r--gr-digital/grc/digital_constellation_modulator.xml111
-rw-r--r--gr-digital/grc/digital_constellation_receiver_cb.block.yml62
-rw-r--r--gr-digital/grc/digital_constellation_receiver_cb.xml92
-rw-r--r--gr-digital/grc/digital_constellation_rect.block.yml65
-rw-r--r--gr-digital/grc/digital_constellation_rect.xml89
-rw-r--r--gr-digital/grc/digital_constellation_soft_decoder_cf.block.yml21
-rw-r--r--gr-digital/grc/digital_constellation_soft_decoder_cf.xml25
-rw-r--r--gr-digital/grc/digital_corr_est_cc.block.yml38
-rw-r--r--gr-digital/grc/digital_corr_est_cc.xml50
-rw-r--r--gr-digital/grc/digital_correlate_access_code_bb.block.yml25
-rw-r--r--gr-digital/grc/digital_correlate_access_code_bb.xml31
-rw-r--r--gr-digital/grc/digital_correlate_access_code_tag_xx.block.yml40
-rw-r--r--gr-digital/grc/digital_correlate_access_code_tag_xx.xml55
-rw-r--r--gr-digital/grc/digital_correlate_access_code_xx_ts.block.yml37
-rw-r--r--gr-digital/grc/digital_correlate_access_code_xx_ts.xml58
-rw-r--r--gr-digital/grc/digital_costas_loop_cc.block.yml48
-rw-r--r--gr-digital/grc/digital_costas_loop_cc.xml74
-rw-r--r--gr-digital/grc/digital_cpmmod_bc.block.yml40
-rw-r--r--gr-digital/grc/digital_cpmmod_bc.xml69
-rw-r--r--gr-digital/grc/digital_crc32_async_bb.block.yml25
-rw-r--r--gr-digital/grc/digital_crc32_async_bb.xml32
-rw-r--r--gr-digital/grc/digital_crc32_bb.block.yml33
-rw-r--r--gr-digital/grc/digital_crc32_bb.xml47
-rw-r--r--gr-digital/grc/digital_descrambler_bb.block.yml30
-rw-r--r--gr-digital/grc/digital_descrambler_bb.xml38
-rw-r--r--gr-digital/grc/digital_diff_decoder_bb.block.yml21
-rw-r--r--gr-digital/grc/digital_diff_decoder_bb.xml25
-rw-r--r--gr-digital/grc/digital_diff_encoder_bb.block.yml21
-rw-r--r--gr-digital/grc/digital_diff_encoder_bb.xml25
-rw-r--r--gr-digital/grc/digital_diff_phasor_cc.block.yml16
-rw-r--r--gr-digital/grc/digital_diff_phasor_cc.xml20
-rw-r--r--gr-digital/grc/digital_dxpsk_demod.block.yml75
-rw-r--r--gr-digital/grc/digital_dxpsk_demod.xml154
-rw-r--r--gr-digital/grc/digital_dxpsk_mod.block.yml52
-rw-r--r--gr-digital/grc/digital_dxpsk_mod.xml117
-rw-r--r--gr-digital/grc/digital_fll_band_edge_cc.block.yml53
-rw-r--r--gr-digital/grc/digital_fll_band_edge_cc.xml70
-rw-r--r--gr-digital/grc/digital_framer_sink_1.block.yml17
-rw-r--r--gr-digital/grc/digital_framer_sink_1.xml21
-rw-r--r--gr-digital/grc/digital_gfsk_demod.block.yml58
-rw-r--r--gr-digital/grc/digital_gfsk_demod.xml95
-rw-r--r--gr-digital/grc/digital_gfsk_mod.block.yml45
-rw-r--r--gr-digital/grc/digital_gfsk_mod.xml74
-rw-r--r--gr-digital/grc/digital_glfsr_source_x.block.yml37
-rw-r--r--gr-digital/grc/digital_glfsr_source_x.xml61
-rw-r--r--gr-digital/grc/digital_gmsk_demod.block.yml54
-rw-r--r--gr-digital/grc/digital_gmsk_demod.xml88
-rw-r--r--gr-digital/grc/digital_gmsk_mod.block.yml41
-rw-r--r--gr-digital/grc/digital_gmsk_mod.xml67
-rw-r--r--gr-digital/grc/digital_gmskmod_bc.block.yml30
-rw-r--r--gr-digital/grc/digital_gmskmod_bc.xml38
-rw-r--r--gr-digital/grc/digital_hdlc_deframer_bp.block.yml26
-rw-r--r--gr-digital/grc/digital_hdlc_deframer_bp.xml27
-rw-r--r--gr-digital/grc/digital_hdlc_framer_pb.block.yml21
-rw-r--r--gr-digital/grc/digital_hdlc_framer_pb.xml20
-rw-r--r--gr-digital/grc/digital_header_payload_demux.block.yml85
-rw-r--r--gr-digital/grc/digital_header_payload_demux.xml138
-rw-r--r--gr-digital/grc/digital_kurtotic_equalizer_cc.block.yml26
-rw-r--r--gr-digital/grc/digital_kurtotic_equalizer_cc.xml31
-rw-r--r--gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml32
-rw-r--r--gr-digital/grc/digital_lms_dd_equalizer_cc.xml41
-rw-r--r--gr-digital/grc/digital_map_bb.block.yml21
-rw-r--r--gr-digital/grc/digital_map_bb.xml25
-rw-r--r--gr-digital/grc/digital_modulate_vector.block.yml22
-rw-r--r--gr-digital/grc/digital_modulate_vector.xml34
-rw-r--r--gr-digital/grc/digital_mpsk_snr_est_cc.block.yml35
-rw-r--r--gr-digital/grc/digital_mpsk_snr_est_cc.xml56
-rw-r--r--gr-digital/grc/digital_msk_timing_recovery_cc.block.yml42
-rw-r--r--gr-digital/grc/digital_msk_timing_recovery_cc.xml49
-rw-r--r--gr-digital/grc/digital_ofdm_carrier_allocator_cvc.block.yml44
-rw-r--r--gr-digital/grc/digital_ofdm_carrier_allocator_cvc.xml51
-rw-r--r--gr-digital/grc/digital_ofdm_chanest_vcvc.block.yml53
-rw-r--r--gr-digital/grc/digital_ofdm_chanest_vcvc.xml64
-rw-r--r--gr-digital/grc/digital_ofdm_cyclic_prefixer.block.yml38
-rw-r--r--gr-digital/grc/digital_ofdm_cyclic_prefixer.xml67
-rw-r--r--gr-digital/grc/digital_ofdm_frame_equalizer_vcvc.block.yml46
-rw-r--r--gr-digital/grc/digital_ofdm_frame_equalizer_vcvc.xml58
-rw-r--r--gr-digital/grc/digital_ofdm_rx.block.yml95
-rw-r--r--gr-digital/grc/digital_ofdm_rx.xml190
-rw-r--r--gr-digital/grc/digital_ofdm_serializer_vcc.block.yml51
-rw-r--r--gr-digital/grc/digital_ofdm_serializer_vcc.xml60
-rw-r--r--gr-digital/grc/digital_ofdm_sync_sc_cfb.block.yml35
-rw-r--r--gr-digital/grc/digital_ofdm_sync_sc_cfb.xml44
-rw-r--r--gr-digital/grc/digital_ofdm_tx.block.yml100
-rw-r--r--gr-digital/grc/digital_ofdm_tx.xml196
-rw-r--r--gr-digital/grc/digital_packet_headergenerator_bb.block.yml27
-rw-r--r--gr-digital/grc/digital_packet_headergenerator_bb.xml26
-rw-r--r--gr-digital/grc/digital_packet_headergenerator_bb_default.block.yml25
-rw-r--r--gr-digital/grc/digital_packet_headergenerator_bb_default.xml26
-rw-r--r--gr-digital/grc/digital_packet_headerparser_b.block.yml21
-rw-r--r--gr-digital/grc/digital_packet_headerparser_b.xml19
-rw-r--r--gr-digital/grc/digital_packet_headerparser_b_default.block.yml25
-rw-r--r--gr-digital/grc/digital_packet_headerparser_b_default.xml26
-rw-r--r--gr-digital/grc/digital_packet_sink.block.yml24
-rw-r--r--gr-digital/grc/digital_packet_sink.xml32
-rw-r--r--gr-digital/grc/digital_pfb_clock_sync.block.yml69
-rw-r--r--gr-digital/grc/digital_pfb_clock_sync.xml97
-rw-r--r--gr-digital/grc/digital_pn_correlator_cc.block.yml29
-rw-r--r--gr-digital/grc/digital_pn_correlator_cc.xml37
-rw-r--r--gr-digital/grc/digital_probe_density_b.block.yml24
-rw-r--r--gr-digital/grc/digital_probe_density_b.xml29
-rw-r--r--gr-digital/grc/digital_probe_mpsk_snr_est_c.block.yml42
-rw-r--r--gr-digital/grc/digital_probe_mpsk_snr_est_c.xml67
-rw-r--r--gr-digital/grc/digital_protocol_formatter_async.block.yml26
-rw-r--r--gr-digital/grc/digital_protocol_formatter_async.xml33
-rw-r--r--gr-digital/grc/digital_protocol_formatter_bb.block.yml25
-rw-r--r--gr-digital/grc/digital_protocol_formatter_bb.xml32
-rw-r--r--gr-digital/grc/digital_protocol_parser_b.block.yml22
-rw-r--r--gr-digital/grc/digital_protocol_parser_b.xml25
-rw-r--r--gr-digital/grc/digital_psk_demod.block.yml79
-rw-r--r--gr-digital/grc/digital_psk_demod.xml146
-rw-r--r--gr-digital/grc/digital_psk_mod.block.yml65
-rw-r--r--gr-digital/grc/digital_psk_mod.xml126
-rw-r--r--gr-digital/grc/digital_qam_demod.block.yml80
-rw-r--r--gr-digital/grc/digital_qam_demod.xml147
-rw-r--r--gr-digital/grc/digital_qam_mod.block.yml65
-rw-r--r--gr-digital/grc/digital_qam_mod.xml126
-rw-r--r--gr-digital/grc/digital_scrambler_bb.block.yml30
-rw-r--r--gr-digital/grc/digital_scrambler_bb.xml38
-rw-r--r--gr-digital/grc/digital_simple_correlator.block.yml21
-rw-r--r--gr-digital/grc/digital_simple_correlator.xml25
-rw-r--r--gr-digital/grc/digital_simple_framer.block.yml21
-rw-r--r--gr-digital/grc/digital_simple_framer.xml25
-rw-r--r--gr-digital/grc/digital_symbol_sync_xx.block.yml108
-rw-r--r--gr-digital/grc/digital_symbol_sync_xx.xml207
-rw-r--r--gr-digital/grc/variable_header_format_default.block.yml25
-rw-r--r--gr-digital/grc/variable_header_format_default.xml42
-rw-r--r--gr-dtv/grc/CMakeLists.txt109
-rw-r--r--gr-dtv/grc/dtv.tree.yml62
-rw-r--r--gr-dtv/grc/dtv_atsc_deinterleaver.block.yml18
-rw-r--r--gr-dtv/grc/dtv_atsc_deinterleaver.xml25
-rw-r--r--gr-dtv/grc/dtv_atsc_depad.block.yml17
-rw-r--r--gr-dtv/grc/dtv_atsc_depad.xml24
-rw-r--r--gr-dtv/grc/dtv_atsc_derandomizer.block.yml18
-rw-r--r--gr-dtv/grc/dtv_atsc_derandomizer.xml25
-rw-r--r--gr-dtv/grc/dtv_atsc_equalizer.block.yml18
-rw-r--r--gr-dtv/grc/dtv_atsc_equalizer.xml25
-rw-r--r--gr-dtv/grc/dtv_atsc_field_sync_mux.block.yml18
-rw-r--r--gr-dtv/grc/dtv_atsc_field_sync_mux.xml22
-rw-r--r--gr-dtv/grc/dtv_atsc_fpll.block.yml21
-rw-r--r--gr-dtv/grc/dtv_atsc_fpll.xml29
-rw-r--r--gr-dtv/grc/dtv_atsc_fs_checker.block.yml18
-rw-r--r--gr-dtv/grc/dtv_atsc_fs_checker.xml25
-rw-r--r--gr-dtv/grc/dtv_atsc_interleaver.block.yml18
-rw-r--r--gr-dtv/grc/dtv_atsc_interleaver.xml22
-rw-r--r--gr-dtv/grc/dtv_atsc_pad.block.yml17
-rw-r--r--gr-dtv/grc/dtv_atsc_pad.xml21
-rw-r--r--gr-dtv/grc/dtv_atsc_randomizer.block.yml18
-rw-r--r--gr-dtv/grc/dtv_atsc_randomizer.xml22
-rw-r--r--gr-dtv/grc/dtv_atsc_rs_decoder.block.yml18
-rw-r--r--gr-dtv/grc/dtv_atsc_rs_decoder.xml25
-rw-r--r--gr-dtv/grc/dtv_atsc_rs_encoder.block.yml18
-rw-r--r--gr-dtv/grc/dtv_atsc_rs_encoder.xml22
-rw-r--r--gr-dtv/grc/dtv_atsc_rx.block.yml24
-rw-r--r--gr-dtv/grc/dtv_atsc_rx.xml35
-rw-r--r--gr-dtv/grc/dtv_atsc_rx_filter.block.yml24
-rw-r--r--gr-dtv/grc/dtv_atsc_rx_filter.xml35
-rw-r--r--gr-dtv/grc/dtv_atsc_sync.block.yml22
-rw-r--r--gr-dtv/grc/dtv_atsc_sync.xml30
-rw-r--r--gr-dtv/grc/dtv_atsc_trellis_encoder.block.yml18
-rw-r--r--gr-dtv/grc/dtv_atsc_trellis_encoder.xml22
-rw-r--r--gr-dtv/grc/dtv_atsc_viterbi_decoder.block.yml18
-rw-r--r--gr-dtv/grc/dtv_atsc_viterbi_decoder.xml25
-rw-r--r--gr-dtv/grc/dtv_block_tree.xml106
-rw-r--r--gr-dtv/grc/dtv_catv_frame_sync_enc_bb.block.yml29
-rw-r--r--gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml41
-rw-r--r--gr-dtv/grc/dtv_catv_randomizer_bb.block.yml25
-rw-r--r--gr-dtv/grc/dtv_catv_randomizer_bb.xml35
-rw-r--r--gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.block.yml16
-rw-r--r--gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.xml20
-rw-r--r--gr-dtv/grc/dtv_catv_transport_framing_enc_bb.block.yml16
-rw-r--r--gr-dtv/grc/dtv_catv_transport_framing_enc_bb.xml20
-rw-r--r--gr-dtv/grc/dtv_catv_trellis_enc_bb.block.yml25
-rw-r--r--gr-dtv/grc/dtv_catv_trellis_enc_bb.xml35
-rw-r--r--gr-dtv/grc/dtv_dvb_bbheader_bb.block.yml154
-rw-r--r--gr-dtv/grc/dtv_dvb_bbheader_bb.xml596
-rw-r--r--gr-dtv/grc/dtv_dvb_bbscrambler_bb.block.yml118
-rw-r--r--gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml512
-rw-r--r--gr-dtv/grc/dtv_dvb_bch_bb.block.yml118
-rw-r--r--gr-dtv/grc/dtv_dvb_bch_bb.xml512
-rw-r--r--gr-dtv/grc/dtv_dvb_ldpc_bb.block.yml126
-rw-r--r--gr-dtv/grc/dtv_dvb_ldpc_bb.xml528
-rw-r--r--gr-dtv/grc/dtv_dvbs2_interleaver_bb.block.yml86
-rw-r--r--gr-dtv/grc/dtv_dvbs2_interleaver_bb.xml455
-rw-r--r--gr-dtv/grc/dtv_dvbs2_modulator_bc.block.yml102
-rw-r--r--gr-dtv/grc/dtv_dvbs2_modulator_bc.xml504
-rw-r--r--gr-dtv/grc/dtv_dvbs2_physical_cc.block.yml98
-rw-r--r--gr-dtv/grc/dtv_dvbs2_physical_cc.xml476
-rw-r--r--gr-dtv/grc/dtv_dvbt2_cellinterleaver_cc.block.yml41
-rw-r--r--gr-dtv/grc/dtv_dvbt2_cellinterleaver_cc.xml72
-rw-r--r--gr-dtv/grc/dtv_dvbt2_framemapper_cc.block.yml203
-rw-r--r--gr-dtv/grc/dtv_dvbt2_framemapper_cc.xml562
-rw-r--r--gr-dtv/grc/dtv_dvbt2_freqinterleaver_cc.block.yml104
-rw-r--r--gr-dtv/grc/dtv_dvbt2_freqinterleaver_cc.xml301
-rw-r--r--gr-dtv/grc/dtv_dvbt2_interleaver_bb.block.yml40
-rw-r--r--gr-dtv/grc/dtv_dvbt2_interleaver_bb.xml105
-rw-r--r--gr-dtv/grc/dtv_dvbt2_miso_cc.block.yml86
-rw-r--r--gr-dtv/grc/dtv_dvbt2_miso_cc.xml254
-rw-r--r--gr-dtv/grc/dtv_dvbt2_modulator_bc.block.yml39
-rw-r--r--gr-dtv/grc/dtv_dvbt2_modulator_bc.xml75
-rw-r--r--gr-dtv/grc/dtv_dvbt2_p1insertion_cc.block.yml106
-rw-r--r--gr-dtv/grc/dtv_dvbt2_p1insertion_cc.xml276
-rw-r--r--gr-dtv/grc/dtv_dvbt2_paprtr_cc.block.yml105
-rw-r--r--gr-dtv/grc/dtv_dvbt2_paprtr_cc.xml286
-rw-r--r--gr-dtv/grc/dtv_dvbt2_pilotgenerator_cc.block.yml137
-rw-r--r--gr-dtv/grc/dtv_dvbt2_pilotgenerator_cc.xml386
-rw-r--r--gr-dtv/grc/dtv_dvbt_bit_inner_deinterleaver.block.yml47
-rw-r--r--gr-dtv/grc/dtv_dvbt_bit_inner_deinterleaver.xml89
-rw-r--r--gr-dtv/grc/dtv_dvbt_bit_inner_interleaver.block.yml47
-rw-r--r--gr-dtv/grc/dtv_dvbt_bit_inner_interleaver.xml89
-rw-r--r--gr-dtv/grc/dtv_dvbt_convolutional_deinterleaver.block.yml39
-rw-r--r--gr-dtv/grc/dtv_dvbt_convolutional_deinterleaver.xml43
-rw-r--r--gr-dtv/grc/dtv_dvbt_convolutional_interleaver.block.yml39
-rw-r--r--gr-dtv/grc/dtv_dvbt_convolutional_interleaver.xml43
-rw-r--r--gr-dtv/grc/dtv_dvbt_demap.block.yml48
-rw-r--r--gr-dtv/grc/dtv_dvbt_demap.xml90
-rw-r--r--gr-dtv/grc/dtv_dvbt_demod_reference_signals.block.yml86
-rw-r--r--gr-dtv/grc/dtv_dvbt_demod_reference_signals.xml222
-rw-r--r--gr-dtv/grc/dtv_dvbt_energy_descramble.block.yml27
-rw-r--r--gr-dtv/grc/dtv_dvbt_energy_descramble.xml29
-rw-r--r--gr-dtv/grc/dtv_dvbt_energy_dispersal.block.yml28
-rw-r--r--gr-dtv/grc/dtv_dvbt_energy_dispersal.xml29
-rw-r--r--gr-dtv/grc/dtv_dvbt_inner_coder.block.yml57
-rw-r--r--gr-dtv/grc/dtv_dvbt_inner_coder.xml112
-rw-r--r--gr-dtv/grc/dtv_dvbt_map.block.yml48
-rw-r--r--gr-dtv/grc/dtv_dvbt_map.xml90
-rw-r--r--gr-dtv/grc/dtv_dvbt_ofdm_sym_acquisition.block.yml45
-rw-r--r--gr-dtv/grc/dtv_dvbt_ofdm_sym_acquisition.xml76
-rw-r--r--gr-dtv/grc/dtv_dvbt_reed_solomon_dec.block.yml57
-rw-r--r--gr-dtv/grc/dtv_dvbt_reed_solomon_dec.xml70
-rw-r--r--gr-dtv/grc/dtv_dvbt_reed_solomon_enc.block.yml57
-rw-r--r--gr-dtv/grc/dtv_dvbt_reed_solomon_enc.xml70
-rw-r--r--gr-dtv/grc/dtv_dvbt_reference_signals.block.yml86
-rw-r--r--gr-dtv/grc/dtv_dvbt_reference_signals.xml222
-rw-r--r--gr-dtv/grc/dtv_dvbt_symbol_inner_interleaver.block.yml37
-rw-r--r--gr-dtv/grc/dtv_dvbt_symbol_inner_interleaver.xml56
-rw-r--r--gr-dtv/grc/dtv_dvbt_viterbi_decoder.block.yml51
-rw-r--r--gr-dtv/grc/dtv_dvbt_viterbi_decoder.xml120
-rw-r--r--gr-fec/grc/CMakeLists.txt4
-rw-r--r--gr-fec/grc/fec.tree.yml43
-rw-r--r--gr-fec/grc/fec_async_decoder.block.yml43
-rw-r--r--gr-fec/grc/fec_async_decoder.xml68
-rw-r--r--gr-fec/grc/fec_async_encoder.block.yml50
-rw-r--r--gr-fec/grc/fec_async_encoder.xml84
-rw-r--r--gr-fec/grc/fec_ber_bf.block.yml37
-rw-r--r--gr-fec/grc/fec_ber_bf.xml54
-rw-r--r--gr-fec/grc/fec_bercurve_generator.block.yml63
-rw-r--r--gr-fec/grc/fec_bercurve_generator.xml104
-rw-r--r--gr-fec/grc/fec_block_tree.xml57
-rw-r--r--gr-fec/grc/fec_decode_ccsds_27_bb.block.yml16
-rw-r--r--gr-fec/grc/fec_decode_ccsds_27_bb.xml20
-rw-r--r--gr-fec/grc/fec_decode_ccsds_27_fb.block.yml16
-rw-r--r--gr-fec/grc/fec_decode_ccsds_27_fb.xml20
-rw-r--r--gr-fec/grc/fec_decoder.block.yml41
-rw-r--r--gr-fec/grc/fec_decoder.xml91
-rw-r--r--gr-fec/grc/fec_depuncture_bb.block.yml33
-rw-r--r--gr-fec/grc/fec_depuncture_bb.xml45
-rw-r--r--gr-fec/grc/fec_encoder.block.yml41
-rw-r--r--gr-fec/grc/fec_encoder.xml91
-rw-r--r--gr-fec/grc/fec_extended_async_encoder.block.yml30
-rw-r--r--gr-fec/grc/fec_extended_async_encoder.xml38
-rw-r--r--gr-fec/grc/fec_extended_decoder.block.yml44
-rw-r--r--gr-fec/grc/fec_extended_decoder.xml72
-rw-r--r--gr-fec/grc/fec_extended_encoder.block.yml35
-rw-r--r--gr-fec/grc/fec_extended_encoder.xml57
-rw-r--r--gr-fec/grc/fec_extended_tagged_decoder.block.yml47
-rw-r--r--gr-fec/grc/fec_extended_tagged_decoder.xml65
-rw-r--r--gr-fec/grc/fec_extended_tagged_encoder.block.yml37
-rw-r--r--gr-fec/grc/fec_extended_tagged_encoder.xml50
-rw-r--r--gr-fec/grc/fec_puncture_xx.block.yml35
-rw-r--r--gr-fec/grc/fec_puncture_xx.xml53
-rw-r--r--gr-fec/grc/fec_tagged_decoder.block.yml47
-rw-r--r--gr-fec/grc/fec_tagged_decoder.xml74
-rw-r--r--gr-fec/grc/fec_tagged_encoder.block.yml47
-rw-r--r--gr-fec/grc/fec_tagged_encoder.xml74
-rw-r--r--gr-fec/grc/ldpc_decoder_def_list.block.yml53
-rw-r--r--gr-fec/grc/ldpc_decoder_def_list.xml87
-rw-r--r--gr-fec/grc/ldpc_encoder_def_list.block.yml38
-rwxr-xr-xgr-fec/grc/ldpc_encoder_def_list.xml68
-rw-r--r--gr-fec/grc/tpc_decoder_def_list.block.yml77
-rw-r--r--gr-fec/grc/tpc_decoder_def_list.xml142
-rw-r--r--gr-fec/grc/tpc_encoder_def_list.block.yml66
-rwxr-xr-xgr-fec/grc/tpc_encoder_def_list.xml107
-rw-r--r--gr-fec/grc/variable_cc_decoder_def_list.block.yml76
-rw-r--r--gr-fec/grc/variable_cc_decoder_def_list.xml148
-rw-r--r--gr-fec/grc/variable_cc_encoder_def_list.block.yml66
-rw-r--r--gr-fec/grc/variable_cc_encoder_def_list.xml133
-rw-r--r--gr-fec/grc/variable_ccsds_encoder_def_list.block.yml46
-rw-r--r--gr-fec/grc/variable_ccsds_encoder_def_list.xml97
-rw-r--r--gr-fec/grc/variable_dummy_decoder_def_list.block.yml40
-rw-r--r--gr-fec/grc/variable_dummy_decoder_def_list.xml75
-rw-r--r--gr-fec/grc/variable_dummy_encoder_def_list.block.yml36
-rw-r--r--gr-fec/grc/variable_dummy_encoder_def_list.xml67
-rw-r--r--gr-fec/grc/variable_ldpc_G_matrix_object.block.yml31
-rw-r--r--gr-fec/grc/variable_ldpc_G_matrix_object.xml43
-rw-r--r--gr-fec/grc/variable_ldpc_H_matrix_object.block.yml40
-rw-r--r--gr-fec/grc/variable_ldpc_H_matrix_object.xml55
-rw-r--r--gr-fec/grc/variable_ldpc_bit_flip_decoder.block.yml51
-rw-r--r--gr-fec/grc/variable_ldpc_bit_flip_decoder.xml86
-rw-r--r--gr-fec/grc/variable_ldpc_encoder_G.block.yml42
-rw-r--r--gr-fec/grc/variable_ldpc_encoder_G.xml77
-rw-r--r--gr-fec/grc/variable_ldpc_encoder_H.block.yml42
-rw-r--r--gr-fec/grc/variable_ldpc_encoder_H.xml75
-rw-r--r--gr-fec/grc/variable_polar_code_configurator.block.yml42
-rw-r--r--gr-fec/grc/variable_polar_code_configurator.xml59
-rw-r--r--gr-fec/grc/variable_polar_decoder_sc.block.yml45
-rw-r--r--gr-fec/grc/variable_polar_decoder_sc.xml74
-rw-r--r--gr-fec/grc/variable_polar_decoder_sc_list.block.yml49
-rw-r--r--gr-fec/grc/variable_polar_decoder_sc_list.xml80
-rw-r--r--gr-fec/grc/variable_polar_decoder_sc_systematic.block.yml42
-rw-r--r--gr-fec/grc/variable_polar_decoder_sc_systematic.xml68
-rw-r--r--gr-fec/grc/variable_polar_encoder.block.yml52
-rw-r--r--gr-fec/grc/variable_polar_encoder.xml89
-rw-r--r--gr-fec/grc/variable_polar_encoder_systematic.block.yml42
-rw-r--r--gr-fec/grc/variable_polar_encoder_systematic.xml68
-rw-r--r--gr-fec/grc/variable_repetition_decoder_def_list.block.yml49
-rw-r--r--gr-fec/grc/variable_repetition_decoder_def_list.xml89
-rw-r--r--gr-fec/grc/variable_repetition_encoder_def_list.block.yml39
-rw-r--r--gr-fec/grc/variable_repetition_encoder_def_list.xml74
-rw-r--r--gr-fft/grc/CMakeLists.txt10
-rw-r--r--gr-fft/grc/fft.tree.yml7
-rw-r--r--gr-fft/grc/fft_block_tree.xml41
-rw-r--r--gr-fft/grc/fft_ctrlport_probe_psd.block.yml31
-rw-r--r--gr-fft/grc/fft_ctrlport_probe_psd.xml63
-rw-r--r--gr-fft/grc/fft_fft_vxx.block.yml60
-rw-r--r--gr-fft/grc/fft_fft_vxx.xml88
-rw-r--r--gr-fft/grc/fft_goertzel_fc.block.yml30
-rw-r--r--gr-fft/grc/fft_goertzel_fc.xml37
-rw-r--r--gr-fft/grc/fft_logpwrfft_x.block.yml59
-rw-r--r--gr-fft/grc/fft_logpwrfft_x.xml90
-rw-r--r--gr-filter/grc/CMakeLists.txt64
-rw-r--r--gr-filter/grc/filter.tree.yml35
-rw-r--r--gr-filter/grc/filter_band_pass_filter.block.yml85
-rw-r--r--gr-filter/grc/filter_band_pass_filter.xml166
-rw-r--r--gr-filter/grc/filter_band_reject_filter.block.yml80
-rw-r--r--gr-filter/grc/filter_band_reject_filter.xml132
-rw-r--r--gr-filter/grc/filter_block_tree.xml74
-rw-r--r--gr-filter/grc/filter_dc_blocker_xx.block.yml35
-rw-r--r--gr-filter/grc/filter_dc_blocker_xx.xml51
-rw-r--r--gr-filter/grc/filter_fft_filter_xxx.block.yml52
-rw-r--r--gr-filter/grc/filter_fft_filter_xxx.xml75
-rw-r--r--gr-filter/grc/filter_filter_delay_fc.block.yml26
-rw-r--r--gr-filter/grc/filter_filter_delay_fc.xml31
-rw-r--r--gr-filter/grc/filter_filterbank_vcvcf.block.yml26
-rw-r--r--gr-filter/grc/filter_filterbank_vcvcf.xml29
-rw-r--r--gr-filter/grc/filter_fir_filter_xxx.block.yml49
-rw-r--r--gr-filter/grc/filter_fir_filter_xxx.xml89
-rw-r--r--gr-filter/grc/filter_freq_xlating_fft_filter_ccc.block.yml51
-rw-r--r--gr-filter/grc/filter_freq_xlating_fft_filter_ccc.xml62
-rw-r--r--gr-filter/grc/filter_freq_xlating_fir_filter_xxx.block.yml55
-rw-r--r--gr-filter/grc/filter_freq_xlating_fir_filter_xxx.xml100
-rw-r--r--gr-filter/grc/filter_high_pass_filter.block.yml77
-rw-r--r--gr-filter/grc/filter_high_pass_filter.xml127
-rw-r--r--gr-filter/grc/filter_hilbert_fc.block.yml35
-rw-r--r--gr-filter/grc/filter_hilbert_fc.xml64
-rw-r--r--gr-filter/grc/filter_iir_filter_xxx.block.yml44
-rw-r--r--gr-filter/grc/filter_iir_filter_xxx.xml93
-rw-r--r--gr-filter/grc/filter_interp_fir_filter_xxx.block.yml49
-rw-r--r--gr-filter/grc/filter_interp_fir_filter_xxx.xml89
-rw-r--r--gr-filter/grc/filter_low_pass_filter.block.yml77
-rw-r--r--gr-filter/grc/filter_low_pass_filter.xml127
-rw-r--r--gr-filter/grc/filter_low_pass_xlating_filter.block.yml79
-rw-r--r--gr-filter/grc/filter_low_pass_xlating_filter.xml144
-rw-r--r--gr-filter/grc/filter_mmse_interpolator_xx.block.yml33
-rw-r--r--gr-filter/grc/filter_mmse_interpolator_xx.xml46
-rw-r--r--gr-filter/grc/filter_mmse_resampler_xx.block.yml40
-rw-r--r--gr-filter/grc/filter_mmse_resampler_xx.xml56
-rw-r--r--gr-filter/grc/filter_pfb_arb_resampler.block.yml55
-rw-r--r--gr-filter/grc/filter_pfb_arb_resampler.xml87
-rw-r--r--gr-filter/grc/filter_pfb_channelizer.block.yml56
-rw-r--r--gr-filter/grc/filter_pfb_channelizer.xml77
-rw-r--r--gr-filter/grc/filter_pfb_channelizer_hier.block.yml55
-rw-r--r--gr-filter/grc/filter_pfb_channelizer_hier.xml80
-rw-r--r--gr-filter/grc/filter_pfb_decimator.block.yml56
-rw-r--r--gr-filter/grc/filter_pfb_decimator.xml91
-rw-r--r--gr-filter/grc/filter_pfb_interpolator.block.yml38
-rw-r--r--gr-filter/grc/filter_pfb_interpolator.xml51
-rw-r--r--gr-filter/grc/filter_pfb_synthesizer.block.yml55
-rw-r--r--gr-filter/grc/filter_pfb_synthesizer.xml73
-rw-r--r--gr-filter/grc/filter_rational_resampler_base_xxx.block.yml46
-rw-r--r--gr-filter/grc/filter_rational_resampler_base_xxx.xml86
-rw-r--r--gr-filter/grc/filter_rational_resampler_xxx.block.yml62
-rw-r--r--gr-filter/grc/filter_rational_resampler_xxx.xml92
-rw-r--r--gr-filter/grc/filter_root_raised_cosine_filter.block.yml70
-rw-r--r--gr-filter/grc/filter_root_raised_cosine_filter.xml101
-rw-r--r--gr-filter/grc/filter_single_pole_iir_filter_xx.block.yml38
-rw-r--r--gr-filter/grc/filter_single_pole_iir_filter_xx.xml51
-rw-r--r--gr-filter/grc/variable_band_pass_filter_taps.block.yml53
-rw-r--r--gr-filter/grc/variable_band_pass_filter_taps.xml97
-rw-r--r--gr-filter/grc/variable_band_reject_filter_taps.block.yml46
-rw-r--r--gr-filter/grc/variable_band_reject_filter_taps.xml81
-rw-r--r--gr-filter/grc/variable_high_pass_filter_taps.block.yml42
-rw-r--r--gr-filter/grc/variable_high_pass_filter_taps.xml75
-rw-r--r--gr-filter/grc/variable_low_pass_filter_taps.block.yml42
-rw-r--r--gr-filter/grc/variable_low_pass_filter_taps.xml75
-rw-r--r--gr-filter/grc/variable_rrc_filter_taps.block.yml34
-rw-r--r--gr-filter/grc/variable_rrc_filter_taps.xml50
-rw-r--r--gr-qtgui/grc/CMakeLists.txt26
-rw-r--r--gr-qtgui/grc/qtgui.tree.yml23
-rw-r--r--gr-qtgui/grc/qtgui_ber_sink_b.block.yml366
-rw-r--r--gr-qtgui/grc/qtgui_ber_sink_b.xml684
-rw-r--r--gr-qtgui/grc/qtgui_block_tree.xml61
-rw-r--r--gr-qtgui/grc/qtgui_check_box.block.yml66
-rw-r--r--gr-qtgui/grc/qtgui_check_box.xml82
-rw-r--r--gr-qtgui/grc/qtgui_chooser.block.yml191
-rw-r--r--gr-qtgui/grc/qtgui_chooser.xml257
-rw-r--r--gr-qtgui/grc/qtgui_const_sink_x.block.yml457
-rw-r--r--gr-qtgui/grc/qtgui_const_sink_x.xml859
-rw-r--r--gr-qtgui/grc/qtgui_edit_box_msg.block.yml69
-rw-r--r--gr-qtgui/grc/qtgui_edit_box_msg.xml152
-rw-r--r--gr-qtgui/grc/qtgui_entry.block.yml57
-rw-r--r--gr-qtgui/grc/qtgui_entry.xml67
-rw-r--r--gr-qtgui/grc/qtgui_freq_sink_x.block.yml447
-rw-r--r--gr-qtgui/grc/qtgui_freq_sink_x.xml791
-rw-r--r--gr-qtgui/grc/qtgui_histogram_sink_x.block.yml419
-rw-r--r--gr-qtgui/grc/qtgui_histogram_sink_x.xml794
-rw-r--r--gr-qtgui/grc/qtgui_label.block.yml66
-rw-r--r--gr-qtgui/grc/qtgui_label.xml87
-rw-r--r--gr-qtgui/grc/qtgui_number_sink.block.yml283
-rw-r--r--gr-qtgui/grc/qtgui_number_sink.xml496
-rw-r--r--gr-qtgui/grc/qtgui_push_button.block.yml60
-rw-r--r--gr-qtgui/grc/qtgui_push_button.xml79
-rw-r--r--gr-qtgui/grc/qtgui_range.block.yml86
-rw-r--r--gr-qtgui/grc/qtgui_range.xml131
-rw-r--r--gr-qtgui/grc/qtgui_sink_x.block.yml148
-rw-r--r--gr-qtgui/grc/qtgui_sink_x.xml232
-rw-r--r--gr-qtgui/grc/qtgui_tab_widget.block.yml141
-rw-r--r--gr-qtgui/grc/qtgui_tab_widget.xml206
-rw-r--r--gr-qtgui/grc/qtgui_time_raster_x.block.yml266
-rw-r--r--gr-qtgui/grc/qtgui_time_raster_x.xml466
-rw-r--r--gr-qtgui/grc/qtgui_time_sink_x.block.yml559
-rw-r--r--gr-qtgui/grc/qtgui_time_sink_x.xml948
-rw-r--r--gr-qtgui/grc/qtgui_vector_sink_f.block.yml352
-rw-r--r--gr-qtgui/grc/qtgui_vector_sink_f.xml603
-rw-r--r--gr-qtgui/grc/qtgui_waterfall_sink_x.block.yml303
-rw-r--r--gr-qtgui/grc/qtgui_waterfall_sink_x.xml557
-rw-r--r--gr-trellis/grc/CMakeLists.txt26
-rw-r--r--gr-trellis/grc/trellis_encoder_xx.block.yml59
-rw-r--r--gr-trellis/grc/trellis_encoder_xx.xml103
-rw-r--r--gr-trellis/grc/trellis_metrics_x.block.yml50
-rw-r--r--gr-trellis/grc/trellis_metrics_x.xml91
-rw-r--r--gr-trellis/grc/trellis_pccc_decoder_combined_xx.block.yml102
-rw-r--r--gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml172
-rw-r--r--gr-trellis/grc/trellis_pccc_decoder_x.block.yml75
-rw-r--r--gr-trellis/grc/trellis_pccc_decoder_x.xml119
-rw-r--r--gr-trellis/grc/trellis_pccc_encoder_xx.block.yml58
-rw-r--r--gr-trellis/grc/trellis_pccc_encoder_xx.xml100
-rw-r--r--gr-trellis/grc/trellis_permutation.block.yml54
-rw-r--r--gr-trellis/grc/trellis_permutation.xml85
-rw-r--r--gr-trellis/grc/trellis_sccc_decoder_combined_xx.block.yml102
-rw-r--r--gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml172
-rw-r--r--gr-trellis/grc/trellis_sccc_decoder_x.block.yml75
-rw-r--r--gr-trellis/grc/trellis_sccc_decoder_x.xml119
-rw-r--r--gr-trellis/grc/trellis_sccc_encoder_xx.block.yml58
-rw-r--r--gr-trellis/grc/trellis_sccc_encoder_xx.xml100
-rw-r--r--gr-trellis/grc/trellis_siso_combined_f.block.yml79
-rw-r--r--gr-trellis/grc/trellis_siso_combined_f.xml129
-rw-r--r--gr-trellis/grc/trellis_siso_f.block.yml67
-rw-r--r--gr-trellis/grc/trellis_siso_f.xml100
-rw-r--r--gr-trellis/grc/trellis_viterbi_combined_xx.block.yml76
-rw-r--r--gr-trellis/grc/trellis_viterbi_combined_xx.xml133
-rw-r--r--gr-trellis/grc/trellis_viterbi_x.block.yml53
-rw-r--r--gr-trellis/grc/trellis_viterbi_x.xml74
-rw-r--r--gr-uhd/grc/CMakeLists.txt26
-rw-r--r--gr-uhd/grc/gen_uhd_usrp_blocks.py968
-rw-r--r--gr-uhd/grc/uhd.tree.yml5
-rw-r--r--gr-uhd/grc/uhd_amsg_source.block.yml18
-rw-r--r--gr-uhd/grc/uhd_amsg_source.xml24
-rw-r--r--gr-uhd/grc/uhd_block_tree.xml15
-rw-r--r--gr-video-sdl/grc/CMakeLists.txt4
-rw-r--r--gr-video-sdl/grc/video.tree.yml3
-rw-r--r--gr-video-sdl/grc/video_block_tree.xml13
-rw-r--r--gr-video-sdl/grc/video_sdl_sink.block.yml61
-rw-r--r--gr-video-sdl/grc/video_sdl_sink.xml86
-rw-r--r--gr-vocoder/grc/CMakeLists.txt41
-rw-r--r--gr-vocoder/grc/CMakeLists.txt.orig38
-rw-r--r--gr-vocoder/grc/vocoder.tree.yml22
-rw-r--r--gr-vocoder/grc/vocoder_alaw_decode_bs.block.yml16
-rw-r--r--gr-vocoder/grc/vocoder_alaw_decode_bs.xml20
-rw-r--r--gr-vocoder/grc/vocoder_alaw_encode_sb.block.yml16
-rw-r--r--gr-vocoder/grc/vocoder_alaw_encode_sb.xml22
-rw-r--r--gr-vocoder/grc/vocoder_block_tree.xml54
-rw-r--r--gr-vocoder/grc/vocoder_codec2_decode_ps.block.yml30
-rw-r--r--gr-vocoder/grc/vocoder_codec2_decode_ps.xml60
-rw-r--r--gr-vocoder/grc/vocoder_codec2_encode_sp.block.yml30
-rw-r--r--gr-vocoder/grc/vocoder_codec2_encode_sp.xml61
-rw-r--r--gr-vocoder/grc/vocoder_cvsd_decode.block.yml26
-rw-r--r--gr-vocoder/grc/vocoder_cvsd_decode.xml32
-rw-r--r--gr-vocoder/grc/vocoder_cvsd_decode_bs.block.yml16
-rw-r--r--gr-vocoder/grc/vocoder_cvsd_decode_bs.xml21
-rw-r--r--gr-vocoder/grc/vocoder_cvsd_encode.block.yml26
-rw-r--r--gr-vocoder/grc/vocoder_cvsd_encode.xml32
-rw-r--r--gr-vocoder/grc/vocoder_cvsd_encode_sb.block.yml16
-rw-r--r--gr-vocoder/grc/vocoder_cvsd_encode_sb.xml22
-rw-r--r--gr-vocoder/grc/vocoder_freedv_rx_ss.block.yml33
-rw-r--r--gr-vocoder/grc/vocoder_freedv_rx_ss.xml58
-rw-r--r--gr-vocoder/grc/vocoder_freedv_tx_ss.block.yml31
-rw-r--r--gr-vocoder/grc/vocoder_freedv_tx_ss.xml57
-rw-r--r--gr-vocoder/grc/vocoder_g721_decode_bs.block.yml16
-rw-r--r--gr-vocoder/grc/vocoder_g721_decode_bs.xml20
-rw-r--r--gr-vocoder/grc/vocoder_g721_encode_sb.block.yml16
-rw-r--r--gr-vocoder/grc/vocoder_g721_encode_sb.xml22
-rw-r--r--gr-vocoder/grc/vocoder_g723_24_decode_bs.block.yml16
-rw-r--r--gr-vocoder/grc/vocoder_g723_24_decode_bs.xml20
-rw-r--r--gr-vocoder/grc/vocoder_g723_24_encode_sb.block.yml16
-rw-r--r--gr-vocoder/grc/vocoder_g723_24_encode_sb.xml22
-rw-r--r--gr-vocoder/grc/vocoder_g723_40_decode_bs.block.yml16
-rw-r--r--gr-vocoder/grc/vocoder_g723_40_decode_bs.xml20
-rw-r--r--gr-vocoder/grc/vocoder_g723_40_encode_sb.block.yml16
-rw-r--r--gr-vocoder/grc/vocoder_g723_40_encode_sb.xml22
-rw-r--r--gr-vocoder/grc/vocoder_gsm_fr_decode_ps.block.yml17
-rw-r--r--gr-vocoder/grc/vocoder_gsm_fr_decode_ps.xml21
-rw-r--r--gr-vocoder/grc/vocoder_gsm_fr_encode_sp.block.yml17
-rw-r--r--gr-vocoder/grc/vocoder_gsm_fr_encode_sp.xml23
-rw-r--r--gr-vocoder/grc/vocoder_ulaw_decode_bs.block.yml16
-rw-r--r--gr-vocoder/grc/vocoder_ulaw_decode_bs.xml20
-rw-r--r--gr-vocoder/grc/vocoder_ulaw_encode_sb.block.yml16
-rw-r--r--gr-vocoder/grc/vocoder_ulaw_encode_sb.xml22
-rw-r--r--gr-zeromq/grc/CMakeLists.txt24
-rw-r--r--gr-zeromq/grc/zeromq_pub_msg_sink.block.yml23
-rw-r--r--gr-zeromq/grc/zeromq_pub_msg_sink.xml28
-rw-r--r--gr-zeromq/grc/zeromq_pub_sink.block.yml48
-rw-r--r--gr-zeromq/grc/zeromq_pub_sink.xml89
-rw-r--r--gr-zeromq/grc/zeromq_pull_msg_source.block.yml23
-rw-r--r--gr-zeromq/grc/zeromq_pull_msg_source.xml28
-rw-r--r--gr-zeromq/grc/zeromq_pull_source.block.yml48
-rw-r--r--gr-zeromq/grc/zeromq_pull_source.xml89
-rw-r--r--gr-zeromq/grc/zeromq_push_msg_sink.block.yml23
-rw-r--r--gr-zeromq/grc/zeromq_push_msg_sink.xml28
-rw-r--r--gr-zeromq/grc/zeromq_push_sink.block.yml48
-rw-r--r--gr-zeromq/grc/zeromq_push_sink.xml89
-rw-r--r--gr-zeromq/grc/zeromq_rep_msg_sink.block.yml23
-rw-r--r--gr-zeromq/grc/zeromq_rep_msg_sink.xml28
-rw-r--r--gr-zeromq/grc/zeromq_rep_sink.block.yml49
-rw-r--r--gr-zeromq/grc/zeromq_rep_sink.xml89
-rw-r--r--gr-zeromq/grc/zeromq_req_msg_source.block.yml23
-rw-r--r--gr-zeromq/grc/zeromq_req_msg_source.xml28
-rw-r--r--gr-zeromq/grc/zeromq_req_source.block.yml48
-rw-r--r--gr-zeromq/grc/zeromq_req_source.xml89
-rw-r--r--gr-zeromq/grc/zeromq_sub_msg_source.block.yml23
-rw-r--r--gr-zeromq/grc/zeromq_sub_msg_source.xml28
-rw-r--r--gr-zeromq/grc/zeromq_sub_source.block.yml48
-rw-r--r--gr-zeromq/grc/zeromq_sub_source.xml89
-rw-r--r--grc/blocks/CMakeLists.txt35
-rw-r--r--grc/blocks/block_tree.xml24
-rw-r--r--grc/blocks/grc.tree.yml15
-rw-r--r--grc/blocks/import.block.yml20
-rw-r--r--grc/blocks/import.xml26
-rw-r--r--grc/blocks/note.block.yml9
-rw-r--r--grc/blocks/note.xml17
-rw-r--r--grc/blocks/options.block.yml146
-rw-r--r--grc/blocks/options.xml250
-rw-r--r--grc/blocks/pad_sink.block.yml51
-rw-r--r--grc/blocks/pad_sink.xml103
-rw-r--r--grc/blocks/pad_source.block.yml51
-rw-r--r--grc/blocks/pad_source.xml104
-rw-r--r--grc/blocks/parameter.block.yml55
-rw-r--r--grc/blocks/parameter.xml118
-rw-r--r--grc/blocks/variable.block.yml19
-rw-r--r--grc/blocks/variable.xml23
-rw-r--r--grc/blocks/variable_config.block.yml58
-rw-r--r--grc/blocks/variable_config.xml88
-rw-r--r--grc/blocks/variable_function_probe.block.yml54
-rw-r--r--grc/blocks/variable_function_probe.xml78
-rw-r--r--grc/blocks/variable_struct.block.yml.py105
-rw-r--r--grc/blocks/variable_struct.xml.py97
-rw-r--r--grc/blocks/virtual_sink.xml21
-rw-r--r--grc/blocks/virtual_source.xml21
-rw-r--r--grc/core/Config.py6
-rw-r--r--grc/core/Constants.py22
-rw-r--r--grc/core/FlowGraph.py2
-rw-r--r--grc/core/Param.py413
-rw-r--r--grc/core/blocks/__init__.py1
-rw-r--r--grc/core/blocks/_build.py86
-rw-r--r--grc/core/blocks/_flags.py16
-rw-r--r--grc/core/blocks/block.py82
-rw-r--r--grc/core/cache.py99
-rw-r--r--grc/core/default_flow_graph.grc1
-rw-r--r--grc/core/generator/hier_block.py4
-rw-r--r--grc/core/params/__init__.py18
-rw-r--r--grc/core/params/dtypes.py103
-rw-r--r--grc/core/params/param.py407
-rw-r--r--grc/core/params/template_arg.py50
-rw-r--r--grc/core/platform.py114
-rw-r--r--grc/core/schema_checker/block.py2
-rw-r--r--grc/core/utils/__init__.py12
-rw-r--r--grc/core/utils/descriptors/evaluated.py13
-rw-r--r--grc/gui/Actions.py1
-rw-r--r--grc/gui/Application.py2
-rw-r--r--grc/gui/ParamWidgets.py31
-rw-r--r--grc/gui/Platform.py4
-rw-r--r--grc/gui/PropsDialog.py7
-rw-r--r--grc/gui/Utils.py4
-rw-r--r--grc/gui/canvas/flowgraph.py4
-rw-r--r--grc/gui/canvas/param.py8
-rw-r--r--grc/tests/resources/file1.block.yml38
-rw-r--r--grc/tests/resources/file1.xml58
-rw-r--r--grc/tests/resources/file2.block.yml31
-rw-r--r--grc/tests/resources/file2.xml80
-rw-r--r--grc/tests/resources/file3.block.yml66
-rw-r--r--grc/tests/resources/file3.xml100
1008 files changed, 25436 insertions, 42903 deletions
diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake
index fdbd21d840..49a351d3a7 100644
--- a/cmake/Modules/GrPython.cmake
+++ b/cmake/Modules/GrPython.cmake
@@ -63,6 +63,7 @@ set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpre
macro(GR_PYTHON_CHECK_MODULE_RAW desc python_code have)
execute_process(
COMMAND ${PYTHON_EXECUTABLE} -c "${python_code}"
+ OUTPUT_QUIET ERROR_QUIET
RESULT_VARIABLE return_code
)
if(return_code EQUAL 0)
diff --git a/gr-analog/grc/CMakeLists.txt b/gr-analog/grc/CMakeLists.txt
index 1251af5b83..35456cee31 100644
--- a/gr-analog/grc/CMakeLists.txt
+++ b/gr-analog/grc/CMakeLists.txt
@@ -17,5 +17,5 @@
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
-file(GLOB xml_files "*.xml")
-install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR})
+file(GLOB yml_files "*.yml")
+install(FILES ${yml_files} DESTINATION ${GRC_BLOCKS_DIR})
diff --git a/gr-analog/grc/analog.tree.yml b/gr-analog/grc/analog.tree.yml
new file mode 100644
index 0000000000..44a88bd5c5
--- /dev/null
+++ b/gr-analog/grc/analog.tree.yml
@@ -0,0 +1,39 @@
+'[Core]':
+- Level Controllers:
+ - analog_agc_xx
+ - analog_agc2_xx
+ - analog_agc3_xx
+ - analog_feedforward_agc_cc
+ - analog_ctcss_squelch_ff
+ - analog_pwr_squelch_xx
+ - analog_simple_squelch_cc
+ - analog_standard_squelch
+ - analog_rail_ff
+- Modulators:
+ - analog_frequency_modulator_fc
+ - analog_phase_modulator_fc
+ - analog_quadrature_demod_cf
+ - analog_nbfm_tx
+ - analog_nbfm_rx
+ - analog_wfm_tx
+ - analog_wfm_rcv
+ - analog_wfm_rcv_pll
+ - analog_am_demod_cf
+ - analog_fm_demod_cf
+ - analog_fm_deemph
+ - analog_fm_preemph
+- Waveform Generators:
+ - analog_sig_source_x
+ - analog_const_source_x
+ - analog_noise_source_x
+ - analog_fastnoise_source_x
+ - analog_random_source_x
+ - analog_random_uniform_source_x
+- Synchronizers:
+ - analog_pll_carriertracking_cc
+ - analog_pll_freqdet_cf
+ - analog_pll_refout_cc
+- Peak Detectors:
+ - analog_dpll_bb
+- Measurement Tools:
+ - analog_probe_avg_mag_sqrd_x
diff --git a/gr-analog/grc/analog_agc2_xx.block.yml b/gr-analog/grc/analog_agc2_xx.block.yml
new file mode 100644
index 0000000000..93990b5c3b
--- /dev/null
+++ b/gr-analog/grc/analog_agc2_xx.block.yml
@@ -0,0 +1,53 @@
+id: analog_agc2_xx
+label: AGC2
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float]
+ option_attributes:
+ fcn: [cc, ff]
+ hide: part
+- id: attack_rate
+ label: Attack Rate
+ dtype: real
+ default: 1e-1
+- id: decay_rate
+ label: Decay Rate
+ dtype: real
+ default: 1e-2
+- id: reference
+ label: Reference
+ dtype: real
+ default: '1.0'
+- id: gain
+ label: Gain
+ dtype: real
+ default: '1.0'
+- id: max_gain
+ label: Max Gain
+ dtype: real
+ default: '65536'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import analog
+ make: |-
+ analog.agc2_${type.fcn}(${attack_rate}, ${decay_rate}, ${reference}, ${gain})
+ self.${id}.set_max_gain(${max_gain})
+ callbacks:
+ - set_attack_rate(${attack_rate})
+ - set_decay_rate(${decay_rate})
+ - set_reference(${reference})
+ - set_gain(${gain})
+ - set_max_gain(${max_gain})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_agc2_xx.xml b/gr-analog/grc/analog_agc2_xx.xml
deleted file mode 100644
index cafd6a09b5..0000000000
--- a/gr-analog/grc/analog_agc2_xx.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##AGC2
-###################################################
- -->
-<block>
- <name>AGC2</name>
- <key>analog_agc2_xx</key>
- <import>from gnuradio import analog</import>
- <make>analog.agc2_$(type.fcn)($attack_rate, $decay_rate, $reference, $gain)
-self.$(id).set_max_gain($max_gain)</make>
- <callback>set_attack_rate($attack_rate)</callback>
- <callback>set_decay_rate($decay_rate)</callback>
- <callback>set_reference($reference)</callback>
- <callback>set_gain($gain)</callback>
- <callback>set_max_gain($max_gain)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- </param>
- <param>
- <name>Attack Rate</name>
- <key>attack_rate</key>
- <value>1e-1</value>
- <type>real</type>
- </param>
- <param>
- <name>Decay Rate</name>
- <key>decay_rate</key>
- <value>1e-2</value>
- <type>real</type>
- </param>
- <param>
- <name>Reference</name>
- <key>reference</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Max Gain</name>
- <key>max_gain</key>
- <value>65536</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_agc3_xx.block.yml b/gr-analog/grc/analog_agc3_xx.block.yml
new file mode 100644
index 0000000000..17a03f6771
--- /dev/null
+++ b/gr-analog/grc/analog_agc3_xx.block.yml
@@ -0,0 +1,57 @@
+id: analog_agc3_xx
+label: AGC3
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex]
+ option_attributes:
+ fcn: [cc]
+ hide: part
+- id: attack_rate
+ label: Attack Rate
+ dtype: real
+ default: 1e-3
+- id: decay_rate
+ label: Decay Rate
+ dtype: real
+ default: 1e-4
+- id: reference
+ label: Reference
+ dtype: real
+ default: '1.0'
+- id: gain
+ label: Gain
+ dtype: real
+ default: '1.0'
+- id: max_gain
+ label: Max Gain
+ dtype: real
+ default: '65536'
+- id: iir_update_decim
+ label: IIR Update Decimation
+ dtype: real
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import analog
+ make: |-
+ analog.agc3_${type.fcn}(${attack_rate}, ${decay_rate}, ${reference}, ${gain}, ${iir_update_decim})
+ self.${id}.set_max_gain(${max_gain})
+ callbacks:
+ - set_attack_rate(${attack_rate})
+ - set_decay_rate(${decay_rate})
+ - set_reference(${reference})
+ - set_gain(${gain})
+ - set_max_gain(${max_gain})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_agc3_xx.xml b/gr-analog/grc/analog_agc3_xx.xml
deleted file mode 100644
index 1e6b9fd382..0000000000
--- a/gr-analog/grc/analog_agc3_xx.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##AGC3
-###################################################
- -->
-<block>
- <name>AGC3</name>
- <key>analog_agc3_xx</key>
- <import>from gnuradio import analog</import>
- <make>analog.agc3_$(type.fcn)($attack_rate, $decay_rate, $reference, $gain, $iir_update_decim)
-self.$(id).set_max_gain($max_gain)</make>
- <callback>set_attack_rate($attack_rate)</callback>
- <callback>set_decay_rate($decay_rate)</callback>
- <callback>set_reference($reference)</callback>
- <callback>set_gain($gain)</callback>
- <callback>set_max_gain($max_gain)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
-<!-- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option> -->
- </param>
- <param>
- <name>Attack Rate</name>
- <key>attack_rate</key>
- <value>1e-3</value>
- <type>real</type>
- </param>
- <param>
- <name>Decay Rate</name>
- <key>decay_rate</key>
- <value>1e-4</value>
- <type>real</type>
- </param>
- <param>
- <name>Reference</name>
- <key>reference</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Max Gain</name>
- <key>max_gain</key>
- <value>65536</value>
- <type>real</type>
- </param>
- <param>
- <name>IIR Update Decimation</name>
- <key>iir_update_decim</key>
- <value>1</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_agc_xx.block.yml b/gr-analog/grc/analog_agc_xx.block.yml
new file mode 100644
index 0000000000..52ef26f79f
--- /dev/null
+++ b/gr-analog/grc/analog_agc_xx.block.yml
@@ -0,0 +1,48 @@
+id: analog_agc_xx
+label: AGC
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float]
+ option_attributes:
+ fcn: [cc, ff]
+ hide: part
+- id: rate
+ label: Rate
+ dtype: real
+ default: 1e-4
+- id: reference
+ label: Reference
+ dtype: real
+ default: '1.0'
+- id: gain
+ label: Gain
+ dtype: real
+ default: '1.0'
+- id: max_gain
+ label: Max Gain
+ dtype: real
+ default: '65536'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import analog
+ make: |-
+ analog.agc_${type.fcn}(${rate}, ${reference}, ${gain})
+ self.${id}.set_max_gain(${max_gain})
+ callbacks:
+ - set_rate(${rate})
+ - set_reference(${reference})
+ - set_gain(${gain})
+ - set_max_gain(${max_gain})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_agc_xx.xml b/gr-analog/grc/analog_agc_xx.xml
deleted file mode 100644
index 085ded3d8c..0000000000
--- a/gr-analog/grc/analog_agc_xx.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##AGC
-###################################################
- -->
-<block>
- <name>AGC</name>
- <key>analog_agc_xx</key>
- <import>from gnuradio import analog</import>
- <make>analog.agc_$(type.fcn)($rate, $reference, $gain)
-self.$(id).set_max_gain($max_gain)</make>
- <callback>set_rate($rate)</callback>
- <callback>set_reference($reference)</callback>
- <callback>set_gain($gain)</callback>
- <callback>set_max_gain($max_gain)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- </param>
- <param>
- <name>Rate</name>
- <key>rate</key>
- <value>1e-4</value>
- <type>real</type>
- </param>
- <param>
- <name>Reference</name>
- <key>reference</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Max Gain</name>
- <key>max_gain</key>
- <value>65536</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_am_demod_cf.block.yml b/gr-analog/grc/analog_am_demod_cf.block.yml
new file mode 100644
index 0000000000..8bc6cc1c31
--- /dev/null
+++ b/gr-analog/grc/analog_am_demod_cf.block.yml
@@ -0,0 +1,33 @@
+id: analog_am_demod_cf
+label: AM Demod
+
+parameters:
+- id: chan_rate
+ label: Channel Rate
+ dtype: real
+- id: audio_decim
+ label: Audio Decimation
+ dtype: int
+- id: audio_pass
+ label: Audio Pass
+ dtype: real
+ default: '5000'
+- id: audio_stop
+ label: Audio Stop
+ dtype: real
+ default: '5500'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import analog
+ make: "analog.am_demod_cf(\n\tchannel_rate=${chan_rate},\n\taudio_decim=${audio_decim},\n\
+ \taudio_pass=${audio_pass},\n\taudio_stop=${audio_stop},\n)"
+
+file_format: 1
diff --git a/gr-analog/grc/analog_am_demod_cf.xml b/gr-analog/grc/analog_am_demod_cf.xml
deleted file mode 100644
index b066882bda..0000000000
--- a/gr-analog/grc/analog_am_demod_cf.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##AM Demod
-###################################################
- -->
-<block>
- <name>AM Demod</name>
- <key>analog_am_demod_cf</key>
- <import>from gnuradio import analog</import>
- <make>analog.am_demod_cf(
- channel_rate=$chan_rate,
- audio_decim=$audio_decim,
- audio_pass=$audio_pass,
- audio_stop=$audio_stop,
-)</make>
- <param>
- <name>Channel Rate</name>
- <key>chan_rate</key>
- <type>real</type>
- </param>
- <param>
- <name>Audio Decimation</name>
- <key>audio_decim</key>
- <type>int</type>
- </param>
- <param>
- <name>Audio Pass</name>
- <key>audio_pass</key>
- <value>5000</value>
- <type>real</type>
- </param>
- <param>
- <name>Audio Stop</name>
- <key>audio_stop</key>
- <value>5500</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_block_tree.xml b/gr-analog/grc/analog_block_tree.xml
deleted file mode 100644
index 7337c34c3e..0000000000
--- a/gr-analog/grc/analog_block_tree.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2012 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##Block Tree for GR Analog blocks.
-###################################################
- -->
-<cat>
- <name>[Core]</name>
- <cat>
- <name>Level Controllers</name>
- <block>analog_agc_xx</block>
- <block>analog_agc2_xx</block>
- <block>analog_agc3_xx</block>
- <block>analog_feedforward_agc_cc</block>
- <block>analog_ctcss_squelch_ff</block>
- <block>analog_pwr_squelch_xx</block>
- <block>analog_simple_squelch_cc</block>
- <block>analog_standard_squelch</block>
- <block>analog_rail_ff</block>
- </cat>
- <cat>
- <name>Modulators</name>
- <block>analog_frequency_modulator_fc</block>
- <block>analog_phase_modulator_fc</block>
- <block>analog_quadrature_demod_cf</block>
- <block>analog_nbfm_tx</block>
- <block>analog_nbfm_rx</block>
- <block>analog_wfm_tx</block>
- <block>analog_wfm_rcv</block>
- <block>analog_wfm_rcv_pll</block>
- <block>analog_am_demod_cf</block>
- <block>analog_fm_demod_cf</block>
- <block>analog_fm_deemph</block>
- <block>analog_fm_preemph</block>
- </cat>
- <cat>
- <name>Waveform Generators</name>
- <block>analog_sig_source_x</block>
- <block>analog_const_source_x</block>
- <block>analog_noise_source_x</block>
- <block>analog_fastnoise_source_x</block>
- <block>analog_random_source_x</block>
- <block>analog_random_uniform_source_x</block>
- </cat>
- <cat>
- <name>Synchronizers</name>
- <block>analog_pll_carriertracking_cc</block>
- <block>analog_pll_freqdet_cf</block>
- <block>analog_pll_refout_cc</block>
- </cat>
- <cat>
- <name>Peak Detectors</name>
- <block>analog_dpll_bb</block>
- </cat>
- <cat>
- <name>Measurement Tools</name>
- <block>analog_probe_avg_mag_sqrd_x</block>
- </cat>
-</cat>
diff --git a/gr-analog/grc/analog_const_source_x.block.yml b/gr-analog/grc/analog_const_source_x.block.yml
new file mode 100644
index 0000000000..ac676b7ac4
--- /dev/null
+++ b/gr-analog/grc/analog_const_source_x.block.yml
@@ -0,0 +1,28 @@
+id: analog_const_source_x
+label: Constant Source
+
+parameters:
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ const_type: [complex, real, int, int]
+ fcn: [c, f, i, s]
+ hide: part
+- id: const
+ label: Constant
+ dtype: ${ type.const_type }
+ default: '0'
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.sig_source_${type.fcn}(0, analog.GR_CONST_WAVE, 0, 0, ${const})
+ callbacks:
+ - set_offset(${const})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_const_source_x.xml b/gr-analog/grc/analog_const_source_x.xml
deleted file mode 100644
index de8c306264..0000000000
--- a/gr-analog/grc/analog_const_source_x.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Constant Source: Custom wrapper
-###################################################
- -->
-<block>
- <name>Constant Source</name>
- <key>analog_const_source_x</key>
- <import>from gnuradio import analog</import>
- <make>analog.sig_source_$(type.fcn)(0, analog.GR_CONST_WAVE, 0, 0, $const)</make>
- <callback>set_offset($const)</callback>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- <opt>const_type:complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- <opt>const_type:real</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- <opt>const_type:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- <opt>const_type:int</opt>
- </option>
- </param>
- <param>
- <name>Constant</name>
- <key>const</key>
- <value>0</value>
- <type>$type.const_type</type>
- </param>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_cpfsk_bc.block.yml b/gr-analog/grc/analog_cpfsk_bc.block.yml
new file mode 100644
index 0000000000..c9ccbaac27
--- /dev/null
+++ b/gr-analog/grc/analog_cpfsk_bc.block.yml
@@ -0,0 +1,31 @@
+id: analog_cpfsk_bc
+label: CPFSK
+category: '[Core]/Deprecated'
+
+parameters:
+- id: k
+ label: K
+ dtype: real
+- id: amplitude
+ label: Amplitude
+ dtype: real
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '2'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.cpfsk_bc(${k}, ${amplitude}, ${samples_per_symbol})
+ callbacks:
+ - set_amplitude(${amplitude})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_cpfsk_bc.xml b/gr-analog/grc/analog_cpfsk_bc.xml
deleted file mode 100644
index 5108ff61f9..0000000000
--- a/gr-analog/grc/analog_cpfsk_bc.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##CPFSK
-###################################################
- -->
-<block>
- <name>CPFSK</name>
- <key>analog_cpfsk_bc</key>
- <category>[Core]/Deprecated</category>
- <import>from gnuradio import analog</import>
- <make>analog.cpfsk_bc($k, $amplitude, $samples_per_symbol)</make>
- <callback>set_amplitude($amplitude)</callback>
- <param>
- <name>K</name>
- <key>k</key>
- <type>real</type>
- </param>
- <param>
- <name>Amplitude</name>
- <key>amplitude</key>
- <type>real</type>
- </param>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>2</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_ctcss_squelch_ff.block.yml b/gr-analog/grc/analog_ctcss_squelch_ff.block.yml
new file mode 100644
index 0000000000..a3dd89f1f6
--- /dev/null
+++ b/gr-analog/grc/analog_ctcss_squelch_ff.block.yml
@@ -0,0 +1,45 @@
+id: analog_ctcss_squelch_ff
+label: CTCSS Squelch
+
+parameters:
+- id: rate
+ label: Sampling Rate (Hz)
+ dtype: real
+ default: samp_rate
+- id: freq
+ label: Tone Frequency
+ dtype: real
+ default: '100.0'
+- id: level
+ label: Level
+ dtype: real
+ default: '0.01'
+- id: len
+ label: Length
+ dtype: int
+ default: '0'
+- id: ramp
+ label: Ramp
+ dtype: int
+ default: '0'
+- id: gate
+ label: Gate
+ dtype: bool
+ default: 'False'
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.ctcss_squelch_ff(${rate}, ${freq}, ${level}, ${len}, ${ramp}, ${gate})
+ callbacks:
+ - set_level(${level})
+ - set_frequency(${freq})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_ctcss_squelch_ff.xml b/gr-analog/grc/analog_ctcss_squelch_ff.xml
deleted file mode 100644
index 7a2248aa7e..0000000000
--- a/gr-analog/grc/analog_ctcss_squelch_ff.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0"?>
-<!--
-#
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##CTCSS Squelch
-###################################################
- -->
-<block>
- <name>CTCSS Squelch</name>
- <key>analog_ctcss_squelch_ff</key>
- <import>from gnuradio import analog</import>
- <make>analog.ctcss_squelch_ff($rate, $freq, $level, $len, $ramp, $gate)</make>
- <callback>set_level($level)</callback>
- <callback>set_frequency($freq)</callback>
- <param>
- <name>Sampling Rate (Hz)</name>
- <key>rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Tone Frequency</name>
- <key>freq</key>
- <value>100.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Level</name>
- <key>level</key>
- <value>0.01</value>
- <type>real</type>
- </param>
- <param>
- <name>Length</name>
- <key>len</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Ramp</name>
- <key>ramp</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Gate</name>
- <key>gate</key>
- <value>False</value>
- <type>bool</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_dpll_bb.block.yml b/gr-analog/grc/analog_dpll_bb.block.yml
new file mode 100644
index 0000000000..289f3a283d
--- /dev/null
+++ b/gr-analog/grc/analog_dpll_bb.block.yml
@@ -0,0 +1,26 @@
+id: analog_dpll_bb
+label: Detect Peak
+
+parameters:
+- id: period
+ label: Period
+ dtype: real
+- id: gain
+ label: Gain
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.dpll_bb(${period}, ${gain})
+ callbacks:
+ - set_gain(${gain})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_dpll_bb.xml b/gr-analog/grc/analog_dpll_bb.xml
deleted file mode 100644
index 65a489414d..0000000000
--- a/gr-analog/grc/analog_dpll_bb.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Detect Peak
-###################################################
- -->
-<block>
- <name>Detect Peak</name>
- <key>analog_dpll_bb</key>
- <import>from gnuradio import analog</import>
- <make>analog.dpll_bb($period, $gain)</make>
- <callback>set_gain($gain)</callback>
- <param>
- <name>Period</name>
- <key>period</key>
- <type>real</type>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_fastnoise_source_x.block.yml b/gr-analog/grc/analog_fastnoise_source_x.block.yml
new file mode 100644
index 0000000000..21c4366074
--- /dev/null
+++ b/gr-analog/grc/analog_fastnoise_source_x.block.yml
@@ -0,0 +1,45 @@
+id: analog_fastnoise_source_x
+label: Fast Noise Source
+
+parameters:
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ fcn: [c, f, i, s]
+ hide: part
+- id: noise_type
+ label: Noise Type
+ dtype: int
+ default: analog.GR_GAUSSIAN
+ options: [analog.GR_UNIFORM, analog.GR_GAUSSIAN, analog.GR_LAPLACIAN, analog.GR_IMPULSE]
+ option_labels: [Uniform, Gaussian, Laplacian, Impulse]
+- id: amp
+ label: Amplitude
+ dtype: real
+ default: '1'
+- id: seed
+ label: Seed
+ dtype: int
+ default: '0'
+- id: samples
+ label: Variate Pool Size
+ dtype: int
+ default: '8192'
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.fastnoise_source_${type.fcn}(${noise_type}, ${amp}, ${seed}, ${samples})
+ callbacks:
+ - set_type(${noise_type})
+ - set_amplitude(${amp})
+
+documentation: |-
+ The fast noise source works by pre-generating a pool of random variates taken from the specified distribution. At runtime, samples are then uniform randomly chosen from this pool which is a very fast operation.
+
+file_format: 1
diff --git a/gr-analog/grc/analog_fastnoise_source_x.xml b/gr-analog/grc/analog_fastnoise_source_x.xml
deleted file mode 100644
index f18c8c2f54..0000000000
--- a/gr-analog/grc/analog_fastnoise_source_x.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Fast Noise Source
-###################################################
- -->
-<block>
- <name>Fast Noise Source</name>
- <key>analog_fastnoise_source_x</key>
- <import>from gnuradio import analog</import>
- <make>analog.fastnoise_source_$(type.fcn)($noise_type, $amp, $seed, $samples)</make>
- <callback>set_type($noise_type)</callback>
- <callback>set_amplitude($amp)</callback>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- </option>
- </param>
- <param>
- <name>Noise Type</name>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
- <type>int</type>
- <option>
- <name>Uniform</name>
- <key>analog.GR_UNIFORM</key>
- </option>
- <option>
- <name>Gaussian</name>
- <key>analog.GR_GAUSSIAN</key>
- </option>
- <option>
- <name>Laplacian</name>
- <key>analog.GR_LAPLACIAN</key>
- </option>
- <option>
- <name>Impulse</name>
- <key>analog.GR_IMPULSE</key>
- </option>
- </param>
- <param>
- <name>Amplitude</name>
- <key>amp</key>
- <value>1</value>
- <type>real</type>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Variate Pool Size</name>
- <key>samples</key>
- <value>8192</value>
- <type>int</type>
- </param>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
- <doc>
-The fast noise source works by pre-generating a pool of random variates taken from the specified distribution. At runtime, samples are then uniform randomly chosen from this pool which is a very fast operation.
- </doc>
-</block>
diff --git a/gr-analog/grc/analog_feedforward_agc_cc.block.yml b/gr-analog/grc/analog_feedforward_agc_cc.block.yml
new file mode 100644
index 0000000000..fd49a654a8
--- /dev/null
+++ b/gr-analog/grc/analog_feedforward_agc_cc.block.yml
@@ -0,0 +1,26 @@
+id: analog_feedforward_agc_cc
+label: Feed Forward AGC
+
+parameters:
+- id: num_samples
+ label: Num Samples
+ dtype: int
+ default: '1024'
+- id: reference
+ label: Reference
+ dtype: real
+ default: '1.0'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.feedforward_agc_cc(${num_samples}, ${reference})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_feedforward_agc_cc.xml b/gr-analog/grc/analog_feedforward_agc_cc.xml
deleted file mode 100644
index 66d200a847..0000000000
--- a/gr-analog/grc/analog_feedforward_agc_cc.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Feed Forward AGC
-###################################################
- -->
-<block>
- <name>Feed Forward AGC</name>
- <key>analog_feedforward_agc_cc</key>
- <import>from gnuradio import analog</import>
- <make>analog.feedforward_agc_cc($num_samples, $reference)</make>
- <param>
- <name>Num Samples</name>
- <key>num_samples</key>
- <value>1024</value>
- <type>int</type>
- </param>
- <param>
- <name>Reference</name>
- <key>reference</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_fm_deemph.block.yml b/gr-analog/grc/analog_fm_deemph.block.yml
new file mode 100644
index 0000000000..b9c11a6842
--- /dev/null
+++ b/gr-analog/grc/analog_fm_deemph.block.yml
@@ -0,0 +1,25 @@
+id: analog_fm_deemph
+label: FM Deemphasis
+
+parameters:
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+- id: tau
+ label: Tau
+ dtype: real
+ default: 75e-6
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.fm_deemph(fs=${samp_rate}, tau=${tau})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_fm_deemph.xml b/gr-analog/grc/analog_fm_deemph.xml
deleted file mode 100644
index 0fcb5a87d4..0000000000
--- a/gr-analog/grc/analog_fm_deemph.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##FM Deemphasis
-###################################################
- -->
-<block>
- <name>FM Deemphasis</name>
- <key>analog_fm_deemph</key>
- <import>from gnuradio import analog</import>
- <make>analog.fm_deemph(fs=$samp_rate, tau=$tau)</make>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <type>real</type>
- </param>
- <param>
- <name>Tau</name>
- <key>tau</key>
- <value>75e-6</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_fm_demod_cf.block.yml b/gr-analog/grc/analog_fm_demod_cf.block.yml
new file mode 100644
index 0000000000..a558253a2c
--- /dev/null
+++ b/gr-analog/grc/analog_fm_demod_cf.block.yml
@@ -0,0 +1,46 @@
+id: analog_fm_demod_cf
+label: FM Demod
+
+parameters:
+- id: chan_rate
+ label: Channel Rate
+ dtype: real
+- id: audio_decim
+ label: Audio Decimation
+ dtype: int
+- id: deviation
+ label: Deviation
+ dtype: real
+ default: '75000'
+- id: audio_pass
+ label: Audio Pass
+ dtype: real
+ default: '15000'
+- id: audio_stop
+ label: Audio Stop
+ dtype: real
+ default: '16000'
+- id: gain
+ label: Gain
+ dtype: real
+ default: '1.0'
+- id: tau
+ label: Tau
+ dtype: real
+ default: 75e-6
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import analog
+ make: "analog.fm_demod_cf(\n\tchannel_rate=${chan_rate},\n\taudio_decim=${audio_decim},\n\
+ \tdeviation=${deviation},\n\taudio_pass=${audio_pass},\n\taudio_stop=${audio_stop},\n\
+ \tgain=${gain},\n\ttau=${tau},\n)"
+
+file_format: 1
diff --git a/gr-analog/grc/analog_fm_demod_cf.xml b/gr-analog/grc/analog_fm_demod_cf.xml
deleted file mode 100644
index c903ddfc73..0000000000
--- a/gr-analog/grc/analog_fm_demod_cf.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##FM Demod
-###################################################
- -->
-<block>
- <name>FM Demod</name>
- <key>analog_fm_demod_cf</key>
- <import>from gnuradio import analog</import>
- <make>analog.fm_demod_cf(
- channel_rate=$chan_rate,
- audio_decim=$audio_decim,
- deviation=$deviation,
- audio_pass=$audio_pass,
- audio_stop=$audio_stop,
- gain=$gain,
- tau=$tau,
-)</make>
- <param>
- <name>Channel Rate</name>
- <key>chan_rate</key>
- <type>real</type>
- </param>
- <param>
- <name>Audio Decimation</name>
- <key>audio_decim</key>
- <type>int</type>
- </param>
- <param>
- <name>Deviation</name>
- <key>deviation</key>
- <value>75000</value>
- <type>real</type>
- </param>
- <param>
- <name>Audio Pass</name>
- <key>audio_pass</key>
- <value>15000</value>
- <type>real</type>
- </param>
- <param>
- <name>Audio Stop</name>
- <key>audio_stop</key>
- <value>16000</value>
- <type>real</type>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Tau</name>
- <key>tau</key>
- <value>75e-6</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_fm_preemph.block.yml b/gr-analog/grc/analog_fm_preemph.block.yml
new file mode 100644
index 0000000000..d3f05d3164
--- /dev/null
+++ b/gr-analog/grc/analog_fm_preemph.block.yml
@@ -0,0 +1,29 @@
+id: analog_fm_preemph
+label: FM Preemphasis
+
+parameters:
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+- id: tau
+ label: Tau
+ dtype: real
+ default: 75e-6
+- id: fh
+ label: High Corner Freq
+ dtype: real
+ default: '-1.0'
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.fm_preemph(fs=${samp_rate}, tau=${tau}, fh=${fh})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_fm_preemph.xml b/gr-analog/grc/analog_fm_preemph.xml
deleted file mode 100644
index a754ce9c6f..0000000000
--- a/gr-analog/grc/analog_fm_preemph.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##FM Preemphasis
-###################################################
- -->
-<block>
- <name>FM Preemphasis</name>
- <key>analog_fm_preemph</key>
- <import>from gnuradio import analog</import>
- <make>analog.fm_preemph(fs=$samp_rate, tau=$tau, fh=$fh)</make>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <type>real</type>
- </param>
- <param>
- <name>Tau</name>
- <key>tau</key>
- <value>75e-6</value>
- <type>real</type>
- </param>
- <param>
- <name>High Corner Freq</name>
- <key>fh</key>
- <value>-1.0</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_fmdet_cf.block.yml b/gr-analog/grc/analog_fmdet_cf.block.yml
new file mode 100644
index 0000000000..ee8661b80f
--- /dev/null
+++ b/gr-analog/grc/analog_fmdet_cf.block.yml
@@ -0,0 +1,31 @@
+id: analog_fmdet_cf
+label: FM Detector
+
+parameters:
+- id: samplerate
+ label: Sample rate
+ dtype: real
+- id: freq_low
+ label: Lowest frequency
+ dtype: real
+- id: freq_high
+ label: Highest frequency
+ dtype: real
+- id: scl
+ label: Scale factor
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import analog
+ make: "analog.fmdet_cf(\n\tsamplerate=${samplerate},\n\tfreq_low=${freq_low},\n\
+ \tfreq_high=${freq_high},\n\tscl=${scl}\n)"
+
+file_format: 1
diff --git a/gr-analog/grc/analog_fmdet_cf.xml b/gr-analog/grc/analog_fmdet_cf.xml
deleted file mode 100644
index 26688b2893..0000000000
--- a/gr-analog/grc/analog_fmdet_cf.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##FM Detector
-###################################################
- -->
-<block>
- <name>FM Detector</name>
- <key>analog_fmdet_cf</key>
- <import>from gnuradio import analog</import>
- <make>analog.fmdet_cf(
- samplerate=$samplerate,
- freq_low=$freq_low,
- freq_high=$freq_high,
- scl=$scl
-)</make>
- <param>
- <name>Sample rate</name>
- <key>samplerate</key>
- <type>real</type>
- </param>
- <param>
- <name>Lowest frequency</name>
- <key>freq_low</key>
- <type>real</type>
- </param>
- <param>
- <name>Highest frequency</name>
- <key>freq_high</key>
- <type>real</type>
- </param>
- <param>
- <name>Scale factor</name>
- <key>scl</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_frequency_modulator_fc.block.yml b/gr-analog/grc/analog_frequency_modulator_fc.block.yml
new file mode 100644
index 0000000000..09f3e807f3
--- /dev/null
+++ b/gr-analog/grc/analog_frequency_modulator_fc.block.yml
@@ -0,0 +1,23 @@
+id: analog_frequency_modulator_fc
+label: Frequency Mod
+
+parameters:
+- id: sensitivity
+ label: Sensitivity
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.frequency_modulator_fc(${sensitivity})
+ callbacks:
+ - set_sensitivity(${sensitivity})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_frequency_modulator_fc.xml b/gr-analog/grc/analog_frequency_modulator_fc.xml
deleted file mode 100644
index 3b6cd159a1..0000000000
--- a/gr-analog/grc/analog_frequency_modulator_fc.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Frequency Modulator
-###################################################
- -->
-<block>
- <name>Frequency Mod</name>
- <key>analog_frequency_modulator_fc</key>
- <import>from gnuradio import analog</import>
- <make>analog.frequency_modulator_fc($sensitivity)</make>
- <callback>set_sensitivity($sensitivity)</callback>
- <param>
- <name>Sensitivity</name>
- <key>sensitivity</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_nbfm_rx.block.yml b/gr-analog/grc/analog_nbfm_rx.block.yml
new file mode 100644
index 0000000000..8bb3da7684
--- /dev/null
+++ b/gr-analog/grc/analog_nbfm_rx.block.yml
@@ -0,0 +1,38 @@
+id: analog_nbfm_rx
+label: NBFM Receive
+
+parameters:
+- id: audio_rate
+ label: Audio Rate
+ dtype: int
+- id: quad_rate
+ label: Quadrature Rate
+ dtype: int
+- id: tau
+ label: Tau
+ dtype: real
+ default: 75e-6
+- id: max_dev
+ label: Max Deviation
+ dtype: real
+ default: 5e3
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: float
+
+asserts:
+- ${ (quad_rate)%(audio_rate) == 0 }
+
+templates:
+ imports: from gnuradio import analog
+ make: "analog.nbfm_rx(\n\taudio_rate=${audio_rate},\n\tquad_rate=${quad_rate},\n\
+ \ttau=${tau},\n\tmax_dev=${max_dev},\n )"
+ callbacks:
+ - set_max_deviation(${max_dev})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_nbfm_rx.xml b/gr-analog/grc/analog_nbfm_rx.xml
deleted file mode 100644
index 9250b77b5e..0000000000
--- a/gr-analog/grc/analog_nbfm_rx.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##NBFM Receive
-###################################################
- -->
-<block>
- <name>NBFM Receive</name>
- <key>analog_nbfm_rx</key>
- <import>from gnuradio import analog</import>
- <make>analog.nbfm_rx(
- audio_rate=$audio_rate,
- quad_rate=$quad_rate,
- tau=$tau,
- max_dev=$max_dev,
- )</make>
- <callback>set_max_deviation($max_dev)</callback>
-
- <param>
- <name>Audio Rate</name>
- <key>audio_rate</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Quadrature Rate</name>
- <key>quad_rate</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Tau</name>
- <key>tau</key>
- <value>75e-6</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Max Deviation</name>
- <key>max_dev</key>
- <value>5e3</value>
- <type>real</type>
- </param>
-
- <check>($quad_rate)%($audio_rate) == 0</check>
-
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_nbfm_tx.block.yml b/gr-analog/grc/analog_nbfm_tx.block.yml
new file mode 100644
index 0000000000..00f63f8d64
--- /dev/null
+++ b/gr-analog/grc/analog_nbfm_tx.block.yml
@@ -0,0 +1,42 @@
+id: analog_nbfm_tx
+label: NBFM Transmit
+
+parameters:
+- id: audio_rate
+ label: Audio Rate
+ dtype: int
+- id: quad_rate
+ label: Quadrature Rate
+ dtype: int
+- id: tau
+ label: Tau
+ dtype: real
+ default: 75e-6
+- id: max_dev
+ label: Max Deviation
+ dtype: real
+ default: 5e3
+- id: fh
+ label: Preemphasis High Corner Freq
+ dtype: real
+ default: '-1.0'
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: complex
+
+asserts:
+- ${ (quad_rate)%(audio_rate) == 0 }
+
+templates:
+ imports: from gnuradio import analog
+ make: "analog.nbfm_tx(\n\taudio_rate=${audio_rate},\n\tquad_rate=${quad_rate},\n\
+ \ttau=${tau},\n\tmax_dev=${max_dev},\n\tfh=${fh},\n )"
+ callbacks:
+ - set_max_deviation(${max_dev})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_nbfm_tx.xml b/gr-analog/grc/analog_nbfm_tx.xml
deleted file mode 100644
index bc80fffbcb..0000000000
--- a/gr-analog/grc/analog_nbfm_tx.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##NBFM Transmit
-###################################################
- -->
-<block>
- <name>NBFM Transmit</name>
- <key>analog_nbfm_tx</key>
- <import>from gnuradio import analog</import>
- <make>analog.nbfm_tx(
- audio_rate=$audio_rate,
- quad_rate=$quad_rate,
- tau=$tau,
- max_dev=$max_dev,
- fh=$fh,
- )</make>
- <callback>set_max_deviation($max_dev)</callback>
-
- <param>
- <name>Audio Rate</name>
- <key>audio_rate</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Quadrature Rate</name>
- <key>quad_rate</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Tau</name>
- <key>tau</key>
- <value>75e-6</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Max Deviation</name>
- <key>max_dev</key>
- <value>5e3</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Preemphasis High Corner Freq</name>
- <key>fh</key>
- <value>-1.0</value>
- <type>real</type>
- </param>
-
- <check>($quad_rate)%($audio_rate) == 0</check>
-
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_noise_source_x.block.yml b/gr-analog/grc/analog_noise_source_x.block.yml
new file mode 100644
index 0000000000..bb3f67209e
--- /dev/null
+++ b/gr-analog/grc/analog_noise_source_x.block.yml
@@ -0,0 +1,38 @@
+id: analog_noise_source_x
+label: Noise Source
+
+parameters:
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ fcn: [c, f, i, s]
+ hide: part
+- id: noise_type
+ label: Noise Type
+ dtype: int
+ default: analog.GR_GAUSSIAN
+ options: [analog.GR_UNIFORM, analog.GR_GAUSSIAN, analog.GR_LAPLACIAN, analog.GR_IMPULSE]
+ option_labels: [Uniform, Gaussian, Laplacian, Impulse]
+- id: amp
+ label: Amplitude
+ dtype: real
+ default: '1'
+- id: seed
+ label: Seed
+ dtype: int
+ default: '0'
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.noise_source_${type.fcn}(${noise_type}, ${amp}, ${seed})
+ callbacks:
+ - set_type(${noise_type})
+ - set_amplitude(${amp})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_noise_source_x.xml b/gr-analog/grc/analog_noise_source_x.xml
deleted file mode 100644
index 5404e78960..0000000000
--- a/gr-analog/grc/analog_noise_source_x.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Noise Source
-###################################################
- -->
-<block>
- <name>Noise Source</name>
- <key>analog_noise_source_x</key>
- <import>from gnuradio import analog</import>
- <make>analog.noise_source_$(type.fcn)($noise_type, $amp, $seed)</make>
- <callback>set_type($noise_type)</callback>
- <callback>set_amplitude($amp)</callback>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- </option>
- </param>
- <param>
- <name>Noise Type</name>
- <key>noise_type</key>
- <value>analog.GR_GAUSSIAN</value>
- <type>int</type>
- <option>
- <name>Uniform</name>
- <key>analog.GR_UNIFORM</key>
- </option>
- <option>
- <name>Gaussian</name>
- <key>analog.GR_GAUSSIAN</key>
- </option>
- <option>
- <name>Laplacian</name>
- <key>analog.GR_LAPLACIAN</key>
- </option>
- <option>
- <name>Impulse</name>
- <key>analog.GR_IMPULSE</key>
- </option>
- </param>
- <param>
- <name>Amplitude</name>
- <key>amp</key>
- <value>1</value>
- <type>real</type>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0</value>
- <type>int</type>
- </param>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_phase_modulator_fc.block.yml b/gr-analog/grc/analog_phase_modulator_fc.block.yml
new file mode 100644
index 0000000000..6d38ddd010
--- /dev/null
+++ b/gr-analog/grc/analog_phase_modulator_fc.block.yml
@@ -0,0 +1,23 @@
+id: analog_phase_modulator_fc
+label: Phase Mod
+
+parameters:
+- id: sensitivity
+ label: Sensitivity
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.phase_modulator_fc(${sensitivity})
+ callbacks:
+ - set_sensitivity(${sensitivity})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_phase_modulator_fc.xml b/gr-analog/grc/analog_phase_modulator_fc.xml
deleted file mode 100644
index c13af769c9..0000000000
--- a/gr-analog/grc/analog_phase_modulator_fc.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Phase Modulator
-###################################################
- -->
-<block>
- <name>Phase Mod</name>
- <key>analog_phase_modulator_fc</key>
- <import>from gnuradio import analog</import>
- <make>analog.phase_modulator_fc($sensitivity)</make>
- <callback>set_sensitivity($sensitivity)</callback>
- <param>
- <name>Sensitivity</name>
- <key>sensitivity</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_pll_carriertracking_cc.block.yml b/gr-analog/grc/analog_pll_carriertracking_cc.block.yml
new file mode 100644
index 0000000000..1a66aca0a7
--- /dev/null
+++ b/gr-analog/grc/analog_pll_carriertracking_cc.block.yml
@@ -0,0 +1,31 @@
+id: analog_pll_carriertracking_cc
+label: PLL Carrier Tracking
+
+parameters:
+- id: w
+ label: Loop Bandwidth
+ dtype: real
+- id: max_freq
+ label: Max Freq
+ dtype: real
+- id: min_freq
+ label: Min Freq
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.pll_carriertracking_cc(${w}, ${max_freq}, ${min_freq})
+ callbacks:
+ - set_loop_bandwidth(${w})
+ - set_max_freq(${max_freq})
+ - set_min_freq(${min_freq})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_pll_carriertracking_cc.xml b/gr-analog/grc/analog_pll_carriertracking_cc.xml
deleted file mode 100644
index 95ec4b415b..0000000000
--- a/gr-analog/grc/analog_pll_carriertracking_cc.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##PLL Carrier Tracking
-###################################################
- -->
-<block>
- <name>PLL Carrier Tracking</name>
- <key>analog_pll_carriertracking_cc</key>
- <import>from gnuradio import analog</import>
- <make>analog.pll_carriertracking_cc($w, $max_freq, $min_freq)</make>
- <callback>set_loop_bandwidth($w)</callback>
- <callback>set_max_freq($max_freq)</callback>
- <callback>set_min_freq($min_freq)</callback>
- <param>
- <name>Loop Bandwidth</name>
- <key>w</key>
- <type>real</type>
- </param>
- <param>
- <name>Max Freq</name>
- <key>max_freq</key>
- <type>real</type>
- </param>
- <param>
- <name>Min Freq</name>
- <key>min_freq</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_pll_freqdet_cf.block.yml b/gr-analog/grc/analog_pll_freqdet_cf.block.yml
new file mode 100644
index 0000000000..b9fe199dd2
--- /dev/null
+++ b/gr-analog/grc/analog_pll_freqdet_cf.block.yml
@@ -0,0 +1,31 @@
+id: analog_pll_freqdet_cf
+label: PLL Freq Det
+
+parameters:
+- id: w
+ label: Loop Bandwidth
+ dtype: real
+- id: max_freq
+ label: Max Freq
+ dtype: real
+- id: min_freq
+ label: Min Freq
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.pll_freqdet_cf(${w}, ${max_freq}, ${min_freq})
+ callbacks:
+ - set_loop_bandwidth(${w})
+ - set_max_freq(${max_freq})
+ - set_min_freq(${min_freq})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_pll_freqdet_cf.xml b/gr-analog/grc/analog_pll_freqdet_cf.xml
deleted file mode 100644
index 0d44c160bd..0000000000
--- a/gr-analog/grc/analog_pll_freqdet_cf.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##PLL Frequency Det
-###################################################
- -->
-<block>
- <name>PLL Freq Det</name>
- <key>analog_pll_freqdet_cf</key>
- <import>from gnuradio import analog</import>
- <make>analog.pll_freqdet_cf($w, $max_freq, $min_freq)</make>
- <callback>set_loop_bandwidth($w)</callback>
- <callback>set_max_freq($max_freq)</callback>
- <callback>set_min_freq($min_freq)</callback>
- <param>
- <name>Loop Bandwidth</name>
- <key>w</key>
- <type>real</type>
- </param>
- <param>
- <name>Max Freq</name>
- <key>max_freq</key>
- <type>real</type>
- </param>
- <param>
- <name>Min Freq</name>
- <key>min_freq</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_pll_refout_cc.block.yml b/gr-analog/grc/analog_pll_refout_cc.block.yml
new file mode 100644
index 0000000000..5acd85c3b6
--- /dev/null
+++ b/gr-analog/grc/analog_pll_refout_cc.block.yml
@@ -0,0 +1,31 @@
+id: analog_pll_refout_cc
+label: PLL Ref Out
+
+parameters:
+- id: w
+ label: Loop Bandwidth
+ dtype: real
+- id: max_freq
+ label: Max Freq
+ dtype: real
+- id: min_freq
+ label: Min Freq
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.pll_refout_cc(${w}, ${max_freq}, ${min_freq})
+ callbacks:
+ - set_loop_bandwidth(${w})
+ - set_max_freq(${max_freq})
+ - set_min_freq(${min_freq})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_pll_refout_cc.xml b/gr-analog/grc/analog_pll_refout_cc.xml
deleted file mode 100644
index eb2d752b27..0000000000
--- a/gr-analog/grc/analog_pll_refout_cc.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##PLL Reference Out
-###################################################
- -->
-<block>
- <name>PLL Ref Out</name>
- <key>analog_pll_refout_cc</key>
- <import>from gnuradio import analog</import>
- <make>analog.pll_refout_cc($w, $max_freq, $min_freq)</make>
- <callback>set_loop_bandwidth($w)</callback>
- <callback>set_max_freq($max_freq)</callback>
- <callback>set_min_freq($min_freq)</callback>
- <param>
- <name>Loop Bandwidth</name>
- <key>w</key>
- <type>real</type>
- </param>
- <param>
- <name>Max Freq</name>
- <key>max_freq</key>
- <type>real</type>
- </param>
- <param>
- <name>Min Freq</name>
- <key>min_freq</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_probe_avg_mag_sqrd_x.block.yml b/gr-analog/grc/analog_probe_avg_mag_sqrd_x.block.yml
new file mode 100644
index 0000000000..ad128c1521
--- /dev/null
+++ b/gr-analog/grc/analog_probe_avg_mag_sqrd_x.block.yml
@@ -0,0 +1,47 @@
+id: analog_probe_avg_mag_sqrd_x
+label: Probe Avg Mag^2
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [c, f, cf]
+ option_labels: [Complex, Float, Complex->Float]
+ option_attributes:
+ hide: [all, all, '']
+ input: [complex, float, complex]
+ optional: ['1', '1', '0']
+ hide: part
+- id: threshold
+ label: Threshold (dB)
+ dtype: real
+ default: '0'
+- id: alpha
+ label: Alpha
+ dtype: real
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: float
+ optional: true
+ hide: ${ type.hide }
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.probe_avg_mag_sqrd_${type}(${threshold}, ${alpha})
+ callbacks:
+ - set_alpha(${alpha})
+ - set_threshold(${threshold})
+ - reset()
+
+documentation: |-
+ Available functions to probe: level()
+
+ Use with the function probe block.
+
+file_format: 1
diff --git a/gr-analog/grc/analog_probe_avg_mag_sqrd_x.xml b/gr-analog/grc/analog_probe_avg_mag_sqrd_x.xml
deleted file mode 100644
index 98e6702ffd..0000000000
--- a/gr-analog/grc/analog_probe_avg_mag_sqrd_x.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Probe Average Magnitude Squared
-###################################################
- -->
-<block>
- <name>Probe Avg Mag^2</name>
- <key>analog_probe_avg_mag_sqrd_x</key>
- <import>from gnuradio import analog</import>
- <make>analog.probe_avg_mag_sqrd_$(type)($threshold, $alpha)</make>
- <callback>set_alpha($alpha)</callback>
- <callback>set_threshold($threshold)</callback>
- <callback>reset()</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>c</key>
- <opt>input:complex</opt>
- <opt>optional:1</opt>
- <opt>hide:all</opt>
- </option>
- <option>
- <name>Float</name>
- <key>f</key>
- <opt>input:float</opt>
- <opt>optional:1</opt>
- <opt>hide:all</opt>
- </option>
- <option>
- <name>Complex->Float</name>
- <key>cf</key>
- <opt>input:complex</opt>
- <opt>optional:0</opt>
- <opt>hide:</opt>
- </option>
- </param>
- <param>
- <name>Threshold (dB)</name>
- <key>threshold</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Alpha</name>
- <key>alpha</key>
- <value>1</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- <optional>$type.optional</optional>
- <hide>$type.hide</hide>
- </source>
- <doc>
-Available functions to probe: level()
-
-Use with the function probe block.
- </doc>
-</block>
diff --git a/gr-analog/grc/analog_pwr_squelch_xx.block.yml b/gr-analog/grc/analog_pwr_squelch_xx.block.yml
new file mode 100644
index 0000000000..20bcfa923e
--- /dev/null
+++ b/gr-analog/grc/analog_pwr_squelch_xx.block.yml
@@ -0,0 +1,44 @@
+id: analog_pwr_squelch_xx
+label: Power Squelch
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float]
+ option_attributes:
+ fcn: [cc, ff]
+ hide: part
+- id: threshold
+ label: Threshold (dB)
+ dtype: real
+- id: alpha
+ label: Alpha
+ dtype: real
+ default: 1e-4
+- id: ramp
+ label: Ramp
+ dtype: int
+ default: '0'
+- id: gate
+ label: Gate
+ dtype: enum
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.pwr_squelch_${type.fcn}(${threshold}, ${alpha}, ${ramp}, ${gate})
+ callbacks:
+ - set_threshold(${threshold})
+ - set_alpha(${alpha})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_pwr_squelch_xx.xml b/gr-analog/grc/analog_pwr_squelch_xx.xml
deleted file mode 100644
index a75f85cf10..0000000000
--- a/gr-analog/grc/analog_pwr_squelch_xx.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Power Squelch
-###################################################
- -->
-<block>
- <name>Power Squelch</name>
- <key>analog_pwr_squelch_xx</key>
- <import>from gnuradio import analog</import>
- <make>analog.pwr_squelch_$(type.fcn)($threshold, $alpha, $ramp, $gate)</make>
- <callback>set_threshold($threshold)</callback>
- <callback>set_alpha($alpha)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- </param>
- <param>
- <name>Threshold (dB)</name>
- <key>threshold</key>
- <type>real</type>
- </param>
- <param>
- <name>Alpha</name>
- <key>alpha</key>
- <value>1e-4</value>
- <type>real</type>
- </param>
- <param>
- <name>Ramp</name>
- <key>ramp</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Gate</name>
- <key>gate</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_quadrature_demod_cf.block.yml b/gr-analog/grc/analog_quadrature_demod_cf.block.yml
new file mode 100644
index 0000000000..874b286c87
--- /dev/null
+++ b/gr-analog/grc/analog_quadrature_demod_cf.block.yml
@@ -0,0 +1,47 @@
+id: analog_quadrature_demod_cf
+label: Quadrature Demod
+
+parameters:
+- id: gain
+ label: Gain
+ dtype: real
+ default: samp_rate/(2*math.pi*fsk_deviation_hz/8.0)
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: |-
+ from gnuradio import analog
+ import math
+ make: analog.quadrature_demod_cf(${gain})
+ callbacks:
+ - set_gain(${gain})
+
+documentation: |-
+ This can be used to demod FM, FSK, GMSK, etc. The input is complex
+ baseband, output is the signal frequency in relation to the sample
+ rated, multiplied with the gain.
+
+ Mathematically, this block calculates the product of the one-sample
+ delayed input and the conjugate undelayed signal, and then calculates
+ the argument of the resulting complex number:
+
+ y[n] = \mathrm{arg}\left(x[n] \, \bar x [n-1]\right).
+
+ Let x be a complex sinusoid with amplitude A>0, (absolute)
+ frequency f\in\mathbb R and phase \phi_0\in[0;2\pi] sampled at
+ f_s>0 so, without loss of generality,
+
+ x[n]= A e^{j2\pi( \frac f{f_s} n + \phi_0)}\f
+
+ then
+
+ y[n] = \mathrm{arg}\left(A e^{j2\pi\left( \frac f{f_s} n + \phi_0\right)} \overline{A e^{j2\pi( \frac f{f_s} (n-1) + \phi_0)}}\right)\ = \mathrm{arg}\left(A^2 e^{j2\pi\left( \frac f{f_s} n + \phi_0\right)} e^{-j2\pi( \frac f{f_s} (n-1) + \phi_0)}\right)\ = \mathrm{arg}\left( A^2 e^{j2\pi\left( \frac f{f_s} n + \phi_0 - \frac f{f_s} (n-1) - \phi_0\right)}\right)\ = \mathrm{arg}\left( A^2 e^{j2\pi\left( \frac f{f_s} n - \frac f{f_s} (n-1)\right)}\right)\ = \mathrm{arg}\left( A^2 e^{j2\pi\left( \frac f{f_s} \left(n-(n-1)\right)\right)}\right)\ = \mathrm{arg}\left( A^2 e^{j2\pi \frac f{f_s}}\right) \intertext{$A$ is real, so is $A^2$ and hence only \textit{scales}, therefore $\mathrm{arg}(\cdot)$ is invariant:} = \mathrm{arg}\left(e^{j2\pi \frac f{f_s}}\right)\= \frac f{f_s}\\
+
+file_format: 1
diff --git a/gr-analog/grc/analog_quadrature_demod_cf.xml b/gr-analog/grc/analog_quadrature_demod_cf.xml
deleted file mode 100644
index 447acf2ed8..0000000000
--- a/gr-analog/grc/analog_quadrature_demod_cf.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Quadrature Demodulator
-###################################################
- -->
-<block>
- <name>Quadrature Demod</name>
- <key>analog_quadrature_demod_cf</key>
- <import>from gnuradio import analog</import>
- <import>import math</import>
- <make>analog.quadrature_demod_cf($gain)</make>
- <callback>set_gain($gain)</callback>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>samp_rate/(2*math.pi*fsk_deviation_hz/8.0)</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
- <doc>
-This can be used to demod FM, FSK, GMSK, etc. The input is complex
-baseband, output is the signal frequency in relation to the sample
-rated, multiplied with the gain.
-
-Mathematically, this block calculates the product of the one-sample
-delayed input and the conjugate undelayed signal, and then calculates
-the argument of the resulting complex number:
-
-y[n] = \mathrm{arg}\left(x[n] \, \bar x [n-1]\right).
-
-Let x be a complex sinusoid with amplitude A>0, (absolute)
-frequency f\in\mathbb R and phase \phi_0\in[0;2\pi] sampled at
-f_s>0 so, without loss of generality,
-
-x[n]= A e^{j2\pi( \frac f{f_s} n + \phi_0)}\f
-
-then
-
-y[n] = \mathrm{arg}\left(A e^{j2\pi\left( \frac f{f_s} n + \phi_0\right)} \overline{A e^{j2\pi( \frac f{f_s} (n-1) + \phi_0)}}\right)\\
- = \mathrm{arg}\left(A^2 e^{j2\pi\left( \frac f{f_s} n + \phi_0\right)} e^{-j2\pi( \frac f{f_s} (n-1) + \phi_0)}\right)\\
- = \mathrm{arg}\left( A^2 e^{j2\pi\left( \frac f{f_s} n + \phi_0 - \frac f{f_s} (n-1) - \phi_0\right)}\right)\\
- = \mathrm{arg}\left( A^2 e^{j2\pi\left( \frac f{f_s} n - \frac f{f_s} (n-1)\right)}\right)\\
- = \mathrm{arg}\left( A^2 e^{j2\pi\left( \frac f{f_s} \left(n-(n-1)\right)\right)}\right)\\
- = \mathrm{arg}\left( A^2 e^{j2\pi \frac f{f_s}}\right) \intertext{$A$ is real, so is $A^2$ and hence only \textit{scales}, therefore $\mathrm{arg}(\cdot)$ is invariant:} = \mathrm{arg}\left(e^{j2\pi \frac f{f_s}}\right)\\
-= \frac f{f_s}\\
- </doc>
-</block>
diff --git a/gr-analog/grc/analog_rail_ff.block.yml b/gr-analog/grc/analog_rail_ff.block.yml
new file mode 100644
index 0000000000..8a2d2e8a54
--- /dev/null
+++ b/gr-analog/grc/analog_rail_ff.block.yml
@@ -0,0 +1,27 @@
+id: analog_rail_ff
+label: Rail
+
+parameters:
+- id: lo
+ label: Low clipping
+ dtype: real
+- id: hi
+ label: Hi clipping
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.rail_ff(${lo}, ${hi})
+ callbacks:
+ - set_lo(${lo})
+ - set_hi(${hi})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_rail_ff.xml b/gr-analog/grc/analog_rail_ff.xml
deleted file mode 100644
index 87dff09771..0000000000
--- a/gr-analog/grc/analog_rail_ff.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-<!--
-#
-# Copyright 2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##Rail
-###################################################
- -->
-<block>
- <name>Rail</name>
- <key>analog_rail_ff</key>
- <import>from gnuradio import analog</import>
- <make>analog.rail_ff($lo, $hi)</make>
- <callback>set_lo($lo)</callback>
- <callback>set_hi($hi)</callback>
- <param>
- <name>Low clipping</name>
- <key>lo</key>
- <type>real</type>
- </param>
- <param>
- <name>Hi clipping</name>
- <key>hi</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_random_source_x.block.yml b/gr-analog/grc/analog_random_source_x.block.yml
new file mode 100644
index 0000000000..595aa81b6d
--- /dev/null
+++ b/gr-analog/grc/analog_random_source_x.block.yml
@@ -0,0 +1,47 @@
+id: analog_random_source_x
+label: Random Source
+
+parameters:
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [int, short, byte]
+ option_attributes:
+ fcn: [i, s, b]
+ hide: part
+- id: min
+ label: Minimum
+ dtype: int
+ default: '0'
+- id: max
+ label: Maximum
+ dtype: int
+ default: '2'
+- id: num_samps
+ label: Num Samples
+ dtype: int
+ default: '1000'
+- id: repeat
+ label: Repeat
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: |-
+ from gnuradio import blocks
+ import numpy
+ make: blocks.vector_source_${type.fcn}(map(int, numpy.random.randint(${min}, ${max},
+ ${num_samps})), ${repeat})
+
+documentation: |-
+ Generate num samples of random numbers of [min, max). Repeat samples if specified.
+
+ Ex: With min=0 and max=2, the sequence 01110101... will be generated.
+
+file_format: 1
diff --git a/gr-analog/grc/analog_random_source_x.xml b/gr-analog/grc/analog_random_source_x.xml
deleted file mode 100644
index e466c02fbe..0000000000
--- a/gr-analog/grc/analog_random_source_x.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Random Source:
-## Custom block
-###################################################
- -->
-<block>
- <name>Random Source</name>
- <key>analog_random_source_x</key>
- <import>from gnuradio import blocks</import>
- <import>import numpy</import>
- <make>blocks.vector_source_$(type.fcn)(map(int, numpy.random.randint($min, $max, $num_samps)), $repeat)</make>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:b</opt>
- </option>
- </param>
- <param>
- <name>Minimum</name>
- <key>min</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Maximum</name>
- <key>max</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Num Samples</name>
- <key>num_samps</key>
- <value>1000</value>
- <type>int</type>
- </param>
- <param>
- <name>Repeat</name>
- <key>repeat</key>
- <value>True</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
- <doc>
-Generate num samples of random numbers of [min, max). Repeat samples if specified.
-
-Ex: With min=0 and max=2, the sequence 01110101... will be generated.
- </doc>
-</block>
diff --git a/gr-analog/grc/analog_random_uniform_source_x.block.yml b/gr-analog/grc/analog_random_uniform_source_x.block.yml
new file mode 100644
index 0000000000..d76bc903a5
--- /dev/null
+++ b/gr-analog/grc/analog_random_uniform_source_x.block.yml
@@ -0,0 +1,32 @@
+id: analog_random_uniform_source_x
+label: Random Uniform Source
+
+parameters:
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [int, short, byte]
+ option_attributes:
+ fcn: [i, s, b]
+ offset_type: [int, int, int]
+ hide: part
+- id: minimum
+ label: Minimum
+ dtype: int
+- id: maximum
+ label: Maximum
+ dtype: int
+- id: seed
+ label: Seed
+ dtype: int
+ default: '0'
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.random_uniform_source_${type.fcn}(${minimum}, ${maximum}, ${seed})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_random_uniform_source_x.xml b/gr-analog/grc/analog_random_uniform_source_x.xml
deleted file mode 100644
index c81b637f97..0000000000
--- a/gr-analog/grc/analog_random_uniform_source_x.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>Random Uniform Source</name>
- <key>analog_random_uniform_source_x</key>
- <import>from gnuradio import analog</import>
- <make>analog.random_uniform_source_$(type.fcn)($minimum, $maximum, $seed)</make>
-
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- <opt>offset_type:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- <opt>offset_type:int</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:b</opt>
- <opt>offset_type:int</opt>
- </option>
- </param>
-
- <param>
- <name>Minimum</name>
- <key>minimum</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Maximum</name>
- <key>maximum</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0</value>
- <type>int</type>
- </param>
-
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_sig_source_x.block.yml b/gr-analog/grc/analog_sig_source_x.block.yml
new file mode 100644
index 0000000000..2fbc853a9b
--- /dev/null
+++ b/gr-analog/grc/analog_sig_source_x.block.yml
@@ -0,0 +1,57 @@
+id: analog_sig_source_x
+label: Signal Source
+
+parameters:
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ fcn: [c, f, i, s]
+ offset_type: [complex, real, int, int]
+ hide: part
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+- id: waveform
+ label: Waveform
+ dtype: int
+ default: analog.GR_COS_WAVE
+ options: [analog.GR_CONST_WAVE, analog.GR_SIN_WAVE, analog.GR_COS_WAVE, analog.GR_SQR_WAVE,
+ analog.GR_TRI_WAVE, analog.GR_SAW_WAVE]
+ option_labels: [Constant, Sine, Cosine, Square, Triangle, Saw Tooth]
+- id: freq
+ label: Frequency
+ dtype: real
+ default: '1000'
+- id: amp
+ label: Amplitude
+ dtype: real
+ default: '1'
+- id: offset
+ label: Offset
+ dtype: ${ type.offset_type }
+ default: '0'
+
+inputs:
+- domain: message
+ id: freq
+ optional: true
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.sig_source_${type.fcn}(${samp_rate}, ${waveform}, ${freq}, ${amp},
+ ${offset})
+ callbacks:
+ - set_sampling_freq(${samp_rate})
+ - set_waveform(${waveform})
+ - set_frequency(${freq})
+ - set_amplitude(${amp})
+ - set_offset(${offset})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_sig_source_x.xml b/gr-analog/grc/analog_sig_source_x.xml
deleted file mode 100644
index e3c587b254..0000000000
--- a/gr-analog/grc/analog_sig_source_x.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Signal Source
-###################################################
- -->
-<block>
- <name>Signal Source</name>
- <key>analog_sig_source_x</key>
- <import>from gnuradio import analog</import>
- <make>analog.sig_source_$(type.fcn)($samp_rate, $waveform, $freq, $amp, $offset)</make>
- <callback>set_sampling_freq($samp_rate)</callback>
- <callback>set_waveform($waveform)</callback>
- <callback>set_frequency($freq)</callback>
- <callback>set_amplitude($amp)</callback>
- <callback>set_offset($offset)</callback>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- <opt>offset_type:complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- <opt>offset_type:real</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- <opt>offset_type:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- <opt>offset_type:int</opt>
- </option>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Waveform</name>
- <key>waveform</key>
- <value>analog.GR_COS_WAVE</value>
- <type>int</type>
- <option>
- <name>Constant</name>
- <key>analog.GR_CONST_WAVE</key>
- </option>
- <option>
- <name>Sine</name>
- <key>analog.GR_SIN_WAVE</key>
- </option>
- <option>
- <name>Cosine</name>
- <key>analog.GR_COS_WAVE</key>
- </option>
- <option>
- <name>Square</name>
- <key>analog.GR_SQR_WAVE</key>
- </option>
- <option>
- <name>Triangle</name>
- <key>analog.GR_TRI_WAVE</key>
- </option>
- <option>
- <name>Saw Tooth</name>
- <key>analog.GR_SAW_WAVE</key>
- </option>
- </param>
- <param>
- <name>Frequency</name>
- <key>freq</key>
- <value>1000</value>
- <type>real</type>
- </param>
- <param>
- <name>Amplitude</name>
- <key>amp</key>
- <value>1</value>
- <type>real</type>
- </param>
- <param>
- <name>Offset</name>
- <key>offset</key>
- <value>0</value>
- <type>$type.offset_type</type>
- </param>
- <sink>
- <name>freq</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_simple_squelch_cc.block.yml b/gr-analog/grc/analog_simple_squelch_cc.block.yml
new file mode 100644
index 0000000000..17a98eb4ba
--- /dev/null
+++ b/gr-analog/grc/analog_simple_squelch_cc.block.yml
@@ -0,0 +1,27 @@
+id: analog_simple_squelch_cc
+label: Simple Squelch
+
+parameters:
+- id: threshold
+ label: Threshold (dB)
+ dtype: real
+- id: alpha
+ label: Alpha
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import analog
+ make: analog.simple_squelch_cc(${threshold}, ${alpha})
+ callbacks:
+ - set_threshold(${threshold})
+ - set_alpha(${alpha})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_simple_squelch_cc.xml b/gr-analog/grc/analog_simple_squelch_cc.xml
deleted file mode 100644
index 648921a149..0000000000
--- a/gr-analog/grc/analog_simple_squelch_cc.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Simple Squelch
-###################################################
- -->
-<block>
- <name>Simple Squelch</name>
- <key>analog_simple_squelch_cc</key>
- <import>from gnuradio import analog</import>
- <make>analog.simple_squelch_cc($threshold, $alpha)</make>
- <callback>set_threshold($threshold)</callback>
- <callback>set_alpha($alpha)</callback>
- <param>
- <name>Threshold (dB)</name>
- <key>threshold</key>
- <type>real</type>
- </param>
- <param>
- <name>Alpha</name>
- <key>alpha</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_standard_squelch.block.yml b/gr-analog/grc/analog_standard_squelch.block.yml
new file mode 100644
index 0000000000..d753dfaf01
--- /dev/null
+++ b/gr-analog/grc/analog_standard_squelch.block.yml
@@ -0,0 +1,28 @@
+id: analog_standard_squelch
+label: Standard Squelch
+
+parameters:
+- id: audio_rate
+ label: Audio Rate
+ dtype: real
+- id: threshold
+ label: Threshold
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import analog
+ make: |-
+ analog.standard_squelch(audio_rate=${audio_rate})
+ self.${id}.set_threshold(${threshold})
+ callbacks:
+ - set_threshold(${threshold})
+
+file_format: 1
diff --git a/gr-analog/grc/analog_standard_squelch.xml b/gr-analog/grc/analog_standard_squelch.xml
deleted file mode 100644
index 264c57ab56..0000000000
--- a/gr-analog/grc/analog_standard_squelch.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Standard Squelch
-###################################################
- -->
-<block>
- <name>Standard Squelch</name>
- <key>analog_standard_squelch</key>
- <import>from gnuradio import analog</import>
- <make>analog.standard_squelch(audio_rate=$audio_rate)
-self.$(id).set_threshold($threshold)</make>
- <callback>set_threshold($threshold)</callback>
- <param>
- <name>Audio Rate</name>
- <key>audio_rate</key>
- <type>real</type>
- </param>
- <param>
- <name>Threshold</name>
- <key>threshold</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_wfm_rcv.block.yml b/gr-analog/grc/analog_wfm_rcv.block.yml
new file mode 100644
index 0000000000..eb3a84893e
--- /dev/null
+++ b/gr-analog/grc/analog_wfm_rcv.block.yml
@@ -0,0 +1,25 @@
+id: analog_wfm_rcv
+label: WBFM Receive
+
+parameters:
+- id: quad_rate
+ label: Quadrature Rate
+ dtype: real
+- id: audio_decimation
+ label: Audio Decimation
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import analog
+ make: "analog.wfm_rcv(\n\tquad_rate=${quad_rate},\n\taudio_decimation=${audio_decimation},\n\
+ )"
+
+file_format: 1
diff --git a/gr-analog/grc/analog_wfm_rcv.xml b/gr-analog/grc/analog_wfm_rcv.xml
deleted file mode 100644
index ce2abb92de..0000000000
--- a/gr-analog/grc/analog_wfm_rcv.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##WBFM Receive
-###################################################
- -->
-<block>
- <name>WBFM Receive</name>
- <key>analog_wfm_rcv</key>
- <import>from gnuradio import analog</import>
- <make>analog.wfm_rcv(
- quad_rate=$quad_rate,
- audio_decimation=$audio_decimation,
-)</make>
- <param>
- <name>Quadrature Rate</name>
- <key>quad_rate</key>
- <type>real</type>
- </param>
- <param>
- <name>Audio Decimation</name>
- <key>audio_decimation</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_wfm_rcv_pll.block.yml b/gr-analog/grc/analog_wfm_rcv_pll.block.yml
new file mode 100644
index 0000000000..e5e3d76ccc
--- /dev/null
+++ b/gr-analog/grc/analog_wfm_rcv_pll.block.yml
@@ -0,0 +1,29 @@
+id: analog_wfm_rcv_pll
+label: WBFM Receive PLL
+
+parameters:
+- id: quad_rate
+ label: Quadrature Rate
+ dtype: real
+- id: audio_decimation
+ label: Audio Decimation
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- label: Lout
+ domain: stream
+ dtype: float
+- label: Rout
+ domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import analog
+ make: "analog.wfm_rcv_pll(\n\tdemod_rate=${quad_rate},\n\taudio_decimation=${audio_decimation},\n\
+ )"
+
+file_format: 1
diff --git a/gr-analog/grc/analog_wfm_rcv_pll.xml b/gr-analog/grc/analog_wfm_rcv_pll.xml
deleted file mode 100644
index db31ed9bee..0000000000
--- a/gr-analog/grc/analog_wfm_rcv_pll.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##WBFM Receive PLL
-###################################################
- -->
-<block>
- <name>WBFM Receive PLL</name>
- <key>analog_wfm_rcv_pll</key>
- <import>from gnuradio import analog</import>
- <make>analog.wfm_rcv_pll(
- demod_rate=$quad_rate,
- audio_decimation=$audio_decimation,
-)</make>
- <param>
- <name>Quadrature Rate</name>
- <key>quad_rate</key>
- <type>real</type>
- </param>
- <param>
- <name>Audio Decimation</name>
- <key>audio_decimation</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>Lout</name>
- <type>float</type>
- </source>
- <source>
- <name>Rout</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-analog/grc/analog_wfm_tx.block.yml b/gr-analog/grc/analog_wfm_tx.block.yml
new file mode 100644
index 0000000000..1e4346c41d
--- /dev/null
+++ b/gr-analog/grc/analog_wfm_tx.block.yml
@@ -0,0 +1,40 @@
+id: analog_wfm_tx
+label: WBFM Transmit
+
+parameters:
+- id: audio_rate
+ label: Audio Rate
+ dtype: int
+- id: quad_rate
+ label: Quadrature Rate
+ dtype: int
+- id: tau
+ label: Tau
+ dtype: real
+ default: 75e-6
+- id: max_dev
+ label: Max Deviation
+ dtype: real
+ default: 75e3
+- id: fh
+ label: Preemphasis High Corner Freq
+ dtype: real
+ default: '-1.0'
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: complex
+
+asserts:
+- ${ (quad_rate)%(audio_rate) == 0 }
+
+templates:
+ imports: from gnuradio import analog
+ make: "analog.wfm_tx(\n\taudio_rate=${audio_rate},\n\tquad_rate=${quad_rate},\n\
+ \ttau=${tau},\n\tmax_dev=${max_dev},\n\tfh=${fh},\n)"
+
+file_format: 1
diff --git a/gr-analog/grc/analog_wfm_tx.xml b/gr-analog/grc/analog_wfm_tx.xml
deleted file mode 100644
index 507c2ea894..0000000000
--- a/gr-analog/grc/analog_wfm_tx.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##WBFM Transmit
-###################################################
- -->
-<block>
- <name>WBFM Transmit</name>
- <key>analog_wfm_tx</key>
- <import>from gnuradio import analog</import>
- <make>analog.wfm_tx(
- audio_rate=$audio_rate,
- quad_rate=$quad_rate,
- tau=$tau,
- max_dev=$max_dev,
- fh=$fh,
-)</make>
- <param>
- <name>Audio Rate</name>
- <key>audio_rate</key>
- <type>int</type>
- </param>
- <param>
- <name>Quadrature Rate</name>
- <key>quad_rate</key>
- <type>int</type>
- </param>
- <param>
- <name>Tau</name>
- <key>tau</key>
- <value>75e-6</value>
- <type>real</type>
- </param>
- <param>
- <name>Max Deviation</name>
- <key>max_dev</key>
- <value>75e3</value>
- <type>real</type>
- </param>
- <param>
- <name>Preemphasis High Corner Freq</name>
- <key>fh</key>
- <value>-1.0</value>
- <type>real</type>
- </param>
- <check>($quad_rate)%($audio_rate) == 0</check>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-audio/grc/CMakeLists.txt b/gr-audio/grc/CMakeLists.txt
index 7da5fbc352..ead168ee4c 100644
--- a/gr-audio/grc/CMakeLists.txt
+++ b/gr-audio/grc/CMakeLists.txt
@@ -18,5 +18,5 @@
# Boston, MA 02110-1301, USA.
########################################################################
-file(GLOB xml_files "*.xml")
-install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR})
+file(GLOB yml_files "*.yml")
+install(FILES ${yml_files} DESTINATION ${GRC_BLOCKS_DIR})
diff --git a/gr-audio/grc/audio_sink.block.yml b/gr-audio/grc/audio_sink.block.yml
new file mode 100644
index 0000000000..05dd947f81
--- /dev/null
+++ b/gr-audio/grc/audio_sink.block.yml
@@ -0,0 +1,49 @@
+id: audio_sink
+label: Audio Sink
+category: '[Core]/Audio'
+flags: throttle
+
+parameters:
+- id: samp_rate
+ label: Sample Rate
+ dtype: int
+ default: samp_rate
+ options: ['16000', '22050', '24000', '32000', '44100', '48000']
+ option_labels: [16KHz, 22.05KHz, 24KHz, 32KHz, 44.1KHz, 48KHz]
+- id: device_name
+ label: Device Name
+ dtype: string
+ hide: ${ ('none' if device_name else 'part') }
+- id: ok_to_block
+ label: OK to Block
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '1'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: float
+ multiplicity: ${ num_inputs }
+
+asserts:
+- ${ 0 < num_inputs }
+
+templates:
+ imports: from gnuradio import audio
+ make: audio.sink(${samp_rate}, ${device_name}, ${ok_to_block})
+
+documentation: |-
+ Not all sampling rates will be supported by your hardware.
+
+ Leave the device name blank to choose deafult audio device. ALSA users with audio trouble may try setting the device name to plughw:0,0
+
+ The audio sink can have multiple inputs depending upon your hardware. For example, set the inputs to 2 for stereo audio.
+
+file_format: 1
diff --git a/gr-audio/grc/audio_sink.xml b/gr-audio/grc/audio_sink.xml
deleted file mode 100644
index 9181055cd9..0000000000
--- a/gr-audio/grc/audio_sink.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Audio Sink
-###################################################
- -->
-<block>
- <name>Audio Sink</name>
- <key>audio_sink</key>
- <category>[Core]/Audio</category>
- <flags>throttle</flags>
- <import>from gnuradio import audio</import>
- <make>audio.sink($samp_rate, $device_name, $ok_to_block)</make>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>int</type>
- <option>
- <name>16KHz</name>
- <key>16000</key>
- </option>
- <option>
- <name>22.05KHz</name>
- <key>22050</key>
- </option>
- <option>
- <name>24KHz</name>
- <key>24000</key>
- </option>
- <option>
- <name>32KHz</name>
- <key>32000</key>
- </option>
- <option>
- <name>44.1KHz</name>
- <key>44100</key>
- </option>
- <option>
- <name>48KHz</name>
- <key>48000</key>
- </option>
- </param>
- <param>
- <name>Device Name</name>
- <key>device_name</key>
- <value></value>
- <type>string</type>
- <hide>#if $device_name() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>OK to Block</name>
- <key>ok_to_block</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>0 &lt; $num_inputs</check>
- <sink>
- <name>in</name>
- <type>float</type>
- <nports>$num_inputs</nports>
- </sink>
- <doc>
-Not all sampling rates will be supported by your hardware.
-
-Leave the device name blank to choose deafult audio device. \
-ALSA users with audio trouble may try setting the device name to plughw:0,0
-
-The audio sink can have multiple inputs depending upon your hardware. \
-For example, set the inputs to 2 for stereo audio.
- </doc>
-</block>
diff --git a/gr-audio/grc/audio_source.block.yml b/gr-audio/grc/audio_source.block.yml
new file mode 100644
index 0000000000..cf22ab3cbe
--- /dev/null
+++ b/gr-audio/grc/audio_source.block.yml
@@ -0,0 +1,49 @@
+id: audio_source
+label: Audio Source
+category: '[Core]/Audio'
+flags: throttle
+
+parameters:
+- id: samp_rate
+ label: Sample Rate
+ dtype: int
+ default: samp_rate
+ options: ['16000', '22050', '24000', '32000', '44100', '48000']
+ option_labels: [16KHz, 22.05KHz, 24KHz, 32KHz, 44.1KHz, 48KHz]
+- id: device_name
+ label: Device Name
+ dtype: string
+ hide: ${ ('none' if device_name else 'part') }
+- id: ok_to_block
+ label: OK to Block
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: num_outputs
+ label: Num Outputs
+ dtype: int
+ default: '1'
+ hide: part
+
+outputs:
+- domain: stream
+ dtype: float
+ multiplicity: ${ num_outputs }
+
+asserts:
+- ${ 0 < num_outputs }
+
+templates:
+ imports: from gnuradio import audio
+ make: audio.source(${samp_rate}, ${device_name}, ${ok_to_block})
+
+documentation: |-
+ Not all sampling rates will be supported by your hardware.
+
+ Leave the device name blank to choose deafult audio device. ALSA users with audio trouble may try setting the device name to plughw:0,0
+
+ The audio source can have multiple outputs depending upon your hardware. For example, set the outputs to 2 for stereo audio.
+
+file_format: 1
diff --git a/gr-audio/grc/audio_source.xml b/gr-audio/grc/audio_source.xml
deleted file mode 100644
index 044b14466f..0000000000
--- a/gr-audio/grc/audio_source.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Audio Source
-###################################################
- -->
-<block>
- <name>Audio Source</name>
- <key>audio_source</key>
- <category>[Core]/Audio</category>
- <flags>throttle</flags>
- <import>from gnuradio import audio</import>
- <make>audio.source($samp_rate, $device_name, $ok_to_block)</make>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>int</type>
- <option>
- <name>16KHz</name>
- <key>16000</key>
- </option>
- <option>
- <name>22.05KHz</name>
- <key>22050</key>
- </option>
- <option>
- <name>24KHz</name>
- <key>24000</key>
- </option>
- <option>
- <name>32KHz</name>
- <key>32000</key>
- </option>
- <option>
- <name>44.1KHz</name>
- <key>44100</key>
- </option>
- <option>
- <name>48KHz</name>
- <key>48000</key>
- </option>
- </param>
- <param>
- <name>Device Name</name>
- <key>device_name</key>
- <value></value>
- <type>string</type>
- <hide>#if $device_name() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>OK to Block</name>
- <key>ok_to_block</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Num Outputs</name>
- <key>num_outputs</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>0 &lt; $num_outputs</check>
- <source>
- <name>out</name>
- <type>float</type>
- <nports>$num_outputs</nports>
- </source>
- <doc>
-Not all sampling rates will be supported by your hardware.
-
-Leave the device name blank to choose deafult audio device. \
-ALSA users with audio trouble may try setting the device name to plughw:0,0
-
-The audio source can have multiple outputs depending upon your hardware. \
-For example, set the outputs to 2 for stereo audio.
- </doc>
-</block>
diff --git a/gr-blocks/grc/CMakeLists.txt b/gr-blocks/grc/CMakeLists.txt
index 2dd1481a47..3d0e5d81a0 100644
--- a/gr-blocks/grc/CMakeLists.txt
+++ b/gr-blocks/grc/CMakeLists.txt
@@ -18,14 +18,14 @@
# Boston, MA 02110-1301, USA.
########################################################################
-file(GLOB xml_files "*.xml")
+file(GLOB yml_files "*.yml")
# Force out the controlport GRC blocks if we've disabled it.
if(NOT ENABLE_GR_CTRLPORT)
- list(REMOVE_ITEM xml_files
- ${CMAKE_CURRENT_SOURCE_DIR}/ctrlport_probe_c.xml
- ${CMAKE_CURRENT_SOURCE_DIR}/ctrlport_probe2_c.xml
+ list(REMOVE_ITEM yml_files
+ ${CMAKE_CURRENT_SOURCE_DIR}/ctrlport_probe_c.block.yml
+ ${CMAKE_CURRENT_SOURCE_DIR}/ctrlport_probe2_c.block.yml
)
endif(NOT ENABLE_GR_CTRLPORT)
-install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR})
+install(FILES ${yml_files} DESTINATION ${GRC_BLOCKS_DIR})
diff --git a/gr-blocks/grc/blocks.tree.yml b/gr-blocks/grc/blocks.tree.yml
new file mode 100644
index 0000000000..ebe509ddc4
--- /dev/null
+++ b/gr-blocks/grc/blocks.tree.yml
@@ -0,0 +1,171 @@
+'[Core]':
+- Audio:
+ - blocks_wavfile_source
+ - blocks_wavfile_sink
+- Boolean Operators:
+ - blocks_and_xx
+ - blocks_and_const_xx
+ - blocks_not_xx
+ - blocks_or_xx
+ - blocks_xor_xx
+- Byte Operators:
+ - blocks_packed_to_unpacked_xx
+ - blocks_unpacked_to_packed_xx
+ - blocks_pack_k_bits_bb
+ - blocks_unpack_k_bits_bb
+ - blocks_repack_bits_bb
+- Control Port:
+ - blocks_ctrlport_monitor
+ - blocks_ctrlport_monitor_performance
+ - blocks_ctrlport_probe2_x
+ - blocks_ctrlport_probe2_c
+ - blocks_ctrlport_probe_c
+- Debug Tools:
+ - blocks_vector_sink_x
+ - blocks_tag_debug
+ - blocks_message_debug
+ - blocks_random_pdu
+ - blocks_message_strobe
+ - blocks_message_strobe_random
+ - blocks_tags_strobe
+ - blocks_test_tag_variable_rate_ff
+- File Operators:
+ - blocks_wavfile_source
+ - blocks_wavfile_sink
+ - blocks_file_source
+ - blocks_file_sink
+ - blocks_file_descriptor_source
+ - blocks_file_descriptor_sink
+ - blocks_file_meta_source
+ - blocks_file_meta_sink
+ - blocks_tagged_file_sink
+- Level Controllers:
+ - blocks_mute_xx
+ - blocks_sample_and_hold_xx
+ - blocks_moving_average_xx
+ - blocks_threshold_ff
+- Math Operators:
+ - blocks_abs_xx
+ - blocks_add_xx
+ - blocks_add_const_vxx
+ - blocks_divide_xx
+ - blocks_exponentiate_const_cci
+ - blocks_multiply_xx
+ - blocks_multiply_const_xx
+ - blocks_multiply_const_vxx
+ - blocks_multiply_conjugate_cc
+ - blocks_multiply_matrix_xx
+ - blocks_multiply_by_tag_value_cc
+ - blocks_sub_xx
+ - blocks_conjugate_cc
+ - blocks_integrate_xx
+ - blocks_nlog10_ff
+ - blocks_rms_xx
+ - blocks_rotator_cc
+ - blocks_transcendental
+ - blocks_argmax_xx
+ - blocks_max_xx
+ - blocks_min_xx
+- Measurement Tools:
+ - blocks_message_debug
+ - blocks_tag_debug
+ - blocks_probe_signal_x
+ - blocks_probe_signal_vx
+ - blocks_probe_rate
+ - blocks_ctrlport_probe2_c
+ - blocks_ctrlport_probe_c
+- Message Tools:
+ - blocks_message_strobe
+ - blocks_message_strobe_random
+ - blocks_message_debug
+ - blocks_pdu_filter
+ - blocks_pdu_remove
+ - blocks_pdu_set
+ - blocks_pdu_to_tagged_stream
+ - blocks_tagged_stream_multiply_length
+ - blocks_tagged_stream_to_pdu
+ - blocks_random_pdu
+- Misc:
+ - blocks_throttle
+ - blocks_vector_source_x
+ - blocks_head
+ - blocks_skiphead
+ - blocks_delay
+ - blocks_null_source
+ - blocks_null_sink
+ - blocks_copy
+ - blocks_nop
+ - xmlrpc_server
+ - xmlrpc_client
+- Modulators:
+ - blocks_vco_f
+ - blocks_vco_c
+- Networking Tools:
+ - blocks_tuntap_pdu
+ - blocks_socket_pdu
+ - blocks_tcp_server_sink
+ - blocks_udp_source
+ - blocks_udp_sink
+- Peak Detectors:
+ - blocks_burst_tagger
+ - blocks_peak_detector_xb
+ - blocks_peak_detector2_fb
+ - blocks_plateau_detector_fb
+- Stream Operators:
+ - blocks_deinterleave
+ - blocks_interleave
+ - blocks_keep_m_in_n
+ - blocks_keep_one_in_n
+ - blocks_stream_mux
+ - blocks_stream_to_streams
+ - blocks_stream_to_vector
+ - blocks_streams_to_stream
+ - blocks_streams_to_vector
+ - blocks_stream_to_vector_decimator
+ - blocks_vector_to_stream
+ - blocks_vector_to_streams
+ - blocks_patterned_interleaver
+ - blocks_endian_swap
+ - blocks_vector_insert_x
+ - blocks_tagged_stream_mux
+ - blocks_repeat
+ - blocks_regenerate_bb
+ - blocks_stretch_ff
+- Stream Tag Tools:
+ - blocks_tag_debug
+ - blocks_tag_gate
+ - blocks_tag_share
+ - blocks_tagged_file_sink
+ - blocks_tagged_stream_mux
+ - blocks_tagged_stream_align
+ - blocks_stream_to_tagged_stream
+ - blocks_test_tag_variable_rate_ff
+- Type Converters:
+ - blocks_char_to_float
+ - blocks_char_to_short
+ - blocks_complex_to_interleaved_char
+ - blocks_complex_to_interleaved_short
+ - blocks_complex_to_float
+ - blocks_complex_to_magphase
+ - blocks_complex_to_imag
+ - blocks_complex_to_real
+ - blocks_complex_to_mag
+ - blocks_complex_to_mag_squared
+ - blocks_complex_to_arg
+ - blocks_float_to_char
+ - blocks_float_to_complex
+ - blocks_magphase_to_complex
+ - blocks_float_to_int
+ - blocks_float_to_short
+ - blocks_float_to_uchar
+ - blocks_int_to_float
+ - blocks_interleaved_short_to_complex
+ - blocks_interleaved_char_to_complex
+ - blocks_short_to_char
+ - blocks_short_to_float
+ - blocks_uchar_to_float
+- Waveform Generators:
+ - blocks_vco_f
+ - blocks_vco_c
+- Variables:
+ - variable_tag_object
diff --git a/gr-blocks/grc/blocks_abs_xx.block.yml b/gr-blocks/grc/blocks_abs_xx.block.yml
new file mode 100644
index 0000000000..12d9a8fc3a
--- /dev/null
+++ b/gr-blocks/grc/blocks_abs_xx.block.yml
@@ -0,0 +1,32 @@
+id: blocks_abs_xx
+label: Abs
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [int, short, float]
+ option_attributes:
+ fcn: [ii, ss, ff]
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.abs_${type.fcn}(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_abs_xx.xml b/gr-blocks/grc/blocks_abs_xx.xml
deleted file mode 100644
index 77298716c8..0000000000
--- a/gr-blocks/grc/blocks_abs_xx.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Abs Block
-###################################################
- -->
-<block>
- <name>Abs</name>
- <key>blocks_abs_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.abs_$(type.fcn)($vlen)</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_add_const_vxx.block.yml b/gr-blocks/grc/blocks_add_const_vxx.block.yml
new file mode 100644
index 0000000000..b95065cdba
--- /dev/null
+++ b/gr-blocks/grc/blocks_add_const_vxx.block.yml
@@ -0,0 +1,43 @@
+id: blocks_add_const_vxx
+label: Add Const
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ const_type: [complex_vector, real_vector, int_vector, int_vector]
+ fcn: [cc, ff, ii, ss]
+ hide: part
+- id: const
+ label: Constant
+ dtype: ${ type.const_type }
+ default: '0'
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ len(const) == vlen }
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.add_const_v${type.fcn}(${const})
+ callbacks:
+ - set_k(${const})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_add_const_vxx.xml b/gr-blocks/grc/blocks_add_const_vxx.xml
deleted file mode 100644
index 96303acef1..0000000000
--- a/gr-blocks/grc/blocks_add_const_vxx.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Add Const Block:
-## all types, 1 output, 1 input & const
-###################################################
- -->
-<block>
- <name>Add Const</name>
- <key>blocks_add_const_vxx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.add_const_v$(type.fcn)($const)</make>
- <callback>set_k($const)</callback>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>const_type:complex_vector</opt>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>const_type:real_vector</opt>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>const_type:int_vector</opt>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>const_type:int_vector</opt>
- <opt>fcn:ss</opt>
- </option>
- </param>
- <param>
- <name>Constant</name>
- <key>const</key>
- <value>0</value>
- <type>$type.const_type</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>len($const) == $vlen</check>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_add_xx.block.yml b/gr-blocks/grc/blocks_add_xx.block.yml
new file mode 100644
index 0000000000..38df37a65b
--- /dev/null
+++ b/gr-blocks/grc/blocks_add_xx.block.yml
@@ -0,0 +1,42 @@
+id: blocks_add_xx
+label: Add
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ fcn: [cc, ff, ii, ss]
+ hide: part
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '2'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_inputs }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ num_inputs > 1 }
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.add_v${type.fcn}(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_add_xx.xml b/gr-blocks/grc/blocks_add_xx.xml
deleted file mode 100644
index 951dff5e5b..0000000000
--- a/gr-blocks/grc/blocks_add_xx.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Add Block:
-## all types, 1 output, 2 to inf inputs
-###################################################
- -->
-<block>
- <name>Add</name>
- <key>blocks_add_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.add_v$(type.fcn)($vlen)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_inputs &gt; 1</check>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_inputs</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_and_const_xx.block.yml b/gr-blocks/grc/blocks_and_const_xx.block.yml
new file mode 100644
index 0000000000..459527260c
--- /dev/null
+++ b/gr-blocks/grc/blocks_and_const_xx.block.yml
@@ -0,0 +1,31 @@
+id: blocks_and_const_xx
+label: And Const
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [int, short, byte]
+ option_attributes:
+ fcn: [ii, ss, bb]
+ hide: part
+- id: const
+ label: Constant
+ dtype: int
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.and_const_${type.fcn}(${const})
+ callbacks:
+ - set_k(${const})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_and_const_xx.xml b/gr-blocks/grc/blocks_and_const_xx.xml
deleted file mode 100644
index d0abbfe51b..0000000000
--- a/gr-blocks/grc/blocks_and_const_xx.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## And Const Block:
-## all types, 1 output, 1 input & const
-###################################################
- -->
-<block>
- <name>And Const</name>
- <key>blocks_and_const_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.and_const_$(type.fcn)($const)</make>
- <callback>set_k($const)</callback>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:bb</opt>
- </option>
- </param>
- <param>
- <name>Constant</name>
- <key>const</key>
- <value>0</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_and_xx.block.yml b/gr-blocks/grc/blocks_and_xx.block.yml
new file mode 100644
index 0000000000..a8bba020a5
--- /dev/null
+++ b/gr-blocks/grc/blocks_and_xx.block.yml
@@ -0,0 +1,34 @@
+id: blocks_and_xx
+label: And
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [int, short, byte]
+ option_attributes:
+ fcn: [ii, ss, bb]
+ hide: part
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '2'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ multiplicity: ${ num_inputs }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+asserts:
+- ${ num_inputs >= 2 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.and_${type.fcn}()
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_and_xx.xml b/gr-blocks/grc/blocks_and_xx.xml
deleted file mode 100644
index 317a0f6457..0000000000
--- a/gr-blocks/grc/blocks_and_xx.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Logical And Block
-###################################################
- -->
-<block>
- <name>And</name>
- <key>blocks_and_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.and_$(type.fcn)()</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:bb</opt>
- </option>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>2</value>
- <type>int</type>
- </param>
- <check>$num_inputs &gt;= 2</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <nports>$num_inputs</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_argmax_xx.block.yml b/gr-blocks/grc/blocks_argmax_xx.block.yml
new file mode 100644
index 0000000000..723f3fed6a
--- /dev/null
+++ b/gr-blocks/grc/blocks_argmax_xx.block.yml
@@ -0,0 +1,45 @@
+id: blocks_argmax_xx
+label: Argmax
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [float, int, short]
+ option_attributes:
+ fcn: [fs, is, dd]
+ hide: part
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '2'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_inputs }
+
+outputs:
+- label: max_vec
+ domain: stream
+ dtype: short
+- label: max_inp
+ domain: stream
+ dtype: short
+
+asserts:
+- ${ num_inputs >= 1 }
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.argmax_${type.fcn}(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_argmax_xx.xml b/gr-blocks/grc/blocks_argmax_xx.xml
deleted file mode 100644
index 7adfa75973..0000000000
--- a/gr-blocks/grc/blocks_argmax_xx.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##ArgMax:
-## 1 output, 2 to inf inputs
-###################################################
- -->
-<block>
- <name>Argmax</name>
- <key>blocks_argmax_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.argmax_$(type.fcn)($vlen)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:fs</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:is</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:dd</opt>
- </option>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_inputs &gt;= 1</check>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_inputs</nports>
- </sink>
- <source>
- <name>max_vec</name>
- <type>short</type>
- </source>
- <source>
- <name>max_inp</name>
- <type>short</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_block_tree.xml b/gr-blocks/grc/blocks_block_tree.xml
deleted file mode 100644
index ef2703f695..0000000000
--- a/gr-blocks/grc/blocks_block_tree.xml
+++ /dev/null
@@ -1,239 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2012,2013 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##Block Tree for gr-blocks.
-###################################################
- -->
-<cat>
- <name>[Core]</name>
- <cat>
- <name>Audio</name>
- <block>blocks_wavfile_source</block>
- <block>blocks_wavfile_sink</block>
- </cat>
- <cat>
- <name>Boolean Operators</name>
- <block>blocks_and_xx</block>
- <block>blocks_and_const_xx</block>
- <block>blocks_not_xx</block>
- <block>blocks_or_xx</block>
- <block>blocks_xor_xx</block>
- </cat>
- <cat>
- <name>Byte Operators</name>
- <block>blocks_packed_to_unpacked_xx</block>
- <block>blocks_unpacked_to_packed_xx</block>
- <block>blocks_pack_k_bits_bb</block>
- <block>blocks_unpack_k_bits_bb</block>
- <block>blocks_repack_bits_bb</block>
- </cat>
- <cat>
- <name>Control Port</name>
- <block>blocks_ctrlport_monitor</block>
- <block>blocks_ctrlport_monitor_performance</block>
- <block>blocks_ctrlport_probe2_x</block>
- <block>blocks_ctrlport_probe2_c</block>
- <block>blocks_ctrlport_probe_c</block>
- </cat>
- <cat>
- <name>Debug Tools</name>
- <block>blocks_vector_sink_x</block>
- <block>blocks_tag_debug</block>
- <block>blocks_message_debug</block>
- <block>blocks_random_pdu</block>
- <block>blocks_message_strobe</block>
- <block>blocks_message_strobe_random</block>
- <block>blocks_tags_strobe</block>
- <block>blocks_test_tag_variable_rate_ff</block>
- </cat>
- <cat>
- <name>File Operators</name>
- <block>blocks_wavfile_source</block>
- <block>blocks_wavfile_sink</block>
- <block>blocks_file_source</block>
- <block>blocks_file_sink</block>
- <block>blocks_file_descriptor_source</block>
- <block>blocks_file_descriptor_sink</block>
- <block>blocks_file_meta_source</block>
- <block>blocks_file_meta_sink</block>
- <block>blocks_tagged_file_sink</block>
- </cat>
- <cat>
- <name>Level Controllers</name>
- <block>blocks_mute_xx</block>
- <block>blocks_sample_and_hold_xx</block>
- <block>blocks_moving_average_xx</block>
- <block>blocks_threshold_ff</block>
- </cat>
- <cat>
- <name>Math Operators</name>
- <block>blocks_abs_xx</block>
- <block>blocks_add_xx</block>
- <block>blocks_add_const_vxx</block>
- <block>blocks_divide_xx</block>
- <block>blocks_exponentiate_const_cci</block>
- <block>blocks_multiply_xx</block>
- <block>blocks_multiply_const_xx</block>
- <block>blocks_multiply_const_vxx</block>
- <block>blocks_multiply_conjugate_cc</block>
- <block>blocks_multiply_matrix_xx</block>
- <block>blocks_multiply_by_tag_value_cc</block>
- <block>blocks_sub_xx</block>
- <block>blocks_conjugate_cc</block>
- <block>blocks_integrate_xx</block>
- <block>blocks_nlog10_ff</block>
- <block>blocks_rms_xx</block>
- <block>blocks_rotator_cc</block>
- <block>blocks_transcendental</block>
- <block>blocks_argmax_xx</block>
- <block>blocks_max_xx</block>
- <block>blocks_min_xx</block>
- </cat>
- <cat>
- <name>Measurement Tools</name>
- <block>blocks_message_debug</block>
- <block>blocks_tag_debug</block>
- <block>blocks_probe_signal_x</block>
- <block>blocks_probe_signal_vx</block>
- <block>blocks_probe_rate</block>
- <block>blocks_ctrlport_probe2_c</block>
- <block>blocks_ctrlport_probe_c</block>
- </cat>
- <cat>
- <name>Message Tools</name>
- <block>blocks_message_strobe</block>
- <block>blocks_message_strobe_random</block>
- <block>blocks_message_debug</block>
- <block>blocks_pdu_filter</block>
- <block>blocks_pdu_remove</block>
- <block>blocks_pdu_set</block>
- <block>blocks_pdu_to_tagged_stream</block>
- <block>blocks_tagged_stream_multiply_length</block>
- <block>blocks_tagged_stream_to_pdu</block>
- <block>blocks_random_pdu</block>
- </cat>
- <cat>
- <name>Misc</name>
- <block>blocks_throttle</block>
- <block>blocks_vector_source_x</block>
- <block>blocks_head</block>
- <block>blocks_skiphead</block>
- <block>blocks_delay</block>
- <block>blocks_null_source</block>
- <block>blocks_null_sink</block>
- <block>blocks_copy</block>
- <block>blocks_nop</block>
- <block>xmlrpc_server</block>
- <block>xmlrpc_client</block>
- </cat>
- <cat>
- <name>Modulators</name>
- <block>blocks_vco_f</block>
- <block>blocks_vco_c</block>
- </cat>
- <cat>
- <name>Networking Tools</name>
- <block>blocks_tuntap_pdu</block>
- <block>blocks_socket_pdu</block>
- <block>blocks_tcp_server_sink</block>
- <block>blocks_udp_source</block>
- <block>blocks_udp_sink</block>
- </cat>
- <cat>
- <name>Peak Detectors</name>
- <block>blocks_burst_tagger</block>
- <block>blocks_peak_detector_xb</block>
- <block>blocks_peak_detector2_fb</block>
- <block>blocks_plateau_detector_fb</block>
- </cat>
- <cat>
- <name>Stream Operators</name>
- <block>blocks_deinterleave</block>
- <block>blocks_interleave</block>
- <block>blocks_keep_m_in_n</block>
- <block>blocks_keep_one_in_n</block>
- <block>blocks_stream_mux</block>
- <block>blocks_stream_to_streams</block>
- <block>blocks_stream_to_vector</block>
- <block>blocks_streams_to_stream</block>
- <block>blocks_streams_to_vector</block>
- <block>blocks_stream_to_vector_decimator</block>
- <block>blocks_vector_to_stream</block>
- <block>blocks_vector_to_streams</block>
- <block>blocks_patterned_interleaver</block>
- <block>blocks_endian_swap</block>
- <block>blocks_vector_insert_x</block>
- <block>blocks_tagged_stream_mux</block>
- <block>blocks_repeat</block>
- <block>blocks_regenerate_bb</block>
- <block>blocks_stretch_ff</block>
- </cat>
- <cat>
- <name>Stream Tag Tools</name>
- <block>blocks_tag_debug</block>
- <block>blocks_tag_gate</block>
- <block>blocks_tag_share</block>
- <block>blocks_tagged_file_sink</block>
- <block>blocks_tagged_stream_mux</block>
- <block>blocks_tagged_stream_align</block>
- <block>blocks_stream_to_tagged_stream</block>
- <block>blocks_test_tag_variable_rate_ff</block>
- </cat>
- <cat>
- <name>Type Converters</name>
- <block>blocks_char_to_float</block>
- <block>blocks_char_to_short</block>
- <block>blocks_complex_to_interleaved_char</block>
- <block>blocks_complex_to_interleaved_short</block>
- <block>blocks_complex_to_float</block>
- <block>blocks_complex_to_magphase</block>
- <block>blocks_complex_to_imag</block>
- <block>blocks_complex_to_real</block>
- <block>blocks_complex_to_mag</block>
- <block>blocks_complex_to_mag_squared</block>
- <block>blocks_complex_to_arg</block>
- <block>blocks_float_to_char</block>
- <block>blocks_float_to_complex</block>
- <block>blocks_magphase_to_complex</block>
- <block>blocks_float_to_int</block>
- <block>blocks_float_to_short</block>
- <block>blocks_float_to_uchar</block>
- <block>blocks_int_to_float</block>
- <block>blocks_interleaved_short_to_complex</block>
- <block>blocks_interleaved_char_to_complex</block>
- <block>blocks_short_to_char</block>
- <block>blocks_short_to_float</block>
- <block>blocks_uchar_to_float</block>
- </cat>
- <cat>
- <name>Waveform Generators</name>
- <block>blocks_vco_f</block>
- <block>blocks_vco_c</block>
- </cat>
- <cat>
- <name>Variables</name>
- <block>variable_tag_object</block>
- </cat>
-</cat>
diff --git a/gr-blocks/grc/blocks_burst_tagger.block.yml b/gr-blocks/grc/blocks_burst_tagger.block.yml
new file mode 100644
index 0000000000..d2c4882e30
--- /dev/null
+++ b/gr-blocks/grc/blocks_burst_tagger.block.yml
@@ -0,0 +1,52 @@
+id: blocks_burst_tagger
+label: Burst Tagger
+
+parameters:
+- id: type
+ label: Stream Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: true_key
+ label: True KeyID
+ dtype: string
+ default: burst
+- id: true_value
+ label: True Value
+ dtype: bool
+ default: 'True'
+- id: false_key
+ label: False KeyID
+ dtype: string
+ default: burst
+- id: false_value
+ label: False Value
+ dtype: bool
+ default: 'False'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: 1
+- label: trigger
+ domain: stream
+ dtype: short
+ vlen: 1
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: 1
+
+templates:
+ imports: from gnuradio import blocks
+ make: "blocks.burst_tagger(${type.size})\nself.${id}.set_true_tag(${true_key},${true_value})\n\
+ self.${id}.set_false_tag(${false_key},${false_value})\n\t"
+ callbacks:
+ - set_true_tag(${true_key},${true_value})
+ - set_false_tag(${false_key},${false_value})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_burst_tagger.xml b/gr-blocks/grc/blocks_burst_tagger.xml
deleted file mode 100644
index f603b53489..0000000000
--- a/gr-blocks/grc/blocks_burst_tagger.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Burst tagger:
-## all types, 1 output, 2 input: stream & trigger (short)
-###################################################
- -->
-<block>
- <name>Burst Tagger</name>
- <key>blocks_burst_tagger</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.burst_tagger($type.size)
-self.$(id).set_true_tag($true_key,$true_value)
-self.$(id).set_false_tag($false_key,$false_value)
- </make>
- <callback>set_true_tag($true_key,$true_value)</callback>
- <callback>set_false_tag($false_key,$false_value)</callback>
- <param>
- <name>Stream Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>True KeyID</name>
- <key>true_key</key>
- <value>burst</value>
- <type>string</type>
- </param>
- <param>
- <name>True Value</name>
- <key>true_value</key>
- <value>True</value>
- <type>bool</type>
- </param>
- <param>
- <name>False KeyID</name>
- <key>false_key</key>
- <value>burst</value>
- <type>string</type>
- </param>
- <param>
- <name>False Value</name>
- <key>false_value</key>
- <value>False</value>
- <type>bool</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>1</vlen>
- </sink>
- <sink>
- <name>trigger</name>
- <type>short</type>
- <vlen>1</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>1</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_char_to_float.block.yml b/gr-blocks/grc/blocks_char_to_float.block.yml
new file mode 100644
index 0000000000..c0858b5c1d
--- /dev/null
+++ b/gr-blocks/grc/blocks_char_to_float.block.yml
@@ -0,0 +1,31 @@
+id: blocks_char_to_float
+label: Char To Float
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: scale
+ label: Scale
+ dtype: real
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.char_to_float(${vlen}, ${scale})
+ callbacks:
+ - set_scale(${scale})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_char_to_float.xml b/gr-blocks/grc/blocks_char_to_float.xml
deleted file mode 100644
index 5d367d719d..0000000000
--- a/gr-blocks/grc/blocks_char_to_float.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Char to Float:
-###################################################
- -->
-<block>
- <name>Char To Float</name>
- <key>blocks_char_to_float</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.char_to_float($vlen, $scale)</make>
- <callback>set_scale($scale)</callback>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Scale</name>
- <key>scale</key>
- <value>1</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_char_to_short.block.yml b/gr-blocks/grc/blocks_char_to_short.block.yml
new file mode 100644
index 0000000000..f378e87e72
--- /dev/null
+++ b/gr-blocks/grc/blocks_char_to_short.block.yml
@@ -0,0 +1,25 @@
+id: blocks_char_to_short
+label: Char To Short
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: short
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.char_to_short(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_char_to_short.xml b/gr-blocks/grc/blocks_char_to_short.xml
deleted file mode 100644
index b19fdb46ae..0000000000
--- a/gr-blocks/grc/blocks_char_to_short.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Char to Short:
-###################################################
- -->
-<block>
- <name>Char To Short</name>
- <key>blocks_char_to_short</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.char_to_short($vlen)</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>short</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_complex_to_arg.block.yml b/gr-blocks/grc/blocks_complex_to_arg.block.yml
new file mode 100644
index 0000000000..4f44e4ae2c
--- /dev/null
+++ b/gr-blocks/grc/blocks_complex_to_arg.block.yml
@@ -0,0 +1,28 @@
+id: blocks_complex_to_arg
+label: Complex to Arg
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.complex_to_arg(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_complex_to_arg.xml b/gr-blocks/grc/blocks_complex_to_arg.xml
deleted file mode 100644
index 83140501d2..0000000000
--- a/gr-blocks/grc/blocks_complex_to_arg.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Complex to Arg
-###################################################
- -->
-<block>
- <name>Complex to Arg</name>
- <key>blocks_complex_to_arg</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.complex_to_arg($vlen)</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_complex_to_float.block.yml b/gr-blocks/grc/blocks_complex_to_float.block.yml
new file mode 100644
index 0000000000..f7b35936c3
--- /dev/null
+++ b/gr-blocks/grc/blocks_complex_to_float.block.yml
@@ -0,0 +1,34 @@
+id: blocks_complex_to_float
+label: Complex To Float
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+
+outputs:
+- label: re
+ domain: stream
+ dtype: float
+ vlen: ${ vlen }
+- label: im
+ domain: stream
+ dtype: float
+ vlen: ${ vlen }
+ optional: true
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.complex_to_float(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_complex_to_float.xml b/gr-blocks/grc/blocks_complex_to_float.xml
deleted file mode 100644
index 7acf3fccb1..0000000000
--- a/gr-blocks/grc/blocks_complex_to_float.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Complex to Float:
-## one or two output streams
-###################################################
- -->
-<block>
- <name>Complex To Float</name>
- <key>blocks_complex_to_float</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.complex_to_float($vlen)</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>re</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </source>
- <source>
- <name>im</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_complex_to_imag.block.yml b/gr-blocks/grc/blocks_complex_to_imag.block.yml
new file mode 100644
index 0000000000..29e14046aa
--- /dev/null
+++ b/gr-blocks/grc/blocks_complex_to_imag.block.yml
@@ -0,0 +1,28 @@
+id: blocks_complex_to_imag
+label: Complex to Imag
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.complex_to_imag(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_complex_to_imag.xml b/gr-blocks/grc/blocks_complex_to_imag.xml
deleted file mode 100644
index cb2c2019ff..0000000000
--- a/gr-blocks/grc/blocks_complex_to_imag.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Complex to Imaginary
-###################################################
- -->
-<block>
- <name>Complex to Imag</name>
- <key>blocks_complex_to_imag</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.complex_to_imag($vlen)</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_complex_to_interleaved_char.block.yml b/gr-blocks/grc/blocks_complex_to_interleaved_char.block.yml
new file mode 100644
index 0000000000..06a75fc8d9
--- /dev/null
+++ b/gr-blocks/grc/blocks_complex_to_interleaved_char.block.yml
@@ -0,0 +1,28 @@
+id: blocks_complex_to_interleaved_char
+label: Complex To IChar
+
+parameters:
+- id: vector_output
+ label: Vector Output
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+ option_attributes:
+ vlen: ['1', '2']
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ vector_output.vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.complex_to_interleaved_char(${vector_output})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_complex_to_interleaved_char.xml b/gr-blocks/grc/blocks_complex_to_interleaved_char.xml
deleted file mode 100644
index 5631f242ca..0000000000
--- a/gr-blocks/grc/blocks_complex_to_interleaved_char.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Complex to Interleaved Char:
-###################################################
- -->
-<block>
- <name>Complex To IChar</name>
- <key>blocks_complex_to_interleaved_char</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.complex_to_interleaved_char($vector_output)</make>
- <param>
- <name>Vector Output</name>
- <key>vector_output</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>No</name>
- <key>False</key>
- <opt>vlen:1</opt>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- <opt>vlen:2</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>$vector_output.vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_complex_to_interleaved_short.block.yml b/gr-blocks/grc/blocks_complex_to_interleaved_short.block.yml
new file mode 100644
index 0000000000..0b8aa53621
--- /dev/null
+++ b/gr-blocks/grc/blocks_complex_to_interleaved_short.block.yml
@@ -0,0 +1,28 @@
+id: blocks_complex_to_interleaved_short
+label: Complex To IShort
+
+parameters:
+- id: vector_output
+ label: Vector Output
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+ option_attributes:
+ vlen: ['1', '2']
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: short
+ vlen: ${ vector_output.vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.complex_to_interleaved_short(${vector_output})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_complex_to_interleaved_short.xml b/gr-blocks/grc/blocks_complex_to_interleaved_short.xml
deleted file mode 100644
index 7f69d6b036..0000000000
--- a/gr-blocks/grc/blocks_complex_to_interleaved_short.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Complex to Interleaved Short:
-###################################################
- -->
-<block>
- <name>Complex To IShort</name>
- <key>blocks_complex_to_interleaved_short</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.complex_to_interleaved_short($vector_output)</make>
- <param>
- <name>Vector Output</name>
- <key>vector_output</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>No</name>
- <key>False</key>
- <opt>vlen:1</opt>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- <opt>vlen:2</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>short</type>
- <vlen>$vector_output.vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_complex_to_mag.block.yml b/gr-blocks/grc/blocks_complex_to_mag.block.yml
new file mode 100644
index 0000000000..d9582d1722
--- /dev/null
+++ b/gr-blocks/grc/blocks_complex_to_mag.block.yml
@@ -0,0 +1,28 @@
+id: blocks_complex_to_mag
+label: Complex to Mag
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.complex_to_mag(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_complex_to_mag.xml b/gr-blocks/grc/blocks_complex_to_mag.xml
deleted file mode 100644
index 2aa4faee71..0000000000
--- a/gr-blocks/grc/blocks_complex_to_mag.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Complex to Magnitude
-###################################################
- -->
-<block>
- <name>Complex to Mag</name>
- <key>blocks_complex_to_mag</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.complex_to_mag($vlen)</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_complex_to_mag_squared.block.yml b/gr-blocks/grc/blocks_complex_to_mag_squared.block.yml
new file mode 100644
index 0000000000..815636d654
--- /dev/null
+++ b/gr-blocks/grc/blocks_complex_to_mag_squared.block.yml
@@ -0,0 +1,28 @@
+id: blocks_complex_to_mag_squared
+label: Complex to Mag^2
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.complex_to_mag_squared(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_complex_to_mag_squared.xml b/gr-blocks/grc/blocks_complex_to_mag_squared.xml
deleted file mode 100644
index ee2270fecd..0000000000
--- a/gr-blocks/grc/blocks_complex_to_mag_squared.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Complex to Magnitude Squared
-###################################################
- -->
-<block>
- <name>Complex to Mag^2</name>
- <key>blocks_complex_to_mag_squared</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.complex_to_mag_squared($vlen)</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_complex_to_magphase.block.yml b/gr-blocks/grc/blocks_complex_to_magphase.block.yml
new file mode 100644
index 0000000000..80420ac2a0
--- /dev/null
+++ b/gr-blocks/grc/blocks_complex_to_magphase.block.yml
@@ -0,0 +1,34 @@
+id: blocks_complex_to_magphase
+label: Complex To Mag Phase
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+
+outputs:
+- label: mag
+ domain: stream
+ dtype: float
+ vlen: ${ vlen }
+- label: phase
+ domain: stream
+ dtype: float
+ vlen: ${ vlen }
+ optional: true
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.complex_to_magphase(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_complex_to_magphase.xml b/gr-blocks/grc/blocks_complex_to_magphase.xml
deleted file mode 100644
index cad310b2fb..0000000000
--- a/gr-blocks/grc/blocks_complex_to_magphase.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Complex to Magnitude and Phase (floats):
-## two output streams
-###################################################
- -->
-<block>
- <name>Complex To Mag Phase</name>
- <key>blocks_complex_to_magphase</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.complex_to_magphase($vlen)</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>mag</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </source>
- <source>
- <name>phase</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_complex_to_real.block.yml b/gr-blocks/grc/blocks_complex_to_real.block.yml
new file mode 100644
index 0000000000..41fbbb33cc
--- /dev/null
+++ b/gr-blocks/grc/blocks_complex_to_real.block.yml
@@ -0,0 +1,29 @@
+id: blocks_complex_to_real
+label: Complex To Real
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+
+outputs:
+- label: re
+ domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.complex_to_real(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_complex_to_real.xml b/gr-blocks/grc/blocks_complex_to_real.xml
deleted file mode 100644
index 6737f1da36..0000000000
--- a/gr-blocks/grc/blocks_complex_to_real.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Complex to Real:
-## one or two output streams
-###################################################
- -->
-<block>
- <name>Complex To Real</name>
- <key>blocks_complex_to_real</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.complex_to_real($vlen)</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>re</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_conjugate_cc.block.yml b/gr-blocks/grc/blocks_conjugate_cc.block.yml
new file mode 100644
index 0000000000..a0d8b1a64c
--- /dev/null
+++ b/gr-blocks/grc/blocks_conjugate_cc.block.yml
@@ -0,0 +1,16 @@
+id: blocks_conjugate_cc
+label: Complex Conjugate
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.conjugate_cc()
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_conjugate_cc.xml b/gr-blocks/grc/blocks_conjugate_cc.xml
deleted file mode 100644
index 152f797b20..0000000000
--- a/gr-blocks/grc/blocks_conjugate_cc.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Complex Conjugate
-###################################################
- -->
-<block>
- <name>Complex Conjugate</name>
- <key>blocks_conjugate_cc</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.conjugate_cc()</make>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_copy.block.yml b/gr-blocks/grc/blocks_copy.block.yml
new file mode 100644
index 0000000000..0de4bcadf5
--- /dev/null
+++ b/gr-blocks/grc/blocks_copy.block.yml
@@ -0,0 +1,57 @@
+id: blocks_copy
+label: Copy
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: enabled
+ label: Enabled
+ dtype: bool
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: [Enabled, Disabled]
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: showports
+ label: Show Msg Ports
+ dtype: enum
+ default: 'True'
+ options: ['False', 'True']
+ option_labels: ['Yes', 'No']
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+- domain: message
+ id: en
+ optional: true
+ hide: ${ showports }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: |-
+ blocks.copy(${type.size}*${vlen})
+ self.${id}.set_enabled(${enabled})
+ callbacks:
+ - set_enabled(${enabled})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_copy.xml b/gr-blocks/grc/blocks_copy.xml
deleted file mode 100644
index 6192937cd8..0000000000
--- a/gr-blocks/grc/blocks_copy.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Copy
-###################################################
- -->
-<block>
- <name>Copy</name>
- <key>blocks_copy</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.copy($type.size*$vlen)
-self.$(id).set_enabled($enabled)</make>
- <callback>set_enabled($enabled)</callback>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
-
- <param>
- <name>Enabled</name>
- <key>enabled</key>
- <value>True</value>
- <type>bool</type>
- <option>
- <name>Enabled</name>
- <key>True</key>
- </option>
- <option>
- <name>Disabled</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Show Msg Ports</name>
- <key>showports</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>False</key>
- </option>
- <option>
- <name>No</name>
- <key>True</key>
- </option>
- </param>
-
- <check>$vlen &gt; 0</check>
-
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
-
- <sink>
- <name>en</name>
- <type>message</type>
- <optional>1</optional>
- <hide>$showports</hide>
- </sink>
-
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_ctrlport_performance.block.yml b/gr-blocks/grc/blocks_ctrlport_performance.block.yml
new file mode 100644
index 0000000000..80f541a41b
--- /dev/null
+++ b/gr-blocks/grc/blocks_ctrlport_performance.block.yml
@@ -0,0 +1,17 @@
+id: blocks_ctrlport_monitor_performance
+label: CtrlPort Performance Monitor
+
+parameters:
+- id: en
+ label: Enabled
+ dtype: enum
+ options: ['True', 'False']
+
+templates:
+ imports: from gnuradio.ctrlport.monitor import *
+ make: not ${en} or monitor("gr-perf-monitorx")
+
+documentation: |-
+ Place this in a graph to launch a QtPy GR CtrlPort Performance Monitor app.
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_ctrlport_performance.xml b/gr-blocks/grc/blocks_ctrlport_performance.xml
deleted file mode 100644
index ab17c9e263..0000000000
--- a/gr-blocks/grc/blocks_ctrlport_performance.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2012 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<block>
- <name>CtrlPort Performance Monitor</name>
- <key>blocks_ctrlport_monitor_performance</key>
- <import>from gnuradio.ctrlport.monitor import *</import>
- <make>not $en or monitor("gr-perf-monitorx")</make>
- <param>
- <name>Enabled</name>
- <key>en</key>
- <value></value>
- <type>enum</type>
- <option>
- <name>True</name>
- <key>True</key>
- </option>
- <option>
- <name>False</name>
- <key>False</key>
- </option>
- </param>
-
- <doc>
- Place this in a graph to launch a QtPy GR CtrlPort Performance Monitor app.
- </doc>
-
-</block>
diff --git a/gr-blocks/grc/blocks_ctrlport_probe2_c.block.yml b/gr-blocks/grc/blocks_ctrlport_probe2_c.block.yml
new file mode 100644
index 0000000000..2b757718a6
--- /dev/null
+++ b/gr-blocks/grc/blocks_ctrlport_probe2_c.block.yml
@@ -0,0 +1,41 @@
+id: blocks_ctrlport_probe2_c
+label: Ctrlport Probe
+
+parameters:
+- id: name
+ label: Name
+ dtype: string
+ default: samples
+- id: desc
+ label: Description
+ dtype: string
+ default: Sample Points
+- id: len
+ label: Length
+ dtype: int
+ default: '1024'
+- id: disp_mask
+ label: Display Mask
+ dtype: int
+ default: gr.DISPTIME
+ options: [gr.DISPXY | gr.DISPOPTSCATTER, gr.DISPTIME, gr.DISPPSD, gr.DISPSPEC,
+ gr.DISPRAST]
+ option_labels: [Constellation, Time, PSD, Spectrogram, Raster]
+
+inputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.ctrlport_probe2_c(${name}, ${desc}, ${len}, ${disp_mask})
+ callbacks:
+ - set_length(${len})
+
+documentation: |-
+ Place this in a graph to export vectors of samples to a GRCP port probe.
+
+ * Specify the number of samples to transmit at once and the type
+ of default display to use.
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_ctrlport_probe2_c.xml b/gr-blocks/grc/blocks_ctrlport_probe2_c.xml
deleted file mode 100644
index 708a8fdf9b..0000000000
--- a/gr-blocks/grc/blocks_ctrlport_probe2_c.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2012-2013 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<block>
- <name>Ctrlport Probe</name>
- <key>blocks_ctrlport_probe2_c</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.ctrlport_probe2_c($name, $desc, $len, $disp_mask)</make>
- <callback>set_length($len)</callback>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>samples</value>
- <type>string</type>
- </param>
-
- <param>
- <name>Description</name>
- <key>desc</key>
- <value>Sample Points</value>
- <type>string</type>
- </param>
-
- <param>
- <name>Length</name>
- <key>len</key>
- <value>1024</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Display Mask</name>
- <key>disp_mask</key>
- <value>gr.DISPTIME</value>
- <type>int</type>
- <option>
- <name>Constellation</name>
- <key>gr.DISPXY | gr.DISPOPTSCATTER</key>
- </option>
- <option>
- <name>Time</name>
- <key>gr.DISPTIME</key>
- </option>
- <option>
- <name>PSD</name>
- <key>gr.DISPPSD</key>
- </option>
- <option>
- <name>Spectrogram</name>
- <key>gr.DISPSPEC</key>
- </option>
- <option>
- <name>Raster</name>
- <key>gr.DISPRAST</key>
- </option>
- </param>
-
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
-
- <doc>
- Place this in a graph to export vectors of samples to a GRCP port probe.
-
- * Specify the number of samples to transmit at once and the type
- of default display to use.
- </doc>
-
-</block>
-
diff --git a/gr-blocks/grc/blocks_ctrlport_probe2_x.block.yml b/gr-blocks/grc/blocks_ctrlport_probe2_x.block.yml
new file mode 100644
index 0000000000..f2b8e0a781
--- /dev/null
+++ b/gr-blocks/grc/blocks_ctrlport_probe2_x.block.yml
@@ -0,0 +1,48 @@
+id: blocks_ctrlport_probe2_x
+label: Ctrlport Probe
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ fcn: [c, f, i, s, b]
+ hide: part
+- id: name
+ label: Name
+ dtype: string
+ default: samples
+- id: desc
+ label: Description
+ dtype: string
+ default: Sample Points
+- id: len
+ label: Length
+ dtype: int
+ default: '1024'
+- id: disp_mask
+ label: Display Mask
+ dtype: int
+ default: gr.DISPTIME
+ options: [gr.DISPXY | gr.DISPOPTSCATTER, gr.DISPTIME, gr.DISPPSD, gr.DISPSPEC,
+ gr.DISPRAST]
+ option_labels: [Constellation, Time, PSD, Spectrogram, Raster]
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.ctrlport_probe2_${type.fcn}(${name}, ${desc}, ${len}, ${disp_mask})
+ callbacks:
+ - set_length(${len})
+
+documentation: |-
+ Place this in a graph to export vectors of samples to a GRCP port probe.
+
+ * Specify the number of samples to transmit at once and the type
+ of default display to use.
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_ctrlport_probe2_x.xml b/gr-blocks/grc/blocks_ctrlport_probe2_x.xml
deleted file mode 100644
index 47d1b81d3d..0000000000
--- a/gr-blocks/grc/blocks_ctrlport_probe2_x.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2013 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<block>
- <name>Ctrlport Probe</name>
- <key>blocks_ctrlport_probe2_x</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.ctrlport_probe2_$(type.fcn)($name, $desc, $len, $disp_mask)</make>
- <callback>set_length($len)</callback>
-
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:b</opt>
- </option>
- </param>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>samples</value>
- <type>string</type>
- </param>
-
- <param>
- <name>Description</name>
- <key>desc</key>
- <value>Sample Points</value>
- <type>string</type>
- </param>
-
- <param>
- <name>Length</name>
- <key>len</key>
- <value>1024</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Display Mask</name>
- <key>disp_mask</key>
- <value>gr.DISPTIME</value>
- <type>int</type>
- <option>
- <name>Constellation</name>
- <key>gr.DISPXY | gr.DISPOPTSCATTER</key>
- </option>
- <option>
- <name>Time</name>
- <key>gr.DISPTIME</key>
- </option>
- <option>
- <name>PSD</name>
- <key>gr.DISPPSD</key>
- </option>
- <option>
- <name>Spectrogram</name>
- <key>gr.DISPSPEC</key>
- </option>
- <option>
- <name>Raster</name>
- <key>gr.DISPRAST</key>
- </option>
- </param>
-
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
-
- <doc>
- Place this in a graph to export vectors of samples to a GRCP port probe.
-
- * Specify the number of samples to transmit at once and the type
- of default display to use.
- </doc>
-
-</block>
-
diff --git a/gr-blocks/grc/blocks_ctrlport_probe_c.block.yml b/gr-blocks/grc/blocks_ctrlport_probe_c.block.yml
new file mode 100644
index 0000000000..6f59f3e695
--- /dev/null
+++ b/gr-blocks/grc/blocks_ctrlport_probe_c.block.yml
@@ -0,0 +1,25 @@
+id: blocks_ctrlport_probe_c
+label: Ctrlport Complex Probe
+
+parameters:
+- id: name
+ label: Name
+ dtype: string
+ default: constellation
+- id: desc
+ label: Description
+ dtype: string
+ default: Constellation Points
+
+inputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.ctrlport_probe_c(${name}, ${desc})
+
+documentation: |-
+ Place this in a graph to export complex values to a GRCP port probe.
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_ctrlport_probe_c.xml b/gr-blocks/grc/blocks_ctrlport_probe_c.xml
deleted file mode 100644
index 64174204f1..0000000000
--- a/gr-blocks/grc/blocks_ctrlport_probe_c.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2012 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<block>
- <name>Ctrlport Complex Probe</name>
- <key>blocks_ctrlport_probe_c</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.ctrlport_probe_c($name, $desc)</make>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>constellation</value>
- <type>string</type>
- </param>
-
- <param>
- <name>Description</name>
- <key>desc</key>
- <value>Constellation Points</value>
- <type>string</type>
- </param>
-
-
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
-
- <doc>
- Place this in a graph to export complex values to a GRCP port probe.
- </doc>
-
-</block>
-
diff --git a/gr-blocks/grc/blocks_ctrlport_viewer.block.yml b/gr-blocks/grc/blocks_ctrlport_viewer.block.yml
new file mode 100644
index 0000000000..dc718aa975
--- /dev/null
+++ b/gr-blocks/grc/blocks_ctrlport_viewer.block.yml
@@ -0,0 +1,17 @@
+id: blocks_ctrlport_monitor
+label: CtrlPort Monitor
+
+parameters:
+- id: en
+ label: Enabled
+ dtype: enum
+ options: ['True', 'False']
+
+templates:
+ imports: from gnuradio.ctrlport.monitor import *
+ make: not ${en} or monitor()
+
+documentation: |-
+ Place this in a graph to launch a QtPy GR CtrlPort Monitor app.
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_ctrlport_viewer.xml b/gr-blocks/grc/blocks_ctrlport_viewer.xml
deleted file mode 100644
index 1d5a2e5931..0000000000
--- a/gr-blocks/grc/blocks_ctrlport_viewer.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2012 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<block>
- <name>CtrlPort Monitor</name>
- <key>blocks_ctrlport_monitor</key>
- <import>from gnuradio.ctrlport.monitor import *</import>
- <make>not $en or monitor()</make>
- <param>
- <name>Enabled</name>
- <key>en</key>
- <value></value>
- <type>enum</type>
- <option>
- <name>True</name>
- <key>True</key>
- </option>
- <option>
- <name>False</name>
- <key>False</key>
- </option>
- </param>
-
- <doc>
- Place this in a graph to launch a QtPy GR CtrlPort Monitor app.
- </doc>
-
-</block>
diff --git a/gr-blocks/grc/blocks_deinterleave.block.yml b/gr-blocks/grc/blocks_deinterleave.block.yml
new file mode 100644
index 0000000000..98761c4cc0
--- /dev/null
+++ b/gr-blocks/grc/blocks_deinterleave.block.yml
@@ -0,0 +1,48 @@
+id: blocks_deinterleave
+label: Deinterleave
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: num_streams
+ label: Num Streams
+ dtype: int
+ default: '2'
+ hide: part
+- id: blocksize
+ label: Block Size
+ dtype: int
+ default: '1'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_streams }
+
+asserts:
+- ${ num_streams > 0 }
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.deinterleave(${type.size}*${vlen}, ${blocksize})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_deinterleave.xml b/gr-blocks/grc/blocks_deinterleave.xml
deleted file mode 100644
index 4ada49dc38..0000000000
--- a/gr-blocks/grc/blocks_deinterleave.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Deinterleave
-###################################################
- -->
-<block>
- <name>Deinterleave</name>
- <key>blocks_deinterleave</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.deinterleave($type.size*$vlen, $blocksize)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Num Streams</name>
- <key>num_streams</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>blocksize</key>
- <value>1</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_streams &gt; 0</check>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_streams</nports>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_delay.block.yml b/gr-blocks/grc/blocks_delay.block.yml
new file mode 100644
index 0000000000..b9d63df586
--- /dev/null
+++ b/gr-blocks/grc/blocks_delay.block.yml
@@ -0,0 +1,50 @@
+id: blocks_delay
+label: Delay
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: delay
+ label: Delay
+ dtype: int
+ default: '0'
+- id: num_ports
+ label: Num Ports
+ dtype: int
+ default: '1'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_ports }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_ports }
+
+asserts:
+- ${ num_ports > 0 }
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.delay(${type.size}*${vlen}, ${delay})
+ callbacks:
+ - set_dly(${delay})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_delay.xml b/gr-blocks/grc/blocks_delay.xml
deleted file mode 100644
index a7c48c4dce..0000000000
--- a/gr-blocks/grc/blocks_delay.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Delay
-###################################################
- -->
-<block>
- <name>Delay</name>
- <key>blocks_delay</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.delay($type.size*$vlen, $delay)</make>
- <callback>set_dly($delay)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Delay</name>
- <key>delay</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Num Ports</name>
- <key>num_ports</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_ports &gt; 0</check>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_ports</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_ports</nports>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_divide_XX.block.yml b/gr-blocks/grc/blocks_divide_XX.block.yml
new file mode 100644
index 0000000000..a98dfde5c7
--- /dev/null
+++ b/gr-blocks/grc/blocks_divide_XX.block.yml
@@ -0,0 +1,42 @@
+id: blocks_divide_xx
+label: Divide
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ fcn: [cc, ff, ii, ss]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '2'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_inputs }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+- ${ num_inputs >= 2 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.divide_${type.fcn}(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_divide_XX.xml b/gr-blocks/grc/blocks_divide_XX.xml
deleted file mode 100644
index d784d305d9..0000000000
--- a/gr-blocks/grc/blocks_divide_XX.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Divide Block:
-## all types, 1 output, 2 to inf inputs
-###################################################
- -->
-<block>
- <name>Divide</name>
- <key>blocks_divide_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.divide_$(type.fcn)($vlen)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>2</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <check>$num_inputs &gt;= 2</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_inputs</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_endian_swap.block.yml b/gr-blocks/grc/blocks_endian_swap.block.yml
new file mode 100644
index 0000000000..da2ef0c379
--- /dev/null
+++ b/gr-blocks/grc/blocks_endian_swap.block.yml
@@ -0,0 +1,26 @@
+id: blocks_endian_swap
+label: Endian Swap
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, s32, s16]
+ option_labels: [Complex, Int, Short]
+ option_attributes:
+ size: ['8', '4', '2']
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.endian_swap(${type.size})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_endian_swap.xml b/gr-blocks/grc/blocks_endian_swap.xml
deleted file mode 100644
index 5fea420664..0000000000
--- a/gr-blocks/grc/blocks_endian_swap.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Add Block:
-## all types, 1 output, 2 to inf inputs
-###################################################
- -->
-<block>
- <name>Endian Swap</name>
- <key>blocks_endian_swap</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.endian_swap($type.size)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:8</opt>
- </option>
- <option>
- <name>Int</name>
- <key>s32</key>
- <opt>size:4</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s16</key>
- <opt>size:2</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_exponentiate_const_cci.block.yml b/gr-blocks/grc/blocks_exponentiate_const_cci.block.yml
new file mode 100644
index 0000000000..10bef0d3cd
--- /dev/null
+++ b/gr-blocks/grc/blocks_exponentiate_const_cci.block.yml
@@ -0,0 +1,43 @@
+id: blocks_exponentiate_const_cci
+label: Exponentiate Const Int
+
+parameters:
+- id: num_ports
+ label: Num Ports
+ dtype: int
+ default: '1'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: exponent
+ label: Exponent
+ dtype: int
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+ multiplicity: ${ num_ports }
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+ multiplicity: ${ num_ports }
+
+asserts:
+- ${ num_ports > 0 }
+- ${ vlen > 0 }
+- ${ exponent > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.exponentiate_const_cci(${exponent}, ${vlen})
+ callbacks:
+ - set_exponent(${exponent})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_exponentiate_const_cci.xml b/gr-blocks/grc/blocks_exponentiate_const_cci.xml
deleted file mode 100644
index 3c9e9b9625..0000000000
--- a/gr-blocks/grc/blocks_exponentiate_const_cci.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>Exponentiate Const Int</name>
- <key>blocks_exponentiate_const_cci</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.exponentiate_const_cci($exponent, $vlen)</make>
- <callback>set_exponent($exponent)</callback>
-
- <param>
- <name>Num Ports</name>
- <key>num_ports</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Exponent</name>
- <key>exponent</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <check>$num_ports &gt; 0</check>
- <check>$vlen &gt; 0</check>
- <check>$exponent &gt; 0</check>
-
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- <nports>$num_ports</nports>
- </sink>
-
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- <nports>$num_ports</nports>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_file_descriptor_sink.block.yml b/gr-blocks/grc/blocks_file_descriptor_sink.block.yml
new file mode 100644
index 0000000000..24d88f67f9
--- /dev/null
+++ b/gr-blocks/grc/blocks_file_descriptor_sink.block.yml
@@ -0,0 +1,34 @@
+id: blocks_file_descriptor_sink
+label: File Descriptor Sink
+
+parameters:
+- id: fd
+ label: File Descriptor
+ dtype: int
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.file_descriptor_sink(${type.size}*${vlen}, ${fd})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_file_descriptor_sink.xml b/gr-blocks/grc/blocks_file_descriptor_sink.xml
deleted file mode 100644
index 211d86dfd3..0000000000
--- a/gr-blocks/grc/blocks_file_descriptor_sink.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##File Sink
-###################################################
- -->
-<block>
- <name>File Descriptor Sink</name>
- <key>blocks_file_descriptor_sink</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.file_descriptor_sink($type.size*$vlen, $fd)</make>
- <param>
- <name>File Descriptor</name>
- <key>fd</key>
- <type>int</type>
- </param>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
-</block>
diff --git a/gr-blocks/grc/blocks_file_descriptor_source.block.yml b/gr-blocks/grc/blocks_file_descriptor_source.block.yml
new file mode 100644
index 0000000000..84926661e4
--- /dev/null
+++ b/gr-blocks/grc/blocks_file_descriptor_source.block.yml
@@ -0,0 +1,37 @@
+id: blocks_file_descriptor_source
+label: File Descriptor Source
+
+parameters:
+- id: fd
+ label: File Descriptor
+ dtype: int
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: repeat
+ label: Repeat
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.file_descriptor_source(${type.size}*${vlen}, ${fd}, ${repeat})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_file_descriptor_source.xml b/gr-blocks/grc/blocks_file_descriptor_source.xml
deleted file mode 100644
index b29335c3af..0000000000
--- a/gr-blocks/grc/blocks_file_descriptor_source.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##File Source
-###################################################
- -->
-<block>
- <name>File Descriptor Source</name>
- <key>blocks_file_descriptor_source</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.file_descriptor_source($type.size*$vlen, $fd, $repeat)</make>
- <param>
- <name>File Descriptor</name>
- <key>fd</key>
- <type>int</type>
- </param>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Repeat</name>
- <key>repeat</key>
- <value>True</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_file_meta_sink.block.yml b/gr-blocks/grc/blocks_file_meta_sink.block.yml
new file mode 100644
index 0000000000..7512f23aae
--- /dev/null
+++ b/gr-blocks/grc/blocks_file_meta_sink.block.yml
@@ -0,0 +1,70 @@
+id: blocks_file_meta_sink
+label: File Meta Sink
+
+parameters:
+- id: file
+ label: File
+ dtype: file_save
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ cplx: ['True', 'False', 'False', 'False', 'False']
+ dtype: [blocks.GR_FILE_FLOAT, blocks.GR_FILE_FLOAT, blocks.GR_FILE_INT, blocks.GR_FILE_SHORT,
+ blocks.GR_FILE_BYTE]
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+- id: rel_rate
+ label: Relative Rate Change
+ dtype: real
+ default: '1'
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: max_seg_size
+ label: Max Seg. Size
+ dtype: int
+ default: '1000000'
+- id: extra_dict
+ label: Extra Dict.
+ dtype: string
+ default: '""'
+- id: detached
+ label: Detached
+ dtype: bool
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['Off', 'On']
+- id: unbuffered
+ label: Unbuffered
+ dtype: bool
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['Off', 'On']
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import gr, blocks
+ make: |-
+ blocks.file_meta_sink(${type.size}*${vlen}, ${file}, ${samp_rate}, ${rel_rate}, ${type.dtype}, ${type.cplx}, ${max_seg_size}, ${extra_dict}, ${detached})
+ self.${id}.set_unbuffered(${unbuffered})
+ callbacks:
+ - set_unbuffered(${unbuffered})
+ - open(${file})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_file_meta_sink.xml b/gr-blocks/grc/blocks_file_meta_sink.xml
deleted file mode 100644
index f6490d507d..0000000000
--- a/gr-blocks/grc/blocks_file_meta_sink.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##File Meta Sink
-###################################################
- -->
-<block>
- <name>File Meta Sink</name>
- <key>blocks_file_meta_sink</key>
- <import>from gnuradio import gr, blocks</import>
- <make>blocks.file_meta_sink($type.size*$vlen, $file, $samp_rate, $rel_rate, $type.dtype, $type.cplx, $max_seg_size, $extra_dict, $detached)
-self.$(id).set_unbuffered($unbuffered)</make>
- <callback>set_unbuffered($unbuffered)</callback>
- <callback>open($file)</callback>
- <param>
- <name>File</name>
- <key>file</key>
- <value></value>
- <type>file_save</type>
- </param>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- <opt>dtype:blocks.GR_FILE_FLOAT</opt>
- <opt>cplx:True</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- <opt>dtype:blocks.GR_FILE_FLOAT</opt>
- <opt>cplx:False</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- <opt>dtype:blocks.GR_FILE_INT</opt>
- <opt>cplx:False</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- <opt>dtype:blocks.GR_FILE_SHORT</opt>
- <opt>cplx:False</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- <opt>dtype:blocks.GR_FILE_BYTE</opt>
- <opt>cplx:False</opt>
- </option>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Relative Rate Change</name>
- <key>rel_rate</key>
- <value>1</value>
- <type>real</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Max Seg. Size</name>
- <key>max_seg_size</key>
- <value>1000000</value>
- <type>int</type>
- </param>
- <param>
- <name>Extra Dict.</name>
- <key>extra_dict</key>
- <value>""</value>
- <type>string</type>
- </param>
- <param>
- <name>Detached</name>
- <key>detached</key>
- <value>False</value>
- <type>bool</type>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- </param> <param>
- <name>Unbuffered</name>
- <key>unbuffered</key>
- <value>False</value>
- <type>bool</type>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
-</block>
diff --git a/gr-blocks/grc/blocks_file_meta_source.block.yml b/gr-blocks/grc/blocks_file_meta_source.block.yml
new file mode 100644
index 0000000000..016c2f62a5
--- /dev/null
+++ b/gr-blocks/grc/blocks_file_meta_source.block.yml
@@ -0,0 +1,48 @@
+id: blocks_file_meta_source
+label: File Meta Source
+
+parameters:
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: file
+ label: File
+ dtype: file_open
+- id: repeat
+ label: Repeat
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: detached
+ label: Detached Header
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: hdr_file
+ label: Header File
+ dtype: file_open
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import gr, blocks
+ make: blocks.file_meta_source(${file}, ${repeat}, ${detached}, ${hdr_file})
+ callbacks:
+ - open(${file}, ${repeat})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_file_meta_source.xml b/gr-blocks/grc/blocks_file_meta_source.xml
deleted file mode 100644
index aa7e349551..0000000000
--- a/gr-blocks/grc/blocks_file_meta_source.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##File Source
-###################################################
- -->
-<block>
- <name>File Meta Source</name>
- <key>blocks_file_meta_source</key>
- <import>from gnuradio import gr, blocks</import>
- <make>blocks.file_meta_source($file, $repeat, $detached, $hdr_file)</make>
- <callback>open($file, $repeat)</callback>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>File</name>
- <key>file</key>
- <value></value>
- <type>file_open</type>
- </param>
- <param>
- <name>Repeat</name>
- <key>repeat</key>
- <value>True</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Detached Header</name>
- <key>detached</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Header File</name>
- <key>hdr_file</key>
- <value></value>
- <type>file_open</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_file_sink.block.yml b/gr-blocks/grc/blocks_file_sink.block.yml
new file mode 100644
index 0000000000..cf9782340f
--- /dev/null
+++ b/gr-blocks/grc/blocks_file_sink.block.yml
@@ -0,0 +1,51 @@
+id: blocks_file_sink
+label: File Sink
+
+parameters:
+- id: file
+ label: File
+ dtype: file_save
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: unbuffered
+ label: Unbuffered
+ dtype: bool
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['Off', 'On']
+- id: append
+ label: Append file
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: [Append, Overwrite]
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: |-
+ blocks.file_sink(${type.size}*${vlen}, ${file}, ${append})
+ self.${id}.set_unbuffered(${unbuffered})
+ callbacks:
+ - set_unbuffered(${unbuffered})
+ - open(${file})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_file_sink.xml b/gr-blocks/grc/blocks_file_sink.xml
deleted file mode 100644
index ece21fd2ae..0000000000
--- a/gr-blocks/grc/blocks_file_sink.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##File Sink
-###################################################
- -->
-<block>
- <name>File Sink</name>
- <key>blocks_file_sink</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.file_sink($type.size*$vlen, $file, $append)
-self.$(id).set_unbuffered($unbuffered)</make>
- <callback>set_unbuffered($unbuffered)</callback>
- <callback>open($file)</callback>
- <param>
- <name>File</name>
- <key>file</key>
- <value></value>
- <type>file_save</type>
- </param>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Unbuffered</name>
- <key>unbuffered</key>
- <value>False</value>
- <type>bool</type>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- </param>
- <param>
- <name>Append file</name>
- <key>append</key>
- <value>False</value>
- <type>bool</type>
- <option>
- <name>Append</name>
- <key>True</key>
- </option>
- <option>
- <name>Overwrite</name>
- <key>False</key>
- </option>
- </param>
-
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
-</block>
diff --git a/gr-blocks/grc/blocks_file_source.block.yml b/gr-blocks/grc/blocks_file_source.block.yml
new file mode 100644
index 0000000000..717ed387be
--- /dev/null
+++ b/gr-blocks/grc/blocks_file_source.block.yml
@@ -0,0 +1,51 @@
+id: blocks_file_source
+label: File Source
+
+parameters:
+- id: file
+ label: File
+ dtype: file_open
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: repeat
+ label: Repeat
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: begin_tag
+ label: Add begin tag
+ dtype: raw
+ default: pmt.PMT_NIL
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: |-
+ from gnuradio import blocks
+ import pmt
+ make: |-
+ blocks.file_source(${type.size}*${vlen}, ${file}, ${repeat})
+ self.${id}.set_begin_tag(${begin_tag})
+ callbacks:
+ - open(${file}, ${repeat})
+ - self.${id}.set_begin_tag(${begin_tag})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_file_source.xml b/gr-blocks/grc/blocks_file_source.xml
deleted file mode 100644
index 1f09e95168..0000000000
--- a/gr-blocks/grc/blocks_file_source.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##File Source
-###################################################
- -->
-<block>
- <name>File Source</name>
- <key>blocks_file_source</key>
- <import>from gnuradio import blocks</import>
- <import>import pmt</import>
- <make>blocks.file_source($type.size*$vlen, $file, $repeat)
-self.$(id).set_begin_tag($begin_tag)</make>
- <callback>open($file, $repeat)</callback>
- <callback>self.$(id).set_begin_tag($begin_tag)</callback>
- <param>
- <name>File</name>
- <key>file</key>
- <value></value>
- <type>file_open</type>
- </param>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Repeat</name>
- <key>repeat</key>
- <value>True</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Add begin tag</name>
- <key>begin_tag</key>
- <value>pmt.PMT_NIL</value>
- <type>raw</type>
- </param>
- <check>$vlen &gt; 0</check>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_float_to_char.block.yml b/gr-blocks/grc/blocks_float_to_char.block.yml
new file mode 100644
index 0000000000..4f6eeb7286
--- /dev/null
+++ b/gr-blocks/grc/blocks_float_to_char.block.yml
@@ -0,0 +1,31 @@
+id: blocks_float_to_char
+label: Float To Char
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: scale
+ label: Scale
+ dtype: real
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.float_to_char(${vlen}, ${scale})
+ callbacks:
+ - set_scale(${scale})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_float_to_char.xml b/gr-blocks/grc/blocks_float_to_char.xml
deleted file mode 100644
index e3854fc4ec..0000000000
--- a/gr-blocks/grc/blocks_float_to_char.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Float to Char:
-###################################################
- -->
-<block>
- <name>Float To Char</name>
- <key>blocks_float_to_char</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.float_to_char($vlen, $scale)</make>
- <callback>set_scale($scale)</callback>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Scale</name>
- <key>scale</key>
- <value>1</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_float_to_complex.block.yml b/gr-blocks/grc/blocks_float_to_complex.block.yml
new file mode 100644
index 0000000000..d592c4e461
--- /dev/null
+++ b/gr-blocks/grc/blocks_float_to_complex.block.yml
@@ -0,0 +1,34 @@
+id: blocks_float_to_complex
+label: Float To Complex
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- label: re
+ domain: stream
+ dtype: float
+ vlen: ${ vlen }
+- label: im
+ domain: stream
+ dtype: float
+ vlen: ${ vlen }
+ optional: true
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.float_to_complex(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_float_to_complex.xml b/gr-blocks/grc/blocks_float_to_complex.xml
deleted file mode 100644
index 6120d58871..0000000000
--- a/gr-blocks/grc/blocks_float_to_complex.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Float to Complex:
-## one or two input streams
-###################################################
- -->
-<block>
- <name>Float To Complex</name>
- <key>blocks_float_to_complex</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.float_to_complex($vlen)</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>re</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </sink>
- <sink>
- <name>im</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- <optional>1</optional>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_float_to_int.block.yml b/gr-blocks/grc/blocks_float_to_int.block.yml
new file mode 100644
index 0000000000..4ed0e08718
--- /dev/null
+++ b/gr-blocks/grc/blocks_float_to_int.block.yml
@@ -0,0 +1,31 @@
+id: blocks_float_to_int
+label: Float To Int
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: scale
+ label: Scale
+ dtype: real
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: int
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.float_to_int(${vlen}, ${scale})
+ callbacks:
+ - set_scale(${scale})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_float_to_int.xml b/gr-blocks/grc/blocks_float_to_int.xml
deleted file mode 100644
index 0ff5d9cdf1..0000000000
--- a/gr-blocks/grc/blocks_float_to_int.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Float to Int:
-###################################################
- -->
-<block>
- <name>Float To Int</name>
- <key>blocks_float_to_int</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.float_to_int($vlen, $scale)</make>
- <callback>set_scale($scale)</callback>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Scale</name>
- <key>scale</key>
- <value>1</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>int</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_float_to_short.block.yml b/gr-blocks/grc/blocks_float_to_short.block.yml
new file mode 100644
index 0000000000..8b1c4e58b5
--- /dev/null
+++ b/gr-blocks/grc/blocks_float_to_short.block.yml
@@ -0,0 +1,31 @@
+id: blocks_float_to_short
+label: Float To Short
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: scale
+ label: Scale
+ dtype: real
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: short
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.float_to_short(${vlen}, ${scale})
+ callbacks:
+ - set_scale(${scale})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_float_to_short.xml b/gr-blocks/grc/blocks_float_to_short.xml
deleted file mode 100644
index 986e68ec41..0000000000
--- a/gr-blocks/grc/blocks_float_to_short.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Float to Short:
-###################################################
- -->
-<block>
- <name>Float To Short</name>
- <key>blocks_float_to_short</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.float_to_short($vlen, $scale)</make>
- <callback>set_scale($scale)</callback>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Scale</name>
- <key>scale</key>
- <value>1</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>short</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_float_uchar.block.yml b/gr-blocks/grc/blocks_float_uchar.block.yml
new file mode 100644
index 0000000000..33687978c2
--- /dev/null
+++ b/gr-blocks/grc/blocks_float_uchar.block.yml
@@ -0,0 +1,16 @@
+id: blocks_float_to_uchar
+label: Float To UChar
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.float_to_uchar()
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_float_uchar.xml b/gr-blocks/grc/blocks_float_uchar.xml
deleted file mode 100644
index d190eafcf7..0000000000
--- a/gr-blocks/grc/blocks_float_uchar.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Float to Unsigned Char:
-###################################################
- -->
-<block>
- <name>Float To UChar</name>
- <key>blocks_float_to_uchar</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.float_to_uchar()</make>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_head.block.yml b/gr-blocks/grc/blocks_head.block.yml
new file mode 100644
index 0000000000..c342e40067
--- /dev/null
+++ b/gr-blocks/grc/blocks_head.block.yml
@@ -0,0 +1,42 @@
+id: blocks_head
+label: Head
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: num_items
+ label: Num Items
+ dtype: int
+ default: '1024'
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.head(${type.size}*${vlen}, ${num_items})
+ callbacks:
+ - set_length(${num_items})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_head.xml b/gr-blocks/grc/blocks_head.xml
deleted file mode 100644
index dc8e826d54..0000000000
--- a/gr-blocks/grc/blocks_head.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Head
-###################################################
- -->
-<block>
- <name>Head</name>
- <key>blocks_head</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.head($type.size*$vlen, $num_items)</make>
- <callback>set_length($num_items)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Num Items</name>
- <key>num_items</key>
- <value>1024</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_int_to_float.block.yml b/gr-blocks/grc/blocks_int_to_float.block.yml
new file mode 100644
index 0000000000..a6f3b3b92c
--- /dev/null
+++ b/gr-blocks/grc/blocks_int_to_float.block.yml
@@ -0,0 +1,31 @@
+id: blocks_int_to_float
+label: Int To Float
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: scale
+ label: Scale
+ dtype: real
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: int
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.int_to_float(${vlen}, ${scale})
+ callbacks:
+ - set_scale(${scale})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_int_to_float.xml b/gr-blocks/grc/blocks_int_to_float.xml
deleted file mode 100644
index 2bb25d8bec..0000000000
--- a/gr-blocks/grc/blocks_int_to_float.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Int to Float:
-###################################################
- -->
-<block>
- <name>Int To Float</name>
- <key>blocks_int_to_float</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.int_to_float($vlen, $scale)</make>
- <callback>set_scale($scale)</callback>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Scale</name>
- <key>scale</key>
- <value>1</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>int</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_integrate_xx.block.yml b/gr-blocks/grc/blocks_integrate_xx.block.yml
new file mode 100644
index 0000000000..e8d3dd08cd
--- /dev/null
+++ b/gr-blocks/grc/blocks_integrate_xx.block.yml
@@ -0,0 +1,35 @@
+id: blocks_integrate_xx
+label: Integrate
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ fcn: [cc, ff, ii, ss]
+ hide: part
+- id: decim
+ label: Decimation
+ dtype: int
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.integrate_${type.fcn}(${decim}, ${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_integrate_xx.xml b/gr-blocks/grc/blocks_integrate_xx.xml
deleted file mode 100644
index 8f47b94997..0000000000
--- a/gr-blocks/grc/blocks_integrate_xx.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Integrate
-###################################################
- -->
-<block>
- <name>Integrate</name>
- <key>blocks_integrate_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.integrate_$(type.fcn)($decim, $vlen)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- </param>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_interleave.block.yml b/gr-blocks/grc/blocks_interleave.block.yml
new file mode 100644
index 0000000000..e814e675b9
--- /dev/null
+++ b/gr-blocks/grc/blocks_interleave.block.yml
@@ -0,0 +1,48 @@
+id: blocks_interleave
+label: Interleave
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: num_streams
+ label: Num Streams
+ dtype: int
+ default: '2'
+ hide: part
+- id: blocksize
+ label: Block Size
+ dtype: int
+ default: '1'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_streams }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ num_streams > 0 }
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.interleave(${type.size}*${vlen}, ${blocksize})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_interleave.xml b/gr-blocks/grc/blocks_interleave.xml
deleted file mode 100644
index 69fb15e2cf..0000000000
--- a/gr-blocks/grc/blocks_interleave.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Interleave
-###################################################
- -->
-<block>
- <name>Interleave</name>
- <key>blocks_interleave</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.interleave($type.size*$vlen, $blocksize)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Num Streams</name>
- <key>num_streams</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>blocksize</key>
- <value>1</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_streams &gt; 0</check>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_streams</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_interleaved_char_to_complex.block.yml b/gr-blocks/grc/blocks_interleaved_char_to_complex.block.yml
new file mode 100644
index 0000000000..049f67b246
--- /dev/null
+++ b/gr-blocks/grc/blocks_interleaved_char_to_complex.block.yml
@@ -0,0 +1,28 @@
+id: blocks_interleaved_char_to_complex
+label: IChar To Complex
+
+parameters:
+- id: vector_input
+ label: Vector Input
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+ option_attributes:
+ vlen: ['1', '2']
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ vector_input.vlen }
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.interleaved_char_to_complex(${vector_input})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_interleaved_char_to_complex.xml b/gr-blocks/grc/blocks_interleaved_char_to_complex.xml
deleted file mode 100644
index 9c0cdef6f8..0000000000
--- a/gr-blocks/grc/blocks_interleaved_char_to_complex.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Interleaved Char to Complex:
-###################################################
- -->
-<block>
- <name>IChar To Complex</name>
- <key>blocks_interleaved_char_to_complex</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.interleaved_char_to_complex($vector_input)</make>
- <param>
- <name>Vector Input</name>
- <key>vector_input</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>No</name>
- <key>False</key>
- <opt>vlen:1</opt>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- <opt>vlen:2</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>$vector_input.vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_interleaved_short_to_complex.block.yml b/gr-blocks/grc/blocks_interleaved_short_to_complex.block.yml
new file mode 100644
index 0000000000..5c3ab76d4d
--- /dev/null
+++ b/gr-blocks/grc/blocks_interleaved_short_to_complex.block.yml
@@ -0,0 +1,37 @@
+id: blocks_interleaved_short_to_complex
+label: IShort To Complex
+
+parameters:
+- id: vector_input
+ label: Vector Input
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+ option_attributes:
+ vlen: ['1', '2']
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: swap
+ label: Swap
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: short
+ vlen: ${ vector_input.vlen }
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.interleaved_short_to_complex(${vector_input}, ${swap})
+ callbacks:
+ - set_swap(${swap})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_interleaved_short_to_complex.xml b/gr-blocks/grc/blocks_interleaved_short_to_complex.xml
deleted file mode 100644
index 2c4e153854..0000000000
--- a/gr-blocks/grc/blocks_interleaved_short_to_complex.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Interleaved Short to Complex:
-###################################################
- -->
-<block>
- <name>IShort To Complex</name>
- <key>blocks_interleaved_short_to_complex</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.interleaved_short_to_complex($vector_input, $swap)</make>
- <callback>set_swap($swap)</callback>
- <param>
- <name>Vector Input</name>
- <key>vector_input</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>No</name>
- <key>False</key>
- <opt>vlen:1</opt>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- <opt>vlen:2</opt>
- </option>
- </param>
- <param>
- <name>Swap</name>
- <key>swap</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>short</type>
- <vlen>$vector_input.vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_keep_m_in_n.block.yml b/gr-blocks/grc/blocks_keep_m_in_n.block.yml
new file mode 100644
index 0000000000..451899eae0
--- /dev/null
+++ b/gr-blocks/grc/blocks_keep_m_in_n.block.yml
@@ -0,0 +1,49 @@
+id: blocks_keep_m_in_n
+label: Keep M in N
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: m
+ label: M
+ dtype: int
+ default: '1'
+- id: n
+ label: N
+ dtype: int
+ default: '2'
+- id: offset
+ label: initial offset
+ dtype: int
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: 1
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: 1
+
+asserts:
+- ${ n > 0 }
+- ${ m > 0 }
+- ${ m <= n }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.keep_m_in_n(${type.size}, ${m}, ${n}, ${offset})
+ callbacks:
+ - set_offset(${offset})
+ - set_m(${m})
+ - set_n(${n})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_keep_m_in_n.xml b/gr-blocks/grc/blocks_keep_m_in_n.xml
deleted file mode 100644
index 824955c412..0000000000
--- a/gr-blocks/grc/blocks_keep_m_in_n.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Keep M in N
-###################################################
- -->
-<block>
- <name>Keep M in N</name>
- <key>blocks_keep_m_in_n</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.keep_m_in_n($type.size, $m, $n, $offset)</make>
- <callback>set_offset($offset)</callback>
- <callback>set_m($m)</callback>
- <callback>set_n($n)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>M</name>
- <key>m</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>N</name>
- <key>n</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>initial offset</name>
- <key>offset</key>
- <value>0</value>
- <type>int</type>
- </param>
- <check>$n &gt; 0</check>
- <check>$m &gt; 0</check>
- <check>$m &lt;= $n</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>1</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>1</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_keep_one_in_n.block.yml b/gr-blocks/grc/blocks_keep_one_in_n.block.yml
new file mode 100644
index 0000000000..d790557834
--- /dev/null
+++ b/gr-blocks/grc/blocks_keep_one_in_n.block.yml
@@ -0,0 +1,44 @@
+id: blocks_keep_one_in_n
+label: Keep 1 in N
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: n
+ label: N
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ n > 0 }
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.keep_one_in_n(${type.size}*${vlen}, ${n})
+ callbacks:
+ - set_n(${n})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_keep_one_in_n.xml b/gr-blocks/grc/blocks_keep_one_in_n.xml
deleted file mode 100644
index 4289a984f4..0000000000
--- a/gr-blocks/grc/blocks_keep_one_in_n.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Keep 1 in N
-###################################################
- -->
-<block>
- <name>Keep 1 in N</name>
- <key>blocks_keep_one_in_n</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.keep_one_in_n($type.size*$vlen, $n)</make>
- <callback>set_n($n)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>N</name>
- <key>n</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$n &gt; 0</check>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_magphase_to_complex.block.yml b/gr-blocks/grc/blocks_magphase_to_complex.block.yml
new file mode 100644
index 0000000000..56f939d816
--- /dev/null
+++ b/gr-blocks/grc/blocks_magphase_to_complex.block.yml
@@ -0,0 +1,34 @@
+id: blocks_magphase_to_complex
+label: Magnitude and Phase To Complex
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- label: mag
+ domain: stream
+ dtype: float
+ vlen: ${ vlen }
+- label: phase
+ domain: stream
+ dtype: float
+ vlen: ${ vlen }
+ optional: true
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.magphase_to_complex(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_magphase_to_complex.xml b/gr-blocks/grc/blocks_magphase_to_complex.xml
deleted file mode 100644
index 1292c7d8c7..0000000000
--- a/gr-blocks/grc/blocks_magphase_to_complex.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Magnitue and Phase to Complex:
-## Two input streams
-###################################################
- -->
-<block>
- <name>Magnitude and Phase To Complex</name>
- <key>blocks_magphase_to_complex</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.magphase_to_complex($vlen)</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>mag</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </sink>
- <sink>
- <name>phase</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- <optional>1</optional>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_max_xx.block.yml b/gr-blocks/grc/blocks_max_xx.block.yml
new file mode 100644
index 0000000000..8b7516de8e
--- /dev/null
+++ b/gr-blocks/grc/blocks_max_xx.block.yml
@@ -0,0 +1,47 @@
+id: blocks_max_xx
+label: Max
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [float, int, short]
+ option_attributes:
+ fcn: [ff, ii, ss]
+ hide: part
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '1'
+ hide: part
+- id: vlen
+ label: Input Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: vlen_out
+ label: Output Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_inputs }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen_out }
+
+asserts:
+- ${ num_inputs >= 1 }
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.max_${type.fcn}(${vlen},${vlen_out})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_max_xx.xml b/gr-blocks/grc/blocks_max_xx.xml
deleted file mode 100644
index 65c536a3d9..0000000000
--- a/gr-blocks/grc/blocks_max_xx.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Max:
-## 1 output, 2 to inf inputs
-###################################################
- -->
-<block>
- <name>Max</name>
- <key>blocks_max_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.max_$(type.fcn)($vlen,$vlen_out)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Input Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Output Vec Length</name>
- <key>vlen_out</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_inputs &gt;= 1</check>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_inputs</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen_out</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_message_debug.block.yml b/gr-blocks/grc/blocks_message_debug.block.yml
new file mode 100644
index 0000000000..301320e884
--- /dev/null
+++ b/gr-blocks/grc/blocks_message_debug.block.yml
@@ -0,0 +1,19 @@
+id: blocks_message_debug
+label: Message Debug
+
+inputs:
+- domain: message
+ id: print
+ optional: true
+- domain: message
+ id: store
+ optional: true
+- domain: message
+ id: print_pdu
+ optional: true
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.message_debug()
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_message_debug.xml b/gr-blocks/grc/blocks_message_debug.xml
deleted file mode 100644
index c547c7542d..0000000000
--- a/gr-blocks/grc/blocks_message_debug.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Message Debug
-###################################################
- -->
-<block>
- <name>Message Debug</name>
- <key>blocks_message_debug</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.message_debug()</make>
- <sink>
- <name>print</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <sink>
- <name>store</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <sink>
- <name>print_pdu</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
-</block>
diff --git a/gr-blocks/grc/blocks_message_strobe.block.yml b/gr-blocks/grc/blocks_message_strobe.block.yml
new file mode 100644
index 0000000000..6adb2948ed
--- /dev/null
+++ b/gr-blocks/grc/blocks_message_strobe.block.yml
@@ -0,0 +1,33 @@
+id: blocks_message_strobe
+label: Message Strobe
+
+parameters:
+- id: msg
+ label: Message PMT
+ dtype: raw
+ default: pmt.intern("TEST")
+- id: period
+ label: Period (ms)
+ dtype: real
+ default: '1000'
+
+inputs:
+- domain: message
+ id: set_msg
+ optional: true
+
+outputs:
+- domain: message
+ id: strobe
+ optional: true
+
+templates:
+ imports: |-
+ from gnuradio import blocks
+ import pmt
+ make: blocks.message_strobe(${msg}, ${period})
+ callbacks:
+ - set_msg(${msg})
+ - set_period(${period})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_message_strobe.xml b/gr-blocks/grc/blocks_message_strobe.xml
deleted file mode 100644
index 4a6091d8e0..0000000000
--- a/gr-blocks/grc/blocks_message_strobe.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Message Strobe
-###################################################
- -->
-<block>
- <name>Message Strobe</name>
- <key>blocks_message_strobe</key>
- <import>from gnuradio import blocks</import>
- <import>import pmt</import>
- <make>blocks.message_strobe($msg, $period)</make>
- <callback>set_msg($msg)</callback>
- <callback>set_period($period)</callback>
- <param>
- <name>Message PMT</name>
- <key>msg</key>
- <value>pmt.intern("TEST")</value>
- <type>raw</type>
- </param>
- <param>
- <name>Period (ms)</name>
- <key>period</key>
- <value>1000</value>
- <type>real</type>
- </param>
- <sink>
- <name>set_msg</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>strobe</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_message_strobe_random.block.yml b/gr-blocks/grc/blocks_message_strobe_random.block.yml
new file mode 100644
index 0000000000..c0d6075892
--- /dev/null
+++ b/gr-blocks/grc/blocks_message_strobe_random.block.yml
@@ -0,0 +1,50 @@
+id: blocks_message_strobe_random
+label: Message Strobe Random-Delay
+
+parameters:
+- id: msg
+ label: Message PMT
+ dtype: raw
+ default: pmt.intern("TEST")
+- id: dist
+ label: Distribution
+ dtype: enum
+ options: [blocks.STROBE_POISSON, blocks.STROBE_UNIFORM, blocks.STROBE_GAUSSIAN]
+ option_labels: [Poisson, Uniform, Gaussian]
+- id: mean
+ label: Mean (ms)
+ dtype: real
+ default: '1000'
+- id: std
+ label: Std (ms)
+ dtype: real
+ default: '100'
+
+inputs:
+- domain: message
+ id: set_msg
+ optional: true
+
+outputs:
+- domain: message
+ id: strobe
+ optional: true
+
+templates:
+ imports: |-
+ from gnuradio import blocks
+ import pmt
+ make: blocks.message_strobe_random(${msg}, ${dist}, ${mean}, ${std})
+ callbacks:
+ - set_msg(${msg})
+ - set_dist(${dist})
+ - set_mean(${mean})
+ - set_std(${std})
+
+documentation: |-
+ Please note some peculiarities below:
+ - poisson does not care about your std
+ - gaussian operates as expected
+ - uniform is actually of the range (mean-std, mean+std) - thus we are lieing and it is not actually an std here
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_message_strobe_random.xml b/gr-blocks/grc/blocks_message_strobe_random.xml
deleted file mode 100644
index 573db58aef..0000000000
--- a/gr-blocks/grc/blocks_message_strobe_random.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Message Strobe
-###################################################
- -->
-<block>
- <name>Message Strobe Random-Delay</name>
- <key>blocks_message_strobe_random</key>
- <import>from gnuradio import blocks</import>
- <import>import pmt</import>
- <make>blocks.message_strobe_random($msg, $dist, $mean, $std)</make>
- <callback>set_msg($msg)</callback>
- <callback>set_dist($dist)</callback>
- <callback>set_mean($mean)</callback>
- <callback>set_std($std)</callback>
- <param>
- <name>Message PMT</name>
- <key>msg</key>
- <value>pmt.intern("TEST")</value>
- <type>raw</type>
- </param>
- <param>
- <name>Distribution</name>
- <key>dist</key>
- <type>enum</type>
- <option>
- <name>Poisson</name>
- <key>blocks.STROBE_POISSON</key>
- </option>
- <option>
- <name>Uniform</name>
- <key>blocks.STROBE_UNIFORM</key>
- </option>
- <option>
- <name>Gaussian</name>
- <key>blocks.STROBE_GAUSSIAN</key>
- </option>
- </param>
- <param>
- <name>Mean (ms)</name>
- <key>mean</key>
- <value>1000</value>
- <type>real</type>
- </param>
- <param>
- <name>Std (ms)</name>
- <key>std</key>
- <value>100</value>
- <type>real</type>
- </param>
- <sink>
- <name>set_msg</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>strobe</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-
- <doc>
- Please note some peculiarities below:
- - poisson does not care about your std
- - gaussian operates as expected
- - uniform is actually of the range (mean-std, mean+std) - thus we are lieing and it is not actually an std here
- </doc>
-</block>
diff --git a/gr-blocks/grc/blocks_min_xx.block.yml b/gr-blocks/grc/blocks_min_xx.block.yml
new file mode 100644
index 0000000000..511d67c145
--- /dev/null
+++ b/gr-blocks/grc/blocks_min_xx.block.yml
@@ -0,0 +1,47 @@
+id: blocks_min_xx
+label: Min
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [float, int, short]
+ option_attributes:
+ fcn: [ff, ii, ss]
+ hide: part
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '1'
+ hide: part
+- id: vlen
+ label: Input Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: vlen_out
+ label: Output Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_inputs }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen_out }
+
+asserts:
+- ${ num_inputs >= 1 }
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.min_${type.fcn}(${vlen},${vlen_out})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_min_xx.xml b/gr-blocks/grc/blocks_min_xx.xml
deleted file mode 100644
index 406f7a11e1..0000000000
--- a/gr-blocks/grc/blocks_min_xx.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Min:
-## 1 output, 2 to inf inputs
-###################################################
- -->
-<block>
- <name>Min</name>
- <key>blocks_min_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.min_$(type.fcn)($vlen,$vlen_out)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Input Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Output Vec Length</name>
- <key>vlen_out</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_inputs &gt;= 1</check>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_inputs</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen_out</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_moving_average_xx.block.yml b/gr-blocks/grc/blocks_moving_average_xx.block.yml
new file mode 100644
index 0000000000..6b12355894
--- /dev/null
+++ b/gr-blocks/grc/blocks_moving_average_xx.block.yml
@@ -0,0 +1,49 @@
+id: blocks_moving_average_xx
+label: Moving Average
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ fcn: [cc, ff, ii, ss]
+ scale: [complex, real, int, int]
+ hide: part
+- id: length
+ label: Length
+ dtype: int
+ default: '1000'
+- id: scale
+ label: Scale
+ dtype: ${ type.scale }
+ default: '1'
+- id: max_iter
+ label: Max Iter
+ dtype: int
+ default: '4000'
+- id: vlen
+ label: Length of Vectors
+ dtype: int
+ default: 1
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.moving_average_${type.fcn}(${length}, ${scale}, ${max_iter}, ${vlen})
+ callbacks:
+ - set_length_and_scale(${length}, ${scale})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_moving_average_xx.xml b/gr-blocks/grc/blocks_moving_average_xx.xml
deleted file mode 100644
index 00c5e1d486..0000000000
--- a/gr-blocks/grc/blocks_moving_average_xx.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Moving Average
-###################################################
- -->
-<block>
- <name>Moving Average</name>
- <key>blocks_moving_average_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.moving_average_$(type.fcn)($length, $scale, $max_iter, $vlen)</make>
- <callback>set_length_and_scale($length, $scale)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- <opt>scale:complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- <opt>scale:real</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- <opt>scale:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- <opt>scale:int</opt>
- </option>
- </param>
- <param>
- <name>Length</name>
- <key>length</key>
- <value>1000</value>
- <type>int</type>
- </param>
- <param>
- <name>Scale</name>
- <key>scale</key>
- <value>1</value>
- <type>$type.scale</type>
- </param>
- <param>
- <name>Max Iter</name>
- <key>max_iter</key>
- <value>4000</value>
- <type>int</type>
- </param>
- <param>
- <name>Length of Vectors</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_multiply_by_tag_value_cc.block.yml b/gr-blocks/grc/blocks_multiply_by_tag_value_cc.block.yml
new file mode 100644
index 0000000000..f6b72edf36
--- /dev/null
+++ b/gr-blocks/grc/blocks_multiply_by_tag_value_cc.block.yml
@@ -0,0 +1,25 @@
+id: blocks_multiply_by_tag_value_cc
+label: Multiply by Tag Value
+
+parameters:
+- id: tagname
+ label: Tag Name
+ dtype: string
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.multiply_by_tag_value_cc(${tagname}, ${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_multiply_by_tag_value_cc.xml b/gr-blocks/grc/blocks_multiply_by_tag_value_cc.xml
deleted file mode 100644
index cedca12bd1..0000000000
--- a/gr-blocks/grc/blocks_multiply_by_tag_value_cc.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-
-<block>
- <name>Multiply by Tag Value</name>
- <key>blocks_multiply_by_tag_value_cc</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.multiply_by_tag_value_cc($tagname, $vlen)</make>
-
- <param>
- <name>Tag Name</name>
- <key>tagname</key>
- <type>string</type>
- </param>
-
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-
-</block>
diff --git a/gr-blocks/grc/blocks_multiply_conjugate_cc.block.yml b/gr-blocks/grc/blocks_multiply_conjugate_cc.block.yml
new file mode 100644
index 0000000000..aceabc643e
--- /dev/null
+++ b/gr-blocks/grc/blocks_multiply_conjugate_cc.block.yml
@@ -0,0 +1,33 @@
+id: blocks_multiply_conjugate_cc
+label: Multiply Conjugate
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- label: in0
+ domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+- label: in1
+ domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.multiply_conjugate_cc(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_multiply_conjugate_cc.xml b/gr-blocks/grc/blocks_multiply_conjugate_cc.xml
deleted file mode 100644
index cf0acf4d81..0000000000
--- a/gr-blocks/grc/blocks_multiply_conjugate_cc.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Multiply Conjugate Block:
-## 2 complex inputs, 1 complex output
-###################################################
- -->
-<block>
- <name>Multiply Conjugate</name>
- <key>blocks_multiply_conjugate_cc</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.multiply_conjugate_cc($vlen)</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in0</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- </sink>
- <sink>
- <name>in1</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_multiply_const_vxx.block.yml b/gr-blocks/grc/blocks_multiply_const_vxx.block.yml
new file mode 100644
index 0000000000..fe7efa4647
--- /dev/null
+++ b/gr-blocks/grc/blocks_multiply_const_vxx.block.yml
@@ -0,0 +1,43 @@
+id: blocks_multiply_const_vxx
+label: Multiply Const
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ const_type: [complex_vector, real_vector, int_vector, int_vector]
+ fcn: [cc, ff, ii, ss]
+ hide: part
+- id: const
+ label: Constant
+ dtype: ${ type.const_type }
+ default: '0'
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ len(const) == vlen }
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.multiply_const_v${type.fcn}(${const})
+ callbacks:
+ - set_k(${const})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_multiply_const_vxx.xml b/gr-blocks/grc/blocks_multiply_const_vxx.xml
deleted file mode 100644
index 6162621d33..0000000000
--- a/gr-blocks/grc/blocks_multiply_const_vxx.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Multiply Const Block:
-## all types, 1 output, 1 input & const
-###################################################
- -->
-<block>
- <name>Multiply Const</name>
- <key>blocks_multiply_const_vxx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.multiply_const_v$(type.fcn)($const)</make>
- <callback>set_k($const)</callback>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>const_type:complex_vector</opt>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>const_type:real_vector</opt>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>const_type:int_vector</opt>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>const_type:int_vector</opt>
- <opt>fcn:ss</opt>
- </option>
- </param>
- <param>
- <name>Constant</name>
- <key>const</key>
- <value>0</value>
- <type>$type.const_type</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>len($const) == $vlen</check>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_multiply_const_xx.block.yml b/gr-blocks/grc/blocks_multiply_const_xx.block.yml
new file mode 100644
index 0000000000..168de84809
--- /dev/null
+++ b/gr-blocks/grc/blocks_multiply_const_xx.block.yml
@@ -0,0 +1,41 @@
+id: blocks_multiply_const_xx
+label: Fast Multiply Const
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ fcn: [cc, ff, ii, ss]
+ hide: part
+- id: const
+ label: Constant
+ dtype: ${ type }
+ default: '0'
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.multiply_const_${type.fcn}(${const})
+ callbacks:
+ - set_k(${const})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_multiply_const_xx.xml b/gr-blocks/grc/blocks_multiply_const_xx.xml
deleted file mode 100644
index db8b5211e6..0000000000
--- a/gr-blocks/grc/blocks_multiply_const_xx.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Fast Multiply Const Block:
-## all types, 1 output, 1 input & const
-###################################################
- -->
-<block>
- <name>Fast Multiply Const</name>
- <key>blocks_multiply_const_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.multiply_const_$(type.fcn)($const)</make>
- <callback>set_k($const)</callback>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- </param>
- <param>
- <name>Constant</name>
- <key>const</key>
- <value>0</value>
- <type>$type</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_multiply_matrix_xx.block.yml b/gr-blocks/grc/blocks_multiply_matrix_xx.block.yml
new file mode 100644
index 0000000000..21a66b4f8e
--- /dev/null
+++ b/gr-blocks/grc/blocks_multiply_matrix_xx.block.yml
@@ -0,0 +1,47 @@
+id: blocks_multiply_matrix_xx
+label: Multiply by Matrix
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [float, complex]
+ option_attributes:
+ fcn: [ff, cc]
+ hide: part
+- id: A
+ label: Matrix A
+ dtype: raw
+ default: ((1, 0), (0, 1))
+ hide: part
+- id: tag_propagation_policy
+ label: TPP
+ dtype: enum
+ options: [gr.TPP_ALL_TO_ALL, gr.TPP_ONE_TO_ONE, gr.TPP_DONT, gr.TPP_CUSTOM]
+ option_labels: [All to All, One to One, No Propagation, Matrix-Defined]
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ multiplicity: ${ len(A[0]) }
+- domain: message
+ id: set_A
+ optional: true
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ multiplicity: ${ len(A) }
+
+asserts:
+- ${ len(A) > 0 }
+- ${ len(A[0]) > 0 }
+- ${ tag_propagation_policy != gr.TPP_ONE_TO_ONE or (len(A) == len(A[0])) }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.multiply_matrix_${type.fcn}(${A}, ${tag_propagation_policy})
+ callbacks:
+ - set_A(${A})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_multiply_matrix_xx.xml b/gr-blocks/grc/blocks_multiply_matrix_xx.xml
deleted file mode 100644
index bb1d77c0ba..0000000000
--- a/gr-blocks/grc/blocks_multiply_matrix_xx.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>Multiply by Matrix</name>
- <key>blocks_multiply_matrix_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.multiply_matrix_$(type.fcn)($A, $tag_propagation_policy)</make>
- <callback>set_A($A)</callback>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- </param>
- <param>
- <name>Matrix A</name>
- <key>A</key>
- <value>((1, 0), (0, 1))</value>
- <type>raw</type>
- </param>
- <param>
- <name>TPP</name>
- <key>tag_propagation_policy</key>
- <type>enum</type>
- <option>
- <name>All to All</name>
- <key>gr.TPP_ALL_TO_ALL</key>
- </option>
- <option>
- <name>One to One</name>
- <key>gr.TPP_ONE_TO_ONE</key>
- </option>
- <option>
- <name>No Propagation</name>
- <key>gr.TPP_DONT</key>
- </option>
- <option>
- <name>Matrix-Defined</name>
- <key>gr.TPP_CUSTOM</key>
- </option>
- </param>
- <check>len($A) > 0</check>
- <check>len(${A}[0]) > 0</check>
- <check>$tag_propagation_policy != gr.TPP_ONE_TO_ONE or (len($A) == len(${A}[0]))</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <nports>len(${A}[0])</nports>
- </sink>
- <sink>
- <name>set_A</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <nports>len($A)</nports>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_multiply_xx.block.yml b/gr-blocks/grc/blocks_multiply_xx.block.yml
new file mode 100644
index 0000000000..41c28458a8
--- /dev/null
+++ b/gr-blocks/grc/blocks_multiply_xx.block.yml
@@ -0,0 +1,42 @@
+id: blocks_multiply_xx
+label: Multiply
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ fcn: [cc, ff, ii, ss]
+ hide: part
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '2'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_inputs }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ num_inputs > 1 }
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.multiply_v${type.fcn}(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_multiply_xx.xml b/gr-blocks/grc/blocks_multiply_xx.xml
deleted file mode 100644
index 15f0241427..0000000000
--- a/gr-blocks/grc/blocks_multiply_xx.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Multiply Block:
-## all types, 1 output, 2 to inf inputs
-###################################################
- -->
-<block>
- <name>Multiply</name>
- <key>blocks_multiply_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.multiply_v$(type.fcn)($vlen)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_inputs &gt; 1</check>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_inputs</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_mute_xx.block.yml b/gr-blocks/grc/blocks_mute_xx.block.yml
new file mode 100644
index 0000000000..8e36c568d1
--- /dev/null
+++ b/gr-blocks/grc/blocks_mute_xx.block.yml
@@ -0,0 +1,35 @@
+id: blocks_mute_xx
+label: Mute
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ fcn: [cc, ff, ii, ss]
+ hide: part
+- id: mute
+ label: Mute
+ dtype: raw
+ default: 'False'
+ options: ['True', 'False']
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+- domain: message
+ id: set_mute
+ optional: true
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.mute_${type.fcn}(bool(${mute}))
+ callbacks:
+ - set_mute(bool(${mute}))
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_mute_xx.xml b/gr-blocks/grc/blocks_mute_xx.xml
deleted file mode 100644
index 74c22ec83a..0000000000
--- a/gr-blocks/grc/blocks_mute_xx.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Mute Block:
-## Cast input to bool.
-###################################################
- -->
-<block>
- <name>Mute</name>
- <key>blocks_mute_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.mute_$(type.fcn)(bool($mute))</make>
- <callback>set_mute(bool($mute))</callback>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- </param>
- <param>
- <name>Mute</name>
- <key>mute</key>
- <value>False</value>
- <type>raw</type>
- <option>
- <name>True</name>
- <key>True</key>
- </option>
- <option>
- <name>False</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <sink>
- <name>set_mute</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_nlog10_ff.block.yml b/gr-blocks/grc/blocks_nlog10_ff.block.yml
new file mode 100644
index 0000000000..004e72b4ec
--- /dev/null
+++ b/gr-blocks/grc/blocks_nlog10_ff.block.yml
@@ -0,0 +1,37 @@
+id: blocks_nlog10_ff
+label: Log10
+
+parameters:
+- id: n
+ label: n
+ dtype: real
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: k
+ label: k
+ dtype: real
+ default: '0'
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.nlog10_ff(${n}, ${vlen}, ${k})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_nlog10_ff.xml b/gr-blocks/grc/blocks_nlog10_ff.xml
deleted file mode 100644
index 884f4a444e..0000000000
--- a/gr-blocks/grc/blocks_nlog10_ff.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Log10 Block:
-## float in/ float out
-###################################################
- -->
-<block>
- <name>Log10</name>
- <key>blocks_nlog10_ff</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.nlog10_ff($n, $vlen, $k)</make>
- <param>
- <name>n</name>
- <key>n</key>
- <value>1</value>
- <type>real</type>
- </param>
- <param>
- <name>k</name>
- <key>k</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen >= 1</check>
- <sink>
- <name>in</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_nop.block.yml b/gr-blocks/grc/blocks_nop.block.yml
new file mode 100644
index 0000000000..5e47e813ad
--- /dev/null
+++ b/gr-blocks/grc/blocks_nop.block.yml
@@ -0,0 +1,44 @@
+id: blocks_nop
+label: Nop
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: num_ports
+ label: Num Ports
+ dtype: int
+ default: '1'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_ports }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_ports }
+
+asserts:
+- ${ num_ports > 0 }
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.nop(${type.size}*${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_nop.xml b/gr-blocks/grc/blocks_nop.xml
deleted file mode 100644
index d38c23839d..0000000000
--- a/gr-blocks/grc/blocks_nop.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Nop
-###################################################
- -->
-<block>
- <name>Nop</name>
- <key>blocks_nop</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.nop($type.size*$vlen)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Num Ports</name>
- <key>num_ports</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_ports &gt; 0</check>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_ports</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_ports</nports>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_not_xx.block.yml b/gr-blocks/grc/blocks_not_xx.block.yml
new file mode 100644
index 0000000000..63ec98a42a
--- /dev/null
+++ b/gr-blocks/grc/blocks_not_xx.block.yml
@@ -0,0 +1,25 @@
+id: blocks_not_xx
+label: Not
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [int, short, byte]
+ option_attributes:
+ fcn: [ii, ss, bb]
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.not_${type.fcn}()
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_not_xx.xml b/gr-blocks/grc/blocks_not_xx.xml
deleted file mode 100644
index fe8916d8b3..0000000000
--- a/gr-blocks/grc/blocks_not_xx.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Logical Not Block
-###################################################
- -->
-<block>
- <name>Not</name>
- <key>blocks_not_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.not_$(type.fcn)()</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:bb</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_null_sink.block.yml b/gr-blocks/grc/blocks_null_sink.block.yml
new file mode 100644
index 0000000000..c9530f99de
--- /dev/null
+++ b/gr-blocks/grc/blocks_null_sink.block.yml
@@ -0,0 +1,43 @@
+id: blocks_null_sink
+label: Null Sink
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '1'
+ hide: part
+- id: bus_conns
+ label: Bus Connections
+ dtype: raw
+ default: '[[0,],]'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_inputs }
+
+asserts:
+- ${ num_inputs >= 1 }
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.null_sink(${type.size}*${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_null_sink.xml b/gr-blocks/grc/blocks_null_sink.xml
deleted file mode 100644
index f2907d20bd..0000000000
--- a/gr-blocks/grc/blocks_null_sink.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Null Sink
-###################################################
- -->
-<block>
- <name>Null Sink</name>
- <key>blocks_null_sink</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.null_sink($type.size*$vlen)</make>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Bus Connections</name>
- <key>bus_conns</key>
- <value>[[0,],]</value>
- <type>raw</type>
- <hide>part</hide>
- </param>
- <check>$num_inputs &gt;= 1</check>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_inputs</nports>
- </sink>
- <bus_structure_sink>$bus_conns</bus_structure_sink>
-</block>
-
diff --git a/gr-blocks/grc/blocks_null_source.block.yml b/gr-blocks/grc/blocks_null_source.block.yml
new file mode 100644
index 0000000000..0678687a8d
--- /dev/null
+++ b/gr-blocks/grc/blocks_null_source.block.yml
@@ -0,0 +1,39 @@
+id: blocks_null_source
+label: Null Source
+
+parameters:
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: num_outputs
+ label: Num Outputs
+ dtype: int
+ default: '1'
+ hide: part
+- id: bus_conns
+ label: Bus Connections
+ dtype: raw
+ default: '[[0,],]'
+ hide: part
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_outputs }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.null_source(${type.size}*${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_null_source.xml b/gr-blocks/grc/blocks_null_source.xml
deleted file mode 100644
index 9c109e651f..0000000000
--- a/gr-blocks/grc/blocks_null_source.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Null Source
-###################################################
- -->
-<block>
- <name>Null Source</name>
- <key>blocks_null_source</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.null_source($type.size*$vlen)</make>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Num Outputs</name>
- <key>num_outputs</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Bus Connections</name>
- <key>bus_conns</key>
- <value>[[0,],]</value>
- <type>raw</type>
- <hide>part</hide>
- </param>
- <check>$num_outputs &gt;= 1</check>
- <check>$vlen &gt; 0</check>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_outputs</nports>
- </source>
- <bus_structure_source>$bus_conns</bus_structure_source>
-</block>
diff --git a/gr-blocks/grc/blocks_or_xx.block.yml b/gr-blocks/grc/blocks_or_xx.block.yml
new file mode 100644
index 0000000000..a28a951712
--- /dev/null
+++ b/gr-blocks/grc/blocks_or_xx.block.yml
@@ -0,0 +1,34 @@
+id: blocks_or_xx
+label: Or
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [int, short, byte]
+ option_attributes:
+ fcn: [ii, ss, bb]
+ hide: part
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '2'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ multiplicity: ${ num_inputs }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+asserts:
+- ${ num_inputs >= 2 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.or_${type.fcn}()
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_or_xx.xml b/gr-blocks/grc/blocks_or_xx.xml
deleted file mode 100644
index 400c093892..0000000000
--- a/gr-blocks/grc/blocks_or_xx.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Logical Or Block
-###################################################
- -->
-<block>
- <name>Or</name>
- <key>blocks_or_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.or_$(type.fcn)()</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:bb</opt>
- </option>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>2</value>
- <type>int</type>
- </param>
- <check>$num_inputs &gt;= 2</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <nports>$num_inputs</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_pack_k_bits_bb.block.yml b/gr-blocks/grc/blocks_pack_k_bits_bb.block.yml
new file mode 100644
index 0000000000..904f382f0f
--- /dev/null
+++ b/gr-blocks/grc/blocks_pack_k_bits_bb.block.yml
@@ -0,0 +1,24 @@
+id: blocks_pack_k_bits_bb
+label: Pack K Bits
+
+parameters:
+- id: k
+ label: K
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.pack_k_bits_bb(${k})
+
+documentation: |-
+ Pack K unpacked bits (one bit per byte) into a single packed byte containing k bits and 8 - k zeros.
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_pack_k_bits_bb.xml b/gr-blocks/grc/blocks_pack_k_bits_bb.xml
deleted file mode 100644
index 5400eb4af9..0000000000
--- a/gr-blocks/grc/blocks_pack_k_bits_bb.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Pack K Bits
-###################################################
- -->
-<block>
- <name>Pack K Bits</name>
- <key>blocks_pack_k_bits_bb</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.pack_k_bits_bb($k)</make>
- <param>
- <name>K</name>
- <key>k</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-
- <doc>
- Pack K unpacked bits (one bit per byte) into a single packed byte containing k bits and 8 - k zeros.
- </doc>
-
-</block>
diff --git a/gr-blocks/grc/blocks_packed_to_unpacked_xx.block.yml b/gr-blocks/grc/blocks_packed_to_unpacked_xx.block.yml
new file mode 100644
index 0000000000..5d49d1851c
--- /dev/null
+++ b/gr-blocks/grc/blocks_packed_to_unpacked_xx.block.yml
@@ -0,0 +1,44 @@
+id: blocks_packed_to_unpacked_xx
+label: Packed to Unpacked
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [int, short, byte]
+ option_attributes:
+ fcn: [ii, ss, bb]
+ hide: part
+- id: bits_per_chunk
+ label: Bits per Chunk
+ dtype: int
+ default: '2'
+- id: endianness
+ label: Endianness
+ dtype: int
+ options: [gr.GR_MSB_FIRST, gr.GR_LSB_FIRST]
+ option_labels: [MSB, LSB]
+- id: num_ports
+ label: Num Ports
+ dtype: int
+ default: '1'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ multiplicity: ${ num_ports }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ multiplicity: ${ num_ports }
+
+asserts:
+- ${ num_ports > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.packed_to_unpacked_${type.fcn}(${bits_per_chunk}, ${endianness})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_packed_to_unpacked_xx.xml b/gr-blocks/grc/blocks_packed_to_unpacked_xx.xml
deleted file mode 100644
index b236a38dbc..0000000000
--- a/gr-blocks/grc/blocks_packed_to_unpacked_xx.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Packed to Unpacked
-###################################################
- -->
-<block>
- <name>Packed to Unpacked</name>
- <key>blocks_packed_to_unpacked_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.packed_to_unpacked_$(type.fcn)($bits_per_chunk, $endianness)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:bb</opt>
- </option>
- </param>
- <param>
- <name>Bits per Chunk</name>
- <key>bits_per_chunk</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Endianness</name>
- <key>endianness</key>
- <type>int</type>
- <option>
- <name>MSB</name>
- <key>gr.GR_MSB_FIRST</key>
- </option>
- <option>
- <name>LSB</name>
- <key>gr.GR_LSB_FIRST</key>
- </option>
- </param>
- <param>
- <name>Num Ports</name>
- <key>num_ports</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_ports &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <nports>$num_ports</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <nports>$num_ports</nports>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_patterned_interleaver.block.yml b/gr-blocks/grc/blocks_patterned_interleaver.block.yml
new file mode 100644
index 0000000000..97f170f97e
--- /dev/null
+++ b/gr-blocks/grc/blocks_patterned_interleaver.block.yml
@@ -0,0 +1,42 @@
+id: blocks_patterned_interleaver
+label: Patterned Interleaver
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: pattern
+ label: Pattern
+ dtype: int_vector
+ default: '[0,0,1,2]'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ 1+max(pattern) }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.patterned_interleaver(${type.size}*${vlen}, ${pattern})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_patterned_interleaver.xml b/gr-blocks/grc/blocks_patterned_interleaver.xml
deleted file mode 100644
index 8dd0fac41d..0000000000
--- a/gr-blocks/grc/blocks_patterned_interleaver.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Vector to Stream
-###################################################
- -->
-<block>
- <name>Patterned Interleaver</name>
- <key>blocks_patterned_interleaver</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.patterned_interleaver($type.size*$vlen, $pattern)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Pattern</name>
- <key>pattern</key>
- <value>[0,0,1,2]</value>
- <type>int_vector</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>1+max($pattern)</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_pdu_filter.block.yml b/gr-blocks/grc/blocks_pdu_filter.block.yml
new file mode 100644
index 0000000000..43d72b7480
--- /dev/null
+++ b/gr-blocks/grc/blocks_pdu_filter.block.yml
@@ -0,0 +1,40 @@
+id: blocks_pdu_filter
+label: PDU Filter
+
+parameters:
+- id: k
+ label: Key
+ dtype: raw
+ default: pmt.intern("key")
+- id: v
+ label: Value
+ dtype: raw
+ default: pmt.intern("value")
+- id: invert
+ label: Invert Filter
+ dtype: bool
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+
+inputs:
+- domain: message
+ id: pdus
+ optional: true
+
+outputs:
+- domain: message
+ id: pdus
+ optional: true
+
+templates:
+ imports: |-
+ from gnuradio import blocks
+ import pmt
+ make: blocks.pdu_filter(${k}, ${v}, ${invert})
+ callbacks:
+ - set_key(${k})
+ - set_val(${v})
+ - set_inversion(${invert})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_pdu_filter.xml b/gr-blocks/grc/blocks_pdu_filter.xml
deleted file mode 100644
index 0e848963de..0000000000
--- a/gr-blocks/grc/blocks_pdu_filter.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## PDU Filter
-###################################################
- -->
-<block>
- <name>PDU Filter</name>
- <key>blocks_pdu_filter</key>
- <import>from gnuradio import blocks</import>
- <import>import pmt</import>
- <make>blocks.pdu_filter($k, $v, $invert)</make>
- <callback>set_key($k)</callback>
- <callback>set_val($v)</callback>
- <callback>set_inversion($invert)</callback>
- <param>
- <name>Key</name>
- <key>k</key>
- <value>pmt.intern("key")</value>
- <type>raw</type>
- </param>
- <param>
- <name>Value</name>
- <key>v</key>
- <value>pmt.intern("value")</value>
- <type>raw</type>
- </param>
- <param>
- <name>Invert Filter</name>
- <key>invert</key>
- <value>False</value>
- <type>bool</type>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- </param>
- <sink>
- <name>pdus</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>pdus</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_pdu_remove.block.yml b/gr-blocks/grc/blocks_pdu_remove.block.yml
new file mode 100644
index 0000000000..4750ff22c4
--- /dev/null
+++ b/gr-blocks/grc/blocks_pdu_remove.block.yml
@@ -0,0 +1,28 @@
+id: blocks_pdu_remove
+label: PDU Remove
+
+parameters:
+- id: k
+ label: Key
+ dtype: raw
+ default: pmt.intern("key")
+
+inputs:
+- domain: message
+ id: pdus
+ optional: true
+
+outputs:
+- domain: message
+ id: pdus
+ optional: true
+
+templates:
+ imports: |-
+ from gnuradio import blocks
+ import pmt
+ make: blocks.pdu_remove(${k})
+ callbacks:
+ - set_key(${k})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_pdu_remove.xml b/gr-blocks/grc/blocks_pdu_remove.xml
deleted file mode 100644
index c71da32fce..0000000000
--- a/gr-blocks/grc/blocks_pdu_remove.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## PDU Remove
-###################################################
- -->
-<block>
- <name>PDU Remove</name>
- <key>blocks_pdu_remove</key>
- <import>from gnuradio import blocks</import>
- <import>import pmt</import>
- <make>blocks.pdu_remove($k)</make>
- <callback>set_key($k)</callback>
- <param>
- <name>Key</name>
- <key>k</key>
- <value>pmt.intern("key")</value>
- <type>raw</type>
- </param>
- <sink>
- <name>pdus</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>pdus</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_pdu_set.block.yml b/gr-blocks/grc/blocks_pdu_set.block.yml
new file mode 100644
index 0000000000..44a06a2e09
--- /dev/null
+++ b/gr-blocks/grc/blocks_pdu_set.block.yml
@@ -0,0 +1,33 @@
+id: blocks_pdu_set
+label: PDU Set
+
+parameters:
+- id: k
+ label: Key
+ dtype: raw
+ default: pmt.intern("key")
+- id: v
+ label: Value
+ dtype: raw
+ default: pmt.intern("value")
+
+inputs:
+- domain: message
+ id: pdus
+ optional: true
+
+outputs:
+- domain: message
+ id: pdus
+ optional: true
+
+templates:
+ imports: |-
+ from gnuradio import blocks
+ import pmt
+ make: blocks.pdu_set(${k}, ${v})
+ callbacks:
+ - set_key(${k})
+ - set_val(${v})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_pdu_set.xml b/gr-blocks/grc/blocks_pdu_set.xml
deleted file mode 100644
index b7a9030622..0000000000
--- a/gr-blocks/grc/blocks_pdu_set.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## PDU Set
-###################################################
- -->
-<block>
- <name>PDU Set</name>
- <key>blocks_pdu_set</key>
- <import>from gnuradio import blocks</import>
- <import>import pmt</import>
- <make>blocks.pdu_set($k, $v)</make>
- <callback>set_key($k)</callback>
- <callback>set_val($v)</callback>
- <param>
- <name>Key</name>
- <key>k</key>
- <value>pmt.intern("key")</value>
- <type>raw</type>
- </param>
- <param>
- <name>Value</name>
- <key>v</key>
- <value>pmt.intern("value")</value>
- <type>raw</type>
- </param>
- <sink>
- <name>pdus</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>pdus</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_pdu_to_tagged_stream.block.yml b/gr-blocks/grc/blocks_pdu_to_tagged_stream.block.yml
new file mode 100644
index 0000000000..3b44badd4b
--- /dev/null
+++ b/gr-blocks/grc/blocks_pdu_to_tagged_stream.block.yml
@@ -0,0 +1,29 @@
+id: blocks_pdu_to_tagged_stream
+label: PDU to Tagged Stream
+
+parameters:
+- id: type
+ label: Item Type
+ dtype: enum
+ options: [byte, complex, float]
+ option_attributes:
+ tv: [blocks.byte_t, blocks.complex_t, blocks.float_t]
+ hide: part
+- id: tag
+ label: Length tag name
+ dtype: string
+ default: packet_len
+
+inputs:
+- domain: message
+ id: pdus
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.pdu_to_tagged_stream(${type.tv}, ${tag})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_pdu_to_tagged_stream.xml b/gr-blocks/grc/blocks_pdu_to_tagged_stream.xml
deleted file mode 100644
index 0835a2adee..0000000000
--- a/gr-blocks/grc/blocks_pdu_to_tagged_stream.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## PDU Message to Tagged Stream
-###################################################
- -->
-<block>
- <name>PDU to Tagged Stream</name>
- <key>blocks_pdu_to_tagged_stream</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.pdu_to_tagged_stream($type.tv, $tag)</make>
- <param>
- <name>Item Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>tv:blocks.byte_t</opt>
- </option>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>tv:blocks.complex_t</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>tv:blocks.float_t</opt>
- </option>
- </param>
- <param>
- <name>Length tag name</name>
- <key>tag</key>
- <value>packet_len</value>
- <type>string</type>
- </param>
- <sink>
- <name>pdus</name>
- <type>message</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_peak_detector2_fb.block.yml b/gr-blocks/grc/blocks_peak_detector2_fb.block.yml
new file mode 100644
index 0000000000..0950640ae2
--- /dev/null
+++ b/gr-blocks/grc/blocks_peak_detector2_fb.block.yml
@@ -0,0 +1,38 @@
+id: blocks_peak_detector2_fb
+label: Peak Detector2
+
+parameters:
+- id: threshold_factor_rise
+ label: TH Factor Rise
+ dtype: real
+ default: '7'
+- id: look_ahead
+ label: Look Ahead
+ dtype: int
+ default: '1000'
+- id: alpha
+ label: Alpha
+ dtype: real
+ default: '0.001'
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: byte
+- label: debug
+ domain: stream
+ dtype: float
+ optional: true
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.peak_detector2_fb(${threshold_factor_rise}, ${look_ahead}, ${alpha})
+ callbacks:
+ - set_threshold_factor_rise(${threshold_factor_rise})
+ - set_look_ahead(${look_ahead})
+ - set_alpha(${alpha})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_peak_detector2_fb.xml b/gr-blocks/grc/blocks_peak_detector2_fb.xml
deleted file mode 100644
index 0b25e01680..0000000000
--- a/gr-blocks/grc/blocks_peak_detector2_fb.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Peak Detector2
-###################################################
- -->
-<block>
- <name>Peak Detector2</name>
- <key>blocks_peak_detector2_fb</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.peak_detector2_fb($threshold_factor_rise, $look_ahead, $alpha)</make>
- <callback>set_threshold_factor_rise($threshold_factor_rise)</callback>
- <callback>set_look_ahead($look_ahead)</callback>
- <callback>set_alpha($alpha)</callback>
- <param>
- <name>TH Factor Rise</name>
- <key>threshold_factor_rise</key>
- <value>7</value>
- <type>real</type>
- </param>
- <param>
- <name>Look Ahead</name>
- <key>look_ahead</key>
- <value>1000</value>
- <type>int</type>
- </param>
- <param>
- <name>Alpha</name>
- <key>alpha</key>
- <value>0.001</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
- <source>
- <name>debug</name>
- <type>float</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_peak_detector_xb.block.yml b/gr-blocks/grc/blocks_peak_detector_xb.block.yml
new file mode 100644
index 0000000000..be0f238391
--- /dev/null
+++ b/gr-blocks/grc/blocks_peak_detector_xb.block.yml
@@ -0,0 +1,47 @@
+id: blocks_peak_detector_xb
+label: Peak Detector
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [float, int, short]
+ option_attributes:
+ fcn: [f, i, s]
+ hide: part
+- id: threshold_factor_rise
+ label: TH Factor Rise
+ dtype: real
+ default: '0.25'
+- id: threshold_factor_fall
+ label: TH Factor Fall
+ dtype: real
+ default: '0.40'
+- id: look_ahead
+ label: Look Ahead
+ dtype: int
+ default: '10'
+- id: alpha
+ label: Alpha
+ dtype: real
+ default: '0.001'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.peak_detector_${type.fcn}b(${threshold_factor_rise}, ${threshold_factor_fall},
+ ${look_ahead}, ${alpha})
+ callbacks:
+ - set_threshold_factor_rise(${threshold_factor_rise})
+ - set_threshold_factor_fall(${threshold_factor_fall})
+ - set_look_ahead(${look_ahead})
+ - set_alpha(${alpha})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_peak_detector_xb.xml b/gr-blocks/grc/blocks_peak_detector_xb.xml
deleted file mode 100644
index 1aabf89474..0000000000
--- a/gr-blocks/grc/blocks_peak_detector_xb.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Peak Detector
-###################################################
- -->
-<block>
- <name>Peak Detector</name>
- <key>blocks_peak_detector_xb</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.peak_detector_$(type.fcn)b($threshold_factor_rise, $threshold_factor_fall, $look_ahead, $alpha)</make>
- <callback>set_threshold_factor_rise($threshold_factor_rise)</callback>
- <callback>set_threshold_factor_fall($threshold_factor_fall)</callback>
- <callback>set_look_ahead($look_ahead)</callback>
- <callback>set_alpha($alpha)</callback>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- </option>
- </param>
- <param>
- <name>TH Factor Rise</name>
- <key>threshold_factor_rise</key>
- <value>0.25</value>
- <type>real</type>
- </param>
- <param>
- <name>TH Factor Fall</name>
- <key>threshold_factor_fall</key>
- <value>0.40</value>
- <type>real</type>
- </param>
- <param>
- <name>Look Ahead</name>
- <key>look_ahead</key>
- <value>10</value>
- <type>int</type>
- </param>
- <param>
- <name>Alpha</name>
- <key>alpha</key>
- <value>0.001</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_plateau_detector_fb.block.yml b/gr-blocks/grc/blocks_plateau_detector_fb.block.yml
new file mode 100644
index 0000000000..9af55a67f9
--- /dev/null
+++ b/gr-blocks/grc/blocks_plateau_detector_fb.block.yml
@@ -0,0 +1,25 @@
+id: blocks_plateau_detector_fb
+label: Plateau Detector
+
+parameters:
+- id: max_len
+ label: Max. plateau length
+ dtype: int
+- id: threshold
+ label: Threshold
+ dtype: real
+ default: '0.9'
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.plateau_detector_fb(${max_len}, ${threshold})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_plateau_detector_fb.xml b/gr-blocks/grc/blocks_plateau_detector_fb.xml
deleted file mode 100644
index 90f67a4cf5..0000000000
--- a/gr-blocks/grc/blocks_plateau_detector_fb.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>Plateau Detector</name>
- <key>blocks_plateau_detector_fb</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.plateau_detector_fb($max_len, $threshold)</make>
- <param>
- <name>Max. plateau length</name>
- <key>max_len</key>
- <type>int</type>
- </param>
- <param>
- <name>Threshold</name>
- <key>threshold</key>
- <value>0.9</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_probe_rate.block.yml b/gr-blocks/grc/blocks_probe_rate.block.yml
new file mode 100644
index 0000000000..1f9ed65b2b
--- /dev/null
+++ b/gr-blocks/grc/blocks_probe_rate.block.yml
@@ -0,0 +1,44 @@
+id: blocks_probe_rate
+label: Probe Rate
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: mintime
+ label: Min Update Time (ms)
+ dtype: real
+ default: '500.0'
+- id: alpha
+ label: Update Alpha
+ dtype: real
+ default: '0.15'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: message
+ id: rate
+ optional: true
+
+asserts:
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.probe_rate(${type.size}*${vlen}, ${mintime}, ${alpha})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_probe_rate.xml b/gr-blocks/grc/blocks_probe_rate.xml
deleted file mode 100644
index f79444c137..0000000000
--- a/gr-blocks/grc/blocks_probe_rate.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Probe Rate
-###################################################
- -->
-<block>
- <name>Probe Rate</name>
- <key>blocks_probe_rate</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.probe_rate($type.size*$vlen, $mintime, $alpha)</make>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Min Update Time (ms)</name>
- <key>mintime</key>
- <value>500.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Update Alpha</name>
- <key>alpha</key>
- <value>0.15</value>
- <type>real</type>
- </param>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>rate</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_probe_signal_vx.block.yml b/gr-blocks/grc/blocks_probe_signal_vx.block.yml
new file mode 100644
index 0000000000..2b486a55b2
--- /dev/null
+++ b/gr-blocks/grc/blocks_probe_signal_vx.block.yml
@@ -0,0 +1,35 @@
+id: blocks_probe_signal_vx
+label: Probe Signal Vector
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ fcn: [c, f, i, s, b]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.probe_signal_v${type.fcn}(${vlen})
+
+documentation: |-
+ Available functions to probe: level()
+
+ Use with the function probe block.
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_probe_signal_vx.xml b/gr-blocks/grc/blocks_probe_signal_vx.xml
deleted file mode 100644
index 930a49643c..0000000000
--- a/gr-blocks/grc/blocks_probe_signal_vx.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Probe Signal
-###################################################
- -->
-<block>
- <name>Probe Signal Vector</name>
- <key>blocks_probe_signal_vx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.probe_signal_v$(type.fcn)($vlen)</make>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:b</opt>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <doc>
-Available functions to probe: level()
-
-Use with the function probe block.
- </doc>
-</block>
diff --git a/gr-blocks/grc/blocks_probe_signal_x.block.yml b/gr-blocks/grc/blocks_probe_signal_x.block.yml
new file mode 100644
index 0000000000..0991bde99f
--- /dev/null
+++ b/gr-blocks/grc/blocks_probe_signal_x.block.yml
@@ -0,0 +1,26 @@
+id: blocks_probe_signal_x
+label: Probe Signal
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ fcn: [c, f, i, s, b]
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.probe_signal_${type.fcn}()
+
+documentation: |-
+ Available functions to probe: level()
+
+ Use with the function probe block.
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_probe_signal_x.xml b/gr-blocks/grc/blocks_probe_signal_x.xml
deleted file mode 100644
index 726f0fa747..0000000000
--- a/gr-blocks/grc/blocks_probe_signal_x.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Probe Signal
-###################################################
- -->
-<block>
- <name>Probe Signal</name>
- <key>blocks_probe_signal_x</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.probe_signal_$(type.fcn)()</make>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:b</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <doc>
-Available functions to probe: level()
-
-Use with the function probe block.
- </doc>
-</block>
diff --git a/gr-blocks/grc/blocks_random_pdu.block.yml b/gr-blocks/grc/blocks_random_pdu.block.yml
new file mode 100644
index 0000000000..831b7eb4c2
--- /dev/null
+++ b/gr-blocks/grc/blocks_random_pdu.block.yml
@@ -0,0 +1,38 @@
+id: blocks_random_pdu
+label: Random PDU Generator
+
+parameters:
+- id: minsize
+ label: Min Bytes
+ dtype: int
+ default: '50'
+- id: maxsize
+ label: Max Bytes
+ dtype: int
+ default: '2000'
+- id: mask
+ label: Byte Mask
+ dtype: int
+ default: '0xFF'
+- id: length_modulo
+ label: Length Modulo
+ dtype: int
+ default: '2'
+
+inputs:
+- domain: message
+ id: generate
+ optional: true
+
+outputs:
+- domain: message
+ id: pdus
+ optional: true
+
+templates:
+ imports: |-
+ from gnuradio import blocks
+ import pmt
+ make: blocks.random_pdu(${minsize}, ${maxsize}, chr(${mask}), ${length_modulo})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_random_pdu.xml b/gr-blocks/grc/blocks_random_pdu.xml
deleted file mode 100644
index a70fa7fbf7..0000000000
--- a/gr-blocks/grc/blocks_random_pdu.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Random PDU
-###################################################
- -->
-<block>
- <name>Random PDU Generator</name>
- <key>blocks_random_pdu</key>
- <import>from gnuradio import blocks</import>
- <import>import pmt</import>
- <make>blocks.random_pdu($minsize, $maxsize, chr($mask), $length_modulo)</make>
- <param>
- <name>Min Bytes</name>
- <key>minsize</key>
- <value>50</value>
- <type>int</type>
- </param>
- <param>
- <name>Max Bytes</name>
- <key>maxsize</key>
- <value>2000</value>
- <type>int</type>
- </param>
- <param>
- <name>Byte Mask</name>
- <key>mask</key>
- <value>0xFF</value>
- <type>int</type>
- </param>
- <param>
- <name>Length Modulo</name>
- <key>length_modulo</key>
- <value>2</value>
- <type>int</type>
- </param>
- <sink>
- <name>generate</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>pdus</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_regenerate_bb.block.yml b/gr-blocks/grc/blocks_regenerate_bb.block.yml
new file mode 100644
index 0000000000..843e680a41
--- /dev/null
+++ b/gr-blocks/grc/blocks_regenerate_bb.block.yml
@@ -0,0 +1,25 @@
+id: blocks_regenerate_bb
+label: Regenerate
+
+parameters:
+- id: period
+ label: Period
+ dtype: int
+- id: max_regen
+ label: Max Regen Count
+ dtype: int
+ default: '500'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.regenerate_bb(${period}, ${max_regen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_regenerate_bb.xml b/gr-blocks/grc/blocks_regenerate_bb.xml
deleted file mode 100644
index bbee53387f..0000000000
--- a/gr-blocks/grc/blocks_regenerate_bb.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Regenerate Block:
-## char in/ char out
-###################################################
- -->
-<block>
- <name>Regenerate</name>
- <key>blocks_regenerate_bb</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.regenerate_bb($period, $max_regen)</make>
- <param>
- <name>Period</name>
- <key>period</key>
- <type>int</type>
- </param>
- <param>
- <name>Max Regen Count</name>
- <key>max_regen</key>
- <value>500</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_repack_bits_bb.block.yml b/gr-blocks/grc/blocks_repack_bits_bb.block.yml
new file mode 100644
index 0000000000..9d5a3ba9ca
--- /dev/null
+++ b/gr-blocks/grc/blocks_repack_bits_bb.block.yml
@@ -0,0 +1,47 @@
+id: blocks_repack_bits_bb
+label: Repack Bits
+
+parameters:
+- id: k
+ label: Bits per input byte
+ dtype: int
+ default: '1'
+- id: l
+ label: Bits per output byte
+ dtype: int
+ default: '8'
+- id: len_tag_key
+ label: Length Tag Key
+ dtype: string
+ default: '""'
+ hide: part
+- id: align_output
+ label: Packet Alignment
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: [Output, Input]
+ hide: part
+- id: endianness
+ label: Endianness
+ dtype: int
+ default: gr.GR_LSB_FIRST
+ options: [gr.GR_MSB_FIRST, gr.GR_LSB_FIRST]
+ option_labels: [MSB, LSB]
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.repack_bits_bb(${k}, ${l}, ${len_tag_key}, ${align_output}, ${endianness})
+ callbacks:
+ - set_k_and_l(${k},${l})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_repack_bits_bb.xml b/gr-blocks/grc/blocks_repack_bits_bb.xml
deleted file mode 100644
index 0c107d8439..0000000000
--- a/gr-blocks/grc/blocks_repack_bits_bb.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<block>
- <name>Repack Bits</name>
- <key>blocks_repack_bits_bb</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.repack_bits_bb($k, $l, $len_tag_key, $align_output, $endianness)</make>
- <callback>set_k_and_l($k,$l)</callback>
- <param>
- <name>Bits per input byte</name>
- <key>k</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Bits per output byte</name>
- <key>l</key>
- <value>8</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Length Tag Key</name>
- <key>len_tag_key</key>
- <value>""</value>
- <type>string</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Packet Alignment</name>
- <key>align_output</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Output</name>
- <key>True</key>
- </option>
- <option>
- <name>Input</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Endianness</name>
- <key>endianness</key>
- <value>gr.GR_LSB_FIRST</value>
- <type>int</type>
- <hide>part</hide>
- <option>
- <name>MSB</name>
- <key>gr.GR_MSB_FIRST</key>
- </option>
- <option>
- <name>LSB</name>
- <key>gr.GR_LSB_FIRST</key>
- </option>
- </param>
-
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_repeat.block.yml b/gr-blocks/grc/blocks_repeat.block.yml
new file mode 100644
index 0000000000..809231d293
--- /dev/null
+++ b/gr-blocks/grc/blocks_repeat.block.yml
@@ -0,0 +1,41 @@
+id: blocks_repeat
+label: Repeat
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: interp
+ label: Interpolation
+ dtype: int
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.repeat(${type.size}*${vlen}, ${interp})
+ callbacks:
+ - set_interpolation(${interp})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_repeat.xml b/gr-blocks/grc/blocks_repeat.xml
deleted file mode 100644
index 793d0148b2..0000000000
--- a/gr-blocks/grc/blocks_repeat.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Repeat
-###################################################
- -->
-<block>
- <name>Repeat</name>
- <key>blocks_repeat</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.repeat($type.size*$vlen, $interp)</make>
- <callback>set_interpolation($interp)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Interpolation</name>
- <key>interp</key>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_rms_xx.block.yml b/gr-blocks/grc/blocks_rms_xx.block.yml
new file mode 100644
index 0000000000..ca5e8df124
--- /dev/null
+++ b/gr-blocks/grc/blocks_rms_xx.block.yml
@@ -0,0 +1,31 @@
+id: blocks_rms_xx
+label: RMS
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float]
+ option_attributes:
+ fcn: [c, f]
+ hide: part
+- id: alpha
+ label: Alpha
+ dtype: real
+ default: '0.0001'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.rms_${type.fcn}f(${alpha})
+ callbacks:
+ - set_alpha(${alpha})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_rms_xx.xml b/gr-blocks/grc/blocks_rms_xx.xml
deleted file mode 100644
index 0ae09139a6..0000000000
--- a/gr-blocks/grc/blocks_rms_xx.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##RMS
-###################################################
- -->
-<block>
- <name>RMS</name>
- <key>blocks_rms_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.rms_$(type.fcn)f($alpha)</make>
- <callback>set_alpha($alpha)</callback>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- </option>
- </param>
- <param>
- <name>Alpha</name>
- <key>alpha</key>
- <value>0.0001</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_rotator_cc.block.yml b/gr-blocks/grc/blocks_rotator_cc.block.yml
new file mode 100644
index 0000000000..d65fbd5997
--- /dev/null
+++ b/gr-blocks/grc/blocks_rotator_cc.block.yml
@@ -0,0 +1,24 @@
+id: blocks_rotator_cc
+label: Rotator
+
+parameters:
+- id: phase_inc
+ label: Phase Increment
+ dtype: real
+ default: '0.0'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.rotator_cc(${phase_inc})
+ callbacks:
+ - set_phase_inc(${phase_inc})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_rotator_cc.xml b/gr-blocks/grc/blocks_rotator_cc.xml
deleted file mode 100644
index aa011b80e0..0000000000
--- a/gr-blocks/grc/blocks_rotator_cc.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Complex rotator
-###################################################
- -->
-<block>
- <name>Rotator</name>
- <key>blocks_rotator_cc</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.rotator_cc($phase_inc)</make>
- <callback>set_phase_inc($phase_inc)</callback>
- <param>
- <name>Phase Increment</name>
- <key>phase_inc</key>
- <value>0.0</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_sample_and_hold_xx.block.yml b/gr-blocks/grc/blocks_sample_and_hold_xx.block.yml
new file mode 100644
index 0000000000..893e7862b2
--- /dev/null
+++ b/gr-blocks/grc/blocks_sample_and_hold_xx.block.yml
@@ -0,0 +1,28 @@
+id: blocks_sample_and_hold_xx
+label: Sample and Hold
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [float, int, short, byte]
+ option_attributes:
+ fcn: [ff, ii, ss, bb]
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+- label: ctrl
+ domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.sample_and_hold_${type.fcn}()
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_sample_and_hold_xx.xml b/gr-blocks/grc/blocks_sample_and_hold_xx.xml
deleted file mode 100644
index 1583204c02..0000000000
--- a/gr-blocks/grc/blocks_sample_and_hold_xx.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Sample and Hold
-###################################################
- -->
-<block>
- <name>Sample and Hold</name>
- <key>blocks_sample_and_hold_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.sample_and_hold_$(type.fcn)()</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:bb</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <sink>
- <name>ctrl</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_short_to_char.block.yml b/gr-blocks/grc/blocks_short_to_char.block.yml
new file mode 100644
index 0000000000..d24df725da
--- /dev/null
+++ b/gr-blocks/grc/blocks_short_to_char.block.yml
@@ -0,0 +1,25 @@
+id: blocks_short_to_char
+label: Short To Char
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: short
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.short_to_char(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_short_to_char.xml b/gr-blocks/grc/blocks_short_to_char.xml
deleted file mode 100644
index 1951333d1a..0000000000
--- a/gr-blocks/grc/blocks_short_to_char.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Short to char:
-###################################################
- -->
-<block>
- <name>Short To Char</name>
- <key>blocks_short_to_char</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.short_to_char($vlen)</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>short</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_short_to_float.block.yml b/gr-blocks/grc/blocks_short_to_float.block.yml
new file mode 100644
index 0000000000..8ad5f7ed13
--- /dev/null
+++ b/gr-blocks/grc/blocks_short_to_float.block.yml
@@ -0,0 +1,31 @@
+id: blocks_short_to_float
+label: Short To Float
+
+parameters:
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: scale
+ label: Scale
+ dtype: real
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: short
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.short_to_float(${vlen}, ${scale})
+ callbacks:
+ - set_scale(${scale})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_short_to_float.xml b/gr-blocks/grc/blocks_short_to_float.xml
deleted file mode 100644
index 23ea019bc2..0000000000
--- a/gr-blocks/grc/blocks_short_to_float.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Short to Float:
-###################################################
- -->
-<block>
- <name>Short To Float</name>
- <key>blocks_short_to_float</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.short_to_float($vlen, $scale)</make>
- <callback>set_scale($scale)</callback>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Scale</name>
- <key>scale</key>
- <value>1</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>short</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_skiphead.block.yml b/gr-blocks/grc/blocks_skiphead.block.yml
new file mode 100644
index 0000000000..c0f10eb2d1
--- /dev/null
+++ b/gr-blocks/grc/blocks_skiphead.block.yml
@@ -0,0 +1,40 @@
+id: blocks_skiphead
+label: Skip Head
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: num_items
+ label: Num Items
+ dtype: int
+ default: '1024'
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.skiphead(${type.size}*${vlen}, ${num_items})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_skiphead.xml b/gr-blocks/grc/blocks_skiphead.xml
deleted file mode 100644
index 7d90862830..0000000000
--- a/gr-blocks/grc/blocks_skiphead.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Skip Head
-###################################################
- -->
-<block>
- <name>Skip Head</name>
- <key>blocks_skiphead</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.skiphead($type.size*$vlen, $num_items)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Num Items</name>
- <key>num_items</key>
- <value>1024</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_socket_pdu.block.yml b/gr-blocks/grc/blocks_socket_pdu.block.yml
new file mode 100644
index 0000000000..9869219047
--- /dev/null
+++ b/gr-blocks/grc/blocks_socket_pdu.block.yml
@@ -0,0 +1,63 @@
+id: blocks_socket_pdu
+label: Socket PDU
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ default: TCP_SERVER
+ options: ['"TCP_SERVER"', '"TCP_CLIENT"', '"UDP_SERVER"', '"UDP_CLIENT"']
+ option_labels: [TCP Server, TCP Client, UDP Server, UDP Client]
+- id: host
+ label: Host
+ dtype: string
+- id: port
+ label: Port
+ dtype: string
+ default: '52001'
+- id: mtu
+ label: MTU
+ dtype: int
+ default: '10000'
+- id: tcp_no_delay
+ label: TCP No Delay
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: [Enabled, Disabled]
+ hide: '${ #if ((type == ''"TCP_CLIENT"'') or (type == ''"TCP_SERVER"''))
+
+ #if (str(tcp_no_delay) == ''False'')
+
+ part
+
+ #else
+
+ none
+
+ #end if
+
+ #else
+
+ all
+
+ #end if }'
+
+inputs:
+- domain: message
+ id: pdus
+ optional: true
+
+outputs:
+- domain: message
+ id: pdus
+ optional: true
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.socket_pdu(${type}, ${host}, ${port}, ${mtu}, ${tcp_no_delay})
+
+documentation: |-
+ For server modes, leave Host blank to bind to all interfaces (equivalent to 0.0.0.0).
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_socket_pdu.xml b/gr-blocks/grc/blocks_socket_pdu.xml
deleted file mode 100644
index 72dc38134c..0000000000
--- a/gr-blocks/grc/blocks_socket_pdu.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Socket PDU Message source/sink
-###################################################
- -->
-<block>
- <name>Socket PDU</name>
- <key>blocks_socket_pdu</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.socket_pdu($type, $host, $port, $mtu, $tcp_no_delay)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>TCP_SERVER</value>
- <type>enum</type>
- <option>
- <name>TCP Server</name>
- <key>"TCP_SERVER"</key>
- </option>
- <option>
- <name>TCP Client</name>
- <key>"TCP_CLIENT"</key>
- </option>
- <option>
- <name>UDP Server</name>
- <key>"UDP_SERVER"</key>
- </option>
- <option>
- <name>UDP Client</name>
- <key>"UDP_CLIENT"</key>
- </option>
- </param>
- <param>
- <name>Host</name>
- <key>host</key>
- <value></value>
- <type>string</type>
- </param>
- <param>
- <name>Port</name>
- <key>port</key>
- <value>52001</value>
- <type>string</type>
- </param>
- <param>
- <name>MTU</name>
- <key>mtu</key>
- <value>10000</value>
- <type>int</type>
- </param>
- <param>
- <name>TCP No Delay</name>
- <key>tcp_no_delay</key>
- <value>False</value>
- <type>enum</type>
- <hide>
-#if (($type() == '"TCP_CLIENT"') or ($type() == '"TCP_SERVER"'))
-#if (str($tcp_no_delay()) == 'False')
-part
-#else
-none
-#end if
-#else
-all
-#end if
-</hide>
- <option>
- <name>Enabled</name>
- <key>True</key>
- </option>
- <option>
- <name>Disabled</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>pdus</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>pdus</name>
- <type>message</type>
- <optional>1</optional>
- </source>
- <doc>For server modes, leave Host blank to bind to all interfaces (equivalent to 0.0.0.0).</doc>
-</block>
diff --git a/gr-blocks/grc/blocks_stream_mux.block.yml b/gr-blocks/grc/blocks_stream_mux.block.yml
new file mode 100644
index 0000000000..27d3baf89f
--- /dev/null
+++ b/gr-blocks/grc/blocks_stream_mux.block.yml
@@ -0,0 +1,48 @@
+id: blocks_stream_mux
+label: Stream Mux
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: lengths
+ label: Lengths
+ dtype: int_vector
+ default: 1, 1
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '2'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_inputs }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ num_inputs > 0 }
+- ${ num_inputs == len(lengths) }
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.stream_mux(${type.size}*${vlen}, ${lengths})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_stream_mux.xml b/gr-blocks/grc/blocks_stream_mux.xml
deleted file mode 100644
index 5e56a65d91..0000000000
--- a/gr-blocks/grc/blocks_stream_mux.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Stream Mux:
-## all types, many inputs, only one output
-###################################################
- -->
-<block>
- <name>Stream Mux</name>
- <key>blocks_stream_mux</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.stream_mux($type.size*$vlen, $lengths)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Lengths</name>
- <key>lengths</key>
- <value>1, 1</value>
- <type>int_vector</type>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_inputs &gt; 0</check>
- <check>$num_inputs == len($lengths)</check>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_inputs</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_stream_to_streams.block.yml b/gr-blocks/grc/blocks_stream_to_streams.block.yml
new file mode 100644
index 0000000000..16adb159a3
--- /dev/null
+++ b/gr-blocks/grc/blocks_stream_to_streams.block.yml
@@ -0,0 +1,43 @@
+id: blocks_stream_to_streams
+label: Stream to Streams
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: num_streams
+ label: Num Streams
+ dtype: int
+ default: '2'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_streams }
+
+asserts:
+- ${ num_streams > 0 }
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.stream_to_streams(${type.size}*${vlen}, ${num_streams})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_stream_to_streams.xml b/gr-blocks/grc/blocks_stream_to_streams.xml
deleted file mode 100644
index c164e477b7..0000000000
--- a/gr-blocks/grc/blocks_stream_to_streams.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Stream to Streams
-###################################################
- -->
-<block>
- <name>Stream to Streams</name>
- <key>blocks_stream_to_streams</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.stream_to_streams($type.size*$vlen, $num_streams)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Num Streams</name>
- <key>num_streams</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_streams &gt; 0</check>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_streams</nports>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_stream_to_tagged_stream.block.yml b/gr-blocks/grc/blocks_stream_to_tagged_stream.block.yml
new file mode 100644
index 0000000000..db75c20dd7
--- /dev/null
+++ b/gr-blocks/grc/blocks_stream_to_tagged_stream.block.yml
@@ -0,0 +1,43 @@
+id: blocks_stream_to_tagged_stream
+label: Stream to Tagged Stream
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vector Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: packet_len
+ label: Packet Length
+ dtype: int
+- id: len_tag_key
+ label: Length Tag Key
+ dtype: string
+ default: '"packet_len"'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.stream_to_tagged_stream(${type.size}, ${vlen}, ${packet_len}, ${len_tag_key})
+ callbacks:
+ - set_packet_len(${packet_len})
+ - set_packet_len_pmt(${packet_len})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_stream_to_tagged_stream.xml b/gr-blocks/grc/blocks_stream_to_tagged_stream.xml
deleted file mode 100644
index c2af70c2af..0000000000
--- a/gr-blocks/grc/blocks_stream_to_tagged_stream.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>Stream to Tagged Stream</name>
- <key>blocks_stream_to_tagged_stream</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.stream_to_tagged_stream($type.size, $vlen, $packet_len, $len_tag_key)</make>
- <callback>set_packet_len($packet_len)</callback>
- <callback>set_packet_len_pmt($packet_len)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Vector Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Packet Length</name>
- <key>packet_len</key>
- <type>int</type>
- </param>
- <param>
- <name>Length Tag Key</name>
- <key>len_tag_key</key>
- <value>"packet_len"</value>
- <type>string</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_stream_to_vector.block.yml b/gr-blocks/grc/blocks_stream_to_vector.block.yml
new file mode 100644
index 0000000000..73e177d0c7
--- /dev/null
+++ b/gr-blocks/grc/blocks_stream_to_vector.block.yml
@@ -0,0 +1,42 @@
+id: blocks_stream_to_vector
+label: Stream to Vector
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: num_items
+ label: Num Items
+ dtype: int
+ default: '2'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen*num_items }
+
+asserts:
+- ${ num_items > 0 }
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.stream_to_vector(${type.size}*${vlen}, ${num_items})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_stream_to_vector.xml b/gr-blocks/grc/blocks_stream_to_vector.xml
deleted file mode 100644
index 8965dfbfe8..0000000000
--- a/gr-blocks/grc/blocks_stream_to_vector.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Stream to Vector
-###################################################
- -->
-<block>
- <name>Stream to Vector</name>
- <key>blocks_stream_to_vector</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.stream_to_vector($type.size*$vlen, $num_items)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Num Items</name>
- <key>num_items</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_items &gt; 0</check>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen*$num_items</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_stream_to_vector_decimator.block.yml b/gr-blocks/grc/blocks_stream_to_vector_decimator.block.yml
new file mode 100644
index 0000000000..7c48016de3
--- /dev/null
+++ b/gr-blocks/grc/blocks_stream_to_vector_decimator.block.yml
@@ -0,0 +1,47 @@
+id: blocks_stream_to_vector_decimator
+label: Stream to Vec Decim
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: sample_rate
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+- id: vec_rate
+ label: Vec Rate
+ dtype: real
+ default: '30'
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1024'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: "blocks.stream_to_vector_decimator(\n\titem_size=${type.size},\n\tsample_rate=${sample_rate},\n\
+ \tvec_rate=${vec_rate},\n\tvec_len=${vlen},\n)"
+ callbacks:
+ - set_sample_rate(${sample_rate})
+ - set_vec_rate(${vec_rate})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_stream_to_vector_decimator.xml b/gr-blocks/grc/blocks_stream_to_vector_decimator.xml
deleted file mode 100644
index ca71cf17ff..0000000000
--- a/gr-blocks/grc/blocks_stream_to_vector_decimator.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Stream to Vector Decimator
-###################################################
- -->
-<block>
- <name>Stream to Vec Decim</name>
- <key>blocks_stream_to_vector_decimator</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.stream_to_vector_decimator(
- item_size=$type.size,
- sample_rate=$sample_rate,
- vec_rate=$vec_rate,
- vec_len=$vlen,
-)</make>
- <callback>set_sample_rate($sample_rate)</callback>
- <callback>set_vec_rate($vec_rate)</callback>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>sample_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Vec Rate</name>
- <key>vec_rate</key>
- <value>30</value>
- <type>real</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1024</value>
- <type>int</type>
- </param>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_streams_to_stream.block.yml b/gr-blocks/grc/blocks_streams_to_stream.block.yml
new file mode 100644
index 0000000000..404fcb0125
--- /dev/null
+++ b/gr-blocks/grc/blocks_streams_to_stream.block.yml
@@ -0,0 +1,43 @@
+id: blocks_streams_to_stream
+label: Streams to Stream
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: num_streams
+ label: Num Streams
+ dtype: int
+ default: '2'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_streams }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ num_streams > 0 }
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.streams_to_stream(${type.size}*${vlen}, ${num_streams})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_streams_to_stream.xml b/gr-blocks/grc/blocks_streams_to_stream.xml
deleted file mode 100644
index 2aa17dbe23..0000000000
--- a/gr-blocks/grc/blocks_streams_to_stream.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Streams to Stream
-###################################################
- -->
-<block>
- <name>Streams to Stream</name>
- <key>blocks_streams_to_stream</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.streams_to_stream($type.size*$vlen, $num_streams)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Num Streams</name>
- <key>num_streams</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_streams &gt; 0</check>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_streams</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_streams_to_vector.block.yml b/gr-blocks/grc/blocks_streams_to_vector.block.yml
new file mode 100644
index 0000000000..d16d1e9384
--- /dev/null
+++ b/gr-blocks/grc/blocks_streams_to_vector.block.yml
@@ -0,0 +1,43 @@
+id: blocks_streams_to_vector
+label: Streams to Vector
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: num_streams
+ label: Num Streams
+ dtype: int
+ default: '2'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_streams }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen*num_streams }
+
+asserts:
+- ${ num_streams > 0 }
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.streams_to_vector(${type.size}*${vlen}, ${num_streams})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_streams_to_vector.xml b/gr-blocks/grc/blocks_streams_to_vector.xml
deleted file mode 100644
index dc371f0215..0000000000
--- a/gr-blocks/grc/blocks_streams_to_vector.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Streams to Vector
-###################################################
- -->
-<block>
- <name>Streams to Vector</name>
- <key>blocks_streams_to_vector</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.streams_to_vector($type.size*$vlen, $num_streams)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Num Streams</name>
- <key>num_streams</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_streams &gt; 0</check>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_streams</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen*$num_streams</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_stretch_ff.block.yml b/gr-blocks/grc/blocks_stretch_ff.block.yml
new file mode 100644
index 0000000000..95921538c0
--- /dev/null
+++ b/gr-blocks/grc/blocks_stretch_ff.block.yml
@@ -0,0 +1,28 @@
+id: blocks_stretch_ff
+label: Stretch
+
+parameters:
+- id: lo
+ label: Low
+ dtype: real
+- id: vlen
+ label: Vec. Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.stretch_ff(${lo}, ${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_stretch_ff.xml b/gr-blocks/grc/blocks_stretch_ff.xml
deleted file mode 100644
index 00a67602b2..0000000000
--- a/gr-blocks/grc/blocks_stretch_ff.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Stretch Block:
-## float in / float out
-###################################################
- -->
-<block>
- <name>Stretch</name>
- <key>blocks_stretch_ff</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.stretch_ff($lo, $vlen)</make>
- <param>
- <name>Low</name>
- <key>lo</key>
- <type>real</type>
- </param>
- <param>
- <name>Vec. Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_sub_xx.block.yml b/gr-blocks/grc/blocks_sub_xx.block.yml
new file mode 100644
index 0000000000..0cfab09407
--- /dev/null
+++ b/gr-blocks/grc/blocks_sub_xx.block.yml
@@ -0,0 +1,42 @@
+id: blocks_sub_xx
+label: Subtract
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short]
+ option_attributes:
+ fcn: [cc, ff, ii, ss]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '2'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_inputs }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+- ${ num_inputs >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.sub_${type.fcn}(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_sub_xx.xml b/gr-blocks/grc/blocks_sub_xx.xml
deleted file mode 100644
index 88b5ccbb57..0000000000
--- a/gr-blocks/grc/blocks_sub_xx.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Subtract Block:
-## all types, 1 output, 2 to inf inputs
-###################################################
- -->
-<block>
- <name>Subtract</name>
- <key>blocks_sub_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.sub_$(type.fcn)($vlen)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>2</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <check>$num_inputs &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_inputs</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_tag_debug.block.yml b/gr-blocks/grc/blocks_tag_debug.block.yml
new file mode 100644
index 0000000000..f6fe4eff66
--- /dev/null
+++ b/gr-blocks/grc/blocks_tag_debug.block.yml
@@ -0,0 +1,53 @@
+id: blocks_tag_debug
+label: Tag Debug
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: name
+ label: Name
+ dtype: string
+- id: filter
+ label: Key Filter
+ dtype: string
+ default: '""'
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '1'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: display
+ label: Display
+ dtype: bool
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_inputs }
+
+asserts:
+- ${ num_inputs >= 1 }
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.tag_debug(${type.size}*${vlen}, ${name}, ${filter}); self.${id}.set_display(${display})
+ callbacks:
+ - set_display(${display})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_tag_debug.xml b/gr-blocks/grc/blocks_tag_debug.xml
deleted file mode 100644
index 03dd147cbe..0000000000
--- a/gr-blocks/grc/blocks_tag_debug.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Tag Debug
-###################################################
- -->
-<block>
- <name>Tag Debug</name>
- <key>blocks_tag_debug</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.tag_debug($type.size*$vlen, $name, $filter); self.$(id).set_display($display)</make>
- <callback>set_display($display)</callback>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Name</name>
- <key>name</key>
- <type>string</type>
- </param>
- <param>
- <name>Key Filter</name>
- <key>filter</key>
- <value>""</value>
- <type>string</type>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Display</name>
- <key>display</key>
- <value>True</value>
- <type>bool</type>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <check>$num_inputs &gt;= 1</check>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_inputs</nports>
- </sink>
-</block>
diff --git a/gr-blocks/grc/blocks_tag_gate.block.yml b/gr-blocks/grc/blocks_tag_gate.block.yml
new file mode 100644
index 0000000000..a05ee3c276
--- /dev/null
+++ b/gr-blocks/grc/blocks_tag_gate.block.yml
@@ -0,0 +1,50 @@
+id: blocks_tag_gate
+label: Tag Gate
+
+parameters:
+- id: type
+ label: Item Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: propagate_tags
+ label: Propagate Tags
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: single_key
+ label: Single Key
+ dtype: string
+ default: '""'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: |-
+ blocks.tag_gate(${type.size} * ${vlen}, ${propagate_tags})
+ self.${id}.set_single_key(${single_key})
+ callbacks:
+ - self.${id}.set_single_key(${single_key})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_tag_gate.xml b/gr-blocks/grc/blocks_tag_gate.xml
deleted file mode 100644
index 0cf6dc42ed..0000000000
--- a/gr-blocks/grc/blocks_tag_gate.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>Tag Gate</name>
- <key>blocks_tag_gate</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.tag_gate($type.size * $vlen, $propagate_tags)
-self.$(id).set_single_key($single_key)</make>
- <callback>self.$(id).set_single_key($single_key)</callback>
-
- <param>
- <name>Item Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Propagate Tags</name>
- <key>propagate_tags</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Single Key</name>
- <key>single_key</key>
- <value>""</value>
- <type>string</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_tag_object.block.yml b/gr-blocks/grc/blocks_tag_object.block.yml
new file mode 100644
index 0000000000..cf0f996470
--- /dev/null
+++ b/gr-blocks/grc/blocks_tag_object.block.yml
@@ -0,0 +1,44 @@
+id: variable_tag_object
+label: Tag Object
+
+parameters:
+- id: offset
+ label: Offset
+ dtype: int
+ default: '0'
+- id: key
+ label: Key
+ dtype: raw
+ default: pmt.intern("key")
+- id: value
+ label: Value
+ dtype: raw
+ default: pmt.intern("value")
+- id: src
+ label: Source ID
+ dtype: raw
+ default: pmt.intern("src")
+value: ${ value }
+
+templates:
+ imports: import pmt
+ var_make: self.${id} = ${id} = gr.tag_utils.python_to_tag((${offset}, ${key},
+ ${value}, ${src}))
+ callbacks:
+ - self.set_${id}(gr.tag_utils.python_to_tag((${offset}, ${key}, ${value}, ${src})))
+
+documentation: |-
+ This block creates a tag object. While tags are based on an
+ absolute offset, this is based on a relative offset that must be
+ appropriately translated by the block using it. For example, this
+ is used by the vector_source blocks, which will treat a 0 offset
+ in the tag as the first item in the stream when the vector starts
+ or repeats.
+
+ The tag objects are created using the python_to_tag Python
+ function to make it easy to generate a tag_t in Python. The call
+ looks like:
+
+ gr.tag_utils.python_to_tag(($offset, $key, $value, $src))
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_tag_object.xml b/gr-blocks/grc/blocks_tag_object.xml
deleted file mode 100644
index 7352d801a0..0000000000
--- a/gr-blocks/grc/blocks_tag_object.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Tag Object: creates a tag
-###################################################
- -->
-<block>
- <name>Tag Object</name>
- <key>variable_tag_object</key>
- <import>import pmt</import>
- <var_make>self.$(id) = $(id) = gr.tag_utils.python_to_tag(($offset, $key, $value, $src))</var_make>
- <make></make>
- <callback>self.set_$(id)(gr.tag_utils.python_to_tag(($offset, $key, $value, $src)))</callback>
- <param>
- <name>Offset</name>
- <key>offset</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Key</name>
- <key>key</key>
- <value>pmt.intern("key")</value>
- <type>raw</type>
- </param>
- <param>
- <name>Value</name>
- <key>value</key>
- <value>pmt.intern("value")</value>
- <type>raw</type>
- </param>
- <param>
- <name>Source ID</name>
- <key>src</key>
- <value>pmt.intern("src")</value>
- <type>raw</type>
- </param>
- <doc>
- This block creates a tag object. While tags are based on an
- absolute offset, this is based on a relative offset that must be
- appropriately translated by the block using it. For example, this
- is used by the vector_source blocks, which will treat a 0 offset
- in the tag as the first item in the stream when the vector starts
- or repeats.
-
- The tag objects are created using the python_to_tag Python
- function to make it easy to generate a tag_t in Python. The call
- looks like:
-
- gr.tag_utils.python_to_tag(($offset, $key, $value, $src))
- </doc>
-</block>
diff --git a/gr-blocks/grc/blocks_tag_share.block.yml b/gr-blocks/grc/blocks_tag_share.block.yml
new file mode 100644
index 0000000000..96096ef58c
--- /dev/null
+++ b/gr-blocks/grc/blocks_tag_share.block.yml
@@ -0,0 +1,48 @@
+id: blocks_tag_share
+label: Tag Share
+
+parameters:
+- id: io_type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: share_type
+ label: Share Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ io_type }
+ vlen: ${ vlen }
+- label: share
+ domain: stream
+ dtype: ${ share_type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ io_type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.tag_share(${io_type.size}, ${share_type.size}, ${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_tag_share.xml b/gr-blocks/grc/blocks_tag_share.xml
deleted file mode 100644
index 21827d0591..0000000000
--- a/gr-blocks/grc/blocks_tag_share.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>Tag Share</name>
- <key>blocks_tag_share</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.tag_share($io_type.size, $share_type.size, $vlen)</make>
-
- <param>
- <name>IO Type</name>
- <key>io_type</key>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Share Type</name>
- <key>share_type</key>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- <hide>part</hide>
- </param>
-
- <check>$vlen &gt; 0</check>
-
- <sink>
- <name>in</name>
- <type>$io_type</type>
- <vlen>$vlen</vlen>
- </sink>
- <sink>
- <name>share</name>
- <type>$share_type</type>
- <vlen>$vlen</vlen>
- </sink>
-
- <source>
- <name>out</name>
- <type>$io_type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_tagged_file_sink.block.yml b/gr-blocks/grc/blocks_tagged_file_sink.block.yml
new file mode 100644
index 0000000000..f70c78154b
--- /dev/null
+++ b/gr-blocks/grc/blocks_tagged_file_sink.block.yml
@@ -0,0 +1,35 @@
+id: blocks_tagged_file_sink
+label: Tagged File Sink
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: samp_rate
+ label: Sample Rate
+ dtype: int
+ default: samp_rate
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.tagged_file_sink(${type.size}*${vlen}, ${samp_rate})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_tagged_file_sink.xml b/gr-blocks/grc/blocks_tagged_file_sink.xml
deleted file mode 100644
index a849c48c9a..0000000000
--- a/gr-blocks/grc/blocks_tagged_file_sink.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Tagged File Sink
-###################################################
- -->
-<block>
- <name>Tagged File Sink</name>
- <key>blocks_tagged_file_sink</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.tagged_file_sink($type.size*$vlen, $samp_rate)</make>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
-</block>
diff --git a/gr-blocks/grc/blocks_tagged_stream_align.block.yml b/gr-blocks/grc/blocks_tagged_stream_align.block.yml
new file mode 100644
index 0000000000..cfc5a7717a
--- /dev/null
+++ b/gr-blocks/grc/blocks_tagged_stream_align.block.yml
@@ -0,0 +1,37 @@
+id: blocks_tagged_stream_align
+label: Tagged Stream Align
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: lengthtagname
+ label: Length tag names
+ dtype: string
+ default: packet_len
+- id: vlen
+ label: Vector Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.tagged_stream_align(${type.size}*${vlen}, ${lengthtagname})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_tagged_stream_align.xml b/gr-blocks/grc/blocks_tagged_stream_align.xml
deleted file mode 100644
index be0238d52b..0000000000
--- a/gr-blocks/grc/blocks_tagged_stream_align.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<block>
- <name>Tagged Stream Align</name>
- <key>blocks_tagged_stream_align</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.tagged_stream_align($type.size*$vlen, $lengthtagname)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Length tag names</name>
- <key>lengthtagname</key>
- <value>packet_len</value>
- <type>string</type>
- </param>
- <param>
- <name>Vector Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
-
diff --git a/gr-blocks/grc/blocks_tagged_stream_multiply_length.block.yml b/gr-blocks/grc/blocks_tagged_stream_multiply_length.block.yml
new file mode 100644
index 0000000000..90fbcf0c21
--- /dev/null
+++ b/gr-blocks/grc/blocks_tagged_stream_multiply_length.block.yml
@@ -0,0 +1,46 @@
+id: blocks_tagged_stream_multiply_length
+label: Tagged Stream Multiply Length Tag
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: lengthtagname
+ label: Length tag names
+ dtype: string
+- id: vlen
+ label: Vector Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: c
+ label: Length Scalar
+ dtype: real
+ default: '1.0'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+- domain: message
+ id: set_scalar
+ optional: true
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.tagged_stream_multiply_length(${type.size}*${vlen}, ${lengthtagname},
+ ${c})
+ callbacks:
+ - set_scalar(${c})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_tagged_stream_multiply_length.xml b/gr-blocks/grc/blocks_tagged_stream_multiply_length.xml
deleted file mode 100644
index f4abb92903..0000000000
--- a/gr-blocks/grc/blocks_tagged_stream_multiply_length.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<block>
- <name>Tagged Stream Multiply Length Tag</name>
- <key>blocks_tagged_stream_multiply_length</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.tagged_stream_multiply_length($type.size*$vlen, $lengthtagname, $c)</make>
- <callback>set_scalar($c)</callback>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Length tag names</name>
- <key>lengthtagname</key>
- <type>string</type>
- </param>
- <param>
- <name>Vector Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Length Scalar</name>
- <key>c</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <sink>
- <name>set_scalar</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
-
diff --git a/gr-blocks/grc/blocks_tagged_stream_mux.block.yml b/gr-blocks/grc/blocks_tagged_stream_mux.block.yml
new file mode 100644
index 0000000000..4807e95d2b
--- /dev/null
+++ b/gr-blocks/grc/blocks_tagged_stream_mux.block.yml
@@ -0,0 +1,46 @@
+id: blocks_tagged_stream_mux
+label: Tagged Stream Mux
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: ninputs
+ label: Number of inputs
+ dtype: int
+ hide: part
+- id: lengthtagname
+ label: Length tag names
+ dtype: string
+- id: vlen
+ label: Vector Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: tag_preserve_head_pos
+ label: 'Tags: Preserve head position on input'
+ dtype: int
+ default: '0'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ ninputs }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.tagged_stream_mux(${type.size}*${vlen}, ${lengthtagname}, ${tag_preserve_head_pos})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_tagged_stream_mux.xml b/gr-blocks/grc/blocks_tagged_stream_mux.xml
deleted file mode 100644
index 221a2ed7f9..0000000000
--- a/gr-blocks/grc/blocks_tagged_stream_mux.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<block>
- <name>Tagged Stream Mux</name>
- <key>blocks_tagged_stream_mux</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.tagged_stream_mux($type.size*$vlen, $lengthtagname, $tag_preserve_head_pos)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Number of inputs</name>
- <key>ninputs</key>
- <type>int</type>
- </param>
- <param>
- <name>Length tag names</name>
- <key>lengthtagname</key>
- <type>string</type>
- </param>
- <param>
- <name>Vector Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Tags: Preserve head position on input</name>
- <key>tag_preserve_head_pos</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$ninputs</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
-
diff --git a/gr-blocks/grc/blocks_tagged_stream_to_pdu.block.yml b/gr-blocks/grc/blocks_tagged_stream_to_pdu.block.yml
new file mode 100644
index 0000000000..e2292adb25
--- /dev/null
+++ b/gr-blocks/grc/blocks_tagged_stream_to_pdu.block.yml
@@ -0,0 +1,30 @@
+id: blocks_tagged_stream_to_pdu
+label: Tagged Stream to PDU
+
+parameters:
+- id: type
+ label: Item Type
+ dtype: enum
+ options: [byte, complex, float]
+ option_attributes:
+ tv: [blocks.byte_t, blocks.complex_t, blocks.float_t]
+ hide: part
+- id: tag
+ label: Length tag name
+ dtype: string
+ default: packet_len
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: message
+ id: pdus
+ optional: true
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.tagged_stream_to_pdu(${type.tv}, ${tag})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_tagged_stream_to_pdu.xml b/gr-blocks/grc/blocks_tagged_stream_to_pdu.xml
deleted file mode 100644
index ae8ad3b6c5..0000000000
--- a/gr-blocks/grc/blocks_tagged_stream_to_pdu.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Tagged Stream to PDU Message
-###################################################
- -->
-<block>
- <name>Tagged Stream to PDU</name>
- <key>blocks_tagged_stream_to_pdu</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.tagged_stream_to_pdu($type.tv, $tag)</make>
- <param>
- <name>Item Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>tv:blocks.byte_t</opt>
- </option>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>tv:blocks.complex_t</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>tv:blocks.float_t</opt>
- </option>
- </param>
- <param>
- <name>Length tag name</name>
- <key>tag</key>
- <value>packet_len</value>
- <type>string</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>pdus</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_tags_strobe.block.yml b/gr-blocks/grc/blocks_tags_strobe.block.yml
new file mode 100644
index 0000000000..344fb9bde8
--- /dev/null
+++ b/gr-blocks/grc/blocks_tags_strobe.block.yml
@@ -0,0 +1,49 @@
+id: blocks_tags_strobe
+label: Tags Strobe
+
+parameters:
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: value
+ label: Value (PMT)
+ dtype: raw
+ default: pmt.intern("TEST")
+- id: key
+ label: Key (PMT)
+ dtype: raw
+ default: pmt.intern("strobe")
+- id: nsamps
+ label: Num. Samples
+ dtype: int
+ default: '1000'
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: |-
+ from gnuradio import blocks
+ import pmt
+ make: blocks.tags_strobe(${type.size}*${vlen}, ${value}, ${nsamps}, ${key})
+ callbacks:
+ - set_value(${value})
+ - set_key(${key})
+ - set_nsamps(${nsamps})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_tags_strobe.xml b/gr-blocks/grc/blocks_tags_strobe.xml
deleted file mode 100644
index ed14929329..0000000000
--- a/gr-blocks/grc/blocks_tags_strobe.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Tags Strobe
-###################################################
- -->
-<block>
- <name>Tags Strobe</name>
- <key>blocks_tags_strobe</key>
- <import>from gnuradio import blocks</import>
- <import>import pmt</import>
- <make>blocks.tags_strobe($type.size*$vlen, $value, $nsamps, $key)</make>
- <callback>set_value($value)</callback>
- <callback>set_key($key)</callback>
- <callback>set_nsamps($nsamps)</callback>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Value (PMT)</name>
- <key>value</key>
- <value>pmt.intern("TEST")</value>
- <type>raw</type>
- </param>
- <param>
- <name>Key (PMT)</name>
- <key>key</key>
- <value>pmt.intern("strobe")</value>
- <type>raw</type>
- </param>
- <param>
- <name>Num. Samples</name>
- <key>nsamps</key>
- <value>1000</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_tcp_server_sink.block.yml b/gr-blocks/grc/blocks_tcp_server_sink.block.yml
new file mode 100644
index 0000000000..fc8eae056b
--- /dev/null
+++ b/gr-blocks/grc/blocks_tcp_server_sink.block.yml
@@ -0,0 +1,42 @@
+id: blocks_tcp_server_sink
+label: TCP Server Sink
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: ipaddr
+ label: Destination IP Address
+ dtype: string
+- id: port
+ label: Destination Port
+ dtype: int
+- id: noblock
+ label: Nonblocking Mode
+ dtype: enum
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.tcp_server_sink(${type.size}*${vlen}, ${ipaddr}, ${port}, ${noblock})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_tcp_server_sink.xml b/gr-blocks/grc/blocks_tcp_server_sink.xml
deleted file mode 100644
index 644027da65..0000000000
--- a/gr-blocks/grc/blocks_tcp_server_sink.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##TCP Server Sink
-###################################################
- -->
-<block>
- <name>TCP Server Sink</name>
- <key>blocks_tcp_server_sink</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.tcp_server_sink($type.size*$vlen, $ipaddr, $port, $noblock)</make>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Destination IP Address</name>
- <key>ipaddr</key>
- <type>string</type>
- </param>
- <param>
- <name>Destination Port</name>
- <key>port</key>
- <type>int</type>
- </param>
- <param>
- <name>Nonblocking Mode</name>
- <key>noblock</key>
- <type>enum</type>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
-</block>
diff --git a/gr-blocks/grc/blocks_test_tag_variable_rate_ff.block.yml b/gr-blocks/grc/blocks_test_tag_variable_rate_ff.block.yml
new file mode 100644
index 0000000000..1a873cc19c
--- /dev/null
+++ b/gr-blocks/grc/blocks_test_tag_variable_rate_ff.block.yml
@@ -0,0 +1,29 @@
+id: blocks_test_tag_variable_rate_ff
+label: Test Tag Variable Rate
+
+parameters:
+- id: once
+ label: Update Once
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+- id: step
+ label: Update Step
+ dtype: float
+ default: '0.001'
+
+inputs:
+- domain: stream
+ dtype: float
+ multiplicity: '1'
+
+outputs:
+- domain: stream
+ dtype: float
+ multiplicity: '1'
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.test_tag_variable_rate_ff(${once}, ${step})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_test_tag_variable_rate_ff.xml b/gr-blocks/grc/blocks_test_tag_variable_rate_ff.xml
deleted file mode 100644
index 2a6c4b52e8..0000000000
--- a/gr-blocks/grc/blocks_test_tag_variable_rate_ff.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Test tag variable rate
-###################################################
--->
-
-<block>
- <name>Test Tag Variable Rate</name>
- <key>blocks_test_tag_variable_rate_ff</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.test_tag_variable_rate_ff($once, $step)</make>
-
- <param>
- <name>Update Once</name>
- <key>once</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>True</name>
- <key>True</key>
- </option>
- <option>
- <name>False</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Update Step</name>
- <key>step</key>
- <value>0.001</value>
- <type>float</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>float</type>
- <nports>1</nports>
- </sink>
-
- <source>
- <name>out</name>
- <type>float</type>
- <nports>1</nports>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_threshold_ff.block.yml b/gr-blocks/grc/blocks_threshold_ff.block.yml
new file mode 100644
index 0000000000..52a6f10059
--- /dev/null
+++ b/gr-blocks/grc/blocks_threshold_ff.block.yml
@@ -0,0 +1,33 @@
+id: blocks_threshold_ff
+label: Threshold
+
+parameters:
+- id: low
+ label: Low
+ dtype: real
+ default: '-100'
+- id: high
+ label: High
+ dtype: real
+ default: '100'
+- id: init
+ label: Initial State
+ dtype: real
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.threshold_ff(${low}, ${high}, ${init})
+ callbacks:
+ - set_hi(${high})
+ - set_lo(${low})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_threshold_ff.xml b/gr-blocks/grc/blocks_threshold_ff.xml
deleted file mode 100644
index 0da4157fc8..0000000000
--- a/gr-blocks/grc/blocks_threshold_ff.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Threshold
-###################################################
- -->
-<block>
- <name>Threshold</name>
- <key>blocks_threshold_ff</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.threshold_ff($low, $high, $init)</make>
- <callback>set_hi($high)</callback>
- <callback>set_lo($low)</callback>
- <param>
- <name>Low</name>
- <key>low</key>
- <value>-100</value>
- <type>real</type>
- </param>
- <param>
- <name>High</name>
- <key>high</key>
- <value>100</value>
- <type>real</type>
- </param>
- <param>
- <name>Initial State</name>
- <key>init</key>
- <value>0</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_throttle.block.yml b/gr-blocks/grc/blocks_throttle.block.yml
new file mode 100644
index 0000000000..8b497b60c4
--- /dev/null
+++ b/gr-blocks/grc/blocks_throttle.block.yml
@@ -0,0 +1,48 @@
+id: blocks_throttle
+label: Throttle
+flags: throttle
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: samples_per_second
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: ignoretag
+ label: Ignore rx_rate tag
+ dtype: bool
+ default: 'True'
+ hide: ${ ('part' if str(ignoretag) == 'True' else 'none') }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.throttle(${type.size}*${vlen}, ${samples_per_second},${ignoretag})
+ callbacks:
+ - set_sample_rate(${samples_per_second})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_throttle.xml b/gr-blocks/grc/blocks_throttle.xml
deleted file mode 100644
index 26f4aa768b..0000000000
--- a/gr-blocks/grc/blocks_throttle.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Throttle
-###################################################
- -->
-<block>
- <name>Throttle</name>
- <key>blocks_throttle</key>
- <flags>throttle</flags>
- <import>from gnuradio import blocks</import>
- <make>blocks.throttle($type.size*$vlen, $samples_per_second,$ignoretag)</make>
- <callback>set_sample_rate($samples_per_second)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samples_per_second</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Ignore rx_rate tag</name>
- <key>ignoretag</key>
- <value>True</value>
- <type>bool</type>
- <hide>#if str($ignoretag()) == 'True' then 'part' else 'none'#</hide>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_transcendental.block.yml b/gr-blocks/grc/blocks_transcendental.block.yml
new file mode 100644
index 0000000000..768bc73018
--- /dev/null
+++ b/gr-blocks/grc/blocks_transcendental.block.yml
@@ -0,0 +1,30 @@
+id: blocks_transcendental
+label: Transcendental
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex_double, float]
+ option_labels: [Complex, Float]
+ option_attributes:
+ type: [complex, float]
+ hide: part
+- id: name
+ label: Function Name
+ dtype: string
+ default: cos
+
+inputs:
+- domain: stream
+ dtype: ${ type.type }
+
+outputs:
+- domain: stream
+ dtype: ${ type.type }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.transcendental(${name}, "$type")
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_transcendental.xml b/gr-blocks/grc/blocks_transcendental.xml
deleted file mode 100644
index a883a2eefc..0000000000
--- a/gr-blocks/grc/blocks_transcendental.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##transcendental functions
-###################################################
- -->
-<block>
- <name>Transcendental</name>
- <key>blocks_transcendental</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.transcendental($name, "$type")</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex_double</key>
- <opt>type:complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>type:float</opt>
- </option>
- </param>
- <param>
- <name>Function Name</name>
- <key>name</key>
- <value>cos</value>
- <type>string</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.type</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_tuntap_pdu.block.yml b/gr-blocks/grc/blocks_tuntap_pdu.block.yml
new file mode 100644
index 0000000000..0fd183cbfe
--- /dev/null
+++ b/gr-blocks/grc/blocks_tuntap_pdu.block.yml
@@ -0,0 +1,34 @@
+id: blocks_tuntap_pdu
+label: TUNTAP PDU
+
+parameters:
+- id: ifn
+ label: Interface Name
+ dtype: string
+ default: tap0
+- id: mtu
+ label: MTU
+ dtype: int
+ default: '10000'
+- id: istunflag
+ label: Flag
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: [TUN(IP Packet), TAP(Ethernet Frame)]
+
+inputs:
+- domain: message
+ id: pdus
+ optional: true
+
+outputs:
+- domain: message
+ id: pdus
+ optional: true
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.tuntap_pdu(${ifn}, ${mtu}, ${istunflag})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_tuntap_pdu.xml b/gr-blocks/grc/blocks_tuntap_pdu.xml
deleted file mode 100644
index 16e5871b93..0000000000
--- a/gr-blocks/grc/blocks_tuntap_pdu.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## TUNTAP PDU async message source/sink
-###################################################
- -->
-<block>
- <name>TUNTAP PDU</name>
- <key>blocks_tuntap_pdu</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.tuntap_pdu($ifn, $mtu, $istunflag)</make>
- <param>
- <name>Interface Name</name>
- <key>ifn</key>
- <value>tap0</value>
- <type>string</type>
- </param>
- <param>
- <name>MTU</name>
- <key>mtu</key>
- <value>10000</value>
- <type>int</type>
- </param>
- <param>
- <name>Flag</name>
- <key>istunflag</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>TUN(IP Packet)</name>
- <key>True</key>
- </option>
- <option>
- <name>TAP(Ethernet Frame)</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>pdus</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>pdus</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_uchar_to_float.block.yml b/gr-blocks/grc/blocks_uchar_to_float.block.yml
new file mode 100644
index 0000000000..984cbd3928
--- /dev/null
+++ b/gr-blocks/grc/blocks_uchar_to_float.block.yml
@@ -0,0 +1,16 @@
+id: blocks_uchar_to_float
+label: UChar To Float
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.uchar_to_float()
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_uchar_to_float.xml b/gr-blocks/grc/blocks_uchar_to_float.xml
deleted file mode 100644
index eb2b5505ef..0000000000
--- a/gr-blocks/grc/blocks_uchar_to_float.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Unsigned Char to Float:
-###################################################
- -->
-<block>
- <name>UChar To Float</name>
- <key>blocks_uchar_to_float</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.uchar_to_float()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_udp_sink.block.yml b/gr-blocks/grc/blocks_udp_sink.block.yml
new file mode 100644
index 0000000000..1ffa83c033
--- /dev/null
+++ b/gr-blocks/grc/blocks_udp_sink.block.yml
@@ -0,0 +1,45 @@
+id: blocks_udp_sink
+label: UDP Sink
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: ipaddr
+ label: Destination IP Address
+ dtype: string
+- id: port
+ label: Destination Port
+ dtype: int
+- id: psize
+ label: Payload Size
+ dtype: int
+ default: '1472'
+- id: eof
+ label: Send Null Pkt as EOF
+ dtype: bool
+ default: 'True'
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.udp_sink(${type.size}*${vlen}, ${ipaddr}, ${port}, ${psize}, ${eof})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_udp_sink.xml b/gr-blocks/grc/blocks_udp_sink.xml
deleted file mode 100644
index 0b67532c72..0000000000
--- a/gr-blocks/grc/blocks_udp_sink.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##UDP Sink
-###################################################
- -->
-<block>
- <name>UDP Sink</name>
- <key>blocks_udp_sink</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.udp_sink($type.size*$vlen, $ipaddr, $port, $psize, $eof)</make>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Destination IP Address</name>
- <key>ipaddr</key>
- <type>string</type>
- </param>
- <param>
- <name>Destination Port</name>
- <key>port</key>
- <type>int</type>
- </param>
- <param>
- <name>Payload Size</name>
- <key>psize</key>
- <value>1472</value>
- <type>int</type>
- </param>
- <param>
- <name>Send Null Pkt as EOF</name>
- <key>eof</key>
- <value>True</value>
- <type>bool</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
-</block>
diff --git a/gr-blocks/grc/blocks_udp_source.block.yml b/gr-blocks/grc/blocks_udp_source.block.yml
new file mode 100644
index 0000000000..1e15678158
--- /dev/null
+++ b/gr-blocks/grc/blocks_udp_source.block.yml
@@ -0,0 +1,48 @@
+id: blocks_udp_source
+label: UDP Source
+flags: throttle
+
+parameters:
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: ipaddr
+ label: IP Address
+ dtype: string
+ default: 127.0.0.1
+- id: port
+ label: Port
+ dtype: int
+ default: '1234'
+- id: psize
+ label: Payload Size
+ dtype: int
+ default: '1472'
+- id: eof
+ label: Null Pkt is EOF
+ dtype: bool
+ default: 'True'
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.udp_source(${type.size}*${vlen}, ${ipaddr}, ${port}, ${psize}, ${eof})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_udp_source.xml b/gr-blocks/grc/blocks_udp_source.xml
deleted file mode 100644
index c84816f785..0000000000
--- a/gr-blocks/grc/blocks_udp_source.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##UDP Source
-###################################################
- -->
-<block>
- <name>UDP Source</name>
- <key>blocks_udp_source</key>
- <flags>throttle</flags>
- <import>from gnuradio import blocks</import>
- <make>blocks.udp_source($type.size*$vlen, $ipaddr, $port, $psize, $eof)</make>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>IP Address</name>
- <key>ipaddr</key>
- <value>127.0.0.1</value>
- <type>string</type>
- </param>
- <param>
- <name>Port</name>
- <key>port</key>
- <value>1234</value>
- <type>int</type>
- </param>
- <param>
- <name>Payload Size</name>
- <key>psize</key>
- <value>1472</value>
- <type>int</type>
- </param>
- <param>
- <name>Null Pkt is EOF</name>
- <key>eof</key>
- <value>True</value>
- <type>bool</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_unpack_k_bits_bb.block.yml b/gr-blocks/grc/blocks_unpack_k_bits_bb.block.yml
new file mode 100644
index 0000000000..065fc45ebf
--- /dev/null
+++ b/gr-blocks/grc/blocks_unpack_k_bits_bb.block.yml
@@ -0,0 +1,21 @@
+id: blocks_unpack_k_bits_bb
+label: Unpack K Bits
+
+parameters:
+- id: k
+ label: K
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.unpack_k_bits_bb(${k})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_unpack_k_bits_bb.xml b/gr-blocks/grc/blocks_unpack_k_bits_bb.xml
deleted file mode 100644
index 90d7493af0..0000000000
--- a/gr-blocks/grc/blocks_unpack_k_bits_bb.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Unpack K Bits
-###################################################
- -->
-<block>
- <name>Unpack K Bits</name>
- <key>blocks_unpack_k_bits_bb</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.unpack_k_bits_bb($k)</make>
- <param>
- <name>K</name>
- <key>k</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_unpacked_to_packed_xx.block.yml b/gr-blocks/grc/blocks_unpacked_to_packed_xx.block.yml
new file mode 100644
index 0000000000..97c7af9e28
--- /dev/null
+++ b/gr-blocks/grc/blocks_unpacked_to_packed_xx.block.yml
@@ -0,0 +1,44 @@
+id: blocks_unpacked_to_packed_xx
+label: Unpacked to Packed
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [int, short, byte]
+ option_attributes:
+ fcn: [ii, ss, bb]
+ hide: part
+- id: bits_per_chunk
+ label: Bits per Chunk
+ dtype: int
+ default: '2'
+- id: endianness
+ label: Endianness
+ dtype: int
+ options: [gr.GR_MSB_FIRST, gr.GR_LSB_FIRST]
+ option_labels: [MSB, LSB]
+- id: num_ports
+ label: Num Ports
+ dtype: int
+ default: '1'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ multiplicity: ${ num_ports }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ multiplicity: ${ num_ports }
+
+asserts:
+- ${ num_ports > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.unpacked_to_packed_${type.fcn}(${bits_per_chunk}, ${endianness})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_unpacked_to_packed_xx.xml b/gr-blocks/grc/blocks_unpacked_to_packed_xx.xml
deleted file mode 100644
index d27dc9bfc4..0000000000
--- a/gr-blocks/grc/blocks_unpacked_to_packed_xx.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Unpacked to Packed
-###################################################
- -->
-<block>
- <name>Unpacked to Packed</name>
- <key>blocks_unpacked_to_packed_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.unpacked_to_packed_$(type.fcn)($bits_per_chunk, $endianness)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:bb</opt>
- </option>
- </param>
- <param>
- <name>Bits per Chunk</name>
- <key>bits_per_chunk</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Endianness</name>
- <key>endianness</key>
- <type>int</type>
- <option>
- <name>MSB</name>
- <key>gr.GR_MSB_FIRST</key>
- </option>
- <option>
- <name>LSB</name>
- <key>gr.GR_LSB_FIRST</key>
- </option>
- </param>
- <param>
- <name>Num Ports</name>
- <key>num_ports</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_ports &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <nports>$num_ports</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <nports>$num_ports</nports>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_vco_c.block.yml b/gr-blocks/grc/blocks_vco_c.block.yml
new file mode 100644
index 0000000000..b14b96bc54
--- /dev/null
+++ b/gr-blocks/grc/blocks_vco_c.block.yml
@@ -0,0 +1,27 @@
+id: blocks_vco_c
+label: VCO (complex)
+
+parameters:
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+- id: sensitivity
+ label: Sensitivity
+ dtype: real
+- id: amplitude
+ label: Amplitude
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.vco_c(${samp_rate}, ${sensitivity}, ${amplitude})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_vco_c.xml b/gr-blocks/grc/blocks_vco_c.xml
deleted file mode 100644
index f6246441b9..0000000000
--- a/gr-blocks/grc/blocks_vco_c.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##VCO
-###################################################
- -->
-<block>
- <name>VCO (complex)</name>
- <key>blocks_vco_c</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.vco_c($samp_rate, $sensitivity, $amplitude)</make>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <type>real</type>
- </param>
- <param>
- <name>Sensitivity</name>
- <key>sensitivity</key>
- <type>real</type>
- </param>
- <param>
- <name>Amplitude</name>
- <key>amplitude</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_vco_f.block.yml b/gr-blocks/grc/blocks_vco_f.block.yml
new file mode 100644
index 0000000000..79ade4d0af
--- /dev/null
+++ b/gr-blocks/grc/blocks_vco_f.block.yml
@@ -0,0 +1,27 @@
+id: blocks_vco_f
+label: VCO
+
+parameters:
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+- id: sensitivity
+ label: Sensitivity
+ dtype: real
+- id: amplitude
+ label: Amplitude
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.vco_f(${samp_rate}, ${sensitivity}, ${amplitude})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_vco_f.xml b/gr-blocks/grc/blocks_vco_f.xml
deleted file mode 100644
index 77a3ba0bd4..0000000000
--- a/gr-blocks/grc/blocks_vco_f.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##VCO
-###################################################
- -->
-<block>
- <name>VCO</name>
- <key>blocks_vco_f</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.vco_f($samp_rate, $sensitivity, $amplitude)</make>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <type>real</type>
- </param>
- <param>
- <name>Sensitivity</name>
- <key>sensitivity</key>
- <type>real</type>
- </param>
- <param>
- <name>Amplitude</name>
- <key>amplitude</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_vector_insert_x.block.yml b/gr-blocks/grc/blocks_vector_insert_x.block.yml
new file mode 100644
index 0000000000..d3b833865d
--- /dev/null
+++ b/gr-blocks/grc/blocks_vector_insert_x.block.yml
@@ -0,0 +1,44 @@
+id: blocks_vector_insert_x
+label: Vector Insert
+
+parameters:
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [byte, complex, float, int, short]
+ option_attributes:
+ fcn: [b, c, f, i, s]
+ vec_type: [int_vector, complex_vector, real_vector, int_vector, int_vector]
+ hide: part
+- id: vector
+ label: Vector
+ dtype: ${ type.vec_type }
+ default: 0, 0, 0
+- id: period
+ label: Periodicity
+ dtype: int
+ default: '100'
+- id: offset
+ label: Offset
+ dtype: int
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.vector_insert_${type.fcn}(${vector}, ${period}, ${offset})
+
+documentation: |-
+ Periodicity, the length of the periodicity at which the vector should be inserted at the output.
+ (i.e. one vector for every N output items)
+
+ Offset sepcifies where in the cycle period we should begin at.
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_vector_insert_x.xml b/gr-blocks/grc/blocks_vector_insert_x.xml
deleted file mode 100644
index 2bc7ada2e6..0000000000
--- a/gr-blocks/grc/blocks_vector_insert_x.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Vector Source
-###################################################
- -->
-<block>
- <name>Vector Insert</name>
- <key>blocks_vector_insert_x</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.vector_insert_$(type.fcn)($vector, $period, $offset)</make>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:b</opt>
- <opt>vec_type:int_vector</opt>
- </option>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- <opt>vec_type:complex_vector</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- <opt>vec_type:real_vector</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- <opt>vec_type:int_vector</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- <opt>vec_type:int_vector</opt>
- </option>
- </param>
- <param>
- <name>Vector</name>
- <key>vector</key>
- <value>0, 0, 0</value>
- <type>$type.vec_type</type>
- </param>
- <param>
- <name>Periodicity</name>
- <key>period</key>
- <value>100</value>
- <type>int</type>
- </param>
- <param>
- <name>Offset</name>
- <key>offset</key>
- <value>0</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-
- <doc>
- Periodicity, the length of the periodicity at which the vector should be inserted at the output.
- (i.e. one vector for every N output items)
-
- Offset sepcifies where in the cycle period we should begin at.
- </doc>
-</block>
diff --git a/gr-blocks/grc/blocks_vector_sink_x.block.yml b/gr-blocks/grc/blocks_vector_sink_x.block.yml
new file mode 100644
index 0000000000..9be64eae2d
--- /dev/null
+++ b/gr-blocks/grc/blocks_vector_sink_x.block.yml
@@ -0,0 +1,30 @@
+id: blocks_vector_sink_x
+label: Vector Sink
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ fcn: [c, f, i, s, b]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.vector_sink_${type.fcn}(${vlen})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_vector_sink_x.xml b/gr-blocks/grc/blocks_vector_sink_x.xml
deleted file mode 100644
index 7f51731975..0000000000
--- a/gr-blocks/grc/blocks_vector_sink_x.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Vector sink
-###################################################
- -->
-<block>
- <name>Vector Sink</name>
- <key>blocks_vector_sink_x</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.vector_sink_$(type.fcn)($vlen)</make>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:b</opt>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
-</block>
diff --git a/gr-blocks/grc/blocks_vector_source_x.block.yml b/gr-blocks/grc/blocks_vector_source_x.block.yml
new file mode 100644
index 0000000000..5cdb6d6d51
--- /dev/null
+++ b/gr-blocks/grc/blocks_vector_source_x.block.yml
@@ -0,0 +1,47 @@
+id: blocks_vector_source_x
+label: Vector Source
+
+parameters:
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ fcn: [c, f, i, s, b]
+ vec_type: [complex_vector, real_vector, int_vector, int_vector, int_vector]
+ hide: part
+- id: vector
+ label: Vector
+ dtype: raw
+ default: (0, 0, 0)
+- id: tags
+ label: Tags
+ dtype: raw
+ default: '[]'
+- id: repeat
+ label: Repeat
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.vector_source_${type.fcn}(${vector}, ${repeat}, ${vlen}, ${tags})
+ callbacks:
+ - set_data(${vector}, ${tags})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_vector_source_x.xml b/gr-blocks/grc/blocks_vector_source_x.xml
deleted file mode 100644
index 0417baa34a..0000000000
--- a/gr-blocks/grc/blocks_vector_source_x.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Vector Source
-###################################################
- -->
-<block>
- <name>Vector Source</name>
- <key>blocks_vector_source_x</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.vector_source_$(type.fcn)($vector, $repeat, $vlen, $tags)</make>
- <callback>set_data($vector, $tags)</callback>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- <opt>vec_type:complex_vector</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- <opt>vec_type:real_vector</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- <opt>vec_type:int_vector</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- <opt>vec_type:int_vector</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:b</opt>
- <opt>vec_type:int_vector</opt>
- </option>
- </param>
- <param>
- <name>Vector</name>
- <key>vector</key>
- <value>(0, 0, 0)</value>
- <type>raw</type>
- </param>
- <param>
- <name>Tags</name>
- <key>tags</key>
- <value>[]</value>
- <type>raw</type>
- </param>
- <param>
- <name>Repeat</name>
- <key>repeat</key>
- <value>True</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_vector_to_stream.block.yml b/gr-blocks/grc/blocks_vector_to_stream.block.yml
new file mode 100644
index 0000000000..77b42ab68d
--- /dev/null
+++ b/gr-blocks/grc/blocks_vector_to_stream.block.yml
@@ -0,0 +1,42 @@
+id: blocks_vector_to_stream
+label: Vector to Stream
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: num_items
+ label: Num Items
+ dtype: int
+ default: '2'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen*num_items }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ num_items > 0 }
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.vector_to_stream(${type.size}*${vlen}, ${num_items})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_vector_to_stream.xml b/gr-blocks/grc/blocks_vector_to_stream.xml
deleted file mode 100644
index a4a77bef88..0000000000
--- a/gr-blocks/grc/blocks_vector_to_stream.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Vector to Stream
-###################################################
- -->
-<block>
- <name>Vector to Stream</name>
- <key>blocks_vector_to_stream</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.vector_to_stream($type.size*$vlen, $num_items)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Num Items</name>
- <key>num_items</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_items &gt; 0</check>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen*$num_items</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_vector_to_streams.block.yml b/gr-blocks/grc/blocks_vector_to_streams.block.yml
new file mode 100644
index 0000000000..e64df38534
--- /dev/null
+++ b/gr-blocks/grc/blocks_vector_to_streams.block.yml
@@ -0,0 +1,43 @@
+id: blocks_vector_to_streams
+label: Vector to Streams
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: num_streams
+ label: Num Streams
+ dtype: int
+ default: '2'
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen*num_streams }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_streams }
+
+asserts:
+- ${ num_streams > 0 }
+- ${ vlen >= 1 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.vector_to_streams(${type.size}*${vlen}, ${num_streams})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_vector_to_streams.xml b/gr-blocks/grc/blocks_vector_to_streams.xml
deleted file mode 100644
index 6a246b98df..0000000000
--- a/gr-blocks/grc/blocks_vector_to_streams.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Vector to Streams
-###################################################
- -->
-<block>
- <name>Vector to Streams</name>
- <key>blocks_vector_to_streams</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.vector_to_streams($type.size*$vlen, $num_streams)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Num Streams</name>
- <key>num_streams</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_streams &gt; 0</check>
- <check>$vlen &gt;= 1</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen*$num_streams</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_streams</nports>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_wavfile_sink.block.yml b/gr-blocks/grc/blocks_wavfile_sink.block.yml
new file mode 100644
index 0000000000..6bce90d0ec
--- /dev/null
+++ b/gr-blocks/grc/blocks_wavfile_sink.block.yml
@@ -0,0 +1,36 @@
+id: blocks_wavfile_sink
+label: Wav File Sink
+
+parameters:
+- id: file
+ label: File
+ dtype: file_save
+- id: nchan
+ label: N Channels
+ dtype: int
+ default: '1'
+ hide: part
+- id: samp_rate
+ label: Sample Rate
+ dtype: int
+ default: samp_rate
+- id: bits_per_sample
+ label: Bits per Sample
+ dtype: int
+ default: '8'
+
+inputs:
+- domain: stream
+ dtype: float
+ multiplicity: ${ nchan }
+
+asserts:
+- ${ 1 <= nchan }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.wavfile_sink(${file}, ${nchan}, ${samp_rate}, ${bits_per_sample})
+ callbacks:
+ - open(${file})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_wavfile_sink.xml b/gr-blocks/grc/blocks_wavfile_sink.xml
deleted file mode 100644
index 8e81d8d202..0000000000
--- a/gr-blocks/grc/blocks_wavfile_sink.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Wav File Sink
-###################################################
- -->
-<block>
- <name>Wav File Sink</name>
- <key>blocks_wavfile_sink</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.wavfile_sink($file, $nchan, $samp_rate, $bits_per_sample)</make>
- <callback>open($file)</callback>
- <param>
- <name>File</name>
- <key>file</key>
- <value></value>
- <type>file_save</type>
- </param>
- <param>
- <name>N Channels</name>
- <key>nchan</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>int</type>
- </param>
- <param>
- <name>Bits per Sample</name>
- <key>bits_per_sample</key>
- <value>8</value>
- <type>int</type>
- </param>
- <check>1 &lt;= $nchan</check>
- <sink>
- <name>in</name>
- <type>float</type>
- <nports>$nchan</nports>
- </sink>
-</block>
diff --git a/gr-blocks/grc/blocks_wavfile_source.block.yml b/gr-blocks/grc/blocks_wavfile_source.block.yml
new file mode 100644
index 0000000000..6a84ebbb83
--- /dev/null
+++ b/gr-blocks/grc/blocks_wavfile_source.block.yml
@@ -0,0 +1,32 @@
+id: blocks_wavfile_source
+label: Wav File Source
+
+parameters:
+- id: file
+ label: File
+ dtype: file_open
+- id: repeat
+ label: Repeat
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: nchan
+ label: N Channels
+ dtype: int
+ default: '1'
+ hide: part
+
+outputs:
+- domain: stream
+ dtype: float
+ multiplicity: ${ nchan }
+
+asserts:
+- ${ 1 <= nchan }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.wavfile_source(${file}, ${repeat})
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_wavfile_source.xml b/gr-blocks/grc/blocks_wavfile_source.xml
deleted file mode 100644
index deb48472a4..0000000000
--- a/gr-blocks/grc/blocks_wavfile_source.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Wav File Source
-###################################################
- -->
-<block>
- <name>Wav File Source</name>
- <key>blocks_wavfile_source</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.wavfile_source($file, $repeat)</make>
- <param>
- <name>File</name>
- <key>file</key>
- <value></value>
- <type>file_open</type>
- </param>
- <param>
- <name>Repeat</name>
- <key>repeat</key>
- <value>True</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>N Channels</name>
- <key>nchan</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>1 &lt;= $nchan</check>
- <source>
- <name>out</name>
- <type>float</type>
- <nports>$nchan</nports>
- </source>
-</block>
diff --git a/gr-blocks/grc/blocks_xor_xx.block.yml b/gr-blocks/grc/blocks_xor_xx.block.yml
new file mode 100644
index 0000000000..493afef0c2
--- /dev/null
+++ b/gr-blocks/grc/blocks_xor_xx.block.yml
@@ -0,0 +1,34 @@
+id: blocks_xor_xx
+label: Xor
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [int, short, byte]
+ option_attributes:
+ fcn: [ii, ss, bb]
+ hide: part
+- id: num_inputs
+ label: Num Inputs
+ dtype: int
+ default: '2'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ multiplicity: ${ num_inputs }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+asserts:
+- ${ num_inputs >= 2 }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.xor_${type.fcn}()
+
+file_format: 1
diff --git a/gr-blocks/grc/blocks_xor_xx.xml b/gr-blocks/grc/blocks_xor_xx.xml
deleted file mode 100644
index 87cb8864ca..0000000000
--- a/gr-blocks/grc/blocks_xor_xx.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Logical Xor Block
-###################################################
- -->
-<block>
- <name>Xor</name>
- <key>blocks_xor_xx</key>
- <import>from gnuradio import blocks</import>
- <make>blocks.xor_$(type.fcn)()</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:bb</opt>
- </option>
- </param>
- <param>
- <name>Num Inputs</name>
- <key>num_inputs</key>
- <value>2</value>
- <type>int</type>
- </param>
- <check>$num_inputs &gt;= 2</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <nports>$num_inputs</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-blocks/grc/xmlrpc_client.block.yml b/gr-blocks/grc/xmlrpc_client.block.yml
new file mode 100644
index 0000000000..fd9057b1b8
--- /dev/null
+++ b/gr-blocks/grc/xmlrpc_client.block.yml
@@ -0,0 +1,30 @@
+id: xmlrpc_client
+label: XMLRPC Client
+
+parameters:
+- id: addr
+ label: Address
+ dtype: string
+ default: localhost
+- id: port
+ label: Port
+ dtype: int
+ default: '8080'
+- id: callback
+ label: Callback
+ dtype: string
+ default: set_
+- id: variable
+ label: Variable
+ dtype: raw
+
+templates:
+ imports: import xmlrpclib
+ make: xmlrpclib.Server('http://$(addr):$(port)')
+ callbacks:
+ - ${callback}(${variable})
+
+documentation: |-
+ This block will create an XMLRPC client. The client will execute the callback on the server when the variable is changed. The callback should be a the name of a function registered on the server. The variable should be an expression containing a the name of a variable in flow graph.
+
+file_format: 1
diff --git a/gr-blocks/grc/xmlrpc_client.xml b/gr-blocks/grc/xmlrpc_client.xml
deleted file mode 100644
index dc4d154d14..0000000000
--- a/gr-blocks/grc/xmlrpc_client.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Simple XMLRPC Client
-###################################################
- -->
-<block>
- <name>XMLRPC Client</name>
- <key>xmlrpc_client</key>
- <import>import xmlrpclib</import>
- <make>xmlrpclib.Server('http://$(addr()):$(port)')</make>
- <callback>$(callback())($variable)</callback>
- <param>
- <name>Address</name>
- <key>addr</key>
- <value>localhost</value>
- <type>string</type>
- </param>
- <param>
- <name>Port</name>
- <key>port</key>
- <value>8080</value>
- <type>int</type>
- </param>
- <param>
- <name>Callback</name>
- <key>callback</key>
- <value>set_</value>
- <type>string</type>
- </param>
- <param>
- <name>Variable</name>
- <key>variable</key>
- <type>raw</type>
- </param>
- <doc>
-This block will create an XMLRPC client. \
-The client will execute the callback on the server when the variable is changed. \
-The callback should be a the name of a function registered on the server. \
-The variable should be an expression containing a the name of a variable in flow graph.
- </doc>
-</block>
diff --git a/gr-blocks/grc/xmlrpc_server.block.yml b/gr-blocks/grc/xmlrpc_server.block.yml
new file mode 100644
index 0000000000..fb33fa79a8
--- /dev/null
+++ b/gr-blocks/grc/xmlrpc_server.block.yml
@@ -0,0 +1,34 @@
+id: xmlrpc_server
+label: XMLRPC Server
+
+parameters:
+- id: addr
+ label: Address
+ dtype: string
+ default: localhost
+- id: port
+ label: Port
+ dtype: int
+ default: '8080'
+
+templates:
+ imports: |-
+ import SimpleXMLRPCServer
+ import threading
+ make: |-
+ SimpleXMLRPCServer.SimpleXMLRPCServer((${addr}, ${port}), allow_none=True)
+ self.${id}.register_instance(self)
+ self.${id}_thread = threading.Thread(target=self.${id}.serve_forever)
+ self.${id}_thread.daemon = True
+ self.${id}_thread.start()
+
+documentation: |-
+ This block will start an XMLRPC server. The server provides access to the run, start, stop, wait functions of the flow graph. The server also provides access to the variable callbacks in the flow graph. Ex: If the variable is called freq, the function provided by the server will be called set_freq(new_freq).
+
+ Example client in python:
+
+ import xmlrpclib
+ s = xmlrpclib.Server('http://localhost:8080')
+ s.set_freq(5000)
+
+file_format: 1
diff --git a/gr-blocks/grc/xmlrpc_server.xml b/gr-blocks/grc/xmlrpc_server.xml
deleted file mode 100644
index 602d444161..0000000000
--- a/gr-blocks/grc/xmlrpc_server.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Simple XMLRPC Server
-###################################################
- -->
-<block>
- <name>XMLRPC Server</name>
- <key>xmlrpc_server</key>
- <import>import SimpleXMLRPCServer</import>
- <import>import threading</import>
- <make>SimpleXMLRPCServer.SimpleXMLRPCServer(($addr, $port), allow_none=True)
-self.$(id).register_instance(self)
-self.$(id)_thread = threading.Thread(target=self.$(id).serve_forever)
-self.$(id)_thread.daemon = True
-self.$(id)_thread.start()</make>
- <param>
- <name>Address</name>
- <key>addr</key>
- <value>localhost</value>
- <type>string</type>
- </param>
- <param>
- <name>Port</name>
- <key>port</key>
- <value>8080</value>
- <type>int</type>
- </param>
- <doc>
-This block will start an XMLRPC server. \
-The server provides access to the run, start, stop, wait functions of the flow graph. \
-The server also provides access to the variable callbacks in the flow graph. \
-Ex: If the variable is called freq, the function provided by the server will be called set_freq(new_freq).
-
-Example client in python:
-
-import xmlrpclib
-s = xmlrpclib.Server('http://localhost:8080')
-s.set_freq(5000)
- </doc>
-</block>
diff --git a/gr-channels/grc/CMakeLists.txt b/gr-channels/grc/CMakeLists.txt
index c85170b4ea..a268d69380 100644
--- a/gr-channels/grc/CMakeLists.txt
+++ b/gr-channels/grc/CMakeLists.txt
@@ -17,7 +17,7 @@
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
-file(GLOB xml_files "*.xml")
-install(FILES ${xml_files}
+file(GLOB yml_files "*.yml")
+install(FILES ${yml_files}
DESTINATION ${GRC_BLOCKS_DIR}
)
diff --git a/gr-channels/grc/channels.tree.yml b/gr-channels/grc/channels.tree.yml
new file mode 100644
index 0000000000..588246defc
--- /dev/null
+++ b/gr-channels/grc/channels.tree.yml
@@ -0,0 +1,20 @@
+'[Core]':
+- Channel Models:
+ - channels_channel_model
+ - channels_channel_model2
+ - channels_conj_fs_iqcorr
+ - channels_fading_model
+ - channels_dynamic_channel_model
+ - channels_selective_fading_model
+ - channels_selective_fading_model2
+- Impairment Models:
+ - channels_impairments
+ - channels_quantizer
+ - channels_phase_noise_gen
+ - channels_iqbal_gen
+ - channels_distortion_2_gen
+ - channels_distortion_3_gen
+ - channels_amp_bal
+ - channels_phase_bal
+ - channels_cfo_model
+ - channels_sro_model
diff --git a/gr-channels/grc/channels_amp_bal.block.yml b/gr-channels/grc/channels_amp_bal.block.yml
new file mode 100644
index 0000000000..6cefa2b581
--- /dev/null
+++ b/gr-channels/grc/channels_amp_bal.block.yml
@@ -0,0 +1,24 @@
+id: channels_amp_bal
+label: Amplitude Balance
+
+parameters:
+- id: alpha
+ label: Alpha
+ dtype: float
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import channels
+ make: channels.amp_bal(${alpha})
+ callbacks:
+ - set_alpha(${alpha})
+
+file_format: 1
diff --git a/gr-channels/grc/channels_amp_bal.xml b/gr-channels/grc/channels_amp_bal.xml
deleted file mode 100644
index 7e0738ec98..0000000000
--- a/gr-channels/grc/channels_amp_bal.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Amplitude balance
-###################################################
- -->
-<block>
- <name>Amplitude Balance</name>
- <key>channels_amp_bal</key>
- <import>from gnuradio import channels</import>
- <make>channels.amp_bal($alpha)</make>
- <callback>set_alpha($alpha)</callback>
- <param>
- <name>Alpha</name>
- <key>alpha</key>
- <value>0</value>
- <type>float</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-channels/grc/channels_block_tree.xml b/gr-channels/grc/channels_block_tree.xml
deleted file mode 100644
index 80aabaf478..0000000000
--- a/gr-channels/grc/channels_block_tree.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2012 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##Block Tree for GR Channel Model blocks.
-###################################################
- -->
-<cat>
- <name>[Core]</name>
- <cat>
- <name>Channel Models</name>
- <block>channels_channel_model</block>
- <block>channels_channel_model2</block>
- <block>channels_conj_fs_iqcorr</block>
- <block>channels_fading_model</block>
- <block>channels_dynamic_channel_model</block>
- <block>channels_selective_fading_model</block>
- <block>channels_selective_fading_model2</block>
- </cat>
- <cat>
- <name>Impairment Models</name>
- <block>channels_impairments</block>
- <block>channels_quantizer</block>
- <block>channels_phase_noise_gen</block>
- <block>channels_iqbal_gen</block>
- <block>channels_distortion_2_gen</block>
- <block>channels_distortion_3_gen</block>
- <block>channels_amp_bal</block>
- <block>channels_phase_bal</block>
- <block>channels_cfo_model</block>
- <block>channels_sro_model</block>
- </cat>
-</cat>
-
diff --git a/gr-channels/grc/channels_cfo_model.block.yml b/gr-channels/grc/channels_cfo_model.block.yml
new file mode 100644
index 0000000000..daa4eb7032
--- /dev/null
+++ b/gr-channels/grc/channels_cfo_model.block.yml
@@ -0,0 +1,44 @@
+id: channels_cfo_model
+label: CFO Model
+
+parameters:
+- id: srate
+ label: Sample Rate Hz
+ dtype: real
+ default: samp_rate
+- id: stdev
+ label: CFO Standard Deviation Hz per sample
+ dtype: real
+ default: '0.01'
+- id: maxdev
+ label: Max CFO Bound Hz
+ dtype: real
+ default: 1e3
+- id: seed
+ label: Seed
+ dtype: int
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import channels
+ make: |-
+ channels.cfo_model(
+ ${srate},
+ ${stdev},
+ ${maxdev},
+ ${seed}
+ )
+ callbacks:
+ - set_std_dev(${stdev})
+ - set_max_dev(${maxdev})
+ - set_samp_rate(${srate})
+
+file_format: 1
diff --git a/gr-channels/grc/channels_cfo_model.xml b/gr-channels/grc/channels_cfo_model.xml
deleted file mode 100644
index 7d44f7fe87..0000000000
--- a/gr-channels/grc/channels_cfo_model.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##CFO Model
-###################################################
- -->
-<block>
- <name>CFO Model</name>
- <key>channels_cfo_model</key>
- <import>from gnuradio import channels</import>
- <make>channels.cfo_model(
- $srate,
- $stdev,
- $maxdev,
- $seed
-)</make>
- <callback>set_std_dev($stdev)</callback>
- <callback>set_max_dev($maxdev)</callback>
- <callback>set_samp_rate($srate)</callback>
- <param>
- <name>Sample Rate Hz</name>
- <key>srate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>CFO Standard Deviation Hz per sample</name>
- <key>stdev</key>
- <value>0.01</value>
- <type>real</type>
- </param>
- <param>
- <name>Max CFO Bound Hz</name>
- <key>maxdev</key>
- <value>1e3</value>
- <type>real</type>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-channels/grc/channels_channel_model.block.yml b/gr-channels/grc/channels_channel_model.block.yml
new file mode 100644
index 0000000000..d2e166924e
--- /dev/null
+++ b/gr-channels/grc/channels_channel_model.block.yml
@@ -0,0 +1,56 @@
+id: channels_channel_model
+label: Channel Model
+
+parameters:
+- id: noise_voltage
+ label: Noise Voltage
+ dtype: real
+ default: '0.0'
+- id: freq_offset
+ label: Frequency Offset
+ dtype: real
+ default: '0.0'
+- id: epsilon
+ label: Epsilon
+ dtype: real
+ default: '1.0'
+- id: taps
+ label: Taps
+ dtype: complex_vector
+ default: 1.0 + 1.0j
+- id: seed
+ label: Seed
+ dtype: int
+ default: '0'
+- id: block_tags
+ label: Block Tag Propagation
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ option_attributes:
+ hide_block: ['', part]
+ hide: ${ block_tags.hide_block }
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: |-
+ from gnuradio import channels
+ from gnuradio.filter import firdes
+ make: "channels.channel_model(\n\tnoise_voltage=${noise_voltage},\n\tfrequency_offset=${freq_offset},\n\
+ \tepsilon=${epsilon},\n\ttaps=${taps},\n\tnoise_seed=${seed},\n\tblock_tags=${block_tags}\n\
+ )"
+ callbacks:
+ - set_noise_voltage(${noise_voltage})
+ - set_frequency_offset(${freq_offset})
+ - set_taps(${taps})
+ - set_timing_offset(${epsilon})
+
+file_format: 1
diff --git a/gr-channels/grc/channels_channel_model.xml b/gr-channels/grc/channels_channel_model.xml
deleted file mode 100644
index 909301de94..0000000000
--- a/gr-channels/grc/channels_channel_model.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Channel Model
-###################################################
- -->
-<block>
- <name>Channel Model</name>
- <key>channels_channel_model</key>
- <import>from gnuradio import channels</import>
- <import>from gnuradio.filter import firdes</import>
- <make>channels.channel_model(
- noise_voltage=$noise_voltage,
- frequency_offset=$freq_offset,
- epsilon=$epsilon,
- taps=$taps,
- noise_seed=$seed,
- block_tags=$block_tags
-)</make>
- <callback>set_noise_voltage($noise_voltage)</callback>
- <callback>set_frequency_offset($freq_offset)</callback>
- <callback>set_taps($taps)</callback>
- <callback>set_timing_offset($epsilon)</callback>
- <param>
- <name>Noise Voltage</name>
- <key>noise_voltage</key>
- <value>0.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Frequency Offset</name>
- <key>freq_offset</key>
- <value>0.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Epsilon</name>
- <key>epsilon</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <value>1.0 + 1.0j</value>
- <type>complex_vector</type>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Block Tag Propagation</name>
- <key>block_tags</key>
- <value>False</value>
- <type>enum</type>
- <hide>$block_tags.hide_block</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- <opt>hide_block:</opt>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- <opt>hide_block:part</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-channels/grc/channels_channel_model2.block.yml b/gr-channels/grc/channels_channel_model2.block.yml
new file mode 100644
index 0000000000..f42a77c8dd
--- /dev/null
+++ b/gr-channels/grc/channels_channel_model2.block.yml
@@ -0,0 +1,56 @@
+id: channels_channel_model2
+label: Channel Model 2
+
+parameters:
+- id: noise_voltage
+ label: Noise Voltage
+ dtype: real
+ default: '0.0'
+- id: epsilon
+ label: Time Offset
+ dtype: real
+ default: '1.0'
+- id: taps
+ label: Taps
+ dtype: complex_vector
+ default: 1.0 + 1.0j
+- id: seed
+ label: Seed
+ dtype: int
+ default: '0'
+- id: block_tags
+ label: Block Tag Propagation
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ option_attributes:
+ hide_block: ['', part]
+ hide: ${ block_tags.hide_block }
+
+inputs:
+- domain: stream
+ dtype: complex
+- label: freq
+ domain: stream
+ dtype: float
+- label: time
+ domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: |-
+ from gnuradio import channels
+ from gnuradio.filter import firdes
+ make: "channels.channel_model2(\n\tnoise_voltage=${noise_voltage},\n\tepsilon=${epsilon},\n\
+ \ttaps=${taps},\n\tnoise_seed=${seed},\n\tblock_tags=${block_tags}\n)"
+ callbacks:
+ - set_noise_voltage(${noise_voltage})
+ - set_taps(${taps})
+ - set_timing_offset(${epsilon})
+
+file_format: 1
diff --git a/gr-channels/grc/channels_channel_model2.xml b/gr-channels/grc/channels_channel_model2.xml
deleted file mode 100644
index 85355a1029..0000000000
--- a/gr-channels/grc/channels_channel_model2.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Channel Model
-###################################################
- -->
-<block>
- <name>Channel Model 2</name>
- <key>channels_channel_model2</key>
- <import>from gnuradio import channels</import>
- <import>from gnuradio.filter import firdes</import>
- <make>channels.channel_model2(
- noise_voltage=$noise_voltage,
- epsilon=$epsilon,
- taps=$taps,
- noise_seed=$seed,
- block_tags=$block_tags
-)</make>
- <callback>set_noise_voltage($noise_voltage)</callback>
- <callback>set_taps($taps)</callback>
- <callback>set_timing_offset($epsilon)</callback>
- <param>
- <name>Noise Voltage</name>
- <key>noise_voltage</key>
- <value>0.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Time Offset</name>
- <key>epsilon</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <value>1.0 + 1.0j</value>
- <type>complex_vector</type>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Block Tag Propagation</name>
- <key>block_tags</key>
- <value>False</value>
- <type>enum</type>
- <hide>$block_tags.hide_block</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- <opt>hide_block:</opt>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- <opt>hide_block:part</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <sink>
- <name>freq</name>
- <type>float</type>
- </sink>
- <sink>
- <name>time</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-channels/grc/channels_conj_fs_iqcorr.block.yml b/gr-channels/grc/channels_conj_fs_iqcorr.block.yml
new file mode 100644
index 0000000000..66f9e1d3a5
--- /dev/null
+++ b/gr-channels/grc/channels_conj_fs_iqcorr.block.yml
@@ -0,0 +1,29 @@
+id: channels_conj_fs_iqcorr
+label: Freq. Selective IQ Correction
+
+parameters:
+- id: delay
+ label: Delay
+ dtype: int
+ default: '0'
+- id: taps
+ label: Taps
+ dtype: complex_vector
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import channels
+ make: channels.conj_fs_iqcorr(${delay}, ${taps})
+ callbacks:
+ - set_delay(${delay})
+ - set_taps(${taps})
+
+file_format: 1
diff --git a/gr-channels/grc/channels_conj_fs_iqcorr.xml b/gr-channels/grc/channels_conj_fs_iqcorr.xml
deleted file mode 100644
index 354f1a2030..0000000000
--- a/gr-channels/grc/channels_conj_fs_iqcorr.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Freq. Selective IQ Correction
-###################################################
- -->
-<block>
- <name>Freq. Selective IQ Correction</name>
- <key>channels_conj_fs_iqcorr</key>
- <import>from gnuradio import channels</import>
- <make>channels.conj_fs_iqcorr($delay, $taps)</make>
- <callback>set_delay($delay)</callback>
- <callback>set_taps($taps)</callback>
- <param>
- <name>Delay</name>
- <key>delay</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <value>0</value>
- <type>complex_vector</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-channels/grc/channels_distortion_2_gen.block.yml b/gr-channels/grc/channels_distortion_2_gen.block.yml
new file mode 100644
index 0000000000..f45bd06e7d
--- /dev/null
+++ b/gr-channels/grc/channels_distortion_2_gen.block.yml
@@ -0,0 +1,24 @@
+id: channels_distortion_2_gen
+label: Second Order Distortion
+
+parameters:
+- id: beta
+ label: Distortion
+ dtype: float
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import channels
+ make: channels.distortion_2_gen(${beta})
+ callbacks:
+ - set_beta(${beta})
+
+file_format: 1
diff --git a/gr-channels/grc/channels_distortion_2_gen.xml b/gr-channels/grc/channels_distortion_2_gen.xml
deleted file mode 100644
index 5b117a9d00..0000000000
--- a/gr-channels/grc/channels_distortion_2_gen.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Second Order Distortion Generator
-###################################################
- -->
-<block>
- <name>Second Order Distortion</name>
- <key>channels_distortion_2_gen</key>
- <import>from gnuradio import channels</import>
- <make>channels.distortion_2_gen($beta)</make>
- <callback>set_beta($beta)</callback>
- <param>
- <name>Distortion</name>
- <key>beta</key>
- <value>0</value>
- <type>float</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-channels/grc/channels_distortion_3_gen.block.yml b/gr-channels/grc/channels_distortion_3_gen.block.yml
new file mode 100644
index 0000000000..f92677757d
--- /dev/null
+++ b/gr-channels/grc/channels_distortion_3_gen.block.yml
@@ -0,0 +1,24 @@
+id: channels_distortion_3_gen
+label: Third Order Distortion
+
+parameters:
+- id: beta
+ label: Distortion
+ dtype: float
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import channels
+ make: channels.distortion_3_gen(${beta})
+ callbacks:
+ - set_beta(${beta})
+
+file_format: 1
diff --git a/gr-channels/grc/channels_distortion_3_gen.xml b/gr-channels/grc/channels_distortion_3_gen.xml
deleted file mode 100644
index 7bf145c27e..0000000000
--- a/gr-channels/grc/channels_distortion_3_gen.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Third Order Distortion Generator
-###################################################
- -->
-<block>
- <name>Third Order Distortion</name>
- <key>channels_distortion_3_gen</key>
- <import>from gnuradio import channels</import>
- <make>channels.distortion_3_gen($beta)</make>
- <callback>set_beta($beta)</callback>
- <param>
- <name>Distortion</name>
- <key>beta</key>
- <value>0</value>
- <type>float</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-channels/grc/channels_dynamic_channel_model.block.yml b/gr-channels/grc/channels_dynamic_channel_model.block.yml
new file mode 100644
index 0000000000..a18adf8780
--- /dev/null
+++ b/gr-channels/grc/channels_dynamic_channel_model.block.yml
@@ -0,0 +1,98 @@
+id: channels_dynamic_channel_model
+label: Dynamic Channel Model
+
+parameters:
+- id: samp_rate
+ label: Sample Rate Hz
+ dtype: real
+ default: samp_rate
+- id: cfo_stdev
+ label: CFO Standard Deviation Hz per sample
+ dtype: real
+ default: '0.01'
+- id: cfo_maxdev
+ label: Max CFO Bound Hz
+ dtype: real
+ default: 1e3
+- id: sro_stdev
+ label: SRO Standard Deviation Hz per sample
+ dtype: real
+ default: '0.01'
+- id: sro_maxdev
+ label: Max SRO Bound Hz
+ dtype: real
+ default: 1e3
+- id: noise_amp
+ label: White Noise Amplitude
+ dtype: real
+ default: '1.0'
+- id: N
+ label: Num Sinusoids (SoS model)
+ dtype: int
+ default: '8'
+- id: fD
+ label: Max Doppler Freq (Hz)
+ dtype: real
+ default: '2.0'
+- id: LOS
+ label: LOS Model
+ dtype: enum
+ options: ['False', 'True']
+ option_labels: [Rayleigh/NLOS, Rician/LOS]
+ option_attributes:
+ hide_K: [all, '']
+- id: K
+ label: Rician factor (K)
+ dtype: real
+ default: '4.0'
+ hide: ${ LOS.hide_K }
+- id: seed
+ label: Seed
+ dtype: int
+ default: '0'
+- id: delays
+ label: PDP Delays (samp)
+ dtype: real_vector
+ default: 0.0,0.1,1.3
+- id: mags
+ label: PDP Magnitudes
+ dtype: real_vector
+ default: 1,0.99,0.97
+- id: ntaps
+ label: Num Taps
+ dtype: int
+ default: '8'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import channels
+ make: channels.dynamic_channel_model( ${samp_rate}, ${sro_stdev}, ${sro_maxdev},
+ ${cfo_stdev}, ${cfo_maxdev}, ${N}, ${fD}, ${LOS}, ${K}, ${delays}, ${mags},
+ ${ntaps}, ${noise_amp}, ${seed} )
+ callbacks:
+ - set_samp_rate(${samp_rate})
+ - set_sro_dev_std(${sro_stdev})
+ - set_sro_dev_max(${sro_maxdev})
+ - set_cfo_dev_std(${cfo_stdev})
+ - set_cfo_dev_max(${cfo_maxdev})
+ - set_noise_amp(${noise_amp})
+ - set_doppler_freq(${fD})
+ - set_K(${K})
+
+documentation: |-
+ The dynamic channel model is a hier block consisting of the following effects:
+ - Dynamic Frequency Selective Fading Channel
+ - Dynamic Center Frequency Offset Model
+ - Dynamic Sample Rate Offset Model
+ - Additive White Gaussian Noise
+
+ The desired power delay profile and max doppler frequency may be provided to achieve the desired Ricean or Rayleigh fading scenario. For center frequency and sample rate offset models, a gaussian random walk process is conducted for each. The single sample step variance and maximum deviation for these two processes is specified and may be modified to simulate various desired stability effects. Lastly AWGN is added to simulate a typical receiver/thermal noise floor after propagation, and the variance may be modified here as desired.
+
+file_format: 1
diff --git a/gr-channels/grc/channels_dynamic_channel_model.xml b/gr-channels/grc/channels_dynamic_channel_model.xml
deleted file mode 100644
index d9022c5792..0000000000
--- a/gr-channels/grc/channels_dynamic_channel_model.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# Dynamic Channel Model
-###################################################
- -->
-<block>
- <name>Dynamic Channel Model</name>
- <key>channels_dynamic_channel_model</key>
- <import>from gnuradio import channels</import>
- <make>channels.dynamic_channel_model( $samp_rate, $sro_stdev, $sro_maxdev, $cfo_stdev, $cfo_maxdev, $N, $fD, $LOS, $K, $delays, $mags, $ntaps, $noise_amp, $seed )</make>
-
- <callback>set_samp_rate($samp_rate)</callback>
- <callback>set_sro_dev_std($sro_stdev)</callback>
- <callback>set_sro_dev_max($sro_maxdev)</callback>
- <callback>set_cfo_dev_std($cfo_stdev)</callback>
- <callback>set_cfo_dev_max($cfo_maxdev)</callback>
- <callback>set_noise_amp($noise_amp)</callback>
- <callback>set_doppler_freq($fD)</callback>
- <callback>set_K($K)</callback>
-
- <param>
- <name>Sample Rate Hz</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>CFO Standard Deviation Hz per sample</name>
- <key>cfo_stdev</key>
- <value>0.01</value>
- <type>real</type>
- </param>
- <param>
- <name>Max CFO Bound Hz</name>
- <key>cfo_maxdev</key>
- <value>1e3</value>
- <type>real</type>
- </param>
-
- <param>
- <name>SRO Standard Deviation Hz per sample</name>
- <key>sro_stdev</key>
- <value>0.01</value>
- <type>real</type>
- </param>
- <param>
- <name>Max SRO Bound Hz</name>
- <key>sro_maxdev</key>
- <value>1e3</value>
- <type>real</type>
- </param>
-
- <param>
- <name>White Noise Amplitude</name>
- <key>noise_amp</key>
- <value>1.0</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Num Sinusoids (SoS model)</name>
- <key>N</key>
- <value>8</value>
- <type>int</type>
- </param>
- <param>
- <name>Max Doppler Freq (Hz)</name>
- <key>fD</key>
- <value>2.0</value>
- <type>real</type>
- </param>
- <param>
- <name>LOS Model</name>
- <key>LOS</key>
- <type>enum</type>
- <option>
- <name>Rayleigh/NLOS</name>
- <key>False</key>
- <opt>hide_K:all</opt>
- </option>
- <option>
- <name>Rician/LOS</name>
- <key>True</key>
- <opt>hide_K:</opt>
- </option>
- </param>
- <param>
- <name>Rician factor (K)</name>
- <key>K</key>
- <value>4.0</value>
- <type>real</type>
- <hide>$LOS.hide_K</hide>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>PDP Delays (samp)</name>
- <key>delays</key>
- <value>0.0,0.1,1.3</value>
- <type>real_vector</type>
- </param>
- <param>
- <name>PDP Magnitudes</name>
- <key>mags</key>
- <value>1,0.99,0.97</value>
- <type>real_vector</type>
- </param>
- <param>
- <name>Num Taps</name>
- <key>ntaps</key>
- <value>8</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
- <doc>
- The dynamic channel model is a hier block consisting of the following effects:
- - Dynamic Frequency Selective Fading Channel
- - Dynamic Center Frequency Offset Model
- - Dynamic Sample Rate Offset Model
- - Additive White Gaussian Noise
-
- The desired power delay profile and max doppler frequency may be provided to achieve the desired Ricean or Rayleigh fading scenario. For center frequency and sample rate offset models, a gaussian random walk process is conducted for each. The single sample step variance and maximum deviation for these two processes is specified and may be modified to simulate various desired stability effects. Lastly AWGN is added to simulate a typical receiver/thermal noise floor after propagation, and the variance may be modified here as desired.
- </doc>
-</block>
diff --git a/gr-channels/grc/channels_fading_model.block.yml b/gr-channels/grc/channels_fading_model.block.yml
new file mode 100644
index 0000000000..7e1587feb6
--- /dev/null
+++ b/gr-channels/grc/channels_fading_model.block.yml
@@ -0,0 +1,57 @@
+id: channels_fading_model
+label: Fading Model
+
+parameters:
+- id: N
+ label: Num Sinusoids (SoS model)
+ dtype: int
+ default: '8'
+- id: fDTs
+ label: Normalized Max Doppler (fD*Ts)
+ dtype: real
+ default: 10.0/samp_rate
+- id: LOS
+ label: LOS Model
+ dtype: enum
+ options: ['False', 'True']
+ option_labels: [Rayleigh/NLOS, Rician/LOS]
+ option_attributes:
+ hide_K: [all, '']
+- id: K
+ label: Rician factor (K)
+ dtype: real
+ default: '4.0'
+ hide: ${ LOS.hide_K }
+- id: seed
+ label: Seed
+ dtype: int
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import channels
+ make: channels.fading_model( ${N}, ${fDTs}, ${LOS}, ${K}, ${seed} )
+ callbacks:
+ - set_fDTs(${fDTs})
+ - set_K(${K})
+
+documentation: |-
+ This algorithm implements the method described in
+ Compact Rayleigh and Rician fading simulator based on random walk processes
+ A. Alimohammad S.F. Fard B.F. Cockburn C. Schlegel
+ 26th November 2008
+
+ int d_N=8; // number of sinusoids
+ float d_fDTs=0.01 // normalized maximum doppler frequency (f_doppler / f_samprate)
+ float d_K=4; // Rician factor (ratio of the specular power to the scattered power)
+ bool d_LOS=true; // LOS path exists? chooses Rician (LOS) vs Rayleigh (NLOS) model.
+ int seed=0; // noise seed
+
+file_format: 1
diff --git a/gr-channels/grc/channels_fading_model.xml b/gr-channels/grc/channels_fading_model.xml
deleted file mode 100644
index d47f0624f1..0000000000
--- a/gr-channels/grc/channels_fading_model.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Fading Model
-###################################################
- -->
-<block>
- <name>Fading Model</name>
- <key>channels_fading_model</key>
- <import>from gnuradio import channels</import>
- <make>channels.fading_model( $N, $fDTs, $LOS, $K, $seed )</make>
- <callback>set_fDTs($fDTs)</callback>
- <callback>set_K($K)</callback>
- <param>
- <name>Num Sinusoids (SoS model)</name>
- <key>N</key>
- <value>8</value>
- <type>int</type>
- </param>
- <param>
- <name>Normalized Max Doppler (fD*Ts)</name>
- <key>fDTs</key>
- <value>10.0/samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>LOS Model</name>
- <key>LOS</key>
- <type>enum</type>
- <option>
- <name>Rayleigh/NLOS</name>
- <key>False</key>
- <opt>hide_K:all</opt>
- </option>
- <option>
- <name>Rician/LOS</name>
- <key>True</key>
- <opt>hide_K:</opt>
- </option>
- </param>
- <param>
- <name>Rician factor (K)</name>
- <key>K</key>
- <value>4.0</value>
- <type>real</type>
- <hide>$LOS.hide_K</hide>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0</value>
- <type>int</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
- <doc>
- This algorithm implements the method described in
- Compact Rayleigh and Rician fading simulator based on random walk processes
- A. Alimohammad S.F. Fard B.F. Cockburn C. Schlegel
- 26th November 2008
-
- int d_N=8; // number of sinusoids
- float d_fDTs=0.01 // normalized maximum doppler frequency (f_doppler / f_samprate)
- float d_K=4; // Rician factor (ratio of the specular power to the scattered power)
- bool d_LOS=true; // LOS path exists? chooses Rician (LOS) vs Rayleigh (NLOS) model.
- int seed=0; // noise seed
- </doc>
-</block>
diff --git a/gr-channels/grc/channels_impairments.block.yml b/gr-channels/grc/channels_impairments.block.yml
new file mode 100644
index 0000000000..ccbdff9f45
--- /dev/null
+++ b/gr-channels/grc/channels_impairments.block.yml
@@ -0,0 +1,60 @@
+id: channels_impairments
+label: HW Impairments
+
+parameters:
+- id: phase_noise_mag
+ label: Phase Noise Mag.
+ dtype: float
+ default: '0'
+- id: magbal
+ label: IQ Mag. Imbalance
+ dtype: float
+ default: '0'
+- id: phasebal
+ label: IQ Phase. Imbalance
+ dtype: float
+ default: '0'
+- id: q_ofs
+ label: Quadrature Offset
+ dtype: float
+ default: '0'
+- id: i_ofs
+ label: Inphase Offset
+ dtype: float
+ default: '0'
+- id: freq_offset
+ label: Frequency Offset
+ dtype: float
+ default: '0'
+- id: gamma
+ label: Second Order Distortion
+ dtype: float
+ default: '0'
+- id: beta
+ label: Third Order Distortion
+ dtype: float
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import channels
+ make: channels.impairments(${phase_noise_mag}, ${magbal}, ${phasebal}, ${q_ofs},
+ ${i_ofs}, ${freq_offset}, ${gamma}, ${beta})
+ callbacks:
+ - set_phase_noise_mag(${phase_noise_mag})
+ - set_magbal(${magbal})
+ - set_phasebal(${phasebal})
+ - set_q_ofs(${q_ofs})
+ - set_i_ofs(${i_ofs})
+ - set_freq_offset(${freq_offset})
+ - set_gamma(${gamma})
+ - set_beta(${beta})
+
+file_format: 1
diff --git a/gr-channels/grc/channels_impairments.xml b/gr-channels/grc/channels_impairments.xml
deleted file mode 100644
index 12ee65c740..0000000000
--- a/gr-channels/grc/channels_impairments.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Impairments Model
-###################################################
- -->
-<block>
- <name>HW Impairments</name>
- <key>channels_impairments</key>
- <import>from gnuradio import channels</import>
- <make>channels.impairments($phase_noise_mag, $magbal, $phasebal, $q_ofs, $i_ofs, $freq_offset, $gamma, $beta)</make>
- <callback>set_phase_noise_mag($phase_noise_mag)</callback>
- <callback>set_magbal($magbal)</callback>
- <callback>set_phasebal($phasebal)</callback>
- <callback>set_q_ofs($q_ofs)</callback>
- <callback>set_i_ofs($i_ofs)</callback>
- <callback>set_freq_offset($freq_offset)</callback>
- <callback>set_gamma($gamma)</callback>
- <callback>set_beta($beta)</callback>
- <param>
- <name>Phase Noise Mag.</name>
- <key>phase_noise_mag</key>
- <value>0</value>
- <type>float</type>
- </param>
- <param>
- <name>IQ Mag. Imbalance</name>
- <key>magbal</key>
- <value>0</value>
- <type>float</type>
- </param>
- <param>
- <name>IQ Phase. Imbalance</name>
- <key>phasebal</key>
- <value>0</value>
- <type>float</type>
- </param>
- <param>
- <name>Quadrature Offset</name>
- <key>q_ofs</key>
- <value>0</value>
- <type>float</type>
- </param>
- <param>
- <name>Inphase Offset</name>
- <key>i_ofs</key>
- <value>0</value>
- <type>float</type>
- </param>
- <param>
- <name>Frequency Offset</name>
- <key>freq_offset</key>
- <value>0</value>
- <type>float</type>
- </param>
- <param>
- <name>Second Order Distortion</name>
- <key>gamma</key>
- <value>0</value>
- <type>float</type>
- </param>
- <param>
- <name>Third Order Distortion</name>
- <key>beta</key>
- <value>0</value>
- <type>float</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-channels/grc/channels_iqbal_gen.block.yml b/gr-channels/grc/channels_iqbal_gen.block.yml
new file mode 100644
index 0000000000..5b424761c1
--- /dev/null
+++ b/gr-channels/grc/channels_iqbal_gen.block.yml
@@ -0,0 +1,29 @@
+id: channels_iqbal_gen
+label: IQ Imbalance Generator
+
+parameters:
+- id: mag
+ label: Magnitude
+ dtype: float
+ default: '0'
+- id: phase
+ label: Phase
+ dtype: float
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import channels
+ make: channels.iqbal_gen(${mag}, ${phase})
+ callbacks:
+ - set_magnitude(${mag})
+ - set_phase(${phase})
+
+file_format: 1
diff --git a/gr-channels/grc/channels_iqbal_gen.xml b/gr-channels/grc/channels_iqbal_gen.xml
deleted file mode 100644
index 9cb267adec..0000000000
--- a/gr-channels/grc/channels_iqbal_gen.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##IQ Imbalance Generator
-###################################################
- -->
-<block>
- <name>IQ Imbalance Generator</name>
- <key>channels_iqbal_gen</key>
- <import>from gnuradio import channels</import>
- <make>channels.iqbal_gen($mag, $phase)</make>
- <callback>set_magnitude($mag)</callback>
- <callback>set_phase($phase)</callback>
- <param>
- <name>Magnitude</name>
- <key>mag</key>
- <value>0</value>
- <type>float</type>
- </param>
- <param>
- <name>Phase</name>
- <key>phase</key>
- <value>0</value>
- <type>float</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-channels/grc/channels_phase_bal.block.yml b/gr-channels/grc/channels_phase_bal.block.yml
new file mode 100644
index 0000000000..70244cffeb
--- /dev/null
+++ b/gr-channels/grc/channels_phase_bal.block.yml
@@ -0,0 +1,24 @@
+id: channels_phase_bal
+label: Phase Balance
+
+parameters:
+- id: alpha
+ label: Alpha
+ dtype: float
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import channels
+ make: channels.phase_bal(${alpha})
+ callbacks:
+ - set_alpha(${alpha})
+
+file_format: 1
diff --git a/gr-channels/grc/channels_phase_bal.xml b/gr-channels/grc/channels_phase_bal.xml
deleted file mode 100644
index ce17ab79ab..0000000000
--- a/gr-channels/grc/channels_phase_bal.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Phase balance
-###################################################
- -->
-<block>
- <name>Phase Balance</name>
- <key>channels_phase_bal</key>
- <import>from gnuradio import channels</import>
- <make>channels.phase_bal($alpha)</make>
- <callback>set_alpha($alpha)</callback>
- <param>
- <name>Alpha</name>
- <key>alpha</key>
- <value>0</value>
- <type>float</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-channels/grc/channels_phase_noise_gen.block.yml b/gr-channels/grc/channels_phase_noise_gen.block.yml
new file mode 100644
index 0000000000..1310caad89
--- /dev/null
+++ b/gr-channels/grc/channels_phase_noise_gen.block.yml
@@ -0,0 +1,29 @@
+id: channels_phase_noise_gen
+label: Phase Noise Generator
+
+parameters:
+- id: noise_mag
+ label: Noise Magnitude
+ dtype: float
+ default: '0'
+- id: alpha
+ label: Alpha
+ dtype: float
+ default: '0.1'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import channels
+ make: channels.phase_noise_gen(${noise_mag}, ${alpha})
+ callbacks:
+ - set_noise_mag(${noise_mag})
+ - set_alpha(${alpha})
+
+file_format: 1
diff --git a/gr-channels/grc/channels_phase_noise_gen.xml b/gr-channels/grc/channels_phase_noise_gen.xml
deleted file mode 100644
index 852b4c9966..0000000000
--- a/gr-channels/grc/channels_phase_noise_gen.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Phase Noise Generator
-###################################################
- -->
-<block>
- <name>Phase Noise Generator</name>
- <key>channels_phase_noise_gen</key>
- <import>from gnuradio import channels</import>
- <make>channels.phase_noise_gen($noise_mag, $alpha)</make>
- <callback>set_noise_mag($noise_mag)</callback>
- <callback>set_alpha($alpha)</callback>
- <param>
- <name>Noise Magnitude</name>
- <key>noise_mag</key>
- <value>0</value>
- <type>float</type>
- </param>
- <param>
- <name>Alpha</name>
- <key>alpha</key>
- <value>0.1</value>
- <type>float</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-channels/grc/channels_quantizer.block.yml b/gr-channels/grc/channels_quantizer.block.yml
new file mode 100644
index 0000000000..68fcf50299
--- /dev/null
+++ b/gr-channels/grc/channels_quantizer.block.yml
@@ -0,0 +1,24 @@
+id: channels_quantizer
+label: Quantizer
+
+parameters:
+- id: bits
+ label: Bits
+ dtype: int
+ default: '16'
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import channels
+ make: channels.quantizer(${bits})
+ callbacks:
+ - set_bits(${bits})
+
+file_format: 1
diff --git a/gr-channels/grc/channels_quantizer.xml b/gr-channels/grc/channels_quantizer.xml
deleted file mode 100644
index 57bed74ee7..0000000000
--- a/gr-channels/grc/channels_quantizer.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Quantization
-###################################################
- -->
-<block>
- <name>Quantizer</name>
- <key>channels_quantizer</key>
- <import>from gnuradio import channels</import>
- <make>channels.quantizer($bits)</make>
- <callback>set_bits($bits)</callback>
- <param>
- <name>Bits</name>
- <key>bits</key>
- <value>16</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-channels/grc/channels_selective_fading_model.block.yml b/gr-channels/grc/channels_selective_fading_model.block.yml
new file mode 100644
index 0000000000..9898ee75ab
--- /dev/null
+++ b/gr-channels/grc/channels_selective_fading_model.block.yml
@@ -0,0 +1,87 @@
+id: channels_selective_fading_model
+label: Frequency Selective Fading Model
+
+parameters:
+- id: N
+ label: Num Sinusoids (SoS model)
+ dtype: int
+ default: '8'
+- id: fDTs
+ label: Normalized Max Doppler (fD*Ts)
+ dtype: real
+ default: 10.0/samp_rate
+- id: LOS
+ label: LOS Model
+ dtype: enum
+ options: ['False', 'True']
+ option_labels: [Rayleigh/NLOS, Rician/LOS]
+ option_attributes:
+ hide_K: [all, '']
+- id: K
+ label: Rician factor (K)
+ dtype: real
+ default: '4.0'
+ hide: ${ LOS.hide_K }
+- id: seed
+ label: Seed
+ dtype: int
+ default: '0'
+- id: delays
+ label: PDP Delays (samp)
+ dtype: real_vector
+ default: 0.0,0.1,1.3
+- id: mags
+ label: PDP Magnitudes
+ dtype: real_vector
+ default: 1,0.99,0.97
+- id: ntaps
+ label: Num Taps
+ dtype: int
+ default: '8'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import channels
+ make: channels.selective_fading_model( ${N}, ${fDTs}, ${LOS}, ${K}, ${seed}, ${delays},
+ ${mags}, ${ntaps} )
+ callbacks:
+ - set_fDTs(${fDTs})
+ - set_K(${K})
+
+documentation: |-
+ int d_N=8; // number of sinusoids used to simulate gain on each ray
+ float d_fDTs=0.01 // normalized maximum doppler frequency (f_doppler / f_samprate)
+ float d_K=4; // Rician factor (ratio of the specular power to the scattered power)
+ bool d_LOS=true; // LOS path exists? chooses Rician (LOS) vs Rayleigh (NLOS) model.
+ int seed=0; // noise seed
+ int ntaps; // Number of FIR taps to use in selective fading model
+
+ These two vectors comprise the Power Delay Profile of the signal
+ float_vector delays // Time delay in the fir filter (in samples) for each arriving WSSUS Ray
+ float_vector mags // Magnitude corresponding to each WSSUS Ray
+
+ If using a LOS model, the first delay and mag should correspond with the LOS component
+
+ References:
+
+ The flat-fading portion of the algorithm implements the following
+ Compact Rayleigh and Rician fading simulator based on random walk processes
+ A. Alimohammad S.F. Fard B.F. Cockburn C. Schlegel
+ 26th November 2008
+
+ The frequency selective extension of the block roughly implements
+ A Low-Complexity Hardware Implementation of Discrete-Time
+ Frequency-Selective Rayleigh Fading Channels
+ F. Ren and Y. Zheng
+ 24-27 May 2009
+
+ Implementation by Tim O'Shea
+
+file_format: 1
diff --git a/gr-channels/grc/channels_selective_fading_model.xml b/gr-channels/grc/channels_selective_fading_model.xml
deleted file mode 100644
index c9b89a0da9..0000000000
--- a/gr-channels/grc/channels_selective_fading_model.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Frequency Selective Fading Model
-###################################################
- -->
-<block>
- <name>Frequency Selective Fading Model</name>
- <key>channels_selective_fading_model</key>
- <import>from gnuradio import channels</import>
- <make>channels.selective_fading_model( $N, $fDTs, $LOS, $K, $seed, $delays, $mags, $ntaps )</make>
- <callback>set_fDTs($fDTs)</callback>
- <callback>set_K($K)</callback>
- <param>
- <name>Num Sinusoids (SoS model)</name>
- <key>N</key>
- <value>8</value>
- <type>int</type>
- </param>
- <param>
- <name>Normalized Max Doppler (fD*Ts)</name>
- <key>fDTs</key>
- <value>10.0/samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>LOS Model</name>
- <key>LOS</key>
- <type>enum</type>
- <option>
- <name>Rayleigh/NLOS</name>
- <key>False</key>
- <opt>hide_K:all</opt>
- </option>
- <option>
- <name>Rician/LOS</name>
- <key>True</key>
- <opt>hide_K:</opt>
- </option>
- </param>
- <param>
- <name>Rician factor (K)</name>
- <key>K</key>
- <value>4.0</value>
- <type>real</type>
- <hide>$LOS.hide_K</hide>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>PDP Delays (samp)</name>
- <key>delays</key>
- <value>0.0,0.1,1.3</value>
- <type>real_vector</type>
- </param>
- <param>
- <name>PDP Magnitudes</name>
- <key>mags</key>
- <value>1,0.99,0.97</value>
- <type>real_vector</type>
- </param>
- <param>
- <name>Num Taps</name>
- <key>ntaps</key>
- <value>8</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
- <doc>
- int d_N=8; // number of sinusoids used to simulate gain on each ray
- float d_fDTs=0.01 // normalized maximum doppler frequency (f_doppler / f_samprate)
- float d_K=4; // Rician factor (ratio of the specular power to the scattered power)
- bool d_LOS=true; // LOS path exists? chooses Rician (LOS) vs Rayleigh (NLOS) model.
- int seed=0; // noise seed
- int ntaps; // Number of FIR taps to use in selective fading model
-
- These two vectors comprise the Power Delay Profile of the signal
- float_vector delays // Time delay in the fir filter (in samples) for each arriving WSSUS Ray
- float_vector mags // Magnitude corresponding to each WSSUS Ray
-
- If using a LOS model, the first delay and mag should correspond with the LOS component
-
- References:
-
- The flat-fading portion of the algorithm implements the following
- Compact Rayleigh and Rician fading simulator based on random walk processes
- A. Alimohammad S.F. Fard B.F. Cockburn C. Schlegel
- 26th November 2008
-
- The frequency selective extension of the block roughly implements
- A Low-Complexity Hardware Implementation of Discrete-Time
- Frequency-Selective Rayleigh Fading Channels
- F. Ren and Y. Zheng
- 24-27 May 2009
-
- Implementation by Tim O'Shea
- </doc>
-</block>
diff --git a/gr-channels/grc/channels_selective_fading_model2.block.yml b/gr-channels/grc/channels_selective_fading_model2.block.yml
new file mode 100644
index 0000000000..1506c03fbc
--- /dev/null
+++ b/gr-channels/grc/channels_selective_fading_model2.block.yml
@@ -0,0 +1,100 @@
+id: channels_selective_fading_model2
+label: Frequency Selective Fading Model2
+
+parameters:
+- id: N
+ label: Num Sinusoids (Stochastic SoS model + delay drift)
+ dtype: int
+ default: '8'
+- id: fDTs
+ label: Normalized Max Doppler (fD*Ts)
+ dtype: real
+ default: 0.2/samp_rate
+- id: LOS
+ label: LOS Model
+ dtype: enum
+ options: ['False', 'True']
+ option_labels: [Rayleigh/NLOS, Rician/LOS]
+ option_attributes:
+ hide_K: [all, '']
+- id: K
+ label: Rician factor (K)
+ dtype: real
+ default: '4.0'
+ hide: ${ LOS.hide_K }
+- id: seed
+ label: Seed
+ dtype: int
+ default: '0'
+- id: delays
+ label: PDP Delays (in samps)
+ dtype: real_vector
+ default: 1.0,1.9,2.7
+- id: delay_std
+ label: PDP Delay StdDev (per samp)
+ dtype: real_vector
+ default: 1e-4,1e-4,1e-4
+- id: delay_maxdev
+ label: PDP Delay Max-Dev (per samp)
+ dtype: real_vector
+ default: 0.5,0.7,0.9
+- id: mags
+ label: PDP Magnitudes
+ dtype: real_vector
+ default: 1,0.95,0.8
+- id: ntaps
+ label: Num Taps
+ dtype: int
+ default: '8'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+- domain: message
+ id: taps
+ optional: true
+
+templates:
+ imports: from gnuradio import channels
+ make: channels.selective_fading_model2( ${N}, ${fDTs}, ${LOS}, ${K}, ${seed},
+ ${delays}, ${delay_std}, ${delay_maxdev}, ${mags}, ${ntaps} )
+ callbacks:
+ - set_fDTs(${fDTs})
+ - set_K(${K})
+
+documentation: |-
+ int d_N=8; // number of sinusoids used to simulate gain on each ray
+ float d_fDTs=0.01 // normalized maximum doppler frequency (f_doppler / f_samprate)
+ float d_K=4; // Rician factor (ratio of the specular power to the scattered power)
+ bool d_LOS=true; // LOS path exists? chooses Rician (LOS) vs Rayleigh (NLOS) model.
+ int seed=0; // noise seed
+ int ntaps; // Number of FIR taps to use in selective fading model
+
+ These two vectors comprise the Power Delay Profile of the signal
+ float_vector delays // Time delay in the fir filter (in samples) for each arriving WSSUS Ray
+ float_vector mags // Magnitude corresponding to each WSSUS Ray
+
+ If using a LOS model, the first delay and mag should correspond with the LOS component
+
+ References:
+
+ The flat-fading portion of the algorithm implements the following
+ Compact Rayleigh and Rician fading simulator based on random walk processes
+ A. Alimohammad S.F. Fard B.F. Cockburn C. Schlegel
+ 26th November 2008
+ (Alogrithm III)
+ ( with a novel addition of time delay tap random walk )
+
+ The frequency selective extension of the block roughly implements
+ A Low-Complexity Hardware Implementation of Discrete-Time
+ Frequency-Selective Rayleigh Fading Channels
+ F. Ren and Y. Zheng
+ 24-27 May 2009
+
+ Implementation by Tim O'Shea
+
+file_format: 1
diff --git a/gr-channels/grc/channels_selective_fading_model2.xml b/gr-channels/grc/channels_selective_fading_model2.xml
deleted file mode 100644
index 1e1ea3a70c..0000000000
--- a/gr-channels/grc/channels_selective_fading_model2.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Frequency Selective Fading Model
-###################################################
- -->
-<block>
- <name>Frequency Selective Fading Model2</name>
- <key>channels_selective_fading_model2</key>
- <import>from gnuradio import channels</import>
- <make>channels.selective_fading_model2( $N, $fDTs, $LOS, $K, $seed, $delays, $delay_std, $delay_maxdev, $mags, $ntaps )</make>
- <callback>set_fDTs($fDTs)</callback>
- <callback>set_K($K)</callback>
- <param>
- <name>Num Sinusoids (Stochastic SoS model + delay drift)</name>
- <key>N</key>
- <value>8</value>
- <type>int</type>
- </param>
- <param>
- <name>Normalized Max Doppler (fD*Ts)</name>
- <key>fDTs</key>
- <value>0.2/samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>LOS Model</name>
- <key>LOS</key>
- <type>enum</type>
- <option>
- <name>Rayleigh/NLOS</name>
- <key>False</key>
- <opt>hide_K:all</opt>
- </option>
- <option>
- <name>Rician/LOS</name>
- <key>True</key>
- <opt>hide_K:</opt>
- </option>
- </param>
- <param>
- <name>Rician factor (K)</name>
- <key>K</key>
- <value>4.0</value>
- <type>real</type>
- <hide>$LOS.hide_K</hide>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>PDP Delays (in samps)</name>
- <key>delays</key>
- <value>1.0,1.9,2.7</value>
- <type>real_vector</type>
- </param>
- <param>
- <name>PDP Delay StdDev (per samp)</name>
- <key>delay_std</key>
- <value>1e-4,1e-4,1e-4</value>
- <type>real_vector</type>
- </param>
- <param>
- <name>PDP Delay Max-Dev (per samp)</name>
- <key>delay_maxdev</key>
- <value>0.5,0.7,0.9</value>
- <type>real_vector</type>
- </param>
- <param>
- <name>PDP Magnitudes</name>
- <key>mags</key>
- <value>1,0.95,0.8</value>
- <type>real_vector</type>
- </param>
- <param>
- <name>Num Taps</name>
- <key>ntaps</key>
- <value>8</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
- <source>
- <name>taps</name>
- <type>message</type>
- <optional>1</optional>
- </source>
- <doc>
- int d_N=8; // number of sinusoids used to simulate gain on each ray
- float d_fDTs=0.01 // normalized maximum doppler frequency (f_doppler / f_samprate)
- float d_K=4; // Rician factor (ratio of the specular power to the scattered power)
- bool d_LOS=true; // LOS path exists? chooses Rician (LOS) vs Rayleigh (NLOS) model.
- int seed=0; // noise seed
- int ntaps; // Number of FIR taps to use in selective fading model
-
- These two vectors comprise the Power Delay Profile of the signal
- float_vector delays // Time delay in the fir filter (in samples) for each arriving WSSUS Ray
- float_vector mags // Magnitude corresponding to each WSSUS Ray
-
- If using a LOS model, the first delay and mag should correspond with the LOS component
-
- References:
-
- The flat-fading portion of the algorithm implements the following
- Compact Rayleigh and Rician fading simulator based on random walk processes
- A. Alimohammad S.F. Fard B.F. Cockburn C. Schlegel
- 26th November 2008
- (Alogrithm III)
- ( with a novel addition of time delay tap random walk )
-
- The frequency selective extension of the block roughly implements
- A Low-Complexity Hardware Implementation of Discrete-Time
- Frequency-Selective Rayleigh Fading Channels
- F. Ren and Y. Zheng
- 24-27 May 2009
-
- Implementation by Tim O'Shea
- </doc>
-</block>
diff --git a/gr-channels/grc/channels_sro_model.block.yml b/gr-channels/grc/channels_sro_model.block.yml
new file mode 100644
index 0000000000..8da9a5b25b
--- /dev/null
+++ b/gr-channels/grc/channels_sro_model.block.yml
@@ -0,0 +1,44 @@
+id: channels_sro_model
+label: SRO Model
+
+parameters:
+- id: srate
+ label: Sample Rate Hz
+ dtype: real
+ default: samp_rate
+- id: stdev
+ label: SRO Standard Deviation Hz per sample
+ dtype: real
+ default: '0.01'
+- id: maxdev
+ label: Max SRO Bound Hz
+ dtype: real
+ default: 1e3
+- id: seed
+ label: Seed
+ dtype: int
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import channels
+ make: |-
+ channels.sro_model(
+ ${srate},
+ ${stdev},
+ ${maxdev},
+ ${seed}
+ )
+ callbacks:
+ - set_std_dev(${stdev})
+ - set_max_dev(${maxdev})
+ - set_samp_rate(${srate})
+
+file_format: 1
diff --git a/gr-channels/grc/channels_sro_model.xml b/gr-channels/grc/channels_sro_model.xml
deleted file mode 100644
index 63752aaefd..0000000000
--- a/gr-channels/grc/channels_sro_model.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##SRO Model
-###################################################
- -->
-<block>
- <name>SRO Model</name>
- <key>channels_sro_model</key>
- <import>from gnuradio import channels</import>
- <make>channels.sro_model(
- $srate,
- $stdev,
- $maxdev,
- $seed
-)</make>
- <callback>set_std_dev($stdev)</callback>
- <callback>set_max_dev($maxdev)</callback>
- <callback>set_samp_rate($srate)</callback>
- <param>
- <name>Sample Rate Hz</name>
- <key>srate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>SRO Standard Deviation Hz per sample</name>
- <key>stdev</key>
- <value>0.01</value>
- <type>real</type>
- </param>
- <param>
- <name>Max SRO Bound Hz</name>
- <key>maxdev</key>
- <value>1e3</value>
- <type>real</type>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/CMakeLists.txt b/gr-digital/grc/CMakeLists.txt
index a3d0223290..78c8261525 100644
--- a/gr-digital/grc/CMakeLists.txt
+++ b/gr-digital/grc/CMakeLists.txt
@@ -17,7 +17,7 @@
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
-file(GLOB xml_files "*.xml")
-install(FILES ${xml_files}
+file(GLOB yml_files "*.yml")
+install(FILES ${yml_files}
DESTINATION ${GRC_BLOCKS_DIR}
)
diff --git a/gr-digital/grc/digital.tree.yml b/gr-digital/grc/digital.tree.yml
new file mode 100644
index 0000000000..0e4c2463e8
--- /dev/null
+++ b/gr-digital/grc/digital.tree.yml
@@ -0,0 +1,85 @@
+'[Core]':
+- Coding:
+ - digital_additive_scrambler_bb
+ - digital_descrambler_bb
+ - digital_scrambler_bb
+- Equalizers:
+ - digital_cma_equalizer_cc
+ - digital_lms_dd_equalizer_cc
+ - digital_kurtotic_equalizer_cc
+- Measurement Tools:
+ - digital_mpsk_snr_est_cc
+ - digital_probe_density_b
+ - digital_probe_mpsk_snr_est_c
+- Modulators:
+ - digital_cpmmod_bc
+ - digital_gfsk_mod
+ - digital_gfsk_demod
+ - digital_gmskmod_bc
+ - digital_gmsk_mod
+ - digital_gmsk_demod
+ - digital_constellation_modulator
+ - digital_constellation_receiver_cb
+ - variable_constellation
+ - variable_constellation_rect
+ - variable_modulate_vector
+- Packet Operators:
+ - digital_correlate_access_code_tag_bb
+ - digital_correlate_access_code_xx_ts
+ - digital_crc32_bb
+ - digital_crc32_async_bb
+ - digital_framer_sink_1
+ - variable_header_format_default
+ - digital_protocol_formatter_async
+ - digital_protocol_formatter_bb
+ - digital_protocol_parser_b
+ - digital_header_payload_demux
+ - digital_packet_headergenerator_bb
+ - digital_packet_headergenerator_bb_default
+ - digital_packet_headerparser_b
+ - digital_packet_headerparser_b_default
+ - digital_packet_sink
+ - digital_hdlc_framer_pb
+ - digital_hdlc_deframer_bp
+ - digital_simple_framer
+ - digital_simple_correlator
+- OFDM:
+ - digital_ofdm_mod
+ - digital_ofdm_demod
+ - digital_ofdm_carrier_allocator_cvc
+ - digital_ofdm_chanest_vcvc
+ - digital_ofdm_cyclic_prefixer
+ - digital_ofdm_frame_acquisition
+ - digital_ofdm_frame_equalizer_vcvc
+ - digital_ofdm_frame_sink
+ - digital_ofdm_insert_preamble
+ - digital_ofdm_rx
+ - digital_ofdm_sampler
+ - digital_ofdm_serializer_vcc
+ - digital_ofdm_sync_pn
+ - digital_ofdm_sync_sc_cfb
+ - digital_ofdm_tx
+- Symbol Coding:
+ - digital_binary_slicer_fb
+ - digital_chunks_to_symbols_xx
+ - digital_constellation_decoder_cb
+ - digital_constellation_receiver_cb
+ - digital_constellation_soft_decoder_cf
+ - digital_diff_decoder_bb
+ - digital_diff_encoder_bb
+ - digital_diff_phasor_cc
+ - digital_map_bb
+- Synchronizers:
+ - digital_clock_recovery_mm_xx
+ - digital_costas_loop_cc
+ - digital_fll_band_edge_cc
+ - digital_pfb_clock_sync_xxx
+ - digital_pn_correlator_cc
+ - digital_symbol_sync_xx
+ - digital_corr_est_cc
+- Waveform Generators:
+ - digital_glfsr_source_x
+- Deprecated:
+ - digital_correlate_access_code_bb
+ - digital_simple_framer
+ - digital_simple_correlator
diff --git a/gr-digital/grc/digital_additive_scrambler_bb.block.yml b/gr-digital/grc/digital_additive_scrambler_bb.block.yml
new file mode 100644
index 0000000000..d447a2822d
--- /dev/null
+++ b/gr-digital/grc/digital_additive_scrambler_bb.block.yml
@@ -0,0 +1,43 @@
+id: digital_additive_scrambler_bb
+label: Additive Scrambler
+
+parameters:
+- id: mask
+ label: Mask
+ dtype: hex
+ default: '0x8A'
+- id: seed
+ label: Seed
+ dtype: hex
+ default: '0x7F'
+- id: len
+ label: Length
+ dtype: int
+ default: '7'
+- id: count
+ label: Count
+ dtype: int
+ default: '0'
+- id: bits_per_byte
+ label: Bits per byte
+ dtype: int
+ default: '1'
+- id: reset_tag_key
+ label: Reset tag key
+ dtype: string
+ default: '""'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.additive_scrambler_bb(${mask}, ${seed}, ${len}, count=${count},
+ bits_per_byte=${bits_per_byte}, reset_tag_key=${reset_tag_key})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_additive_scrambler_bb.xml b/gr-digital/grc/digital_additive_scrambler_bb.xml
deleted file mode 100644
index 2bb06e48a3..0000000000
--- a/gr-digital/grc/digital_additive_scrambler_bb.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Additive Scrambler
-###################################################
- -->
-<block>
- <name>Additive Scrambler</name>
- <key>digital_additive_scrambler_bb</key>
- <import>from gnuradio import digital</import>
- <make>digital.additive_scrambler_bb($mask, $seed, $len, count=$count, bits_per_byte=$bits_per_byte, reset_tag_key=$reset_tag_key)</make>
- <param>
- <name>Mask</name>
- <key>mask</key>
- <value>0x8A</value>
- <type>hex</type>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0x7F</value>
- <type>hex</type>
- </param>
- <param>
- <name>Length</name>
- <key>len</key>
- <value>7</value>
- <type>int</type>
- </param>
- <param>
- <name>Count</name>
- <key>count</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Bits per byte</name>
- <key>bits_per_byte</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Reset tag key</name>
- <key>reset_tag_key</key>
- <value>""</value>
- <type>string</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_binary_slicer_fb.block.yml b/gr-digital/grc/digital_binary_slicer_fb.block.yml
new file mode 100644
index 0000000000..143c97c0ed
--- /dev/null
+++ b/gr-digital/grc/digital_binary_slicer_fb.block.yml
@@ -0,0 +1,16 @@
+id: digital_binary_slicer_fb
+label: Binary Slicer
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.binary_slicer_fb()
+
+file_format: 1
diff --git a/gr-digital/grc/digital_binary_slicer_fb.xml b/gr-digital/grc/digital_binary_slicer_fb.xml
deleted file mode 100644
index 3187d13f92..0000000000
--- a/gr-digital/grc/digital_binary_slicer_fb.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Binary Slicer
-###################################################
- -->
-<block>
- <name>Binary Slicer</name>
- <key>digital_binary_slicer_fb</key>
- <import>from gnuradio import digital</import>
- <make>digital.binary_slicer_fb()</make>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_block_tree.xml b/gr-digital/grc/digital_block_tree.xml
deleted file mode 100644
index 10346cbcd0..0000000000
--- a/gr-digital/grc/digital_block_tree.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0"?>
-<!--
- Copyright (C) 2011-2017 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##Block Tree for GR Digital blocks.
-###################################################
- -->
-<cat>
- <name>[Core]</name>
- <cat>
- <name>Coding</name>
- <block>digital_additive_scrambler_bb</block>
- <block>digital_descrambler_bb</block>
- <block>digital_scrambler_bb</block>
- </cat>
- <cat>
- <name>Equalizers</name>
- <block>digital_cma_equalizer_cc</block>
- <block>digital_lms_dd_equalizer_cc</block>
- <block>digital_kurtotic_equalizer_cc</block>
- </cat>
- <cat>
- <name>Measurement Tools</name>
- <block>digital_mpsk_snr_est_cc</block>
- <block>digital_probe_density_b</block>
- <block>digital_probe_mpsk_snr_est_c</block>
- </cat>
- <cat>
- <name>Modulators</name>
- <block>digital_cpmmod_bc</block>
- <block>digital_gfsk_mod</block>
- <block>digital_gfsk_demod</block>
- <block>digital_gmskmod_bc</block>
- <block>digital_gmsk_mod</block>
- <block>digital_gmsk_demod</block>
- <block>digital_constellation_modulator</block>
- <block>digital_constellation_receiver_cb</block>
- <block>variable_constellation</block>
- <block>variable_constellation_rect</block>
- <block>variable_modulate_vector</block>
- </cat>
- <cat>
- <name>Packet Operators</name>
- <block>digital_correlate_access_code_tag_bb</block>
- <block>digital_correlate_access_code_xx_ts</block>
- <block>digital_crc32_bb</block>
- <block>digital_crc32_async_bb</block>
- <block>digital_framer_sink_1</block>
- <block>variable_header_format_default</block>
- <block>digital_protocol_formatter_async</block>
- <block>digital_protocol_formatter_bb</block>
- <block>digital_protocol_parser_b</block>
- <block>digital_header_payload_demux</block>
- <block>digital_packet_headergenerator_bb</block>
- <block>digital_packet_headergenerator_bb_default</block>
- <block>digital_packet_headerparser_b</block>
- <block>digital_packet_headerparser_b_default</block>
- <block>digital_packet_sink</block>
- <block>digital_hdlc_framer_pb</block>
- <block>digital_hdlc_deframer_bp</block>
- <block>digital_simple_framer</block>
- <block>digital_simple_correlator</block>
- </cat>
- <cat>
- <name>OFDM</name>
- <block>digital_ofdm_mod</block>
- <block>digital_ofdm_demod</block>
- <block>digital_ofdm_carrier_allocator_cvc</block>
- <block>digital_ofdm_chanest_vcvc</block>
- <block>digital_ofdm_cyclic_prefixer</block>
- <block>digital_ofdm_frame_acquisition</block>
- <block>digital_ofdm_frame_equalizer_vcvc</block>
- <block>digital_ofdm_frame_sink</block>
- <block>digital_ofdm_insert_preamble</block>
- <block>digital_ofdm_rx</block>
- <block>digital_ofdm_sampler</block>
- <block>digital_ofdm_serializer_vcc</block>
- <block>digital_ofdm_sync_pn</block>
- <block>digital_ofdm_sync_sc_cfb</block>
- <block>digital_ofdm_tx</block>
- </cat>
- <cat>
- <name>Symbol Coding</name>
- <block>digital_binary_slicer_fb</block>
- <block>digital_chunks_to_symbols_xx</block>
- <block>digital_constellation_decoder_cb</block>
- <block>digital_constellation_receiver_cb</block>
- <block>digital_constellation_soft_decoder_cf</block>
- <block>digital_diff_decoder_bb</block>
- <block>digital_diff_encoder_bb</block>
- <block>digital_diff_phasor_cc</block>
- <block>digital_map_bb</block>
- </cat>
- <cat>
- <name>Synchronizers</name>
- <block>digital_clock_recovery_mm_xx</block>
- <block>digital_costas_loop_cc</block>
- <block>digital_fll_band_edge_cc</block>
- <block>digital_pfb_clock_sync_xxx</block>
- <block>digital_pn_correlator_cc</block>
- <block>digital_symbol_sync_xx</block>
- <block>digital_corr_est_cc</block>
- </cat>
- <cat>
- <name>Waveform Generators</name>
- <block>digital_glfsr_source_x</block>
- </cat>
- <cat>
- <name>Deprecated</name>
- <block>digital_correlate_access_code_bb</block>
- <block>digital_simple_framer</block>
- <block>digital_simple_correlator</block>
- </cat>
-</cat>
diff --git a/gr-digital/grc/digital_burst_shaper.block.yml b/gr-digital/grc/digital_burst_shaper.block.yml
new file mode 100644
index 0000000000..a6d7defb4b
--- /dev/null
+++ b/gr-digital/grc/digital_burst_shaper.block.yml
@@ -0,0 +1,50 @@
+id: digital_burst_shaper_xx
+label: Burst Shaper
+category: '[Core]/Packet Operators'
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [float, complex]
+ option_attributes:
+ fcn: [ff, cc]
+ taps: [float_vector, complex_vector]
+ hide: part
+- id: window
+ label: Window Taps
+ dtype: ${ type.taps }
+ default: ([])
+- id: pre_padding
+ label: Pre-padding Length
+ dtype: int
+ default: '0'
+- id: post_padding
+ label: Post-padding Length
+ dtype: int
+ default: '0'
+- id: insert_phasing
+ label: Insert phasing symbols
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+- id: length_tag_name
+ label: Length Tag Name
+ dtype: string
+ default: '"packet_len"'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.burst_shaper_${type.fcn}(${window}, ${pre_padding}, ${post_padding},
+ ${insert_phasing}, ${length_tag_name})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_burst_shaper.xml b/gr-digital/grc/digital_burst_shaper.xml
deleted file mode 100644
index 95e1bcbc77..0000000000
--- a/gr-digital/grc/digital_burst_shaper.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>Burst Shaper</name>
- <key>digital_burst_shaper_xx</key>
- <category>[Core]/Packet Operators</category>
- <import>from gnuradio import digital</import>
- <make>digital.burst_shaper_$(type.fcn)($window, $pre_padding, $post_padding, $insert_phasing, $length_tag_name)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- <opt>taps:float_vector</opt>
- </option>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- <opt>taps:complex_vector</opt>
- </option>
- </param>
- <param>
- <name>Window Taps</name>
- <key>window</key>
- <value>([])</value>
- <type>$(type.taps)</type>
- </param>
- <param>
- <name>Pre-padding Length</name>
- <key>pre_padding</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Post-padding Length</name>
- <key>post_padding</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Insert phasing symbols</name>
- <key>insert_phasing</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- </param>
- <param>
- <name>Length Tag Name</name>
- <key>length_tag_name</key>
- <value>"packet_len"</value>
- <type>string</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_chunks_to_symbols.block.yml b/gr-digital/grc/digital_chunks_to_symbols.block.yml
new file mode 100644
index 0000000000..35b5ee94c6
--- /dev/null
+++ b/gr-digital/grc/digital_chunks_to_symbols.block.yml
@@ -0,0 +1,53 @@
+id: digital_chunks_to_symbols_xx
+label: Chunks to Symbols
+
+parameters:
+- id: in_type
+ label: Input Type
+ dtype: enum
+ options: [int, short, byte]
+ option_attributes:
+ fcn: [i, s, b]
+ hide: part
+- id: out_type
+ label: Output Type
+ dtype: enum
+ options: [complex, float]
+ option_attributes:
+ fcn: [c, f]
+ table: [complex_vector, real_vector]
+ hide: part
+- id: symbol_table
+ label: Symbol Table
+ dtype: ${ out_type.table }
+- id: dimension
+ label: Dimension
+ dtype: int
+ default: '2'
+- id: num_ports
+ label: Num Ports
+ dtype: int
+ default: '1'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ in_type }
+ multiplicity: ${ num_ports }
+
+outputs:
+- domain: stream
+ dtype: ${ out_type }
+ multiplicity: ${ num_ports }
+
+asserts:
+- ${ num_ports > 0 }
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.chunks_to_symbols_${in_type.fcn}${out_type.fcn}(${symbol_table},
+ ${dimension})
+ callbacks:
+ - set_symbol_table(${symbol_table})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_chunks_to_symbols.xml b/gr-digital/grc/digital_chunks_to_symbols.xml
deleted file mode 100644
index 9c6f952ec0..0000000000
--- a/gr-digital/grc/digital_chunks_to_symbols.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Chunks to Symbols
-###################################################
- -->
-<block>
- <name>Chunks to Symbols</name>
- <key>digital_chunks_to_symbols_xx</key>
- <import>from gnuradio import digital</import>
- <make>digital.chunks_to_symbols_$(in_type.fcn)$(out_type.fcn)($symbol_table, $dimension)</make>
- <callback>set_symbol_table($symbol_table)</callback>
- <param>
- <name>Input Type</name>
- <key>in_type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:b</opt>
- </option>
- </param>
- <param>
- <name>Output Type</name>
- <key>out_type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- <opt>table:complex_vector</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- <opt>table:real_vector</opt>
- </option>
- </param>
- <param>
- <name>Symbol Table</name>
- <key>symbol_table</key>
- <type>$out_type.table</type>
- </param>
- <param>
- <name>Dimension</name>
- <key>dimension</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Num Ports</name>
- <key>num_ports</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$num_ports &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$in_type</type>
- <nports>$num_ports</nports>
- </sink>
- <source>
- <name>out</name>
- <type>$out_type</type>
- <nports>$num_ports</nports>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_clock_recovery_mm_xx.block.yml b/gr-digital/grc/digital_clock_recovery_mm_xx.block.yml
new file mode 100644
index 0000000000..f4b8a9439d
--- /dev/null
+++ b/gr-digital/grc/digital_clock_recovery_mm_xx.block.yml
@@ -0,0 +1,51 @@
+id: digital_clock_recovery_mm_xx
+label: Clock Recovery MM
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float]
+ option_attributes:
+ fcn: [cc, ff]
+ hide: part
+- id: omega
+ label: Omega
+ dtype: real
+ default: samp_per_sym*(1+0.0)
+- id: gain_omega
+ label: Gain Omega
+ dtype: real
+ default: 0.25*0.175*0.175
+- id: mu
+ label: Mu
+ dtype: real
+ default: '0.5'
+- id: gain_mu
+ label: Gain Mu
+ dtype: real
+ default: '0.175'
+- id: omega_relative_limit
+ label: Omega Relative Limit
+ dtype: real
+ default: '0.005'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.clock_recovery_mm_${type.fcn}(${omega}, ${gain_omega}, ${mu}, ${gain_mu},
+ ${omega_relative_limit})
+ callbacks:
+ - set_omega(${omega})
+ - set_gain_omega(${gain_omega})
+ - set_mu(${mu})
+ - set_gain_mu(${gain_mu})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_clock_recovery_mm_xx.xml b/gr-digital/grc/digital_clock_recovery_mm_xx.xml
deleted file mode 100644
index a0857686be..0000000000
--- a/gr-digital/grc/digital_clock_recovery_mm_xx.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Clock Recovery MM
-###################################################
- -->
-<block>
- <name>Clock Recovery MM</name>
- <key>digital_clock_recovery_mm_xx</key>
- <import>from gnuradio import digital</import>
- <make>digital.clock_recovery_mm_$(type.fcn)($omega, $gain_omega, $mu, $gain_mu, $omega_relative_limit)</make>
- <callback>set_omega($omega)</callback>
- <callback>set_gain_omega($gain_omega)</callback>
- <callback>set_mu($mu)</callback>
- <callback>set_gain_mu($gain_mu)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- </param>
- <param>
- <name>Omega</name>
- <key>omega</key>
- <value>samp_per_sym*(1+0.0)</value>
- <type>real</type>
- </param>
- <param>
- <name>Gain Omega</name>
- <key>gain_omega</key>
- <value>0.25*0.175*0.175</value>
- <type>real</type>
- </param>
- <param>
- <name>Mu</name>
- <key>mu</key>
- <value>0.5</value>
- <type>real</type>
- </param>
- <param>
- <name>Gain Mu</name>
- <key>gain_mu</key>
- <value>0.175</value>
- <type>real</type>
- </param>
- <param>
- <name>Omega Relative Limit</name>
- <key>omega_relative_limit</key>
- <value>0.005</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_cma_equalizer_cc.block.yml b/gr-digital/grc/digital_cma_equalizer_cc.block.yml
new file mode 100644
index 0000000000..64e83390d5
--- /dev/null
+++ b/gr-digital/grc/digital_cma_equalizer_cc.block.yml
@@ -0,0 +1,33 @@
+id: digital_cma_equalizer_cc
+label: CMA Equalizer
+
+parameters:
+- id: num_taps
+ label: Num. Taps
+ dtype: int
+- id: modulus
+ label: Modulus
+ dtype: real
+- id: mu
+ label: Gain
+ dtype: real
+- id: sps
+ label: Samples per Symbol
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.cma_equalizer_cc(${num_taps}, ${modulus}, ${mu}, ${sps})
+ callbacks:
+ - set_gain(${mu})
+ - set_modulus(${modulus})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_cma_equalizer_cc.xml b/gr-digital/grc/digital_cma_equalizer_cc.xml
deleted file mode 100644
index 118c18e294..0000000000
--- a/gr-digital/grc/digital_cma_equalizer_cc.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## CMA Equalizer
-###################################################
- -->
-<block>
- <name>CMA Equalizer</name>
- <key>digital_cma_equalizer_cc</key>
- <import>from gnuradio import digital</import>
- <make>digital.cma_equalizer_cc($num_taps, $modulus, $mu, $sps)</make>
- <callback>set_gain($mu)</callback>
- <callback>set_modulus($modulus)</callback>
- <param>
- <name>Num. Taps</name>
- <key>num_taps</key>
- <type>int</type>
- </param>
- <param>
- <name>Modulus</name>
- <key>modulus</key>
- <type>real</type>
- </param>
- <param>
- <name>Gain</name>
- <key>mu</key>
- <type>real</type>
- </param>
- <param>
- <name>Samples per Symbol</name>
- <key>sps</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_constellation.block.yml b/gr-digital/grc/digital_constellation.block.yml
new file mode 100644
index 0000000000..b604140888
--- /dev/null
+++ b/gr-digital/grc/digital_constellation.block.yml
@@ -0,0 +1,72 @@
+id: variable_constellation
+label: Constellation Object
+category: Modulators
+
+parameters:
+- id: type
+ label: Constellation Type
+ dtype: enum
+ options: [calcdist, bpsk, qpsk, dqpsk, 8psk, 16qam]
+ option_labels: [Variable Constellation, BPSK, QPSK, DQPSK, 8PSK, 16QAM]
+- id: sym_map
+ label: Symbol Map
+ dtype: int_vector
+ default: '[0, 1, 3, 2]'
+ hide: ${ ( 'none' if str(type) == "calcdist" else 'all') }
+- id: const_points
+ label: Constellation Points
+ dtype: complex_vector
+ default: '[-1-1j, -1+1j, 1+1j, 1-1j]'
+ hide: ${ ( 'none' if str(type) == "calcdist" else 'all') }
+- id: rot_sym
+ label: Rotational Symmetry
+ dtype: int
+ default: '4'
+ hide: ${ ( 'none' if str(type) == "calcdist" else 'all') }
+- id: dims
+ label: Dimensionality
+ dtype: int
+ default: '1'
+ hide: ${ ( 'none' if str(type) == "calcdist" else 'all') }
+- id: precision
+ label: Soft Decisions Precision
+ dtype: int
+ default: '8'
+ hide: part
+- id: soft_dec_lut
+ label: Soft Decisions LUT
+ dtype: raw
+ default: None
+ hide: ${ ('part' if str(soft_dec_lut) == 'None' else 'none') }
+value: ${ digital.constellation_calcdist(const_points, sym_map, rot_sym, dims) if (str(type) == "calcdist") else digital.constellation_type}
+
+templates:
+ imports: from gnuradio import digital
+ var_make: '
+
+ % if str(type) == "calcdist":
+
+ self.${id} = ${id} = digital.constellation_calcdist(${const_points}, ${sym_map},
+ ${rot_sym}, ${dims}).base()
+
+ % else:
+
+ self.${id} = ${id} = digital.constellation_${type}().base()
+
+ % endif
+
+
+ % if str(soft_dec_lut).lower() == ''"auto"'' or str(soft_dec_lut).lower()
+ == "''auto''":
+
+ self.${id}.gen_soft_dec_lut(${precision})
+
+ % elif str(soft_dec_lut) != ''None'':
+
+ self.${id}.set_soft_dec_lut(${soft_dec_lut}, ${precision})
+
+ % endif
+
+ '
+
+file_format: 1
diff --git a/gr-digital/grc/digital_constellation.xml b/gr-digital/grc/digital_constellation.xml
deleted file mode 100644
index ef5364d248..0000000000
--- a/gr-digital/grc/digital_constellation.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Create a Constellation Object
-###################################################
- -->
-<block>
- <name>Constellation Object</name>
- <key>variable_constellation</key>
- <category>Modulators</category>
- <import>from gnuradio import digital</import>
- <var_make>
-#if str($type) == "calcdist"
-self.$(id) = $(id) = digital.constellation_calcdist($const_points, $sym_map, $rot_sym, $dims).base()
-#else
-self.$(id) = $(id) = digital.constellation_$(type)().base()
-#end if
-
-#if str($soft_dec_lut).lower() == '"auto"' or str($soft_dec_lut).lower() == "'auto'"
-self.$(id).gen_soft_dec_lut($precision)
-#else if str($soft_dec_lut) != 'None'
-self.$(id).set_soft_dec_lut($soft_dec_lut, $precision)
-#end if
-</var_make>
-
-<var_value>
-#if str($type) == "calcdist"
-digital.constellation_calcdist($const_points, $sym_map, $rot_sym, $dims)
-#else
-digital.constellation_$(type)()
-#end if
-</var_value>
-
- <make></make>
- <!--<callback></callback>-->
-
- <param>
- <name>Constellation Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Variable Constellation</name>
- <key>calcdist</key>
- </option>
- <option>
- <name>BPSK</name>
- <key>bpsk</key>
- </option>
- <option>
- <name>QPSK</name>
- <key>qpsk</key>
- </option>
- <option>
- <name>DQPSK</name>
- <key>dqpsk</key>
- </option>
- <option>
- <name>8PSK</name>
- <key>8psk</key>
- </option>
- <option>
- <name>16QAM</name>
- <key>16qam</key>
- </option>
-
- </param>
- <param>
- <name>Symbol Map</name>
- <key>sym_map</key>
- <value>[0, 1, 3, 2]</value>
- <type>int_vector</type>
- <hide> #if str($type) == "calcdist" then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Constellation Points</name>
- <key>const_points</key>
- <value>[-1-1j, -1+1j, 1+1j, 1-1j]</value>
- <type>complex_vector</type>
- <hide> #if str($type) == "calcdist" then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Rotational Symmetry</name>
- <key>rot_sym</key>
- <value>4</value>
- <type>int</type>
- <hide> #if str($type) == "calcdist" then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimensionality</name>
- <key>dims</key>
- <value>1</value>
- <type>int</type>
- <hide> #if str($type) == "calcdist" then 'none' else 'all' #</hide>
- </param>
- <param>
- <name>Soft Decisions Precision</name>
- <key>precision</key>
- <value>8</value>
- <type>int</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Soft Decisions LUT</name>
- <key>soft_dec_lut</key>
- <value>None</value>
- <type>raw</type>
- <hide>#if str($soft_dec_lut) == 'None' then 'part' else 'none'#</hide>
- </param>
-</block>
diff --git a/gr-digital/grc/digital_constellation_decoder_cb.block.yml b/gr-digital/grc/digital_constellation_decoder_cb.block.yml
new file mode 100644
index 0000000000..59d312d89a
--- /dev/null
+++ b/gr-digital/grc/digital_constellation_decoder_cb.block.yml
@@ -0,0 +1,21 @@
+id: digital_constellation_decoder_cb
+label: Constellation Decoder
+
+parameters:
+- id: constellation
+ label: Constellation Object
+ dtype: raw
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.constellation_decoder_cb(${constellation})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_constellation_decoder_cb.xml b/gr-digital/grc/digital_constellation_decoder_cb.xml
deleted file mode 100644
index c7353e2888..0000000000
--- a/gr-digital/grc/digital_constellation_decoder_cb.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Constellation Decoder
-###################################################
- -->
-<block>
- <name>Constellation Decoder</name>
- <key>digital_constellation_decoder_cb</key>
- <import>from gnuradio import digital</import>
- <make>digital.constellation_decoder_cb($constellation)</make>
- <param>
- <name>Constellation Object</name>
- <key>constellation</key>
- <type>raw</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_constellation_modulator.block.yml b/gr-digital/grc/digital_constellation_modulator.block.yml
new file mode 100644
index 0000000000..8be84449ad
--- /dev/null
+++ b/gr-digital/grc/digital_constellation_modulator.block.yml
@@ -0,0 +1,58 @@
+id: digital_constellation_modulator
+label: Constellation Modulator
+
+parameters:
+- id: constellation
+ label: Constellation
+ dtype: raw
+- id: differential
+ label: Differential Encoding
+ dtype: bool
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '2'
+- id: excess_bw
+ label: Excess BW
+ dtype: real
+ default: '0.35'
+- id: verbose
+ label: Verbose
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(verbose) == 'False' else 'none') }
+- id: log
+ label: Log
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(log) == 'False' else 'none') }
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: |-
+ digital.generic_mod(
+ constellation=${constellation},
+ differential=${differential},
+ samples_per_symbol=${samples_per_symbol},
+ pre_diff_code=True,
+ excess_bw=${excess_bw},
+ verbose=${verbose},
+ log=${log},
+ )
+
+file_format: 1
diff --git a/gr-digital/grc/digital_constellation_modulator.xml b/gr-digital/grc/digital_constellation_modulator.xml
deleted file mode 100644
index 9905197f93..0000000000
--- a/gr-digital/grc/digital_constellation_modulator.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2013 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-## Modulates any given constellation object
-###################################################
- -->
-<block>
- <name>Constellation Modulator</name>
- <key>digital_constellation_modulator</key>
- <import>from gnuradio import digital</import>
- <make>digital.generic_mod(
- constellation=$constellation,
- differential=$differential,
- samples_per_symbol=$samples_per_symbol,
- pre_diff_code=True,
- excess_bw=$excess_bw,
- verbose=$verbose,
- log=$log,
- )</make>
- <param>
- <name>Constellation</name>
- <key>constellation</key>
- <type>raw</type>
- </param>
- <param>
- <name>Differential Encoding</name>
- <key>differential</key>
- <value>True</value>
- <type>bool</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Excess BW</name>
- <key>excess_bw</key>
- <value>0.35</value>
- <type>real</type>
- </param>
- <param>
- <name>Verbose</name>
- <key>verbose</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Log</name>
- <key>log</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($log) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_constellation_receiver_cb.block.yml b/gr-digital/grc/digital_constellation_receiver_cb.block.yml
new file mode 100644
index 0000000000..6221348805
--- /dev/null
+++ b/gr-digital/grc/digital_constellation_receiver_cb.block.yml
@@ -0,0 +1,62 @@
+id: digital_constellation_receiver_cb
+label: Constellation Receiver
+
+parameters:
+- id: constellation
+ label: Constellation Object
+ dtype: raw
+- id: loop_bw
+ label: Loop Bandwidth
+ dtype: real
+- id: fmin
+ label: Minimum Freq Deviation
+ dtype: real
+- id: fmax
+ label: Maximum Freq Deviation
+ dtype: real
+- id: showports
+ label: Show Msg Ports
+ dtype: enum
+ default: 'True'
+ options: ['False', 'True']
+ option_labels: ['Yes', 'No']
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: complex
+- domain: message
+ id: set_constellation
+ optional: true
+ hide: ${ showports }
+- domain: message
+ id: rotate_phase
+ optional: true
+ hide: ${ showports }
+
+outputs:
+- domain: stream
+ dtype: byte
+- label: error
+ domain: stream
+ dtype: float
+ optional: true
+- label: phase
+ domain: stream
+ dtype: float
+ optional: true
+- label: frequency
+ domain: stream
+ dtype: float
+ optional: true
+- label: symbol
+ domain: stream
+ dtype: complex
+ optional: true
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.constellation_receiver_cb(${constellation}, ${loop_bw}, ${fmin},
+ ${fmax})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_constellation_receiver_cb.xml b/gr-digital/grc/digital_constellation_receiver_cb.xml
deleted file mode 100644
index 06155ecae9..0000000000
--- a/gr-digital/grc/digital_constellation_receiver_cb.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Constellation Receiver
-###################################################
- -->
-<block>
- <name>Constellation Receiver</name>
- <key>digital_constellation_receiver_cb</key>
- <import>from gnuradio import digital</import>
- <make>digital.constellation_receiver_cb($constellation, $loop_bw, $fmin, $fmax)</make>
- <param>
- <name>Constellation Object</name>
- <key>constellation</key>
- <type>raw</type>
- </param>
- <param>
- <name>Loop Bandwidth</name>
- <key>loop_bw</key>
- <type>real</type>
- </param>
- <param>
- <name>Minimum Freq Deviation</name>
- <key>fmin</key>
- <type>real</type>
- </param>
- <param>
- <name>Maximum Freq Deviation</name>
- <key>fmax</key>
- <type>real</type>
- </param>
-
- <param>
- <name>Show Msg Ports</name>
- <key>showports</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>False</key>
- </option>
- <option>
- <name>No</name>
- <key>True</key>
- </option>
- </param>
-
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
-
- <sink>
- <name>set_constellation</name>
- <type>message</type>
- <optional>1</optional>
- <hide>$showports</hide>
- </sink>
-
- <sink>
- <name>rotate_phase</name>
- <type>message</type>
- <optional>1</optional>
- <hide>$showports</hide>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
- <source>
- <name>error</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>phase</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>frequency</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>symbol</name>
- <type>complex</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_constellation_rect.block.yml b/gr-digital/grc/digital_constellation_rect.block.yml
new file mode 100644
index 0000000000..e9e58001c2
--- /dev/null
+++ b/gr-digital/grc/digital_constellation_rect.block.yml
@@ -0,0 +1,65 @@
+id: variable_constellation_rect
+label: Constellation Rect. Object
+category: Modulators
+
+parameters:
+- id: sym_map
+ label: Symbol Map
+ dtype: int_vector
+ default: '[0, 1, 3, 2]'
+- id: const_points
+ label: Constellation Points
+ dtype: complex_vector
+ default: '[-1-1j, -1+1j, 1+1j, 1-1j]'
+- id: rot_sym
+ label: Rotational Symmetry
+ dtype: int
+ default: '4'
+- id: real_sect
+ label: Real Sectors
+ dtype: int
+ default: '2'
+- id: imag_sect
+ label: Imaginary Sectors
+ dtype: int
+ default: '2'
+- id: w_real_sect
+ label: Width Real Sectors
+ dtype: int
+ default: '1'
+- id: w_imag_sect
+ label: Width Imaginary Sectors
+ dtype: int
+ default: '1'
+- id: precision
+ label: Soft bits precision
+ dtype: int
+ default: '8'
+ hide: part
+- id: soft_dec_lut
+ label: Soft Decisions LUT
+ dtype: raw
+ default: None
+ hide: ${ ('part' if str(soft_dec_lut) == 'None' else 'none') }
+value: ${ digital.constellation_rect(const_points, sym_map, rot_sym, real_sect, imag_sect,
+ w_real_sect, w_imag_sect) }
+
+templates:
+ imports: from gnuradio import digital
+ var_make: 'self.${id} = ${id} = digital.constellation_rect(${const_points}, ${sym_map},
+ ${rot_sym}, ${real_sect}, ${imag_sect}, ${w_real_sect}, ${w_imag_sect}).base()
+
+ % if str(soft_dec_lut).lower() == ''"auto"'' or str(soft_dec_lut).lower()
+ == "''auto''":
+
+ self.${id}.gen_soft_dec_lut(${precision})
+
+ % elif str(soft_dec_lut) != ''None'':
+
+ self.${id}.set_soft_dec_lut(${soft_dec_lut}, ${precision})
+
+ % endif
+
+ '
+
+file_format: 1
diff --git a/gr-digital/grc/digital_constellation_rect.xml b/gr-digital/grc/digital_constellation_rect.xml
deleted file mode 100644
index 9e50fe84b7..0000000000
--- a/gr-digital/grc/digital_constellation_rect.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Create a Rectangular Constellation Object
-###################################################
- -->
-<block>
- <name>Constellation Rect. Object</name>
- <key>variable_constellation_rect</key>
- <category>Modulators</category>
- <import>from gnuradio import digital</import>
- <var_make>self.$(id) = $(id) = digital.constellation_rect($const_points, $sym_map, $rot_sym, $real_sect, $imag_sect, $w_real_sect, $w_imag_sect).base()
-#if str($soft_dec_lut).lower() == '"auto"' or str($soft_dec_lut).lower() == "'auto'"
-self.$(id).gen_soft_dec_lut($precision)
-#else if str($soft_dec_lut) != 'None'
-self.$(id).set_soft_dec_lut($soft_dec_lut, $precision)
-#end if
-</var_make>
-
- <var_value>digital.constellation_rect($const_points, $sym_map, $rot_sym, $real_sect, $imag_sect, $w_real_sect, $w_imag_sect)</var_value>
-
- <make></make>
- <!--<callback>set_softbits($softbits_lut, $precision)</callback>-->
-
- <param>
- <name>Symbol Map</name>
- <key>sym_map</key>
- <value>[0, 1, 3, 2]</value>
- <type>int_vector</type>
- </param>
-
- <param>
- <name>Constellation Points</name>
- <key>const_points</key>
- <value>[-1-1j, -1+1j, 1+1j, 1-1j]</value>
- <type>complex_vector</type>
- </param>
-
- <param>
- <name>Rotational Symmetry</name>
- <key>rot_sym</key>
- <value>4</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Real Sectors</name>
- <key>real_sect</key>
- <value>2</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Imaginary Sectors</name>
- <key>imag_sect</key>
- <value>2</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Width Real Sectors</name>
- <key>w_real_sect</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Width Imaginary Sectors</name>
- <key>w_imag_sect</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Soft bits precision</name>
- <key>precision</key>
- <value>8</value>
- <type>int</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Soft Decisions LUT</name>
- <key>soft_dec_lut</key>
- <value>None</value>
- <type>raw</type>
- <hide>#if str($soft_dec_lut) == 'None' then 'part' else 'none'#</hide>
- </param>
-</block>
diff --git a/gr-digital/grc/digital_constellation_soft_decoder_cf.block.yml b/gr-digital/grc/digital_constellation_soft_decoder_cf.block.yml
new file mode 100644
index 0000000000..2b352a7f21
--- /dev/null
+++ b/gr-digital/grc/digital_constellation_soft_decoder_cf.block.yml
@@ -0,0 +1,21 @@
+id: digital_constellation_soft_decoder_cf
+label: Constellation Soft Decoder
+
+parameters:
+- id: constellation
+ label: Constellation Object
+ dtype: raw
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.constellation_soft_decoder_cf(${constellation})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_constellation_soft_decoder_cf.xml b/gr-digital/grc/digital_constellation_soft_decoder_cf.xml
deleted file mode 100644
index 6b0995acc9..0000000000
--- a/gr-digital/grc/digital_constellation_soft_decoder_cf.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Constellation Decoder, soft bits out
-###################################################
- -->
-<block>
- <name>Constellation Soft Decoder</name>
- <key>digital_constellation_soft_decoder_cf</key>
- <import>from gnuradio import digital</import>
- <make>digital.constellation_soft_decoder_cf($constellation)</make>
- <param>
- <name>Constellation Object</name>
- <key>constellation</key>
- <type>raw</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_corr_est_cc.block.yml b/gr-digital/grc/digital_corr_est_cc.block.yml
new file mode 100644
index 0000000000..b3a9698d18
--- /dev/null
+++ b/gr-digital/grc/digital_corr_est_cc.block.yml
@@ -0,0 +1,38 @@
+id: digital_corr_est_cc
+label: Correlation Estimator
+
+parameters:
+- id: symbols
+ label: Symbols
+ dtype: complex_vector
+- id: sps
+ label: Samples per Symbol
+ dtype: float
+- id: mark_delay
+ label: Tag marking delay
+ dtype: int
+- id: threshold
+ label: Threshold
+ dtype: float
+ default: '0.9'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+- label: corr
+ domain: stream
+ dtype: complex
+ optional: true
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.corr_est_cc(${symbols}, ${sps}, ${mark_delay}, ${threshold})
+ callbacks:
+ - set_mark_delay(${mark_delay})
+ - set_threshold(${threshold})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_corr_est_cc.xml b/gr-digital/grc/digital_corr_est_cc.xml
deleted file mode 100644
index 1a1c449efb..0000000000
--- a/gr-digital/grc/digital_corr_est_cc.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>Correlation Estimator</name>
- <key>digital_corr_est_cc</key>
- <import>from gnuradio import digital</import>
- <make>digital.corr_est_cc($symbols, $sps, $mark_delay, $threshold)</make>
- <callback>set_mark_delay($mark_delay)</callback>
- <callback>set_threshold($threshold)</callback>
-
- <param>
- <name>Symbols</name>
- <key>symbols</key>
- <type>complex_vector</type>
- </param>
-
- <param>
- <name>Samples per Symbol</name>
- <key>sps</key>
- <type>float</type>
- </param>
-
- <param>
- <name>Tag marking delay</name>
- <key>mark_delay</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Threshold</name>
- <key>threshold</key>
- <value>0.9</value>
- <type>float</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-
- <source>
- <name>corr</name>
- <type>complex</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_correlate_access_code_bb.block.yml b/gr-digital/grc/digital_correlate_access_code_bb.block.yml
new file mode 100644
index 0000000000..57394668b6
--- /dev/null
+++ b/gr-digital/grc/digital_correlate_access_code_bb.block.yml
@@ -0,0 +1,25 @@
+id: digital_correlate_access_code_bb
+label: Correlate Access Code
+
+parameters:
+- id: access_code
+ label: Access Code
+ dtype: string
+ default: '101010'
+- id: threshold
+ label: Threshold
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.correlate_access_code_bb(${access_code}, ${threshold})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_correlate_access_code_bb.xml b/gr-digital/grc/digital_correlate_access_code_bb.xml
deleted file mode 100644
index 3941834c40..0000000000
--- a/gr-digital/grc/digital_correlate_access_code_bb.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Correlate Access Code
-###################################################
- -->
-<block>
- <name>Correlate Access Code</name>
- <key>digital_correlate_access_code_bb</key>
- <import>from gnuradio import digital</import>
- <make>digital.correlate_access_code_bb($access_code, $threshold)</make>
- <param>
- <name>Access Code</name>
- <key>access_code</key>
- <value>101010</value>
- <type>string</type>
- </param>
- <param>
- <name>Threshold</name>
- <key>threshold</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_correlate_access_code_tag_xx.block.yml b/gr-digital/grc/digital_correlate_access_code_tag_xx.block.yml
new file mode 100644
index 0000000000..6cf81129c2
--- /dev/null
+++ b/gr-digital/grc/digital_correlate_access_code_tag_xx.block.yml
@@ -0,0 +1,40 @@
+id: digital_correlate_access_code_tag_xx
+label: Correlate Access Code - Tag
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [byte, float]
+ option_attributes:
+ fcn: [bb, ff]
+ hide: part
+- id: access_code
+ label: Access Code
+ dtype: string
+ default: '101010'
+- id: threshold
+ label: Threshold
+ dtype: int
+- id: tagname
+ label: Tag Name
+ dtype: string
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.correlate_access_code_tag_${type.fcn}(${access_code}, ${threshold},
+ ${tagname})
+ callbacks:
+ - set_access_code(${access_code})
+ - set_threshold(${threshold})
+ - set_tagname(${tagname})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_correlate_access_code_tag_xx.xml b/gr-digital/grc/digital_correlate_access_code_tag_xx.xml
deleted file mode 100644
index c7c137187f..0000000000
--- a/gr-digital/grc/digital_correlate_access_code_tag_xx.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Correlate Access Code
-###################################################
- -->
-<block>
- <name>Correlate Access Code - Tag</name>
- <key>digital_correlate_access_code_tag_xx</key>
- <import>from gnuradio import digital</import>
- <make>digital.correlate_access_code_tag_$(type.fcn)($access_code, $threshold, $tagname)</make>
- <callback>set_access_code($access_code)</callback>
- <callback>set_threshold($threshold)</callback>
- <callback>set_tagname($tagname)</callback>
-
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:bb</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- </param>
- <param>
- <name>Access Code</name>
- <key>access_code</key>
- <value>101010</value>
- <type>string</type>
- </param>
- <param>
- <name>Threshold</name>
- <key>threshold</key>
- <type>int</type>
- </param>
- <param>
- <name>Tag Name</name>
- <key>tagname</key>
- <type>string</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_correlate_access_code_xx_ts.block.yml b/gr-digital/grc/digital_correlate_access_code_xx_ts.block.yml
new file mode 100644
index 0000000000..d51ba9833d
--- /dev/null
+++ b/gr-digital/grc/digital_correlate_access_code_xx_ts.block.yml
@@ -0,0 +1,37 @@
+id: digital_correlate_access_code_xx_ts
+label: Correlate Access Code - Tag Stream
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [float, byte]
+ option_attributes:
+ fcn: [ff, bb]
+ hide: part
+- id: access_code
+ label: Access Code
+ dtype: string
+ default: '101010'
+- id: threshold
+ label: Threshold
+ dtype: int
+- id: tagname
+ label: Tag Name
+ dtype: string
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import digital
+ make: |-
+ digital.correlate_access_code_${type.fcn}_ts(${access_code},
+ ${threshold}, ${tagname})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_correlate_access_code_xx_ts.xml b/gr-digital/grc/digital_correlate_access_code_xx_ts.xml
deleted file mode 100644
index 467c2c84d9..0000000000
--- a/gr-digital/grc/digital_correlate_access_code_xx_ts.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Correlate Access Code - to tag stream
-###################################################
- -->
-<block>
- <name>Correlate Access Code - Tag Stream</name>
- <key>digital_correlate_access_code_xx_ts</key>
- <import>from gnuradio import digital</import>
- <make>digital.correlate_access_code_$(type.fcn)_ts($access_code,
- $threshold, $tagname)</make>
-
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:bb</opt>
- </option>
- </param>
-
- <param>
- <name>Access Code</name>
- <key>access_code</key>
- <value>101010</value>
- <type>string</type>
- </param>
-
- <param>
- <name>Threshold</name>
- <key>threshold</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Tag Name</name>
- <key>tagname</key>
- <type>string</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_costas_loop_cc.block.yml b/gr-digital/grc/digital_costas_loop_cc.block.yml
new file mode 100644
index 0000000000..6134774f32
--- /dev/null
+++ b/gr-digital/grc/digital_costas_loop_cc.block.yml
@@ -0,0 +1,48 @@
+id: digital_costas_loop_cc
+label: Costas Loop
+
+parameters:
+- id: w
+ label: Loop Bandwidth
+ dtype: real
+- id: order
+ label: Order
+ dtype: int
+- id: use_snr
+ label: Use SNR
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: complex
+- domain: message
+ id: noise
+ optional: true
+
+outputs:
+- domain: stream
+ dtype: complex
+- label: frequency
+ domain: stream
+ dtype: float
+ optional: true
+- label: phase
+ domain: stream
+ dtype: float
+ optional: true
+- label: error
+ domain: stream
+ dtype: float
+ optional: true
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.costas_loop_cc(${w}, ${order}, ${use_snr})
+ callbacks:
+ - set_loop_bandwidth(${w})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_costas_loop_cc.xml b/gr-digital/grc/digital_costas_loop_cc.xml
deleted file mode 100644
index 23e3ca9037..0000000000
--- a/gr-digital/grc/digital_costas_loop_cc.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Costas Loop
-###################################################
- -->
-<block>
- <name>Costas Loop</name>
- <key>digital_costas_loop_cc</key>
- <import>from gnuradio import digital</import>
- <make>digital.costas_loop_cc($w, $order, $use_snr)</make>
- <callback>set_loop_bandwidth($w)</callback>
-
- <param>
- <name>Loop Bandwidth</name>
- <key>w</key>
- <type>real</type>
- </param>
-
- <param>
- <name>Order</name>
- <key>order</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Use SNR</name>
- <key>use_snr</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
-
- <sink>
- <name>noise</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
-
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-
- <!-- Optional Outputs -->
- <source>
- <name>frequency</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>phase</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>error</name>
- <type>float</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_cpmmod_bc.block.yml b/gr-digital/grc/digital_cpmmod_bc.block.yml
new file mode 100644
index 0000000000..1a6435289b
--- /dev/null
+++ b/gr-digital/grc/digital_cpmmod_bc.block.yml
@@ -0,0 +1,40 @@
+id: digital_cpmmod_bc
+label: Continuous Phase Modulation
+
+parameters:
+- id: type
+ label: CPM Type
+ dtype: enum
+ options: [analog.cpm.LREC, analog.cpm.LRC, analog.cpm.LSRC, analog.cpm.TFM, analog.cpm.GAUSSIAN]
+ option_labels: [L-REC (Rectangular phase response), L-RC (Raised Cosine), L-SRC
+ (Spectral raised cosine), TFM (Tamed frequency modulation), Gaussian]
+- id: mod_index
+ label: Modulation Index
+ dtype: real
+ default: '0.5'
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '4'
+- id: L
+ label: Pulse Duration (Symbols)
+ dtype: int
+ default: '4'
+- id: beta
+ label: Phase Response Parameter (BT or Beta)
+ dtype: real
+ default: '0.3'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import gr, digital, analog
+ make: digital.cpmmod_bc(${type}, ${mod_index}, ${samples_per_symbol}, ${L}, ${beta})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_cpmmod_bc.xml b/gr-digital/grc/digital_cpmmod_bc.xml
deleted file mode 100644
index 94231775c9..0000000000
--- a/gr-digital/grc/digital_cpmmod_bc.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Continuous Phase Modulation
-###################################################
- -->
-<block>
- <name>Continuous Phase Modulation</name>
- <key>digital_cpmmod_bc</key>
- <import>from gnuradio import gr, digital, analog</import>
- <make>digital.cpmmod_bc($type, $mod_index, $samples_per_symbol, $L, $beta)</make>
- <param>
- <name>CPM Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>L-REC (Rectangular phase response)</name>
- <key>analog.cpm.LREC</key>
- </option>
- <option>
- <name>L-RC (Raised Cosine)</name>
- <key>analog.cpm.LRC</key>
- </option>
- <option>
- <name>L-SRC (Spectral raised cosine)</name>
- <key>analog.cpm.LSRC</key>
- </option>
- <option>
- <name>TFM (Tamed frequency modulation)</name>
- <key>analog.cpm.TFM</key>
- </option>
- <option>
- <name>Gaussian</name>
- <key>analog.cpm.GAUSSIAN</key>
- </option>
- </param>
- <param>
- <name>Modulation Index</name>
- <key>mod_index</key>
- <value>0.5</value>
- <type>real</type>
- </param>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>4</value>
- <type>int</type>
- </param>
- <param>
- <name>Pulse Duration (Symbols)</name>
- <key>L</key>
- <value>4</value>
- <type>int</type>
- </param>
- <param>
- <name>Phase Response Parameter (BT or Beta)</name>
- <key>beta</key>
- <value>0.3</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_crc32_async_bb.block.yml b/gr-digital/grc/digital_crc32_async_bb.block.yml
new file mode 100644
index 0000000000..19b6732217
--- /dev/null
+++ b/gr-digital/grc/digital_crc32_async_bb.block.yml
@@ -0,0 +1,25 @@
+id: digital_crc32_async_bb
+label: Async CRC32
+
+parameters:
+- id: check
+ label: Mode
+ dtype: enum
+ options: ['False', 'True']
+ option_labels: [Generate CRC, Check CRC]
+
+inputs:
+- domain: message
+ id: in
+ optional: true
+
+outputs:
+- domain: message
+ id: out
+ optional: true
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.crc32_async_bb(${check})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_crc32_async_bb.xml b/gr-digital/grc/digital_crc32_async_bb.xml
deleted file mode 100644
index 84c60e60ab..0000000000
--- a/gr-digital/grc/digital_crc32_async_bb.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<block>
- <name>Async CRC32</name>
- <key>digital_crc32_async_bb</key>
- <import>from gnuradio import digital</import>
- <make>digital.crc32_async_bb($check)</make>
-
- <param>
- <name>Mode</name>
- <key>check</key>
- <type>enum</type>
- <option>
- <name>Generate CRC</name>
- <key>False</key>
- </option>
- <option>
- <name>Check CRC</name>
- <key>True</key>
- </option>
- </param>
-
- <sink>
- <name>in</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
-
- <source>
- <name>out</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_crc32_bb.block.yml b/gr-digital/grc/digital_crc32_bb.block.yml
new file mode 100644
index 0000000000..9e88a63f74
--- /dev/null
+++ b/gr-digital/grc/digital_crc32_bb.block.yml
@@ -0,0 +1,33 @@
+id: digital_crc32_bb
+label: Stream CRC32
+
+parameters:
+- id: check
+ label: Mode
+ dtype: enum
+ options: ['False', 'True']
+ option_labels: [Generate CRC, Check CRC]
+- id: lengthtagname
+ label: Length tag name
+ dtype: string
+ default: '"packet_len"'
+- id: packed
+ label: Packed
+ dtype: bool
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.crc32_bb(${check}, ${lengthtagname}, ${packed})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_crc32_bb.xml b/gr-digital/grc/digital_crc32_bb.xml
deleted file mode 100644
index 2fc6c248d3..0000000000
--- a/gr-digital/grc/digital_crc32_bb.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<block>
- <name>Stream CRC32</name>
- <key>digital_crc32_bb</key>
- <import>from gnuradio import digital</import>
- <make>digital.crc32_bb($check, $lengthtagname, $packed)</make>
- <param>
- <name>Mode</name>
- <key>check</key>
- <type>enum</type>
- <option>
- <name>Generate CRC</name>
- <key>False</key>
- </option>
- <option>
- <name>Check CRC</name>
- <key>True</key>
- </option>
- </param>
- <param>
- <name>Length tag name</name>
- <key>lengthtagname</key>
- <value>"packet_len"</value>
- <type>string</type>
- </param>
- <param>
- <name>Packed</name>
- <key>packed</key>
- <value>True</value>
- <type>bool</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_descrambler_bb.block.yml b/gr-digital/grc/digital_descrambler_bb.block.yml
new file mode 100644
index 0000000000..fbb65c0ddc
--- /dev/null
+++ b/gr-digital/grc/digital_descrambler_bb.block.yml
@@ -0,0 +1,30 @@
+id: digital_descrambler_bb
+label: Descrambler
+
+parameters:
+- id: mask
+ label: Mask
+ dtype: hex
+ default: '0x8A'
+- id: seed
+ label: Seed
+ dtype: hex
+ default: '0x7F'
+- id: len
+ label: Length
+ dtype: int
+ default: '7'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.descrambler_bb(${mask}, ${seed}, ${len})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_descrambler_bb.xml b/gr-digital/grc/digital_descrambler_bb.xml
deleted file mode 100644
index 4f52c79645..0000000000
--- a/gr-digital/grc/digital_descrambler_bb.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Descrambler
-###################################################
- -->
-<block>
- <name>Descrambler</name>
- <key>digital_descrambler_bb</key>
- <import>from gnuradio import digital</import>
- <make>digital.descrambler_bb($mask, $seed, $len)</make>
- <param>
- <name>Mask</name>
- <key>mask</key>
- <value>0x8A</value>
- <type>hex</type>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0x7F</value>
- <type>hex</type>
- </param>
- <param>
- <name>Length</name>
- <key>len</key>
- <value>7</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_diff_decoder_bb.block.yml b/gr-digital/grc/digital_diff_decoder_bb.block.yml
new file mode 100644
index 0000000000..4b988007c2
--- /dev/null
+++ b/gr-digital/grc/digital_diff_decoder_bb.block.yml
@@ -0,0 +1,21 @@
+id: digital_diff_decoder_bb
+label: Differential Decoder
+
+parameters:
+- id: modulus
+ label: Modulus
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.diff_decoder_bb(${modulus})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_diff_decoder_bb.xml b/gr-digital/grc/digital_diff_decoder_bb.xml
deleted file mode 100644
index a7c94b834c..0000000000
--- a/gr-digital/grc/digital_diff_decoder_bb.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Differential Decoder
-###################################################
- -->
-<block>
- <name>Differential Decoder</name>
- <key>digital_diff_decoder_bb</key>
- <import>from gnuradio import digital</import>
- <make>digital.diff_decoder_bb($modulus)</make>
- <param>
- <name>Modulus</name>
- <key>modulus</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_diff_encoder_bb.block.yml b/gr-digital/grc/digital_diff_encoder_bb.block.yml
new file mode 100644
index 0000000000..45a5c71302
--- /dev/null
+++ b/gr-digital/grc/digital_diff_encoder_bb.block.yml
@@ -0,0 +1,21 @@
+id: digital_diff_encoder_bb
+label: Differential Encoder
+
+parameters:
+- id: modulus
+ label: Modulus
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.diff_encoder_bb(${modulus})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_diff_encoder_bb.xml b/gr-digital/grc/digital_diff_encoder_bb.xml
deleted file mode 100644
index 3885bed9aa..0000000000
--- a/gr-digital/grc/digital_diff_encoder_bb.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Differential Encoder
-###################################################
- -->
-<block>
- <name>Differential Encoder</name>
- <key>digital_diff_encoder_bb</key>
- <import>from gnuradio import digital</import>
- <make>digital.diff_encoder_bb($modulus)</make>
- <param>
- <name>Modulus</name>
- <key>modulus</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_diff_phasor_cc.block.yml b/gr-digital/grc/digital_diff_phasor_cc.block.yml
new file mode 100644
index 0000000000..e63c718277
--- /dev/null
+++ b/gr-digital/grc/digital_diff_phasor_cc.block.yml
@@ -0,0 +1,16 @@
+id: digital_diff_phasor_cc
+label: Differential Phasor
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.diff_phasor_cc()
+
+file_format: 1
diff --git a/gr-digital/grc/digital_diff_phasor_cc.xml b/gr-digital/grc/digital_diff_phasor_cc.xml
deleted file mode 100644
index 506bf400ba..0000000000
--- a/gr-digital/grc/digital_diff_phasor_cc.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Differential Phasor
-###################################################
- -->
-<block>
- <name>Differential Phasor</name>
- <key>digital_diff_phasor_cc</key>
- <import>from gnuradio import digital</import>
- <make>digital.diff_phasor_cc()</make>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_dxpsk_demod.block.yml b/gr-digital/grc/digital_dxpsk_demod.block.yml
new file mode 100644
index 0000000000..99e7f40e6c
--- /dev/null
+++ b/gr-digital/grc/digital_dxpsk_demod.block.yml
@@ -0,0 +1,75 @@
+id: digital_dxpsk_demod
+label: DPSK Demod
+category: '[Core]/Deprecated'
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [dbpsk, dqpsk]
+ option_labels: [DBPSK, DQPSK]
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '2'
+- id: excess_bw
+ label: Excess BW
+ dtype: real
+ default: '0.35'
+- id: freq_bw
+ label: FLL Bandwidth
+ dtype: real
+ default: 6.28/100.0
+- id: phase_bw
+ label: Phase Loop Bandwidth
+ dtype: real
+ default: 6.28/100.0
+- id: timing_bw
+ label: Timing Bandwidth
+ dtype: real
+ default: 6.28/100.0
+- id: mod_code
+ label: Gray Code
+ dtype: enum
+ options: ['"gray"', '"none"']
+ option_labels: ['Yes', 'No']
+- id: verbose
+ label: Verbose
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(verbose) == 'False' else 'none') }
+- id: log
+ label: Log
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(log) == 'False' else 'none') }
+- id: sync_out
+ label: Sync Out
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: "digital.${type}_demod(\n\tsamples_per_symbol=${samples_per_symbol},\n\t\
+ excess_bw=${excess_bw},\n\tfreq_bw=${freq_bw},\n\tphase_bw=${phase_bw},\n\t\
+ timing_bw=${timing_bw},\n\tmod_code=${mod_code},\n\tverbose=${verbose},\n\t\
+ log=${log}\n)"
+ callbacks:
+ - clock_recov.set_loop_bandwidth(${phase_bw})
+ - time_recov.set_loop_bandwidth(${timing_bw})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_dxpsk_demod.xml b/gr-digital/grc/digital_dxpsk_demod.xml
deleted file mode 100644
index 12089ad771..0000000000
--- a/gr-digital/grc/digital_dxpsk_demod.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2009,2010,2011 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##DPSK2 Mod - 2, 4
-###################################################
- -->
-<block>
- <name>DPSK Demod</name>
- <key>digital_dxpsk_demod</key>
- <category>[Core]/Deprecated</category>
- <import>from gnuradio import digital</import>
- <make>digital.$(type)_demod(
- samples_per_symbol=$samples_per_symbol,
- excess_bw=$excess_bw,
- freq_bw=$freq_bw,
- phase_bw=$phase_bw,
- timing_bw=$timing_bw,
- mod_code=$mod_code,
- verbose=$verbose,
- log=$log
-)</make>
- <callback>clock_recov.set_loop_bandwidth($phase_bw)</callback>
- <callback>time_recov.set_loop_bandwidth($timing_bw)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>DBPSK</name>
- <key>dbpsk</key>
- </option>
- <option>
- <name>DQPSK</name>
- <key>dqpsk</key>
- </option>
- </param>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Excess BW</name>
- <key>excess_bw</key>
- <value>0.35</value>
- <type>real</type>
- </param>
- <param>
- <name>FLL Bandwidth</name>
- <key>freq_bw</key>
- <value>6.28/100.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Phase Loop Bandwidth</name>
- <key>phase_bw</key>
- <value>6.28/100.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Timing Bandwidth</name>
- <key>timing_bw</key>
- <value>6.28/100.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Gray Code</name>
- <key>mod_code</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>"gray"</key>
- </option>
- <option>
- <name>No</name>
- <key>"none"</key>
- </option>
- </param>
- <param>
- <name>Verbose</name>
- <key>verbose</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Log</name>
- <key>log</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($log) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Sync Out</name>
- <key>sync_out</key>
- <value>False</value>
- <type>bool</type>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_dxpsk_mod.block.yml b/gr-digital/grc/digital_dxpsk_mod.block.yml
new file mode 100644
index 0000000000..577baa4426
--- /dev/null
+++ b/gr-digital/grc/digital_dxpsk_mod.block.yml
@@ -0,0 +1,52 @@
+id: digital_dxpsk_mod
+label: DPSK Mod
+category: '[Core]/Deprecated'
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [dbpsk, dqpsk]
+ option_labels: [DBPSK, DQPSK]
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '2'
+- id: excess_bw
+ label: Excess BW
+ dtype: real
+ default: '0.35'
+- id: mod_code
+ label: Gray Code
+ dtype: enum
+ options: ['"gray"', '"none"']
+ option_labels: ['Yes', 'No']
+- id: verbose
+ label: Verbose
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(verbose) == 'False' else 'none') }
+- id: log
+ label: Log
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(log) == 'False' else 'none') }
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: "digital.${type}_mod(\n\tsamples_per_symbol=${samples_per_symbol},\n\texcess_bw=${excess_bw},\n\
+ \tmod_code=${mod_code},\n\tverbose=${verbose},\n\tlog=${log})\n\t"
+
+file_format: 1
diff --git a/gr-digital/grc/digital_dxpsk_mod.xml b/gr-digital/grc/digital_dxpsk_mod.xml
deleted file mode 100644
index 4198b8805c..0000000000
--- a/gr-digital/grc/digital_dxpsk_mod.xml
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2009,2010,2011 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-## DPSK Mod - 2, 4
-###################################################
- -->
-<block>
- <name>DPSK Mod</name>
- <key>digital_dxpsk_mod</key>
- <category>[Core]/Deprecated</category>
- <import>from gnuradio import digital</import>
- <make>digital.$(type)_mod(
- samples_per_symbol=$samples_per_symbol,
- excess_bw=$excess_bw,
- mod_code=$mod_code,
- verbose=$verbose,
- log=$log)
- </make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>DBPSK</name>
- <key>dbpsk</key>
- </option>
- <option>
- <name>DQPSK</name>
- <key>dqpsk</key>
- </option>
- </param>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Excess BW</name>
- <key>excess_bw</key>
- <value>0.35</value>
- <type>real</type>
- </param>
- <param>
- <name>Gray Code</name>
- <key>mod_code</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>"gray"</key>
- </option>
- <option>
- <name>No</name>
- <key>"none"</key>
- </option>
- </param>
- <param>
- <name>Verbose</name>
- <key>verbose</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Log</name>
- <key>log</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($log) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_fll_band_edge_cc.block.yml b/gr-digital/grc/digital_fll_band_edge_cc.block.yml
new file mode 100644
index 0000000000..63b64912bb
--- /dev/null
+++ b/gr-digital/grc/digital_fll_band_edge_cc.block.yml
@@ -0,0 +1,53 @@
+id: digital_fll_band_edge_cc
+label: FLL Band-Edge
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [cc]
+ option_labels: [Complex->Complex]
+ option_attributes:
+ input: [complex]
+ output: [complex]
+ hide: part
+- id: samps_per_sym
+ label: Samples Per Symbol
+ dtype: real
+- id: rolloff
+ label: Filter Rolloff Factor
+ dtype: real
+- id: filter_size
+ label: Prototype Filter Size
+ dtype: int
+- id: w
+ label: Loop Bandwidth
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+- label: freq
+ domain: stream
+ dtype: float
+ optional: true
+- label: phase
+ domain: stream
+ dtype: float
+ optional: true
+- label: error
+ domain: stream
+ dtype: float
+ optional: true
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.fll_band_edge_cc(${samps_per_sym}, ${rolloff}, ${filter_size}, ${w})
+ callbacks:
+ - set_loop_bandwidth(${w})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_fll_band_edge_cc.xml b/gr-digital/grc/digital_fll_band_edge_cc.xml
deleted file mode 100644
index e4da773db2..0000000000
--- a/gr-digital/grc/digital_fll_band_edge_cc.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## FLL using Band-Edge Filters
-###################################################
- -->
-<block>
- <name>FLL Band-Edge</name>
- <key>digital_fll_band_edge_cc</key>
- <import>from gnuradio import digital</import>
- <make>digital.fll_band_edge_cc($samps_per_sym, $rolloff, $filter_size, $w)</make>
- <callback>set_loop_bandwidth($w)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex</name>
- <key>cc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- </option>
- </param>
-
- <param>
- <name>Samples Per Symbol</name>
- <key>samps_per_sym</key>
- <type>real</type>
- </param>
- <param>
- <name>Filter Rolloff Factor</name>
- <key>rolloff</key>
- <type>real</type>
- </param>
- <param>
- <name>Prototype Filter Size</name>
- <key>filter_size</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Loop Bandwidth</name>
- <key>w</key>
- <type>real</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <source>
- <name>freq</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>phase</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>error</name>
- <type>float</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_framer_sink_1.block.yml b/gr-digital/grc/digital_framer_sink_1.block.yml
new file mode 100644
index 0000000000..a05a1bf0e7
--- /dev/null
+++ b/gr-digital/grc/digital_framer_sink_1.block.yml
@@ -0,0 +1,17 @@
+id: digital_framer_sink_1
+label: Framer Sink 1
+
+parameters:
+- id: target_queue
+ label: Target Message Queue
+ dtype: raw
+
+inputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.framer_sink_1(${target_queue})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_framer_sink_1.xml b/gr-digital/grc/digital_framer_sink_1.xml
deleted file mode 100644
index 9124e6d0dc..0000000000
--- a/gr-digital/grc/digital_framer_sink_1.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Framer Sink 1
-###################################################
- -->
-<block>
- <name>Framer Sink 1</name>
- <key>digital_framer_sink_1</key>
- <import>from gnuradio import digital</import>
- <make>digital.framer_sink_1($target_queue)</make>
- <param>
- <name>Target Message Queue</name>
- <key>target_queue</key>
- <type>raw</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
-</block>
diff --git a/gr-digital/grc/digital_gfsk_demod.block.yml b/gr-digital/grc/digital_gfsk_demod.block.yml
new file mode 100644
index 0000000000..9f6b33c6af
--- /dev/null
+++ b/gr-digital/grc/digital_gfsk_demod.block.yml
@@ -0,0 +1,58 @@
+id: digital_gfsk_demod
+label: GFSK Demod
+
+parameters:
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '2'
+- id: sensitivity
+ label: Sensitivity
+ dtype: real
+ default: '1.0'
+- id: gain_mu
+ label: Gain Mu
+ dtype: real
+ default: '0.175'
+- id: mu
+ label: Mu
+ dtype: real
+ default: '0.5'
+- id: omega_relative_limit
+ label: Omega Relative Limit
+ dtype: real
+ default: '0.005'
+- id: freq_error
+ label: Freq Error
+ dtype: real
+ default: '0.0'
+- id: verbose
+ label: Verbose
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(verbose) == 'False' else 'none') }
+- id: log
+ label: Log
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(log) == 'False' else 'none') }
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: "digital.gfsk_demod(\n\tsamples_per_symbol=${samples_per_symbol},\n\tsensitivity=${sensitivity},\n\
+ \tgain_mu=${gain_mu},\n\tmu=${mu},\n\tomega_relative_limit=${omega_relative_limit},\n\
+ \tfreq_error=${freq_error},\n\tverbose=${verbose},\n\tlog=${log},\n)"
+
+file_format: 1
diff --git a/gr-digital/grc/digital_gfsk_demod.xml b/gr-digital/grc/digital_gfsk_demod.xml
deleted file mode 100644
index cbea39e63e..0000000000
--- a/gr-digital/grc/digital_gfsk_demod.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##GFSK Demod
-###################################################
- -->
-<block>
- <name>GFSK Demod</name>
- <key>digital_gfsk_demod</key>
- <import>from gnuradio import digital</import>
- <make>digital.gfsk_demod(
- samples_per_symbol=$samples_per_symbol,
- sensitivity=$sensitivity,
- gain_mu=$gain_mu,
- mu=$mu,
- omega_relative_limit=$omega_relative_limit,
- freq_error=$freq_error,
- verbose=$verbose,
- log=$log,
-)</make>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Sensitivity</name>
- <key>sensitivity</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Gain Mu</name>
- <key>gain_mu</key>
- <value>0.175</value>
- <type>real</type>
- </param>
- <param>
- <name>Mu</name>
- <key>mu</key>
- <value>0.5</value>
- <type>real</type>
- </param>
- <param>
- <name>Omega Relative Limit</name>
- <key>omega_relative_limit</key>
- <value>0.005</value>
- <type>real</type>
- </param>
- <param>
- <name>Freq Error</name>
- <key>freq_error</key>
- <value>0.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Verbose</name>
- <key>verbose</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Log</name>
- <key>log</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($log) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_gfsk_mod.block.yml b/gr-digital/grc/digital_gfsk_mod.block.yml
new file mode 100644
index 0000000000..3dda769a4c
--- /dev/null
+++ b/gr-digital/grc/digital_gfsk_mod.block.yml
@@ -0,0 +1,45 @@
+id: digital_gfsk_mod
+label: GFSK Mod
+
+parameters:
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '2'
+- id: sensitivity
+ label: Sensitivity
+ dtype: real
+ default: '1.0'
+- id: bt
+ label: BT
+ dtype: real
+ default: '0.35'
+- id: verbose
+ label: Verbose
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(verbose) == 'False' else 'none') }
+- id: log
+ label: Log
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(log) == 'False' else 'none') }
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: "digital.gfsk_mod(\n\tsamples_per_symbol=${samples_per_symbol},\n\tsensitivity=${sensitivity},\n\
+ \tbt=${bt},\n\tverbose=${verbose},\n\tlog=${log},\n)"
+
+file_format: 1
diff --git a/gr-digital/grc/digital_gfsk_mod.xml b/gr-digital/grc/digital_gfsk_mod.xml
deleted file mode 100644
index 08e2c84790..0000000000
--- a/gr-digital/grc/digital_gfsk_mod.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##GFSK Mod
-###################################################
- -->
-<block>
- <name>GFSK Mod</name>
- <key>digital_gfsk_mod</key>
- <import>from gnuradio import digital</import>
- <make>digital.gfsk_mod(
- samples_per_symbol=$samples_per_symbol,
- sensitivity=$sensitivity,
- bt=$bt,
- verbose=$verbose,
- log=$log,
-)</make>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Sensitivity</name>
- <key>sensitivity</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>BT</name>
- <key>bt</key>
- <value>0.35</value>
- <type>real</type>
- </param>
- <param>
- <name>Verbose</name>
- <key>verbose</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Log</name>
- <key>log</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($log) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_glfsr_source_x.block.yml b/gr-digital/grc/digital_glfsr_source_x.block.yml
new file mode 100644
index 0000000000..716b77b02c
--- /dev/null
+++ b/gr-digital/grc/digital_glfsr_source_x.block.yml
@@ -0,0 +1,37 @@
+id: digital_glfsr_source_x
+label: GLFSR Source
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [float, byte]
+ option_attributes:
+ fcn: [f, b]
+ hide: part
+- id: degree
+ label: Degree
+ dtype: int
+- id: repeat
+ label: Repeat
+ dtype: enum
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: mask
+ label: Mask
+ dtype: int
+ default: '0'
+- id: seed
+ label: Seed
+ dtype: int
+ default: '1'
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.glfsr_source_${type.fcn}(${degree}, ${repeat}, ${mask}, ${seed})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_glfsr_source_x.xml b/gr-digital/grc/digital_glfsr_source_x.xml
deleted file mode 100644
index 654dfa71c0..0000000000
--- a/gr-digital/grc/digital_glfsr_source_x.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##GLFSR Source
-###################################################
- -->
-<block>
- <name>GLFSR Source</name>
- <key>digital_glfsr_source_x</key>
- <import>from gnuradio import digital</import>
- <make>digital.glfsr_source_$(type.fcn)($degree, $repeat, $mask, $seed)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:b</opt>
- </option>
- </param>
- <param>
- <name>Degree</name>
- <key>degree</key>
- <type>int</type>
- </param>
- <param>
- <name>Repeat</name>
- <key>repeat</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Mask</name>
- <key>mask</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>1</value>
- <type>int</type>
- </param>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_gmsk_demod.block.yml b/gr-digital/grc/digital_gmsk_demod.block.yml
new file mode 100644
index 0000000000..bbd3b4148a
--- /dev/null
+++ b/gr-digital/grc/digital_gmsk_demod.block.yml
@@ -0,0 +1,54 @@
+id: digital_gmsk_demod
+label: GMSK Demod
+
+parameters:
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '2'
+- id: gain_mu
+ label: Gain Mu
+ dtype: real
+ default: '0.175'
+- id: mu
+ label: Mu
+ dtype: real
+ default: '0.5'
+- id: omega_relative_limit
+ label: Omega Relative Limit
+ dtype: real
+ default: '0.005'
+- id: freq_error
+ label: Freq Error
+ dtype: real
+ default: '0.0'
+- id: verbose
+ label: Verbose
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(verbose) == 'False' else 'none') }
+- id: log
+ label: Log
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(log) == 'False' else 'none') }
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: "digital.gmsk_demod(\n\tsamples_per_symbol=${samples_per_symbol},\n\tgain_mu=${gain_mu},\n\
+ \tmu=${mu},\n\tomega_relative_limit=${omega_relative_limit},\n\tfreq_error=${freq_error},\n\
+ \tverbose=${verbose},\n\tlog=${log},\n)"
+
+file_format: 1
diff --git a/gr-digital/grc/digital_gmsk_demod.xml b/gr-digital/grc/digital_gmsk_demod.xml
deleted file mode 100644
index 4d57f1a17a..0000000000
--- a/gr-digital/grc/digital_gmsk_demod.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##GMSK Demod
-###################################################
- -->
-<block>
- <name>GMSK Demod</name>
- <key>digital_gmsk_demod</key>
- <import>from gnuradio import digital</import>
- <make>digital.gmsk_demod(
- samples_per_symbol=$samples_per_symbol,
- gain_mu=$gain_mu,
- mu=$mu,
- omega_relative_limit=$omega_relative_limit,
- freq_error=$freq_error,
- verbose=$verbose,
- log=$log,
-)</make>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Gain Mu</name>
- <key>gain_mu</key>
- <value>0.175</value>
- <type>real</type>
- </param>
- <param>
- <name>Mu</name>
- <key>mu</key>
- <value>0.5</value>
- <type>real</type>
- </param>
- <param>
- <name>Omega Relative Limit</name>
- <key>omega_relative_limit</key>
- <value>0.005</value>
- <type>real</type>
- </param>
- <param>
- <name>Freq Error</name>
- <key>freq_error</key>
- <value>0.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Verbose</name>
- <key>verbose</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Log</name>
- <key>log</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($log) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_gmsk_mod.block.yml b/gr-digital/grc/digital_gmsk_mod.block.yml
new file mode 100644
index 0000000000..0b0941bae0
--- /dev/null
+++ b/gr-digital/grc/digital_gmsk_mod.block.yml
@@ -0,0 +1,41 @@
+id: digital_gmsk_mod
+label: GMSK Mod
+
+parameters:
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '2'
+- id: bt
+ label: BT
+ dtype: real
+ default: '0.35'
+- id: verbose
+ label: Verbose
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(verbose) == 'False' else 'none') }
+- id: log
+ label: Log
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(log) == 'False' else 'none') }
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: "digital.gmsk_mod(\n\tsamples_per_symbol=${samples_per_symbol},\n\tbt=${bt},\n\
+ \tverbose=${verbose},\n\tlog=${log},\n)"
+
+file_format: 1
diff --git a/gr-digital/grc/digital_gmsk_mod.xml b/gr-digital/grc/digital_gmsk_mod.xml
deleted file mode 100644
index 77f52ca2f2..0000000000
--- a/gr-digital/grc/digital_gmsk_mod.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##GMSK Mod
-###################################################
- -->
-<block>
- <name>GMSK Mod</name>
- <key>digital_gmsk_mod</key>
- <import>from gnuradio import digital</import>
- <make>digital.gmsk_mod(
- samples_per_symbol=$samples_per_symbol,
- bt=$bt,
- verbose=$verbose,
- log=$log,
-)</make>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>BT</name>
- <key>bt</key>
- <value>0.35</value>
- <type>real</type>
- </param>
- <param>
- <name>Verbose</name>
- <key>verbose</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Log</name>
- <key>log</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($log) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_gmskmod_bc.block.yml b/gr-digital/grc/digital_gmskmod_bc.block.yml
new file mode 100644
index 0000000000..4b9a511078
--- /dev/null
+++ b/gr-digital/grc/digital_gmskmod_bc.block.yml
@@ -0,0 +1,30 @@
+id: digital_gmskmod_bc
+label: GMSK Modulator
+
+parameters:
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '2'
+- id: bt
+ label: 3 dB Time-Bandwith Product
+ dtype: real
+ default: '0.3'
+- id: L
+ label: Pulse Duration (Symbols)
+ dtype: int
+ default: '4'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.gmskmod_bc(${samples_per_symbol}, ${L}, ${bt})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_gmskmod_bc.xml b/gr-digital/grc/digital_gmskmod_bc.xml
deleted file mode 100644
index 6cda687f76..0000000000
--- a/gr-digital/grc/digital_gmskmod_bc.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## GMSK
-###################################################
- -->
-<block>
- <name>GMSK Modulator</name>
- <key>digital_gmskmod_bc</key>
- <import>from gnuradio import digital</import>
- <make>digital.gmskmod_bc($samples_per_symbol, $L, $bt)</make>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>3 dB Time-Bandwith Product</name>
- <key>bt</key>
- <value>0.3</value>
- <type>real</type>
- </param>
- <param>
- <name>Pulse Duration (Symbols)</name>
- <key>L</key>
- <value>4</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_hdlc_deframer_bp.block.yml b/gr-digital/grc/digital_hdlc_deframer_bp.block.yml
new file mode 100644
index 0000000000..38b31ca53f
--- /dev/null
+++ b/gr-digital/grc/digital_hdlc_deframer_bp.block.yml
@@ -0,0 +1,26 @@
+id: digital_hdlc_deframer_bp
+label: HDLC Deframer
+
+parameters:
+- id: min
+ label: Min length
+ dtype: int
+ default: '32'
+- id: max
+ label: Max length
+ dtype: int
+ default: '500'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: message
+ id: out
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.hdlc_deframer_bp(${min}, ${max})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_hdlc_deframer_bp.xml b/gr-digital/grc/digital_hdlc_deframer_bp.xml
deleted file mode 100644
index 3e78b891df..0000000000
--- a/gr-digital/grc/digital_hdlc_deframer_bp.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>HDLC Deframer</name>
- <key>digital_hdlc_deframer_bp</key>
- <import>from gnuradio import digital</import>
- <make>digital.hdlc_deframer_bp($min, $max)</make>
- <param>
- <name>Min length</name>
- <key>min</key>
- <value>32</value>
- <type>int</type>
- </param>
- <param>
- <name>Max length</name>
- <key>max</key>
- <value>500</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>message</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_hdlc_framer_pb.block.yml b/gr-digital/grc/digital_hdlc_framer_pb.block.yml
new file mode 100644
index 0000000000..f775a489ef
--- /dev/null
+++ b/gr-digital/grc/digital_hdlc_framer_pb.block.yml
@@ -0,0 +1,21 @@
+id: digital_hdlc_framer_pb
+label: HDLC Framer
+
+parameters:
+- id: frame_tag_name
+ label: Frame tag name
+ dtype: string
+
+inputs:
+- domain: message
+ id: in
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.hdlc_framer_pb(${frame_tag_name})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_hdlc_framer_pb.xml b/gr-digital/grc/digital_hdlc_framer_pb.xml
deleted file mode 100644
index 8dc122d581..0000000000
--- a/gr-digital/grc/digital_hdlc_framer_pb.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>HDLC Framer</name>
- <key>digital_hdlc_framer_pb</key>
- <import>from gnuradio import digital</import>
- <make>digital.hdlc_framer_pb($frame_tag_name)</make>
- <param>
- <name>Frame tag name</name>
- <key>frame_tag_name</key>
- <type>string</type>
- </param>
- <sink>
- <name>in</name>
- <type>message</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_header_payload_demux.block.yml b/gr-digital/grc/digital_header_payload_demux.block.yml
new file mode 100644
index 0000000000..4f69a08f29
--- /dev/null
+++ b/gr-digital/grc/digital_header_payload_demux.block.yml
@@ -0,0 +1,85 @@
+id: digital_header_payload_demux
+label: Header/Payload Demux
+
+parameters:
+- id: header_len
+ label: Header Length (Symbols)
+ dtype: int
+- id: header_padding
+ label: Header Padding (Uncertainty / Symbols)
+ dtype: int
+ default: '0'
+- id: items_per_symbol
+ label: Items per symbol
+ dtype: int
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: guard_interval
+ label: Guard Interval (items)
+ dtype: int
+ default: '0'
+ hide: ${ ('none' if guard_interval else 'part') }
+- id: length_tag_key
+ label: Length tag key
+ dtype: string
+ default: '"frame_len"'
+- id: trigger_tag_key
+ label: Trigger tag key
+ dtype: string
+ default: '""'
+ hide: ${ ('none' if trigger_tag_key else 'part') }
+- id: output_symbols
+ label: Output Format
+ dtype: enum
+ options: ['False', 'True']
+ option_labels: [Items, Symbols]
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ itemsize: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: timing_tag_key
+ label: Timing tag key
+ dtype: string
+ default: '"rx_time"'
+- id: samp_rate
+ label: Sampling Rate
+ dtype: int
+ default: samp_rate
+- id: special_tags
+ label: Special Tag Keys
+ dtype: raw
+ default: (,)
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+- label: trigger
+ domain: stream
+ dtype: byte
+ optional: true
+- domain: message
+ id: header_data
+
+outputs:
+- label: out_hdr
+ domain: stream
+ dtype: ${ type }
+ vlen: '${ {True: items_per_symbol, False: 1}[output_symbols] }'
+- label: out_payload
+ domain: stream
+ dtype: ${ type }
+ vlen: '${ {True: items_per_symbol, False: 1}[output_symbols] }'
+
+templates:
+ imports: from gnuradio import digital
+ make: "digital.header_payload_demux(\n\t ${header_len},\n\t ${items_per_symbol},\n\
+ \t ${guard_interval},\n\t ${length_tag_key},\n\t ${trigger_tag_key},\n\t\
+ \ ${output_symbols},\n\t ${type.itemsize},\n\t ${timing_tag_key},\n \
+ \ ${samp_rate},\n ${special_tags},\n ${header_padding},\n\
+ \ )"
+
+file_format: 1
diff --git a/gr-digital/grc/digital_header_payload_demux.xml b/gr-digital/grc/digital_header_payload_demux.xml
deleted file mode 100644
index a2fe80e621..0000000000
--- a/gr-digital/grc/digital_header_payload_demux.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<block>
- <name>Header/Payload Demux</name>
- <key>digital_header_payload_demux</key>
- <import>from gnuradio import digital</import>
- <make>digital.header_payload_demux(
- $header_len,
- $items_per_symbol,
- $guard_interval,
- $length_tag_key,
- $trigger_tag_key,
- $output_symbols,
- $(type.itemsize),
- $timing_tag_key,
- $samp_rate,
- $special_tags,
- $header_padding,
- )</make>
- <param>
- <name>Header Length (Symbols)</name>
- <key>header_len</key>
- <type>int</type>
- </param>
- <param>
- <name>Header Padding (Uncertainty / Symbols)</name>
- <key>header_padding</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Items per symbol</name>
- <key>items_per_symbol</key>
- <type>int</type>
- </param>
- <param>
- <name>Guard Interval (items)</name>
- <key>guard_interval</key>
- <value>0</value>
- <type>int</type>
- <hide>#if $guard_interval then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Length tag key</name>
- <key>length_tag_key</key>
- <value>"frame_len"</value>
- <type>string</type>
- </param>
- <param>
- <name>Trigger tag key</name>
- <key>trigger_tag_key</key>
- <value>""</value>
- <type>string</type>
- <hide>#if $trigger_tag_key then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Output Format</name>
- <key>output_symbols</key>
- <type>enum</type>
- <option>
- <name>Items</name>
- <key>False</key>
- </option>
- <option>
- <name>Symbols</name>
- <key>True</key>
- </option>
- </param>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>itemsize:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>itemsize:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>itemsize:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>itemsize:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>itemsize:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Timing tag key</name>
- <key>timing_tag_key</key>
- <value>"rx_time"</value>
- <type>string</type>
- </param>
- <param>
- <name>Sampling Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>int</type>
- </param>
- <param>
- <name>Special Tag Keys</name>
- <key>special_tags</key>
- <value>(,)</value>
- <type>raw</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <sink>
- <name>trigger</name>
- <type>byte</type>
- <optional>1</optional>
- </sink>
- <sink>
- <name>header_data</name>
- <type>message</type>
- </sink>
- <source>
- <name>out_hdr</name>
- <type>$type</type>
- <vlen>{True: $items_per_symbol, False: 1}[$output_symbols]</vlen>
- </source>
- <source>
- <name>out_payload</name>
- <type>$type</type>
- <vlen>{True: $items_per_symbol, False: 1}[$output_symbols]</vlen>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_kurtotic_equalizer_cc.block.yml b/gr-digital/grc/digital_kurtotic_equalizer_cc.block.yml
new file mode 100644
index 0000000000..d81aee7d4d
--- /dev/null
+++ b/gr-digital/grc/digital_kurtotic_equalizer_cc.block.yml
@@ -0,0 +1,26 @@
+id: digital_kurtotic_equalizer_cc
+label: Kurtotic Equalizer
+
+parameters:
+- id: num_taps
+ label: Num. Taps
+ dtype: int
+- id: mu
+ label: Mu
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.kurtotic_equalizer_cc(${num_taps}, ${mu})
+ callbacks:
+ - set_gain(${mu})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_kurtotic_equalizer_cc.xml b/gr-digital/grc/digital_kurtotic_equalizer_cc.xml
deleted file mode 100644
index 8c4a2012d2..0000000000
--- a/gr-digital/grc/digital_kurtotic_equalizer_cc.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Kurtotic Equalizer
-###################################################
- -->
-<block>
- <name>Kurtotic Equalizer</name>
- <key>digital_kurtotic_equalizer_cc</key>
- <import>from gnuradio import digital</import>
- <make>digital.kurtotic_equalizer_cc($num_taps, $mu)</make>
- <callback>set_gain($mu)</callback>
- <param>
- <name>Num. Taps</name>
- <key>num_taps</key>
- <type>int</type>
- </param>
- <param>
- <name>Mu</name>
- <key>mu</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml b/gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml
new file mode 100644
index 0000000000..1c44ea2850
--- /dev/null
+++ b/gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml
@@ -0,0 +1,32 @@
+id: digital_lms_dd_equalizer_cc
+label: LMS DD Equalizer
+
+parameters:
+- id: mu
+ label: Gain
+ dtype: real
+- id: num_taps
+ label: Num. Taps
+ dtype: int
+- id: sps
+ label: Samples per Symbol
+ dtype: int
+- id: cnst
+ label: Constellation Object
+ dtype: raw
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.lms_dd_equalizer_cc(${num_taps}, ${mu}, ${sps}, ${cnst})
+ callbacks:
+ - set_gain(${mu})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_lms_dd_equalizer_cc.xml b/gr-digital/grc/digital_lms_dd_equalizer_cc.xml
deleted file mode 100644
index 0fd7d523b8..0000000000
--- a/gr-digital/grc/digital_lms_dd_equalizer_cc.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## LMS DD Equalizer
-###################################################
- -->
-<block>
- <name>LMS DD Equalizer</name>
- <key>digital_lms_dd_equalizer_cc</key>
- <import>from gnuradio import digital</import>
- <make>digital.lms_dd_equalizer_cc($num_taps, $mu, $sps, $cnst)</make>
- <callback>set_gain($mu)</callback>
- <param>
- <name>Gain</name>
- <key>mu</key>
- <type>real</type>
- </param>
- <param>
- <name>Num. Taps</name>
- <key>num_taps</key>
- <type>int</type>
- </param>
- <param>
- <name>Samples per Symbol</name>
- <key>sps</key>
- <type>int</type>
- </param>
- <param>
- <name>Constellation Object</name>
- <key>cnst</key>
- <type>raw</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_map_bb.block.yml b/gr-digital/grc/digital_map_bb.block.yml
new file mode 100644
index 0000000000..8f1a33fb0f
--- /dev/null
+++ b/gr-digital/grc/digital_map_bb.block.yml
@@ -0,0 +1,21 @@
+id: digital_map_bb
+label: Map
+
+parameters:
+- id: map
+ label: Map
+ dtype: int_vector
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.map_bb(${map})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_map_bb.xml b/gr-digital/grc/digital_map_bb.xml
deleted file mode 100644
index 1435c5ac78..0000000000
--- a/gr-digital/grc/digital_map_bb.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Map
-###################################################
- -->
-<block>
- <name>Map</name>
- <key>digital_map_bb</key>
- <import>from gnuradio import digital</import>
- <make>digital.map_bb($map)</make>
- <param>
- <name>Map</name>
- <key>map</key>
- <type>int_vector</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_modulate_vector.block.yml b/gr-digital/grc/digital_modulate_vector.block.yml
new file mode 100644
index 0000000000..a06cc211c8
--- /dev/null
+++ b/gr-digital/grc/digital_modulate_vector.block.yml
@@ -0,0 +1,22 @@
+id: variable_modulate_vector
+label: Modulate Vector
+category: Modulators
+
+parameters:
+- id: mod
+ label: Modulator
+ dtype: raw
+- id: data
+ label: Data vector
+ dtype: int_vector
+- id: taps
+ label: Filter taps
+ dtype: float_vector
+value: ${ digital.modulate_vector_bc(mod .to_basic_block(), data, taps) }
+
+templates:
+ imports: from gnuradio import digital
+ var_make: self.${id} = ${id} = digital.modulate_vector_bc(${mod} .to_basic_block(),
+ ${data}, ${taps})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_modulate_vector.xml b/gr-digital/grc/digital_modulate_vector.xml
deleted file mode 100644
index 91614dd3fd..0000000000
--- a/gr-digital/grc/digital_modulate_vector.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# modulate_vector_bc
-###################################################
- -->
-<block>
- <name>Modulate Vector</name>
- <key>variable_modulate_vector</key>
- <category>Modulators</category>
- <import>from gnuradio import digital</import>
- <var_make>self.$(id) = $(id) = digital.modulate_vector_bc($mod .to_basic_block(), $data, $taps)</var_make>
- <var_value>digital.modulate_vector_bc($mod .to_basic_block(), $data, $taps)</var_value>
- <make></make>
-
- <param>
- <name>Modulator</name>
- <key>mod</key>
- <value></value>
- <type>raw</type>
- </param>
- <param>
- <name>Data vector</name>
- <key>data</key>
- <value></value>
- <type>int_vector</type>
- </param>
- <param>
- <name>Filter taps</name>
- <key>taps</key>
- <value></value>
- <type>float_vector</type>
- </param>
-</block>
diff --git a/gr-digital/grc/digital_mpsk_snr_est_cc.block.yml b/gr-digital/grc/digital_mpsk_snr_est_cc.block.yml
new file mode 100644
index 0000000000..7c39a24927
--- /dev/null
+++ b/gr-digital/grc/digital_mpsk_snr_est_cc.block.yml
@@ -0,0 +1,35 @@
+id: digital_mpsk_snr_est_cc
+label: MPSK SNR Estimator
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: ['0', '1', '2', '3']
+ option_labels: [Simple, Skewness, 2nd and 4th Moment, SVR]
+- id: tag_nsamples
+ label: Samples between tags
+ dtype: int
+ default: '10000'
+- id: alpha
+ label: Filter Alpha
+ dtype: real
+ default: '0.001'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.mpsk_snr_est_cc(${type}, ${tag_nsamples}, ${alpha})
+ callbacks:
+ - set_type(${type})
+ - set_tag_nsamples(${tag_nsamples})
+ - set_alpha(${alpha})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_mpsk_snr_est_cc.xml b/gr-digital/grc/digital_mpsk_snr_est_cc.xml
deleted file mode 100644
index 6039e5b13e..0000000000
--- a/gr-digital/grc/digital_mpsk_snr_est_cc.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##MPSK SNR Estimator
-###################################################
- -->
-<block>
- <name>MPSK SNR Estimator</name>
- <key>digital_mpsk_snr_est_cc</key>
- <import>from gnuradio import digital</import>
- <make>digital.mpsk_snr_est_cc($type, $tag_nsamples, $alpha)</make>
- <callback>set_type($type)</callback>
- <callback>set_tag_nsamples($tag_nsamples)</callback>
- <callback>set_alpha($alpha)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Simple</name>
- <key>0</key>
- </option>
- <option>
- <name>Skewness</name>
- <key>1</key>
- </option>
- <option>
- <name>2nd and 4th Moment</name>
- <key>2</key>
- </option>
- <option>
- <name>SVR</name>
- <key>3</key>
- </option>
- </param>
- <param>
- <name>Samples between tags</name>
- <key>tag_nsamples</key>
- <value>10000</value>
- <type>int</type>
- </param>
- <param>
- <name>Filter Alpha</name>
- <key>alpha</key>
- <value>0.001</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_msk_timing_recovery_cc.block.yml b/gr-digital/grc/digital_msk_timing_recovery_cc.block.yml
new file mode 100644
index 0000000000..3f5ae678c7
--- /dev/null
+++ b/gr-digital/grc/digital_msk_timing_recovery_cc.block.yml
@@ -0,0 +1,42 @@
+id: digital_msk_timing_recovery_cc
+label: MSK Timing Recovery
+
+parameters:
+- id: gain
+ label: Gain
+ dtype: float
+- id: sps
+ label: Samples per symbol
+ dtype: float
+- id: limit
+ label: Error limit
+ dtype: float
+- id: osps
+ label: Output samples per symbol
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+- label: err
+ domain: stream
+ dtype: float
+ optional: true
+- label: omega
+ domain: stream
+ dtype: float
+ optional: true
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.msk_timing_recovery_cc(${sps}, ${gain}, ${limit}, ${osps})
+ callbacks:
+ - set_gain(${gain})
+ - set_sps(${sps})
+ - set_limit(${limit})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_msk_timing_recovery_cc.xml b/gr-digital/grc/digital_msk_timing_recovery_cc.xml
deleted file mode 100644
index cda780d685..0000000000
--- a/gr-digital/grc/digital_msk_timing_recovery_cc.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>MSK Timing Recovery</name>
- <key>digital_msk_timing_recovery_cc</key>
- <import>from gnuradio import digital</import>
- <make>digital.msk_timing_recovery_cc($sps, $gain, $limit, $osps)</make>
- <callback>set_gain($gain)</callback>
- <callback>set_sps($sps)</callback>
- <callback>set_limit($limit)</callback>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <type>float</type>
- </param>
- <param>
- <name>Samples per symbol</name>
- <key>sps</key>
- <type>float</type>
- </param>
- <param>
- <name>Error limit</name>
- <key>limit</key>
- <type>float</type>
- </param>
- <param>
- <name>Output samples per symbol</name>
- <key>osps</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
- <source>
- <name>err</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>omega</name>
- <type>float</type>
- <optional>1</optional>
- </source>
-
-</block>
diff --git a/gr-digital/grc/digital_ofdm_carrier_allocator_cvc.block.yml b/gr-digital/grc/digital_ofdm_carrier_allocator_cvc.block.yml
new file mode 100644
index 0000000000..ab260ab9d9
--- /dev/null
+++ b/gr-digital/grc/digital_ofdm_carrier_allocator_cvc.block.yml
@@ -0,0 +1,44 @@
+id: digital_ofdm_carrier_allocator_cvc
+label: OFDM Carrier Allocator
+
+parameters:
+- id: fft_len
+ label: FFT length
+ dtype: int
+ default: fft_len
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: occupied_carriers
+ label: Occupied Carriers
+ dtype: raw
+- id: pilot_carriers
+ label: Pilot Carriers
+ dtype: raw
+ default: ()
+- id: pilot_symbols
+ label: Pilot Symbols
+ dtype: raw
+ default: ()
+- id: sync_words
+ label: Sync Words
+ dtype: raw
+ default: ()
+- id: len_tag_key
+ label: Length tag key
+ dtype: string
+ default: '"packet_len"'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ fft_len }
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.ofdm_carrier_allocator_cvc(${fft_len}, ${occupied_carriers}, ${pilot_carriers},
+ ${pilot_symbols}, ${sync_words}, ${len_tag_key})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_ofdm_carrier_allocator_cvc.xml b/gr-digital/grc/digital_ofdm_carrier_allocator_cvc.xml
deleted file mode 100644
index b9bdde543d..0000000000
--- a/gr-digital/grc/digital_ofdm_carrier_allocator_cvc.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>OFDM Carrier Allocator</name>
- <key>digital_ofdm_carrier_allocator_cvc</key>
- <import>from gnuradio import digital</import>
- <make>digital.ofdm_carrier_allocator_cvc($fft_len, $occupied_carriers, $pilot_carriers, $pilot_symbols, $sync_words, $len_tag_key)</make>
- <param>
- <name>FFT length</name>
- <key>fft_len</key>
- <value>fft_len</value>
- <type>int</type>
- </param>
- <param>
- <name>Occupied Carriers</name>
- <key>occupied_carriers</key>
- <type>raw</type>
- </param>
- <param>
- <name>Pilot Carriers</name>
- <key>pilot_carriers</key>
- <value>()</value>
- <type>raw</type>
- </param>
- <param>
- <name>Pilot Symbols</name>
- <key>pilot_symbols</key>
- <value>()</value>
- <type>raw</type>
- </param>
- <param>
- <name>Sync Words</name>
- <key>sync_words</key>
- <value>()</value>
- <type>raw</type>
- </param>
- <param>
- <name>Length tag key</name>
- <key>len_tag_key</key>
- <value>"packet_len"</value>
- <type>string</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>$fft_len</vlen>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_ofdm_chanest_vcvc.block.yml b/gr-digital/grc/digital_ofdm_chanest_vcvc.block.yml
new file mode 100644
index 0000000000..352c6ab5a7
--- /dev/null
+++ b/gr-digital/grc/digital_ofdm_chanest_vcvc.block.yml
@@ -0,0 +1,53 @@
+id: digital_ofdm_chanest_vcvc
+label: OFDM Channel Estimation
+
+parameters:
+- id: sync_symbol1
+ label: Synch. symbol 1
+ dtype: complex_vector
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: sync_symbol2
+ label: Synch. symbol 2
+ dtype: complex_vector
+ default: ()
+- id: n_data_symbols
+ label: Number of data symbols
+ dtype: int
+ default: '1'
+- id: eq_noise_red_len
+ label: Channel taps noise reduction length
+ dtype: int
+ default: '0'
+ hide: all
+- id: max_carr_offset
+ label: Maximum carrier offset
+ dtype: int
+ default: '-1'
+ hide: ${ ('part' if max_carr_offset < 0 else 'none') }
+- id: force_one_symbol
+ label: Force One Synchronisation Symbol
+ dtype: enum
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+ hide: ${ ('part' if not force_one_symbol else 'none') }
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ len(sync_symbol1) }
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ len(sync_symbol1) }
+
+asserts:
+- ${ len(sync_symbol1) }
+- ${ len(sync_symbol2) == 0 or len(sync_symbol2) == len(sync_symbol1) }
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.ofdm_chanest_vcvc(${sync_symbol1}, ${sync_symbol2}, ${n_data_symbols},
+ ${eq_noise_red_len}, ${max_carr_offset}, ${force_one_symbol})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_ofdm_chanest_vcvc.xml b/gr-digital/grc/digital_ofdm_chanest_vcvc.xml
deleted file mode 100644
index 5cc2145456..0000000000
--- a/gr-digital/grc/digital_ofdm_chanest_vcvc.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>OFDM Channel Estimation</name>
- <key>digital_ofdm_chanest_vcvc</key>
- <import>from gnuradio import digital</import>
- <make>digital.ofdm_chanest_vcvc($sync_symbol1, $sync_symbol2, $n_data_symbols, $eq_noise_red_len, $max_carr_offset, $force_one_symbol)</make>
- <param>
- <name>Synch. symbol 1</name>
- <key>sync_symbol1</key>
- <type>complex_vector</type>
- </param>
- <param>
- <name>Synch. symbol 2</name>
- <key>sync_symbol2</key>
- <value>()</value>
- <type>complex_vector</type>
- </param>
- <param>
- <name>Number of data symbols</name>
- <key>n_data_symbols</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Channel taps noise reduction length</name>
- <key>eq_noise_red_len</key>
- <value>0</value>
- <type>int</type>
- <hide>all</hide>
- </param>
- <param>
- <name>Maximum carrier offset</name>
- <key>max_carr_offset</key>
- <value>-1</value>
- <type>int</type>
- <hide>#if $max_carr_offset &lt; 0 then 'part' else 'none'#</hide>
- </param>
- <param>
- <name>Force One Synchronisation Symbol</name>
- <key>force_one_symbol</key>
- <type>enum</type>
- <hide>#if not $force_one_symbol then 'part' else 'none'#</hide>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- </param>
- <check>len($sync_symbol1)</check>
- <check>len($sync_symbol2) == 0 or len($sync_symbol2) == len($sync_symbol1)</check>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>len($sync_symbol1)</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>len($sync_symbol1)</vlen>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_ofdm_cyclic_prefixer.block.yml b/gr-digital/grc/digital_ofdm_cyclic_prefixer.block.yml
new file mode 100644
index 0000000000..cd475a0601
--- /dev/null
+++ b/gr-digital/grc/digital_ofdm_cyclic_prefixer.block.yml
@@ -0,0 +1,38 @@
+id: digital_ofdm_cyclic_prefixer
+label: OFDM Cyclic Prefixer
+
+parameters:
+- id: input_size
+ label: FFT Length
+ dtype: int
+ default: fft_len
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: cp_len
+ label: CP Length
+ dtype: int
+ default: fft_len/4
+- id: rolloff
+ label: Rolloff
+ dtype: int
+ default: '0'
+ hide: ${ ('none' if rolloff else 'part') }
+- id: tagname
+ label: Length Tag Key
+ dtype: string
+ default: '"frame_len"'
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ input_size }
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.ofdm_cyclic_prefixer(${input_size}, ${input_size+cp_len}, ${rolloff},
+ ${tagname})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_ofdm_cyclic_prefixer.xml b/gr-digital/grc/digital_ofdm_cyclic_prefixer.xml
deleted file mode 100644
index ec5e027047..0000000000
--- a/gr-digital/grc/digital_ofdm_cyclic_prefixer.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
- Copyright 2011 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##OFDM Cyclic Prefixer
-###################################################
- -->
-<block>
- <name>OFDM Cyclic Prefixer</name>
- <key>digital_ofdm_cyclic_prefixer</key>
- <import>from gnuradio import digital</import>
- <make>digital.ofdm_cyclic_prefixer($input_size, $input_size+$cp_len, $rolloff, $tagname)</make>
- <param>
- <name>FFT Length</name>
- <key>input_size</key>
- <value>fft_len</value>
- <type>int</type>
- </param>
- <param>
- <name>CP Length</name>
- <key>cp_len</key>
- <value>fft_len/4</value>
- <type>int</type>
- </param>
- <param>
- <name>Rolloff</name>
- <key>rolloff</key>
- <value>0</value>
- <type>int</type>
- <hide>#if $rolloff then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Length Tag Key</name>
- <key>tagname</key>
- <value>"frame_len"</value>
- <type>string</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$input_size</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_ofdm_frame_equalizer_vcvc.block.yml b/gr-digital/grc/digital_ofdm_frame_equalizer_vcvc.block.yml
new file mode 100644
index 0000000000..b2eba18e64
--- /dev/null
+++ b/gr-digital/grc/digital_ofdm_frame_equalizer_vcvc.block.yml
@@ -0,0 +1,46 @@
+id: digital_ofdm_frame_equalizer_vcvc
+label: OFDM Frame Equalizer
+
+parameters:
+- id: fft_len
+ label: FFT length
+ dtype: int
+ default: fft_len
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: cp_len
+ label: CP length
+ dtype: int
+ default: fft_len/4
+- id: equalizer
+ label: Equalizer
+ dtype: raw
+- id: len_tag_key
+ label: Length Tag Key
+ dtype: string
+- id: propagate_channel_state
+ label: Propagate Channel State
+ dtype: enum
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: fixed_frame_len
+ label: Fixed frame length
+ dtype: int
+ default: '0'
+ hide: ${ ('none' if fixed_frame_len else 'part') }
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ fft_len }
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ fft_len }
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.ofdm_frame_equalizer_vcvc(${equalizer}, ${cp_len}, ${len_tag_key},
+ ${propagate_channel_state}, ${fixed_frame_len})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_ofdm_frame_equalizer_vcvc.xml b/gr-digital/grc/digital_ofdm_frame_equalizer_vcvc.xml
deleted file mode 100644
index 2a0c24e528..0000000000
--- a/gr-digital/grc/digital_ofdm_frame_equalizer_vcvc.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<block>
- <name>OFDM Frame Equalizer</name>
- <key>digital_ofdm_frame_equalizer_vcvc</key>
- <import>from gnuradio import digital</import>
- <make>digital.ofdm_frame_equalizer_vcvc($equalizer, $cp_len, $len_tag_key, $propagate_channel_state, $fixed_frame_len)</make>
- <param>
- <name>FFT length</name>
- <key>fft_len</key>
- <value>fft_len</value>
- <type>int</type>
- </param>
- <param>
- <name>CP length</name>
- <key>cp_len</key>
- <value>fft_len/4</value>
- <type>int</type>
- </param>
- <param>
- <name>Equalizer</name>
- <key>equalizer</key>
- <type>raw</type>
- </param>
- <param>
- <name>Length Tag Key</name>
- <key>len_tag_key</key>
- <type>string</type>
- </param>
- <param>
- <name>Propagate Channel State</name>
- <key>propagate_channel_state</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Fixed frame length</name>
- <key>fixed_frame_len</key>
- <value>0</value>
- <type>int</type>
- <hide>#if $fixed_frame_len then 'none' else 'part'#</hide>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$fft_len</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>$fft_len</vlen>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_ofdm_rx.block.yml b/gr-digital/grc/digital_ofdm_rx.block.yml
new file mode 100644
index 0000000000..2a3928020b
--- /dev/null
+++ b/gr-digital/grc/digital_ofdm_rx.block.yml
@@ -0,0 +1,95 @@
+id: digital_ofdm_rx
+label: OFDM Receiver
+
+parameters:
+- id: fft_len
+ label: FFT Length
+ dtype: int
+ default: '64'
+- id: cp_len
+ label: Cyclic Prefix Length
+ dtype: int
+ default: '16'
+- id: packet_len_key
+ label: Packet Length Tag Key
+ dtype: string
+ default: '"length"'
+- id: occupied_carriers
+ label: Occupied Carriers
+ dtype: raw
+ default: ()
+ hide: ${ 'none' if occupied_carriers else 'part' }
+- id: pilot_carriers
+ label: Pilot Carriers
+ dtype: raw
+ default: ()
+ hide: ${ 'none' if pilot_carriers else 'part' }
+- id: pilot_symbols
+ label: Pilot Symbols
+ dtype: raw
+ default: ()
+ hide: ${ 'none' if pilot_symbols else 'part' }
+- id: sync_word1
+ label: Sync Word 1
+ dtype: raw
+ default: ()
+ hide: ${ 'none' if sync_word1 else 'part' }
+- id: sync_word2
+ label: Sync Word 2
+ dtype: raw
+ default: ()
+ hide: ${ 'none' if sync_word2 else 'part' }
+- id: header_mod
+ label: Header Modulation
+ dtype: enum
+ options: ['"BPSK"', '"QPSK"']
+ option_labels: [BPSK, QPSK]
+ option_attributes:
+ bps: ['1', '2']
+- id: payload_mod
+ label: Payload Modulation
+ dtype: enum
+ options: ['"BPSK"', '"QPSK"', '"8-PSK"']
+ option_labels: [BPSK, QPSK, 8-PSK]
+ option_attributes:
+ bps: ['1', '2', '3']
+- id: scramble_bits
+ label: Scramble Bits
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+ hide: ${ ('part' if scramble_bits else 'none') }
+- id: log
+ label: Log Debug Info
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+ hide: ${ ('none' if log else 'part') }
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: byte
+
+asserts:
+- ${ fft_len > 0 }
+- ${ cp_len > 0 }
+- ${ cp_len < fft_len }
+
+templates:
+ imports: from gnuradio import digital
+ make: "digital.ofdm_rx(\n\t fft_len=${fft_len}, cp_len=${cp_len},\n\t frame_length_tag_key='frame_'+${packet_len_key},\n\
+ \t packet_length_tag_key=${packet_len_key},\n\t % if occupied_carriers:\n\
+ \t occupied_carriers=${occupied_carriers},\n\t % endif\n\t % if pilot_carriers:\n\
+ \t pilot_carriers=${pilot_carriers},\n\t % endif\n\t % if pilot_symbols:\n\
+ \t pilot_symbols=${pilot_symbols},\n\t % endif\n\t % if sync_word1:\n\t\
+ \ sync_word1=${sync_word1},\n\t % endif\n\t % if sync_word2:\n\t sync_word2=${sync_word2},\n\
+ \t % endif\n\t bps_header=${header_mod.bps},\n\t bps_payload=${payload_mod.bps},\n\
+ \t debug_log=${log},\n\t scramble_bits=${scramble_bits}\n\t )"
+
+file_format: 1
diff --git a/gr-digital/grc/digital_ofdm_rx.xml b/gr-digital/grc/digital_ofdm_rx.xml
deleted file mode 100644
index 9c2bf65e9d..0000000000
--- a/gr-digital/grc/digital_ofdm_rx.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>OFDM Receiver</name>
- <key>digital_ofdm_rx</key>
- <import>from gnuradio import digital</import>
- <make>digital.ofdm_rx(
- fft_len=$fft_len, cp_len=$cp_len,
- frame_length_tag_key='frame_'+$packet_len_key,
- packet_length_tag_key=$packet_len_key,
- #if $occupied_carriers()
- occupied_carriers=$occupied_carriers,
- #end if
- #if $pilot_carriers()
- pilot_carriers=$pilot_carriers,
- #end if
- #if $pilot_symbols()
- pilot_symbols=$pilot_symbols,
- #end if
- #if $sync_word1()
- sync_word1=$sync_word1,
- #end if
- #if $sync_word2()
- sync_word2=$sync_word2,
- #end if
- bps_header=$header_mod.bps,
- bps_payload=$payload_mod.bps,
- debug_log=$log,
- scramble_bits=$scramble_bits
- )</make>
- <param>
- <name>FFT Length</name>
- <key>fft_len</key>
- <value>64</value>
- <type>int</type>
- </param>
- <param>
- <name>Cyclic Prefix Length</name>
- <key>cp_len</key>
- <value>16</value>
- <type>int</type>
- </param>
- <param>
- <name>Packet Length Tag Key</name>
- <key>packet_len_key</key>
- <value>"length"</value>
- <type>string</type>
- </param>
- <param>
- <name>Occupied Carriers</name>
- <key>occupied_carriers</key>
- <value>()</value>
- <type>raw</type>
- <hide>
- #if $occupied_carriers()
- none
- #else
- part
- #end if
- </hide>
- </param>
- <param>
- <name>Pilot Carriers</name>
- <key>pilot_carriers</key>
- <value>()</value>
- <type>raw</type>
- <hide>
- #if $pilot_carriers()
- none
- #else
- part
- #end if
- </hide>
- </param>
- <param>
- <name>Pilot Symbols</name>
- <key>pilot_symbols</key>
- <value>()</value>
- <type>raw</type>
- <hide>
- #if $pilot_symbols()
- none
- #else
- part
- #end if
- </hide>
- </param>
- <param>
- <name>Sync Word 1</name>
- <key>sync_word1</key>
- <value>()</value>
- <type>raw</type>
- <hide>
- #if $sync_word1()
- none
- #else
- part
- #end if
- </hide>
- </param>
- <param>
- <name>Sync Word 2</name>
- <key>sync_word2</key>
- <value>()</value>
- <type>raw</type>
- <hide>
- #if $sync_word2()
- none
- #else
- part
- #end if
- </hide>
- </param>
- <param>
- <name>Header Modulation</name>
- <key>header_mod</key>
- <type>enum</type>
- <option>
- <name>BPSK</name>
- <key>"BPSK"</key>
- <opt>bps:1</opt>
- </option>
- <option>
- <name>QPSK</name>
- <key>"QPSK"</key>
- <opt>bps:2</opt>
- </option>
- </param>
- <param>
- <name>Payload Modulation</name>
- <key>payload_mod</key>
- <type>enum</type>
- <option>
- <name>BPSK</name>
- <key>"BPSK"</key>
- <opt>bps:1</opt>
- </option>
- <option>
- <name>QPSK</name>
- <key>"QPSK"</key>
- <opt>bps:2</opt>
- </option>
- <option>
- <name>8-PSK</name>
- <key>"8-PSK"</key>
- <opt>bps:3</opt>
- </option>
- </param>
- <param>
- <name>Scramble Bits</name>
- <key>scramble_bits</key>
- <value>False</value>
- <type>enum</type>
- <hide> #if $scramble_bits then 'part' else 'none'#</hide>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- </param>
- <param>
- <name>Log Debug Info</name>
- <key>log</key>
- <value>False</value>
- <type>enum</type>
- <hide> #if $log then 'none' else 'part'#</hide>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- </param>
- <check>$fft_len &gt; 0</check>
- <check>$cp_len &gt; 0</check>
- <check>$cp_len &lt; $fft_len</check>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
-
diff --git a/gr-digital/grc/digital_ofdm_serializer_vcc.block.yml b/gr-digital/grc/digital_ofdm_serializer_vcc.block.yml
new file mode 100644
index 0000000000..d81dd569f7
--- /dev/null
+++ b/gr-digital/grc/digital_ofdm_serializer_vcc.block.yml
@@ -0,0 +1,51 @@
+id: digital_ofdm_serializer_vcc
+label: OFDM Serializer
+
+parameters:
+- id: fft_len
+ label: FFT length
+ dtype: int
+ default: fft_len
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: occupied_carriers
+ label: Occupied Carriers
+ dtype: raw
+- id: len_tag_key
+ label: Length Tag Key
+ dtype: string
+- id: packet_len_tag_key
+ label: Packet Length Tag Key
+ dtype: string
+ default: '""'
+ hide: ${ ('none' if packet_len_tag_key else 'part') }
+- id: symbols_skipped
+ label: Symbols skipped
+ dtype: int
+ default: '0'
+ hide: ${ ('none' if symbols_skipped else 'part') }
+- id: carr_offset_key
+ label: Carrier Offset Key
+ dtype: string
+ default: '""'
+ hide: ${ ('none' if carr_offset_key else 'part') }
+- id: input_is_shifted
+ label: Input is shifted
+ dtype: bool
+ default: 'True'
+ hide: ${ ('part' if input_is_shifted else 'none') }
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ fft_len }
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.ofdm_serializer_vcc(${fft_len}, ${occupied_carriers}, ${len_tag_key},
+ ${packet_len_tag_key}, ${symbols_skipped}, ${carr_offset_key}, ${input_is_shifted})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_ofdm_serializer_vcc.xml b/gr-digital/grc/digital_ofdm_serializer_vcc.xml
deleted file mode 100644
index 1c09cd94fc..0000000000
--- a/gr-digital/grc/digital_ofdm_serializer_vcc.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>OFDM Serializer</name>
- <key>digital_ofdm_serializer_vcc</key>
- <import>from gnuradio import digital</import>
- <make>digital.ofdm_serializer_vcc($fft_len, $occupied_carriers, $len_tag_key, $packet_len_tag_key, $symbols_skipped, $carr_offset_key, $input_is_shifted)</make>
- <param>
- <name>FFT length</name>
- <key>fft_len</key>
- <value>fft_len</value>
- <type>int</type>
- </param>
- <param>
- <name>Occupied Carriers</name>
- <key>occupied_carriers</key>
- <type>raw</type>
- </param>
- <param>
- <name>Length Tag Key</name>
- <key>len_tag_key</key>
- <type>string</type>
- </param>
- <param>
- <name>Packet Length Tag Key</name>
- <key>packet_len_tag_key</key>
- <value>""</value>
- <type>string</type>
- <hide>#if $packet_len_tag_key then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Symbols skipped</name>
- <key>symbols_skipped</key>
- <value>0</value>
- <type>int</type>
- <hide>#if $symbols_skipped then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Carrier Offset Key</name>
- <key>carr_offset_key</key>
- <value>""</value>
- <type>string</type>
- <hide>#if $carr_offset_key then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Input is shifted</name>
- <key>input_is_shifted</key>
- <value>True</value>
- <type>bool</type>
- <hide>#if $input_is_shifted then 'part' else 'none'#</hide>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$fft_len</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_ofdm_sync_sc_cfb.block.yml b/gr-digital/grc/digital_ofdm_sync_sc_cfb.block.yml
new file mode 100644
index 0000000000..f1e2f3b13b
--- /dev/null
+++ b/gr-digital/grc/digital_ofdm_sync_sc_cfb.block.yml
@@ -0,0 +1,35 @@
+id: digital_ofdm_sync_sc_cfb
+label: Schmidl & Cox OFDM synch.
+
+parameters:
+- id: fft_len
+ label: FFT length
+ dtype: int
+- id: cp_len
+ label: Cyclic Prefix length
+ dtype: int
+- id: use_even_carriers
+ label: Preamble Carriers
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: [Odd, Even]
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- label: freq_offset
+ domain: stream
+ dtype: float
+- label: detect
+ domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.ofdm_sync_sc_cfb(${fft_len}, ${cp_len}, ${use_even_carriers})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_ofdm_sync_sc_cfb.xml b/gr-digital/grc/digital_ofdm_sync_sc_cfb.xml
deleted file mode 100644
index 4238df761c..0000000000
--- a/gr-digital/grc/digital_ofdm_sync_sc_cfb.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>Schmidl &amp; Cox OFDM synch.</name>
- <key>digital_ofdm_sync_sc_cfb</key>
- <import>from gnuradio import digital</import>
- <make>digital.ofdm_sync_sc_cfb($fft_len, $cp_len, $use_even_carriers)</make>
- <param>
- <name>FFT length</name>
- <key>fft_len</key>
- <type>int</type>
- </param>
- <param>
- <name>Cyclic Prefix length</name>
- <key>cp_len</key>
- <type>int</type>
- </param>
- <param>
- <name>Preamble Carriers</name>
- <key>use_even_carriers</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Odd</name>
- <key>False</key>
- </option>
- <option>
- <name>Even</name>
- <key>True</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>freq_offset</name>
- <type>float</type>
- </source>
- <source>
- <name>detect</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_ofdm_tx.block.yml b/gr-digital/grc/digital_ofdm_tx.block.yml
new file mode 100644
index 0000000000..c81da0d27f
--- /dev/null
+++ b/gr-digital/grc/digital_ofdm_tx.block.yml
@@ -0,0 +1,100 @@
+id: digital_ofdm_tx
+label: OFDM Transmitter
+
+parameters:
+- id: fft_len
+ label: FFT Length
+ dtype: int
+ default: '64'
+- id: cp_len
+ label: Cyclic Prefix Length
+ dtype: int
+ default: '16'
+- id: packet_len_key
+ label: Length Tag Name
+ dtype: string
+ default: length
+- id: occupied_carriers
+ label: Occupied Carriers
+ dtype: raw
+ default: ()
+ hide: ${ 'none' if occupied_carriers else 'part' }
+- id: pilot_carriers
+ label: Pilot Carriers
+ dtype: raw
+ default: ()
+ hide: ${ 'none' if pilot_carriers else 'part' }
+- id: pilot_symbols
+ label: Pilot Symbols
+ dtype: raw
+ default: ()
+ hide: ${ 'none' if pilot_symbols else 'part' }
+- id: sync_word1
+ label: Sync Word 1
+ dtype: raw
+ default: ()
+ hide: ${ 'none' if sync_word1 else 'part' }
+- id: sync_word2
+ label: Sync Word 2
+ dtype: raw
+ default: ()
+ hide: ${ 'none' if sync_word2 else 'part' }
+- id: header_mod
+ label: Header Modulation
+ dtype: enum
+ options: ['"BPSK"', '"QPSK"']
+ option_labels: [BPSK, QPSK]
+ option_attributes:
+ bps: ['1', '2']
+- id: payload_mod
+ label: Payload Modulation
+ dtype: enum
+ options: ['"BPSK"', '"QPSK"', '"8-PSK"']
+ option_labels: [BPSK, QPSK, 8-PSK]
+ option_attributes:
+ bps: ['1', '2', '3']
+- id: rolloff
+ label: Rolloff length (samples)
+ dtype: int
+ default: '0'
+- id: scramble_bits
+ label: Scramble Bits
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+ hide: ${ ('part' if scramble_bits else 'none') }
+- id: log
+ label: Log Debug Info
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+ hide: ${ ('none' if log else 'part') }
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: complex
+
+asserts:
+- ${ fft_len > 0 }
+- ${ cp_len > 0 }
+- ${ cp_len < fft_len }
+- ${ rolloff >= 0 }
+
+templates:
+ imports: from gnuradio import digital
+ make: "digital.ofdm_tx(\n\t fft_len=${fft_len}, cp_len=${cp_len},\n\t packet_length_tag_key=${packet_len_key},\n\
+ \t % if occupied_carriers:\n\t occupied_carriers=${occupied_carriers},\n\
+ \t % endif\n\t % if pilot_carriers:\n\t pilot_carriers=${pilot_carriers},\n\
+ \t % endif\n\t % if pilot_carriers:\n\t pilot_symbols=${pilot_symbols},\n\
+ \t % endif\n\t % if sync_word1:\n\t sync_word1=${sync_word1},\n\t % endif\n\
+ \t % if sync_word2:\n\t sync_word2=${sync_word2},\n\t % endif\n\t bps_header=${header_mod.bps},\n\
+ \t bps_payload=${payload_mod.bps},\n\t rolloff=${rolloff},\n\t debug_log=${log},\n\
+ \t scramble_bits=${scramble_bits}\n\t )"
+
+file_format: 1
diff --git a/gr-digital/grc/digital_ofdm_tx.xml b/gr-digital/grc/digital_ofdm_tx.xml
deleted file mode 100644
index bad0b2b13d..0000000000
--- a/gr-digital/grc/digital_ofdm_tx.xml
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>OFDM Transmitter</name>
- <key>digital_ofdm_tx</key>
- <import>from gnuradio import digital</import>
- <make>digital.ofdm_tx(
- fft_len=$fft_len, cp_len=$cp_len,
- packet_length_tag_key=$packet_len_key,
- #if $occupied_carriers()
- occupied_carriers=$occupied_carriers,
- #end if
- #if $pilot_carriers()
- pilot_carriers=$pilot_carriers,
- #end if
- #if $pilot_carriers()
- pilot_symbols=$pilot_symbols,
- #end if
- #if $sync_word1()
- sync_word1=$sync_word1,
- #end if
- #if $sync_word2()
- sync_word2=$sync_word2,
- #end if
- bps_header=$header_mod.bps,
- bps_payload=$payload_mod.bps,
- rolloff=$rolloff,
- debug_log=$log,
- scramble_bits=$scramble_bits
- )</make>
- <param>
- <name>FFT Length</name>
- <key>fft_len</key>
- <value>64</value>
- <type>int</type>
- </param>
- <param>
- <name>Cyclic Prefix Length</name>
- <key>cp_len</key>
- <value>16</value>
- <type>int</type>
- </param>
- <param>
- <name>Length Tag Name</name>
- <key>packet_len_key</key>
- <value>length</value>
- <type>string</type>
- </param>
- <param>
- <name>Occupied Carriers</name>
- <key>occupied_carriers</key>
- <value>()</value>
- <type>raw</type>
- <hide>
- #if $occupied_carriers()
- none
- #else
- part
- #end if
- </hide>
- </param>
- <param>
- <name>Pilot Carriers</name>
- <key>pilot_carriers</key>
- <value>()</value>
- <type>raw</type>
- <hide>
- #if $pilot_carriers()
- none
- #else
- part
- #end if
- </hide>
- </param>
- <param>
- <name>Pilot Symbols</name>
- <key>pilot_symbols</key>
- <value>()</value>
- <type>raw</type>
- <hide>
- #if $pilot_symbols()
- none
- #else
- part
- #end if
- </hide>
- </param>
- <param>
- <name>Sync Word 1</name>
- <key>sync_word1</key>
- <value>()</value>
- <type>raw</type>
- <hide>
- #if $sync_word1()
- none
- #else
- part
- #end if
- </hide>
- </param>
- <param>
- <name>Sync Word 2</name>
- <key>sync_word2</key>
- <value>()</value>
- <type>raw</type>
- <hide>
- #if $sync_word2()
- none
- #else
- part
- #end if
- </hide>
- </param>
- <param>
- <name>Header Modulation</name>
- <key>header_mod</key>
- <type>enum</type>
- <option>
- <name>BPSK</name>
- <key>"BPSK"</key>
- <opt>bps:1</opt>
- </option>
- <option>
- <name>QPSK</name>
- <key>"QPSK"</key>
- <opt>bps:2</opt>
- </option>
- </param>
- <param>
- <name>Payload Modulation</name>
- <key>payload_mod</key>
- <type>enum</type>
- <option>
- <name>BPSK</name>
- <key>"BPSK"</key>
- <opt>bps:1</opt>
- </option>
- <option>
- <name>QPSK</name>
- <key>"QPSK"</key>
- <opt>bps:2</opt>
- </option>
- <option>
- <name>8-PSK</name>
- <key>"8-PSK"</key>
- <opt>bps:3</opt>
- </option>
- </param>
- <param>
- <name>Rolloff length (samples)</name>
- <key>rolloff</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Scramble Bits</name>
- <key>scramble_bits</key>
- <value>False</value>
- <type>enum</type>
- <hide> #if $scramble_bits then 'part' else 'none'#</hide>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- </param>
- <param>
- <name>Log Debug Info</name>
- <key>log</key>
- <value>False</value>
- <type>enum</type>
- <hide> #if $log then 'none' else 'part'#</hide>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- </param>
- <check>$fft_len &gt; 0</check>
- <check>$cp_len &gt; 0</check>
- <check>$cp_len &lt; $fft_len</check>
- <check>$rolloff &gt;= 0</check>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_packet_headergenerator_bb.block.yml b/gr-digital/grc/digital_packet_headergenerator_bb.block.yml
new file mode 100644
index 0000000000..d77530450f
--- /dev/null
+++ b/gr-digital/grc/digital_packet_headergenerator_bb.block.yml
@@ -0,0 +1,27 @@
+id: digital_packet_headergenerator_bb
+label: Packet Header Generator
+
+parameters:
+- id: header_formatter
+ label: Formatter Object
+ dtype: raw
+- id: len_tag_key
+ label: Length Tag Name
+ dtype: string
+ default: '"packet_len"'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.packet_headergenerator_bb(${header_formatter}, ${len_tag_key})
+ callbacks:
+ - set_header_formatter(${header_formatter})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_packet_headergenerator_bb.xml b/gr-digital/grc/digital_packet_headergenerator_bb.xml
deleted file mode 100644
index f069b52a01..0000000000
--- a/gr-digital/grc/digital_packet_headergenerator_bb.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<block>
- <name>Packet Header Generator</name>
- <key>digital_packet_headergenerator_bb</key>
- <import>from gnuradio import digital</import>
- <make>digital.packet_headergenerator_bb($header_formatter, $len_tag_key)</make>
- <callback>set_header_formatter($header_formatter)</callback>
- <param>
- <name>Formatter Object</name>
- <key>header_formatter</key>
- <type>raw</type>
- </param>
- <param>
- <name>Length Tag Name</name>
- <key>len_tag_key</key>
- <value>"packet_len"</value>
- <type>string</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_packet_headergenerator_bb_default.block.yml b/gr-digital/grc/digital_packet_headergenerator_bb_default.block.yml
new file mode 100644
index 0000000000..f9af16acac
--- /dev/null
+++ b/gr-digital/grc/digital_packet_headergenerator_bb_default.block.yml
@@ -0,0 +1,25 @@
+id: digital_packet_headergenerator_bb_default
+label: Packet Header Generator (Default)
+
+parameters:
+- id: header_len
+ label: Header Length
+ dtype: int
+- id: len_tag_key
+ label: Length Tag Name
+ dtype: string
+ default: '"packet_len"'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.packet_headergenerator_bb(${header_len}, ${len_tag_key})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_packet_headergenerator_bb_default.xml b/gr-digital/grc/digital_packet_headergenerator_bb_default.xml
deleted file mode 100644
index e89c340bf1..0000000000
--- a/gr-digital/grc/digital_packet_headergenerator_bb_default.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<block>
- <name>Packet Header Generator (Default)</name>
- <key>digital_packet_headergenerator_bb_default</key>
- <import>from gnuradio import digital</import>
- <make>digital.packet_headergenerator_bb($header_len, $len_tag_key)</make>
- <param>
- <name>Header Length</name>
- <key>header_len</key>
- <type>int</type>
- </param>
- <param>
- <name>Length Tag Name</name>
- <key>len_tag_key</key>
- <value>"packet_len"</value>
- <type>string</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
-
diff --git a/gr-digital/grc/digital_packet_headerparser_b.block.yml b/gr-digital/grc/digital_packet_headerparser_b.block.yml
new file mode 100644
index 0000000000..f3a4741086
--- /dev/null
+++ b/gr-digital/grc/digital_packet_headerparser_b.block.yml
@@ -0,0 +1,21 @@
+id: digital_packet_headerparser_b
+label: Packet Header Parser
+
+parameters:
+- id: header_formatter
+ label: Formatter Object
+ dtype: raw
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: message
+ id: header_data
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.packet_headerparser_b(${header_formatter})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_packet_headerparser_b.xml b/gr-digital/grc/digital_packet_headerparser_b.xml
deleted file mode 100644
index bab6bd22ed..0000000000
--- a/gr-digital/grc/digital_packet_headerparser_b.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<block>
- <name>Packet Header Parser</name>
- <key>digital_packet_headerparser_b</key>
- <import>from gnuradio import digital</import>
- <make>digital.packet_headerparser_b($header_formatter)</make>
- <param>
- <name>Formatter Object</name>
- <key>header_formatter</key>
- <type>raw</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>header_data</name>
- <type>message</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_packet_headerparser_b_default.block.yml b/gr-digital/grc/digital_packet_headerparser_b_default.block.yml
new file mode 100644
index 0000000000..903a23cf32
--- /dev/null
+++ b/gr-digital/grc/digital_packet_headerparser_b_default.block.yml
@@ -0,0 +1,25 @@
+id: digital_packet_headerparser_b_default
+label: Packet Header Parser (Default)
+
+parameters:
+- id: header_len
+ label: Header Length
+ dtype: int
+- id: len_tag_key
+ label: Length Tag Name
+ dtype: string
+ default: '"packet_len"'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: message
+ id: header_data
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.packet_headerparser_b(${header_len}, ${len_tag_key})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_packet_headerparser_b_default.xml b/gr-digital/grc/digital_packet_headerparser_b_default.xml
deleted file mode 100644
index 81a33ed774..0000000000
--- a/gr-digital/grc/digital_packet_headerparser_b_default.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<block>
- <name>Packet Header Parser (Default)</name>
- <key>digital_packet_headerparser_b_default</key>
- <import>from gnuradio import digital</import>
- <make>digital.packet_headerparser_b($header_len, $len_tag_key)</make>
- <param>
- <name>Header Length</name>
- <key>header_len</key>
- <type>int</type>
- </param>
- <param>
- <name>Length Tag Name</name>
- <key>len_tag_key</key>
- <value>"packet_len"</value>
- <type>string</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>header_data</name>
- <type>message</type>
- </source>
-</block>
-
diff --git a/gr-digital/grc/digital_packet_sink.block.yml b/gr-digital/grc/digital_packet_sink.block.yml
new file mode 100644
index 0000000000..a603226afc
--- /dev/null
+++ b/gr-digital/grc/digital_packet_sink.block.yml
@@ -0,0 +1,24 @@
+id: digital_packet_sink
+label: Packet Sink
+
+parameters:
+- id: sync_vector
+ label: Sync Vector
+ dtype: int_vector
+- id: target_queue
+ label: Target Message Queue
+ dtype: raw
+- id: threshold
+ label: Threshold
+ dtype: int
+ default: '-1'
+
+inputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.packet_sink(${sync_vector}, ${target_queue}, ${threshold})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_packet_sink.xml b/gr-digital/grc/digital_packet_sink.xml
deleted file mode 100644
index 2c6653d7ec..0000000000
--- a/gr-digital/grc/digital_packet_sink.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Packet Sink
-###################################################
- -->
-<block>
- <name>Packet Sink</name>
- <key>digital_packet_sink</key>
- <import>from gnuradio import digital</import>
- <make>digital.packet_sink($sync_vector, $target_queue, $threshold)</make>
- <param>
- <name>Sync Vector</name>
- <key>sync_vector</key>
- <type>int_vector</type>
- </param>
- <param>
- <name>Target Message Queue</name>
- <key>target_queue</key>
- <type>raw</type>
- </param>
- <param>
- <name>Threshold</name>
- <key>threshold</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
-</block>
diff --git a/gr-digital/grc/digital_pfb_clock_sync.block.yml b/gr-digital/grc/digital_pfb_clock_sync.block.yml
new file mode 100644
index 0000000000..d9fbca8441
--- /dev/null
+++ b/gr-digital/grc/digital_pfb_clock_sync.block.yml
@@ -0,0 +1,69 @@
+id: digital_pfb_clock_sync_xxx
+label: Polyphase Clock Sync
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [ccf, fff]
+ option_labels: [Complex->Complex (Real Taps), Float->Float (Real Taps)]
+ option_attributes:
+ input: [complex, float]
+ output: [complex, float]
+ taps: [real_vector, real_vector]
+ hide: part
+- id: sps
+ label: Samples/Symbol
+ dtype: real
+- id: loop_bw
+ label: Loop Bandwidth
+ dtype: real
+- id: taps
+ label: Taps
+ dtype: real_vector
+- id: filter_size
+ label: Filter Size
+ dtype: int
+ default: '32'
+- id: init_phase
+ label: Initial Phase
+ dtype: real
+ default: '16'
+- id: max_dev
+ label: Maximum Rate Deviation
+ dtype: real
+ default: '1.5'
+- id: osps
+ label: Output SPS
+ dtype: int
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+- label: err
+ domain: stream
+ dtype: float
+ optional: true
+- label: rate
+ domain: stream
+ dtype: float
+ optional: true
+- label: phase
+ domain: stream
+ dtype: float
+ optional: true
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.pfb_clock_sync_${type}(${sps}, ${loop_bw}, ${taps}, ${filter_size},
+ ${init_phase}, ${max_dev}, ${osps})
+ callbacks:
+ - update_taps(${taps})
+ - set_loop_bandwidth(${loop_bw})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_pfb_clock_sync.xml b/gr-digital/grc/digital_pfb_clock_sync.xml
deleted file mode 100644
index c54417f2cb..0000000000
--- a/gr-digital/grc/digital_pfb_clock_sync.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Polyphase Filter based Clock Sync
-###################################################
- -->
-<block>
- <name>Polyphase Clock Sync</name>
- <key>digital_pfb_clock_sync_xxx</key>
- <import>from gnuradio import digital</import>
- <make>digital.pfb_clock_sync_$(type)($sps, $loop_bw, $taps, $filter_size, $init_phase, $max_dev, $osps)</make>
- <callback>update_taps($taps)</callback>
- <callback>set_loop_bandwidth($loop_bw)</callback>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex (Real Taps)</name>
- <key>ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Float->Float (Real Taps)</name>
- <key>fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- <opt>taps:real_vector</opt>
- </option>
- </param>
-
- <param>
- <name>Samples/Symbol</name>
- <key>sps</key>
- <type>real</type>
- </param>
- <param>
- <name>Loop Bandwidth</name>
- <key>loop_bw</key>
- <type>real</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <type>real_vector</type>
- </param>
- <param>
- <name>Filter Size</name>
- <key>filter_size</key>
- <value>32</value>
- <type>int</type>
- </param>
- <param>
- <name>Initial Phase</name>
- <key>init_phase</key>
- <value>16</value>
- <type>real</type>
- </param>
- <param>
- <name>Maximum Rate Deviation</name>
- <key>max_dev</key>
- <value>1.5</value>
- <type>real</type>
- </param>
- <param>
- <name>Output SPS</name>
- <key>osps</key>
- <value>1</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <source>
- <name>err</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>rate</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>phase</name>
- <type>float</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_pn_correlator_cc.block.yml b/gr-digital/grc/digital_pn_correlator_cc.block.yml
new file mode 100644
index 0000000000..e92415433d
--- /dev/null
+++ b/gr-digital/grc/digital_pn_correlator_cc.block.yml
@@ -0,0 +1,29 @@
+id: digital_pn_correlator_cc
+label: PN Correlator
+
+parameters:
+- id: degree
+ label: Degree
+ dtype: int
+- id: mask
+ label: Mask
+ dtype: int
+ default: '0'
+- id: seed
+ label: Seed
+ dtype: int
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.pn_correlator_cc(${degree}, ${mask}, ${seed})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_pn_correlator_cc.xml b/gr-digital/grc/digital_pn_correlator_cc.xml
deleted file mode 100644
index 999cea15d9..0000000000
--- a/gr-digital/grc/digital_pn_correlator_cc.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##PN Correlator
-###################################################
- -->
-<block>
- <name>PN Correlator</name>
- <key>digital_pn_correlator_cc</key>
- <import>from gnuradio import digital</import>
- <make>digital.pn_correlator_cc($degree, $mask, $seed)</make>
- <param>
- <name>Degree</name>
- <key>degree</key>
- <type>int</type>
- </param>
- <param>
- <name>Mask</name>
- <key>mask</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>1</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_probe_density_b.block.yml b/gr-digital/grc/digital_probe_density_b.block.yml
new file mode 100644
index 0000000000..e329c6568c
--- /dev/null
+++ b/gr-digital/grc/digital_probe_density_b.block.yml
@@ -0,0 +1,24 @@
+id: digital_probe_density_b
+label: Probe Density
+
+parameters:
+- id: alpha
+ label: Alpha
+ dtype: real
+ default: '1'
+- id: probe_rate
+ label: Probe Rate
+ dtype: real
+ default: '10'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.probe_density_b(${alpha})
+ callbacks:
+ - set_alpha(${alpha})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_probe_density_b.xml b/gr-digital/grc/digital_probe_density_b.xml
deleted file mode 100644
index 8cf5dd8943..0000000000
--- a/gr-digital/grc/digital_probe_density_b.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Probe Density
-###################################################
- -->
-<block>
- <name>Probe Density</name>
- <key>digital_probe_density_b</key>
- <import>from gnuradio import digital</import>
- <make>digital.probe_density_b($alpha)</make>
- <callback>set_alpha($alpha)</callback>
- <param>
- <name>Alpha</name>
- <key>alpha</key>
- <value>1</value>
- <type>real</type>
- </param>
- <param>
- <name>Probe Rate</name>
- <key>probe_rate</key>
- <value>10</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
-</block>
diff --git a/gr-digital/grc/digital_probe_mpsk_snr_est_c.block.yml b/gr-digital/grc/digital_probe_mpsk_snr_est_c.block.yml
new file mode 100644
index 0000000000..68e29c1e76
--- /dev/null
+++ b/gr-digital/grc/digital_probe_mpsk_snr_est_c.block.yml
@@ -0,0 +1,42 @@
+id: digital_probe_mpsk_snr_est_c
+label: MPSK SNR Estimator Probe
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: ['0', '1', '2', '3']
+ option_labels: [Simple, Skewness, 2nd and 4th Moment, SVR]
+- id: msg_nsamples
+ label: Samples between SNR messages
+ dtype: int
+ default: '10000'
+- id: alpha
+ label: Filter Alpha
+ dtype: real
+ default: '0.001'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: message
+ id: snr
+ optional: true
+- domain: message
+ id: signal
+ optional: true
+- domain: message
+ id: noise
+ optional: true
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.probe_mpsk_snr_est_c(${type}, ${msg_nsamples}, ${alpha})
+ callbacks:
+ - set_type(${type})
+ - set_msg_nsample(${msg_nsamples})
+ - set_alpha(${alpha})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_probe_mpsk_snr_est_c.xml b/gr-digital/grc/digital_probe_mpsk_snr_est_c.xml
deleted file mode 100644
index e49f7e7f56..0000000000
--- a/gr-digital/grc/digital_probe_mpsk_snr_est_c.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##MPSK SNR Estimator
-###################################################
- -->
-<block>
- <name>MPSK SNR Estimator Probe</name>
- <key>digital_probe_mpsk_snr_est_c</key>
- <import>from gnuradio import digital</import>
- <make>digital.probe_mpsk_snr_est_c($type, $msg_nsamples, $alpha)</make>
- <callback>set_type($type)</callback>
- <callback>set_msg_nsample($msg_nsamples)</callback>
- <callback>set_alpha($alpha)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Simple</name>
- <key>0</key>
- </option>
- <option>
- <name>Skewness</name>
- <key>1</key>
- </option>
- <option>
- <name>2nd and 4th Moment</name>
- <key>2</key>
- </option>
- <option>
- <name>SVR</name>
- <key>3</key>
- </option>
- </param>
- <param>
- <name>Samples between SNR messages</name>
- <key>msg_nsamples</key>
- <value>10000</value>
- <type>int</type>
- </param>
- <param>
- <name>Filter Alpha</name>
- <key>alpha</key>
- <value>0.001</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>snr</name>
- <type>message</type>
- <optional>1</optional>
- </source>
- <source>
- <name>signal</name>
- <type>message</type>
- <optional>1</optional>
- </source>
- <source>
- <name>noise</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_protocol_formatter_async.block.yml b/gr-digital/grc/digital_protocol_formatter_async.block.yml
new file mode 100644
index 0000000000..29975522ff
--- /dev/null
+++ b/gr-digital/grc/digital_protocol_formatter_async.block.yml
@@ -0,0 +1,26 @@
+id: digital_protocol_formatter_async
+label: Protocol Formatter (Async)
+
+parameters:
+- id: format
+ label: Format Obj.
+ dtype: raw
+
+inputs:
+- domain: message
+ id: in
+ optional: true
+
+outputs:
+- domain: message
+ id: header
+ optional: true
+- domain: message
+ id: payload
+ optional: true
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.protocol_formatter_async(${format})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_protocol_formatter_async.xml b/gr-digital/grc/digital_protocol_formatter_async.xml
deleted file mode 100644
index 52a67eca36..0000000000
--- a/gr-digital/grc/digital_protocol_formatter_async.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-
-<block>
- <name>Protocol Formatter (Async)</name>
- <key>digital_protocol_formatter_async</key>
- <import>from gnuradio import digital</import>
- <make>digital.protocol_formatter_async($format)</make>
-
- <param>
- <name>Format Obj.</name>
- <key>format</key>
- <type>raw</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
-
- <source>
- <name>header</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-
- <source>
- <name>payload</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-
-</block>
diff --git a/gr-digital/grc/digital_protocol_formatter_bb.block.yml b/gr-digital/grc/digital_protocol_formatter_bb.block.yml
new file mode 100644
index 0000000000..9141b52085
--- /dev/null
+++ b/gr-digital/grc/digital_protocol_formatter_bb.block.yml
@@ -0,0 +1,25 @@
+id: digital_protocol_formatter_bb
+label: Protocol Formatter
+
+parameters:
+- id: format
+ label: Format Obj.
+ dtype: raw
+- id: len_tag_key
+ label: Length Tag Name
+ dtype: string
+ default: '"packet_len"'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.protocol_formatter_bb(${format}, ${len_tag_key})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_protocol_formatter_bb.xml b/gr-digital/grc/digital_protocol_formatter_bb.xml
deleted file mode 100644
index b37a791fa8..0000000000
--- a/gr-digital/grc/digital_protocol_formatter_bb.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-
-<block>
- <name>Protocol Formatter</name>
- <key>digital_protocol_formatter_bb</key>
- <import>from gnuradio import digital</import>
- <make>digital.protocol_formatter_bb($format, $len_tag_key)</make>
-
- <param>
- <name>Format Obj.</name>
- <key>format</key>
- <type>raw</type>
- </param>
-
- <param>
- <name>Length Tag Name</name>
- <key>len_tag_key</key>
- <value>"packet_len"</value>
- <type>string</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-
-</block>
diff --git a/gr-digital/grc/digital_protocol_parser_b.block.yml b/gr-digital/grc/digital_protocol_parser_b.block.yml
new file mode 100644
index 0000000000..b09e480863
--- /dev/null
+++ b/gr-digital/grc/digital_protocol_parser_b.block.yml
@@ -0,0 +1,22 @@
+id: digital_protocol_parser_b
+label: Protocol Parser
+
+parameters:
+- id: format
+ label: Format Obj.
+ dtype: raw
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: message
+ id: info
+ optional: true
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.protocol_parser_b(${format})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_protocol_parser_b.xml b/gr-digital/grc/digital_protocol_parser_b.xml
deleted file mode 100644
index 27fb15e05b..0000000000
--- a/gr-digital/grc/digital_protocol_parser_b.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<block>
- <name>Protocol Parser</name>
- <key>digital_protocol_parser_b</key>
- <import>from gnuradio import digital</import>
- <make>digital.protocol_parser_b($format)</make>
-
- <param>
- <name>Format Obj.</name>
- <key>format</key>
- <type>raw</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
-
- <source>
- <name>info</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_psk_demod.block.yml b/gr-digital/grc/digital_psk_demod.block.yml
new file mode 100644
index 0000000000..fbb5d60005
--- /dev/null
+++ b/gr-digital/grc/digital_psk_demod.block.yml
@@ -0,0 +1,79 @@
+id: digital_psk_demod
+label: PSK Demod
+category: '[Core]/Deprecated'
+
+parameters:
+- id: constellation_points
+ label: Number of Constellation Points
+ dtype: int
+ default: '8'
+- id: differential
+ label: Differential Encoding
+ dtype: bool
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '2'
+- id: excess_bw
+ label: Excess BW
+ dtype: real
+ default: '0.35'
+- id: freq_bw
+ label: Frequency BW
+ dtype: real
+ default: 6.28/100.0
+- id: timing_bw
+ label: Timing BW
+ dtype: real
+ default: 6.28/100.0
+- id: phase_bw
+ label: Phase BW
+ dtype: real
+ default: 6.28/100.0
+- id: mod_code
+ label: Gray Code
+ dtype: enum
+ options: ['"gray"', '"none"']
+ option_labels: ['Yes', 'No']
+- id: verbose
+ label: Verbose
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(verbose) == 'False' else 'none') }
+- id: log
+ label: Log
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(log) == 'False' else 'none') }
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: |-
+ digital.psk.psk_demod(
+ constellation_points=${constellation_points},
+ differential=${differential},
+ samples_per_symbol=${samples_per_symbol},
+ excess_bw=${excess_bw},
+ phase_bw=${phase_bw},
+ timing_bw=${timing_bw},
+ mod_code=${mod_code},
+ verbose=${verbose},
+ log=${log},
+ )
+
+file_format: 1
diff --git a/gr-digital/grc/digital_psk_demod.xml b/gr-digital/grc/digital_psk_demod.xml
deleted file mode 100644
index 02beed01ac..0000000000
--- a/gr-digital/grc/digital_psk_demod.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2009,2010,2011 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##PSK Demod
-###################################################
- -->
-<block>
- <name>PSK Demod</name>
- <key>digital_psk_demod</key>
- <category>[Core]/Deprecated</category>
- <import>from gnuradio import digital</import>
- <make>digital.psk.psk_demod(
- constellation_points=$constellation_points,
- differential=$differential,
- samples_per_symbol=$samples_per_symbol,
- excess_bw=$excess_bw,
- phase_bw=$phase_bw,
- timing_bw=$timing_bw,
- mod_code=$mod_code,
- verbose=$verbose,
- log=$log,
- )</make>
- <param>
- <name>Number of Constellation Points</name>
- <key>constellation_points</key>
- <value>8</value>
- <type>int</type>
- </param>
- <param>
- <name>Differential Encoding</name>
- <key>differential</key>
- <value>True</value>
- <type>bool</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Excess BW</name>
- <key>excess_bw</key>
- <value>0.35</value>
- <type>real</type>
- </param>
- <param>
- <name>Frequency BW</name>
- <key>freq_bw</key>
- <value>6.28/100.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Timing BW</name>
- <key>timing_bw</key>
- <value>6.28/100.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Phase BW</name>
- <key>phase_bw</key>
- <value>6.28/100.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Gray Code</name>
- <key>mod_code</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>"gray"</key>
- </option>
- <option>
- <name>No</name>
- <key>"none"</key>
- </option>
- </param>
- <param>
- <name>Verbose</name>
- <key>verbose</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Log</name>
- <key>log</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($log) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_psk_mod.block.yml b/gr-digital/grc/digital_psk_mod.block.yml
new file mode 100644
index 0000000000..9145718fa7
--- /dev/null
+++ b/gr-digital/grc/digital_psk_mod.block.yml
@@ -0,0 +1,65 @@
+id: digital_psk_mod
+label: PSK Mod
+category: '[Core]/Deprecated'
+
+parameters:
+- id: constellation_points
+ label: Number of Constellation Points
+ dtype: int
+ default: '8'
+- id: mod_code
+ label: Gray Code
+ dtype: enum
+ options: ['"gray"', '"none"']
+ option_labels: ['Yes', 'No']
+- id: differential
+ label: Differential Encoding
+ dtype: bool
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '2'
+- id: excess_bw
+ label: Excess BW
+ dtype: real
+ default: '0.35'
+- id: verbose
+ label: Verbose
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(verbose) == 'False' else 'none') }
+- id: log
+ label: Log
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(log) == 'False' else 'none') }
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: |-
+ digital.psk.psk_mod(
+ constellation_points=${constellation_points},
+ mod_code=${mod_code},
+ differential=${differential},
+ samples_per_symbol=${samples_per_symbol},
+ excess_bw=${excess_bw},
+ verbose=${verbose},
+ log=${log},
+ )
+
+file_format: 1
diff --git a/gr-digital/grc/digital_psk_mod.xml b/gr-digital/grc/digital_psk_mod.xml
deleted file mode 100644
index 43e60562ee..0000000000
--- a/gr-digital/grc/digital_psk_mod.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2009,2010,2011 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##PSK Mod
-###################################################
- -->
-<block>
- <name>PSK Mod</name>
- <key>digital_psk_mod</key>
- <category>[Core]/Deprecated</category>
- <import>from gnuradio import digital</import>
- <make>digital.psk.psk_mod(
- constellation_points=$constellation_points,
- mod_code=$mod_code,
- differential=$differential,
- samples_per_symbol=$samples_per_symbol,
- excess_bw=$excess_bw,
- verbose=$verbose,
- log=$log,
- )</make>
- <param>
- <name>Number of Constellation Points</name>
- <key>constellation_points</key>
- <value>8</value>
- <type>int</type>
- </param>
- <param>
- <name>Gray Code</name>
- <key>mod_code</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>"gray"</key>
- </option>
- <option>
- <name>No</name>
- <key>"none"</key>
- </option>
- </param>
- <param>
- <name>Differential Encoding</name>
- <key>differential</key>
- <value>True</value>
- <type>bool</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Excess BW</name>
- <key>excess_bw</key>
- <value>0.35</value>
- <type>real</type>
- </param>
- <param>
- <name>Verbose</name>
- <key>verbose</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Log</name>
- <key>log</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($log) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_qam_demod.block.yml b/gr-digital/grc/digital_qam_demod.block.yml
new file mode 100644
index 0000000000..5ed8f4dd1d
--- /dev/null
+++ b/gr-digital/grc/digital_qam_demod.block.yml
@@ -0,0 +1,80 @@
+id: digital_qam_demod
+label: QAM Demod
+category: '[Core]/Deprecated'
+
+parameters:
+- id: constellation_points
+ label: Number of Constellation Points
+ dtype: int
+ default: '16'
+- id: differential
+ label: Differential Encoding
+ dtype: bool
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '2'
+- id: excess_bw
+ label: Excess BW
+ dtype: real
+ default: '0.35'
+- id: freq_bw
+ label: Frequency BW
+ dtype: real
+ default: 6.28/100.0
+- id: timing_bw
+ label: Timing BW
+ dtype: real
+ default: 6.28/100.0
+- id: phase_bw
+ label: Phase BW
+ dtype: real
+ default: 6.28/100.0
+- id: mod_code
+ label: Gray Code
+ dtype: enum
+ options: ['"gray"', '"none"']
+ option_labels: ['Yes', 'No']
+- id: verbose
+ label: Verbose
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(verbose) == 'False' else 'none') }
+- id: log
+ label: Log
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(log) == 'False' else 'none') }
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: |-
+ digital.qam.qam_demod(
+ constellation_points=${constellation_points},
+ differential=${differential},
+ samples_per_symbol=${samples_per_symbol},
+ excess_bw=${excess_bw},
+ freq_bw=${freq_bw},
+ timing_bw=${timing_bw},
+ phase_bw=${phase_bw},
+ mod_code=${mod_code},
+ verbose=${verbose},
+ log=${log},
+ )
+
+file_format: 1
diff --git a/gr-digital/grc/digital_qam_demod.xml b/gr-digital/grc/digital_qam_demod.xml
deleted file mode 100644
index c9a6c6aa4b..0000000000
--- a/gr-digital/grc/digital_qam_demod.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2009,2010,2011 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##QAM Demod
-###################################################
- -->
-<block>
- <name>QAM Demod</name>
- <key>digital_qam_demod</key>
- <category>[Core]/Deprecated</category>
- <import>from gnuradio import digital</import>
- <make>digital.qam.qam_demod(
- constellation_points=$constellation_points,
- differential=$differential,
- samples_per_symbol=$samples_per_symbol,
- excess_bw=$excess_bw,
- freq_bw=$freq_bw,
- timing_bw=$timing_bw,
- phase_bw=$phase_bw,
- mod_code=$mod_code,
- verbose=$verbose,
- log=$log,
- )</make>
- <param>
- <name>Number of Constellation Points</name>
- <key>constellation_points</key>
- <value>16</value>
- <type>int</type>
- </param>
- <param>
- <name>Differential Encoding</name>
- <key>differential</key>
- <value>True</value>
- <type>bool</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Excess BW</name>
- <key>excess_bw</key>
- <value>0.35</value>
- <type>real</type>
- </param>
- <param>
- <name>Frequency BW</name>
- <key>freq_bw</key>
- <value>6.28/100.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Timing BW</name>
- <key>timing_bw</key>
- <value>6.28/100.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Phase BW</name>
- <key>phase_bw</key>
- <value>6.28/100.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Gray Code</name>
- <key>mod_code</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>"gray"</key>
- </option>
- <option>
- <name>No</name>
- <key>"none"</key>
- </option>
- </param>
- <param>
- <name>Verbose</name>
- <key>verbose</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Log</name>
- <key>log</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($log) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_qam_mod.block.yml b/gr-digital/grc/digital_qam_mod.block.yml
new file mode 100644
index 0000000000..6cfcc2966e
--- /dev/null
+++ b/gr-digital/grc/digital_qam_mod.block.yml
@@ -0,0 +1,65 @@
+id: digital_qam_mod
+label: QAM Mod
+category: '[Core]/Deprecated'
+
+parameters:
+- id: constellation_points
+ label: Number of Constellation Points
+ dtype: int
+ default: '16'
+- id: mod_code
+ label: Gray Code
+ dtype: enum
+ options: ['"gray"', '"none"']
+ option_labels: ['Yes', 'No']
+- id: differential
+ label: Differential Encoding
+ dtype: bool
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: samples_per_symbol
+ label: Samples/Symbol
+ dtype: int
+ default: '2'
+- id: excess_bw
+ label: Excess BW
+ dtype: real
+ default: '0.35'
+- id: verbose
+ label: Verbose
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(verbose) == 'False' else 'none') }
+- id: log
+ label: Log
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: ${ ('part' if str(log) == 'False' else 'none') }
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import digital
+ make: |-
+ digital.qam.qam_mod(
+ constellation_points=${constellation_points},
+ mod_code=${mod_code},
+ differential=${differential},
+ samples_per_symbol=${samples_per_symbol},
+ excess_bw=${excess_bw},
+ verbose=${verbose},
+ log=${log},
+ )
+
+file_format: 1
diff --git a/gr-digital/grc/digital_qam_mod.xml b/gr-digital/grc/digital_qam_mod.xml
deleted file mode 100644
index 5c3d5139d2..0000000000
--- a/gr-digital/grc/digital_qam_mod.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2009,2010,2011 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##QAM Mod
-###################################################
- -->
-<block>
- <name>QAM Mod</name>
- <key>digital_qam_mod</key>
- <category>[Core]/Deprecated</category>
- <import>from gnuradio import digital</import>
- <make>digital.qam.qam_mod(
- constellation_points=$constellation_points,
- mod_code=$mod_code,
- differential=$differential,
- samples_per_symbol=$samples_per_symbol,
- excess_bw=$excess_bw,
- verbose=$verbose,
- log=$log,
- )</make>
- <param>
- <name>Number of Constellation Points</name>
- <key>constellation_points</key>
- <value>16</value>
- <type>int</type>
- </param>
- <param>
- <name>Gray Code</name>
- <key>mod_code</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>"gray"</key>
- </option>
- <option>
- <name>No</name>
- <key>"none"</key>
- </option>
- </param>
- <param>
- <name>Differential Encoding</name>
- <key>differential</key>
- <value>True</value>
- <type>bool</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Samples/Symbol</name>
- <key>samples_per_symbol</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Excess BW</name>
- <key>excess_bw</key>
- <value>0.35</value>
- <type>real</type>
- </param>
- <param>
- <name>Verbose</name>
- <key>verbose</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Log</name>
- <key>log</key>
- <value>False</value>
- <type>bool</type>
- <hide>#if str($log) == 'False' then 'part' else 'none'#</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_scrambler_bb.block.yml b/gr-digital/grc/digital_scrambler_bb.block.yml
new file mode 100644
index 0000000000..fb8b3cca1f
--- /dev/null
+++ b/gr-digital/grc/digital_scrambler_bb.block.yml
@@ -0,0 +1,30 @@
+id: digital_scrambler_bb
+label: Scrambler
+
+parameters:
+- id: mask
+ label: Mask
+ dtype: hex
+ default: '0x8A'
+- id: seed
+ label: Seed
+ dtype: hex
+ default: '0x7F'
+- id: len
+ label: Length
+ dtype: int
+ default: '7'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.scrambler_bb(${mask}, ${seed}, ${len})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_scrambler_bb.xml b/gr-digital/grc/digital_scrambler_bb.xml
deleted file mode 100644
index 9c40b49f64..0000000000
--- a/gr-digital/grc/digital_scrambler_bb.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Descrambler
-###################################################
- -->
-<block>
- <name>Scrambler</name>
- <key>digital_scrambler_bb</key>
- <import>from gnuradio import digital</import>
- <make>digital.scrambler_bb($mask, $seed, $len)</make>
- <param>
- <name>Mask</name>
- <key>mask</key>
- <value>0x8A</value>
- <type>hex</type>
- </param>
- <param>
- <name>Seed</name>
- <key>seed</key>
- <value>0x7F</value>
- <type>hex</type>
- </param>
- <param>
- <name>Length</name>
- <key>len</key>
- <value>7</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_simple_correlator.block.yml b/gr-digital/grc/digital_simple_correlator.block.yml
new file mode 100644
index 0000000000..aae6139525
--- /dev/null
+++ b/gr-digital/grc/digital_simple_correlator.block.yml
@@ -0,0 +1,21 @@
+id: digital_simple_correlator
+label: Simple Correlator
+
+parameters:
+- id: payload_bytesize
+ label: Payload Byte Size
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.simple_correlator(${payload_bytesize})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_simple_correlator.xml b/gr-digital/grc/digital_simple_correlator.xml
deleted file mode 100644
index 3b70e59b12..0000000000
--- a/gr-digital/grc/digital_simple_correlator.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Simple Correlator
-###################################################
- -->
-<block>
- <name>Simple Correlator</name>
- <key>digital_simple_correlator</key>
- <import>from gnuradio import digital</import>
- <make>digital.simple_correlator($payload_bytesize)</make>
- <param>
- <name>Payload Byte Size</name>
- <key>payload_bytesize</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_simple_framer.block.yml b/gr-digital/grc/digital_simple_framer.block.yml
new file mode 100644
index 0000000000..f711948981
--- /dev/null
+++ b/gr-digital/grc/digital_simple_framer.block.yml
@@ -0,0 +1,21 @@
+id: digital_simple_framer
+label: Simple Framer
+
+parameters:
+- id: payload_bytesize
+ label: Payload Byte Size
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import digital
+ make: digital.simple_framer(${payload_bytesize})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_simple_framer.xml b/gr-digital/grc/digital_simple_framer.xml
deleted file mode 100644
index 2d57222f3b..0000000000
--- a/gr-digital/grc/digital_simple_framer.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Simple Framer
-###################################################
- -->
-<block>
- <name>Simple Framer</name>
- <key>digital_simple_framer</key>
- <import>from gnuradio import digital</import>
- <make>digital.simple_framer($payload_bytesize)</make>
- <param>
- <name>Payload Byte Size</name>
- <key>payload_bytesize</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-digital/grc/digital_symbol_sync_xx.block.yml b/gr-digital/grc/digital_symbol_sync_xx.block.yml
new file mode 100644
index 0000000000..ec63825127
--- /dev/null
+++ b/gr-digital/grc/digital_symbol_sync_xx.block.yml
@@ -0,0 +1,108 @@
+id: digital_symbol_sync_xx
+label: Symbol Sync
+category: '[Core]/Synchronizers'
+
+parameters:
+- id: type
+ label: I/O Type
+ dtype: enum
+ options: [cc, ff]
+ option_labels: [Complex, Float]
+ option_attributes:
+ input: [complex, float]
+ output: [complex, float]
+ hide: part
+- id: ted_type
+ label: Timing Error Detector
+ dtype: enum
+ options: [digital.TED_MUELLER_AND_MULLER, digital.TED_MOD_MUELLER_AND_MULLER,
+ digital.TED_ZERO_CROSSING, digital.TED_GARDNER, digital.TED_EARLY_LATE, digital.TED_DANDREA_AND_MENGALI_GEN_MSK,
+ digital.TED_MENGALI_AND_DANDREA_GMSK, digital.TED_SIGNAL_TIMES_SLOPE_ML, digital.TED_SIGNUM_TIMES_SLOPE_ML]
+ option_labels: ["Mueller and M\xFCller", "Modified Mueller and M\xFCller", Zero
+ Crossing, Gardner, Early-Late, D'Andrea and Mengali Gen MSK, Mengali and
+ D'Andrea GMSK, 'y[n]y''[n] Maximum Likelyhood', 'sgn(y[n])y''[n] Maximum
+ Likelyhood']
+ option_attributes:
+ hide_constellation: [part, part, part, all, all, all, all, all, all]
+- id: constellation
+ label: TED Slicer Constellation
+ dtype: raw
+ default: digital.constellation_bpsk().base()
+ hide: ${ ted_type.hide_constellation }
+- id: sps
+ label: Samples per Symbol
+ dtype: real
+ default: sps
+- id: ted_gain
+ label: Expected TED Gain
+ dtype: real
+ default: '1.0'
+- id: loop_bw
+ label: Loop Bandwidth
+ dtype: real
+ default: '0.045'
+- id: damping
+ label: Damping Factor
+ dtype: real
+ default: '1.0'
+- id: max_dev
+ label: Maximum Deviation
+ dtype: real
+ default: '1.5'
+- id: osps
+ label: Output Samples/Symbol
+ dtype: int
+ default: '1'
+- id: resamp_type
+ label: Interpolating Resampler
+ dtype: enum
+ options: [digital.IR_MMSE_8TAP, digital.IR_PFB_NO_MF, digital.IR_PFB_MF]
+ option_labels: ['MMSE, 8 tap FIR', 'Polyphase Filterbank, MMSE', 'Polyphase Filterbank,
+ MF']
+ option_attributes:
+ hide_nfilters: [all, '', '']
+ hide_pfb_mf_taps: [all, all, '']
+- id: nfilters
+ label: Filterbank Arms
+ dtype: int
+ default: '128'
+ hide: ${ resamp_type.hide_nfilters }
+- id: pfb_mf_taps
+ label: PFB MF Taps
+ dtype: real_vector
+ default: '[]'
+ hide: ${ resamp_type.hide_pfb_mf_taps }
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+- label: error
+ domain: stream
+ dtype: float
+ optional: true
+- label: T_inst
+ domain: stream
+ dtype: float
+ optional: true
+- label: T_avg
+ domain: stream
+ dtype: float
+ optional: true
+
+templates:
+ imports: |-
+ from gnuradio import digital
+ from gnuradio import filter
+ make: digital.symbol_sync_${type}(${ted_type}, ${sps}, ${loop_bw}, ${damping},
+ ${ted_gain}, ${max_dev}, ${osps}, ${constellation}, ${resamp_type}, ${nfilters},
+ ${pfb_mf_taps})
+ callbacks:
+ - set_loop_bandwidth(${loop_bw})
+ - set_damping_factor(${damping})
+ - set_ted_gain(${ted_gain})
+
+file_format: 1
diff --git a/gr-digital/grc/digital_symbol_sync_xx.xml b/gr-digital/grc/digital_symbol_sync_xx.xml
deleted file mode 100644
index ffd2f5daff..0000000000
--- a/gr-digital/grc/digital_symbol_sync_xx.xml
+++ /dev/null
@@ -1,207 +0,0 @@
-<?xml version="1.0"?>
-<!--
- Copyright (C) 2016-2017 Free Software Foundation, Inc.
-
- This file is part of GNU Radio.
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
- -->
-
-<block>
- <name>Symbol Sync</name>
- <key>digital_symbol_sync_xx</key>
- <category>[Core]/Synchronizers</category>
- <import>from gnuradio import digital</import>
- <import>from gnuradio import filter</import>
- <make>digital.symbol_sync_$(type)($ted_type, $sps, $loop_bw, $damping, $ted_gain, $max_dev, $osps, $constellation, $resamp_type, $nfilters, $pfb_mf_taps)</make>
-
- <callback>set_loop_bandwidth($loop_bw)</callback>
- <callback>set_damping_factor($damping)</callback>
- <callback>set_ted_gain($ted_gain)</callback>
-
- <param>
- <name>I/O Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>cc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>ff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- </option>
- </param>
- <param>
- <name>Timing Error Detector</name>
- <key>ted_type</key>
- <type>enum</type>
- <option>
- <name>Mueller and Müller</name>
- <key>digital.TED_MUELLER_AND_MULLER</key>
- <opt>hide_constellation:part</opt>
- </option>
- <option>
- <name>Modified Mueller and Müller</name>
- <key>digital.TED_MOD_MUELLER_AND_MULLER</key>
- <opt>hide_constellation:part</opt>
- </option>
- <option>
- <name>Zero Crossing</name>
- <key>digital.TED_ZERO_CROSSING</key>
- <opt>hide_constellation:part</opt>
- </option>
- <option>
- <name>Gardner</name>
- <key>digital.TED_GARDNER</key>
- <opt>hide_constellation:all</opt>
- </option>
- <option>
- <name>Early-Late</name>
- <key>digital.TED_EARLY_LATE</key>
- <opt>hide_constellation:all</opt>
- </option>
- <option>
- <name>D'Andrea and Mengali Gen MSK</name>
- <key>digital.TED_DANDREA_AND_MENGALI_GEN_MSK</key>
- <opt>hide_constellation:all</opt>
- </option>
- <option>
- <name>Mengali and D'Andrea GMSK</name>
- <key>digital.TED_MENGALI_AND_DANDREA_GMSK</key>
- <opt>hide_constellation:all</opt>
- </option>
- <option>
- <name>y[n]y'[n] Maximum Likelyhood</name>
- <key>digital.TED_SIGNAL_TIMES_SLOPE_ML</key>
- <opt>hide_constellation:all</opt>
- </option>
- <option>
- <name>sgn(y[n])y'[n] Maximum Likelyhood</name>
- <key>digital.TED_SIGNUM_TIMES_SLOPE_ML</key>
- <opt>hide_constellation:all</opt>
- </option>
- </param>
- <param>
- <name>TED Slicer Constellation</name>
- <key>constellation</key>
- <value>digital.constellation_bpsk().base()</value>
- <type>raw</type>
- <hide>$ted_type.hide_constellation</hide>
- </param>
- <param>
- <name>Samples per Symbol</name>
- <key>sps</key>
- <value>sps</value>
- <type>real</type>
- </param>
- <param>
- <name>Expected TED Gain</name>
- <key>ted_gain</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Loop Bandwidth</name>
- <key>loop_bw</key>
- <value>0.045</value>
- <type>real</type>
- </param>
- <param>
- <name>Damping Factor</name>
- <key>damping</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Maximum Deviation</name>
- <key>max_dev</key>
- <value>1.5</value>
- <type>real</type>
- </param>
- <param>
- <name>Output Samples/Symbol</name>
- <key>osps</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Interpolating Resampler</name>
- <key>resamp_type</key>
- <type>enum</type>
- <option>
- <name>MMSE, 8 tap FIR</name>
- <key>digital.IR_MMSE_8TAP</key>
- <opt>hide_nfilters:all</opt>
- <opt>hide_pfb_mf_taps:all</opt>
- </option>
- <option>
- <name>Polyphase Filterbank, MMSE</name>
- <key>digital.IR_PFB_NO_MF</key>
- <opt>hide_nfilters:</opt>
- <opt>hide_pfb_mf_taps:all</opt>
- </option>
- <option>
- <name>Polyphase Filterbank, MF</name>
- <key>digital.IR_PFB_MF</key>
- <opt>hide_nfilters:</opt>
- <opt>hide_pfb_mf_taps:</opt>
- </option>
- </param>
- <param>
- <name>Filterbank Arms</name>
- <key>nfilters</key>
- <value>128</value>
- <type>int</type>
- <hide>$resamp_type.hide_nfilters</hide>
- </param>
- <param>
- <name>PFB MF Taps</name>
- <key>pfb_mf_taps</key>
- <value>[]</value>
- <type>real_vector</type>
- <hide>$resamp_type.hide_pfb_mf_taps</hide>
- </param>
-
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <source>
- <name>error</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>T_inst</name>
- <type>float</type>
- <optional>1</optional>
- </source>
- <source>
- <name>T_avg</name>
- <type>float</type>
- <optional>1</optional>
- </source>
-</block>
diff --git a/gr-digital/grc/variable_header_format_default.block.yml b/gr-digital/grc/variable_header_format_default.block.yml
new file mode 100644
index 0000000000..d326eb2e86
--- /dev/null
+++ b/gr-digital/grc/variable_header_format_default.block.yml
@@ -0,0 +1,25 @@
+id: variable_header_format_default
+label: Default Header Format Obj.
+
+parameters:
+- id: access_code
+ label: Access Code
+ dtype: string
+ default: '0'
+- id: threshold
+ label: Threshold
+ dtype: int
+ default: '0'
+- id: bps
+ label: Payload Bits per Symbol
+ dtype: int
+ default: '1'
+value: ${ digital.header_format_default(access_code, threshold, bps) }
+
+templates:
+ imports: from gnuradio import digital
+ var_make: "\n% if int(access_code)==0 #:\nself.${id} = ${id} = digital.header_format_default(digital.packet_utils.default_access_code,\
+ \ ${threshold}, ${bps})\n% else:\nself.${id} = ${id} = digital.header_format_default(${access_code},\
+ \ ${threshold}, ${bps})\n% endif\n "
+
+file_format: 1
diff --git a/gr-digital/grc/variable_header_format_default.xml b/gr-digital/grc/variable_header_format_default.xml
deleted file mode 100644
index 88727600ed..0000000000
--- a/gr-digital/grc/variable_header_format_default.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# header_format_default object
-###################################################
- -->
-<block>
- <name>Default Header Format Obj.</name>
- <key>variable_header_format_default</key>
- <import>from gnuradio import digital</import>
- <var_make>
-#if int($access_code())==0 #
-self.$(id) = $(id) = digital.header_format_default(digital.packet_utils.default_access_code, $threshold, $bps)
-#else
-self.$(id) = $(id) = digital.header_format_default($access_code, $threshold, $bps)
-#end if
- </var_make>
- <var_value>digital.header_format_default($access_code, $threshold, $bps)</var_value>
- <make></make>
-
- <param>
- <name>Access Code</name>
- <key>access_code</key>
- <value>0</value>
- <type>string</type>
- </param>
-
- <param>
- <name>Threshold</name>
- <key>threshold</key>
- <value>0</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Payload Bits per Symbol</name>
- <key>bps</key>
- <value>1</value>
- <type>int</type>
- </param>
-
-</block>
diff --git a/gr-dtv/grc/CMakeLists.txt b/gr-dtv/grc/CMakeLists.txt
index e226d09976..3ed47f2311 100644
--- a/gr-dtv/grc/CMakeLists.txt
+++ b/gr-dtv/grc/CMakeLists.txt
@@ -18,60 +18,59 @@
# Boston, MA 02110-1301, USA.
install(FILES
- dtv_atsc_deinterleaver.xml
- dtv_atsc_depad.xml
- dtv_atsc_derandomizer.xml
- dtv_atsc_equalizer.xml
- dtv_atsc_fpll.xml
- dtv_atsc_fs_checker.xml
- dtv_atsc_rs_decoder.xml
- dtv_atsc_rx.xml
- dtv_atsc_rx_filter.xml
- dtv_atsc_sync.xml
- dtv_atsc_viterbi_decoder.xml
- dtv_block_tree.xml
- dtv_atsc_pad.xml
- dtv_atsc_randomizer.xml
- dtv_atsc_rs_encoder.xml
- dtv_atsc_interleaver.xml
- dtv_atsc_trellis_encoder.xml
- dtv_atsc_field_sync_mux.xml
- dtv_dvb_bbheader_bb.xml
- dtv_dvb_bbscrambler_bb.xml
- dtv_dvb_bch_bb.xml
- dtv_dvb_ldpc_bb.xml
- dtv_dvbt2_interleaver_bb.xml
- dtv_dvbt2_modulator_bc.xml
- dtv_dvbt2_cellinterleaver_cc.xml
- dtv_dvbt2_framemapper_cc.xml
- dtv_dvbt2_freqinterleaver_cc.xml
- dtv_dvbt2_pilotgenerator_cc.xml
- dtv_dvbt2_paprtr_cc.xml
- dtv_dvbt2_p1insertion_cc.xml
- dtv_dvbt2_miso_cc.xml
- dtv_dvbs2_interleaver_bb.xml
- dtv_dvbs2_modulator_bc.xml
- dtv_dvbs2_physical_cc.xml
- dtv_dvbt_energy_dispersal.xml
- dtv_dvbt_reed_solomon_enc.xml
- dtv_dvbt_convolutional_interleaver.xml
- dtv_dvbt_inner_coder.xml
- dtv_dvbt_bit_inner_interleaver.xml
- dtv_dvbt_symbol_inner_interleaver.xml
- dtv_dvbt_map.xml
- dtv_dvbt_reference_signals.xml
- dtv_dvbt_ofdm_sym_acquisition.xml
- dtv_dvbt_demod_reference_signals.xml
- dtv_dvbt_demap.xml
- dtv_dvbt_bit_inner_deinterleaver.xml
- dtv_dvbt_viterbi_decoder.xml
- dtv_dvbt_convolutional_deinterleaver.xml
- dtv_dvbt_reed_solomon_dec.xml
- dtv_dvbt_energy_descramble.xml
- dtv_catv_transport_framing_enc_bb.xml
- dtv_catv_reed_solomon_enc_bb.xml
- dtv_catv_randomizer_bb.xml
- dtv_catv_frame_sync_enc_bb.xml
- dtv_catv_trellis_enc_bb.xml
+ dtv_atsc_deinterleaver.block.yml
+ dtv_atsc_depad.block.yml
+ dtv_atsc_derandomizer.block.yml
+ dtv_atsc_equalizer.block.yml
+ dtv_atsc_fpll.block.yml
+ dtv_atsc_fs_checker.block.yml
+ dtv_atsc_rs_decoder.block.yml
+ dtv_atsc_rx.block.yml
+ dtv_atsc_rx_filter.block.yml
+ dtv_atsc_sync.block.yml
+ dtv_atsc_viterbi_decoder.block.yml
+ dtv_atsc_pad.block.yml
+ dtv_atsc_randomizer.block.yml
+ dtv_atsc_rs_encoder.block.yml
+ dtv_atsc_interleaver.block.yml
+ dtv_atsc_trellis_encoder.block.yml
+ dtv_atsc_field_sync_mux.block.yml
+ dtv_dvb_bbheader_bb.block.yml
+ dtv_dvb_bbscrambler_bb.block.yml
+ dtv_dvb_bch_bb.block.yml
+ dtv_dvb_ldpc_bb.block.yml
+ dtv_dvbt2_interleaver_bb.block.yml
+ dtv_dvbt2_modulator_bc.block.yml
+ dtv_dvbt2_cellinterleaver_cc.block.yml
+ dtv_dvbt2_framemapper_cc.block.yml
+ dtv_dvbt2_freqinterleaver_cc.block.yml
+ dtv_dvbt2_pilotgenerator_cc.block.yml
+ dtv_dvbt2_paprtr_cc.block.yml
+ dtv_dvbt2_p1insertion_cc.block.yml
+ dtv_dvbt2_miso_cc.block.yml
+ dtv_dvbs2_interleaver_bb.block.yml
+ dtv_dvbs2_modulator_bc.block.yml
+ dtv_dvbs2_physical_cc.block.yml
+ dtv_dvbt_energy_dispersal.block.yml
+ dtv_dvbt_reed_solomon_enc.block.yml
+ dtv_dvbt_convolutional_interleaver.block.yml
+ dtv_dvbt_inner_coder.block.yml
+ dtv_dvbt_bit_inner_interleaver.block.yml
+ dtv_dvbt_symbol_inner_interleaver.block.yml
+ dtv_dvbt_map.block.yml
+ dtv_dvbt_reference_signals.block.yml
+ dtv_dvbt_ofdm_sym_acquisition.block.yml
+ dtv_dvbt_demod_reference_signals.block.yml
+ dtv_dvbt_demap.block.yml
+ dtv_dvbt_bit_inner_deinterleaver.block.yml
+ dtv_dvbt_viterbi_decoder.block.yml
+ dtv_dvbt_convolutional_deinterleaver.block.yml
+ dtv_dvbt_reed_solomon_dec.block.yml
+ dtv_dvbt_energy_descramble.block.yml
+ dtv_catv_transport_framing_enc_bb.block.yml
+ dtv_catv_reed_solomon_enc_bb.block.yml
+ dtv_catv_randomizer_bb.block.yml
+ dtv_catv_frame_sync_enc_bb.block.yml
+ dtv_catv_trellis_enc_bb.block.yml
DESTINATION ${GRC_BLOCKS_DIR}
)
diff --git a/gr-dtv/grc/dtv.tree.yml b/gr-dtv/grc/dtv.tree.yml
new file mode 100644
index 0000000000..ad0b0cafb8
--- /dev/null
+++ b/gr-dtv/grc/dtv.tree.yml
@@ -0,0 +1,62 @@
+'[Core]':
+- Digital Television:
+ - ATSC:
+ - dtv_atsc_deinterleaver
+ - dtv_atsc_depad
+ - dtv_atsc_derandomizer
+ - dtv_atsc_equalizer
+ - dtv_atsc_fpll
+ - dtv_atsc_fs_checker
+ - dtv_atsc_rs_decoder
+ - dtv_atsc_rx
+ - dtv_atsc_rx_filter
+ - dtv_atsc_sync
+ - dtv_atsc_viterbi_decoder
+ - dtv_atsc_pad
+ - dtv_atsc_randomizer
+ - dtv_atsc_rs_encoder
+ - dtv_atsc_interleaver
+ - dtv_atsc_trellis_encoder
+ - dtv_atsc_field_sync_mux
+ - DVB:
+ - dtv_dvb_bbheader_bb
+ - dtv_dvb_bbscrambler_bb
+ - dtv_dvb_bch_bb
+ - dtv_dvb_ldpc_bb
+ - DVB-T2:
+ - dtv_dvbt2_interleaver_bb
+ - dtv_dvbt2_modulator_bc
+ - dtv_dvbt2_cellinterleaver_cc
+ - dtv_dvbt2_framemapper_cc
+ - dtv_dvbt2_freqinterleaver_cc
+ - dtv_dvbt2_pilotgenerator_cc
+ - dtv_dvbt2_paprtr_cc
+ - dtv_dvbt2_p1insertion_cc
+ - dtv_dvbt2_miso_cc
+ - DVB-S2:
+ - dtv_dvbs2_interleaver_bb
+ - dtv_dvbs2_modulator_bc
+ - dtv_dvbs2_physical_cc
+ - DVB-T:
+ - dtv_dvbt_energy_dispersal
+ - dtv_dvbt_reed_solomon_enc
+ - dtv_dvbt_convolutional_interleaver
+ - dtv_dvbt_inner_coder
+ - dtv_dvbt_bit_inner_interleaver
+ - dtv_dvbt_symbol_inner_interleaver
+ - dtv_dvbt_map
+ - dtv_dvbt_reference_signals
+ - dtv_dvbt_ofdm_sym_acquisition
+ - dtv_dvbt_demod_reference_signals
+ - dtv_dvbt_demap
+ - dtv_dvbt_bit_inner_deinterleaver
+ - dtv_dvbt_viterbi_decoder
+ - dtv_dvbt_convolutional_deinterleaver
+ - dtv_dvbt_reed_solomon_dec
+ - dtv_dvbt_energy_descramble
+ - ITU-T J.83B:
+ - dtv_catv_transport_framing_enc_bb
+ - dtv_catv_reed_solomon_enc_bb
+ - dtv_catv_randomizer_bb
+ - dtv_catv_frame_sync_enc_bb
+ - dtv_catv_trellis_enc_bb
diff --git a/gr-dtv/grc/dtv_atsc_deinterleaver.block.yml b/gr-dtv/grc/dtv_atsc_deinterleaver.block.yml
new file mode 100644
index 0000000000..5384809778
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_deinterleaver.block.yml
@@ -0,0 +1,18 @@
+id: dtv_atsc_deinterleaver
+label: ATSC Deinterleaver
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_deinterleaver()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_deinterleaver.xml b/gr-dtv/grc/dtv_atsc_deinterleaver.xml
deleted file mode 100644
index 051ea77554..0000000000
--- a/gr-dtv/grc/dtv_atsc_deinterleaver.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Deinterleaver
-###################################################
- -->
-<block>
- <name>ATSC Deinterleaver</name>
- <key>dtv_atsc_deinterleaver</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_deinterleaver()</make>
-
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>256</vlen>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>256</vlen>
- </source>
-
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_depad.block.yml b/gr-dtv/grc/dtv_atsc_depad.block.yml
new file mode 100644
index 0000000000..463de2018b
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_depad.block.yml
@@ -0,0 +1,17 @@
+id: dtv_atsc_depad
+label: ATSC Depad
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_depad()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_depad.xml b/gr-dtv/grc/dtv_atsc_depad.xml
deleted file mode 100644
index 95a1380914..0000000000
--- a/gr-dtv/grc/dtv_atsc_depad.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Depad
-###################################################
- -->
-<block>
- <name>ATSC Depad</name>
- <key>dtv_atsc_depad</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_depad()</make>
-
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>256</vlen>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_derandomizer.block.yml b/gr-dtv/grc/dtv_atsc_derandomizer.block.yml
new file mode 100644
index 0000000000..c64e7032fe
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_derandomizer.block.yml
@@ -0,0 +1,18 @@
+id: dtv_atsc_derandomizer
+label: ATSC Derandomizer
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_derandomizer()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_derandomizer.xml b/gr-dtv/grc/dtv_atsc_derandomizer.xml
deleted file mode 100644
index 5473f47e8c..0000000000
--- a/gr-dtv/grc/dtv_atsc_derandomizer.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Derandomizer
-###################################################
- -->
-<block>
- <name>ATSC Derandomizer</name>
- <key>dtv_atsc_derandomizer</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_derandomizer()</make>
-
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>256</vlen>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>256</vlen>
- </source>
-
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_equalizer.block.yml b/gr-dtv/grc/dtv_atsc_equalizer.block.yml
new file mode 100644
index 0000000000..e6b5b3c032
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_equalizer.block.yml
@@ -0,0 +1,18 @@
+id: dtv_atsc_equalizer
+label: ATSC Equalizer
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 4096
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 4096
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_equalizer()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_equalizer.xml b/gr-dtv/grc/dtv_atsc_equalizer.xml
deleted file mode 100644
index 7faf65fd22..0000000000
--- a/gr-dtv/grc/dtv_atsc_equalizer.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Equalizer
-###################################################
- -->
-<block>
- <name>ATSC Equalizer</name>
- <key>dtv_atsc_equalizer</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_equalizer()</make>
-
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>4096</vlen>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>4096</vlen>
- </source>
-
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_field_sync_mux.block.yml b/gr-dtv/grc/dtv_atsc_field_sync_mux.block.yml
new file mode 100644
index 0000000000..767d56d5d1
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_field_sync_mux.block.yml
@@ -0,0 +1,18 @@
+id: dtv_atsc_field_sync_mux
+label: ATSC Field Sync Mux
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 1024
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_field_sync_mux()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_field_sync_mux.xml b/gr-dtv/grc/dtv_atsc_field_sync_mux.xml
deleted file mode 100644
index 0037a9340e..0000000000
--- a/gr-dtv/grc/dtv_atsc_field_sync_mux.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Field Sync Mux
-###################################################
- -->
-<block>
- <name>ATSC Field Sync Mux</name>
- <key>dtv_atsc_field_sync_mux</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_field_sync_mux()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>256</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>1024</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_fpll.block.yml b/gr-dtv/grc/dtv_atsc_fpll.block.yml
new file mode 100644
index 0000000000..39568a8535
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_fpll.block.yml
@@ -0,0 +1,21 @@
+id: dtv_atsc_fpll
+label: ATSC Receiver FPLL
+
+parameters:
+- id: rate
+ label: Sample Rate
+ dtype: float
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_fpll(${rate})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_fpll.xml b/gr-dtv/grc/dtv_atsc_fpll.xml
deleted file mode 100644
index 00d28ce8b6..0000000000
--- a/gr-dtv/grc/dtv_atsc_fpll.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Receiver PLL
-###################################################
- -->
-<block>
- <name>ATSC Receiver FPLL</name>
- <key>dtv_atsc_fpll</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_fpll($rate)</make>
-
- <param>
- <name>Sample Rate</name>
- <key>rate</key>
- <type>float</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_fs_checker.block.yml b/gr-dtv/grc/dtv_atsc_fs_checker.block.yml
new file mode 100644
index 0000000000..fbf97a9255
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_fs_checker.block.yml
@@ -0,0 +1,18 @@
+id: dtv_atsc_fs_checker
+label: ATSC Field Sync Checker
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 4096
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 4096
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_fs_checker()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_fs_checker.xml b/gr-dtv/grc/dtv_atsc_fs_checker.xml
deleted file mode 100644
index 4c733d53b9..0000000000
--- a/gr-dtv/grc/dtv_atsc_fs_checker.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Field Sync Checker
-###################################################
- -->
-<block>
- <name>ATSC Field Sync Checker</name>
- <key>dtv_atsc_fs_checker</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_fs_checker()</make>
-
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>4096</vlen>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>4096</vlen>
- </source>
-
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_interleaver.block.yml b/gr-dtv/grc/dtv_atsc_interleaver.block.yml
new file mode 100644
index 0000000000..65f769d0e6
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_interleaver.block.yml
@@ -0,0 +1,18 @@
+id: dtv_atsc_interleaver
+label: ATSC Interleaver
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_interleaver()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_interleaver.xml b/gr-dtv/grc/dtv_atsc_interleaver.xml
deleted file mode 100644
index 3b1045c580..0000000000
--- a/gr-dtv/grc/dtv_atsc_interleaver.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Interleaver
-###################################################
- -->
-<block>
- <name>ATSC Interleaver</name>
- <key>dtv_atsc_interleaver</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_interleaver()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>256</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>256</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_pad.block.yml b/gr-dtv/grc/dtv_atsc_pad.block.yml
new file mode 100644
index 0000000000..a25d866f79
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_pad.block.yml
@@ -0,0 +1,17 @@
+id: dtv_atsc_pad
+label: ATSC Pad
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_pad()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_pad.xml b/gr-dtv/grc/dtv_atsc_pad.xml
deleted file mode 100644
index 87b8921e35..0000000000
--- a/gr-dtv/grc/dtv_atsc_pad.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Pad
-###################################################
- -->
-<block>
- <name>ATSC Pad</name>
- <key>dtv_atsc_pad</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_pad()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>256</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_randomizer.block.yml b/gr-dtv/grc/dtv_atsc_randomizer.block.yml
new file mode 100644
index 0000000000..909fad6ec3
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_randomizer.block.yml
@@ -0,0 +1,18 @@
+id: dtv_atsc_randomizer
+label: ATSC Randomizer
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_randomizer()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_randomizer.xml b/gr-dtv/grc/dtv_atsc_randomizer.xml
deleted file mode 100644
index 73c0991e1e..0000000000
--- a/gr-dtv/grc/dtv_atsc_randomizer.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Randomizer
-###################################################
- -->
-<block>
- <name>ATSC Randomizer</name>
- <key>dtv_atsc_randomizer</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_randomizer()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>256</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>256</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_rs_decoder.block.yml b/gr-dtv/grc/dtv_atsc_rs_decoder.block.yml
new file mode 100644
index 0000000000..b65eb33fca
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_rs_decoder.block.yml
@@ -0,0 +1,18 @@
+id: dtv_atsc_rs_decoder
+label: "ATSC Reed\u2013Solomon Decoder"
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_rs_decoder()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_rs_decoder.xml b/gr-dtv/grc/dtv_atsc_rs_decoder.xml
deleted file mode 100644
index 18a3053f00..0000000000
--- a/gr-dtv/grc/dtv_atsc_rs_decoder.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Reed–Solomon Decoder
-###################################################
- -->
-<block>
- <name>ATSC Reed–Solomon Decoder</name>
- <key>dtv_atsc_rs_decoder</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_rs_decoder()</make>
-
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>256</vlen>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>256</vlen>
- </source>
-
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_rs_encoder.block.yml b/gr-dtv/grc/dtv_atsc_rs_encoder.block.yml
new file mode 100644
index 0000000000..04d1ff3683
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_rs_encoder.block.yml
@@ -0,0 +1,18 @@
+id: dtv_atsc_rs_encoder
+label: ATSC RS Encoder
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_rs_encoder()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_rs_encoder.xml b/gr-dtv/grc/dtv_atsc_rs_encoder.xml
deleted file mode 100644
index af35523e05..0000000000
--- a/gr-dtv/grc/dtv_atsc_rs_encoder.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Reed-Solomom Encoder
-###################################################
- -->
-<block>
- <name>ATSC RS Encoder</name>
- <key>dtv_atsc_rs_encoder</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_rs_encoder()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>256</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>256</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_rx.block.yml b/gr-dtv/grc/dtv_atsc_rx.block.yml
new file mode 100644
index 0000000000..499c196e20
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_rx.block.yml
@@ -0,0 +1,24 @@
+id: dtv_atsc_rx
+label: ATSC Receive Pipeline
+
+parameters:
+- id: rate
+ label: Input Rate
+ dtype: float
+- id: sps
+ label: Oversampling Ratio
+ dtype: float
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_rx(${rate},${sps})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_rx.xml b/gr-dtv/grc/dtv_atsc_rx.xml
deleted file mode 100644
index 900769609f..0000000000
--- a/gr-dtv/grc/dtv_atsc_rx.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Receive Pipeline
-###################################################
- -->
-<block>
- <name>ATSC Receive Pipeline</name>
- <key>dtv_atsc_rx</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_rx($rate,$sps)</make>
-
- <param>
- <name>Input Rate</name>
- <key>rate</key>
- <type>float</type>
- </param>
-
- <param>
- <name>Oversampling Ratio</name>
- <key>sps</key>
- <type>float</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_rx_filter.block.yml b/gr-dtv/grc/dtv_atsc_rx_filter.block.yml
new file mode 100644
index 0000000000..0a352727ce
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_rx_filter.block.yml
@@ -0,0 +1,24 @@
+id: dtv_atsc_rx_filter
+label: ATSC RX Filter
+
+parameters:
+- id: rate
+ label: Input Rate
+ dtype: float
+- id: sps
+ label: Oversampling Ratio
+ dtype: float
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_rx_filter(${rate},${sps})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_rx_filter.xml b/gr-dtv/grc/dtv_atsc_rx_filter.xml
deleted file mode 100644
index bc8bf0914a..0000000000
--- a/gr-dtv/grc/dtv_atsc_rx_filter.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC RX Filter
-###################################################
- -->
-<block>
- <name>ATSC RX Filter</name>
- <key>dtv_atsc_rx_filter</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_rx_filter($rate,$sps)</make>
-
- <param>
- <name>Input Rate</name>
- <key>rate</key>
- <type>float</type>
- </param>
-
- <param>
- <name>Oversampling Ratio</name>
- <key>sps</key>
- <type>float</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_sync.block.yml b/gr-dtv/grc/dtv_atsc_sync.block.yml
new file mode 100644
index 0000000000..b4a3ac3d99
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_sync.block.yml
@@ -0,0 +1,22 @@
+id: dtv_atsc_sync
+label: ATSC Receiver SYNC
+
+parameters:
+- id: rate
+ label: Sample Rate
+ dtype: float
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 4096
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_sync(${rate})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_sync.xml b/gr-dtv/grc/dtv_atsc_sync.xml
deleted file mode 100644
index a9528f84a0..0000000000
--- a/gr-dtv/grc/dtv_atsc_sync.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Receiver Sync
-###################################################
- -->
-<block>
- <name>ATSC Receiver SYNC</name>
- <key>dtv_atsc_sync</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_sync($rate)</make>
-
- <param>
- <name>Sample Rate</name>
- <key>rate</key>
- <type>float</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>4096</vlen>
- </source>
-
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_trellis_encoder.block.yml b/gr-dtv/grc/dtv_atsc_trellis_encoder.block.yml
new file mode 100644
index 0000000000..417e3f19d6
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_trellis_encoder.block.yml
@@ -0,0 +1,18 @@
+id: dtv_atsc_trellis_encoder
+label: ATSC Trellis Encoder
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_trellis_encoder()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_trellis_encoder.xml b/gr-dtv/grc/dtv_atsc_trellis_encoder.xml
deleted file mode 100644
index 2189075008..0000000000
--- a/gr-dtv/grc/dtv_atsc_trellis_encoder.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Trellis Encoder
-###################################################
- -->
-<block>
- <name>ATSC Trellis Encoder</name>
- <key>dtv_atsc_trellis_encoder</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_trellis_encoder()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>256</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>256</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_atsc_viterbi_decoder.block.yml b/gr-dtv/grc/dtv_atsc_viterbi_decoder.block.yml
new file mode 100644
index 0000000000..bb77b072be
--- /dev/null
+++ b/gr-dtv/grc/dtv_atsc_viterbi_decoder.block.yml
@@ -0,0 +1,18 @@
+id: dtv_atsc_viterbi_decoder
+label: ATSC Viterbi Decoder
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 4096
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 256
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.atsc_viterbi_decoder()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_atsc_viterbi_decoder.xml b/gr-dtv/grc/dtv_atsc_viterbi_decoder.xml
deleted file mode 100644
index 23d58d08af..0000000000
--- a/gr-dtv/grc/dtv_atsc_viterbi_decoder.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ATSC Equalizer
-###################################################
- -->
-<block>
- <name>ATSC Viterbi Decoder</name>
- <key>dtv_atsc_viterbi_decoder</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.atsc_viterbi_decoder()</make>
-
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>4096</vlen>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>256</vlen>
- </source>
-
-</block>
diff --git a/gr-dtv/grc/dtv_block_tree.xml b/gr-dtv/grc/dtv_block_tree.xml
deleted file mode 100644
index 8dcbd18127..0000000000
--- a/gr-dtv/grc/dtv_block_tree.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2014,2015,2016 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##Block Tree for GR DTV blocks.
-###################################################
- -->
-<cat>
- <name>[Core]</name>
- <cat>
- <name>Digital Television</name>
- <cat>
- <name>ATSC</name>
- <block>dtv_atsc_deinterleaver</block>
- <block>dtv_atsc_depad</block>
- <block>dtv_atsc_derandomizer</block>
- <block>dtv_atsc_equalizer</block>
- <block>dtv_atsc_fpll</block>
- <block>dtv_atsc_fs_checker</block>
- <block>dtv_atsc_rs_decoder</block>
- <block>dtv_atsc_rx</block>
- <block>dtv_atsc_rx_filter</block>
- <block>dtv_atsc_sync</block>
- <block>dtv_atsc_viterbi_decoder</block>
- <block>dtv_atsc_pad</block>
- <block>dtv_atsc_randomizer</block>
- <block>dtv_atsc_rs_encoder</block>
- <block>dtv_atsc_interleaver</block>
- <block>dtv_atsc_trellis_encoder</block>
- <block>dtv_atsc_field_sync_mux</block>
- </cat>
- <cat>
- <name>DVB</name>
- <block>dtv_dvb_bbheader_bb</block>
- <block>dtv_dvb_bbscrambler_bb</block>
- <block>dtv_dvb_bch_bb</block>
- <block>dtv_dvb_ldpc_bb</block>
- </cat>
- <cat>
- <name>DVB-T2</name>
- <block>dtv_dvbt2_interleaver_bb</block>
- <block>dtv_dvbt2_modulator_bc</block>
- <block>dtv_dvbt2_cellinterleaver_cc</block>
- <block>dtv_dvbt2_framemapper_cc</block>
- <block>dtv_dvbt2_freqinterleaver_cc</block>
- <block>dtv_dvbt2_pilotgenerator_cc</block>
- <block>dtv_dvbt2_paprtr_cc</block>
- <block>dtv_dvbt2_p1insertion_cc</block>
- <block>dtv_dvbt2_miso_cc</block>
- </cat>
- <cat>
- <name>DVB-S2</name>
- <block>dtv_dvbs2_interleaver_bb</block>
- <block>dtv_dvbs2_modulator_bc</block>
- <block>dtv_dvbs2_physical_cc</block>
- </cat>
- <cat>
- <name>DVB-T</name>
- <block>dtv_dvbt_energy_dispersal</block>
- <block>dtv_dvbt_reed_solomon_enc</block>
- <block>dtv_dvbt_convolutional_interleaver</block>
- <block>dtv_dvbt_inner_coder</block>
- <block>dtv_dvbt_bit_inner_interleaver</block>
- <block>dtv_dvbt_symbol_inner_interleaver</block>
- <block>dtv_dvbt_map</block>
- <block>dtv_dvbt_reference_signals</block>
- <block>dtv_dvbt_ofdm_sym_acquisition</block>
- <block>dtv_dvbt_demod_reference_signals</block>
- <block>dtv_dvbt_demap</block>
- <block>dtv_dvbt_bit_inner_deinterleaver</block>
- <block>dtv_dvbt_viterbi_decoder</block>
- <block>dtv_dvbt_convolutional_deinterleaver</block>
- <block>dtv_dvbt_reed_solomon_dec</block>
- <block>dtv_dvbt_energy_descramble</block>
- </cat>
- <cat>
- <name>ITU-T J.83B</name>
- <block>dtv_catv_transport_framing_enc_bb</block>
- <block>dtv_catv_reed_solomon_enc_bb</block>
- <block>dtv_catv_randomizer_bb</block>
- <block>dtv_catv_frame_sync_enc_bb</block>
- <block>dtv_catv_trellis_enc_bb</block>
- </cat>
- </cat>
-</cat>
diff --git a/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.block.yml b/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.block.yml
new file mode 100644
index 0000000000..d629a16694
--- /dev/null
+++ b/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.block.yml
@@ -0,0 +1,29 @@
+id: dtv_catv_frame_sync_enc_bb
+label: Frame Sync Encoder
+
+parameters:
+- id: constellation
+ label: Constellation
+ dtype: enum
+ options: [CATV_MOD_64QAM, CATV_MOD_256QAM]
+ option_labels: [64QAM, 256QAM]
+ option_attributes:
+ val: [dtv.CATV_MOD_64QAM, dtv.CATV_MOD_256QAM]
+- id: ctrlword
+ label: Control Word
+ dtype: int
+ default: '6'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.catv_frame_sync_enc_bb(${constellation.val}, ${ctrlword})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml b/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml
deleted file mode 100644
index 11f05164b3..0000000000
--- a/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Frame Sync Encoder
-###################################################
- -->
-<block>
- <name>Frame Sync Encoder</name>
- <key>dtv_catv_frame_sync_enc_bb</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.catv_frame_sync_enc_bb($constellation.val, $ctrlword)</make>
- <param>
- <name>Constellation</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>64QAM</name>
- <key>CATV_MOD_64QAM</key>
- <opt>val:dtv.CATV_MOD_64QAM</opt>
- </option>
- <option>
- <name>256QAM</name>
- <key>CATV_MOD_256QAM</key>
- <opt>val:dtv.CATV_MOD_256QAM</opt>
- </option>
- </param>
- <param>
- <name>Control Word</name>
- <key>ctrlword</key>
- <value>6</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_catv_randomizer_bb.block.yml b/gr-dtv/grc/dtv_catv_randomizer_bb.block.yml
new file mode 100644
index 0000000000..1be423454d
--- /dev/null
+++ b/gr-dtv/grc/dtv_catv_randomizer_bb.block.yml
@@ -0,0 +1,25 @@
+id: dtv_catv_randomizer_bb
+label: Randomizer
+
+parameters:
+- id: constellation
+ label: Constellation
+ dtype: enum
+ options: [CATV_MOD_64QAM, CATV_MOD_256QAM]
+ option_labels: [64QAM, 256QAM]
+ option_attributes:
+ val: [dtv.CATV_MOD_64QAM, dtv.CATV_MOD_256QAM]
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.catv_randomizer_bb(${constellation.val})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_catv_randomizer_bb.xml b/gr-dtv/grc/dtv_catv_randomizer_bb.xml
deleted file mode 100644
index d0da5a2516..0000000000
--- a/gr-dtv/grc/dtv_catv_randomizer_bb.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Randomizer
-###################################################
- -->
-<block>
- <name>Randomizer</name>
- <key>dtv_catv_randomizer_bb</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.catv_randomizer_bb($constellation.val)</make>
- <param>
- <name>Constellation</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>64QAM</name>
- <key>CATV_MOD_64QAM</key>
- <opt>val:dtv.CATV_MOD_64QAM</opt>
- </option>
- <option>
- <name>256QAM</name>
- <key>CATV_MOD_256QAM</key>
- <opt>val:dtv.CATV_MOD_256QAM</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.block.yml b/gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.block.yml
new file mode 100644
index 0000000000..fa51b3bab8
--- /dev/null
+++ b/gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.block.yml
@@ -0,0 +1,16 @@
+id: dtv_catv_reed_solomon_enc_bb
+label: Reed-Solomon Encoder
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.catv_reed_solomon_enc_bb()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.xml b/gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.xml
deleted file mode 100644
index a5dfdc2a5a..0000000000
--- a/gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Reed Solomon Encoder
-###################################################
- -->
-<block>
- <name>Reed-Solomon Encoder</name>
- <key>dtv_catv_reed_solomon_enc_bb</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.catv_reed_solomon_enc_bb()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_catv_transport_framing_enc_bb.block.yml b/gr-dtv/grc/dtv_catv_transport_framing_enc_bb.block.yml
new file mode 100644
index 0000000000..3f269d1704
--- /dev/null
+++ b/gr-dtv/grc/dtv_catv_transport_framing_enc_bb.block.yml
@@ -0,0 +1,16 @@
+id: dtv_catv_transport_framing_enc_bb
+label: Transport Framing Encoder
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.catv_transport_framing_enc_bb()
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_catv_transport_framing_enc_bb.xml b/gr-dtv/grc/dtv_catv_transport_framing_enc_bb.xml
deleted file mode 100644
index d0b6bf382b..0000000000
--- a/gr-dtv/grc/dtv_catv_transport_framing_enc_bb.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Transport Framing Encoder
-###################################################
- -->
-<block>
- <name>Transport Framing Encoder</name>
- <key>dtv_catv_transport_framing_enc_bb</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.catv_transport_framing_enc_bb()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_catv_trellis_enc_bb.block.yml b/gr-dtv/grc/dtv_catv_trellis_enc_bb.block.yml
new file mode 100644
index 0000000000..aafba8ed2d
--- /dev/null
+++ b/gr-dtv/grc/dtv_catv_trellis_enc_bb.block.yml
@@ -0,0 +1,25 @@
+id: dtv_catv_trellis_enc_bb
+label: Trellis Encoder
+
+parameters:
+- id: constellation
+ label: Constellation
+ dtype: enum
+ options: [CATV_MOD_64QAM, CATV_MOD_256QAM]
+ option_labels: [64QAM, 256QAM]
+ option_attributes:
+ val: [dtv.CATV_MOD_64QAM, dtv.CATV_MOD_256QAM]
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.catv_trellis_enc_bb(${constellation.val})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_catv_trellis_enc_bb.xml b/gr-dtv/grc/dtv_catv_trellis_enc_bb.xml
deleted file mode 100644
index a1d2d4619c..0000000000
--- a/gr-dtv/grc/dtv_catv_trellis_enc_bb.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Trellis Encoder
-###################################################
- -->
-<block>
- <name>Trellis Encoder</name>
- <key>dtv_catv_trellis_enc_bb</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.catv_trellis_enc_bb($constellation.val)</make>
- <param>
- <name>Constellation</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>64QAM</name>
- <key>CATV_MOD_64QAM</key>
- <opt>val:dtv.CATV_MOD_64QAM</opt>
- </option>
- <option>
- <name>256QAM</name>
- <key>CATV_MOD_256QAM</key>
- <opt>val:dtv.CATV_MOD_256QAM</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvb_bbheader_bb.block.yml b/gr-dtv/grc/dtv_dvb_bbheader_bb.block.yml
new file mode 100644
index 0000000000..7f51427af5
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvb_bbheader_bb.block.yml
@@ -0,0 +1,154 @@
+id: dtv_dvb_bbheader_bb
+label: BBheader
+
+parameters:
+- id: standard
+ label: Standard
+ dtype: enum
+ options: [STANDARD_DVBS2, STANDARD_DVBT2]
+ option_labels: [DVB-S2, DVB-T2]
+ option_attributes:
+ hide_dvbs2: ['', all]
+ hide_dvbt2: [all, '']
+ val: [dtv.STANDARD_DVBS2, dtv.STANDARD_DVBT2]
+- id: framesize1
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_SHORT]
+ option_labels: [Normal, Short]
+ option_attributes:
+ hide_medium: [all, all]
+ hide_normal: ['', all]
+ hide_short: [all, '']
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_SHORT]
+ hide: ${ standard.hide_dvbt2 }
+- id: framesize2
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_MEDIUM, FECFRAME_SHORT]
+ option_labels: [Normal, Medium, Short]
+ option_attributes:
+ hide_medium: [all, '', all]
+ hide_normal: ['', all, all]
+ hide_short: [all, all, '']
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_MEDIUM, dtv.FECFRAME_SHORT]
+ hide: ${ standard.hide_dvbs2 }
+- id: rate1
+ label: Code rate
+ dtype: enum
+ options: [C1_2, C3_5, C2_3, C3_4, C4_5, C5_6]
+ option_labels: [1/2, 3/5, 2/3, 3/4, 4/5, 5/6]
+ option_attributes:
+ val: [dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4, dtv.C4_5, dtv.C5_6]
+ hide: ${ (framesize1.hide_normal if str(standard) == 'STANDARD_DVBT2' else 'all')
+ }
+- id: rate2
+ label: Code rate
+ dtype: enum
+ options: [C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6]
+ option_labels: [1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6]
+ option_attributes:
+ val: [dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4, dtv.C4_5,
+ dtv.C5_6]
+ hide: ${ (framesize1.hide_short if str(standard) == 'STANDARD_DVBT2' else 'all')
+ }
+- id: rate3
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C9_10, C2_9_VLSNR,
+ C13_45, C9_20, C90_180, C96_180, C11_20, C100_180, C104_180, C26_45, C18_30,
+ C28_45, C23_36, C116_180, C20_30, C124_180, C25_36, C128_180, C13_18, C132_180,
+ C22_30, C135_180, C140_180, C7_9, C154_180]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 9/10, 2/9 VL-SNR,
+ 13/45, 9/20, 90/180, 96/180, 11/20, 100/180, 104/180, 26/45, 18/30, 28/45,
+ 23/36, 116/180, 20/30, 124/180, 25/36, 128/180, 13/18, 132/180, 22/30, 135/180,
+ 140/180, 7/9, 154/180]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C9_10, dtv.C2_9_VLSNR, dtv.C13_45, dtv.C9_20,
+ dtv.C90_180, dtv.C96_180, dtv.C11_20, dtv.C100_180, dtv.C104_180, dtv.C26_45,
+ dtv.C18_30, dtv.C28_45, dtv.C23_36, dtv.C116_180, dtv.C20_30, dtv.C124_180,
+ dtv.C25_36, dtv.C128_180, dtv.C13_18, dtv.C132_180, dtv.C22_30, dtv.C135_180,
+ dtv.C140_180, dtv.C7_9, dtv.C154_180]
+ hide: ${ (framesize2.hide_normal if str(standard) == 'STANDARD_DVBS2' else 'all')
+ }
+- id: rate4
+ label: Code rate
+ dtype: enum
+ options: [C1_5_MEDIUM, C11_45_MEDIUM, C1_3_MEDIUM]
+ option_labels: [1/5, 11/45, 1/3]
+ option_attributes:
+ val: [dtv.C1_5_MEDIUM, dtv.C11_45_MEDIUM, dtv.C1_3_MEDIUM]
+ hide: ${ (framesize2.hide_medium if str(standard) == 'STANDARD_DVBS2' else 'all')
+ }
+- id: rate5
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C11_45,
+ C4_15, C14_45, C7_15, C8_15, C26_45, C32_45, C1_5_VLSNR_SF2, C11_45_VLSNR_SF2,
+ C1_5_VLSNR, C4_15_VLSNR, C1_3_VLSNR]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 11/45, 4/15,
+ 14/45, 7/15, 8/15, 26/45, 32/45, 1/5 VL-SNR SF2, 11/45 VL-SNR SF2, 1/5 VL-SNR,
+ 4/15 VL-SNR, 1/3 VL-SNR]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C11_45, dtv.C4_15, dtv.C14_45, dtv.C7_15,
+ dtv.C8_15, dtv.C26_45, dtv.C32_45, dtv.C1_5_VLSNR_SF2, dtv.C11_45_VLSNR_SF2,
+ dtv.C1_5_VLSNR, dtv.C4_15_VLSNR, dtv.C1_3_VLSNR]
+ hide: ${ (framesize2.hide_short if str(standard) == 'STANDARD_DVBS2' else 'all')
+ }
+- id: rolloff
+ label: Rolloff factor
+ dtype: enum
+ options: [RO_0_35, RO_0_25, RO_0_20, RO_0_15, RO_0_10, RO_0_05]
+ option_labels: ['0.35', '0.25', '0.20', '0.15', '0.10', '0.05']
+ option_attributes:
+ val: [dtv.RO_0_35, dtv.RO_0_25, dtv.RO_0_20, dtv.RO_0_15, dtv.RO_0_10, dtv.RO_0_05]
+ hide: ${ standard.hide_dvbs2 }
+- id: mode
+ label: Baseband Framing Mode
+ dtype: enum
+ options: [INPUTMODE_NORMAL, INPUTMODE_HIEFF]
+ option_labels: [Normal, High Efficiency]
+ option_attributes:
+ val: [dtv.INPUTMODE_NORMAL, dtv.INPUTMODE_HIEFF]
+ hide: ${ standard.hide_dvbt2 }
+- id: inband
+ label: In-band Signalling
+ dtype: enum
+ options: [INBAND_OFF, INBAND_ON]
+ option_labels: ['Off', Type B]
+ option_attributes:
+ hide_rate: [all, '']
+ val: [dtv.INBAND_OFF, dtv.INBAND_ON]
+ hide: ${ standard.hide_dvbt2 }
+- id: fecblocks
+ label: FEC blocks per frame
+ dtype: int
+ default: '168'
+ hide: ${ inband.hide_rate }
+- id: tsrate
+ label: Transport Stream Rate
+ dtype: int
+ default: '4000000'
+ hide: ${ inband.hide_rate }
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import dtv
+ make: "dtv.dvb_bbheader_bb(${standard.val}, \n% if str(standard) == 'STANDARD_DVBT2':\n\
+ ${framesize1.val}, \n% else:\n${framesize2.val}, \n% endif\n% if str(standard)\
+ \ == 'STANDARD_DVBT2':\n% if str(framesize1) == 'FECFRAME_NORMAL':\n${rate1.val},\
+ \ \n% else:\n${rate2.val}, \n% endif\n% else:\n% if str(framesize2) == 'FECFRAME_NORMAL':\n\
+ ${rate3.val}, \n% elif str(framesize2) == 'FECFRAME_MEDIUM':\n${rate4.val},\
+ \ \n% else:\n${rate5.val}, \n% endif\n% endif\n${rolloff.val}, ${mode.val},\
+ \ ${inband.val}, ${fecblocks}, ${tsrate})"
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvb_bbheader_bb.xml b/gr-dtv/grc/dtv_dvb_bbheader_bb.xml
deleted file mode 100644
index b18b87b604..0000000000
--- a/gr-dtv/grc/dtv_dvb_bbheader_bb.xml
+++ /dev/null
@@ -1,596 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB Baseband Header
-###################################################
- -->
-<block>
- <name>BBheader</name>
- <key>dtv_dvb_bbheader_bb</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvb_bbheader_bb($standard.val, #slurp
-#if str($standard) == 'STANDARD_DVBT2'
-$framesize1.val, #slurp
-#else
-$framesize2.val, #slurp
-#end if
-#if str($standard) == 'STANDARD_DVBT2'
-#if str($framesize1) == 'FECFRAME_NORMAL'
-$rate1.val, #slurp
-#else
-$rate2.val, #slurp
-#end if
-#else
-#if str($framesize2) == 'FECFRAME_NORMAL'
-$rate3.val, #slurp
-#else if str($framesize2) == 'FECFRAME_MEDIUM'
-$rate4.val, #slurp
-#else
-$rate5.val, #slurp
-#end if
-#end if
-$rolloff.val, $mode.val, $inband.val, $fecblocks, $tsrate)</make>
- <param>
- <name>Standard</name>
- <key>standard</key>
- <type>enum</type>
- <option>
- <name>DVB-S2</name>
- <key>STANDARD_DVBS2</key>
- <opt>val:dtv.STANDARD_DVBS2</opt>
- <opt>hide_dvbs2:</opt>
- <opt>hide_dvbt2:all</opt>
- </option>
- <option>
- <name>DVB-T2</name>
- <key>STANDARD_DVBT2</key>
- <opt>val:dtv.STANDARD_DVBT2</opt>
- <opt>hide_dvbs2:all</opt>
- <opt>hide_dvbt2:</opt>
- </option>
- </param>
- <param>
- <name>FECFRAME size</name>
- <key>framesize1</key>
- <type>enum</type>
- <hide>$standard.hide_dvbt2</hide>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- <opt>hide_normal:</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:</opt>
- </option>
- </param>
- <param>
- <name>FECFRAME size</name>
- <key>framesize2</key>
- <type>enum</type>
- <hide>$standard.hide_dvbs2</hide>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- <opt>hide_normal:</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Medium</name>
- <key>FECFRAME_MEDIUM</key>
- <opt>val:dtv.FECFRAME_MEDIUM</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate1</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_normal else 'all'</hide>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate2</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_short else 'all'</hide>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate3</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_normal else 'all'</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>9/10</name>
- <key>C9_10</key>
- <opt>val:dtv.C9_10</opt>
- </option>
- <option>
- <name>2/9 VL-SNR</name>
- <key>C2_9_VLSNR</key>
- <opt>val:dtv.C2_9_VLSNR</opt>
- </option>
- <option>
- <name>13/45</name>
- <key>C13_45</key>
- <opt>val:dtv.C13_45</opt>
- </option>
- <option>
- <name>9/20</name>
- <key>C9_20</key>
- <opt>val:dtv.C9_20</opt>
- </option>
- <option>
- <name>90/180</name>
- <key>C90_180</key>
- <opt>val:dtv.C90_180</opt>
- </option>
- <option>
- <name>96/180</name>
- <key>C96_180</key>
- <opt>val:dtv.C96_180</opt>
- </option>
- <option>
- <name>11/20</name>
- <key>C11_20</key>
- <opt>val:dtv.C11_20</opt>
- </option>
- <option>
- <name>100/180</name>
- <key>C100_180</key>
- <opt>val:dtv.C100_180</opt>
- </option>
- <option>
- <name>104/180</name>
- <key>C104_180</key>
- <opt>val:dtv.C104_180</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>18/30</name>
- <key>C18_30</key>
- <opt>val:dtv.C18_30</opt>
- </option>
- <option>
- <name>28/45</name>
- <key>C28_45</key>
- <opt>val:dtv.C28_45</opt>
- </option>
- <option>
- <name>23/36</name>
- <key>C23_36</key>
- <opt>val:dtv.C23_36</opt>
- </option>
- <option>
- <name>116/180</name>
- <key>C116_180</key>
- <opt>val:dtv.C116_180</opt>
- </option>
- <option>
- <name>20/30</name>
- <key>C20_30</key>
- <opt>val:dtv.C20_30</opt>
- </option>
- <option>
- <name>124/180</name>
- <key>C124_180</key>
- <opt>val:dtv.C124_180</opt>
- </option>
- <option>
- <name>25/36</name>
- <key>C25_36</key>
- <opt>val:dtv.C25_36</opt>
- </option>
- <option>
- <name>128/180</name>
- <key>C128_180</key>
- <opt>val:dtv.C128_180</opt>
- </option>
- <option>
- <name>13/18</name>
- <key>C13_18</key>
- <opt>val:dtv.C13_18</opt>
- </option>
- <option>
- <name>132/180</name>
- <key>C132_180</key>
- <opt>val:dtv.C132_180</opt>
- </option>
- <option>
- <name>22/30</name>
- <key>C22_30</key>
- <opt>val:dtv.C22_30</opt>
- </option>
- <option>
- <name>135/180</name>
- <key>C135_180</key>
- <opt>val:dtv.C135_180</opt>
- </option>
- <option>
- <name>140/180</name>
- <key>C140_180</key>
- <opt>val:dtv.C140_180</opt>
- </option>
- <option>
- <name>7/9</name>
- <key>C7_9</key>
- <opt>val:dtv.C7_9</opt>
- </option>
- <option>
- <name>154/180</name>
- <key>C154_180</key>
- <opt>val:dtv.C154_180</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate4</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_medium else 'all'</hide>
- <option>
- <name>1/5</name>
- <key>C1_5_MEDIUM</key>
- <opt>val:dtv.C1_5_MEDIUM</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45_MEDIUM</key>
- <opt>val:dtv.C11_45_MEDIUM</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3_MEDIUM</key>
- <opt>val:dtv.C1_3_MEDIUM</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate5</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_short else 'all'</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45</key>
- <opt>val:dtv.C11_45</opt>
- </option>
- <option>
- <name>4/15</name>
- <key>C4_15</key>
- <opt>val:dtv.C4_15</opt>
- </option>
- <option>
- <name>14/45</name>
- <key>C14_45</key>
- <opt>val:dtv.C14_45</opt>
- </option>
- <option>
- <name>7/15</name>
- <key>C7_15</key>
- <opt>val:dtv.C7_15</opt>
- </option>
- <option>
- <name>8/15</name>
- <key>C8_15</key>
- <opt>val:dtv.C8_15</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>32/45</name>
- <key>C32_45</key>
- <opt>val:dtv.C32_45</opt>
- </option>
- <option>
- <name>1/5 VL-SNR SF2</name>
- <key>C1_5_VLSNR_SF2</key>
- <opt>val:dtv.C1_5_VLSNR_SF2</opt>
- </option>
- <option>
- <name>11/45 VL-SNR SF2</name>
- <key>C11_45_VLSNR_SF2</key>
- <opt>val:dtv.C11_45_VLSNR_SF2</opt>
- </option>
- <option>
- <name>1/5 VL-SNR</name>
- <key>C1_5_VLSNR</key>
- <opt>val:dtv.C1_5_VLSNR</opt>
- </option>
- <option>
- <name>4/15 VL-SNR</name>
- <key>C4_15_VLSNR</key>
- <opt>val:dtv.C4_15_VLSNR</opt>
- </option>
- <option>
- <name>1/3 VL-SNR</name>
- <key>C1_3_VLSNR</key>
- <opt>val:dtv.C1_3_VLSNR</opt>
- </option>
- </param>
- <param>
- <name>Rolloff factor</name>
- <key>rolloff</key>
- <type>enum</type>
- <hide>$standard.hide_dvbs2</hide>
- <option>
- <name>0.35</name>
- <key>RO_0_35</key>
- <opt>val:dtv.RO_0_35</opt>
- </option>
- <option>
- <name>0.25</name>
- <key>RO_0_25</key>
- <opt>val:dtv.RO_0_25</opt>
- </option>
- <option>
- <name>0.20</name>
- <key>RO_0_20</key>
- <opt>val:dtv.RO_0_20</opt>
- </option>
- <option>
- <name>0.15</name>
- <key>RO_0_15</key>
- <opt>val:dtv.RO_0_15</opt>
- </option>
- <option>
- <name>0.10</name>
- <key>RO_0_10</key>
- <opt>val:dtv.RO_0_10</opt>
- </option>
- <option>
- <name>0.05</name>
- <key>RO_0_05</key>
- <opt>val:dtv.RO_0_05</opt>
- </option>
- </param>
- <param>
- <name>Baseband Framing Mode</name>
- <key>mode</key>
- <type>enum</type>
- <hide>$standard.hide_dvbt2</hide>
- <option>
- <name>Normal</name>
- <key>INPUTMODE_NORMAL</key>
- <opt>val:dtv.INPUTMODE_NORMAL</opt>
- </option>
- <option>
- <name>High Efficiency</name>
- <key>INPUTMODE_HIEFF</key>
- <opt>val:dtv.INPUTMODE_HIEFF</opt>
- </option>
- </param>
- <param>
- <name>In-band Signalling</name>
- <key>inband</key>
- <type>enum</type>
- <hide>$standard.hide_dvbt2</hide>
- <option>
- <name>Off</name>
- <key>INBAND_OFF</key>
- <opt>val:dtv.INBAND_OFF</opt>
- <opt>hide_rate:all</opt>
- </option>
- <option>
- <name>Type B</name>
- <key>INBAND_ON</key>
- <opt>val:dtv.INBAND_ON</opt>
- <opt>hide_rate:</opt>
- </option>
- </param>
- <param>
- <name>FEC blocks per frame</name>
- <key>fecblocks</key>
- <value>168</value>
- <type>int</type>
- <hide>$inband.hide_rate</hide>
- </param>
- <param>
- <name>Transport Stream Rate</name>
- <key>tsrate</key>
- <value>4000000</value>
- <type>int</type>
- <hide>$inband.hide_rate</hide>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvb_bbscrambler_bb.block.yml b/gr-dtv/grc/dtv_dvb_bbscrambler_bb.block.yml
new file mode 100644
index 0000000000..c1e2a7685b
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvb_bbscrambler_bb.block.yml
@@ -0,0 +1,118 @@
+id: dtv_dvb_bbscrambler_bb
+label: BBscrambler
+
+parameters:
+- id: standard
+ label: Standard
+ dtype: enum
+ options: [STANDARD_DVBS2, STANDARD_DVBT2]
+ option_labels: [DVB-S2, DVB-T2]
+ option_attributes:
+ hide_dvbs2: ['', all]
+ hide_dvbt2: [all, '']
+ val: [dtv.STANDARD_DVBS2, dtv.STANDARD_DVBT2]
+- id: framesize1
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_SHORT]
+ option_labels: [Normal, Short]
+ option_attributes:
+ hide_medium: [all, all]
+ hide_normal: ['', all]
+ hide_short: [all, '']
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_SHORT]
+ hide: ${ standard.hide_dvbt2 }
+- id: framesize2
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_MEDIUM, FECFRAME_SHORT]
+ option_labels: [Normal, Medium, Short]
+ option_attributes:
+ hide_medium: [all, '', all]
+ hide_normal: ['', all, all]
+ hide_short: [all, all, '']
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_MEDIUM, dtv.FECFRAME_SHORT]
+ hide: ${ standard.hide_dvbs2 }
+- id: rate1
+ label: Code rate
+ dtype: enum
+ options: [C1_2, C3_5, C2_3, C3_4, C4_5, C5_6]
+ option_labels: [1/2, 3/5, 2/3, 3/4, 4/5, 5/6]
+ option_attributes:
+ val: [dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4, dtv.C4_5, dtv.C5_6]
+ hide: ${ (framesize1.hide_normal if str(standard) == 'STANDARD_DVBT2' else 'all')
+ }
+- id: rate2
+ label: Code rate
+ dtype: enum
+ options: [C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6]
+ option_labels: [1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6]
+ option_attributes:
+ val: [dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4, dtv.C4_5,
+ dtv.C5_6]
+ hide: ${ (framesize1.hide_short if str(standard) == 'STANDARD_DVBT2' else 'all')
+ }
+- id: rate3
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C9_10, C2_9_VLSNR,
+ C13_45, C9_20, C90_180, C96_180, C11_20, C100_180, C104_180, C26_45, C18_30,
+ C28_45, C23_36, C116_180, C20_30, C124_180, C25_36, C128_180, C13_18, C132_180,
+ C22_30, C135_180, C140_180, C7_9, C154_180]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 9/10, 2/9 VL-SNR,
+ 13/45, 9/20, 90/180, 96/180, 11/20, 100/180, 104/180, 26/45, 18/30, 28/45,
+ 23/36, 116/180, 20/30, 124/180, 25/36, 128/180, 13/18, 132/180, 22/30, 135/180,
+ 140/180, 7/9, 154/180]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C9_10, dtv.C2_9_VLSNR, dtv.C13_45, dtv.C9_20,
+ dtv.C90_180, dtv.C96_180, dtv.C11_20, dtv.C100_180, dtv.C104_180, dtv.C26_45,
+ dtv.C18_30, dtv.C28_45, dtv.C23_36, dtv.C116_180, dtv.C20_30, dtv.C124_180,
+ dtv.C25_36, dtv.C128_180, dtv.C13_18, dtv.C132_180, dtv.C22_30, dtv.C135_180,
+ dtv.C140_180, dtv.C7_9, dtv.C154_180]
+ hide: ${ (framesize2.hide_normal if str(standard) == 'STANDARD_DVBS2' else 'all')
+ }
+- id: rate4
+ label: Code rate
+ dtype: enum
+ options: [C1_5_MEDIUM, C11_45_MEDIUM, C1_3_MEDIUM]
+ option_labels: [1/5, 11/45, 1/3]
+ option_attributes:
+ val: [dtv.C1_5_MEDIUM, dtv.C11_45_MEDIUM, dtv.C1_3_MEDIUM]
+ hide: ${ (framesize2.hide_medium if str(standard) == 'STANDARD_DVBS2' else 'all')
+ }
+- id: rate5
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C11_45,
+ C4_15, C14_45, C7_15, C8_15, C26_45, C32_45, C1_5_VLSNR_SF2, C11_45_VLSNR_SF2,
+ C1_5_VLSNR, C4_15_VLSNR, C1_3_VLSNR]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 11/45, 4/15,
+ 14/45, 7/15, 8/15, 26/45, 32/45, 1/5 VL-SNR SF2, 11/45 VL-SNR SF2, 1/5 VL-SNR,
+ 4/15 VL-SNR, 1/3 VL-SNR]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C11_45, dtv.C4_15, dtv.C14_45, dtv.C7_15,
+ dtv.C8_15, dtv.C26_45, dtv.C32_45, dtv.C1_5_VLSNR_SF2, dtv.C11_45_VLSNR_SF2,
+ dtv.C1_5_VLSNR, dtv.C4_15_VLSNR, dtv.C1_3_VLSNR]
+ hide: ${ (framesize2.hide_short if str(standard) == 'STANDARD_DVBS2' else 'all')
+ }
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import dtv
+ make: "dtv.dvb_bbscrambler_bb(${standard.val}, \n% if str(standard) == 'STANDARD_DVBT2':\n\
+ ${framesize1.val}, \n% else:\n${framesize2.val}, \n% endif\n% if str(standard)\
+ \ == 'STANDARD_DVBT2':\n% if str(framesize1) == 'FECFRAME_NORMAL':\n${rate1.val}\n\
+ % else:\n${rate2.val}\n% endif\n% else:\n% if str(framesize2) == 'FECFRAME_NORMAL':\n\
+ ${rate3.val}\n% elif str(framesize2) == 'FECFRAME_MEDIUM':\n${rate4.val}\n\
+ % else:\n${rate5.val}\n% endif\n% endif\n)"
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml b/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml
deleted file mode 100644
index 2fba572d39..0000000000
--- a/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml
+++ /dev/null
@@ -1,512 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB Baseband Scrambler
-###################################################
- -->
-<block>
- <name>BBscrambler</name>
- <key>dtv_dvb_bbscrambler_bb</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvb_bbscrambler_bb($standard.val, #slurp
-#if str($standard) == 'STANDARD_DVBT2'
-$framesize1.val, #slurp
-#else
-$framesize2.val, #slurp
-#end if
-#if str($standard) == 'STANDARD_DVBT2'
-#if str($framesize1) == 'FECFRAME_NORMAL'
-$rate1.val#slurp
-#else
-$rate2.val#slurp
-#end if
-#else
-#if str($framesize2) == 'FECFRAME_NORMAL'
-$rate3.val#slurp
-#else if str($framesize2) == 'FECFRAME_MEDIUM'
-$rate4.val#slurp
-#else
-$rate5.val#slurp
-#end if
-#end if
-)</make>
- <param>
- <name>Standard</name>
- <key>standard</key>
- <type>enum</type>
- <option>
- <name>DVB-S2</name>
- <key>STANDARD_DVBS2</key>
- <opt>val:dtv.STANDARD_DVBS2</opt>
- <opt>hide_dvbs2:</opt>
- <opt>hide_dvbt2:all</opt>
- </option>
- <option>
- <name>DVB-T2</name>
- <key>STANDARD_DVBT2</key>
- <opt>val:dtv.STANDARD_DVBT2</opt>
- <opt>hide_dvbs2:all</opt>
- <opt>hide_dvbt2:</opt>
- </option>
- </param>
- <param>
- <name>FECFRAME size</name>
- <key>framesize1</key>
- <type>enum</type>
- <hide>$standard.hide_dvbt2</hide>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- <opt>hide_normal:</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:</opt>
- </option>
- </param>
- <param>
- <name>FECFRAME size</name>
- <key>framesize2</key>
- <type>enum</type>
- <hide>$standard.hide_dvbs2</hide>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- <opt>hide_normal:</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Medium</name>
- <key>FECFRAME_MEDIUM</key>
- <opt>val:dtv.FECFRAME_MEDIUM</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate1</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_normal else 'all'</hide>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate2</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_short else 'all'</hide>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate3</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_normal else 'all'</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>9/10</name>
- <key>C9_10</key>
- <opt>val:dtv.C9_10</opt>
- </option>
- <option>
- <name>2/9 VL-SNR</name>
- <key>C2_9_VLSNR</key>
- <opt>val:dtv.C2_9_VLSNR</opt>
- </option>
- <option>
- <name>13/45</name>
- <key>C13_45</key>
- <opt>val:dtv.C13_45</opt>
- </option>
- <option>
- <name>9/20</name>
- <key>C9_20</key>
- <opt>val:dtv.C9_20</opt>
- </option>
- <option>
- <name>90/180</name>
- <key>C90_180</key>
- <opt>val:dtv.C90_180</opt>
- </option>
- <option>
- <name>96/180</name>
- <key>C96_180</key>
- <opt>val:dtv.C96_180</opt>
- </option>
- <option>
- <name>11/20</name>
- <key>C11_20</key>
- <opt>val:dtv.C11_20</opt>
- </option>
- <option>
- <name>100/180</name>
- <key>C100_180</key>
- <opt>val:dtv.C100_180</opt>
- </option>
- <option>
- <name>104/180</name>
- <key>C104_180</key>
- <opt>val:dtv.C104_180</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>18/30</name>
- <key>C18_30</key>
- <opt>val:dtv.C18_30</opt>
- </option>
- <option>
- <name>28/45</name>
- <key>C28_45</key>
- <opt>val:dtv.C28_45</opt>
- </option>
- <option>
- <name>23/36</name>
- <key>C23_36</key>
- <opt>val:dtv.C23_36</opt>
- </option>
- <option>
- <name>116/180</name>
- <key>C116_180</key>
- <opt>val:dtv.C116_180</opt>
- </option>
- <option>
- <name>20/30</name>
- <key>C20_30</key>
- <opt>val:dtv.C20_30</opt>
- </option>
- <option>
- <name>124/180</name>
- <key>C124_180</key>
- <opt>val:dtv.C124_180</opt>
- </option>
- <option>
- <name>25/36</name>
- <key>C25_36</key>
- <opt>val:dtv.C25_36</opt>
- </option>
- <option>
- <name>128/180</name>
- <key>C128_180</key>
- <opt>val:dtv.C128_180</opt>
- </option>
- <option>
- <name>13/18</name>
- <key>C13_18</key>
- <opt>val:dtv.C13_18</opt>
- </option>
- <option>
- <name>132/180</name>
- <key>C132_180</key>
- <opt>val:dtv.C132_180</opt>
- </option>
- <option>
- <name>22/30</name>
- <key>C22_30</key>
- <opt>val:dtv.C22_30</opt>
- </option>
- <option>
- <name>135/180</name>
- <key>C135_180</key>
- <opt>val:dtv.C135_180</opt>
- </option>
- <option>
- <name>140/180</name>
- <key>C140_180</key>
- <opt>val:dtv.C140_180</opt>
- </option>
- <option>
- <name>7/9</name>
- <key>C7_9</key>
- <opt>val:dtv.C7_9</opt>
- </option>
- <option>
- <name>154/180</name>
- <key>C154_180</key>
- <opt>val:dtv.C154_180</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate4</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_medium else 'all'</hide>
- <option>
- <name>1/5</name>
- <key>C1_5_MEDIUM</key>
- <opt>val:dtv.C1_5_MEDIUM</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45_MEDIUM</key>
- <opt>val:dtv.C11_45_MEDIUM</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3_MEDIUM</key>
- <opt>val:dtv.C1_3_MEDIUM</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate5</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_short else 'all'</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45</key>
- <opt>val:dtv.C11_45</opt>
- </option>
- <option>
- <name>4/15</name>
- <key>C4_15</key>
- <opt>val:dtv.C4_15</opt>
- </option>
- <option>
- <name>14/45</name>
- <key>C14_45</key>
- <opt>val:dtv.C14_45</opt>
- </option>
- <option>
- <name>7/15</name>
- <key>C7_15</key>
- <opt>val:dtv.C7_15</opt>
- </option>
- <option>
- <name>8/15</name>
- <key>C8_15</key>
- <opt>val:dtv.C8_15</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>32/45</name>
- <key>C32_45</key>
- <opt>val:dtv.C32_45</opt>
- </option>
- <option>
- <name>1/5 VL-SNR SF2</name>
- <key>C1_5_VLSNR_SF2</key>
- <opt>val:dtv.C1_5_VLSNR_SF2</opt>
- </option>
- <option>
- <name>11/45 VL-SNR SF2</name>
- <key>C11_45_VLSNR_SF2</key>
- <opt>val:dtv.C11_45_VLSNR_SF2</opt>
- </option>
- <option>
- <name>1/5 VL-SNR</name>
- <key>C1_5_VLSNR</key>
- <opt>val:dtv.C1_5_VLSNR</opt>
- </option>
- <option>
- <name>4/15 VL-SNR</name>
- <key>C4_15_VLSNR</key>
- <opt>val:dtv.C4_15_VLSNR</opt>
- </option>
- <option>
- <name>1/3 VL-SNR</name>
- <key>C1_3_VLSNR</key>
- <opt>val:dtv.C1_3_VLSNR</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvb_bch_bb.block.yml b/gr-dtv/grc/dtv_dvb_bch_bb.block.yml
new file mode 100644
index 0000000000..bfde8654fa
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvb_bch_bb.block.yml
@@ -0,0 +1,118 @@
+id: dtv_dvb_bch_bb
+label: BCH Encoder
+
+parameters:
+- id: standard
+ label: Standard
+ dtype: enum
+ options: [STANDARD_DVBS2, STANDARD_DVBT2]
+ option_labels: [DVB-S2, DVB-T2]
+ option_attributes:
+ hide_dvbs2: ['', all]
+ hide_dvbt2: [all, '']
+ val: [dtv.STANDARD_DVBS2, dtv.STANDARD_DVBT2]
+- id: framesize1
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_SHORT]
+ option_labels: [Normal, Short]
+ option_attributes:
+ hide_medium: [all, all]
+ hide_normal: ['', all]
+ hide_short: [all, '']
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_SHORT]
+ hide: ${ standard.hide_dvbt2 }
+- id: framesize2
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_MEDIUM, FECFRAME_SHORT]
+ option_labels: [Normal, Medium, Short]
+ option_attributes:
+ hide_medium: [all, '', all]
+ hide_normal: ['', all, all]
+ hide_short: [all, all, '']
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_MEDIUM, dtv.FECFRAME_SHORT]
+ hide: ${ standard.hide_dvbs2 }
+- id: rate1
+ label: Code rate
+ dtype: enum
+ options: [C1_2, C3_5, C2_3, C3_4, C4_5, C5_6]
+ option_labels: [1/2, 3/5, 2/3, 3/4, 4/5, 5/6]
+ option_attributes:
+ val: [dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4, dtv.C4_5, dtv.C5_6]
+ hide: ${ (framesize1.hide_normal if str(standard) == 'STANDARD_DVBT2' else 'all')
+ }
+- id: rate2
+ label: Code rate
+ dtype: enum
+ options: [C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6]
+ option_labels: [1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6]
+ option_attributes:
+ val: [dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4, dtv.C4_5,
+ dtv.C5_6]
+ hide: ${ (framesize1.hide_short if str(standard) == 'STANDARD_DVBT2' else 'all')
+ }
+- id: rate3
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C9_10, C2_9_VLSNR,
+ C13_45, C9_20, C90_180, C96_180, C11_20, C100_180, C104_180, C26_45, C18_30,
+ C28_45, C23_36, C116_180, C20_30, C124_180, C25_36, C128_180, C13_18, C132_180,
+ C22_30, C135_180, C140_180, C7_9, C154_180]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 9/10, 2/9 VL-SNR,
+ 13/45, 9/20, 90/180, 96/180, 11/20, 100/180, 104/180, 26/45, 18/30, 28/45,
+ 23/36, 116/180, 20/30, 124/180, 25/36, 128/180, 13/18, 132/180, 22/30, 135/180,
+ 140/180, 7/9, 154/180]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C9_10, dtv.C2_9_VLSNR, dtv.C13_45, dtv.C9_20,
+ dtv.C90_180, dtv.C96_180, dtv.C11_20, dtv.C100_180, dtv.C104_180, dtv.C26_45,
+ dtv.C18_30, dtv.C28_45, dtv.C23_36, dtv.C116_180, dtv.C20_30, dtv.C124_180,
+ dtv.C25_36, dtv.C128_180, dtv.C13_18, dtv.C132_180, dtv.C22_30, dtv.C135_180,
+ dtv.C140_180, dtv.C7_9, dtv.C154_180]
+ hide: ${ (framesize2.hide_normal if str(standard) == 'STANDARD_DVBS2' else 'all')
+ }
+- id: rate4
+ label: Code rate
+ dtype: enum
+ options: [C1_5_MEDIUM, C11_45_MEDIUM, C1_3_MEDIUM]
+ option_labels: [1/5, 11/45, 1/3]
+ option_attributes:
+ val: [dtv.C1_5_MEDIUM, dtv.C11_45_MEDIUM, dtv.C1_3_MEDIUM]
+ hide: ${ (framesize2.hide_medium if str(standard) == 'STANDARD_DVBS2' else 'all')
+ }
+- id: rate5
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C11_45,
+ C4_15, C14_45, C7_15, C8_15, C26_45, C32_45, C1_5_VLSNR_SF2, C11_45_VLSNR_SF2,
+ C1_5_VLSNR, C4_15_VLSNR, C1_3_VLSNR]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 11/45, 4/15,
+ 14/45, 7/15, 8/15, 26/45, 32/45, 1/5 VL-SNR SF2, 11/45 VL-SNR SF2, 1/5 VL-SNR,
+ 4/15 VL-SNR, 1/3 VL-SNR]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C11_45, dtv.C4_15, dtv.C14_45, dtv.C7_15,
+ dtv.C8_15, dtv.C26_45, dtv.C32_45, dtv.C1_5_VLSNR_SF2, dtv.C11_45_VLSNR_SF2,
+ dtv.C1_5_VLSNR, dtv.C4_15_VLSNR, dtv.C1_3_VLSNR]
+ hide: ${ (framesize2.hide_short if str(standard) == 'STANDARD_DVBS2' else 'all')
+ }
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import dtv
+ make: "dtv.dvb_bch_bb(${standard.val}, \n% if str(standard) == 'STANDARD_DVBT2':\n\
+ ${framesize1.val}, \n% else:\n${framesize2.val}, \n% endif\n% if str(standard)\
+ \ == 'STANDARD_DVBT2':\n% if str(framesize1) == 'FECFRAME_NORMAL':\n${rate1.val}\n\
+ % else:\n${rate2.val}\n% endif\n% else:\n% if str(framesize2) == 'FECFRAME_NORMAL':\n\
+ ${rate3.val}\n% elif str(framesize2) == 'FECFRAME_MEDIUM':\n${rate4.val}\n\
+ % else:\n${rate5.val}\n% endif\n% endif\n)"
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvb_bch_bb.xml b/gr-dtv/grc/dtv_dvb_bch_bb.xml
deleted file mode 100644
index 01b446b7ca..0000000000
--- a/gr-dtv/grc/dtv_dvb_bch_bb.xml
+++ /dev/null
@@ -1,512 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB BCH Encoder
-###################################################
- -->
-<block>
- <name>BCH Encoder</name>
- <key>dtv_dvb_bch_bb</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvb_bch_bb($standard.val, #slurp
-#if str($standard) == 'STANDARD_DVBT2'
-$framesize1.val, #slurp
-#else
-$framesize2.val, #slurp
-#end if
-#if str($standard) == 'STANDARD_DVBT2'
-#if str($framesize1) == 'FECFRAME_NORMAL'
-$rate1.val#slurp
-#else
-$rate2.val#slurp
-#end if
-#else
-#if str($framesize2) == 'FECFRAME_NORMAL'
-$rate3.val#slurp
-#else if str($framesize2) == 'FECFRAME_MEDIUM'
-$rate4.val#slurp
-#else
-$rate5.val#slurp
-#end if
-#end if
-)</make>
- <param>
- <name>Standard</name>
- <key>standard</key>
- <type>enum</type>
- <option>
- <name>DVB-S2</name>
- <key>STANDARD_DVBS2</key>
- <opt>val:dtv.STANDARD_DVBS2</opt>
- <opt>hide_dvbs2:</opt>
- <opt>hide_dvbt2:all</opt>
- </option>
- <option>
- <name>DVB-T2</name>
- <key>STANDARD_DVBT2</key>
- <opt>val:dtv.STANDARD_DVBT2</opt>
- <opt>hide_dvbs2:all</opt>
- <opt>hide_dvbt2:</opt>
- </option>
- </param>
- <param>
- <name>FECFRAME size</name>
- <key>framesize1</key>
- <type>enum</type>
- <hide>$standard.hide_dvbt2</hide>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- <opt>hide_normal:</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:</opt>
- </option>
- </param>
- <param>
- <name>FECFRAME size</name>
- <key>framesize2</key>
- <type>enum</type>
- <hide>$standard.hide_dvbs2</hide>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- <opt>hide_normal:</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Medium</name>
- <key>FECFRAME_MEDIUM</key>
- <opt>val:dtv.FECFRAME_MEDIUM</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate1</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_normal else 'all'</hide>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate2</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_short else 'all'</hide>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate3</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_normal else 'all'</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>9/10</name>
- <key>C9_10</key>
- <opt>val:dtv.C9_10</opt>
- </option>
- <option>
- <name>2/9 VL-SNR</name>
- <key>C2_9_VLSNR</key>
- <opt>val:dtv.C2_9_VLSNR</opt>
- </option>
- <option>
- <name>13/45</name>
- <key>C13_45</key>
- <opt>val:dtv.C13_45</opt>
- </option>
- <option>
- <name>9/20</name>
- <key>C9_20</key>
- <opt>val:dtv.C9_20</opt>
- </option>
- <option>
- <name>90/180</name>
- <key>C90_180</key>
- <opt>val:dtv.C90_180</opt>
- </option>
- <option>
- <name>96/180</name>
- <key>C96_180</key>
- <opt>val:dtv.C96_180</opt>
- </option>
- <option>
- <name>11/20</name>
- <key>C11_20</key>
- <opt>val:dtv.C11_20</opt>
- </option>
- <option>
- <name>100/180</name>
- <key>C100_180</key>
- <opt>val:dtv.C100_180</opt>
- </option>
- <option>
- <name>104/180</name>
- <key>C104_180</key>
- <opt>val:dtv.C104_180</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>18/30</name>
- <key>C18_30</key>
- <opt>val:dtv.C18_30</opt>
- </option>
- <option>
- <name>28/45</name>
- <key>C28_45</key>
- <opt>val:dtv.C28_45</opt>
- </option>
- <option>
- <name>23/36</name>
- <key>C23_36</key>
- <opt>val:dtv.C23_36</opt>
- </option>
- <option>
- <name>116/180</name>
- <key>C116_180</key>
- <opt>val:dtv.C116_180</opt>
- </option>
- <option>
- <name>20/30</name>
- <key>C20_30</key>
- <opt>val:dtv.C20_30</opt>
- </option>
- <option>
- <name>124/180</name>
- <key>C124_180</key>
- <opt>val:dtv.C124_180</opt>
- </option>
- <option>
- <name>25/36</name>
- <key>C25_36</key>
- <opt>val:dtv.C25_36</opt>
- </option>
- <option>
- <name>128/180</name>
- <key>C128_180</key>
- <opt>val:dtv.C128_180</opt>
- </option>
- <option>
- <name>13/18</name>
- <key>C13_18</key>
- <opt>val:dtv.C13_18</opt>
- </option>
- <option>
- <name>132/180</name>
- <key>C132_180</key>
- <opt>val:dtv.C132_180</opt>
- </option>
- <option>
- <name>22/30</name>
- <key>C22_30</key>
- <opt>val:dtv.C22_30</opt>
- </option>
- <option>
- <name>135/180</name>
- <key>C135_180</key>
- <opt>val:dtv.C135_180</opt>
- </option>
- <option>
- <name>140/180</name>
- <key>C140_180</key>
- <opt>val:dtv.C140_180</opt>
- </option>
- <option>
- <name>7/9</name>
- <key>C7_9</key>
- <opt>val:dtv.C7_9</opt>
- </option>
- <option>
- <name>154/180</name>
- <key>C154_180</key>
- <opt>val:dtv.C154_180</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate4</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_medium else 'all'</hide>
- <option>
- <name>1/5</name>
- <key>C1_5_MEDIUM</key>
- <opt>val:dtv.C1_5_MEDIUM</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45_MEDIUM</key>
- <opt>val:dtv.C11_45_MEDIUM</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3_MEDIUM</key>
- <opt>val:dtv.C1_3_MEDIUM</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate5</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_short else 'all'</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45</key>
- <opt>val:dtv.C11_45</opt>
- </option>
- <option>
- <name>4/15</name>
- <key>C4_15</key>
- <opt>val:dtv.C4_15</opt>
- </option>
- <option>
- <name>14/45</name>
- <key>C14_45</key>
- <opt>val:dtv.C14_45</opt>
- </option>
- <option>
- <name>7/15</name>
- <key>C7_15</key>
- <opt>val:dtv.C7_15</opt>
- </option>
- <option>
- <name>8/15</name>
- <key>C8_15</key>
- <opt>val:dtv.C8_15</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>32/45</name>
- <key>C32_45</key>
- <opt>val:dtv.C32_45</opt>
- </option>
- <option>
- <name>1/5 VL-SNR SF2</name>
- <key>C1_5_VLSNR_SF2</key>
- <opt>val:dtv.C1_5_VLSNR_SF2</opt>
- </option>
- <option>
- <name>11/45 VL-SNR SF2</name>
- <key>C11_45_VLSNR_SF2</key>
- <opt>val:dtv.C11_45_VLSNR_SF2</opt>
- </option>
- <option>
- <name>1/5 VL-SNR</name>
- <key>C1_5_VLSNR</key>
- <opt>val:dtv.C1_5_VLSNR</opt>
- </option>
- <option>
- <name>4/15 VL-SNR</name>
- <key>C4_15_VLSNR</key>
- <opt>val:dtv.C4_15_VLSNR</opt>
- </option>
- <option>
- <name>1/3 VL-SNR</name>
- <key>C1_3_VLSNR</key>
- <opt>val:dtv.C1_3_VLSNR</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvb_ldpc_bb.block.yml b/gr-dtv/grc/dtv_dvb_ldpc_bb.block.yml
new file mode 100644
index 0000000000..435e039d51
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvb_ldpc_bb.block.yml
@@ -0,0 +1,126 @@
+id: dtv_dvb_ldpc_bb
+label: LDPC Encoder
+
+parameters:
+- id: standard
+ label: Standard
+ dtype: enum
+ options: [STANDARD_DVBS2, STANDARD_DVBT2]
+ option_labels: [DVB-S2, DVB-T2]
+ option_attributes:
+ hide_dvbs2: ['', all]
+ hide_dvbt2: [all, '']
+ val: [dtv.STANDARD_DVBS2, dtv.STANDARD_DVBT2]
+- id: framesize1
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_SHORT]
+ option_labels: [Normal, Short]
+ option_attributes:
+ hide_medium: [all, all]
+ hide_normal: ['', all]
+ hide_short: [all, '']
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_SHORT]
+ hide: ${ standard.hide_dvbt2 }
+- id: framesize2
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_MEDIUM, FECFRAME_SHORT]
+ option_labels: [Normal, Medium, Short]
+ option_attributes:
+ hide_medium: [all, '', all]
+ hide_normal: ['', all, all]
+ hide_short: [all, all, '']
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_MEDIUM, dtv.FECFRAME_SHORT]
+ hide: ${ standard.hide_dvbs2 }
+- id: rate1
+ label: Code rate
+ dtype: enum
+ options: [C1_2, C3_5, C2_3, C3_4, C4_5, C5_6]
+ option_labels: [1/2, 3/5, 2/3, 3/4, 4/5, 5/6]
+ option_attributes:
+ val: [dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4, dtv.C4_5, dtv.C5_6]
+ hide: ${ (framesize1.hide_normal if str(standard) == 'STANDARD_DVBT2' else 'all')
+ }
+- id: rate2
+ label: Code rate
+ dtype: enum
+ options: [C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6]
+ option_labels: [1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6]
+ option_attributes:
+ val: [dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4, dtv.C4_5,
+ dtv.C5_6]
+ hide: ${ (framesize1.hide_short if str(standard) == 'STANDARD_DVBT2' else 'all')
+ }
+- id: rate3
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C9_10, C2_9_VLSNR,
+ C13_45, C9_20, C90_180, C96_180, C11_20, C100_180, C104_180, C26_45, C18_30,
+ C28_45, C23_36, C116_180, C20_30, C124_180, C25_36, C128_180, C13_18, C132_180,
+ C22_30, C135_180, C140_180, C7_9, C154_180]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 9/10, 2/9 VL-SNR,
+ 13/45, 9/20, 90/180, 96/180, 11/20, 100/180, 104/180, 26/45, 18/30, 28/45,
+ 23/36, 116/180, 20/30, 124/180, 25/36, 128/180, 13/18, 132/180, 22/30, 135/180,
+ 140/180, 7/9, 154/180]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C9_10, dtv.C2_9_VLSNR, dtv.C13_45, dtv.C9_20,
+ dtv.C90_180, dtv.C96_180, dtv.C11_20, dtv.C100_180, dtv.C104_180, dtv.C26_45,
+ dtv.C18_30, dtv.C28_45, dtv.C23_36, dtv.C116_180, dtv.C20_30, dtv.C124_180,
+ dtv.C25_36, dtv.C128_180, dtv.C13_18, dtv.C132_180, dtv.C22_30, dtv.C135_180,
+ dtv.C140_180, dtv.C7_9, dtv.C154_180]
+ hide: ${ (framesize2.hide_normal if str(standard) == 'STANDARD_DVBS2' else 'all')
+ }
+- id: rate4
+ label: Code rate
+ dtype: enum
+ options: [C1_5_MEDIUM, C11_45_MEDIUM, C1_3_MEDIUM]
+ option_labels: [1/5, 11/45, 1/3]
+ option_attributes:
+ val: [dtv.C1_5_MEDIUM, dtv.C11_45_MEDIUM, dtv.C1_3_MEDIUM]
+ hide: ${ (framesize2.hide_medium if str(standard) == 'STANDARD_DVBS2' else 'all')
+ }
+- id: rate5
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C11_45,
+ C4_15, C14_45, C7_15, C8_15, C26_45, C32_45, C1_5_VLSNR_SF2, C11_45_VLSNR_SF2,
+ C1_5_VLSNR, C4_15_VLSNR, C1_3_VLSNR]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 11/45, 4/15,
+ 14/45, 7/15, 8/15, 26/45, 32/45, 1/5 VL-SNR SF2, 11/45 VL-SNR SF2, 1/5 VL-SNR,
+ 4/15 VL-SNR, 1/3 VL-SNR]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C11_45, dtv.C4_15, dtv.C14_45, dtv.C7_15,
+ dtv.C8_15, dtv.C26_45, dtv.C32_45, dtv.C1_5_VLSNR_SF2, dtv.C11_45_VLSNR_SF2,
+ dtv.C1_5_VLSNR, dtv.C4_15_VLSNR, dtv.C1_3_VLSNR]
+ hide: ${ (framesize2.hide_short if str(standard) == 'STANDARD_DVBS2' else 'all')
+ }
+- id: constellation
+ label: Constellation
+ dtype: enum
+ options: [MOD_OTHER, MOD_128APSK]
+ option_labels: [Other, 128APSK]
+ option_attributes:
+ val: [dtv.MOD_OTHER, dtv.MOD_128APSK]
+ hide: ${ standard.hide_dvbs2 }
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import dtv
+ make: "dtv.dvb_ldpc_bb(${standard.val}, \n% if str(standard) == 'STANDARD_DVBT2':\n\
+ ${framesize1.val}, \n% else:\n${framesize2.val}, \n% endif\n% if str(standard)\
+ \ == 'STANDARD_DVBT2':\n% if str(framesize1) == 'FECFRAME_NORMAL':\n${rate1.val},\
+ \ \n% else:\n${rate2.val}, \n% endif\n% else:\n% if str(framesize2) == 'FECFRAME_NORMAL':\n\
+ ${rate3.val}, \n% elif str(framesize2) == 'FECFRAME_MEDIUM':\n${rate4.val},\
+ \ \n% else:\n${rate5.val}, \n% endif\n% endif\n${constellation.val})"
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvb_ldpc_bb.xml b/gr-dtv/grc/dtv_dvb_ldpc_bb.xml
deleted file mode 100644
index f1cff16091..0000000000
--- a/gr-dtv/grc/dtv_dvb_ldpc_bb.xml
+++ /dev/null
@@ -1,528 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB LDPC Encoder
-###################################################
- -->
-<block>
- <name>LDPC Encoder</name>
- <key>dtv_dvb_ldpc_bb</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvb_ldpc_bb($standard.val, #slurp
-#if str($standard) == 'STANDARD_DVBT2'
-$framesize1.val, #slurp
-#else
-$framesize2.val, #slurp
-#end if
-#if str($standard) == 'STANDARD_DVBT2'
-#if str($framesize1) == 'FECFRAME_NORMAL'
-$rate1.val, #slurp
-#else
-$rate2.val, #slurp
-#end if
-#else
-#if str($framesize2) == 'FECFRAME_NORMAL'
-$rate3.val, #slurp
-#else if str($framesize2) == 'FECFRAME_MEDIUM'
-$rate4.val, #slurp
-#else
-$rate5.val, #slurp
-#end if
-#end if
-$constellation.val)</make>
- <param>
- <name>Standard</name>
- <key>standard</key>
- <type>enum</type>
- <option>
- <name>DVB-S2</name>
- <key>STANDARD_DVBS2</key>
- <opt>val:dtv.STANDARD_DVBS2</opt>
- <opt>hide_dvbs2:</opt>
- <opt>hide_dvbt2:all</opt>
- </option>
- <option>
- <name>DVB-T2</name>
- <key>STANDARD_DVBT2</key>
- <opt>val:dtv.STANDARD_DVBT2</opt>
- <opt>hide_dvbs2:all</opt>
- <opt>hide_dvbt2:</opt>
- </option>
- </param>
- <param>
- <name>FECFRAME size</name>
- <key>framesize1</key>
- <type>enum</type>
- <hide>$standard.hide_dvbt2</hide>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- <opt>hide_normal:</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:</opt>
- </option>
- </param>
- <param>
- <name>FECFRAME size</name>
- <key>framesize2</key>
- <type>enum</type>
- <hide>$standard.hide_dvbs2</hide>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- <opt>hide_normal:</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Medium</name>
- <key>FECFRAME_MEDIUM</key>
- <opt>val:dtv.FECFRAME_MEDIUM</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate1</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_normal else 'all'</hide>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate2</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_short else 'all'</hide>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate3</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_normal else 'all'</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>9/10</name>
- <key>C9_10</key>
- <opt>val:dtv.C9_10</opt>
- </option>
- <option>
- <name>2/9 VL-SNR</name>
- <key>C2_9_VLSNR</key>
- <opt>val:dtv.C2_9_VLSNR</opt>
- </option>
- <option>
- <name>13/45</name>
- <key>C13_45</key>
- <opt>val:dtv.C13_45</opt>
- </option>
- <option>
- <name>9/20</name>
- <key>C9_20</key>
- <opt>val:dtv.C9_20</opt>
- </option>
- <option>
- <name>90/180</name>
- <key>C90_180</key>
- <opt>val:dtv.C90_180</opt>
- </option>
- <option>
- <name>96/180</name>
- <key>C96_180</key>
- <opt>val:dtv.C96_180</opt>
- </option>
- <option>
- <name>11/20</name>
- <key>C11_20</key>
- <opt>val:dtv.C11_20</opt>
- </option>
- <option>
- <name>100/180</name>
- <key>C100_180</key>
- <opt>val:dtv.C100_180</opt>
- </option>
- <option>
- <name>104/180</name>
- <key>C104_180</key>
- <opt>val:dtv.C104_180</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>18/30</name>
- <key>C18_30</key>
- <opt>val:dtv.C18_30</opt>
- </option>
- <option>
- <name>28/45</name>
- <key>C28_45</key>
- <opt>val:dtv.C28_45</opt>
- </option>
- <option>
- <name>23/36</name>
- <key>C23_36</key>
- <opt>val:dtv.C23_36</opt>
- </option>
- <option>
- <name>116/180</name>
- <key>C116_180</key>
- <opt>val:dtv.C116_180</opt>
- </option>
- <option>
- <name>20/30</name>
- <key>C20_30</key>
- <opt>val:dtv.C20_30</opt>
- </option>
- <option>
- <name>124/180</name>
- <key>C124_180</key>
- <opt>val:dtv.C124_180</opt>
- </option>
- <option>
- <name>25/36</name>
- <key>C25_36</key>
- <opt>val:dtv.C25_36</opt>
- </option>
- <option>
- <name>128/180</name>
- <key>C128_180</key>
- <opt>val:dtv.C128_180</opt>
- </option>
- <option>
- <name>13/18</name>
- <key>C13_18</key>
- <opt>val:dtv.C13_18</opt>
- </option>
- <option>
- <name>132/180</name>
- <key>C132_180</key>
- <opt>val:dtv.C132_180</opt>
- </option>
- <option>
- <name>22/30</name>
- <key>C22_30</key>
- <opt>val:dtv.C22_30</opt>
- </option>
- <option>
- <name>135/180</name>
- <key>C135_180</key>
- <opt>val:dtv.C135_180</opt>
- </option>
- <option>
- <name>140/180</name>
- <key>C140_180</key>
- <opt>val:dtv.C140_180</opt>
- </option>
- <option>
- <name>7/9</name>
- <key>C7_9</key>
- <opt>val:dtv.C7_9</opt>
- </option>
- <option>
- <name>154/180</name>
- <key>C154_180</key>
- <opt>val:dtv.C154_180</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate4</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_medium else 'all'</hide>
- <option>
- <name>1/5</name>
- <key>C1_5_MEDIUM</key>
- <opt>val:dtv.C1_5_MEDIUM</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45_MEDIUM</key>
- <opt>val:dtv.C11_45_MEDIUM</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3_MEDIUM</key>
- <opt>val:dtv.C1_3_MEDIUM</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate5</key>
- <type>enum</type>
- <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_short else 'all'</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45</key>
- <opt>val:dtv.C11_45</opt>
- </option>
- <option>
- <name>4/15</name>
- <key>C4_15</key>
- <opt>val:dtv.C4_15</opt>
- </option>
- <option>
- <name>14/45</name>
- <key>C14_45</key>
- <opt>val:dtv.C14_45</opt>
- </option>
- <option>
- <name>7/15</name>
- <key>C7_15</key>
- <opt>val:dtv.C7_15</opt>
- </option>
- <option>
- <name>8/15</name>
- <key>C8_15</key>
- <opt>val:dtv.C8_15</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>32/45</name>
- <key>C32_45</key>
- <opt>val:dtv.C32_45</opt>
- </option>
- <option>
- <name>1/5 VL-SNR SF2</name>
- <key>C1_5_VLSNR_SF2</key>
- <opt>val:dtv.C1_5_VLSNR_SF2</opt>
- </option>
- <option>
- <name>11/45 VL-SNR SF2</name>
- <key>C11_45_VLSNR_SF2</key>
- <opt>val:dtv.C11_45_VLSNR_SF2</opt>
- </option>
- <option>
- <name>1/5 VL-SNR</name>
- <key>C1_5_VLSNR</key>
- <opt>val:dtv.C1_5_VLSNR</opt>
- </option>
- <option>
- <name>4/15 VL-SNR</name>
- <key>C4_15_VLSNR</key>
- <opt>val:dtv.C4_15_VLSNR</opt>
- </option>
- <option>
- <name>1/3 VL-SNR</name>
- <key>C1_3_VLSNR</key>
- <opt>val:dtv.C1_3_VLSNR</opt>
- </option>
- </param>
- <param>
- <name>Constellation</name>
- <key>constellation</key>
- <type>enum</type>
- <hide>$standard.hide_dvbs2</hide>
- <option>
- <name>Other</name>
- <key>MOD_OTHER</key>
- <opt>val:dtv.MOD_OTHER</opt>
- </option>
- <option>
- <name>128APSK</name>
- <key>MOD_128APSK</key>
- <opt>val:dtv.MOD_128APSK</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbs2_interleaver_bb.block.yml b/gr-dtv/grc/dtv_dvbs2_interleaver_bb.block.yml
new file mode 100644
index 0000000000..ad9c79c1b8
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbs2_interleaver_bb.block.yml
@@ -0,0 +1,86 @@
+id: dtv_dvbs2_interleaver_bb
+label: Interleaver
+
+parameters:
+- id: framesize
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_MEDIUM, FECFRAME_SHORT]
+ option_labels: [Normal, Medium, Short]
+ option_attributes:
+ hide_medium: [all, '', all]
+ hide_normal: ['', all, all]
+ hide_short: [all, all, '']
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_MEDIUM, dtv.FECFRAME_SHORT]
+- id: rate1
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C9_10, C2_9_VLSNR,
+ C13_45, C9_20, C90_180, C96_180, C11_20, C100_180, C104_180, C26_45, C18_30,
+ C28_45, C23_36, C116_180, C20_30, C124_180, C25_36, C128_180, C13_18, C132_180,
+ C22_30, C135_180, C140_180, C7_9, C154_180]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 9/10, 2/9 VL-SNR,
+ 13/45, 9/20, 90/180, 96/180, 11/20, 100/180, 104/180, 26/45, 18/30, 28/45,
+ 23/36, 116/180, 20/30, 124/180, 25/36, 128/180, 13/18, 132/180, 22/30, 135/180,
+ 140/180, 7/9, 154/180]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C9_10, dtv.C2_9_VLSNR, dtv.C13_45, dtv.C9_20,
+ dtv.C90_180, dtv.C96_180, dtv.C11_20, dtv.C100_180, dtv.C104_180, dtv.C26_45,
+ dtv.C18_30, dtv.C28_45, dtv.C23_36, dtv.C116_180, dtv.C20_30, dtv.C124_180,
+ dtv.C25_36, dtv.C128_180, dtv.C13_18, dtv.C132_180, dtv.C22_30, dtv.C135_180,
+ dtv.C140_180, dtv.C7_9, dtv.C154_180]
+ hide: ${ framesize.hide_normal }
+- id: rate2
+ label: Code rate
+ dtype: enum
+ options: [C1_5_MEDIUM, C11_45_MEDIUM, C1_3_MEDIUM]
+ option_labels: [1/5, 11/45, 1/3]
+ option_attributes:
+ val: [dtv.C1_5_MEDIUM, dtv.C11_45_MEDIUM, dtv.C1_3_MEDIUM]
+ hide: ${ framesize.hide_medium }
+- id: rate3
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C11_45,
+ C4_15, C14_45, C7_15, C8_15, C26_45, C32_45, C1_5_VLSNR_SF2, C11_45_VLSNR_SF2,
+ C1_5_VLSNR, C4_15_VLSNR, C1_3_VLSNR]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 11/45, 4/15,
+ 14/45, 7/15, 8/15, 26/45, 32/45, 1/5 VL-SNR SF2, 11/45 VL-SNR SF2, 1/5 VL-SNR,
+ 4/15 VL-SNR, 1/3 VL-SNR]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C11_45, dtv.C4_15, dtv.C14_45, dtv.C7_15,
+ dtv.C8_15, dtv.C26_45, dtv.C32_45, dtv.C1_5_VLSNR_SF2, dtv.C11_45_VLSNR_SF2,
+ dtv.C1_5_VLSNR, dtv.C4_15_VLSNR, dtv.C1_3_VLSNR]
+ hide: ${ framesize.hide_short }
+- id: constellation
+ label: Constellation
+ dtype: enum
+ options: [MOD_QPSK, MOD_8PSK, MOD_8APSK, MOD_16APSK, MOD_8_8APSK, MOD_32APSK,
+ MOD_4_12_16APSK, MOD_4_8_4_16APSK, MOD_64APSK, MOD_8_16_20_20APSK, MOD_4_12_20_28APSK,
+ MOD_128APSK, MOD_256APSK, MOD_BPSK, MOD_BPSK_SF2]
+ option_labels: [QPSK, 8PSK, 8APSK, 16APSK, 8+8APSK, 32APSK, 4+12+16rbAPSK, 4+8+4+16APSK,
+ 64APSK, 8+16+20+20APSK, 4+12+20+28APSK, 128APSK, 256APSK, PI/2 BPSK, PI/2
+ BPSK-SF2]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_8PSK, dtv.MOD_8APSK, dtv.MOD_16APSK, dtv.MOD_8_8APSK,
+ dtv.MOD_32APSK, dtv.MOD_4_12_16APSK, dtv.MOD_4_8_4_16APSK, dtv.MOD_64APSK,
+ dtv.MOD_8_16_20_20APSK, dtv.MOD_4_12_20_28APSK, dtv.MOD_128APSK, dtv.MOD_256APSK,
+ dtv.MOD_BPSK, dtv.MOD_BPSK_SF2]
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import dtv
+ make: "dtv.dvbs2_interleaver_bb(${framesize.val}, \n% if str(framesize) == 'FECFRAME_NORMAL':\n\
+ ${rate1.val}, \n% elif str(framesize) == 'FECFRAME_MEDIUM':\n${rate2.val},\
+ \ \n% else:\n${rate3.val}, \n% endif\n${constellation.val})"
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbs2_interleaver_bb.xml b/gr-dtv/grc/dtv_dvbs2_interleaver_bb.xml
deleted file mode 100644
index 675f70d26a..0000000000
--- a/gr-dtv/grc/dtv_dvbs2_interleaver_bb.xml
+++ /dev/null
@@ -1,455 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-S2 Bit Interleaver
-###################################################
- -->
-<block>
- <name>Interleaver</name>
- <key>dtv_dvbs2_interleaver_bb</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbs2_interleaver_bb($framesize.val, #slurp
-#if str($framesize) == 'FECFRAME_NORMAL'
-$rate1.val, #slurp
-#else if str($framesize) == 'FECFRAME_MEDIUM'
-$rate2.val, #slurp
-#else
-$rate3.val, #slurp
-#end if
-$constellation.val)</make>
- <param>
- <name>FECFRAME size</name>
- <key>framesize</key>
- <type>enum</type>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- <opt>hide_normal:</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Medium</name>
- <key>FECFRAME_MEDIUM</key>
- <opt>val:dtv.FECFRAME_MEDIUM</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate1</key>
- <type>enum</type>
- <hide>$framesize.hide_normal</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>9/10</name>
- <key>C9_10</key>
- <opt>val:dtv.C9_10</opt>
- </option>
- <option>
- <name>2/9 VL-SNR</name>
- <key>C2_9_VLSNR</key>
- <opt>val:dtv.C2_9_VLSNR</opt>
- </option>
- <option>
- <name>13/45</name>
- <key>C13_45</key>
- <opt>val:dtv.C13_45</opt>
- </option>
- <option>
- <name>9/20</name>
- <key>C9_20</key>
- <opt>val:dtv.C9_20</opt>
- </option>
- <option>
- <name>90/180</name>
- <key>C90_180</key>
- <opt>val:dtv.C90_180</opt>
- </option>
- <option>
- <name>96/180</name>
- <key>C96_180</key>
- <opt>val:dtv.C96_180</opt>
- </option>
- <option>
- <name>11/20</name>
- <key>C11_20</key>
- <opt>val:dtv.C11_20</opt>
- </option>
- <option>
- <name>100/180</name>
- <key>C100_180</key>
- <opt>val:dtv.C100_180</opt>
- </option>
- <option>
- <name>104/180</name>
- <key>C104_180</key>
- <opt>val:dtv.C104_180</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>18/30</name>
- <key>C18_30</key>
- <opt>val:dtv.C18_30</opt>
- </option>
- <option>
- <name>28/45</name>
- <key>C28_45</key>
- <opt>val:dtv.C28_45</opt>
- </option>
- <option>
- <name>23/36</name>
- <key>C23_36</key>
- <opt>val:dtv.C23_36</opt>
- </option>
- <option>
- <name>116/180</name>
- <key>C116_180</key>
- <opt>val:dtv.C116_180</opt>
- </option>
- <option>
- <name>20/30</name>
- <key>C20_30</key>
- <opt>val:dtv.C20_30</opt>
- </option>
- <option>
- <name>124/180</name>
- <key>C124_180</key>
- <opt>val:dtv.C124_180</opt>
- </option>
- <option>
- <name>25/36</name>
- <key>C25_36</key>
- <opt>val:dtv.C25_36</opt>
- </option>
- <option>
- <name>128/180</name>
- <key>C128_180</key>
- <opt>val:dtv.C128_180</opt>
- </option>
- <option>
- <name>13/18</name>
- <key>C13_18</key>
- <opt>val:dtv.C13_18</opt>
- </option>
- <option>
- <name>132/180</name>
- <key>C132_180</key>
- <opt>val:dtv.C132_180</opt>
- </option>
- <option>
- <name>22/30</name>
- <key>C22_30</key>
- <opt>val:dtv.C22_30</opt>
- </option>
- <option>
- <name>135/180</name>
- <key>C135_180</key>
- <opt>val:dtv.C135_180</opt>
- </option>
- <option>
- <name>140/180</name>
- <key>C140_180</key>
- <opt>val:dtv.C140_180</opt>
- </option>
- <option>
- <name>7/9</name>
- <key>C7_9</key>
- <opt>val:dtv.C7_9</opt>
- </option>
- <option>
- <name>154/180</name>
- <key>C154_180</key>
- <opt>val:dtv.C154_180</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate2</key>
- <type>enum</type>
- <hide>$framesize.hide_medium</hide>
- <option>
- <name>1/5</name>
- <key>C1_5_MEDIUM</key>
- <opt>val:dtv.C1_5_MEDIUM</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45_MEDIUM</key>
- <opt>val:dtv.C11_45_MEDIUM</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3_MEDIUM</key>
- <opt>val:dtv.C1_3_MEDIUM</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate3</key>
- <type>enum</type>
- <hide>$framesize.hide_short</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45</key>
- <opt>val:dtv.C11_45</opt>
- </option>
- <option>
- <name>4/15</name>
- <key>C4_15</key>
- <opt>val:dtv.C4_15</opt>
- </option>
- <option>
- <name>14/45</name>
- <key>C14_45</key>
- <opt>val:dtv.C14_45</opt>
- </option>
- <option>
- <name>7/15</name>
- <key>C7_15</key>
- <opt>val:dtv.C7_15</opt>
- </option>
- <option>
- <name>8/15</name>
- <key>C8_15</key>
- <opt>val:dtv.C8_15</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>32/45</name>
- <key>C32_45</key>
- <opt>val:dtv.C32_45</opt>
- </option>
- <option>
- <name>1/5 VL-SNR SF2</name>
- <key>C1_5_VLSNR_SF2</key>
- <opt>val:dtv.C1_5_VLSNR_SF2</opt>
- </option>
- <option>
- <name>11/45 VL-SNR SF2</name>
- <key>C11_45_VLSNR_SF2</key>
- <opt>val:dtv.C11_45_VLSNR_SF2</opt>
- </option>
- <option>
- <name>1/5 VL-SNR</name>
- <key>C1_5_VLSNR</key>
- <opt>val:dtv.C1_5_VLSNR</opt>
- </option>
- <option>
- <name>4/15 VL-SNR</name>
- <key>C4_15_VLSNR</key>
- <opt>val:dtv.C4_15_VLSNR</opt>
- </option>
- <option>
- <name>1/3 VL-SNR</name>
- <key>C1_3_VLSNR</key>
- <opt>val:dtv.C1_3_VLSNR</opt>
- </option>
- </param>
- <param>
- <name>Constellation</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>MOD_QPSK</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>8PSK</name>
- <key>MOD_8PSK</key>
- <opt>val:dtv.MOD_8PSK</opt>
- </option>
- <option>
- <name>8APSK</name>
- <key>MOD_8APSK</key>
- <opt>val:dtv.MOD_8APSK</opt>
- </option>
- <option>
- <name>16APSK</name>
- <key>MOD_16APSK</key>
- <opt>val:dtv.MOD_16APSK</opt>
- </option>
- <option>
- <name>8+8APSK</name>
- <key>MOD_8_8APSK</key>
- <opt>val:dtv.MOD_8_8APSK</opt>
- </option>
- <option>
- <name>32APSK</name>
- <key>MOD_32APSK</key>
- <opt>val:dtv.MOD_32APSK</opt>
- </option>
- <option>
- <name>4+12+16rbAPSK</name>
- <key>MOD_4_12_16APSK</key>
- <opt>val:dtv.MOD_4_12_16APSK</opt>
- </option>
- <option>
- <name>4+8+4+16APSK</name>
- <key>MOD_4_8_4_16APSK</key>
- <opt>val:dtv.MOD_4_8_4_16APSK</opt>
- </option>
- <option>
- <name>64APSK</name>
- <key>MOD_64APSK</key>
- <opt>val:dtv.MOD_64APSK</opt>
- </option>
- <option>
- <name>8+16+20+20APSK</name>
- <key>MOD_8_16_20_20APSK</key>
- <opt>val:dtv.MOD_8_16_20_20APSK</opt>
- </option>
- <option>
- <name>4+12+20+28APSK</name>
- <key>MOD_4_12_20_28APSK</key>
- <opt>val:dtv.MOD_4_12_20_28APSK</opt>
- </option>
- <option>
- <name>128APSK</name>
- <key>MOD_128APSK</key>
- <opt>val:dtv.MOD_128APSK</opt>
- </option>
- <option>
- <name>256APSK</name>
- <key>MOD_256APSK</key>
- <opt>val:dtv.MOD_256APSK</opt>
- </option>
- <option>
- <name>PI/2 BPSK</name>
- <key>MOD_BPSK</key>
- <opt>val:dtv.MOD_BPSK</opt>
- </option>
- <option>
- <name>PI/2 BPSK-SF2</name>
- <key>MOD_BPSK_SF2</key>
- <opt>val:dtv.MOD_BPSK_SF2</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbs2_modulator_bc.block.yml b/gr-dtv/grc/dtv_dvbs2_modulator_bc.block.yml
new file mode 100644
index 0000000000..07d6cd58ff
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbs2_modulator_bc.block.yml
@@ -0,0 +1,102 @@
+id: dtv_dvbs2_modulator_bc
+label: DVB-S2X Modulator
+
+parameters:
+- id: framesize
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_MEDIUM, FECFRAME_SHORT]
+ option_labels: [Normal, Medium, Short]
+ option_attributes:
+ hide_medium: [all, '', all]
+ hide_normal: ['', all, all]
+ hide_short: [all, all, '']
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_MEDIUM, dtv.FECFRAME_SHORT]
+ hide: ${ constellation.hide_dvb }
+- id: rate1
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C9_10, C2_9_VLSNR,
+ C13_45, C9_20, C90_180, C96_180, C11_20, C100_180, C104_180, C26_45, C18_30,
+ C28_45, C23_36, C116_180, C20_30, C124_180, C25_36, C128_180, C13_18, C132_180,
+ C22_30, C135_180, C140_180, C7_9, C154_180]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 9/10, 2/9 VL-SNR,
+ 13/45, 9/20, 90/180, 96/180, 11/20, 100/180, 104/180, 26/45, 18/30, 28/45,
+ 23/36, 116/180, 20/30, 124/180, 25/36, 128/180, 13/18, 132/180, 22/30, 135/180,
+ 140/180, 7/9, 154/180]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C9_10, dtv.C2_9_VLSNR, dtv.C13_45, dtv.C9_20,
+ dtv.C90_180, dtv.C96_180, dtv.C11_20, dtv.C100_180, dtv.C104_180, dtv.C26_45,
+ dtv.C18_30, dtv.C28_45, dtv.C23_36, dtv.C116_180, dtv.C20_30, dtv.C124_180,
+ dtv.C25_36, dtv.C128_180, dtv.C13_18, dtv.C132_180, dtv.C22_30, dtv.C135_180,
+ dtv.C140_180, dtv.C7_9, dtv.C154_180]
+ hide: ${ (constellation.hide_dvb if str(constellation) == 'MOD_8VSB' or str(constellation)
+ == 'MOD_64QAM' or str(constellation) == 'MOD_256QAM' else framesize.hide_normal)
+ }
+- id: rate2
+ label: Code rate
+ dtype: enum
+ options: [C1_5_MEDIUM, C11_45_MEDIUM, C1_3_MEDIUM]
+ option_labels: [1/5, 11/45, 1/3]
+ option_attributes:
+ val: [dtv.C1_5_MEDIUM, dtv.C11_45_MEDIUM, dtv.C1_3_MEDIUM]
+ hide: ${ (constellation.hide_dvb if str(constellation) == 'MOD_8VSB' or str(constellation)
+ == 'MOD_64QAM' or str(constellation) == 'MOD_256QAM' else framesize.hide_medium)
+ }
+- id: rate3
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C11_45,
+ C4_15, C14_45, C7_15, C8_15, C26_45, C32_45, C1_5_VLSNR_SF2, C11_45_VLSNR_SF2,
+ C1_5_VLSNR, C4_15_VLSNR, C1_3_VLSNR]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 11/45, 4/15,
+ 14/45, 7/15, 8/15, 26/45, 32/45, 1/5 VL-SNR SF2, 11/45 VL-SNR SF2, 1/5 VL-SNR,
+ 4/15 VL-SNR, 1/3 VL-SNR]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C11_45, dtv.C4_15, dtv.C14_45, dtv.C7_15,
+ dtv.C8_15, dtv.C26_45, dtv.C32_45, dtv.C1_5_VLSNR_SF2, dtv.C11_45_VLSNR_SF2,
+ dtv.C1_5_VLSNR, dtv.C4_15_VLSNR, dtv.C1_3_VLSNR]
+ hide: ${ (constellation.hide_dvb if str(constellation) == 'MOD_8VSB' or str(constellation)
+ == 'MOD_64QAM' or str(constellation) == 'MOD_256QAM' else framesize.hide_short)
+ }
+- id: constellation
+ label: Constellation
+ dtype: enum
+ options: [MOD_QPSK, MOD_8PSK, MOD_8APSK, MOD_16APSK, MOD_8_8APSK, MOD_32APSK,
+ MOD_4_12_16APSK, MOD_4_8_4_16APSK, MOD_64APSK, MOD_8_16_20_20APSK, MOD_4_12_20_28APSK,
+ MOD_128APSK, MOD_256APSK, MOD_64QAM, MOD_256QAM, MOD_BPSK, MOD_BPSK_SF2, MOD_8VSB]
+ option_labels: [QPSK, 8PSK, 8APSK, 16APSK, 8+8APSK, 32APSK, 4+12+16rbAPSK, 4+8+4+16APSK,
+ 64APSK, 8+16+20+20APSK, 4+12+20+28APSK, 128APSK, 256APSK, 64QAM (ITU-T J.83B),
+ 256QAM (ITU-T J.83B), PI/2 BPSK, PI/2 BPSK-SF2, 8VSB (ATSC)]
+ option_attributes:
+ hide_dvb: ['', '', '', '', '', '', '', '', '', '', '', '', '', all, all, '',
+ '', all]
+ val: [dtv.MOD_QPSK, dtv.MOD_8PSK, dtv.MOD_8APSK, dtv.MOD_16APSK, dtv.MOD_8_8APSK,
+ dtv.MOD_32APSK, dtv.MOD_4_12_16APSK, dtv.MOD_4_8_4_16APSK, dtv.MOD_64APSK,
+ dtv.MOD_8_16_20_20APSK, dtv.MOD_4_12_20_28APSK, dtv.MOD_128APSK, dtv.MOD_256APSK,
+ dtv.MOD_64QAM, dtv.MOD_256QAM, dtv.MOD_BPSK, dtv.MOD_BPSK_SF2, dtv.MOD_8VSB]
+- id: interpolation
+ label: 2X Interpolation
+ dtype: enum
+ options: [INTERPOLATION_OFF, INTERPOLATION_ON]
+ option_labels: ['Off', 'On']
+ option_attributes:
+ val: [dtv.INTERPOLATION_OFF, dtv.INTERPOLATION_ON]
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import dtv
+ make: "dtv.dvbs2_modulator_bc(${framesize.val},\n% if str(framesize) == 'FECFRAME_NORMAL':\n\
+ ${rate1.val}, \n% elif str(framesize) == 'FECFRAME_MEDIUM':\n${rate2.val},\
+ \ \n% else:\n${rate3.val}, \n% endif\n${constellation.val}, ${interpolation.val})"
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml b/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml
deleted file mode 100644
index d6b9f10048..0000000000
--- a/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml
+++ /dev/null
@@ -1,504 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-S2X Modulator
-###################################################
- -->
-<block>
- <name>DVB-S2X Modulator</name>
- <key>dtv_dvbs2_modulator_bc</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbs2_modulator_bc($framesize.val,
-#if str($framesize) == 'FECFRAME_NORMAL'
-$rate1.val, #slurp
-#else if str($framesize) == 'FECFRAME_MEDIUM'
-$rate2.val, #slurp
-#else
-$rate3.val, #slurp
-#end if
-$constellation.val, $interpolation.val)</make>
- <param>
- <name>FECFRAME size</name>
- <key>framesize</key>
- <type>enum</type>
- <hide>$constellation.hide_dvb</hide>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- <opt>hide_normal:</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Medium</name>
- <key>FECFRAME_MEDIUM</key>
- <opt>val:dtv.FECFRAME_MEDIUM</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate1</key>
- <type>enum</type>
- <hide>#if str($constellation) == 'MOD_8VSB' or str($constellation) == 'MOD_64QAM' or str($constellation) == 'MOD_256QAM' then $constellation.hide_dvb else $framesize.hide_normal</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>9/10</name>
- <key>C9_10</key>
- <opt>val:dtv.C9_10</opt>
- </option>
- <option>
- <name>2/9 VL-SNR</name>
- <key>C2_9_VLSNR</key>
- <opt>val:dtv.C2_9_VLSNR</opt>
- </option>
- <option>
- <name>13/45</name>
- <key>C13_45</key>
- <opt>val:dtv.C13_45</opt>
- </option>
- <option>
- <name>9/20</name>
- <key>C9_20</key>
- <opt>val:dtv.C9_20</opt>
- </option>
- <option>
- <name>90/180</name>
- <key>C90_180</key>
- <opt>val:dtv.C90_180</opt>
- </option>
- <option>
- <name>96/180</name>
- <key>C96_180</key>
- <opt>val:dtv.C96_180</opt>
- </option>
- <option>
- <name>11/20</name>
- <key>C11_20</key>
- <opt>val:dtv.C11_20</opt>
- </option>
- <option>
- <name>100/180</name>
- <key>C100_180</key>
- <opt>val:dtv.C100_180</opt>
- </option>
- <option>
- <name>104/180</name>
- <key>C104_180</key>
- <opt>val:dtv.C104_180</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>18/30</name>
- <key>C18_30</key>
- <opt>val:dtv.C18_30</opt>
- </option>
- <option>
- <name>28/45</name>
- <key>C28_45</key>
- <opt>val:dtv.C28_45</opt>
- </option>
- <option>
- <name>23/36</name>
- <key>C23_36</key>
- <opt>val:dtv.C23_36</opt>
- </option>
- <option>
- <name>116/180</name>
- <key>C116_180</key>
- <opt>val:dtv.C116_180</opt>
- </option>
- <option>
- <name>20/30</name>
- <key>C20_30</key>
- <opt>val:dtv.C20_30</opt>
- </option>
- <option>
- <name>124/180</name>
- <key>C124_180</key>
- <opt>val:dtv.C124_180</opt>
- </option>
- <option>
- <name>25/36</name>
- <key>C25_36</key>
- <opt>val:dtv.C25_36</opt>
- </option>
- <option>
- <name>128/180</name>
- <key>C128_180</key>
- <opt>val:dtv.C128_180</opt>
- </option>
- <option>
- <name>13/18</name>
- <key>C13_18</key>
- <opt>val:dtv.C13_18</opt>
- </option>
- <option>
- <name>132/180</name>
- <key>C132_180</key>
- <opt>val:dtv.C132_180</opt>
- </option>
- <option>
- <name>22/30</name>
- <key>C22_30</key>
- <opt>val:dtv.C22_30</opt>
- </option>
- <option>
- <name>135/180</name>
- <key>C135_180</key>
- <opt>val:dtv.C135_180</opt>
- </option>
- <option>
- <name>140/180</name>
- <key>C140_180</key>
- <opt>val:dtv.C140_180</opt>
- </option>
- <option>
- <name>7/9</name>
- <key>C7_9</key>
- <opt>val:dtv.C7_9</opt>
- </option>
- <option>
- <name>154/180</name>
- <key>C154_180</key>
- <opt>val:dtv.C154_180</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate2</key>
- <type>enum</type>
- <hide>#if str($constellation) == 'MOD_8VSB' or str($constellation) == 'MOD_64QAM' or str($constellation) == 'MOD_256QAM' then $constellation.hide_dvb else $framesize.hide_medium</hide>
- <option>
- <name>1/5</name>
- <key>C1_5_MEDIUM</key>
- <opt>val:dtv.C1_5_MEDIUM</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45_MEDIUM</key>
- <opt>val:dtv.C11_45_MEDIUM</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3_MEDIUM</key>
- <opt>val:dtv.C1_3_MEDIUM</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate3</key>
- <type>enum</type>
- <hide>#if str($constellation) == 'MOD_8VSB' or str($constellation) == 'MOD_64QAM' or str($constellation) == 'MOD_256QAM' then $constellation.hide_dvb else $framesize.hide_short</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45</key>
- <opt>val:dtv.C11_45</opt>
- </option>
- <option>
- <name>4/15</name>
- <key>C4_15</key>
- <opt>val:dtv.C4_15</opt>
- </option>
- <option>
- <name>14/45</name>
- <key>C14_45</key>
- <opt>val:dtv.C14_45</opt>
- </option>
- <option>
- <name>7/15</name>
- <key>C7_15</key>
- <opt>val:dtv.C7_15</opt>
- </option>
- <option>
- <name>8/15</name>
- <key>C8_15</key>
- <opt>val:dtv.C8_15</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>32/45</name>
- <key>C32_45</key>
- <opt>val:dtv.C32_45</opt>
- </option>
- <option>
- <name>1/5 VL-SNR SF2</name>
- <key>C1_5_VLSNR_SF2</key>
- <opt>val:dtv.C1_5_VLSNR_SF2</opt>
- </option>
- <option>
- <name>11/45 VL-SNR SF2</name>
- <key>C11_45_VLSNR_SF2</key>
- <opt>val:dtv.C11_45_VLSNR_SF2</opt>
- </option>
- <option>
- <name>1/5 VL-SNR</name>
- <key>C1_5_VLSNR</key>
- <opt>val:dtv.C1_5_VLSNR</opt>
- </option>
- <option>
- <name>4/15 VL-SNR</name>
- <key>C4_15_VLSNR</key>
- <opt>val:dtv.C4_15_VLSNR</opt>
- </option>
- <option>
- <name>1/3 VL-SNR</name>
- <key>C1_3_VLSNR</key>
- <opt>val:dtv.C1_3_VLSNR</opt>
- </option>
- </param>
- <param>
- <name>Constellation</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>MOD_QPSK</key>
- <opt>val:dtv.MOD_QPSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>8PSK</name>
- <key>MOD_8PSK</key>
- <opt>val:dtv.MOD_8PSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>8APSK</name>
- <key>MOD_8APSK</key>
- <opt>val:dtv.MOD_8APSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>16APSK</name>
- <key>MOD_16APSK</key>
- <opt>val:dtv.MOD_16APSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>8+8APSK</name>
- <key>MOD_8_8APSK</key>
- <opt>val:dtv.MOD_8_8APSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>32APSK</name>
- <key>MOD_32APSK</key>
- <opt>val:dtv.MOD_32APSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>4+12+16rbAPSK</name>
- <key>MOD_4_12_16APSK</key>
- <opt>val:dtv.MOD_4_12_16APSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>4+8+4+16APSK</name>
- <key>MOD_4_8_4_16APSK</key>
- <opt>val:dtv.MOD_4_8_4_16APSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>64APSK</name>
- <key>MOD_64APSK</key>
- <opt>val:dtv.MOD_64APSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>8+16+20+20APSK</name>
- <key>MOD_8_16_20_20APSK</key>
- <opt>val:dtv.MOD_8_16_20_20APSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>4+12+20+28APSK</name>
- <key>MOD_4_12_20_28APSK</key>
- <opt>val:dtv.MOD_4_12_20_28APSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>128APSK</name>
- <key>MOD_128APSK</key>
- <opt>val:dtv.MOD_128APSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>256APSK</name>
- <key>MOD_256APSK</key>
- <opt>val:dtv.MOD_256APSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>64QAM (ITU-T J.83B)</name>
- <key>MOD_64QAM</key>
- <opt>val:dtv.MOD_64QAM</opt>
- <opt>hide_dvb:all</opt>
- </option>
- <option>
- <name>256QAM (ITU-T J.83B)</name>
- <key>MOD_256QAM</key>
- <opt>val:dtv.MOD_256QAM</opt>
- <opt>hide_dvb:all</opt>
- </option>
- <option>
- <name>PI/2 BPSK</name>
- <key>MOD_BPSK</key>
- <opt>val:dtv.MOD_BPSK</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>PI/2 BPSK-SF2</name>
- <key>MOD_BPSK_SF2</key>
- <opt>val:dtv.MOD_BPSK_SF2</opt>
- <opt>hide_dvb:</opt>
- </option>
- <option>
- <name>8VSB (ATSC)</name>
- <key>MOD_8VSB</key>
- <opt>val:dtv.MOD_8VSB</opt>
- <opt>hide_dvb:all</opt>
- </option>
- </param>
- <param>
- <name>2X Interpolation</name>
- <key>interpolation</key>
- <type>enum</type>
- <option>
- <name>Off</name>
- <key>INTERPOLATION_OFF</key>
- <opt>val:dtv.INTERPOLATION_OFF</opt>
- </option>
- <option>
- <name>On</name>
- <key>INTERPOLATION_ON</key>
- <opt>val:dtv.INTERPOLATION_ON</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbs2_physical_cc.block.yml b/gr-dtv/grc/dtv_dvbs2_physical_cc.block.yml
new file mode 100644
index 0000000000..261b2f6b06
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbs2_physical_cc.block.yml
@@ -0,0 +1,98 @@
+id: dtv_dvbs2_physical_cc
+label: Physical Layer Framer
+
+parameters:
+- id: framesize
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_MEDIUM, FECFRAME_SHORT]
+ option_labels: [Normal, Medium, Short]
+ option_attributes:
+ hide_medium: [all, '', all]
+ hide_normal: ['', all, all]
+ hide_short: [all, all, '']
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_MEDIUM, dtv.FECFRAME_SHORT]
+- id: rate1
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C9_10, C2_9_VLSNR,
+ C13_45, C9_20, C90_180, C96_180, C11_20, C100_180, C104_180, C26_45, C18_30,
+ C28_45, C23_36, C116_180, C20_30, C124_180, C25_36, C128_180, C13_18, C132_180,
+ C22_30, C135_180, C140_180, C7_9, C154_180]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 9/10, 2/9 VL-SNR,
+ 13/45, 9/20, 90/180, 96/180, 11/20, 100/180, 104/180, 26/45, 18/30, 28/45,
+ 23/36, 116/180, 20/30, 124/180, 25/36, 128/180, 13/18, 132/180, 22/30, 135/180,
+ 140/180, 7/9, 154/180]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C9_10, dtv.C2_9_VLSNR, dtv.C13_45, dtv.C9_20,
+ dtv.C90_180, dtv.C96_180, dtv.C11_20, dtv.C100_180, dtv.C104_180, dtv.C26_45,
+ dtv.C18_30, dtv.C28_45, dtv.C23_36, dtv.C116_180, dtv.C20_30, dtv.C124_180,
+ dtv.C25_36, dtv.C128_180, dtv.C13_18, dtv.C132_180, dtv.C22_30, dtv.C135_180,
+ dtv.C140_180, dtv.C7_9, dtv.C154_180]
+ hide: ${ framesize.hide_normal }
+- id: rate2
+ label: Code rate
+ dtype: enum
+ options: [C1_5_MEDIUM, C11_45_MEDIUM, C1_3_MEDIUM]
+ option_labels: [1/5, 11/45, 1/3]
+ option_attributes:
+ val: [dtv.C1_5_MEDIUM, dtv.C11_45_MEDIUM, dtv.C1_3_MEDIUM]
+ hide: ${ framesize.hide_medium }
+- id: rate3
+ label: Code rate
+ dtype: enum
+ options: [C1_4, C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6, C8_9, C11_45,
+ C4_15, C14_45, C7_15, C8_15, C26_45, C32_45, C1_5_VLSNR_SF2, C11_45_VLSNR_SF2,
+ C1_5_VLSNR, C4_15_VLSNR, C1_3_VLSNR]
+ option_labels: [1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 11/45, 4/15,
+ 14/45, 7/15, 8/15, 26/45, 32/45, 1/5 VL-SNR SF2, 11/45 VL-SNR SF2, 1/5 VL-SNR,
+ 4/15 VL-SNR, 1/3 VL-SNR]
+ option_attributes:
+ val: [dtv.C1_4, dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4,
+ dtv.C4_5, dtv.C5_6, dtv.C8_9, dtv.C11_45, dtv.C4_15, dtv.C14_45, dtv.C7_15,
+ dtv.C8_15, dtv.C26_45, dtv.C32_45, dtv.C1_5_VLSNR_SF2, dtv.C11_45_VLSNR_SF2,
+ dtv.C1_5_VLSNR, dtv.C4_15_VLSNR, dtv.C1_3_VLSNR]
+ hide: ${ framesize.hide_short }
+- id: constellation
+ label: Constellation
+ dtype: enum
+ options: [MOD_QPSK, MOD_8PSK, MOD_8APSK, MOD_16APSK, MOD_8_8APSK, MOD_32APSK,
+ MOD_4_12_16APSK, MOD_4_8_4_16APSK, MOD_64APSK, MOD_8_16_20_20APSK, MOD_4_12_20_28APSK,
+ MOD_128APSK, MOD_256APSK, MOD_BPSK, MOD_BPSK_SF2]
+ option_labels: [QPSK, 8PSK, 8APSK, 16APSK, 8+8APSK, 32APSK, 4+12+16rbAPSK, 4+8+4+16APSK,
+ 64APSK, 8+16+20+20APSK, 4+12+20+28APSK, 128APSK, 256APSK, PI/2 BPSK, PI/2
+ BPSK-SF2]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_8PSK, dtv.MOD_8APSK, dtv.MOD_16APSK, dtv.MOD_8_8APSK,
+ dtv.MOD_32APSK, dtv.MOD_4_12_16APSK, dtv.MOD_4_8_4_16APSK, dtv.MOD_64APSK,
+ dtv.MOD_8_16_20_20APSK, dtv.MOD_4_12_20_28APSK, dtv.MOD_128APSK, dtv.MOD_256APSK,
+ dtv.MOD_BPSK, dtv.MOD_BPSK_SF2]
+- id: pilots
+ label: Pilots
+ dtype: enum
+ options: [PILOTS_OFF, PILOTS_ON]
+ option_labels: ['Off', 'On']
+ option_attributes:
+ val: [dtv.PILOTS_OFF, dtv.PILOTS_ON]
+- id: goldcode
+ label: Gold Code
+ dtype: int
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import dtv
+ make: "dtv.dvbs2_physical_cc(${framesize.val}, \n% if str(framesize) == 'FECFRAME_NORMAL':\n\
+ ${rate1.val}, \n% elif str(framesize) == 'FECFRAME_MEDIUM':\n${rate2.val},\
+ \ \n% else:\n${rate3.val}, \n% endif\n${constellation.val}, ${pilots.val},\
+ \ ${goldcode})"
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbs2_physical_cc.xml b/gr-dtv/grc/dtv_dvbs2_physical_cc.xml
deleted file mode 100644
index 91d03ae9ab..0000000000
--- a/gr-dtv/grc/dtv_dvbs2_physical_cc.xml
+++ /dev/null
@@ -1,476 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-S2 Physical Layer Framer
-###################################################
- -->
-<block>
- <name>Physical Layer Framer</name>
- <key>dtv_dvbs2_physical_cc</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbs2_physical_cc($framesize.val, #slurp
-#if str($framesize) == 'FECFRAME_NORMAL'
-$rate1.val, #slurp
-#else if str($framesize) == 'FECFRAME_MEDIUM'
-$rate2.val, #slurp
-#else
-$rate3.val, #slurp
-#end if
-$constellation.val, $pilots.val, $goldcode)</make>
- <param>
- <name>FECFRAME size</name>
- <key>framesize</key>
- <type>enum</type>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- <opt>hide_normal:</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Medium</name>
- <key>FECFRAME_MEDIUM</key>
- <opt>val:dtv.FECFRAME_MEDIUM</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:</opt>
- <opt>hide_short:all</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- <opt>hide_normal:all</opt>
- <opt>hide_medium:all</opt>
- <opt>hide_short:</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate1</key>
- <type>enum</type>
- <hide>$framesize.hide_normal</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>9/10</name>
- <key>C9_10</key>
- <opt>val:dtv.C9_10</opt>
- </option>
- <option>
- <name>2/9 VL-SNR</name>
- <key>C2_9_VLSNR</key>
- <opt>val:dtv.C2_9_VLSNR</opt>
- </option>
- <option>
- <name>13/45</name>
- <key>C13_45</key>
- <opt>val:dtv.C13_45</opt>
- </option>
- <option>
- <name>9/20</name>
- <key>C9_20</key>
- <opt>val:dtv.C9_20</opt>
- </option>
- <option>
- <name>90/180</name>
- <key>C90_180</key>
- <opt>val:dtv.C90_180</opt>
- </option>
- <option>
- <name>96/180</name>
- <key>C96_180</key>
- <opt>val:dtv.C96_180</opt>
- </option>
- <option>
- <name>11/20</name>
- <key>C11_20</key>
- <opt>val:dtv.C11_20</opt>
- </option>
- <option>
- <name>100/180</name>
- <key>C100_180</key>
- <opt>val:dtv.C100_180</opt>
- </option>
- <option>
- <name>104/180</name>
- <key>C104_180</key>
- <opt>val:dtv.C104_180</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>18/30</name>
- <key>C18_30</key>
- <opt>val:dtv.C18_30</opt>
- </option>
- <option>
- <name>28/45</name>
- <key>C28_45</key>
- <opt>val:dtv.C28_45</opt>
- </option>
- <option>
- <name>23/36</name>
- <key>C23_36</key>
- <opt>val:dtv.C23_36</opt>
- </option>
- <option>
- <name>116/180</name>
- <key>C116_180</key>
- <opt>val:dtv.C116_180</opt>
- </option>
- <option>
- <name>20/30</name>
- <key>C20_30</key>
- <opt>val:dtv.C20_30</opt>
- </option>
- <option>
- <name>124/180</name>
- <key>C124_180</key>
- <opt>val:dtv.C124_180</opt>
- </option>
- <option>
- <name>25/36</name>
- <key>C25_36</key>
- <opt>val:dtv.C25_36</opt>
- </option>
- <option>
- <name>128/180</name>
- <key>C128_180</key>
- <opt>val:dtv.C128_180</opt>
- </option>
- <option>
- <name>13/18</name>
- <key>C13_18</key>
- <opt>val:dtv.C13_18</opt>
- </option>
- <option>
- <name>132/180</name>
- <key>C132_180</key>
- <opt>val:dtv.C132_180</opt>
- </option>
- <option>
- <name>22/30</name>
- <key>C22_30</key>
- <opt>val:dtv.C22_30</opt>
- </option>
- <option>
- <name>135/180</name>
- <key>C135_180</key>
- <opt>val:dtv.C135_180</opt>
- </option>
- <option>
- <name>140/180</name>
- <key>C140_180</key>
- <opt>val:dtv.C140_180</opt>
- </option>
- <option>
- <name>7/9</name>
- <key>C7_9</key>
- <opt>val:dtv.C7_9</opt>
- </option>
- <option>
- <name>154/180</name>
- <key>C154_180</key>
- <opt>val:dtv.C154_180</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate2</key>
- <type>enum</type>
- <hide>$framesize.hide_medium</hide>
- <option>
- <name>1/5</name>
- <key>C1_5_MEDIUM</key>
- <opt>val:dtv.C1_5_MEDIUM</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45_MEDIUM</key>
- <opt>val:dtv.C11_45_MEDIUM</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3_MEDIUM</key>
- <opt>val:dtv.C1_3_MEDIUM</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate3</key>
- <type>enum</type>
- <hide>$framesize.hide_short</hide>
- <option>
- <name>1/4</name>
- <key>C1_4</key>
- <opt>val:dtv.C1_4</opt>
- </option>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>8/9</name>
- <key>C8_9</key>
- <opt>val:dtv.C8_9</opt>
- </option>
- <option>
- <name>11/45</name>
- <key>C11_45</key>
- <opt>val:dtv.C11_45</opt>
- </option>
- <option>
- <name>4/15</name>
- <key>C4_15</key>
- <opt>val:dtv.C4_15</opt>
- </option>
- <option>
- <name>14/45</name>
- <key>C14_45</key>
- <opt>val:dtv.C14_45</opt>
- </option>
- <option>
- <name>7/15</name>
- <key>C7_15</key>
- <opt>val:dtv.C7_15</opt>
- </option>
- <option>
- <name>8/15</name>
- <key>C8_15</key>
- <opt>val:dtv.C8_15</opt>
- </option>
- <option>
- <name>26/45</name>
- <key>C26_45</key>
- <opt>val:dtv.C26_45</opt>
- </option>
- <option>
- <name>32/45</name>
- <key>C32_45</key>
- <opt>val:dtv.C32_45</opt>
- </option>
- <option>
- <name>1/5 VL-SNR SF2</name>
- <key>C1_5_VLSNR_SF2</key>
- <opt>val:dtv.C1_5_VLSNR_SF2</opt>
- </option>
- <option>
- <name>11/45 VL-SNR SF2</name>
- <key>C11_45_VLSNR_SF2</key>
- <opt>val:dtv.C11_45_VLSNR_SF2</opt>
- </option>
- <option>
- <name>1/5 VL-SNR</name>
- <key>C1_5_VLSNR</key>
- <opt>val:dtv.C1_5_VLSNR</opt>
- </option>
- <option>
- <name>4/15 VL-SNR</name>
- <key>C4_15_VLSNR</key>
- <opt>val:dtv.C4_15_VLSNR</opt>
- </option>
- <option>
- <name>1/3 VL-SNR</name>
- <key>C1_3_VLSNR</key>
- <opt>val:dtv.C1_3_VLSNR</opt>
- </option>
- </param>
- <param>
- <name>Constellation</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>MOD_QPSK</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>8PSK</name>
- <key>MOD_8PSK</key>
- <opt>val:dtv.MOD_8PSK</opt>
- </option>
- <option>
- <name>8APSK</name>
- <key>MOD_8APSK</key>
- <opt>val:dtv.MOD_8APSK</opt>
- </option>
- <option>
- <name>16APSK</name>
- <key>MOD_16APSK</key>
- <opt>val:dtv.MOD_16APSK</opt>
- </option>
- <option>
- <name>8+8APSK</name>
- <key>MOD_8_8APSK</key>
- <opt>val:dtv.MOD_8_8APSK</opt>
- </option>
- <option>
- <name>32APSK</name>
- <key>MOD_32APSK</key>
- <opt>val:dtv.MOD_32APSK</opt>
- </option>
- <option>
- <name>4+12+16rbAPSK</name>
- <key>MOD_4_12_16APSK</key>
- <opt>val:dtv.MOD_4_12_16APSK</opt>
- </option>
- <option>
- <name>4+8+4+16APSK</name>
- <key>MOD_4_8_4_16APSK</key>
- <opt>val:dtv.MOD_4_8_4_16APSK</opt>
- </option>
- <option>
- <name>64APSK</name>
- <key>MOD_64APSK</key>
- <opt>val:dtv.MOD_64APSK</opt>
- </option>
- <option>
- <name>8+16+20+20APSK</name>
- <key>MOD_8_16_20_20APSK</key>
- <opt>val:dtv.MOD_8_16_20_20APSK</opt>
- </option>
- <option>
- <name>4+12+20+28APSK</name>
- <key>MOD_4_12_20_28APSK</key>
- <opt>val:dtv.MOD_4_12_20_28APSK</opt>
- </option>
- <option>
- <name>128APSK</name>
- <key>MOD_128APSK</key>
- <opt>val:dtv.MOD_128APSK</opt>
- </option>
- <option>
- <name>256APSK</name>
- <key>MOD_256APSK</key>
- <opt>val:dtv.MOD_256APSK</opt>
- </option>
- <option>
- <name>PI/2 BPSK</name>
- <key>MOD_BPSK</key>
- <opt>val:dtv.MOD_BPSK</opt>
- </option>
- <option>
- <name>PI/2 BPSK-SF2</name>
- <key>MOD_BPSK_SF2</key>
- <opt>val:dtv.MOD_BPSK_SF2</opt>
- </option>
- </param>
- <param>
- <name>Pilots</name>
- <key>pilots</key>
- <type>enum</type>
- <option>
- <name>Off</name>
- <key>PILOTS_OFF</key>
- <opt>val:dtv.PILOTS_OFF</opt>
- </option>
- <option>
- <name>On</name>
- <key>PILOTS_ON</key>
- <opt>val:dtv.PILOTS_ON</opt>
- </option>
- </param>
- <param>
- <name>Gold Code</name>
- <key>goldcode</key>
- <value>0</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt2_cellinterleaver_cc.block.yml b/gr-dtv/grc/dtv_dvbt2_cellinterleaver_cc.block.yml
new file mode 100644
index 0000000000..4f292fca08
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt2_cellinterleaver_cc.block.yml
@@ -0,0 +1,41 @@
+id: dtv_dvbt2_cellinterleaver_cc
+label: Cell/Time Interleaver
+
+parameters:
+- id: framesize
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_SHORT]
+ option_labels: [Normal, Short]
+ option_attributes:
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_SHORT]
+- id: constellation
+ label: Constellation
+ dtype: enum
+ options: [MOD_QPSK, MOD_16QAM, MOD_64QAM, MOD_256QAM]
+ option_labels: [QPSK, 16QAM, 64QAM, 256QAM]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_16QAM, dtv.MOD_64QAM, dtv.MOD_256QAM]
+- id: fecblocks
+ label: FEC blocks per frame
+ dtype: int
+ default: '168'
+- id: tiblocks
+ label: TI blocks per frame
+ dtype: int
+ default: '3'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt2_cellinterleaver_cc(${framesize.val}, ${constellation.val}, ${fecblocks},
+ ${tiblocks})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt2_cellinterleaver_cc.xml b/gr-dtv/grc/dtv_dvbt2_cellinterleaver_cc.xml
deleted file mode 100644
index 0f3aa76f5e..0000000000
--- a/gr-dtv/grc/dtv_dvbt2_cellinterleaver_cc.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T2 Cell and Time Interleaver
-###################################################
- -->
-<block>
- <name>Cell/Time Interleaver</name>
- <key>dtv_dvbt2_cellinterleaver_cc</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt2_cellinterleaver_cc($framesize.val, $constellation.val, $fecblocks, $tiblocks)</make>
- <param>
- <name>FECFRAME size</name>
- <key>framesize</key>
- <type>enum</type>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- </option>
- </param>
- <param>
- <name>Constellation</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>MOD_QPSK</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>16QAM</name>
- <key>MOD_16QAM</key>
- <opt>val:dtv.MOD_16QAM</opt>
- </option>
- <option>
- <name>64QAM</name>
- <key>MOD_64QAM</key>
- <opt>val:dtv.MOD_64QAM</opt>
- </option>
- <option>
- <name>256QAM</name>
- <key>MOD_256QAM</key>
- <opt>val:dtv.MOD_256QAM</opt>
- </option>
- </param>
- <param>
- <name>FEC blocks per frame</name>
- <key>fecblocks</key>
- <value>168</value>
- <type>int</type>
- </param>
- <param>
- <name>TI blocks per frame</name>
- <key>tiblocks</key>
- <value>3</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt2_framemapper_cc.block.yml b/gr-dtv/grc/dtv_dvbt2_framemapper_cc.block.yml
new file mode 100644
index 0000000000..3459c13afb
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt2_framemapper_cc.block.yml
@@ -0,0 +1,203 @@
+id: dtv_dvbt2_framemapper_cc
+label: Frame Mapper
+
+parameters:
+- id: framesize
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_SHORT]
+ option_labels: [Normal, Short]
+ option_attributes:
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_SHORT]
+- id: rate
+ label: Code rate
+ dtype: enum
+ options: [C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6]
+ option_labels: [1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6]
+ option_attributes:
+ val: [dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4, dtv.C4_5,
+ dtv.C5_6]
+- id: constellation
+ label: Constellation
+ dtype: enum
+ options: [MOD_QPSK, MOD_16QAM, MOD_64QAM, MOD_256QAM]
+ option_labels: [QPSK, 16QAM, 64QAM, 256QAM]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_16QAM, dtv.MOD_64QAM, dtv.MOD_256QAM]
+- id: rotation
+ label: Constellation rotation
+ dtype: enum
+ options: [ROTATION_OFF, ROTATION_ON]
+ option_labels: ['Off', 'On']
+ option_attributes:
+ val: [dtv.ROTATION_OFF, dtv.ROTATION_ON]
+- id: fecblocks
+ label: FEC blocks per frame
+ dtype: int
+ default: '168'
+- id: tiblocks
+ label: TI blocks per frame
+ dtype: int
+ default: '3'
+- id: carriermode
+ label: Extended Carrier Mode
+ dtype: enum
+ options: [CARRIERS_NORMAL, CARRIERS_EXTENDED]
+ option_labels: [Normal, Extended]
+ option_attributes:
+ val: [dtv.CARRIERS_NORMAL, dtv.CARRIERS_EXTENDED]
+- id: fftsize1
+ label: FFT Size
+ dtype: enum
+ options: [FFTSIZE_1K, FFTSIZE_2K, FFTSIZE_4K, FFTSIZE_8K, FFTSIZE_8K_T2GI, FFTSIZE_16K,
+ FFTSIZE_32K, FFTSIZE_32K_T2GI]
+ option_labels: [1K, 2K, 4K, 8K, 8K DVB-T2 GI, 16K, 32K, 32K DVB-T2 GI]
+ option_attributes:
+ val: [dtv.FFTSIZE_1K, dtv.FFTSIZE_2K, dtv.FFTSIZE_4K, dtv.FFTSIZE_8K, dtv.FFTSIZE_8K_T2GI,
+ dtv.FFTSIZE_16K, dtv.FFTSIZE_32K, dtv.FFTSIZE_32K_T2GI]
+ hide: ${ (preamble1.hide_base if str(version) == 'VERSION_111' else preamble2.hide_base)
+ }
+- id: fftsize2
+ label: FFT Size
+ dtype: enum
+ options: [FFTSIZE_2K, FFTSIZE_4K, FFTSIZE_8K, FFTSIZE_8K_T2GI, FFTSIZE_16K, FFTSIZE_16K_T2GI]
+ option_labels: [2K, 4K, 8K, 8K DVB-T2 GI, 16K, 16K DVB-T2 GI]
+ option_attributes:
+ val: [dtv.FFTSIZE_2K, dtv.FFTSIZE_4K, dtv.FFTSIZE_8K, dtv.FFTSIZE_8K_T2GI,
+ dtv.FFTSIZE_16K, dtv.FFTSIZE_16K_T2GI]
+ hide: ${ (preamble1.hide_lite if str(version) == 'VERSION_111' else preamble2.hide_lite)
+ }
+- id: guardinterval
+ label: Guard Interval
+ dtype: enum
+ options: [GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_1_128, GI_19_128, GI_19_256]
+ option_labels: [1/32, 1/16, 1/8, 1/4, 1/128, 19/128, 19/256]
+ option_attributes:
+ val: [dtv.GI_1_32, dtv.GI_1_16, dtv.GI_1_8, dtv.GI_1_4, dtv.GI_1_128, dtv.GI_19_128,
+ dtv.GI_19_256]
+- id: l1constellation
+ label: L1 Constellation
+ dtype: enum
+ options: [L1_MOD_BPSK, L1_MOD_QPSK, L1_MOD_16QAM, L1_MOD_64QAM]
+ option_labels: [BPSK, QPSK, 16QAM, 64QAM]
+ option_attributes:
+ val: [dtv.L1_MOD_BPSK, dtv.L1_MOD_QPSK, dtv.L1_MOD_16QAM, dtv.L1_MOD_64QAM]
+- id: pilotpattern
+ label: Pilot Pattern
+ dtype: enum
+ options: [PILOT_PP1, PILOT_PP2, PILOT_PP3, PILOT_PP4, PILOT_PP5, PILOT_PP6, PILOT_PP7,
+ PILOT_PP8]
+ option_labels: [PP1, PP2, PP3, PP4, PP5, PP6, PP7, PP8]
+ option_attributes:
+ val: [dtv.PILOT_PP1, dtv.PILOT_PP2, dtv.PILOT_PP3, dtv.PILOT_PP4, dtv.PILOT_PP5,
+ dtv.PILOT_PP6, dtv.PILOT_PP7, dtv.PILOT_PP8]
+- id: t2frames
+ label: T2 Frames per Super-frame
+ dtype: int
+ default: '2'
+- id: numdatasyms
+ label: Number of Data Symbols
+ dtype: int
+ default: '100'
+- id: paprmode1
+ label: PAPR Mode
+ dtype: enum
+ options: [PAPR_OFF, PAPR_ACE, PAPR_TR, PAPR_BOTH]
+ option_labels: ['Off', Active Constellation Extension, Tone Reservation, Both
+ ACE and TR]
+ option_attributes:
+ val: [dtv.PAPR_OFF, dtv.PAPR_ACE, dtv.PAPR_TR, dtv.PAPR_BOTH]
+ hide: ${ version.hide_111 }
+- id: paprmode2
+ label: PAPR Mode
+ dtype: enum
+ options: [PAPR_OFF, PAPR_ACE, PAPR_TR, PAPR_BOTH]
+ option_labels: [P2 Only, Active Constellation Extension, Tone Reservation, Both
+ ACE and TR]
+ option_attributes:
+ val: [dtv.PAPR_OFF, dtv.PAPR_ACE, dtv.PAPR_TR, dtv.PAPR_BOTH]
+ hide: ${ version.hide_131 }
+- id: version
+ label: Specification Version
+ dtype: enum
+ options: [VERSION_111, VERSION_131]
+ option_labels: [1.1.1, 1.3.1]
+ option_attributes:
+ hide_111: ['', all]
+ hide_131: [all, '']
+ val: [dtv.VERSION_111, dtv.VERSION_131]
+- id: preamble1
+ label: Preamble
+ dtype: enum
+ options: [PREAMBLE_T2_SISO, PREAMBLE_T2_MISO]
+ option_labels: [T2 SISO, T2 MISO]
+ option_attributes:
+ hide_base: ['', '']
+ hide_lite: [all, all]
+ val: [dtv.PREAMBLE_T2_SISO, dtv.PREAMBLE_T2_MISO]
+ hide: ${ version.hide_111 }
+- id: preamble2
+ label: Preamble
+ dtype: enum
+ options: [PREAMBLE_T2_SISO, PREAMBLE_T2_MISO, PREAMBLE_T2_LITE_SISO, PREAMBLE_T2_LITE_MISO]
+ option_labels: [T2 SISO, T2 MISO, T2-Lite SISO, T2-Lite MISO]
+ option_attributes:
+ hide_base: ['', '', all, all]
+ hide_lite: [all, all, '', '']
+ val: [dtv.PREAMBLE_T2_SISO, dtv.PREAMBLE_T2_MISO, dtv.PREAMBLE_T2_LITE_SISO,
+ dtv.PREAMBLE_T2_LITE_MISO]
+ hide: ${ version.hide_131 }
+- id: inputmode
+ label: Baseband Framing Mode
+ dtype: enum
+ options: [INPUTMODE_NORMAL, INPUTMODE_HIEFF]
+ option_labels: [Normal, High Efficiency]
+ option_attributes:
+ val: [dtv.INPUTMODE_NORMAL, dtv.INPUTMODE_HIEFF]
+ hide: ${ version.hide_131 }
+- id: reservedbiasbits
+ label: Reserved Bits Bias Balancing
+ dtype: enum
+ options: [RESERVED_OFF, RESERVED_ON]
+ option_labels: ['Off', 'On']
+ option_attributes:
+ val: [dtv.RESERVED_OFF, dtv.RESERVED_ON]
+ hide: ${ version.hide_131 }
+- id: l1scrambled
+ label: L1-post Scrambling
+ dtype: enum
+ options: [L1_SCRAMBLED_OFF, L1_SCRAMBLED_ON]
+ option_labels: ['Off', 'On']
+ option_attributes:
+ val: [dtv.L1_SCRAMBLED_OFF, dtv.L1_SCRAMBLED_ON]
+ hide: ${ version.hide_131 }
+- id: inband
+ label: In-band Signalling
+ dtype: enum
+ options: [INBAND_OFF, INBAND_ON]
+ option_labels: ['Off', Type B]
+ option_attributes:
+ val: [dtv.INBAND_OFF, dtv.INBAND_ON]
+ hide: ${ version.hide_131 }
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import dtv
+ make: "dtv.dvbt2_framemapper_cc(${framesize.val}, ${rate.val}, ${constellation.val},\
+ \ ${rotation.val}, ${fecblocks}, ${tiblocks}, ${carriermode.val}, \n% if str(version)\
+ \ == 'VERSION_111':\n${fftsize1.val}, \n% else:\n% if str(preamble2) == 'PREAMBLE_T2_SISO'\
+ \ or str(preamble2) == 'PREAMBLE_T2_MISO':\n${fftsize1.val}, \n% else:\n${fftsize2.val},\
+ \ \n% endif\n% endif\n${guardinterval.val}, ${l1constellation.val}, ${pilotpattern.val},\
+ \ ${t2frames}, ${numdatasyms}, \n% if str(version) == 'VERSION_111':\n${paprmode1.val},\
+ \ \n% else:\n${paprmode2.val}, \n% endif\n${version.val}, \n% if str(version)\
+ \ == 'VERSION_111':\n${preamble1.val}, \n% else:\n${preamble2.val}, \n% endif\n\
+ ${inputmode.val}, ${reservedbiasbits.val}, ${l1scrambled.val}, ${inband.val})"
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt2_framemapper_cc.xml b/gr-dtv/grc/dtv_dvbt2_framemapper_cc.xml
deleted file mode 100644
index e795c8a1dc..0000000000
--- a/gr-dtv/grc/dtv_dvbt2_framemapper_cc.xml
+++ /dev/null
@@ -1,562 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T2 Frame Mapper
-###################################################
- -->
-<block>
- <name>Frame Mapper</name>
- <key>dtv_dvbt2_framemapper_cc</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt2_framemapper_cc($framesize.val, $rate.val, $constellation.val, $rotation.val, $fecblocks, $tiblocks, $carriermode.val, #slurp
-#if str($version) == 'VERSION_111'
-$fftsize1.val, #slurp
-#else
-#if str($preamble2) == 'PREAMBLE_T2_SISO' or str($preamble2) == 'PREAMBLE_T2_MISO'
-$fftsize1.val, #slurp
-#else
-$fftsize2.val, #slurp
-#end if
-#end if
-$guardinterval.val, $l1constellation.val, $pilotpattern.val, $t2frames, $numdatasyms, #slurp
-#if str($version) == 'VERSION_111'
-$paprmode1.val, #slurp
-#else
-$paprmode2.val, #slurp
-#end if
-$version.val, #slurp
-#if str($version) == 'VERSION_111'
-$preamble1.val, #slurp
-#else
-$preamble2.val, #slurp
-#end if
-$inputmode.val, $reservedbiasbits.val, $l1scrambled.val, $inband.val)</make>
- <param>
- <name>FECFRAME size</name>
- <key>framesize</key>
- <type>enum</type>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate</key>
- <type>enum</type>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- </param>
- <param>
- <name>Constellation</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>MOD_QPSK</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>16QAM</name>
- <key>MOD_16QAM</key>
- <opt>val:dtv.MOD_16QAM</opt>
- </option>
- <option>
- <name>64QAM</name>
- <key>MOD_64QAM</key>
- <opt>val:dtv.MOD_64QAM</opt>
- </option>
- <option>
- <name>256QAM</name>
- <key>MOD_256QAM</key>
- <opt>val:dtv.MOD_256QAM</opt>
- </option>
- </param>
- <param>
- <name>Constellation rotation</name>
- <key>rotation</key>
- <type>enum</type>
- <option>
- <name>Off</name>
- <key>ROTATION_OFF</key>
- <opt>val:dtv.ROTATION_OFF</opt>
- </option>
- <option>
- <name>On</name>
- <key>ROTATION_ON</key>
- <opt>val:dtv.ROTATION_ON</opt>
- </option>
- </param>
- <param>
- <name>FEC blocks per frame</name>
- <key>fecblocks</key>
- <value>168</value>
- <type>int</type>
- </param>
- <param>
- <name>TI blocks per frame</name>
- <key>tiblocks</key>
- <value>3</value>
- <type>int</type>
- </param>
- <param>
- <name>Extended Carrier Mode</name>
- <key>carriermode</key>
- <type>enum</type>
- <option>
- <name>Normal</name>
- <key>CARRIERS_NORMAL</key>
- <opt>val:dtv.CARRIERS_NORMAL</opt>
- </option>
- <option>
- <name>Extended</name>
- <key>CARRIERS_EXTENDED</key>
- <opt>val:dtv.CARRIERS_EXTENDED</opt>
- </option>
- </param>
- <param>
- <name>FFT Size</name>
- <key>fftsize1</key>
- <type>enum</type>
- <hide>#if str($version) == 'VERSION_111' then $preamble1.hide_base else $preamble2.hide_base</hide>
- <option>
- <name>1K</name>
- <key>FFTSIZE_1K</key>
- <opt>val:dtv.FFTSIZE_1K</opt>
- </option>
- <option>
- <name>2K</name>
- <key>FFTSIZE_2K</key>
- <opt>val:dtv.FFTSIZE_2K</opt>
- </option>
- <option>
- <name>4K</name>
- <key>FFTSIZE_4K</key>
- <opt>val:dtv.FFTSIZE_4K</opt>
- </option>
- <option>
- <name>8K</name>
- <key>FFTSIZE_8K</key>
- <opt>val:dtv.FFTSIZE_8K</opt>
- </option>
- <option>
- <name>8K DVB-T2 GI</name>
- <key>FFTSIZE_8K_T2GI</key>
- <opt>val:dtv.FFTSIZE_8K_T2GI</opt>
- </option>
- <option>
- <name>16K</name>
- <key>FFTSIZE_16K</key>
- <opt>val:dtv.FFTSIZE_16K</opt>
- </option>
- <option>
- <name>32K</name>
- <key>FFTSIZE_32K</key>
- <opt>val:dtv.FFTSIZE_32K</opt>
- </option>
- <option>
- <name>32K DVB-T2 GI</name>
- <key>FFTSIZE_32K_T2GI</key>
- <opt>val:dtv.FFTSIZE_32K_T2GI</opt>
- </option>
- </param>
- <param>
- <name>FFT Size</name>
- <key>fftsize2</key>
- <type>enum</type>
- <hide>#if str($version) == 'VERSION_111' then $preamble1.hide_lite else $preamble2.hide_lite</hide>
- <option>
- <name>2K</name>
- <key>FFTSIZE_2K</key>
- <opt>val:dtv.FFTSIZE_2K</opt>
- </option>
- <option>
- <name>4K</name>
- <key>FFTSIZE_4K</key>
- <opt>val:dtv.FFTSIZE_4K</opt>
- </option>
- <option>
- <name>8K</name>
- <key>FFTSIZE_8K</key>
- <opt>val:dtv.FFTSIZE_8K</opt>
- </option>
- <option>
- <name>8K DVB-T2 GI</name>
- <key>FFTSIZE_8K_T2GI</key>
- <opt>val:dtv.FFTSIZE_8K_T2GI</opt>
- </option>
- <option>
- <name>16K</name>
- <key>FFTSIZE_16K</key>
- <opt>val:dtv.FFTSIZE_16K</opt>
- </option>
- <option>
- <name>16K DVB-T2 GI</name>
- <key>FFTSIZE_16K_T2GI</key>
- <opt>val:dtv.FFTSIZE_16K_T2GI</opt>
- </option>
- </param>
- <param>
- <name>Guard Interval</name>
- <key>guardinterval</key>
- <type>enum</type>
- <option>
- <name>1/32</name>
- <key>GI_1_32</key>
- <opt>val:dtv.GI_1_32</opt>
- </option>
- <option>
- <name>1/16</name>
- <key>GI_1_16</key>
- <opt>val:dtv.GI_1_16</opt>
- </option>
- <option>
- <name>1/8</name>
- <key>GI_1_8</key>
- <opt>val:dtv.GI_1_8</opt>
- </option>
- <option>
- <name>1/4</name>
- <key>GI_1_4</key>
- <opt>val:dtv.GI_1_4</opt>
- </option>
- <option>
- <name>1/128</name>
- <key>GI_1_128</key>
- <opt>val:dtv.GI_1_128</opt>
- </option>
- <option>
- <name>19/128</name>
- <key>GI_19_128</key>
- <opt>val:dtv.GI_19_128</opt>
- </option>
- <option>
- <name>19/256</name>
- <key>GI_19_256</key>
- <opt>val:dtv.GI_19_256</opt>
- </option>
- </param>
- <param>
- <name>L1 Constellation</name>
- <key>l1constellation</key>
- <type>enum</type>
- <option>
- <name>BPSK</name>
- <key>L1_MOD_BPSK</key>
- <opt>val:dtv.L1_MOD_BPSK</opt>
- </option>
- <option>
- <name>QPSK</name>
- <key>L1_MOD_QPSK</key>
- <opt>val:dtv.L1_MOD_QPSK</opt>
- </option>
- <option>
- <name>16QAM</name>
- <key>L1_MOD_16QAM</key>
- <opt>val:dtv.L1_MOD_16QAM</opt>
- </option>
- <option>
- <name>64QAM</name>
- <key>L1_MOD_64QAM</key>
- <opt>val:dtv.L1_MOD_64QAM</opt>
- </option>
- </param>
- <param>
- <name>Pilot Pattern</name>
- <key>pilotpattern</key>
- <type>enum</type>
- <option>
- <name>PP1</name>
- <key>PILOT_PP1</key>
- <opt>val:dtv.PILOT_PP1</opt>
- </option>
- <option>
- <name>PP2</name>
- <key>PILOT_PP2</key>
- <opt>val:dtv.PILOT_PP2</opt>
- </option>
- <option>
- <name>PP3</name>
- <key>PILOT_PP3</key>
- <opt>val:dtv.PILOT_PP3</opt>
- </option>
- <option>
- <name>PP4</name>
- <key>PILOT_PP4</key>
- <opt>val:dtv.PILOT_PP4</opt>
- </option>
- <option>
- <name>PP5</name>
- <key>PILOT_PP5</key>
- <opt>val:dtv.PILOT_PP5</opt>
- </option>
- <option>
- <name>PP6</name>
- <key>PILOT_PP6</key>
- <opt>val:dtv.PILOT_PP6</opt>
- </option>
- <option>
- <name>PP7</name>
- <key>PILOT_PP7</key>
- <opt>val:dtv.PILOT_PP7</opt>
- </option>
- <option>
- <name>PP8</name>
- <key>PILOT_PP8</key>
- <opt>val:dtv.PILOT_PP8</opt>
- </option>
- </param>
- <param>
- <name>T2 Frames per Super-frame</name>
- <key>t2frames</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Number of Data Symbols</name>
- <key>numdatasyms</key>
- <value>100</value>
- <type>int</type>
- </param>
- <param>
- <name>PAPR Mode</name>
- <key>paprmode1</key>
- <type>enum</type>
- <hide>$version.hide_111</hide>
- <option>
- <name>Off</name>
- <key>PAPR_OFF</key>
- <opt>val:dtv.PAPR_OFF</opt>
- </option>
- <option>
- <name>Active Constellation Extension</name>
- <key>PAPR_ACE</key>
- <opt>val:dtv.PAPR_ACE</opt>
- </option>
- <option>
- <name>Tone Reservation</name>
- <key>PAPR_TR</key>
- <opt>val:dtv.PAPR_TR</opt>
- </option>
- <option>
- <name>Both ACE and TR</name>
- <key>PAPR_BOTH</key>
- <opt>val:dtv.PAPR_BOTH</opt>
- </option>
- </param>
- <param>
- <name>PAPR Mode</name>
- <key>paprmode2</key>
- <type>enum</type>
- <hide>$version.hide_131</hide>
- <option>
- <name>P2 Only</name>
- <key>PAPR_OFF</key>
- <opt>val:dtv.PAPR_OFF</opt>
- </option>
- <option>
- <name>Active Constellation Extension</name>
- <key>PAPR_ACE</key>
- <opt>val:dtv.PAPR_ACE</opt>
- </option>
- <option>
- <name>Tone Reservation</name>
- <key>PAPR_TR</key>
- <opt>val:dtv.PAPR_TR</opt>
- </option>
- <option>
- <name>Both ACE and TR</name>
- <key>PAPR_BOTH</key>
- <opt>val:dtv.PAPR_BOTH</opt>
- </option>
- </param>
- <param>
- <name>Specification Version</name>
- <key>version</key>
- <type>enum</type>
- <option>
- <name>1.1.1</name>
- <key>VERSION_111</key>
- <opt>val:dtv.VERSION_111</opt>
- <opt>hide_111:</opt>
- <opt>hide_131:all</opt>
- </option>
- <option>
- <name>1.3.1</name>
- <key>VERSION_131</key>
- <opt>val:dtv.VERSION_131</opt>
- <opt>hide_111:all</opt>
- <opt>hide_131:</opt>
- </option>
- </param>
- <param>
- <name>Preamble</name>
- <key>preamble1</key>
- <type>enum</type>
- <hide>$version.hide_111</hide>
- <option>
- <name>T2 SISO</name>
- <key>PREAMBLE_T2_SISO</key>
- <opt>val:dtv.PREAMBLE_T2_SISO</opt>
- <opt>hide_lite:all</opt>
- <opt>hide_base:</opt>
- </option>
- <option>
- <name>T2 MISO</name>
- <key>PREAMBLE_T2_MISO</key>
- <opt>val:dtv.PREAMBLE_T2_MISO</opt>
- <opt>hide_lite:all</opt>
- <opt>hide_base:</opt>
- </option>
- </param>
- <param>
- <name>Preamble</name>
- <key>preamble2</key>
- <type>enum</type>
- <hide>$version.hide_131</hide>
- <option>
- <name>T2 SISO</name>
- <key>PREAMBLE_T2_SISO</key>
- <opt>val:dtv.PREAMBLE_T2_SISO</opt>
- <opt>hide_lite:all</opt>
- <opt>hide_base:</opt>
- </option>
- <option>
- <name>T2 MISO</name>
- <key>PREAMBLE_T2_MISO</key>
- <opt>val:dtv.PREAMBLE_T2_MISO</opt>
- <opt>hide_lite:all</opt>
- <opt>hide_base:</opt>
- </option>
- <option>
- <name>T2-Lite SISO</name>
- <key>PREAMBLE_T2_LITE_SISO</key>
- <opt>val:dtv.PREAMBLE_T2_LITE_SISO</opt>
- <opt>hide_lite:</opt>
- <opt>hide_base:all</opt>
- </option>
- <option>
- <name>T2-Lite MISO</name>
- <key>PREAMBLE_T2_LITE_MISO</key>
- <opt>val:dtv.PREAMBLE_T2_LITE_MISO</opt>
- <opt>hide_lite:</opt>
- <opt>hide_base:all</opt>
- </option>
- </param>
- <param>
- <name>Baseband Framing Mode</name>
- <key>inputmode</key>
- <type>enum</type>
- <hide>$version.hide_131</hide>
- <option>
- <name>Normal</name>
- <key>INPUTMODE_NORMAL</key>
- <opt>val:dtv.INPUTMODE_NORMAL</opt>
- </option>
- <option>
- <name>High Efficiency</name>
- <key>INPUTMODE_HIEFF</key>
- <opt>val:dtv.INPUTMODE_HIEFF</opt>
- </option>
- </param>
- <param>
- <name>Reserved Bits Bias Balancing</name>
- <key>reservedbiasbits</key>
- <type>enum</type>
- <hide>$version.hide_131</hide>
- <option>
- <name>Off</name>
- <key>RESERVED_OFF</key>
- <opt>val:dtv.RESERVED_OFF</opt>
- </option>
- <option>
- <name>On</name>
- <key>RESERVED_ON</key>
- <opt>val:dtv.RESERVED_ON</opt>
- </option>
- </param>
- <param>
- <name>L1-post Scrambling</name>
- <key>l1scrambled</key>
- <type>enum</type>
- <hide>$version.hide_131</hide>
- <option>
- <name>Off</name>
- <key>L1_SCRAMBLED_OFF</key>
- <opt>val:dtv.L1_SCRAMBLED_OFF</opt>
- </option>
- <option>
- <name>On</name>
- <key>L1_SCRAMBLED_ON</key>
- <opt>val:dtv.L1_SCRAMBLED_ON</opt>
- </option>
- </param>
- <param>
- <name>In-band Signalling</name>
- <key>inband</key>
- <type>enum</type>
- <hide>$version.hide_131</hide>
- <option>
- <name>Off</name>
- <key>INBAND_OFF</key>
- <opt>val:dtv.INBAND_OFF</opt>
- </option>
- <option>
- <name>Type B</name>
- <key>INBAND_ON</key>
- <opt>val:dtv.INBAND_ON</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt2_freqinterleaver_cc.block.yml b/gr-dtv/grc/dtv_dvbt2_freqinterleaver_cc.block.yml
new file mode 100644
index 0000000000..990d4b8002
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt2_freqinterleaver_cc.block.yml
@@ -0,0 +1,104 @@
+id: dtv_dvbt2_freqinterleaver_cc
+label: Frequency Interleaver
+
+parameters:
+- id: carriermode
+ label: Extended Carrier Mode
+ dtype: enum
+ options: [CARRIERS_NORMAL, CARRIERS_EXTENDED]
+ option_labels: [Normal, Extended]
+ option_attributes:
+ val: [dtv.CARRIERS_NORMAL, dtv.CARRIERS_EXTENDED]
+- id: fftsize
+ label: FFT Size
+ dtype: enum
+ options: [FFTSIZE_1K, FFTSIZE_2K, FFTSIZE_4K, FFTSIZE_8K, FFTSIZE_8K_T2GI, FFTSIZE_16K,
+ FFTSIZE_16K_T2GI, FFTSIZE_32K, FFTSIZE_32K_T2GI]
+ option_labels: [1K, 2K, 4K, 8K, 8K DVB-T2 GI, 16K, 16K DVB-T2 GI, 32K, 32K DVB-T2
+ GI]
+ option_attributes:
+ val: [dtv.FFTSIZE_1K, dtv.FFTSIZE_2K, dtv.FFTSIZE_4K, dtv.FFTSIZE_8K, dtv.FFTSIZE_8K_T2GI,
+ dtv.FFTSIZE_16K, dtv.FFTSIZE_16K_T2GI, dtv.FFTSIZE_32K, dtv.FFTSIZE_32K_T2GI]
+- id: pilotpattern
+ label: Pilot Pattern
+ dtype: enum
+ options: [PILOT_PP1, PILOT_PP2, PILOT_PP3, PILOT_PP4, PILOT_PP5, PILOT_PP6, PILOT_PP7,
+ PILOT_PP8]
+ option_labels: [PP1, PP2, PP3, PP4, PP5, PP6, PP7, PP8]
+ option_attributes:
+ val: [dtv.PILOT_PP1, dtv.PILOT_PP2, dtv.PILOT_PP3, dtv.PILOT_PP4, dtv.PILOT_PP5,
+ dtv.PILOT_PP6, dtv.PILOT_PP7, dtv.PILOT_PP8]
+- id: guardinterval
+ label: Guard Interval
+ dtype: enum
+ options: [GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_1_128, GI_19_128, GI_19_256]
+ option_labels: [1/32, 1/16, 1/8, 1/4, 1/128, 19/128, 19/256]
+ option_attributes:
+ val: [dtv.GI_1_32, dtv.GI_1_16, dtv.GI_1_8, dtv.GI_1_4, dtv.GI_1_128, dtv.GI_19_128,
+ dtv.GI_19_256]
+- id: numdatasyms
+ label: Number of Data Symbols
+ dtype: int
+ default: '100'
+- id: paprmode1
+ label: PAPR Mode
+ dtype: enum
+ options: [PAPR_OFF, PAPR_ACE, PAPR_TR, PAPR_BOTH]
+ option_labels: ['Off', Active Constellation Extension, Tone Reservation, Both
+ ACE and TR]
+ option_attributes:
+ val: [dtv.PAPR_OFF, dtv.PAPR_ACE, dtv.PAPR_TR, dtv.PAPR_BOTH]
+ hide: ${ version.hide_111 }
+- id: paprmode2
+ label: PAPR Mode
+ dtype: enum
+ options: [PAPR_OFF, PAPR_ACE, PAPR_TR, PAPR_BOTH]
+ option_labels: [P2 Only, Active Constellation Extension, Tone Reservation, Both
+ ACE and TR]
+ option_attributes:
+ val: [dtv.PAPR_OFF, dtv.PAPR_ACE, dtv.PAPR_TR, dtv.PAPR_BOTH]
+ hide: ${ version.hide_131 }
+- id: version
+ label: Specification Version
+ dtype: enum
+ options: [VERSION_111, VERSION_131]
+ option_labels: [1.1.1, 1.3.1]
+ option_attributes:
+ hide_111: ['', all]
+ hide_131: [all, '']
+ val: [dtv.VERSION_111, dtv.VERSION_131]
+- id: preamble1
+ label: Preamble
+ dtype: enum
+ options: [PREAMBLE_T2_SISO, PREAMBLE_T2_MISO]
+ option_labels: [T2 SISO, T2 MISO]
+ option_attributes:
+ val: [dtv.PREAMBLE_T2_SISO, dtv.PREAMBLE_T2_MISO]
+ hide: ${ version.hide_111 }
+- id: preamble2
+ label: Preamble
+ dtype: enum
+ options: [PREAMBLE_T2_SISO, PREAMBLE_T2_MISO, PREAMBLE_T2_LITE_SISO, PREAMBLE_T2_LITE_MISO]
+ option_labels: [T2 SISO, T2 MISO, T2-Lite SISO, T2-Lite MISO]
+ option_attributes:
+ val: [dtv.PREAMBLE_T2_SISO, dtv.PREAMBLE_T2_MISO, dtv.PREAMBLE_T2_LITE_SISO,
+ dtv.PREAMBLE_T2_LITE_MISO]
+ hide: ${ version.hide_131 }
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import dtv
+ make: "dtv.dvbt2_freqinterleaver_cc(${carriermode.val}, ${fftsize.val}, ${pilotpattern.val},\
+ \ ${guardinterval.val}, ${numdatasyms}, \n% if str(version) == 'VERSION_111':\n\
+ ${paprmode1.val}, \n% else:\n${paprmode2.val}, \n% endif\n${version.val},\
+ \ \n% if str(version) == 'VERSION_111':\n${preamble1.val}\n% else:\n${preamble2.val}\n\
+ % endif\n)"
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt2_freqinterleaver_cc.xml b/gr-dtv/grc/dtv_dvbt2_freqinterleaver_cc.xml
deleted file mode 100644
index bd7ba2bbfa..0000000000
--- a/gr-dtv/grc/dtv_dvbt2_freqinterleaver_cc.xml
+++ /dev/null
@@ -1,301 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T2 Frequency Interleaver
-###################################################
- -->
-<block>
- <name>Frequency Interleaver</name>
- <key>dtv_dvbt2_freqinterleaver_cc</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt2_freqinterleaver_cc($carriermode.val, $fftsize.val, $pilotpattern.val, $guardinterval.val, $numdatasyms, #slurp
-#if str($version) == 'VERSION_111'
-$paprmode1.val, #slurp
-#else
-$paprmode2.val, #slurp
-#end if
-$version.val, #slurp
-#if str($version) == 'VERSION_111'
-$preamble1.val#slurp
-#else
-$preamble2.val#slurp
-#end if
-)</make>
- <param>
- <name>Extended Carrier Mode</name>
- <key>carriermode</key>
- <type>enum</type>
- <option>
- <name>Normal</name>
- <key>CARRIERS_NORMAL</key>
- <opt>val:dtv.CARRIERS_NORMAL</opt>
- </option>
- <option>
- <name>Extended</name>
- <key>CARRIERS_EXTENDED</key>
- <opt>val:dtv.CARRIERS_EXTENDED</opt>
- </option>
- </param>
- <param>
- <name>FFT Size</name>
- <key>fftsize</key>
- <type>enum</type>
- <option>
- <name>1K</name>
- <key>FFTSIZE_1K</key>
- <opt>val:dtv.FFTSIZE_1K</opt>
- </option>
- <option>
- <name>2K</name>
- <key>FFTSIZE_2K</key>
- <opt>val:dtv.FFTSIZE_2K</opt>
- </option>
- <option>
- <name>4K</name>
- <key>FFTSIZE_4K</key>
- <opt>val:dtv.FFTSIZE_4K</opt>
- </option>
- <option>
- <name>8K</name>
- <key>FFTSIZE_8K</key>
- <opt>val:dtv.FFTSIZE_8K</opt>
- </option>
- <option>
- <name>8K DVB-T2 GI</name>
- <key>FFTSIZE_8K_T2GI</key>
- <opt>val:dtv.FFTSIZE_8K_T2GI</opt>
- </option>
- <option>
- <name>16K</name>
- <key>FFTSIZE_16K</key>
- <opt>val:dtv.FFTSIZE_16K</opt>
- </option>
- <option>
- <name>16K DVB-T2 GI</name>
- <key>FFTSIZE_16K_T2GI</key>
- <opt>val:dtv.FFTSIZE_16K_T2GI</opt>
- </option>
- <option>
- <name>32K</name>
- <key>FFTSIZE_32K</key>
- <opt>val:dtv.FFTSIZE_32K</opt>
- </option>
- <option>
- <name>32K DVB-T2 GI</name>
- <key>FFTSIZE_32K_T2GI</key>
- <opt>val:dtv.FFTSIZE_32K_T2GI</opt>
- </option>
- </param>
- <param>
- <name>Pilot Pattern</name>
- <key>pilotpattern</key>
- <type>enum</type>
- <option>
- <name>PP1</name>
- <key>PILOT_PP1</key>
- <opt>val:dtv.PILOT_PP1</opt>
- </option>
- <option>
- <name>PP2</name>
- <key>PILOT_PP2</key>
- <opt>val:dtv.PILOT_PP2</opt>
- </option>
- <option>
- <name>PP3</name>
- <key>PILOT_PP3</key>
- <opt>val:dtv.PILOT_PP3</opt>
- </option>
- <option>
- <name>PP4</name>
- <key>PILOT_PP4</key>
- <opt>val:dtv.PILOT_PP4</opt>
- </option>
- <option>
- <name>PP5</name>
- <key>PILOT_PP5</key>
- <opt>val:dtv.PILOT_PP5</opt>
- </option>
- <option>
- <name>PP6</name>
- <key>PILOT_PP6</key>
- <opt>val:dtv.PILOT_PP6</opt>
- </option>
- <option>
- <name>PP7</name>
- <key>PILOT_PP7</key>
- <opt>val:dtv.PILOT_PP7</opt>
- </option>
- <option>
- <name>PP8</name>
- <key>PILOT_PP8</key>
- <opt>val:dtv.PILOT_PP8</opt>
- </option>
- </param>
- <param>
- <name>Guard Interval</name>
- <key>guardinterval</key>
- <type>enum</type>
- <option>
- <name>1/32</name>
- <key>GI_1_32</key>
- <opt>val:dtv.GI_1_32</opt>
- </option>
- <option>
- <name>1/16</name>
- <key>GI_1_16</key>
- <opt>val:dtv.GI_1_16</opt>
- </option>
- <option>
- <name>1/8</name>
- <key>GI_1_8</key>
- <opt>val:dtv.GI_1_8</opt>
- </option>
- <option>
- <name>1/4</name>
- <key>GI_1_4</key>
- <opt>val:dtv.GI_1_4</opt>
- </option>
- <option>
- <name>1/128</name>
- <key>GI_1_128</key>
- <opt>val:dtv.GI_1_128</opt>
- </option>
- <option>
- <name>19/128</name>
- <key>GI_19_128</key>
- <opt>val:dtv.GI_19_128</opt>
- </option>
- <option>
- <name>19/256</name>
- <key>GI_19_256</key>
- <opt>val:dtv.GI_19_256</opt>
- </option>
- </param>
- <param>
- <name>Number of Data Symbols</name>
- <key>numdatasyms</key>
- <value>100</value>
- <type>int</type>
- </param>
- <param>
- <name>PAPR Mode</name>
- <key>paprmode1</key>
- <type>enum</type>
- <hide>$version.hide_111</hide>
- <option>
- <name>Off</name>
- <key>PAPR_OFF</key>
- <opt>val:dtv.PAPR_OFF</opt>
- </option>
- <option>
- <name>Active Constellation Extension</name>
- <key>PAPR_ACE</key>
- <opt>val:dtv.PAPR_ACE</opt>
- </option>
- <option>
- <name>Tone Reservation</name>
- <key>PAPR_TR</key>
- <opt>val:dtv.PAPR_TR</opt>
- </option>
- <option>
- <name>Both ACE and TR</name>
- <key>PAPR_BOTH</key>
- <opt>val:dtv.PAPR_BOTH</opt>
- </option>
- </param>
- <param>
- <name>PAPR Mode</name>
- <key>paprmode2</key>
- <type>enum</type>
- <hide>$version.hide_131</hide>
- <option>
- <name>P2 Only</name>
- <key>PAPR_OFF</key>
- <opt>val:dtv.PAPR_OFF</opt>
- </option>
- <option>
- <name>Active Constellation Extension</name>
- <key>PAPR_ACE</key>
- <opt>val:dtv.PAPR_ACE</opt>
- </option>
- <option>
- <name>Tone Reservation</name>
- <key>PAPR_TR</key>
- <opt>val:dtv.PAPR_TR</opt>
- </option>
- <option>
- <name>Both ACE and TR</name>
- <key>PAPR_BOTH</key>
- <opt>val:dtv.PAPR_BOTH</opt>
- </option>
- </param>
- <param>
- <name>Specification Version</name>
- <key>version</key>
- <type>enum</type>
- <option>
- <name>1.1.1</name>
- <key>VERSION_111</key>
- <opt>val:dtv.VERSION_111</opt>
- <opt>hide_111:</opt>
- <opt>hide_131:all</opt>
- </option>
- <option>
- <name>1.3.1</name>
- <key>VERSION_131</key>
- <opt>val:dtv.VERSION_131</opt>
- <opt>hide_111:all</opt>
- <opt>hide_131:</opt>
- </option>
- </param>
- <param>
- <name>Preamble</name>
- <key>preamble1</key>
- <type>enum</type>
- <hide>$version.hide_111</hide>
- <option>
- <name>T2 SISO</name>
- <key>PREAMBLE_T2_SISO</key>
- <opt>val:dtv.PREAMBLE_T2_SISO</opt>
- </option>
- <option>
- <name>T2 MISO</name>
- <key>PREAMBLE_T2_MISO</key>
- <opt>val:dtv.PREAMBLE_T2_MISO</opt>
- </option>
- </param>
- <param>
- <name>Preamble</name>
- <key>preamble2</key>
- <type>enum</type>
- <hide>$version.hide_131</hide>
- <option>
- <name>T2 SISO</name>
- <key>PREAMBLE_T2_SISO</key>
- <opt>val:dtv.PREAMBLE_T2_SISO</opt>
- </option>
- <option>
- <name>T2 MISO</name>
- <key>PREAMBLE_T2_MISO</key>
- <opt>val:dtv.PREAMBLE_T2_MISO</opt>
- </option>
- <option>
- <name>T2-Lite SISO</name>
- <key>PREAMBLE_T2_LITE_SISO</key>
- <opt>val:dtv.PREAMBLE_T2_LITE_SISO</opt>
- </option>
- <option>
- <name>T2-Lite MISO</name>
- <key>PREAMBLE_T2_LITE_MISO</key>
- <opt>val:dtv.PREAMBLE_T2_LITE_MISO</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt2_interleaver_bb.block.yml b/gr-dtv/grc/dtv_dvbt2_interleaver_bb.block.yml
new file mode 100644
index 0000000000..c7ca955996
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt2_interleaver_bb.block.yml
@@ -0,0 +1,40 @@
+id: dtv_dvbt2_interleaver_bb
+label: Bit Interleaver
+
+parameters:
+- id: framesize
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_SHORT]
+ option_labels: [Normal, Short]
+ option_attributes:
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_SHORT]
+- id: rate
+ label: Code rate
+ dtype: enum
+ options: [C1_3, C2_5, C1_2, C3_5, C2_3, C3_4, C4_5, C5_6]
+ option_labels: [1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6]
+ option_attributes:
+ val: [dtv.C1_3, dtv.C2_5, dtv.C1_2, dtv.C3_5, dtv.C2_3, dtv.C3_4, dtv.C4_5,
+ dtv.C5_6]
+- id: constellation
+ label: Constellation
+ dtype: enum
+ options: [MOD_QPSK, MOD_16QAM, MOD_64QAM, MOD_256QAM]
+ option_labels: [QPSK, 16QAM, 64QAM, 256QAM]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_16QAM, dtv.MOD_64QAM, dtv.MOD_256QAM]
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt2_interleaver_bb(${framesize.val}, ${rate.val}, ${constellation.val})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt2_interleaver_bb.xml b/gr-dtv/grc/dtv_dvbt2_interleaver_bb.xml
deleted file mode 100644
index 0e4e1eaf45..0000000000
--- a/gr-dtv/grc/dtv_dvbt2_interleaver_bb.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T2 Bit Interleaver
-###################################################
- -->
-<block>
- <name>Bit Interleaver</name>
- <key>dtv_dvbt2_interleaver_bb</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt2_interleaver_bb($framesize.val, $rate.val, $constellation.val)</make>
- <param>
- <name>FECFRAME size</name>
- <key>framesize</key>
- <type>enum</type>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>rate</key>
- <type>enum</type>
- <option>
- <name>1/3</name>
- <key>C1_3</key>
- <opt>val:dtv.C1_3</opt>
- </option>
- <option>
- <name>2/5</name>
- <key>C2_5</key>
- <opt>val:dtv.C2_5</opt>
- </option>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>3/5</name>
- <key>C3_5</key>
- <opt>val:dtv.C3_5</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>4/5</name>
- <key>C4_5</key>
- <opt>val:dtv.C4_5</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- </param>
- <param>
- <name>Constellation</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>MOD_QPSK</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>16QAM</name>
- <key>MOD_16QAM</key>
- <opt>val:dtv.MOD_16QAM</opt>
- </option>
- <option>
- <name>64QAM</name>
- <key>MOD_64QAM</key>
- <opt>val:dtv.MOD_64QAM</opt>
- </option>
- <option>
- <name>256QAM</name>
- <key>MOD_256QAM</key>
- <opt>val:dtv.MOD_256QAM</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt2_miso_cc.block.yml b/gr-dtv/grc/dtv_dvbt2_miso_cc.block.yml
new file mode 100644
index 0000000000..81550c9c1f
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt2_miso_cc.block.yml
@@ -0,0 +1,86 @@
+id: dtv_dvbt2_miso_cc
+label: MISO Processing
+
+parameters:
+- id: carriermode
+ label: Extended Carrier Mode
+ dtype: enum
+ options: [CARRIERS_NORMAL, CARRIERS_EXTENDED]
+ option_labels: [Normal, Extended]
+ option_attributes:
+ val: [dtv.CARRIERS_NORMAL, dtv.CARRIERS_EXTENDED]
+- id: fftsize
+ label: FFT Size
+ dtype: enum
+ options: [FFTSIZE_1K, FFTSIZE_2K, FFTSIZE_4K, FFTSIZE_8K, FFTSIZE_8K_T2GI, FFTSIZE_16K,
+ FFTSIZE_16K_T2GI, FFTSIZE_32K, FFTSIZE_32K_T2GI]
+ option_labels: [1K, 2K, 4K, 8K, 8K DVB-T2 GI, 16K, 16K DVB-T2 GI, 32K, 32K DVB-T2
+ GI]
+ option_attributes:
+ val: [dtv.FFTSIZE_1K, dtv.FFTSIZE_2K, dtv.FFTSIZE_4K, dtv.FFTSIZE_8K, dtv.FFTSIZE_8K_T2GI,
+ dtv.FFTSIZE_16K, dtv.FFTSIZE_16K_T2GI, dtv.FFTSIZE_32K, dtv.FFTSIZE_32K_T2GI]
+- id: pilotpattern
+ label: Pilot Pattern
+ dtype: enum
+ options: [PILOT_PP1, PILOT_PP2, PILOT_PP3, PILOT_PP4, PILOT_PP5, PILOT_PP6, PILOT_PP7,
+ PILOT_PP8]
+ option_labels: [PP1, PP2, PP3, PP4, PP5, PP6, PP7, PP8]
+ option_attributes:
+ val: [dtv.PILOT_PP1, dtv.PILOT_PP2, dtv.PILOT_PP3, dtv.PILOT_PP4, dtv.PILOT_PP5,
+ dtv.PILOT_PP6, dtv.PILOT_PP7, dtv.PILOT_PP8]
+- id: guardinterval
+ label: Guard Interval
+ dtype: enum
+ options: [GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_1_128, GI_19_128, GI_19_256]
+ option_labels: [1/32, 1/16, 1/8, 1/4, 1/128, 19/128, 19/256]
+ option_attributes:
+ val: [dtv.GI_1_32, dtv.GI_1_16, dtv.GI_1_8, dtv.GI_1_4, dtv.GI_1_128, dtv.GI_19_128,
+ dtv.GI_19_256]
+- id: numdatasyms
+ label: Number of Data Symbols
+ dtype: int
+ default: '100'
+- id: paprmode1
+ label: PAPR Mode
+ dtype: enum
+ options: [PAPR_OFF, PAPR_ACE, PAPR_TR, PAPR_BOTH]
+ option_labels: ['Off', Active Constellation Extension, Tone Reservation, Both
+ ACE and TR]
+ option_attributes:
+ val: [dtv.PAPR_OFF, dtv.PAPR_ACE, dtv.PAPR_TR, dtv.PAPR_BOTH]
+ hide: ${ version.hide_111 }
+- id: paprmode2
+ label: PAPR Mode
+ dtype: enum
+ options: [PAPR_OFF, PAPR_ACE, PAPR_TR, PAPR_BOTH]
+ option_labels: [P2 Only, Active Constellation Extension, Tone Reservation, Both
+ ACE and TR]
+ option_attributes:
+ val: [dtv.PAPR_OFF, dtv.PAPR_ACE, dtv.PAPR_TR, dtv.PAPR_BOTH]
+ hide: ${ version.hide_131 }
+- id: version
+ label: Specification Version
+ dtype: enum
+ options: [VERSION_111, VERSION_131]
+ option_labels: [1.1.1, 1.3.1]
+ option_attributes:
+ hide_111: ['', all]
+ hide_131: [all, '']
+ val: [dtv.VERSION_111, dtv.VERSION_131]
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+ multiplicity: '2'
+
+templates:
+ imports: from gnuradio import dtv
+ make: "dtv.dvbt2_miso_cc(${carriermode.val}, ${fftsize.val}, ${pilotpattern.val},\
+ \ ${guardinterval.val}, ${numdatasyms}, \n% if str(version) == 'VERSION_111':\n\
+ ${paprmode1.val}, \n% else:\n${paprmode2.val}, \n% endif\n)"
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt2_miso_cc.xml b/gr-dtv/grc/dtv_dvbt2_miso_cc.xml
deleted file mode 100644
index 1ef4d2afc1..0000000000
--- a/gr-dtv/grc/dtv_dvbt2_miso_cc.xml
+++ /dev/null
@@ -1,254 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T2 MISO Processing
-###################################################
- -->
-<block>
- <name>MISO Processing</name>
- <key>dtv_dvbt2_miso_cc</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt2_miso_cc($carriermode.val, $fftsize.val, $pilotpattern.val, $guardinterval.val, $numdatasyms, #slurp
-#if str($version) == 'VERSION_111'
-$paprmode1.val, #slurp
-#else
-$paprmode2.val, #slurp
-#end if
-)</make>
- <param>
- <name>Extended Carrier Mode</name>
- <key>carriermode</key>
- <type>enum</type>
- <option>
- <name>Normal</name>
- <key>CARRIERS_NORMAL</key>
- <opt>val:dtv.CARRIERS_NORMAL</opt>
- </option>
- <option>
- <name>Extended</name>
- <key>CARRIERS_EXTENDED</key>
- <opt>val:dtv.CARRIERS_EXTENDED</opt>
- </option>
- </param>
- <param>
- <name>FFT Size</name>
- <key>fftsize</key>
- <type>enum</type>
- <option>
- <name>1K</name>
- <key>FFTSIZE_1K</key>
- <opt>val:dtv.FFTSIZE_1K</opt>
- </option>
- <option>
- <name>2K</name>
- <key>FFTSIZE_2K</key>
- <opt>val:dtv.FFTSIZE_2K</opt>
- </option>
- <option>
- <name>4K</name>
- <key>FFTSIZE_4K</key>
- <opt>val:dtv.FFTSIZE_4K</opt>
- </option>
- <option>
- <name>8K</name>
- <key>FFTSIZE_8K</key>
- <opt>val:dtv.FFTSIZE_8K</opt>
- </option>
- <option>
- <name>8K DVB-T2 GI</name>
- <key>FFTSIZE_8K_T2GI</key>
- <opt>val:dtv.FFTSIZE_8K_T2GI</opt>
- </option>
- <option>
- <name>16K</name>
- <key>FFTSIZE_16K</key>
- <opt>val:dtv.FFTSIZE_16K</opt>
- </option>
- <option>
- <name>16K DVB-T2 GI</name>
- <key>FFTSIZE_16K_T2GI</key>
- <opt>val:dtv.FFTSIZE_16K_T2GI</opt>
- </option>
- <option>
- <name>32K</name>
- <key>FFTSIZE_32K</key>
- <opt>val:dtv.FFTSIZE_32K</opt>
- </option>
- <option>
- <name>32K DVB-T2 GI</name>
- <key>FFTSIZE_32K_T2GI</key>
- <opt>val:dtv.FFTSIZE_32K_T2GI</opt>
- </option>
- </param>
- <param>
- <name>Pilot Pattern</name>
- <key>pilotpattern</key>
- <type>enum</type>
- <option>
- <name>PP1</name>
- <key>PILOT_PP1</key>
- <opt>val:dtv.PILOT_PP1</opt>
- </option>
- <option>
- <name>PP2</name>
- <key>PILOT_PP2</key>
- <opt>val:dtv.PILOT_PP2</opt>
- </option>
- <option>
- <name>PP3</name>
- <key>PILOT_PP3</key>
- <opt>val:dtv.PILOT_PP3</opt>
- </option>
- <option>
- <name>PP4</name>
- <key>PILOT_PP4</key>
- <opt>val:dtv.PILOT_PP4</opt>
- </option>
- <option>
- <name>PP5</name>
- <key>PILOT_PP5</key>
- <opt>val:dtv.PILOT_PP5</opt>
- </option>
- <option>
- <name>PP6</name>
- <key>PILOT_PP6</key>
- <opt>val:dtv.PILOT_PP6</opt>
- </option>
- <option>
- <name>PP7</name>
- <key>PILOT_PP7</key>
- <opt>val:dtv.PILOT_PP7</opt>
- </option>
- <option>
- <name>PP8</name>
- <key>PILOT_PP8</key>
- <opt>val:dtv.PILOT_PP8</opt>
- </option>
- </param>
- <param>
- <name>Guard Interval</name>
- <key>guardinterval</key>
- <type>enum</type>
- <option>
- <name>1/32</name>
- <key>GI_1_32</key>
- <opt>val:dtv.GI_1_32</opt>
- </option>
- <option>
- <name>1/16</name>
- <key>GI_1_16</key>
- <opt>val:dtv.GI_1_16</opt>
- </option>
- <option>
- <name>1/8</name>
- <key>GI_1_8</key>
- <opt>val:dtv.GI_1_8</opt>
- </option>
- <option>
- <name>1/4</name>
- <key>GI_1_4</key>
- <opt>val:dtv.GI_1_4</opt>
- </option>
- <option>
- <name>1/128</name>
- <key>GI_1_128</key>
- <opt>val:dtv.GI_1_128</opt>
- </option>
- <option>
- <name>19/128</name>
- <key>GI_19_128</key>
- <opt>val:dtv.GI_19_128</opt>
- </option>
- <option>
- <name>19/256</name>
- <key>GI_19_256</key>
- <opt>val:dtv.GI_19_256</opt>
- </option>
- </param>
- <param>
- <name>Number of Data Symbols</name>
- <key>numdatasyms</key>
- <value>100</value>
- <type>int</type>
- </param>
- <param>
- <name>PAPR Mode</name>
- <key>paprmode1</key>
- <type>enum</type>
- <hide>$version.hide_111</hide>
- <option>
- <name>Off</name>
- <key>PAPR_OFF</key>
- <opt>val:dtv.PAPR_OFF</opt>
- </option>
- <option>
- <name>Active Constellation Extension</name>
- <key>PAPR_ACE</key>
- <opt>val:dtv.PAPR_ACE</opt>
- </option>
- <option>
- <name>Tone Reservation</name>
- <key>PAPR_TR</key>
- <opt>val:dtv.PAPR_TR</opt>
- </option>
- <option>
- <name>Both ACE and TR</name>
- <key>PAPR_BOTH</key>
- <opt>val:dtv.PAPR_BOTH</opt>
- </option>
- </param>
- <param>
- <name>PAPR Mode</name>
- <key>paprmode2</key>
- <type>enum</type>
- <hide>$version.hide_131</hide>
- <option>
- <name>P2 Only</name>
- <key>PAPR_OFF</key>
- <opt>val:dtv.PAPR_OFF</opt>
- </option>
- <option>
- <name>Active Constellation Extension</name>
- <key>PAPR_ACE</key>
- <opt>val:dtv.PAPR_ACE</opt>
- </option>
- <option>
- <name>Tone Reservation</name>
- <key>PAPR_TR</key>
- <opt>val:dtv.PAPR_TR</opt>
- </option>
- <option>
- <name>Both ACE and TR</name>
- <key>PAPR_BOTH</key>
- <opt>val:dtv.PAPR_BOTH</opt>
- </option>
- </param>
- <param>
- <name>Specification Version</name>
- <key>version</key>
- <type>enum</type>
- <option>
- <name>1.1.1</name>
- <key>VERSION_111</key>
- <opt>val:dtv.VERSION_111</opt>
- <opt>hide_111:</opt>
- <opt>hide_131:all</opt>
- </option>
- <option>
- <name>1.3.1</name>
- <key>VERSION_131</key>
- <opt>val:dtv.VERSION_131</opt>
- <opt>hide_111:all</opt>
- <opt>hide_131:</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <nports>2</nports>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt2_modulator_bc.block.yml b/gr-dtv/grc/dtv_dvbt2_modulator_bc.block.yml
new file mode 100644
index 0000000000..5b1a9dd831
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt2_modulator_bc.block.yml
@@ -0,0 +1,39 @@
+id: dtv_dvbt2_modulator_bc
+label: DVB-T2 Modulator
+
+parameters:
+- id: framesize
+ label: FECFRAME size
+ dtype: enum
+ options: [FECFRAME_NORMAL, FECFRAME_SHORT]
+ option_labels: [Normal, Short]
+ option_attributes:
+ val: [dtv.FECFRAME_NORMAL, dtv.FECFRAME_SHORT]
+- id: constellation
+ label: Constellation
+ dtype: enum
+ options: [MOD_QPSK, MOD_16QAM, MOD_64QAM, MOD_256QAM]
+ option_labels: [QPSK, 16QAM, 64QAM, 256QAM]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_16QAM, dtv.MOD_64QAM, dtv.MOD_256QAM]
+- id: rotation
+ label: Constellation rotation
+ dtype: enum
+ options: [ROTATION_OFF, ROTATION_ON]
+ option_labels: ['Off', 'On']
+ option_attributes:
+ val: [dtv.ROTATION_OFF, dtv.ROTATION_ON]
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt2_modulator_bc(${framesize.val}, ${constellation.val}, ${rotation.val})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt2_modulator_bc.xml b/gr-dtv/grc/dtv_dvbt2_modulator_bc.xml
deleted file mode 100644
index 6bf17b831d..0000000000
--- a/gr-dtv/grc/dtv_dvbt2_modulator_bc.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T2 QPSK/QAM Modulator
-###################################################
- -->
-<block>
- <name>DVB-T2 Modulator</name>
- <key>dtv_dvbt2_modulator_bc</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt2_modulator_bc($framesize.val, $constellation.val, $rotation.val)</make>
- <param>
- <name>FECFRAME size</name>
- <key>framesize</key>
- <type>enum</type>
- <option>
- <name>Normal</name>
- <key>FECFRAME_NORMAL</key>
- <opt>val:dtv.FECFRAME_NORMAL</opt>
- </option>
- <option>
- <name>Short</name>
- <key>FECFRAME_SHORT</key>
- <opt>val:dtv.FECFRAME_SHORT</opt>
- </option>
- </param>
- <param>
- <name>Constellation</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>MOD_QPSK</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>16QAM</name>
- <key>MOD_16QAM</key>
- <opt>val:dtv.MOD_16QAM</opt>
- </option>
- <option>
- <name>64QAM</name>
- <key>MOD_64QAM</key>
- <opt>val:dtv.MOD_64QAM</opt>
- </option>
- <option>
- <name>256QAM</name>
- <key>MOD_256QAM</key>
- <opt>val:dtv.MOD_256QAM</opt>
- </option>
- </param>
- <param>
- <name>Constellation rotation</name>
- <key>rotation</key>
- <type>enum</type>
- <option>
- <name>Off</name>
- <key>ROTATION_OFF</key>
- <opt>val:dtv.ROTATION_OFF</opt>
- </option>
- <option>
- <name>On</name>
- <key>ROTATION_ON</key>
- <opt>val:dtv.ROTATION_ON</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt2_p1insertion_cc.block.yml b/gr-dtv/grc/dtv_dvbt2_p1insertion_cc.block.yml
new file mode 100644
index 0000000000..ad9ab8519d
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt2_p1insertion_cc.block.yml
@@ -0,0 +1,106 @@
+id: dtv_dvbt2_p1insertion_cc
+label: P1 Symbol Insertion
+
+parameters:
+- id: carriermode
+ label: Extended Carrier Mode
+ dtype: enum
+ options: [CARRIERS_NORMAL, CARRIERS_EXTENDED]
+ option_labels: [Normal, Extended]
+ option_attributes:
+ val: [dtv.CARRIERS_NORMAL, dtv.CARRIERS_EXTENDED]
+- id: fftsize1
+ label: FFT Size
+ dtype: enum
+ options: [FFTSIZE_1K, FFTSIZE_2K, FFTSIZE_4K, FFTSIZE_8K, FFTSIZE_8K_T2GI, FFTSIZE_16K,
+ FFTSIZE_32K, FFTSIZE_32K_T2GI]
+ option_labels: [1K, 2K, 4K, 8K, 8K DVB-T2 GI, 16K, 32K, 32K DVB-T2 GI]
+ option_attributes:
+ val: [dtv.FFTSIZE_1K, dtv.FFTSIZE_2K, dtv.FFTSIZE_4K, dtv.FFTSIZE_8K, dtv.FFTSIZE_8K_T2GI,
+ dtv.FFTSIZE_16K, dtv.FFTSIZE_32K, dtv.FFTSIZE_32K_T2GI]
+ hide: ${ (preamble1.hide_base if str(version) == 'VERSION_111' else preamble2.hide_base)
+ }
+- id: fftsize2
+ label: FFT Size
+ dtype: enum
+ options: [FFTSIZE_2K, FFTSIZE_4K, FFTSIZE_8K, FFTSIZE_8K_T2GI, FFTSIZE_16K, FFTSIZE_16K_T2GI]
+ option_labels: [2K, 4K, 8K, 8K DVB-T2 GI, 16K, 16K DVB-T2 GI]
+ option_attributes:
+ val: [dtv.FFTSIZE_2K, dtv.FFTSIZE_4K, dtv.FFTSIZE_8K, dtv.FFTSIZE_8K_T2GI,
+ dtv.FFTSIZE_16K, dtv.FFTSIZE_16K_T2GI]
+ hide: ${ (preamble1.hide_lite if str(version) == 'VERSION_111' else preamble2.hide_lite)
+ }
+- id: guardinterval
+ label: Guard Interval
+ dtype: enum
+ options: [GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_1_128, GI_19_128, GI_19_256]
+ option_labels: [1/32, 1/16, 1/8, 1/4, 1/128, 19/128, 19/256]
+ option_attributes:
+ val: [dtv.GI_1_32, dtv.GI_1_16, dtv.GI_1_8, dtv.GI_1_4, dtv.GI_1_128, dtv.GI_19_128,
+ dtv.GI_19_256]
+- id: numdatasyms
+ label: Number of Data Symbols
+ dtype: int
+ default: '100'
+- id: version
+ label: Specification Version
+ dtype: enum
+ options: [VERSION_111, VERSION_131]
+ option_labels: [1.1.1, 1.3.1]
+ option_attributes:
+ hide_111: ['', all]
+ hide_131: [all, '']
+ val: [dtv.VERSION_111, dtv.VERSION_131]
+- id: preamble1
+ label: Preamble
+ dtype: enum
+ options: [PREAMBLE_T2_SISO, PREAMBLE_T2_MISO]
+ option_labels: [T2 SISO, T2 MISO]
+ option_attributes:
+ hide_base: ['', '']
+ hide_lite: [all, all]
+ val: [dtv.PREAMBLE_T2_SISO, dtv.PREAMBLE_T2_MISO]
+ hide: ${ version.hide_111 }
+- id: preamble2
+ label: Preamble
+ dtype: enum
+ options: [PREAMBLE_T2_SISO, PREAMBLE_T2_MISO, PREAMBLE_T2_LITE_SISO, PREAMBLE_T2_LITE_MISO]
+ option_labels: [T2 SISO, T2 MISO, T2-Lite SISO, T2-Lite MISO]
+ option_attributes:
+ hide_base: ['', '', all, all]
+ hide_lite: [all, all, '', '']
+ val: [dtv.PREAMBLE_T2_SISO, dtv.PREAMBLE_T2_MISO, dtv.PREAMBLE_T2_LITE_SISO,
+ dtv.PREAMBLE_T2_LITE_MISO]
+ hide: ${ version.hide_131 }
+- id: showlevels
+ label: Show Peak IQ Levels
+ dtype: enum
+ options: [SHOWLEVELS_OFF, SHOWLEVELS_ON]
+ option_labels: ['Off', 'On']
+ option_attributes:
+ hide_vclip: [all, '']
+ val: [dtv.SHOWLEVELS_OFF, dtv.SHOWLEVELS_ON]
+- id: vclip
+ label: Vclip
+ dtype: float
+ default: '3.3'
+ hide: ${ showlevels.hide_vclip }
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import dtv
+ make: "dtv.dvbt2_p1insertion_cc(${carriermode.val}, \n% if str(version) == 'VERSION_111':\n\
+ ${fftsize1.val}, \n% else:\n% if str(preamble2) == 'PREAMBLE_T2_SISO' or str(preamble2)\
+ \ == 'PREAMBLE_T2_MISO':\n${fftsize1.val}, \n% else:\n${fftsize2.val}, \n\
+ % endif\n% endif\n${guardinterval.val}, ${numdatasyms}, \n% if str(version)\
+ \ == 'VERSION_111':\n${preamble1.val}, \n% else:\n${preamble2.val}, \n% endif\n\
+ ${showlevels.val}, ${vclip})"
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt2_p1insertion_cc.xml b/gr-dtv/grc/dtv_dvbt2_p1insertion_cc.xml
deleted file mode 100644
index c73cf72ae0..0000000000
--- a/gr-dtv/grc/dtv_dvbt2_p1insertion_cc.xml
+++ /dev/null
@@ -1,276 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T2 P1 Symbol Insertion
-###################################################
- -->
-<block>
- <name>P1 Symbol Insertion</name>
- <key>dtv_dvbt2_p1insertion_cc</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt2_p1insertion_cc($carriermode.val, #slurp
-#if str($version) == 'VERSION_111'
-$fftsize1.val, #slurp
-#else
-#if str($preamble2) == 'PREAMBLE_T2_SISO' or str($preamble2) == 'PREAMBLE_T2_MISO'
-$fftsize1.val, #slurp
-#else
-$fftsize2.val, #slurp
-#end if
-#end if
-$guardinterval.val, $numdatasyms, #slurp
-#if str($version) == 'VERSION_111'
-$preamble1.val, #slurp
-#else
-$preamble2.val, #slurp
-#end if
-$showlevels.val, $vclip)</make>
- <param>
- <name>Extended Carrier Mode</name>
- <key>carriermode</key>
- <type>enum</type>
- <option>
- <name>Normal</name>
- <key>CARRIERS_NORMAL</key>
- <opt>val:dtv.CARRIERS_NORMAL</opt>
- </option>
- <option>
- <name>Extended</name>
- <key>CARRIERS_EXTENDED</key>
- <opt>val:dtv.CARRIERS_EXTENDED</opt>
- </option>
- </param>
- <param>
- <name>FFT Size</name>
- <key>fftsize1</key>
- <type>enum</type>
- <hide>#if str($version) == 'VERSION_111' then $preamble1.hide_base else $preamble2.hide_base</hide>
- <option>
- <name>1K</name>
- <key>FFTSIZE_1K</key>
- <opt>val:dtv.FFTSIZE_1K</opt>
- </option>
- <option>
- <name>2K</name>
- <key>FFTSIZE_2K</key>
- <opt>val:dtv.FFTSIZE_2K</opt>
- </option>
- <option>
- <name>4K</name>
- <key>FFTSIZE_4K</key>
- <opt>val:dtv.FFTSIZE_4K</opt>
- </option>
- <option>
- <name>8K</name>
- <key>FFTSIZE_8K</key>
- <opt>val:dtv.FFTSIZE_8K</opt>
- </option>
- <option>
- <name>8K DVB-T2 GI</name>
- <key>FFTSIZE_8K_T2GI</key>
- <opt>val:dtv.FFTSIZE_8K_T2GI</opt>
- </option>
- <option>
- <name>16K</name>
- <key>FFTSIZE_16K</key>
- <opt>val:dtv.FFTSIZE_16K</opt>
- </option>
- <option>
- <name>32K</name>
- <key>FFTSIZE_32K</key>
- <opt>val:dtv.FFTSIZE_32K</opt>
- </option>
- <option>
- <name>32K DVB-T2 GI</name>
- <key>FFTSIZE_32K_T2GI</key>
- <opt>val:dtv.FFTSIZE_32K_T2GI</opt>
- </option>
- </param>
- <param>
- <name>FFT Size</name>
- <key>fftsize2</key>
- <type>enum</type>
- <hide>#if str($version) == 'VERSION_111' then $preamble1.hide_lite else $preamble2.hide_lite</hide>
- <option>
- <name>2K</name>
- <key>FFTSIZE_2K</key>
- <opt>val:dtv.FFTSIZE_2K</opt>
- </option>
- <option>
- <name>4K</name>
- <key>FFTSIZE_4K</key>
- <opt>val:dtv.FFTSIZE_4K</opt>
- </option>
- <option>
- <name>8K</name>
- <key>FFTSIZE_8K</key>
- <opt>val:dtv.FFTSIZE_8K</opt>
- </option>
- <option>
- <name>8K DVB-T2 GI</name>
- <key>FFTSIZE_8K_T2GI</key>
- <opt>val:dtv.FFTSIZE_8K_T2GI</opt>
- </option>
- <option>
- <name>16K</name>
- <key>FFTSIZE_16K</key>
- <opt>val:dtv.FFTSIZE_16K</opt>
- </option>
- <option>
- <name>16K DVB-T2 GI</name>
- <key>FFTSIZE_16K_T2GI</key>
- <opt>val:dtv.FFTSIZE_16K_T2GI</opt>
- </option>
- </param>
- <param>
- <name>Guard Interval</name>
- <key>guardinterval</key>
- <type>enum</type>
- <option>
- <name>1/32</name>
- <key>GI_1_32</key>
- <opt>val:dtv.GI_1_32</opt>
- </option>
- <option>
- <name>1/16</name>
- <key>GI_1_16</key>
- <opt>val:dtv.GI_1_16</opt>
- </option>
- <option>
- <name>1/8</name>
- <key>GI_1_8</key>
- <opt>val:dtv.GI_1_8</opt>
- </option>
- <option>
- <name>1/4</name>
- <key>GI_1_4</key>
- <opt>val:dtv.GI_1_4</opt>
- </option>
- <option>
- <name>1/128</name>
- <key>GI_1_128</key>
- <opt>val:dtv.GI_1_128</opt>
- </option>
- <option>
- <name>19/128</name>
- <key>GI_19_128</key>
- <opt>val:dtv.GI_19_128</opt>
- </option>
- <option>
- <name>19/256</name>
- <key>GI_19_256</key>
- <opt>val:dtv.GI_19_256</opt>
- </option>
- </param>
- <param>
- <name>Number of Data Symbols</name>
- <key>numdatasyms</key>
- <value>100</value>
- <type>int</type>
- </param>
- <param>
- <name>Specification Version</name>
- <key>version</key>
- <type>enum</type>
- <option>
- <name>1.1.1</name>
- <key>VERSION_111</key>
- <opt>val:dtv.VERSION_111</opt>
- <opt>hide_111:</opt>
- <opt>hide_131:all</opt>
- </option>
- <option>
- <name>1.3.1</name>
- <key>VERSION_131</key>
- <opt>val:dtv.VERSION_131</opt>
- <opt>hide_111:all</opt>
- <opt>hide_131:</opt>
- </option>
- </param>
- <param>
- <name>Preamble</name>
- <key>preamble1</key>
- <type>enum</type>
- <hide>$version.hide_111</hide>
- <option>
- <name>T2 SISO</name>
- <key>PREAMBLE_T2_SISO</key>
- <opt>val:dtv.PREAMBLE_T2_SISO</opt>
- <opt>hide_lite:all</opt>
- <opt>hide_base:</opt>
- </option>
- <option>
- <name>T2 MISO</name>
- <key>PREAMBLE_T2_MISO</key>
- <opt>val:dtv.PREAMBLE_T2_MISO</opt>
- <opt>hide_lite:all</opt>
- <opt>hide_base:</opt>
- </option>
- </param>
- <param>
- <name>Preamble</name>
- <key>preamble2</key>
- <type>enum</type>
- <hide>$version.hide_131</hide>
- <option>
- <name>T2 SISO</name>
- <key>PREAMBLE_T2_SISO</key>
- <opt>val:dtv.PREAMBLE_T2_SISO</opt>
- <opt>hide_lite:all</opt>
- <opt>hide_base:</opt>
- </option>
- <option>
- <name>T2 MISO</name>
- <key>PREAMBLE_T2_MISO</key>
- <opt>val:dtv.PREAMBLE_T2_MISO</opt>
- <opt>hide_lite:all</opt>
- <opt>hide_base:</opt>
- </option>
- <option>
- <name>T2-Lite SISO</name>
- <key>PREAMBLE_T2_LITE_SISO</key>
- <opt>val:dtv.PREAMBLE_T2_LITE_SISO</opt>
- <opt>hide_lite:</opt>
- <opt>hide_base:all</opt>
- </option>
- <option>
- <name>T2-Lite MISO</name>
- <key>PREAMBLE_T2_LITE_MISO</key>
- <opt>val:dtv.PREAMBLE_T2_LITE_MISO</opt>
- <opt>hide_lite:</opt>
- <opt>hide_base:all</opt>
- </option>
- </param>
- <param>
- <name>Show Peak IQ Levels</name>
- <key>showlevels</key>
- <type>enum</type>
- <option>
- <name>Off</name>
- <key>SHOWLEVELS_OFF</key>
- <opt>val:dtv.SHOWLEVELS_OFF</opt>
- <opt>hide_vclip:all</opt>
- </option>
- <option>
- <name>On</name>
- <key>SHOWLEVELS_ON</key>
- <opt>val:dtv.SHOWLEVELS_ON</opt>
- <opt>hide_vclip:</opt>
- </option>
- </param>
- <param>
- <name>Vclip</name>
- <key>vclip</key>
- <value>3.3</value>
- <type>float</type>
- <hide>$showlevels.hide_vclip</hide>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt2_paprtr_cc.block.yml b/gr-dtv/grc/dtv_dvbt2_paprtr_cc.block.yml
new file mode 100644
index 0000000000..0e1d6c285d
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt2_paprtr_cc.block.yml
@@ -0,0 +1,105 @@
+id: dtv_dvbt2_paprtr_cc
+label: Tone Reservation PAPR
+
+parameters:
+- id: carriermode
+ label: Extended Carrier Mode
+ dtype: enum
+ options: [CARRIERS_NORMAL, CARRIERS_EXTENDED]
+ option_labels: [Normal, Extended]
+ option_attributes:
+ val: [dtv.CARRIERS_NORMAL, dtv.CARRIERS_EXTENDED]
+- id: fftsize
+ label: FFT Size
+ dtype: enum
+ options: [FFTSIZE_1K, FFTSIZE_2K, FFTSIZE_4K, FFTSIZE_8K, FFTSIZE_8K_T2GI, FFTSIZE_16K,
+ FFTSIZE_16K_T2GI, FFTSIZE_32K, FFTSIZE_32K_T2GI]
+ option_labels: [1K, 2K, 4K, 8K, 8K DVB-T2 GI, 16K, 16K DVB-T2 GI, 32K, 32K DVB-T2
+ GI]
+ option_attributes:
+ val: [dtv.FFTSIZE_1K, dtv.FFTSIZE_2K, dtv.FFTSIZE_4K, dtv.FFTSIZE_8K, dtv.FFTSIZE_8K_T2GI,
+ dtv.FFTSIZE_16K, dtv.FFTSIZE_16K_T2GI, dtv.FFTSIZE_32K, dtv.FFTSIZE_32K_T2GI]
+ vlength: ['1024', '2048', '4096', '8192', '8192', '16384', '16384', '32768',
+ '32768']
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: pilotpattern
+ label: Pilot Pattern
+ dtype: enum
+ options: [PILOT_PP1, PILOT_PP2, PILOT_PP3, PILOT_PP4, PILOT_PP5, PILOT_PP6, PILOT_PP7,
+ PILOT_PP8]
+ option_labels: [PP1, PP2, PP3, PP4, PP5, PP6, PP7, PP8]
+ option_attributes:
+ val: [dtv.PILOT_PP1, dtv.PILOT_PP2, dtv.PILOT_PP3, dtv.PILOT_PP4, dtv.PILOT_PP5,
+ dtv.PILOT_PP6, dtv.PILOT_PP7, dtv.PILOT_PP8]
+- id: guardinterval
+ label: Guard Interval
+ dtype: enum
+ options: [GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_1_128, GI_19_128, GI_19_256]
+ option_labels: [1/32, 1/16, 1/8, 1/4, 1/128, 19/128, 19/256]
+ option_attributes:
+ val: [dtv.GI_1_32, dtv.GI_1_16, dtv.GI_1_8, dtv.GI_1_4, dtv.GI_1_128, dtv.GI_19_128,
+ dtv.GI_19_256]
+- id: numdatasyms
+ label: Number of Data Symbols
+ dtype: int
+ default: '100'
+- id: paprmode1
+ label: PAPR Mode
+ dtype: enum
+ options: [PAPR_OFF, PAPR_ACE, PAPR_TR, PAPR_BOTH]
+ option_labels: ['Off', Active Constellation Extension, Tone Reservation, Both
+ ACE and TR]
+ option_attributes:
+ hide_vclip: [all, all, '', '']
+ val: [dtv.PAPR_OFF, dtv.PAPR_ACE, dtv.PAPR_TR, dtv.PAPR_BOTH]
+ hide: ${ version.hide_111 }
+- id: paprmode2
+ label: PAPR Mode
+ dtype: enum
+ options: [PAPR_OFF, PAPR_ACE, PAPR_TR, PAPR_BOTH]
+ option_labels: [P2 Only, Active Constellation Extension, Tone Reservation, Both
+ ACE and TR]
+ option_attributes:
+ hide_vclip: [all, all, '', '']
+ val: [dtv.PAPR_OFF, dtv.PAPR_ACE, dtv.PAPR_TR, dtv.PAPR_BOTH]
+ hide: ${ version.hide_131 }
+- id: version
+ label: Specification Version
+ dtype: enum
+ options: [VERSION_111, VERSION_131]
+ option_labels: [1.1.1, 1.3.1]
+ option_attributes:
+ hide_111: ['', all]
+ hide_131: [all, '']
+ val: [dtv.VERSION_111, dtv.VERSION_131]
+- id: vclip
+ label: Vclip
+ dtype: float
+ default: '3.3'
+ hide: ${ (paprmode1.hide_vclip if str(version) == 'VERSION_111' else paprmode2.hide_vclip)
+ }
+- id: iterations
+ label: Iterations
+ dtype: int
+ default: '10'
+ hide: ${ (paprmode1.hide_vclip if str(version) == 'VERSION_111' else paprmode2.hide_vclip)
+ }
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ fftsize.vlength }
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ fftsize.vlength }
+
+templates:
+ imports: from gnuradio import dtv
+ make: "dtv.dvbt2_paprtr_cc(${carriermode.val}, ${fftsize.val}, ${pilotpattern.val},\
+ \ ${guardinterval.val}, ${numdatasyms}, \n% if str(version) == 'VERSION_111':\n\
+ ${paprmode1.val}, \n% else:\n${paprmode2.val}, \n% endif\n${version.val},\
+ \ ${vclip}, ${iterations}, ${fftsize.vlength})"
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt2_paprtr_cc.xml b/gr-dtv/grc/dtv_dvbt2_paprtr_cc.xml
deleted file mode 100644
index 4fa37ef5b8..0000000000
--- a/gr-dtv/grc/dtv_dvbt2_paprtr_cc.xml
+++ /dev/null
@@ -1,286 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T2 Tone Reservation PAPR
-###################################################
- -->
-<block>
- <name>Tone Reservation PAPR</name>
- <key>dtv_dvbt2_paprtr_cc</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt2_paprtr_cc($carriermode.val, $fftsize.val, $pilotpattern.val, $guardinterval.val, $numdatasyms, #slurp
-#if str($version) == 'VERSION_111'
-$paprmode1.val, #slurp
-#else
-$paprmode2.val, #slurp
-#end if
-$version.val, $vclip, $iterations, $fftsize.vlength)</make>
- <param>
- <name>Extended Carrier Mode</name>
- <key>carriermode</key>
- <type>enum</type>
- <option>
- <name>Normal</name>
- <key>CARRIERS_NORMAL</key>
- <opt>val:dtv.CARRIERS_NORMAL</opt>
- </option>
- <option>
- <name>Extended</name>
- <key>CARRIERS_EXTENDED</key>
- <opt>val:dtv.CARRIERS_EXTENDED</opt>
- </option>
- </param>
- <param>
- <name>FFT Size</name>
- <key>fftsize</key>
- <type>enum</type>
- <option>
- <name>1K</name>
- <key>FFTSIZE_1K</key>
- <opt>val:dtv.FFTSIZE_1K</opt>
- <opt>vlength:1024</opt>
- </option>
- <option>
- <name>2K</name>
- <key>FFTSIZE_2K</key>
- <opt>val:dtv.FFTSIZE_2K</opt>
- <opt>vlength:2048</opt>
- </option>
- <option>
- <name>4K</name>
- <key>FFTSIZE_4K</key>
- <opt>val:dtv.FFTSIZE_4K</opt>
- <opt>vlength:4096</opt>
- </option>
- <option>
- <name>8K</name>
- <key>FFTSIZE_8K</key>
- <opt>val:dtv.FFTSIZE_8K</opt>
- <opt>vlength:8192</opt>
- </option>
- <option>
- <name>8K DVB-T2 GI</name>
- <key>FFTSIZE_8K_T2GI</key>
- <opt>val:dtv.FFTSIZE_8K_T2GI</opt>
- <opt>vlength:8192</opt>
- </option>
- <option>
- <name>16K</name>
- <key>FFTSIZE_16K</key>
- <opt>val:dtv.FFTSIZE_16K</opt>
- <opt>vlength:16384</opt>
- </option>
- <option>
- <name>16K DVB-T2 GI</name>
- <key>FFTSIZE_16K_T2GI</key>
- <opt>val:dtv.FFTSIZE_16K_T2GI</opt>
- <opt>vlength:16384</opt>
- </option>
- <option>
- <name>32K</name>
- <key>FFTSIZE_32K</key>
- <opt>val:dtv.FFTSIZE_32K</opt>
- <opt>vlength:32768</opt>
- </option>
- <option>
- <name>32K DVB-T2 GI</name>
- <key>FFTSIZE_32K_T2GI</key>
- <opt>val:dtv.FFTSIZE_32K_T2GI</opt>
- <opt>vlength:32768</opt>
- </option>
- </param>
- <param>
- <name>Pilot Pattern</name>
- <key>pilotpattern</key>
- <type>enum</type>
- <option>
- <name>PP1</name>
- <key>PILOT_PP1</key>
- <opt>val:dtv.PILOT_PP1</opt>
- </option>
- <option>
- <name>PP2</name>
- <key>PILOT_PP2</key>
- <opt>val:dtv.PILOT_PP2</opt>
- </option>
- <option>
- <name>PP3</name>
- <key>PILOT_PP3</key>
- <opt>val:dtv.PILOT_PP3</opt>
- </option>
- <option>
- <name>PP4</name>
- <key>PILOT_PP4</key>
- <opt>val:dtv.PILOT_PP4</opt>
- </option>
- <option>
- <name>PP5</name>
- <key>PILOT_PP5</key>
- <opt>val:dtv.PILOT_PP5</opt>
- </option>
- <option>
- <name>PP6</name>
- <key>PILOT_PP6</key>
- <opt>val:dtv.PILOT_PP6</opt>
- </option>
- <option>
- <name>PP7</name>
- <key>PILOT_PP7</key>
- <opt>val:dtv.PILOT_PP7</opt>
- </option>
- <option>
- <name>PP8</name>
- <key>PILOT_PP8</key>
- <opt>val:dtv.PILOT_PP8</opt>
- </option>
- </param>
- <param>
- <name>Guard Interval</name>
- <key>guardinterval</key>
- <type>enum</type>
- <option>
- <name>1/32</name>
- <key>GI_1_32</key>
- <opt>val:dtv.GI_1_32</opt>
- </option>
- <option>
- <name>1/16</name>
- <key>GI_1_16</key>
- <opt>val:dtv.GI_1_16</opt>
- </option>
- <option>
- <name>1/8</name>
- <key>GI_1_8</key>
- <opt>val:dtv.GI_1_8</opt>
- </option>
- <option>
- <name>1/4</name>
- <key>GI_1_4</key>
- <opt>val:dtv.GI_1_4</opt>
- </option>
- <option>
- <name>1/128</name>
- <key>GI_1_128</key>
- <opt>val:dtv.GI_1_128</opt>
- </option>
- <option>
- <name>19/128</name>
- <key>GI_19_128</key>
- <opt>val:dtv.GI_19_128</opt>
- </option>
- <option>
- <name>19/256</name>
- <key>GI_19_256</key>
- <opt>val:dtv.GI_19_256</opt>
- </option>
- </param>
- <param>
- <name>Number of Data Symbols</name>
- <key>numdatasyms</key>
- <value>100</value>
- <type>int</type>
- </param>
- <param>
- <name>PAPR Mode</name>
- <key>paprmode1</key>
- <type>enum</type>
- <hide>$version.hide_111</hide>
- <option>
- <name>Off</name>
- <key>PAPR_OFF</key>
- <opt>val:dtv.PAPR_OFF</opt>
- <opt>hide_vclip:all</opt>
- </option>
- <option>
- <name>Active Constellation Extension</name>
- <key>PAPR_ACE</key>
- <opt>val:dtv.PAPR_ACE</opt>
- <opt>hide_vclip:all</opt>
- </option>
- <option>
- <name>Tone Reservation</name>
- <key>PAPR_TR</key>
- <opt>val:dtv.PAPR_TR</opt>
- <opt>hide_vclip:</opt>
- </option>
- <option>
- <name>Both ACE and TR</name>
- <key>PAPR_BOTH</key>
- <opt>val:dtv.PAPR_BOTH</opt>
- <opt>hide_vclip:</opt>
- </option>
- </param>
- <param>
- <name>PAPR Mode</name>
- <key>paprmode2</key>
- <type>enum</type>
- <hide>$version.hide_131</hide>
- <option>
- <name>P2 Only</name>
- <key>PAPR_OFF</key>
- <opt>val:dtv.PAPR_OFF</opt>
- <opt>hide_vclip:all</opt>
- </option>
- <option>
- <name>Active Constellation Extension</name>
- <key>PAPR_ACE</key>
- <opt>val:dtv.PAPR_ACE</opt>
- <opt>hide_vclip:all</opt>
- </option>
- <option>
- <name>Tone Reservation</name>
- <key>PAPR_TR</key>
- <opt>val:dtv.PAPR_TR</opt>
- <opt>hide_vclip:</opt>
- </option>
- <option>
- <name>Both ACE and TR</name>
- <key>PAPR_BOTH</key>
- <opt>val:dtv.PAPR_BOTH</opt>
- <opt>hide_vclip:</opt>
- </option>
- </param>
- <param>
- <name>Specification Version</name>
- <key>version</key>
- <type>enum</type>
- <option>
- <name>1.1.1</name>
- <key>VERSION_111</key>
- <opt>val:dtv.VERSION_111</opt>
- <opt>hide_111:</opt>
- <opt>hide_131:all</opt>
- </option>
- <option>
- <name>1.3.1</name>
- <key>VERSION_131</key>
- <opt>val:dtv.VERSION_131</opt>
- <opt>hide_111:all</opt>
- <opt>hide_131:</opt>
- </option>
- </param>
- <param>
- <name>Vclip</name>
- <key>vclip</key>
- <value>3.3</value>
- <type>float</type>
- <hide>#if str($version) == 'VERSION_111' then $paprmode1.hide_vclip else $paprmode2.hide_vclip</hide>
- </param>
- <param>
- <name>Iterations</name>
- <key>iterations</key>
- <value>10</value>
- <type>int</type>
- <hide>#if str($version) == 'VERSION_111' then $paprmode1.hide_vclip else $paprmode2.hide_vclip</hide>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$fftsize.vlength</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>$fftsize.vlength</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt2_pilotgenerator_cc.block.yml b/gr-dtv/grc/dtv_dvbt2_pilotgenerator_cc.block.yml
new file mode 100644
index 0000000000..083b86056c
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt2_pilotgenerator_cc.block.yml
@@ -0,0 +1,137 @@
+id: dtv_dvbt2_pilotgenerator_cc
+label: Pilot Generator and IFFT
+
+parameters:
+- id: carriermode
+ label: Extended Carrier Mode
+ dtype: enum
+ options: [CARRIERS_NORMAL, CARRIERS_EXTENDED]
+ option_labels: [Normal, Extended]
+ option_attributes:
+ val: [dtv.CARRIERS_NORMAL, dtv.CARRIERS_EXTENDED]
+- id: fftsize
+ label: FFT Size
+ dtype: enum
+ options: [FFTSIZE_1K, FFTSIZE_2K, FFTSIZE_4K, FFTSIZE_8K, FFTSIZE_8K_T2GI, FFTSIZE_16K,
+ FFTSIZE_16K_T2GI, FFTSIZE_32K, FFTSIZE_32K_T2GI]
+ option_labels: [1K, 2K, 4K, 8K, 8K DVB-T2 GI, 16K, 16K DVB-T2 GI, 32K, 32K DVB-T2
+ GI]
+ option_attributes:
+ val: [dtv.FFTSIZE_1K, dtv.FFTSIZE_2K, dtv.FFTSIZE_4K, dtv.FFTSIZE_8K, dtv.FFTSIZE_8K_T2GI,
+ dtv.FFTSIZE_16K, dtv.FFTSIZE_16K_T2GI, dtv.FFTSIZE_32K, dtv.FFTSIZE_32K_T2GI]
+ vlength: ['1024', '2048', '4096', '8192', '8192', '16384', '16384', '32768',
+ '32768']
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: pilotpattern
+ label: Pilot Pattern
+ dtype: enum
+ options: [PILOT_PP1, PILOT_PP2, PILOT_PP3, PILOT_PP4, PILOT_PP5, PILOT_PP6, PILOT_PP7,
+ PILOT_PP8]
+ option_labels: [PP1, PP2, PP3, PP4, PP5, PP6, PP7, PP8]
+ option_attributes:
+ val: [dtv.PILOT_PP1, dtv.PILOT_PP2, dtv.PILOT_PP3, dtv.PILOT_PP4, dtv.PILOT_PP5,
+ dtv.PILOT_PP6, dtv.PILOT_PP7, dtv.PILOT_PP8]
+- id: guardinterval
+ label: Guard Interval
+ dtype: enum
+ options: [GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_1_128, GI_19_128, GI_19_256]
+ option_labels: [1/32, 1/16, 1/8, 1/4, 1/128, 19/128, 19/256]
+ option_attributes:
+ val: [dtv.GI_1_32, dtv.GI_1_16, dtv.GI_1_8, dtv.GI_1_4, dtv.GI_1_128, dtv.GI_19_128,
+ dtv.GI_19_256]
+- id: numdatasyms
+ label: Number of Data Symbols
+ dtype: int
+ default: '100'
+- id: paprmode1
+ label: PAPR Mode
+ dtype: enum
+ options: [PAPR_OFF, PAPR_ACE, PAPR_TR, PAPR_BOTH]
+ option_labels: ['Off', Active Constellation Extension, Tone Reservation, Both
+ ACE and TR]
+ option_attributes:
+ val: [dtv.PAPR_OFF, dtv.PAPR_ACE, dtv.PAPR_TR, dtv.PAPR_BOTH]
+ hide: ${ version.hide_111 }
+- id: paprmode2
+ label: PAPR Mode
+ dtype: enum
+ options: [PAPR_OFF, PAPR_ACE, PAPR_TR, PAPR_BOTH]
+ option_labels: [P2 Only, Active Constellation Extension, Tone Reservation, Both
+ ACE and TR]
+ option_attributes:
+ val: [dtv.PAPR_OFF, dtv.PAPR_ACE, dtv.PAPR_TR, dtv.PAPR_BOTH]
+ hide: ${ version.hide_131 }
+- id: version
+ label: Specification Version
+ dtype: enum
+ options: [VERSION_111, VERSION_131]
+ option_labels: [1.1.1, 1.3.1]
+ option_attributes:
+ hide_111: ['', all]
+ hide_131: [all, '']
+ val: [dtv.VERSION_111, dtv.VERSION_131]
+- id: preamble1
+ label: Preamble
+ dtype: enum
+ options: [PREAMBLE_T2_SISO, PREAMBLE_T2_MISO]
+ option_labels: [T2 SISO, T2 MISO]
+ option_attributes:
+ hide_miso: [all, '']
+ val: [dtv.PREAMBLE_T2_SISO, dtv.PREAMBLE_T2_MISO]
+ hide: ${ version.hide_111 }
+- id: preamble2
+ label: Preamble
+ dtype: enum
+ options: [PREAMBLE_T2_SISO, PREAMBLE_T2_MISO, PREAMBLE_T2_LITE_SISO, PREAMBLE_T2_LITE_MISO]
+ option_labels: [T2 SISO, T2 MISO, T2-Lite SISO, T2-Lite MISO]
+ option_attributes:
+ hide_miso: [all, '', all, '']
+ val: [dtv.PREAMBLE_T2_SISO, dtv.PREAMBLE_T2_MISO, dtv.PREAMBLE_T2_LITE_SISO,
+ dtv.PREAMBLE_T2_LITE_MISO]
+ hide: ${ version.hide_131 }
+- id: misogroup
+ label: MISO Group
+ dtype: enum
+ options: [MISO_TX1, MISO_TX2]
+ option_labels: [TX1, TX2]
+ option_attributes:
+ val: [dtv.MISO_TX1, dtv.MISO_TX2]
+ hide: ${ (preamble1.hide_miso if str(version) == 'VERSION_111' else preamble2.hide_miso)
+ }
+- id: equalization
+ label: Sin(x)/x Equalization
+ dtype: enum
+ options: [EQUALIZATION_OFF, EQUALIZATION_ON]
+ option_labels: ['Off', 'On']
+ option_attributes:
+ hide_bandwidth: [all, '']
+ val: [dtv.EQUALIZATION_OFF, dtv.EQUALIZATION_ON]
+- id: bandwidth
+ label: Bandwidth
+ dtype: enum
+ options: [BANDWIDTH_1_7_MHZ, BANDWIDTH_5_0_MHZ, BANDWIDTH_6_0_MHZ, BANDWIDTH_7_0_MHZ,
+ BANDWIDTH_8_0_MHZ, BANDWIDTH_10_0_MHZ]
+ option_labels: [1.7 MHz, 5 MHz, 6 MHz, 7 MHz, 8 MHz, 10 MHz]
+ option_attributes:
+ val: [dtv.BANDWIDTH_1_7_MHZ, dtv.BANDWIDTH_5_0_MHZ, dtv.BANDWIDTH_6_0_MHZ,
+ dtv.BANDWIDTH_7_0_MHZ, dtv.BANDWIDTH_8_0_MHZ, dtv.BANDWIDTH_10_0_MHZ]
+ hide: ${ equalization.hide_bandwidth }
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ fftsize.vlength }
+
+templates:
+ imports: from gnuradio import dtv
+ make: "dtv.dvbt2_pilotgenerator_cc(${carriermode.val}, ${fftsize.val}, ${pilotpattern.val},\
+ \ ${guardinterval.val}, ${numdatasyms}, \n% if str(version) == 'VERSION_111':\n\
+ ${paprmode1.val}, \n% else:\n${paprmode2.val}, \n% endif\n${version.val},\
+ \ \n% if str(version) == 'VERSION_111':\n${preamble1.val}, \n% else:\n${preamble2.val},\
+ \ \n% endif\n${misogroup.val}, ${equalization.val}, ${bandwidth.val}, ${fftsize.vlength})"
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt2_pilotgenerator_cc.xml b/gr-dtv/grc/dtv_dvbt2_pilotgenerator_cc.xml
deleted file mode 100644
index fdcac6489d..0000000000
--- a/gr-dtv/grc/dtv_dvbt2_pilotgenerator_cc.xml
+++ /dev/null
@@ -1,386 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T2 Pilot Generator
-###################################################
- -->
-<block>
- <name>Pilot Generator and IFFT</name>
- <key>dtv_dvbt2_pilotgenerator_cc</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt2_pilotgenerator_cc($carriermode.val, $fftsize.val, $pilotpattern.val, $guardinterval.val, $numdatasyms, #slurp
-#if str($version) == 'VERSION_111'
-$paprmode1.val, #slurp
-#else
-$paprmode2.val, #slurp
-#end if
-$version.val, #slurp
-#if str($version) == 'VERSION_111'
-$preamble1.val, #slurp
-#else
-$preamble2.val, #slurp
-#end if
-$misogroup.val, $equalization.val, $bandwidth.val, $fftsize.vlength)</make>
- <param>
- <name>Extended Carrier Mode</name>
- <key>carriermode</key>
- <type>enum</type>
- <option>
- <name>Normal</name>
- <key>CARRIERS_NORMAL</key>
- <opt>val:dtv.CARRIERS_NORMAL</opt>
- </option>
- <option>
- <name>Extended</name>
- <key>CARRIERS_EXTENDED</key>
- <opt>val:dtv.CARRIERS_EXTENDED</opt>
- </option>
- </param>
- <param>
- <name>FFT Size</name>
- <key>fftsize</key>
- <type>enum</type>
- <option>
- <name>1K</name>
- <key>FFTSIZE_1K</key>
- <opt>val:dtv.FFTSIZE_1K</opt>
- <opt>vlength:1024</opt>
- </option>
- <option>
- <name>2K</name>
- <key>FFTSIZE_2K</key>
- <opt>val:dtv.FFTSIZE_2K</opt>
- <opt>vlength:2048</opt>
- </option>
- <option>
- <name>4K</name>
- <key>FFTSIZE_4K</key>
- <opt>val:dtv.FFTSIZE_4K</opt>
- <opt>vlength:4096</opt>
- </option>
- <option>
- <name>8K</name>
- <key>FFTSIZE_8K</key>
- <opt>val:dtv.FFTSIZE_8K</opt>
- <opt>vlength:8192</opt>
- </option>
- <option>
- <name>8K DVB-T2 GI</name>
- <key>FFTSIZE_8K_T2GI</key>
- <opt>val:dtv.FFTSIZE_8K_T2GI</opt>
- <opt>vlength:8192</opt>
- </option>
- <option>
- <name>16K</name>
- <key>FFTSIZE_16K</key>
- <opt>val:dtv.FFTSIZE_16K</opt>
- <opt>vlength:16384</opt>
- </option>
- <option>
- <name>16K DVB-T2 GI</name>
- <key>FFTSIZE_16K_T2GI</key>
- <opt>val:dtv.FFTSIZE_16K_T2GI</opt>
- <opt>vlength:16384</opt>
- </option>
- <option>
- <name>32K</name>
- <key>FFTSIZE_32K</key>
- <opt>val:dtv.FFTSIZE_32K</opt>
- <opt>vlength:32768</opt>
- </option>
- <option>
- <name>32K DVB-T2 GI</name>
- <key>FFTSIZE_32K_T2GI</key>
- <opt>val:dtv.FFTSIZE_32K_T2GI</opt>
- <opt>vlength:32768</opt>
- </option>
- </param>
- <param>
- <name>Pilot Pattern</name>
- <key>pilotpattern</key>
- <type>enum</type>
- <option>
- <name>PP1</name>
- <key>PILOT_PP1</key>
- <opt>val:dtv.PILOT_PP1</opt>
- </option>
- <option>
- <name>PP2</name>
- <key>PILOT_PP2</key>
- <opt>val:dtv.PILOT_PP2</opt>
- </option>
- <option>
- <name>PP3</name>
- <key>PILOT_PP3</key>
- <opt>val:dtv.PILOT_PP3</opt>
- </option>
- <option>
- <name>PP4</name>
- <key>PILOT_PP4</key>
- <opt>val:dtv.PILOT_PP4</opt>
- </option>
- <option>
- <name>PP5</name>
- <key>PILOT_PP5</key>
- <opt>val:dtv.PILOT_PP5</opt>
- </option>
- <option>
- <name>PP6</name>
- <key>PILOT_PP6</key>
- <opt>val:dtv.PILOT_PP6</opt>
- </option>
- <option>
- <name>PP7</name>
- <key>PILOT_PP7</key>
- <opt>val:dtv.PILOT_PP7</opt>
- </option>
- <option>
- <name>PP8</name>
- <key>PILOT_PP8</key>
- <opt>val:dtv.PILOT_PP8</opt>
- </option>
- </param>
- <param>
- <name>Guard Interval</name>
- <key>guardinterval</key>
- <type>enum</type>
- <option>
- <name>1/32</name>
- <key>GI_1_32</key>
- <opt>val:dtv.GI_1_32</opt>
- </option>
- <option>
- <name>1/16</name>
- <key>GI_1_16</key>
- <opt>val:dtv.GI_1_16</opt>
- </option>
- <option>
- <name>1/8</name>
- <key>GI_1_8</key>
- <opt>val:dtv.GI_1_8</opt>
- </option>
- <option>
- <name>1/4</name>
- <key>GI_1_4</key>
- <opt>val:dtv.GI_1_4</opt>
- </option>
- <option>
- <name>1/128</name>
- <key>GI_1_128</key>
- <opt>val:dtv.GI_1_128</opt>
- </option>
- <option>
- <name>19/128</name>
- <key>GI_19_128</key>
- <opt>val:dtv.GI_19_128</opt>
- </option>
- <option>
- <name>19/256</name>
- <key>GI_19_256</key>
- <opt>val:dtv.GI_19_256</opt>
- </option>
- </param>
- <param>
- <name>Number of Data Symbols</name>
- <key>numdatasyms</key>
- <value>100</value>
- <type>int</type>
- </param>
- <param>
- <name>PAPR Mode</name>
- <key>paprmode1</key>
- <type>enum</type>
- <hide>$version.hide_111</hide>
- <option>
- <name>Off</name>
- <key>PAPR_OFF</key>
- <opt>val:dtv.PAPR_OFF</opt>
- </option>
- <option>
- <name>Active Constellation Extension</name>
- <key>PAPR_ACE</key>
- <opt>val:dtv.PAPR_ACE</opt>
- </option>
- <option>
- <name>Tone Reservation</name>
- <key>PAPR_TR</key>
- <opt>val:dtv.PAPR_TR</opt>
- </option>
- <option>
- <name>Both ACE and TR</name>
- <key>PAPR_BOTH</key>
- <opt>val:dtv.PAPR_BOTH</opt>
- </option>
- </param>
- <param>
- <name>PAPR Mode</name>
- <key>paprmode2</key>
- <type>enum</type>
- <hide>$version.hide_131</hide>
- <option>
- <name>P2 Only</name>
- <key>PAPR_OFF</key>
- <opt>val:dtv.PAPR_OFF</opt>
- </option>
- <option>
- <name>Active Constellation Extension</name>
- <key>PAPR_ACE</key>
- <opt>val:dtv.PAPR_ACE</opt>
- </option>
- <option>
- <name>Tone Reservation</name>
- <key>PAPR_TR</key>
- <opt>val:dtv.PAPR_TR</opt>
- </option>
- <option>
- <name>Both ACE and TR</name>
- <key>PAPR_BOTH</key>
- <opt>val:dtv.PAPR_BOTH</opt>
- </option>
- </param>
- <param>
- <name>Specification Version</name>
- <key>version</key>
- <type>enum</type>
- <option>
- <name>1.1.1</name>
- <key>VERSION_111</key>
- <opt>val:dtv.VERSION_111</opt>
- <opt>hide_111:</opt>
- <opt>hide_131:all</opt>
- </option>
- <option>
- <name>1.3.1</name>
- <key>VERSION_131</key>
- <opt>val:dtv.VERSION_131</opt>
- <opt>hide_111:all</opt>
- <opt>hide_131:</opt>
- </option>
- </param>
- <param>
- <name>Preamble</name>
- <key>preamble1</key>
- <type>enum</type>
- <hide>$version.hide_111</hide>
- <option>
- <name>T2 SISO</name>
- <key>PREAMBLE_T2_SISO</key>
- <opt>val:dtv.PREAMBLE_T2_SISO</opt>
- <opt>hide_miso:all</opt>
- </option>
- <option>
- <name>T2 MISO</name>
- <key>PREAMBLE_T2_MISO</key>
- <opt>val:dtv.PREAMBLE_T2_MISO</opt>
- <opt>hide_miso:</opt>
- </option>
- </param>
- <param>
- <name>Preamble</name>
- <key>preamble2</key>
- <type>enum</type>
- <hide>$version.hide_131</hide>
- <option>
- <name>T2 SISO</name>
- <key>PREAMBLE_T2_SISO</key>
- <opt>val:dtv.PREAMBLE_T2_SISO</opt>
- <opt>hide_miso:all</opt>
- </option>
- <option>
- <name>T2 MISO</name>
- <key>PREAMBLE_T2_MISO</key>
- <opt>val:dtv.PREAMBLE_T2_MISO</opt>
- <opt>hide_miso:</opt>
- </option>
- <option>
- <name>T2-Lite SISO</name>
- <key>PREAMBLE_T2_LITE_SISO</key>
- <opt>val:dtv.PREAMBLE_T2_LITE_SISO</opt>
- <opt>hide_miso:all</opt>
- </option>
- <option>
- <name>T2-Lite MISO</name>
- <key>PREAMBLE_T2_LITE_MISO</key>
- <opt>val:dtv.PREAMBLE_T2_LITE_MISO</opt>
- <opt>hide_miso:</opt>
- </option>
- </param>
- <param>
- <name>MISO Group</name>
- <key>misogroup</key>
- <type>enum</type>
- <hide>#if str($version) == 'VERSION_111' then $preamble1.hide_miso else $preamble2.hide_miso</hide>
- <option>
- <name>TX1</name>
- <key>MISO_TX1</key>
- <opt>val:dtv.MISO_TX1</opt>
- </option>
- <option>
- <name>TX2</name>
- <key>MISO_TX2</key>
- <opt>val:dtv.MISO_TX2</opt>
- </option>
- </param>
- <param>
- <name>Sin(x)/x Equalization</name>
- <key>equalization</key>
- <type>enum</type>
- <option>
- <name>Off</name>
- <key>EQUALIZATION_OFF</key>
- <opt>val:dtv.EQUALIZATION_OFF</opt>
- <opt>hide_bandwidth:all</opt>
- </option>
- <option>
- <name>On</name>
- <key>EQUALIZATION_ON</key>
- <opt>val:dtv.EQUALIZATION_ON</opt>
- <opt>hide_bandwidth:</opt>
- </option>
- </param>
- <param>
- <name>Bandwidth</name>
- <key>bandwidth</key>
- <type>enum</type>
- <hide>$equalization.hide_bandwidth</hide>
- <option>
- <name>1.7 MHz</name>
- <key>BANDWIDTH_1_7_MHZ</key>
- <opt>val:dtv.BANDWIDTH_1_7_MHZ</opt>
- </option>
- <option>
- <name>5 MHz</name>
- <key>BANDWIDTH_5_0_MHZ</key>
- <opt>val:dtv.BANDWIDTH_5_0_MHZ</opt>
- </option>
- <option>
- <name>6 MHz</name>
- <key>BANDWIDTH_6_0_MHZ</key>
- <opt>val:dtv.BANDWIDTH_6_0_MHZ</opt>
- </option>
- <option>
- <name>7 MHz</name>
- <key>BANDWIDTH_7_0_MHZ</key>
- <opt>val:dtv.BANDWIDTH_7_0_MHZ</opt>
- </option>
- <option>
- <name>8 MHz</name>
- <key>BANDWIDTH_8_0_MHZ</key>
- <opt>val:dtv.BANDWIDTH_8_0_MHZ</opt>
- </option>
- <option>
- <name>10 MHz</name>
- <key>BANDWIDTH_10_0_MHZ</key>
- <opt>val:dtv.BANDWIDTH_10_0_MHZ</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>$fftsize.vlength</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_bit_inner_deinterleaver.block.yml b/gr-dtv/grc/dtv_dvbt_bit_inner_deinterleaver.block.yml
new file mode 100644
index 0000000000..0431f30881
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_bit_inner_deinterleaver.block.yml
@@ -0,0 +1,47 @@
+id: dtv_dvbt_bit_inner_deinterleaver
+label: Bit Inner Deinterleaver
+
+parameters:
+- id: constellation
+ label: Constellation Type
+ dtype: enum
+ options: [qpsk, 16qam, 64qam]
+ option_labels: [QPSK, 16QAM, 64QAM]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_16QAM, dtv.MOD_64QAM]
+- id: hierarchy
+ label: Hierarchy Type
+ dtype: enum
+ options: [nh, alpha1, alpha2, alpha4]
+ option_labels: [Non Hierarchical, Alpha 1, Alpha 2, Alpha 4]
+ option_attributes:
+ num_streams: ['1', '2', '2', '2']
+ val: [dtv.NH, dtv.ALPHA1, dtv.ALPHA2, dtv.ALPHA4]
+ hide: part
+- id: transmission_mode
+ label: Transmission Mode
+ dtype: enum
+ options: [T2k, T8k]
+ option_labels: [2K, 8K]
+ option_attributes:
+ payload_length: ['1512', '6048']
+ val: [dtv.T2k, dtv.T8k]
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ transmission_mode.payload_length }
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ transmission_mode.payload_length }
+ multiplicity: ${ hierarchy.num_streams }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_bit_inner_deinterleaver(${transmission_mode.payload_length}, ${constellation.val},
+ ${hierarchy.val}, ${transmission_mode.val})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_bit_inner_deinterleaver.xml b/gr-dtv/grc/dtv_dvbt_bit_inner_deinterleaver.xml
deleted file mode 100644
index ff338d2118..0000000000
--- a/gr-dtv/grc/dtv_dvbt_bit_inner_deinterleaver.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T Bit Inner Deinterleaver
-###################################################
- -->
-<block>
- <name>Bit Inner Deinterleaver</name>
- <key>dtv_dvbt_bit_inner_deinterleaver</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_bit_inner_deinterleaver($transmission_mode.payload_length, $constellation.val, $hierarchy.val, $transmission_mode.val)</make>
- <param>
- <name>Constellation Type</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>qpsk</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>16QAM</name>
- <key>16qam</key>
- <opt>val:dtv.MOD_16QAM</opt>
- </option>
- <option>
- <name>64QAM</name>
- <key>64qam</key>
- <opt>val:dtv.MOD_64QAM</opt>
- </option>
- </param>
- <param>
- <name>Hierarchy Type</name>
- <key>hierarchy</key>
- <type>enum</type>
- <option>
- <name>Non Hierarchical</name>
- <key>nh</key>
- <opt>val:dtv.NH</opt>
- <opt>num_streams:1</opt>
- </option>
- <option>
- <name>Alpha 1</name>
- <key>alpha1</key>
- <opt>val:dtv.ALPHA1</opt>
- <opt>num_streams:2</opt>
- </option>
- <option>
- <name>Alpha 2</name>
- <key>alpha2</key>
- <opt>val:dtv.ALPHA2</opt>
- <opt>num_streams:2</opt>
- </option>
- <option>
- <name>Alpha 4</name>
- <key>alpha4</key>
- <opt>val:dtv.ALPHA4</opt>
- <opt>num_streams:2</opt>
- </option>
- </param>
- <param>
- <name>Transmission Mode</name>
- <key>transmission_mode</key>
- <type>enum</type>
- <option>
- <name>2K</name>
- <key>T2k</key>
- <opt>val:dtv.T2k</opt>
- <opt>payload_length:1512</opt>
- </option>
- <option>
- <name>8K</name>
- <key>T8k</key>
- <opt>val:dtv.T8k</opt>
- <opt>payload_length:6048</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>$transmission_mode.payload_length</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>$transmission_mode.payload_length</vlen>
- <nports>$hierarchy.num_streams</nports>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_bit_inner_interleaver.block.yml b/gr-dtv/grc/dtv_dvbt_bit_inner_interleaver.block.yml
new file mode 100644
index 0000000000..1d9b40473f
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_bit_inner_interleaver.block.yml
@@ -0,0 +1,47 @@
+id: dtv_dvbt_bit_inner_interleaver
+label: Bit Inner Interleaver
+
+parameters:
+- id: constellation
+ label: Constellation Type
+ dtype: enum
+ options: [qpsk, 16qam, 64qam]
+ option_labels: [QPSK, 16QAM, 64QAM]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_16QAM, dtv.MOD_64QAM]
+- id: hierarchy
+ label: Hierarchy Type
+ dtype: enum
+ options: [nh, alpha1, alpha2, alpha4]
+ option_labels: [Non Hierarchical, Alpha 1, Alpha 2, Alpha 4]
+ option_attributes:
+ num_streams: ['1', '2', '2', '2']
+ val: [dtv.NH, dtv.ALPHA1, dtv.ALPHA2, dtv.ALPHA4]
+ hide: part
+- id: transmission_mode
+ label: Transmission Mode
+ dtype: enum
+ options: [T2k, T8k]
+ option_labels: [2K, 8K]
+ option_attributes:
+ payload_length: ['1512', '6048']
+ val: [dtv.T2k, dtv.T8k]
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ transmission_mode.payload_length }
+ multiplicity: ${ hierarchy.num_streams }
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ transmission_mode.payload_length }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_bit_inner_interleaver(${transmission_mode.payload_length}, ${constellation.val},
+ ${hierarchy.val}, ${transmission_mode.val})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_bit_inner_interleaver.xml b/gr-dtv/grc/dtv_dvbt_bit_inner_interleaver.xml
deleted file mode 100644
index 31f1c2cfa5..0000000000
--- a/gr-dtv/grc/dtv_dvbt_bit_inner_interleaver.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T Bit Inner Interleaver
-###################################################
- -->
-<block>
- <name>Bit Inner Interleaver</name>
- <key>dtv_dvbt_bit_inner_interleaver</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_bit_inner_interleaver($transmission_mode.payload_length, $constellation.val, $hierarchy.val, $transmission_mode.val)</make>
- <param>
- <name>Constellation Type</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>qpsk</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>16QAM</name>
- <key>16qam</key>
- <opt>val:dtv.MOD_16QAM</opt>
- </option>
- <option>
- <name>64QAM</name>
- <key>64qam</key>
- <opt>val:dtv.MOD_64QAM</opt>
- </option>
- </param>
- <param>
- <name>Hierarchy Type</name>
- <key>hierarchy</key>
- <type>enum</type>
- <option>
- <name>Non Hierarchical</name>
- <key>nh</key>
- <opt>val:dtv.NH</opt>
- <opt>num_streams:1</opt>
- </option>
- <option>
- <name>Alpha 1</name>
- <key>alpha1</key>
- <opt>val:dtv.ALPHA1</opt>
- <opt>num_streams:2</opt>
- </option>
- <option>
- <name>Alpha 2</name>
- <key>alpha2</key>
- <opt>val:dtv.ALPHA2</opt>
- <opt>num_streams:2</opt>
- </option>
- <option>
- <name>Alpha 4</name>
- <key>alpha4</key>
- <opt>val:dtv.ALPHA4</opt>
- <opt>num_streams:2</opt>
- </option>
- </param>
- <param>
- <name>Transmission Mode</name>
- <key>transmission_mode</key>
- <type>enum</type>
- <option>
- <name>2K</name>
- <key>T2k</key>
- <opt>val:dtv.T2k</opt>
- <opt>payload_length:1512</opt>
- </option>
- <option>
- <name>8K</name>
- <key>T8k</key>
- <opt>val:dtv.T8k</opt>
- <opt>payload_length:6048</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>$transmission_mode.payload_length</vlen>
- <nports>$hierarchy.num_streams</nports>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>$transmission_mode.payload_length</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_convolutional_deinterleaver.block.yml b/gr-dtv/grc/dtv_dvbt_convolutional_deinterleaver.block.yml
new file mode 100644
index 0000000000..b4b5708bcc
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_convolutional_deinterleaver.block.yml
@@ -0,0 +1,39 @@
+id: dtv_dvbt_convolutional_deinterleaver
+label: Convolutional Deinterleaver
+
+parameters:
+- id: blocks
+ label: Blocks (12 Bytes)
+ dtype: int
+ default: '136'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: I
+ label: Number of Shift registers
+ dtype: int
+ default: '12'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: M
+ label: Depth of shift registers
+ dtype: int
+ default: '17'
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 1
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ blocks*I }
+
+asserts:
+- ${ blocks > 0 }
+- ${ I > 0 }
+- ${ M > 0 }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_convolutional_deinterleaver(${blocks}, ${I}, ${M})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_convolutional_deinterleaver.xml b/gr-dtv/grc/dtv_dvbt_convolutional_deinterleaver.xml
deleted file mode 100644
index 315920bd42..0000000000
--- a/gr-dtv/grc/dtv_dvbt_convolutional_deinterleaver.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T Convolutional Deinterleaver
-###################################################
- -->
-<block>
- <name>Convolutional Deinterleaver</name>
- <key>dtv_dvbt_convolutional_deinterleaver</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_convolutional_deinterleaver($blocks, $I, $M)</make>
- <param>
- <name>Blocks (12 Bytes)</name>
- <key>blocks</key>
- <value>136</value>
- <type>int</type>
- </param>
- <param>
- <name>Number of Shift registers</name>
- <key>I</key>
- <value>12</value>
- <type>int</type>
- </param>
- <param>
- <name>Depth of shift registers</name>
- <key>M</key>
- <value>17</value>
- <type>int</type>
- </param>
- <check>$blocks &gt; 0</check>
- <check>$I &gt; 0</check>
- <check>$M &gt; 0</check>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>1</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>$blocks*$I</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_convolutional_interleaver.block.yml b/gr-dtv/grc/dtv_dvbt_convolutional_interleaver.block.yml
new file mode 100644
index 0000000000..e47f1d09e9
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_convolutional_interleaver.block.yml
@@ -0,0 +1,39 @@
+id: dtv_dvbt_convolutional_interleaver
+label: Convolutional Interleaver
+
+parameters:
+- id: blocks
+ label: Blocks (12 Bytes)
+ dtype: int
+ default: '136'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: I
+ label: Number of Shift registers
+ dtype: int
+ default: '12'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: M
+ label: Depth of shift registers
+ dtype: int
+ default: '17'
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ blocks*I }
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 1
+
+asserts:
+- ${ blocks > 0 }
+- ${ I > 0 }
+- ${ M > 0 }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_convolutional_interleaver(${blocks}, ${I}, ${M})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_convolutional_interleaver.xml b/gr-dtv/grc/dtv_dvbt_convolutional_interleaver.xml
deleted file mode 100644
index 04518dd622..0000000000
--- a/gr-dtv/grc/dtv_dvbt_convolutional_interleaver.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T Convolutional Interleaver
-###################################################
- -->
-<block>
- <name>Convolutional Interleaver</name>
- <key>dtv_dvbt_convolutional_interleaver</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_convolutional_interleaver($blocks, $I, $M)</make>
- <param>
- <name>Blocks (12 Bytes)</name>
- <key>blocks</key>
- <value>136</value>
- <type>int</type>
- </param>
- <param>
- <name>Number of Shift registers</name>
- <key>I</key>
- <value>12</value>
- <type>int</type>
- </param>
- <param>
- <name>Depth of shift registers</name>
- <key>M</key>
- <value>17</value>
- <type>int</type>
- </param>
- <check>$blocks &gt; 0</check>
- <check>$I &gt; 0</check>
- <check>$M &gt; 0</check>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>$blocks*$I</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>1</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_demap.block.yml b/gr-dtv/grc/dtv_dvbt_demap.block.yml
new file mode 100644
index 0000000000..857bcf3463
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_demap.block.yml
@@ -0,0 +1,48 @@
+id: dtv_dvbt_demap
+label: DVB-T Demap
+
+parameters:
+- id: constellation
+ label: Constellation Type
+ dtype: enum
+ options: [qpsk, 16qam, 64qam]
+ option_labels: [QPSK, 16QAM, 64QAM]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_16QAM, dtv.MOD_64QAM]
+- id: hierarchy
+ label: Hierarchy Type
+ dtype: enum
+ options: [nh, alpha1, alpha2, alpha4]
+ option_labels: [Non Hierarchical, Alpha 1, Alpha 2, Alpha 4]
+ option_attributes:
+ val: [dtv.NH, dtv.ALPHA1, dtv.ALPHA2, dtv.ALPHA4]
+- id: transmission_mode
+ label: Transmission Mode
+ dtype: enum
+ options: [T2k, T8k]
+ option_labels: [2K, 8K]
+ option_attributes:
+ payload_length: ['1512', '6048']
+ val: [dtv.T2k, dtv.T8k]
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: gain
+ label: Gain
+ dtype: complex
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ transmission_mode.payload_length }
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ transmission_mode.payload_length }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_demap(${transmission_mode.payload_length}, ${constellation.val},
+ ${hierarchy.val}, ${transmission_mode.val}, ${gain})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_demap.xml b/gr-dtv/grc/dtv_dvbt_demap.xml
deleted file mode 100644
index 2268ed7cf5..0000000000
--- a/gr-dtv/grc/dtv_dvbt_demap.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T Demap
-###################################################
- -->
-<block>
- <name>DVB-T Demap</name>
- <key>dtv_dvbt_demap</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_demap($transmission_mode.payload_length, $constellation.val, $hierarchy.val, $transmission_mode.val, $gain)</make>
- <param>
- <name>Constellation Type</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>qpsk</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>16QAM</name>
- <key>16qam</key>
- <opt>val:dtv.MOD_16QAM</opt>
- </option>
- <option>
- <name>64QAM</name>
- <key>64qam</key>
- <opt>val:dtv.MOD_64QAM</opt>
- </option>
- </param>
- <param>
- <name>Hierarchy Type</name>
- <key>hierarchy</key>
- <type>enum</type>
- <option>
- <name>Non Hierarchical</name>
- <key>nh</key>
- <opt>val:dtv.NH</opt>
- </option>
- <option>
- <name>Alpha 1</name>
- <key>alpha1</key>
- <opt>val:dtv.ALPHA1</opt>
- </option>
- <option>
- <name>Alpha 2</name>
- <key>alpha2</key>
- <opt>val:dtv.ALPHA2</opt>
- </option>
- <option>
- <name>Alpha 4</name>
- <key>alpha4</key>
- <opt>val:dtv.ALPHA4</opt>
- </option>
- </param>
- <param>
- <name>Transmission Mode</name>
- <key>transmission_mode</key>
- <type>enum</type>
- <option>
- <name>2K</name>
- <key>T2k</key>
- <opt>val:dtv.T2k</opt>
- <opt>payload_length:1512</opt>
- </option>
- <option>
- <name>8K</name>
- <key>T8k</key>
- <opt>val:dtv.T8k</opt>
- <opt>payload_length:6048</opt>
- </option>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1</value>
- <type>complex</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$transmission_mode.payload_length</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>$transmission_mode.payload_length</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_demod_reference_signals.block.yml b/gr-dtv/grc/dtv_dvbt_demod_reference_signals.block.yml
new file mode 100644
index 0000000000..a700f54eb6
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_demod_reference_signals.block.yml
@@ -0,0 +1,86 @@
+id: dtv_dvbt_demod_reference_signals
+label: Demod Reference Signals
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+- id: constellation
+ label: Constellation Type
+ dtype: enum
+ options: [qpsk, 16qam, 64qam]
+ option_labels: [QPSK, 16QAM, 64QAM]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_16QAM, dtv.MOD_64QAM]
+- id: hierarchy
+ label: Hierarchy Type
+ dtype: enum
+ options: [nh, alpha1, alpha2, alpha4]
+ option_labels: [Non Hierarchical, Alpha 1, Alpha 2, Alpha 4]
+ option_attributes:
+ val: [dtv.NH, dtv.ALPHA1, dtv.ALPHA2, dtv.ALPHA4]
+- id: code_rate_hp
+ label: Code rate HP
+ dtype: enum
+ options: [C1_2, C2_3, C3_4, C5_6, C7_8]
+ option_labels: [1/2, 2/3, 3/4, 5/6, 7/8]
+ option_attributes:
+ val: [dtv.C1_2, dtv.C2_3, dtv.C3_4, dtv.C5_6, dtv.C7_8]
+- id: code_rate_lp
+ label: Code rate LP
+ dtype: enum
+ options: [C1_2, C2_3, C3_4, C5_6, C7_8]
+ option_labels: [1/2, 2/3, 3/4, 5/6, 7/8]
+ option_attributes:
+ val: [dtv.C1_2, dtv.C2_3, dtv.C3_4, dtv.C5_6, dtv.C7_8]
+- id: guard_interval
+ label: Guard Interval
+ dtype: enum
+ options: [GI_1_32, GI_1_16, GI_1_8, GI_1_4]
+ option_labels: [1/32, 1/16, 1/8, 1/4]
+ option_attributes:
+ val: [dtv.GI_1_32, dtv.GI_1_16, dtv.GI_1_8, dtv.GI_1_4]
+- id: transmission_mode
+ label: Transmission Mode
+ dtype: enum
+ options: [T2k, T8k]
+ option_labels: [2K, 8K]
+ option_attributes:
+ fft_length: ['2048', '8192']
+ payload_length: ['1512', '6048']
+ val: [dtv.T2k, dtv.T8k]
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: include_cell_id
+ label: Include Cell ID
+ dtype: enum
+ options: [call_id_yes, cell_id_no]
+ option_labels: ['Yes', 'No']
+ option_attributes:
+ val: ['1', '0']
+- id: cell_id
+ label: Cell Id
+ dtype: int
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ transmission_mode.fft_length }
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ transmission_mode.payload_length }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_demod_reference_signals(${type.size}, ${transmission_mode.fft_length},
+ ${transmission_mode.payload_length}, ${constellation.val}, ${hierarchy.val},
+ ${code_rate_hp.val}, ${code_rate_lp.val}, ${guard_interval.val}, ${transmission_mode.val},
+ ${include_cell_id.val}, ${cell_id})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_demod_reference_signals.xml b/gr-dtv/grc/dtv_dvbt_demod_reference_signals.xml
deleted file mode 100644
index f92469b7e6..0000000000
--- a/gr-dtv/grc/dtv_dvbt_demod_reference_signals.xml
+++ /dev/null
@@ -1,222 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Demod Reference Signals
-###################################################
- -->
-<block>
- <name>Demod Reference Signals</name>
- <key>dtv_dvbt_demod_reference_signals</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_demod_reference_signals($type.size, $transmission_mode.fft_length, $transmission_mode.payload_length, $constellation.val, $hierarchy.val, $code_rate_hp.val, $code_rate_lp.val, $guard_interval.val, $transmission_mode.val, $include_cell_id.val, $cell_id)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Constellation Type</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>qpsk</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>16QAM</name>
- <key>16qam</key>
- <opt>val:dtv.MOD_16QAM</opt>
- </option>
- <option>
- <name>64QAM</name>
- <key>64qam</key>
- <opt>val:dtv.MOD_64QAM</opt>
- </option>
- </param>
- <param>
- <name>Hierarchy Type</name>
- <key>hierarchy</key>
- <type>enum</type>
- <option>
- <name>Non Hierarchical</name>
- <key>nh</key>
- <opt>val:dtv.NH</opt>
- </option>
- <option>
- <name>Alpha 1</name>
- <key>alpha1</key>
- <opt>val:dtv.ALPHA1</opt>
- </option>
- <option>
- <name>Alpha 2</name>
- <key>alpha2</key>
- <opt>val:dtv.ALPHA2</opt>
- </option>
- <option>
- <name>Alpha 4</name>
- <key>alpha4</key>
- <opt>val:dtv.ALPHA4</opt>
- </option>
- </param>
- <param>
- <name>Code rate HP</name>
- <key>code_rate_hp</key>
- <type>enum</type>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>7/8</name>
- <key>C7_8</key>
- <opt>val:dtv.C7_8</opt>
- </option>
- </param>
- <param>
- <name>Code rate LP</name>
- <key>code_rate_lp</key>
- <type>enum</type>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>7/8</name>
- <key>C7_8</key>
- <opt>val:dtv.C7_8</opt>
- </option>
- </param>
- <param>
- <name>Guard Interval</name>
- <key>guard_interval</key>
- <type>enum</type>
- <option>
- <name>1/32</name>
- <key>GI_1_32</key>
- <opt>val:dtv.GI_1_32</opt>
- </option>
- <option>
- <name>1/16</name>
- <key>GI_1_16</key>
- <opt>val:dtv.GI_1_16</opt>
- </option>
- <option>
- <name>1/8</name>
- <key>GI_1_8</key>
- <opt>val:dtv.GI_1_8</opt>
- </option>
- <option>
- <name>1/4</name>
- <key>GI_1_4</key>
- <opt>val:dtv.GI_1_4</opt>
- </option>
- </param>
- <param>
- <name>Transmission Mode</name>
- <key>transmission_mode</key>
- <type>enum</type>
- <option>
- <name>2K</name>
- <key>T2k</key>
- <opt>val:dtv.T2k</opt>
- <opt>fft_length:2048</opt>
- <opt>payload_length:1512</opt>
- </option>
- <option>
- <name>8K</name>
- <key>T8k</key>
- <opt>val:dtv.T8k</opt>
- <opt>fft_length:8192</opt>
- <opt>payload_length:6048</opt>
- </option>
- </param>
- <param>
- <name>Include Cell ID</name>
- <key>include_cell_id</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>call_id_yes</key>
- <opt>val:1</opt>
- </option>
- <option>
- <name>No</name>
- <key>cell_id_no</key>
- <opt>val:0</opt>
- </option>
- </param>
- <param>
- <name>Cell Id</name>
- <key>cell_id</key>
- <value>0</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$transmission_mode.fft_length</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>$transmission_mode.payload_length</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_energy_descramble.block.yml b/gr-dtv/grc/dtv_dvbt_energy_descramble.block.yml
new file mode 100644
index 0000000000..9ca3fee196
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_energy_descramble.block.yml
@@ -0,0 +1,27 @@
+id: dtv_dvbt_energy_descramble
+label: Energy Descramble
+
+parameters:
+- id: nsize
+ label: Blocks(188 Bytes)
+ dtype: int
+ default: '8'
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 188*8
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 1
+
+asserts:
+- ${ nsize > 0 }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_energy_descramble(${nsize})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_energy_descramble.xml b/gr-dtv/grc/dtv_dvbt_energy_descramble.xml
deleted file mode 100644
index 689f85424f..0000000000
--- a/gr-dtv/grc/dtv_dvbt_energy_descramble.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T Energy Descramble
-###################################################
- -->
-<block>
- <name>Energy Descramble</name>
- <key>dtv_dvbt_energy_descramble</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_energy_descramble($nsize)</make>
- <param>
- <name>Blocks(188 Bytes)</name>
- <key>nsize</key>
- <value>8</value>
- <type>int</type>
- </param>
- <check>$nsize &gt; 0</check>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>188*8</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>1</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_energy_dispersal.block.yml b/gr-dtv/grc/dtv_dvbt_energy_dispersal.block.yml
new file mode 100644
index 0000000000..1b7628fb65
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_energy_dispersal.block.yml
@@ -0,0 +1,28 @@
+id: dtv_dvbt_energy_dispersal
+label: Energy Dispersal
+
+parameters:
+- id: nsize
+ label: Blocks(1504 Bytes)
+ dtype: int
+ default: '8'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 1
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ 1504*nsize }
+
+asserts:
+- ${ nsize > 0 }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_energy_dispersal(${nsize})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_energy_dispersal.xml b/gr-dtv/grc/dtv_dvbt_energy_dispersal.xml
deleted file mode 100644
index 50746c8e4d..0000000000
--- a/gr-dtv/grc/dtv_dvbt_energy_dispersal.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T Energy Dispersal
-###################################################
- -->
-<block>
- <name>Energy Dispersal</name>
- <key>dtv_dvbt_energy_dispersal</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_energy_dispersal($nsize)</make>
- <param>
- <name>Blocks(1504 Bytes)</name>
- <key>nsize</key>
- <value>8</value>
- <type>int</type>
- </param>
- <check>$nsize &gt; 0</check>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>1</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>1504*$nsize</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_inner_coder.block.yml b/gr-dtv/grc/dtv_dvbt_inner_coder.block.yml
new file mode 100644
index 0000000000..ca9c2eda4a
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_inner_coder.block.yml
@@ -0,0 +1,57 @@
+id: dtv_dvbt_inner_coder
+label: Inner Coder
+
+parameters:
+- id: ninput
+ label: Input length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: noutput
+ label: Output length
+ dtype: int
+ default: '1512'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: constellation
+ label: Constellation Type
+ dtype: enum
+ options: [qpsk, 16qam, 64qam]
+ option_labels: [QPSK, 16QAM, 64QAM]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_16QAM, dtv.MOD_64QAM]
+- id: hierarchy
+ label: Hierarchy Type
+ dtype: enum
+ options: [nh, alpha1, alpha2, alpha4]
+ option_labels: [Non Hierarchical, Alpha 1, Alpha 2, Alpha 4]
+ option_attributes:
+ val: [dtv.NH, dtv.ALPHA1, dtv.ALPHA2, dtv.ALPHA4]
+- id: code_rate
+ label: Code rate
+ dtype: enum
+ options: [C1_2, C2_3, C3_4, C5_6, C7_8]
+ option_labels: [1/2, 2/3, 3/4, 5/6, 7/8]
+ option_attributes:
+ val: [dtv.C1_2, dtv.C2_3, dtv.C3_4, dtv.C5_6, dtv.C7_8]
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ ninput }
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ noutput }
+
+asserts:
+- ${ ninput > 0 }
+- ${ noutput > 0 }
+- ${ noutput >= ninput }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_inner_coder(${ninput}, ${noutput}, ${constellation.val}, ${hierarchy.val},
+ ${code_rate.val})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_inner_coder.xml b/gr-dtv/grc/dtv_dvbt_inner_coder.xml
deleted file mode 100644
index 4751065dd1..0000000000
--- a/gr-dtv/grc/dtv_dvbt_inner_coder.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T Inner Coder
-###################################################
- -->
-<block>
- <name>Inner Coder</name>
- <key>dtv_dvbt_inner_coder</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_inner_coder($ninput, $noutput, $constellation.val, $hierarchy.val, $code_rate.val)</make>
- <param>
- <name>Input length</name>
- <key>ninput</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Output length</name>
- <key>noutput</key>
- <value>1512</value>
- <type>int</type>
- </param>
- <param>
- <name>Constellation Type</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>qpsk</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>16QAM</name>
- <key>16qam</key>
- <opt>val:dtv.MOD_16QAM</opt>
- </option>
- <option>
- <name>64QAM</name>
- <key>64qam</key>
- <opt>val:dtv.MOD_64QAM</opt>
- </option>
- </param>
- <param>
- <name>Hierarchy Type</name>
- <key>hierarchy</key>
- <type>enum</type>
- <option>
- <name>Non Hierarchical</name>
- <key>nh</key>
- <opt>val:dtv.NH</opt>
- </option>
- <option>
- <name>Alpha 1</name>
- <key>alpha1</key>
- <opt>val:dtv.ALPHA1</opt>
- </option>
- <option>
- <name>Alpha 2</name>
- <key>alpha2</key>
- <opt>val:dtv.ALPHA2</opt>
- </option>
- <option>
- <name>Alpha 4</name>
- <key>alpha4</key>
- <opt>val:dtv.ALPHA4</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>code_rate</key>
- <type>enum</type>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>7/8</name>
- <key>C7_8</key>
- <opt>val:dtv.C7_8</opt>
- </option>
- </param>
- <check>$ninput &gt; 0</check>
- <check>$noutput &gt; 0</check>
- <check>$noutput &gt;= $ninput</check>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>$ninput</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>$noutput</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_map.block.yml b/gr-dtv/grc/dtv_dvbt_map.block.yml
new file mode 100644
index 0000000000..76ffa0400b
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_map.block.yml
@@ -0,0 +1,48 @@
+id: dtv_dvbt_map
+label: DVB-T Map
+
+parameters:
+- id: constellation
+ label: Constellation Type
+ dtype: enum
+ options: [qpsk, 16qam, 64qam]
+ option_labels: [QPSK, 16QAM, 64QAM]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_16QAM, dtv.MOD_64QAM]
+- id: hierarchy
+ label: Hierarchy Type
+ dtype: enum
+ options: [nh, alpha1, alpha2, alpha4]
+ option_labels: [Non Hierarchical, Alpha 1, Alpha 2, Alpha 4]
+ option_attributes:
+ val: [dtv.NH, dtv.ALPHA1, dtv.ALPHA2, dtv.ALPHA4]
+- id: transmission_mode
+ label: Transmission Mode
+ dtype: enum
+ options: [T2k, T8k]
+ option_labels: [2K, 8K]
+ option_attributes:
+ payload_length: ['1512', '6048']
+ val: [dtv.T2k, dtv.T8k]
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: gain
+ label: Gain
+ dtype: complex
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ transmission_mode.payload_length }
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ transmission_mode.payload_length }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_map(${transmission_mode.payload_length}, ${constellation.val},
+ ${hierarchy.val}, ${transmission_mode.val}, ${gain})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_map.xml b/gr-dtv/grc/dtv_dvbt_map.xml
deleted file mode 100644
index 705a508033..0000000000
--- a/gr-dtv/grc/dtv_dvbt_map.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T Map
-###################################################
- -->
-<block>
- <name>DVB-T Map</name>
- <key>dtv_dvbt_map</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_map($transmission_mode.payload_length, $constellation.val, $hierarchy.val, $transmission_mode.val, $gain)</make>
- <param>
- <name>Constellation Type</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>qpsk</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>16QAM</name>
- <key>16qam</key>
- <opt>val:dtv.MOD_16QAM</opt>
- </option>
- <option>
- <name>64QAM</name>
- <key>64qam</key>
- <opt>val:dtv.MOD_64QAM</opt>
- </option>
- </param>
- <param>
- <name>Hierarchy Type</name>
- <key>hierarchy</key>
- <type>enum</type>
- <option>
- <name>Non Hierarchical</name>
- <key>nh</key>
- <opt>val:dtv.NH</opt>
- </option>
- <option>
- <name>Alpha 1</name>
- <key>alpha1</key>
- <opt>val:dtv.ALPHA1</opt>
- </option>
- <option>
- <name>Alpha 2</name>
- <key>alpha2</key>
- <opt>val:dtv.ALPHA2</opt>
- </option>
- <option>
- <name>Alpha 4</name>
- <key>alpha4</key>
- <opt>val:dtv.ALPHA4</opt>
- </option>
- </param>
- <param>
- <name>Transmission Mode</name>
- <key>transmission_mode</key>
- <type>enum</type>
- <option>
- <name>2K</name>
- <key>T2k</key>
- <opt>val:dtv.T2k</opt>
- <opt>payload_length:1512</opt>
- </option>
- <option>
- <name>8K</name>
- <key>T8k</key>
- <opt>val:dtv.T8k</opt>
- <opt>payload_length:6048</opt>
- </option>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1</value>
- <type>complex</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>$transmission_mode.payload_length</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>$transmission_mode.payload_length</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_ofdm_sym_acquisition.block.yml b/gr-dtv/grc/dtv_dvbt_ofdm_sym_acquisition.block.yml
new file mode 100644
index 0000000000..fc00654488
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_ofdm_sym_acquisition.block.yml
@@ -0,0 +1,45 @@
+id: dtv_dvbt_ofdm_sym_acquisition
+label: OFDM Symbol Acquisition
+
+parameters:
+- id: type
+ label: Output Type
+ dtype: enum
+ default: float
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ fcn: [c, f, i, s, b]
+ hide: part
+- id: fft_length
+ label: FFT Length
+ dtype: int
+ default: '2048'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: occupied_tones
+ label: Occupied Tones
+ dtype: int
+ default: '1705'
+- id: cp_length
+ label: Cyclic Prefix Length
+ dtype: int
+ default: '64'
+- id: snr
+ label: SNR
+ dtype: real
+ default: '10'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ fft_length }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_ofdm_sym_acquisition(1, ${fft_length}, ${occupied_tones}, ${cp_length},
+ ${snr})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_ofdm_sym_acquisition.xml b/gr-dtv/grc/dtv_dvbt_ofdm_sym_acquisition.xml
deleted file mode 100644
index a75dcc02c3..0000000000
--- a/gr-dtv/grc/dtv_dvbt_ofdm_sym_acquisition.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## OFDM Symbol Acquisition
-###################################################
- -->
-<block>
- <name>OFDM Symbol Acquisition</name>
- <key>dtv_dvbt_ofdm_sym_acquisition</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_ofdm_sym_acquisition(1, $fft_length, $occupied_tones, $cp_length, $snr)</make>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <value>float</value>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:i</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:b</opt>
- </option>
- </param>
- <param>
- <name>FFT Length</name>
- <key>fft_length</key>
- <value>2048</value>
- <type>int</type>
- </param>
- <param>
- <name>Occupied Tones</name>
- <key>occupied_tones</key>
- <value>1705</value>
- <type>int</type>
- </param>
- <param>
- <name>Cyclic Prefix Length</name>
- <key>cp_length</key>
- <value>64</value>
- <type>int</type>
- </param>
- <param>
- <name>SNR</name>
- <key>snr</key>
- <value>10</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$fft_length</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_reed_solomon_dec.block.yml b/gr-dtv/grc/dtv_dvbt_reed_solomon_dec.block.yml
new file mode 100644
index 0000000000..e037c42e08
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_reed_solomon_dec.block.yml
@@ -0,0 +1,57 @@
+id: dtv_dvbt_reed_solomon_dec
+label: Reed-Solomon Decoder
+
+parameters:
+- id: p
+ label: p
+ dtype: int
+ default: '2'
+- id: m
+ label: m
+ dtype: int
+ default: '8'
+- id: gfpoly
+ label: GF polynomial
+ dtype: raw
+ default: '0x11d'
+- id: n
+ label: N
+ dtype: int
+ default: '255'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: k
+ label: K
+ dtype: int
+ default: '239'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: t
+ label: t
+ dtype: int
+ default: '8'
+- id: s
+ label: Shortening size
+ dtype: int
+ default: '51'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: blocks
+ label: Blocks
+ dtype: int
+ default: '8'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ blocks*(n-s) }
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ blocks*(k-s) }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_reed_solomon_dec(${p}, ${m}, ${gfpoly}, ${n}, ${k}, ${t}, ${s},
+ ${blocks})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_reed_solomon_dec.xml b/gr-dtv/grc/dtv_dvbt_reed_solomon_dec.xml
deleted file mode 100644
index 798a6d40f8..0000000000
--- a/gr-dtv/grc/dtv_dvbt_reed_solomon_dec.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T Reed Solomon Decoder
-###################################################
- -->
-<block>
- <name>Reed-Solomon Decoder</name>
- <key>dtv_dvbt_reed_solomon_dec</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_reed_solomon_dec($p, $m, $gfpoly, $n, $k, $t, $s, $blocks)</make>
- <param>
- <name>p</name>
- <key>p</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>m</name>
- <key>m</key>
- <value>8</value>
- <type>int</type>
- </param>
- <param>
- <name>GF polynomial</name>
- <key>gfpoly</key>
- <value>0x11d</value>
- <type>raw</type>
- </param>
- <param>
- <name>N</name>
- <key>n</key>
- <value>255</value>
- <type>int</type>
- </param>
- <param>
- <name>K</name>
- <key>k</key>
- <value>239</value>
- <type>int</type>
- </param>
- <param>
- <name>t</name>
- <key>t</key>
- <value>8</value>
- <type>int</type>
- </param>
- <param>
- <name>Shortening size</name>
- <key>s</key>
- <value>51</value>
- <type>int</type>
- </param>
- <param>
- <name>Blocks</name>
- <key>blocks</key>
- <value>8</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>$blocks*($n-$s)</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>$blocks*($k-$s)</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_reed_solomon_enc.block.yml b/gr-dtv/grc/dtv_dvbt_reed_solomon_enc.block.yml
new file mode 100644
index 0000000000..af463cad4e
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_reed_solomon_enc.block.yml
@@ -0,0 +1,57 @@
+id: dtv_dvbt_reed_solomon_enc
+label: Reed-Solomon Encoder
+
+parameters:
+- id: p
+ label: p
+ dtype: int
+ default: '2'
+- id: m
+ label: m
+ dtype: int
+ default: '8'
+- id: gfpoly
+ label: GF polynomial
+ dtype: raw
+ default: '0x11d'
+- id: n
+ label: N
+ dtype: int
+ default: '255'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: k
+ label: K
+ dtype: int
+ default: '239'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: t
+ label: t
+ dtype: int
+ default: '8'
+- id: s
+ label: Shortening size
+ dtype: int
+ default: '51'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: blocks
+ label: Blocks
+ dtype: int
+ default: '8'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ blocks*(k-s) }
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ blocks*(n-s) }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_reed_solomon_enc(${p}, ${m}, ${gfpoly}, ${n}, ${k}, ${t}, ${s},
+ ${blocks})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_reed_solomon_enc.xml b/gr-dtv/grc/dtv_dvbt_reed_solomon_enc.xml
deleted file mode 100644
index 3dd57a7df0..0000000000
--- a/gr-dtv/grc/dtv_dvbt_reed_solomon_enc.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T Reed Solomon Encoder
-###################################################
- -->
-<block>
- <name>Reed-Solomon Encoder</name>
- <key>dtv_dvbt_reed_solomon_enc</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_reed_solomon_enc($p, $m, $gfpoly, $n, $k, $t, $s, $blocks)</make>
- <param>
- <name>p</name>
- <key>p</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>m</name>
- <key>m</key>
- <value>8</value>
- <type>int</type>
- </param>
- <param>
- <name>GF polynomial</name>
- <key>gfpoly</key>
- <value>0x11d</value>
- <type>raw</type>
- </param>
- <param>
- <name>N</name>
- <key>n</key>
- <value>255</value>
- <type>int</type>
- </param>
- <param>
- <name>K</name>
- <key>k</key>
- <value>239</value>
- <type>int</type>
- </param>
- <param>
- <name>t</name>
- <key>t</key>
- <value>8</value>
- <type>int</type>
- </param>
- <param>
- <name>Shortening size</name>
- <key>s</key>
- <value>51</value>
- <type>int</type>
- </param>
- <param>
- <name>Blocks</name>
- <key>blocks</key>
- <value>8</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>$blocks*($k-$s)</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>$blocks*($n-$s)</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_reference_signals.block.yml b/gr-dtv/grc/dtv_dvbt_reference_signals.block.yml
new file mode 100644
index 0000000000..d693b5ae10
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_reference_signals.block.yml
@@ -0,0 +1,86 @@
+id: dtv_dvbt_reference_signals
+label: Reference Signals
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+- id: constellation
+ label: Constellation Type
+ dtype: enum
+ options: [qpsk, 16qam, 64qam]
+ option_labels: [QPSK, 16QAM, 64QAM]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_16QAM, dtv.MOD_64QAM]
+- id: hierarchy
+ label: Hierarchy Type
+ dtype: enum
+ options: [nh, alpha1, alpha2, alpha4]
+ option_labels: [Non Hierarchical, Alpha 1, Alpha 2, Alpha 4]
+ option_attributes:
+ val: [dtv.NH, dtv.ALPHA1, dtv.ALPHA2, dtv.ALPHA4]
+- id: code_rate_hp
+ label: Code rate HP
+ dtype: enum
+ options: [C1_2, C2_3, C3_4, C5_6, C7_8]
+ option_labels: [1/2, 2/3, 3/4, 5/6, 7/8]
+ option_attributes:
+ val: [dtv.C1_2, dtv.C2_3, dtv.C3_4, dtv.C5_6, dtv.C7_8]
+- id: code_rate_lp
+ label: Code rate LP
+ dtype: enum
+ options: [C1_2, C2_3, C3_4, C5_6, C7_8]
+ option_labels: [1/2, 2/3, 3/4, 5/6, 7/8]
+ option_attributes:
+ val: [dtv.C1_2, dtv.C2_3, dtv.C3_4, dtv.C5_6, dtv.C7_8]
+- id: guard_interval
+ label: Guard Interval
+ dtype: enum
+ options: [GI_1_32, GI_1_16, GI_1_8, GI_1_4]
+ option_labels: [1/32, 1/16, 1/8, 1/4]
+ option_attributes:
+ val: [dtv.GI_1_32, dtv.GI_1_16, dtv.GI_1_8, dtv.GI_1_4]
+- id: transmission_mode
+ label: Transmission Mode
+ dtype: enum
+ options: [T2k, T8k]
+ option_labels: [2K, 8K]
+ option_attributes:
+ fft_length: ['2048', '8192']
+ payload_length: ['1512', '6048']
+ val: [dtv.T2k, dtv.T8k]
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: include_cell_id
+ label: Include Cell ID
+ dtype: enum
+ options: [call_id_yes, cell_id_no]
+ option_labels: ['Yes', 'No']
+ option_attributes:
+ val: ['1', '0']
+- id: cell_id
+ label: Cell Id
+ dtype: int
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ transmission_mode.payload_length }
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ transmission_mode.fft_length }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_reference_signals(${type.size}, ${transmission_mode.payload_length},
+ ${transmission_mode.fft_length}, ${constellation.val}, ${hierarchy.val}, ${code_rate_hp.val},
+ ${code_rate_lp.val}, ${guard_interval.val}, ${transmission_mode.val}, ${include_cell_id.val},
+ ${cell_id})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_reference_signals.xml b/gr-dtv/grc/dtv_dvbt_reference_signals.xml
deleted file mode 100644
index 3a4282cc50..0000000000
--- a/gr-dtv/grc/dtv_dvbt_reference_signals.xml
+++ /dev/null
@@ -1,222 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Reference Signals
-###################################################
- -->
-<block>
- <name>Reference Signals</name>
- <key>dtv_dvbt_reference_signals</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_reference_signals($type.size, $transmission_mode.payload_length, $transmission_mode.fft_length, $constellation.val, $hierarchy.val, $code_rate_hp.val, $code_rate_lp.val, $guard_interval.val, $transmission_mode.val, $include_cell_id.val, $cell_id)</make>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Constellation Type</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>qpsk</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>16QAM</name>
- <key>16qam</key>
- <opt>val:dtv.MOD_16QAM</opt>
- </option>
- <option>
- <name>64QAM</name>
- <key>64qam</key>
- <opt>val:dtv.MOD_64QAM</opt>
- </option>
- </param>
- <param>
- <name>Hierarchy Type</name>
- <key>hierarchy</key>
- <type>enum</type>
- <option>
- <name>Non Hierarchical</name>
- <key>nh</key>
- <opt>val:dtv.NH</opt>
- </option>
- <option>
- <name>Alpha 1</name>
- <key>alpha1</key>
- <opt>val:dtv.ALPHA1</opt>
- </option>
- <option>
- <name>Alpha 2</name>
- <key>alpha2</key>
- <opt>val:dtv.ALPHA2</opt>
- </option>
- <option>
- <name>Alpha 4</name>
- <key>alpha4</key>
- <opt>val:dtv.ALPHA4</opt>
- </option>
- </param>
- <param>
- <name>Code rate HP</name>
- <key>code_rate_hp</key>
- <type>enum</type>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>7/8</name>
- <key>C7_8</key>
- <opt>val:dtv.C7_8</opt>
- </option>
- </param>
- <param>
- <name>Code rate LP</name>
- <key>code_rate_lp</key>
- <type>enum</type>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>7/8</name>
- <key>C7_8</key>
- <opt>val:dtv.C7_8</opt>
- </option>
- </param>
- <param>
- <name>Guard Interval</name>
- <key>guard_interval</key>
- <type>enum</type>
- <option>
- <name>1/32</name>
- <key>GI_1_32</key>
- <opt>val:dtv.GI_1_32</opt>
- </option>
- <option>
- <name>1/16</name>
- <key>GI_1_16</key>
- <opt>val:dtv.GI_1_16</opt>
- </option>
- <option>
- <name>1/8</name>
- <key>GI_1_8</key>
- <opt>val:dtv.GI_1_8</opt>
- </option>
- <option>
- <name>1/4</name>
- <key>GI_1_4</key>
- <opt>val:dtv.GI_1_4</opt>
- </option>
- </param>
- <param>
- <name>Transmission Mode</name>
- <key>transmission_mode</key>
- <type>enum</type>
- <option>
- <name>2K</name>
- <key>T2k</key>
- <opt>val:dtv.T2k</opt>
- <opt>fft_length:2048</opt>
- <opt>payload_length:1512</opt>
- </option>
- <option>
- <name>8K</name>
- <key>T8k</key>
- <opt>val:dtv.T8k</opt>
- <opt>fft_length:8192</opt>
- <opt>payload_length:6048</opt>
- </option>
- </param>
- <param>
- <name>Include Cell ID</name>
- <key>include_cell_id</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>call_id_yes</key>
- <opt>val:1</opt>
- </option>
- <option>
- <name>No</name>
- <key>cell_id_no</key>
- <opt>val:0</opt>
- </option>
- </param>
- <param>
- <name>Cell Id</name>
- <key>cell_id</key>
- <value>0</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>$transmission_mode.payload_length</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>$transmission_mode.fft_length</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_symbol_inner_interleaver.block.yml b/gr-dtv/grc/dtv_dvbt_symbol_inner_interleaver.block.yml
new file mode 100644
index 0000000000..d516f0ec7a
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_symbol_inner_interleaver.block.yml
@@ -0,0 +1,37 @@
+id: dtv_dvbt_symbol_inner_interleaver
+label: Symbol Inner Interleaver
+
+parameters:
+- id: transmission_mode
+ label: Transmission Mode
+ dtype: enum
+ options: [T2k, T8k]
+ option_labels: [2K, 8K]
+ option_attributes:
+ fft_length: ['2048', '8192']
+ payload_length: ['1512', '6048']
+ val: [dtv.T2k, dtv.T8k]
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: direction
+ label: Direction
+ dtype: enum
+ options: [Interleave, Deinterleave]
+ option_attributes:
+ val: ['1', '0']
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ transmission_mode.payload_length }
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: ${ transmission_mode.payload_length }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_symbol_inner_interleaver(${transmission_mode.payload_length}, ${transmission_mode.val},
+ ${direction.val})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_symbol_inner_interleaver.xml b/gr-dtv/grc/dtv_dvbt_symbol_inner_interleaver.xml
deleted file mode 100644
index f440769a46..0000000000
--- a/gr-dtv/grc/dtv_dvbt_symbol_inner_interleaver.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T Symbol Inner Interleaver
-###################################################
- -->
-<block>
- <name>Symbol Inner Interleaver</name>
- <key>dtv_dvbt_symbol_inner_interleaver</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_symbol_inner_interleaver($transmission_mode.payload_length, $transmission_mode.val, $direction.val)</make>
- <param>
- <name>Transmission Mode</name>
- <key>transmission_mode</key>
- <type>enum</type>
- <option>
- <name>2K</name>
- <key>T2k</key>
- <opt>val:dtv.T2k</opt>
- <opt>fft_length:2048</opt>
- <opt>payload_length:1512</opt>
- </option>
- <option>
- <name>8K</name>
- <key>T8k</key>
- <opt>val:dtv.T8k</opt>
- <opt>fft_length:8192</opt>
- <opt>payload_length:6048</opt>
- </option>
- </param>
- <param>
- <name>Direction</name>
- <key>direction</key>
- <type>enum</type>
- <option>
- <name>Interleave</name>
- <key>Interleave</key>
- <opt>val:1</opt>
- </option>
- <option>
- <name>Deinterleave</name>
- <key>Deinterleave</key>
- <opt>val:0</opt>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>$transmission_mode.payload_length</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>$transmission_mode.payload_length</vlen>
- </source>
-</block>
diff --git a/gr-dtv/grc/dtv_dvbt_viterbi_decoder.block.yml b/gr-dtv/grc/dtv_dvbt_viterbi_decoder.block.yml
new file mode 100644
index 0000000000..367b581014
--- /dev/null
+++ b/gr-dtv/grc/dtv_dvbt_viterbi_decoder.block.yml
@@ -0,0 +1,51 @@
+id: dtv_dvbt_viterbi_decoder
+label: Viterbi Decoder
+
+parameters:
+- id: constellation
+ label: Constellation Type
+ dtype: enum
+ options: [qpsk, 16qam, 64qam]
+ option_labels: [QPSK, 16QAM, 64QAM]
+ option_attributes:
+ val: [dtv.MOD_QPSK, dtv.MOD_16QAM, dtv.MOD_64QAM]
+- id: hierarchy
+ label: Hierarchy Type
+ dtype: enum
+ options: [nh, alpha1, alpha2, alpha4]
+ option_labels: [Non Hierarchical, Alpha 1, Alpha 2, Alpha 4]
+ option_attributes:
+ val: [dtv.NH, dtv.ALPHA1, dtv.ALPHA2, dtv.ALPHA4]
+- id: code_rate
+ label: Code rate
+ dtype: enum
+ options: [C1_2, C2_3, C3_4, C5_6, C7_8]
+ option_labels: [1/2, 2/3, 3/4, 5/6, 7/8]
+ option_attributes:
+ val: [dtv.C1_2, dtv.C2_3, dtv.C3_4, dtv.C5_6, dtv.C7_8]
+- id: type
+ label: Type
+ dtype: enum
+ options: [i, s, b]
+ option_labels: [Int, Short, Byte]
+ option_attributes:
+ io: [int, short, byte]
+ hide: part
+- id: block_size
+ label: Block Size
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: ${ type.io }
+
+templates:
+ imports: from gnuradio import dtv
+ make: dtv.dvbt_viterbi_decoder(${constellation.val}, ${hierarchy.val}, ${code_rate.val},
+ ${block_size})
+
+file_format: 1
diff --git a/gr-dtv/grc/dtv_dvbt_viterbi_decoder.xml b/gr-dtv/grc/dtv_dvbt_viterbi_decoder.xml
deleted file mode 100644
index 1dde80c281..0000000000
--- a/gr-dtv/grc/dtv_dvbt_viterbi_decoder.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DVB-T Viterbi Decoder
-###################################################
- -->
-<block>
- <name>Viterbi Decoder</name>
- <key>dtv_dvbt_viterbi_decoder</key>
- <import>from gnuradio import dtv</import>
- <make>dtv.dvbt_viterbi_decoder($constellation.val, $hierarchy.val, $code_rate.val, $block_size)</make>
- <param>
- <name>Constellation Type</name>
- <key>constellation</key>
- <type>enum</type>
- <option>
- <name>QPSK</name>
- <key>qpsk</key>
- <opt>val:dtv.MOD_QPSK</opt>
- </option>
- <option>
- <name>16QAM</name>
- <key>16qam</key>
- <opt>val:dtv.MOD_16QAM</opt>
- </option>
- <option>
- <name>64QAM</name>
- <key>64qam</key>
- <opt>val:dtv.MOD_64QAM</opt>
- </option>
- </param>
- <param>
- <name>Hierarchy Type</name>
- <key>hierarchy</key>
- <type>enum</type>
- <option>
- <name>Non Hierarchical</name>
- <key>nh</key>
- <opt>val:dtv.NH</opt>
- </option>
- <option>
- <name>Alpha 1</name>
- <key>alpha1</key>
- <opt>val:dtv.ALPHA1</opt>
- </option>
- <option>
- <name>Alpha 2</name>
- <key>alpha2</key>
- <opt>val:dtv.ALPHA2</opt>
- </option>
- <option>
- <name>Alpha 4</name>
- <key>alpha4</key>
- <opt>val:dtv.ALPHA4</opt>
- </option>
- </param>
- <param>
- <name>Code rate</name>
- <key>code_rate</key>
- <type>enum</type>
- <option>
- <name>1/2</name>
- <key>C1_2</key>
- <opt>val:dtv.C1_2</opt>
- </option>
- <option>
- <name>2/3</name>
- <key>C2_3</key>
- <opt>val:dtv.C2_3</opt>
- </option>
- <option>
- <name>3/4</name>
- <key>C3_4</key>
- <opt>val:dtv.C3_4</opt>
- </option>
- <option>
- <name>5/6</name>
- <key>C5_6</key>
- <opt>val:dtv.C5_6</opt>
- </option>
- <option>
- <name>7/8</name>
- <key>C7_8</key>
- <opt>val:dtv.C7_8</opt>
- </option>
- </param>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>b</key>
- <opt>io:byte</opt>
- </option>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.io</type>
- </source>
-</block>
diff --git a/gr-fec/grc/CMakeLists.txt b/gr-fec/grc/CMakeLists.txt
index f61603df22..5214189b99 100644
--- a/gr-fec/grc/CMakeLists.txt
+++ b/gr-fec/grc/CMakeLists.txt
@@ -18,9 +18,9 @@
# Boston, MA 02110-1301, USA.
########################################################################
-file(GLOB xml_files "*.xml")
+file(GLOB yml_files "*.yml")
install(FILES
- ${xml_files}
+ ${yml_files}
DESTINATION ${GRC_BLOCKS_DIR}
)
diff --git a/gr-fec/grc/fec.tree.yml b/gr-fec/grc/fec.tree.yml
new file mode 100644
index 0000000000..e9109ba316
--- /dev/null
+++ b/gr-fec/grc/fec.tree.yml
@@ -0,0 +1,43 @@
+'[Core]':
+- Error Coding:
+ - Decoders:
+ - variable_cc_decoder_def
+ - variable_repetition_decoder_def
+ - variable_ldpc_decoder_def
+ - variable_ldpc_bit_flip_decoder_def
+ - variable_tpc_decoder_def
+ - variable_dummy_decoder_def
+ - variable_polar_decoder_sc_def
+ - variable_polar_decoder_sc_list_def
+ - variable_polar_decoder_sc_systematic_def
+ - Encoders:
+ - variable_cc_encoder_def
+ - variable_ccsds_encoder_def
+ - variable_repetition_encoder_def
+ - variable_tpc_encoder_def
+ - variable_ldpc_encoder_def
+ - variable_ldpc_encoder_G_def
+ - variable_ldpc_encoder_H_def
+ - variable_polar_encoder_def
+ - variable_polar_encoder_systematic_def
+ - variable_dummy_encoder_def
+ - fec_extended_encoder
+ - fec_extended_async_encoder
+ - fec_extended_tagged_encoder
+ - fec_extended_decoder
+ - fec_extended_tagged_decoder
+ - fec_generic_encoder
+ - fec_generic_decoder
+ - fec_tagged_encoder
+ - fec_tagged_decoder
+ - fec_async_encoder
+ - fec_async_decoder
+ - fec_decode_ccsds_27_fb
+ - fec_encode_ccsds_27_bb
+ - fec_puncture_xx
+ - fec_depuncture_bb
+ - fec_ber_bf
+ - fec_bercurve_generator
+ - variable_polar_code_configurator
+ - variable_ldpc_H_matrix_def
+ - variable_ldpc_G_matrix_def
diff --git a/gr-fec/grc/fec_async_decoder.block.yml b/gr-fec/grc/fec_async_decoder.block.yml
new file mode 100644
index 0000000000..94c3e148fd
--- /dev/null
+++ b/gr-fec/grc/fec_async_decoder.block.yml
@@ -0,0 +1,43 @@
+id: fec_async_decoder
+label: FEC Async Decoder
+
+parameters:
+- id: decoder
+ label: Decoder Obj.
+ dtype: raw
+- id: mtu
+ label: MTU (bytes)
+ dtype: int
+ default: '1500'
+- id: packed
+ label: Packed
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+ hide: part
+- id: rev_pack
+ label: Rev. Packing
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: ${ ('part' if packed == 'True' else 'all') }
+
+inputs:
+- domain: message
+ id: in
+ optional: true
+
+outputs:
+- domain: message
+ id: out
+ optional: true
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.async_decoder(${decoder}, ${packed}, ${rev_pack}, ${mtu})
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/fec_async_decoder.xml b/gr-fec/grc/fec_async_decoder.xml
deleted file mode 100644
index 9b67d869e4..0000000000
--- a/gr-fec/grc/fec_async_decoder.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>FEC Async Decoder</name>
- <key>fec_async_decoder</key>
- <import>from gnuradio import fec</import>
- <make>fec.async_decoder($decoder, $packed, $rev_pack, $mtu)</make>
-
- <param>
- <name>Decoder Obj.</name>
- <key>decoder</key>
- <type>raw</type>
- </param>
-
- <param>
- <name>MTU (bytes)</name>
- <key>mtu</key>
- <value>1500</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Packed</name>
- <key>packed</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- </param>
-
- <param>
- <name>Rev. Packing</name>
- <key>rev_pack</key>
- <value>True</value>
- <type>enum</type>
- <hide>#if $packed() == 'True' then 'part' else 'all'#</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <sink>
- <name>in</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
-
- <source>
- <name>out</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-
- <doc>
- </doc>
-
-</block>
diff --git a/gr-fec/grc/fec_async_encoder.block.yml b/gr-fec/grc/fec_async_encoder.block.yml
new file mode 100644
index 0000000000..4b3902196e
--- /dev/null
+++ b/gr-fec/grc/fec_async_encoder.block.yml
@@ -0,0 +1,50 @@
+id: fec_async_encoder
+label: FEC Async Encoder
+
+parameters:
+- id: encoder
+ label: Encoder Obj.
+ dtype: raw
+- id: mtu
+ label: MTU (bytes)
+ dtype: int
+ default: '1500'
+- id: packed
+ label: Packed
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+ hide: part
+- id: rev_unpack
+ label: Rev. Unpacking
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: ${ ('part' if packed == 'True' else 'all') }
+- id: rev_pack
+ label: Rev. Packing
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: ${ ('part' if packed == 'True' else 'all') }
+
+inputs:
+- domain: message
+ id: in
+ optional: true
+
+outputs:
+- domain: message
+ id: out
+ optional: true
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.async_encoder(${encoder}, ${packed}, ${rev_unpack}, ${rev_pack}, ${mtu})
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/fec_async_encoder.xml b/gr-fec/grc/fec_async_encoder.xml
deleted file mode 100644
index 68d516fc6d..0000000000
--- a/gr-fec/grc/fec_async_encoder.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>FEC Async Encoder</name>
- <key>fec_async_encoder</key>
- <import>from gnuradio import fec</import>
- <make>fec.async_encoder($encoder, $packed, $rev_unpack, $rev_pack, $mtu)</make>
-
- <param>
- <name>Encoder Obj.</name>
- <key>encoder</key>
- <type>raw</type>
- </param>
-
- <param>
- <name>MTU (bytes)</name>
- <key>mtu</key>
- <value>1500</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Packed</name>
- <key>packed</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- </param>
-
- <param>
- <name>Rev. Unpacking</name>
- <key>rev_unpack</key>
- <value>True</value>
- <type>enum</type>
- <hide>#if $packed() == 'True' then 'part' else 'all'#</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Rev. Packing</name>
- <key>rev_pack</key>
- <value>True</value>
- <type>enum</type>
- <hide>#if $packed() == 'True' then 'part' else 'all'#</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <sink>
- <name>in</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
-
- <source>
- <name>out</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-
- <doc>
- </doc>
-
-</block>
diff --git a/gr-fec/grc/fec_ber_bf.block.yml b/gr-fec/grc/fec_ber_bf.block.yml
new file mode 100644
index 0000000000..65bb2747f0
--- /dev/null
+++ b/gr-fec/grc/fec_ber_bf.block.yml
@@ -0,0 +1,37 @@
+id: fec_ber_bf
+label: BER
+
+parameters:
+- id: test_mode
+ label: Test Mode
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+- id: berminerrors
+ label: BER Min. Errors
+ dtype: int
+ default: '100'
+ hide: ${ ('part' if test_mode else 'all') }
+- id: berlimit
+ label: BER Limit
+ dtype: float
+ default: '-7.0'
+ hide: ${ ('part' if test_mode else 'all') }
+
+inputs:
+- label: in0
+ domain: stream
+ dtype: byte
+- label: in1
+ domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.ber_bf(${test_mode}, ${berminerrors}, ${berlimit})
+
+file_format: 1
diff --git a/gr-fec/grc/fec_ber_bf.xml b/gr-fec/grc/fec_ber_bf.xml
deleted file mode 100644
index 6d8d85e9ff..0000000000
--- a/gr-fec/grc/fec_ber_bf.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>BER</name>
- <key>fec_ber_bf</key>
- <import>from gnuradio import fec</import>
- <make>fec.ber_bf($test_mode, $berminerrors, $berlimit)</make>
-
- <param>
- <name>Test Mode</name>
- <key>test_mode</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>False</name>
- <key>False</key>
- </option>
- <option>
- <name>True</name>
- <key>True</key>
- </option>
- </param>
-
- <param>
- <name>BER Min. Errors</name>
- <key>berminerrors</key>
- <value>100</value>
- <type>int</type>
- <hide>#if $test_mode() then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <name>BER Limit</name>
- <key>berlimit</key>
- <value>-7.0</value>
- <type>float</type>
- <hide>#if $test_mode() then 'part' else 'all'#</hide>
- </param>
-
- <sink>
- <name>in0</name>
- <type>byte</type>
- </sink>
-
- <sink>
- <name>in1</name>
- <type>byte</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-
-</block> \ No newline at end of file
diff --git a/gr-fec/grc/fec_bercurve_generator.block.yml b/gr-fec/grc/fec_bercurve_generator.block.yml
new file mode 100644
index 0000000000..565a0cf6cd
--- /dev/null
+++ b/gr-fec/grc/fec_bercurve_generator.block.yml
@@ -0,0 +1,63 @@
+id: fec_bercurve_generator
+label: BER Curve Gen.
+
+parameters:
+- id: esno
+ label: Es/N0
+ dtype: raw
+ default: numpy.arange(0.0, 4.0, .5)
+ hide: part
+- id: samp_rate
+ label: Sample Rate
+ dtype: float
+ default: '3200000'
+- id: encoder_list
+ label: Encoder list
+ dtype: raw
+ default: '0'
+- id: decoder_list
+ label: Decoder list
+ dtype: raw
+ default: '0'
+- id: puncpat
+ label: Puncture Pat.
+ dtype: string
+ default: '''11'''
+- id: threadtype
+ label: Threading Type
+ dtype: enum
+ options: ['"capillary"', '"ordinary"', '"none"']
+ option_labels: [Capillary, Ordinary, None]
+ hide: part
+- id: seed
+ label: Noise Seed
+ dtype: int
+ default: '0'
+ hide: part
+
+outputs:
+- domain: stream
+ dtype: byte
+ multiplicity: ${ len(esno)*2 }
+
+templates:
+ imports: |-
+ from gnuradio import fec
+ import numpy
+ make: "fec.bercurve_generator(\n\t${encoder_list}, \\#size\n\t${decoder_list},\
+ \ \\#name\n\t${esno}, \\#range of esnos\n\t${samp_rate}, \\#throttle\n \
+ \ ${threadtype}, \\#threading mode\n\t${puncpat}, \\#puncture pattern\n\
+ \ ${seed} \\# noise gen. seed\n)\n "
+
+documentation: |-
+ Note that this block tries to launch many parallel codes to run simultaneously. Thus, it requires that the definitions for each encoder and decoder (specified in the "Encoder list" and "Decoder list") be configured with a parallelism > 0. If the parallelism for one of the encoder or decoder definition blocks is configured to 0, you will likely see an error like:
+
+ generic_decoder=decoder_list[i],
+ TypeError: 'generic_decoder_sptr' object does not support indexing
+
+ or
+
+ generic_encoder=encoder_list[i],
+ TypeError: 'generic_encoder_sptr' object does not support indexing
+
+file_format: 1
diff --git a/gr-fec/grc/fec_bercurve_generator.xml b/gr-fec/grc/fec_bercurve_generator.xml
deleted file mode 100644
index 5dfc7c6714..0000000000
--- a/gr-fec/grc/fec_bercurve_generator.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## BER Curve Generator
-###################################################
- -->
-<block>
- <name>BER Curve Gen.</name>
- <key>fec_bercurve_generator</key>
- <import>from gnuradio import fec</import>
- <import>import numpy</import>
- <make>fec.bercurve_generator(
- $encoder_list, \#size
- $decoder_list, \#name
- $esno, \#range of esnos
- $samp_rate, \#throttle
- $threadtype, \#threading mode
- $puncpat, \#puncture pattern
- $seed \# noise gen. seed
-)
- </make>
-
- <param>
- <name>Es/N0</name>
- <key>esno</key>
- <value>numpy.arange(0.0, 4.0, .5)</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>3200000</value>
- <type>float</type>
- </param>
-
- <param>
- <name>Encoder list</name>
- <key>encoder_list</key>
- <value>0</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>Decoder list</name>
- <key>decoder_list</key>
- <value>0</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>Puncture Pat.</name>
- <key>puncpat</key>
- <value>'11'</value>
- <type>string</type>
- </param>
-
- <param>
- <name>Threading Type</name>
- <key>threadtype</key>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Capillary</name>
- <key>"capillary"</key>
- </option>
- <option>
- <name>Ordinary</name>
- <key>"ordinary"</key>
- </option>
- <option>
- <name>None</name>
- <key>"none"</key>
- </option>
- </param>
-
- <param>
- <name>Noise Seed</name>
- <key>seed</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- </param>
-
- <bus_source>1</bus_source>
-
- <source>
- <name>out</name>
- <type>byte</type>
- <nports>len($esno)*2</nports>
- </source>
-
- <doc>
- Note that this block tries to launch many parallel codes to run simultaneously. Thus, it requires that the definitions for each encoder and decoder (specified in the "Encoder list" and "Decoder list") be configured with a parallelism > 0. If the parallelism for one of the encoder or decoder definition blocks is configured to 0, you will likely see an error like:
-
- generic_decoder=decoder_list[i],
- TypeError: 'generic_decoder_sptr' object does not support indexing
-
- or
-
- generic_encoder=encoder_list[i],
- TypeError: 'generic_encoder_sptr' object does not support indexing
- </doc>
-</block>
diff --git a/gr-fec/grc/fec_block_tree.xml b/gr-fec/grc/fec_block_tree.xml
deleted file mode 100644
index b1535e3c42..0000000000
--- a/gr-fec/grc/fec_block_tree.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Block Tree for gr-fec
-###################################################
- -->
-<cat>
- <name>[Core]</name>
- <cat>
- <name>Error Coding</name>
- <cat>
- <name>Decoders</name>
- <block>variable_cc_decoder_def</block>
- <block>variable_repetition_decoder_def</block>
- <block>variable_ldpc_decoder_def</block>
- <block>variable_ldpc_bit_flip_decoder_def</block>
- <block>variable_tpc_decoder_def</block>
- <block>variable_dummy_decoder_def</block>
- <block>variable_polar_decoder_sc_def</block>
- <block>variable_polar_decoder_sc_list_def</block>
- <block>variable_polar_decoder_sc_systematic_def</block>
- </cat>
- <cat>
- <name>Encoders</name>
- <block>variable_cc_encoder_def</block>
- <block>variable_ccsds_encoder_def</block>
- <block>variable_repetition_encoder_def</block>
- <block>variable_tpc_encoder_def</block>
- <block>variable_ldpc_encoder_def</block>
- <block>variable_ldpc_encoder_G_def</block>
- <block>variable_ldpc_encoder_H_def</block>
- <block>variable_polar_encoder_def</block>
- <block>variable_polar_encoder_systematic_def</block>
- <block>variable_dummy_encoder_def</block>
- </cat>
- <block>fec_extended_encoder</block>
- <block>fec_extended_async_encoder</block>
- <block>fec_extended_tagged_encoder</block>
- <block>fec_extended_decoder</block>
- <block>fec_extended_tagged_decoder</block>
- <block>fec_generic_encoder</block>
- <block>fec_generic_decoder</block>
- <block>fec_tagged_encoder</block>
- <block>fec_tagged_decoder</block>
- <block>fec_async_encoder</block>
- <block>fec_async_decoder</block>
- <block>fec_decode_ccsds_27_fb</block>
- <block>fec_encode_ccsds_27_bb</block>
- <block>fec_puncture_xx</block>
- <block>fec_depuncture_bb</block>
- <block>fec_ber_bf</block>
- <block>fec_bercurve_generator</block>
- <block>variable_polar_code_configurator</block>
- <block>variable_ldpc_H_matrix_def</block>
- <block>variable_ldpc_G_matrix_def</block>
- </cat>
-</cat>
diff --git a/gr-fec/grc/fec_decode_ccsds_27_bb.block.yml b/gr-fec/grc/fec_decode_ccsds_27_bb.block.yml
new file mode 100644
index 0000000000..310b54e4e2
--- /dev/null
+++ b/gr-fec/grc/fec_decode_ccsds_27_bb.block.yml
@@ -0,0 +1,16 @@
+id: fec_encode_ccsds_27_bb
+label: Encode CCSDS 27
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.encode_ccsds_27_bb()
+
+file_format: 1
diff --git a/gr-fec/grc/fec_decode_ccsds_27_bb.xml b/gr-fec/grc/fec_decode_ccsds_27_bb.xml
deleted file mode 100644
index ea11837c11..0000000000
--- a/gr-fec/grc/fec_decode_ccsds_27_bb.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Encode CCSDS 27
-###################################################
- -->
-<block>
- <name>Encode CCSDS 27</name>
- <key>fec_encode_ccsds_27_bb</key>
- <import>from gnuradio import fec</import>
- <make>fec.encode_ccsds_27_bb()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-fec/grc/fec_decode_ccsds_27_fb.block.yml b/gr-fec/grc/fec_decode_ccsds_27_fb.block.yml
new file mode 100644
index 0000000000..51eed3783d
--- /dev/null
+++ b/gr-fec/grc/fec_decode_ccsds_27_fb.block.yml
@@ -0,0 +1,16 @@
+id: fec_decode_ccsds_27_fb
+label: Decode CCSDS 27
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.decode_ccsds_27_fb()
+
+file_format: 1
diff --git a/gr-fec/grc/fec_decode_ccsds_27_fb.xml b/gr-fec/grc/fec_decode_ccsds_27_fb.xml
deleted file mode 100644
index f7bd9d3b5c..0000000000
--- a/gr-fec/grc/fec_decode_ccsds_27_fb.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Decode CCSDS 27
-###################################################
- -->
-<block>
- <name>Decode CCSDS 27</name>
- <key>fec_decode_ccsds_27_fb</key>
- <import>from gnuradio import fec</import>
- <make>fec.decode_ccsds_27_fb()</make>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-fec/grc/fec_decoder.block.yml b/gr-fec/grc/fec_decoder.block.yml
new file mode 100644
index 0000000000..b90a4749c4
--- /dev/null
+++ b/gr-fec/grc/fec_decoder.block.yml
@@ -0,0 +1,41 @@
+id: fec_generic_decoder
+label: FEC Decoder
+
+parameters:
+- id: decoder
+ label: Decoder Object
+ dtype: raw
+ default: decoder_variable
+- id: itype
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: otype
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ itype }
+
+outputs:
+- domain: stream
+ dtype: ${ otype }
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.decoder(${decoder}, ${itype.size}, ${otype.size})
+
+documentation: |-
+ This is a GNU Radio adaptor for any FEC decoder following the generic_decoder API in the fec module. Input and output are flexible to accomodate decoders that, say, modulate their encoded results into complex or float types.
+
+file_format: 1
diff --git a/gr-fec/grc/fec_decoder.xml b/gr-fec/grc/fec_decoder.xml
deleted file mode 100644
index dd9d08d5f6..0000000000
--- a/gr-fec/grc/fec_decoder.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>FEC Decoder</name>
- <key>fec_generic_decoder</key>
- <import>from gnuradio import fec</import>
- <make>fec.decoder($decoder, $itype.size, $otype.size)</make>
-
- <param>
- <name>Decoder Object</name>
- <key>decoder</key>
- <value>decoder_variable</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>Input Type</name>
- <key>itype</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
-
- <param>
- <name>Output Type</name>
- <key>otype</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
-
- <sink>
- <name>in</name>
- <type>$itype</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>$otype</type>
- </source>
-
- <doc>
- This is a GNU Radio adaptor for any FEC decoder following the generic_decoder API in the fec module. Input and output are flexible to accomodate decoders that, say, modulate their encoded results into complex or float types.
- </doc>
-
-</block> \ No newline at end of file
diff --git a/gr-fec/grc/fec_depuncture_bb.block.yml b/gr-fec/grc/fec_depuncture_bb.block.yml
new file mode 100644
index 0000000000..24a3e62fcc
--- /dev/null
+++ b/gr-fec/grc/fec_depuncture_bb.block.yml
@@ -0,0 +1,33 @@
+id: fec_depuncture_bb
+label: Depuncture
+
+parameters:
+- id: puncsize
+ label: Puncture Size
+ dtype: int
+- id: puncpat
+ label: Puncture Pattern
+ dtype: int
+- id: delay
+ label: Delay
+ dtype: int
+ default: '0'
+- id: sym
+ label: Symbol
+ dtype: int
+ default: '127'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.depuncture_bb(${puncsize}, ${puncpat}, ${delay}, ${sym})
+
+file_format: 1
diff --git a/gr-fec/grc/fec_depuncture_bb.xml b/gr-fec/grc/fec_depuncture_bb.xml
deleted file mode 100644
index 03dec9bd70..0000000000
--- a/gr-fec/grc/fec_depuncture_bb.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>Depuncture</name>
- <key>fec_depuncture_bb</key>
- <import>from gnuradio import fec</import>
- <make>fec.depuncture_bb($puncsize, $puncpat, $delay, $sym)</make>
-
- <param>
- <name>Puncture Size</name>
- <key>puncsize</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Puncture Pattern</name>
- <key>puncpat</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Delay</name>
- <key>delay</key>
- <value>0</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Symbol</name>
- <key>sym</key>
- <value>127</value>
- <type>int</type>
- <hide>part</hide>
- </param>
-
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-
-</block>
diff --git a/gr-fec/grc/fec_encoder.block.yml b/gr-fec/grc/fec_encoder.block.yml
new file mode 100644
index 0000000000..f530d806dc
--- /dev/null
+++ b/gr-fec/grc/fec_encoder.block.yml
@@ -0,0 +1,41 @@
+id: fec_generic_encoder
+label: FEC Encoder
+
+parameters:
+- id: encoder
+ label: Constituent Encoder
+ dtype: raw
+ default: encoder_variable
+- id: itype
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: otype
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ itype }
+
+outputs:
+- domain: stream
+ dtype: ${ otype }
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.encoder(${encoder}, ${itype.size}, ${otype.size})
+
+documentation: |-
+ This is a GNU Radio adaptor for any FEC encoder following the generic_encoder API in the fec module. Input and output are flexible to accomodate encoders that, say, modulate their encoded results into complex or float types.
+
+file_format: 1
diff --git a/gr-fec/grc/fec_encoder.xml b/gr-fec/grc/fec_encoder.xml
deleted file mode 100644
index defb7c3b46..0000000000
--- a/gr-fec/grc/fec_encoder.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>FEC Encoder</name>
- <key>fec_generic_encoder</key>
- <import>from gnuradio import fec</import>
- <make>fec.encoder($encoder, $itype.size, $otype.size)</make>
-
- <param>
- <name>Constituent Encoder</name>
- <key>encoder</key>
- <value>encoder_variable</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>Input Type</name>
- <key>itype</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
-
- <param>
- <name>Output Type</name>
- <key>otype</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
-
- <sink>
- <name>in</name>
- <type>$itype</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>$otype</type>
- </source>
-
- <doc>
- This is a GNU Radio adaptor for any FEC encoder following the generic_encoder API in the fec module. Input and output are flexible to accomodate encoders that, say, modulate their encoded results into complex or float types.
- </doc>
-
-</block> \ No newline at end of file
diff --git a/gr-fec/grc/fec_extended_async_encoder.block.yml b/gr-fec/grc/fec_extended_async_encoder.block.yml
new file mode 100644
index 0000000000..87fb0918ef
--- /dev/null
+++ b/gr-fec/grc/fec_extended_async_encoder.block.yml
@@ -0,0 +1,30 @@
+id: fec_extended_async_encoder
+label: FEC Extended Async Encoder
+
+parameters:
+- id: encoder_list
+ label: Encoder Objects
+ dtype: raw
+ default: encoder_variable
+- id: puncpat
+ label: Puncture Pattern
+ dtype: string
+ default: '''11'''
+
+inputs:
+- domain: message
+ id: in
+ optional: true
+
+outputs:
+- domain: message
+ id: out
+ optional: true
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.extended_async_encoder(encoder_obj_list=${encoder_list}, puncpat=${puncpat})
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/fec_extended_async_encoder.xml b/gr-fec/grc/fec_extended_async_encoder.xml
deleted file mode 100644
index e61696bcc4..0000000000
--- a/gr-fec/grc/fec_extended_async_encoder.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>FEC Extended Async Encoder</name>
- <key>fec_extended_async_encoder</key>
- <import>from gnuradio import fec</import>
- <make>fec.extended_async_encoder(encoder_obj_list=$encoder_list, puncpat=$puncpat)</make>
-
- <param>
- <name>Encoder Objects</name>
- <key>encoder_list</key>
- <value>encoder_variable</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>Puncture Pattern</name>
- <key>puncpat</key>
- <value>'11'</value>
- <type>string</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
-
- <source>
- <name>out</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-
- <doc>
-
- </doc>
-
-</block>
diff --git a/gr-fec/grc/fec_extended_decoder.block.yml b/gr-fec/grc/fec_extended_decoder.block.yml
new file mode 100644
index 0000000000..6e8fb23dbb
--- /dev/null
+++ b/gr-fec/grc/fec_extended_decoder.block.yml
@@ -0,0 +1,44 @@
+id: fec_extended_decoder
+label: FEC Extended Decoder
+
+parameters:
+- id: value
+ label: fake val
+ dtype: string
+ default: fec_extended_decoder
+ hide: all
+- id: decoder_list
+ label: Decoder Objects
+ dtype: raw
+ default: decoder_variable
+- id: threadtype
+ label: Threading Type
+ dtype: enum
+ options: [capillary, ordinary, none]
+ option_attributes:
+ arg: ['''capillary''', '''ordinary''', ' None']
+- id: ann
+ label: Annihilator
+ dtype: raw
+ default: None
+- id: puncpat
+ label: Puncture Pattern
+ dtype: string
+ default: '''11'''
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.extended_decoder(decoder_obj_list=${decoder_list}, threading=${threadtype.arg},
+ ann=${ann}, puncpat=${puncpat}, integration_period=10000)
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/fec_extended_decoder.xml b/gr-fec/grc/fec_extended_decoder.xml
deleted file mode 100644
index 9ed2f06bd0..0000000000
--- a/gr-fec/grc/fec_extended_decoder.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>FEC Extended Decoder</name>
- <key>fec_extended_decoder</key>
- <import>from gnuradio import fec</import>
- <make>fec.extended_decoder(decoder_obj_list=$decoder_list, threading=$threadtype.arg, ann=$ann, puncpat=$puncpat, integration_period=10000)</make>
-
- <param>
- <name>fake val</name>
- <key>value</key>
- <value>fec_extended_decoder</value>
- <type>string</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>Decoder Objects</name>
- <key>decoder_list</key>
- <value>decoder_variable</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>Threading Type</name>
- <key>threadtype</key>
- <type>enum</type>
- <option>
- <name>Capillary</name>
- <key>capillary</key>
- <opt>arg:'capillary'</opt>
- </option>
- <option>
- <name>Ordinary</name>
- <key>ordinary</key>
- <opt>arg:'ordinary'</opt>
- </option>
- <option>
- <name>None</name>
- <key>none</key>
- <opt>arg: None</opt>
- </option>
- </param>
-
- <param>
- <name>Annihilator</name>
- <key>ann</key>
- <value>None</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>Puncture Pattern</name>
- <key>puncpat</key>
- <value>'11'</value>
- <type>string</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-
- <doc>
-
- </doc>
-
-</block>
diff --git a/gr-fec/grc/fec_extended_encoder.block.yml b/gr-fec/grc/fec_extended_encoder.block.yml
new file mode 100644
index 0000000000..b478e9bbf6
--- /dev/null
+++ b/gr-fec/grc/fec_extended_encoder.block.yml
@@ -0,0 +1,35 @@
+id: fec_extended_encoder
+label: FEC Extended Encoder
+
+parameters:
+- id: encoder_list
+ label: Encoder Objects
+ dtype: raw
+ default: encoder_variable
+- id: threadtype
+ label: Threading Type
+ dtype: enum
+ options: [capillary, ordinary, none]
+ option_attributes:
+ arg: ['''capillary''', '''ordinary''', ' None']
+- id: puncpat
+ label: Puncture Pattern
+ dtype: string
+ default: '''11'''
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.extended_encoder(encoder_obj_list=${encoder_list}, threading=${threadtype.arg},
+ puncpat=${puncpat})
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/fec_extended_encoder.xml b/gr-fec/grc/fec_extended_encoder.xml
deleted file mode 100644
index d2a3ec87db..0000000000
--- a/gr-fec/grc/fec_extended_encoder.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>FEC Extended Encoder</name>
- <key>fec_extended_encoder</key>
- <import>from gnuradio import fec</import>
- <make>fec.extended_encoder(encoder_obj_list=$encoder_list, threading=$threadtype.arg, puncpat=$puncpat)</make>
-
- <param>
- <name>Encoder Objects</name>
- <key>encoder_list</key>
- <value>encoder_variable</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>Threading Type</name>
- <key>threadtype</key>
- <type>enum</type>
- <option>
- <name>Capillary</name>
- <key>capillary</key>
- <opt>arg:'capillary'</opt>
- </option>
- <option>
- <name>Ordinary</name>
- <key>ordinary</key>
- <opt>arg:'ordinary'</opt>
- </option>
- <option>
- <name>None</name>
- <key>none</key>
- <opt>arg: None</opt>
- </option>
- </param>
-
- <param>
- <name>Puncture Pattern</name>
- <key>puncpat</key>
- <value>'11'</value>
- <type>string</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-
- <doc>
-
- </doc>
-
-</block>
diff --git a/gr-fec/grc/fec_extended_tagged_decoder.block.yml b/gr-fec/grc/fec_extended_tagged_decoder.block.yml
new file mode 100644
index 0000000000..7a22e092f4
--- /dev/null
+++ b/gr-fec/grc/fec_extended_tagged_decoder.block.yml
@@ -0,0 +1,47 @@
+id: fec_extended_tagged_decoder
+label: FEC Extended Tagged Decoder
+
+parameters:
+- id: value
+ label: fake val
+ dtype: string
+ default: fec_extended_decoder
+ hide: all
+- id: decoder_list
+ label: Decoder Objects
+ dtype: raw
+ default: decoder_variable
+- id: mtu
+ label: MTU (bytes)
+ dtype: int
+ default: '1500'
+- id: ann
+ label: Annihilator
+ dtype: raw
+ default: None
+- id: puncpat
+ label: Puncture Pattern
+ dtype: string
+ default: '''11'''
+- id: lentagname
+ label: Length Tag Name
+ dtype: string
+ default: None
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import fec
+ make: self.${id} = ${id} = fec.extended_tagged_decoder(decoder_obj_list=${decoder_list},
+ ann=${ann}, puncpat=${puncpat}, integration_period=10000, lentagname=${lentagname},
+ mtu=${mtu})
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/fec_extended_tagged_decoder.xml b/gr-fec/grc/fec_extended_tagged_decoder.xml
deleted file mode 100644
index 59f34d4df9..0000000000
--- a/gr-fec/grc/fec_extended_tagged_decoder.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>FEC Extended Tagged Decoder</name>
- <key>fec_extended_tagged_decoder</key>
- <import>from gnuradio import fec</import>
- <make>self.$(id) = $(id) = fec.extended_tagged_decoder(decoder_obj_list=$decoder_list, ann=$ann, puncpat=$puncpat, integration_period=10000, lentagname=$lentagname, mtu=$mtu)</make>
-
- <param>
- <name>fake val</name>
- <key>value</key>
- <value>fec_extended_decoder</value>
- <type>string</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>Decoder Objects</name>
- <key>decoder_list</key>
- <value>decoder_variable</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>MTU (bytes)</name>
- <key>mtu</key>
- <value>1500</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Annihilator</name>
- <key>ann</key>
- <value>None</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>Puncture Pattern</name>
- <key>puncpat</key>
- <value>'11'</value>
- <type>string</type>
- </param>
-
- <param>
- <name>Length Tag Name</name>
- <key>lentagname</key>
- <value>None</value>
- <type>string</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-
- <doc>
-
- </doc>
-
-</block>
diff --git a/gr-fec/grc/fec_extended_tagged_encoder.block.yml b/gr-fec/grc/fec_extended_tagged_encoder.block.yml
new file mode 100644
index 0000000000..e59ab3365d
--- /dev/null
+++ b/gr-fec/grc/fec_extended_tagged_encoder.block.yml
@@ -0,0 +1,37 @@
+id: fec_extended_tagged_encoder
+label: FEC Extended Tagged Encoder
+
+parameters:
+- id: encoder_list
+ label: Encoder Objects
+ dtype: raw
+ default: encoder_variable
+- id: mtu
+ label: MTU (bytes)
+ dtype: int
+ default: '1500'
+- id: puncpat
+ label: Puncture Pattern
+ dtype: string
+ default: '''11'''
+- id: lentagname
+ label: Length Tag Name
+ dtype: string
+ default: None
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.extended_tagged_encoder(encoder_obj_list=${encoder_list}, puncpat=${puncpat},
+ lentagname=${lentagname}, mtu=${mtu})
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/fec_extended_tagged_encoder.xml b/gr-fec/grc/fec_extended_tagged_encoder.xml
deleted file mode 100644
index 92df08079a..0000000000
--- a/gr-fec/grc/fec_extended_tagged_encoder.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>FEC Extended Tagged Encoder</name>
- <key>fec_extended_tagged_encoder</key>
- <import>from gnuradio import fec</import>
- <make>fec.extended_tagged_encoder(encoder_obj_list=$encoder_list, puncpat=$puncpat, lentagname=$lentagname, mtu=$mtu)</make>
-
- <param>
- <name>Encoder Objects</name>
- <key>encoder_list</key>
- <value>encoder_variable</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>MTU (bytes)</name>
- <key>mtu</key>
- <value>1500</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Puncture Pattern</name>
- <key>puncpat</key>
- <value>'11'</value>
- <type>string</type>
- </param>
-
- <param>
- <name>Length Tag Name</name>
- <key>lentagname</key>
- <value>None</value>
- <type>string</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-
- <doc>
-
- </doc>
-
-</block>
diff --git a/gr-fec/grc/fec_puncture_xx.block.yml b/gr-fec/grc/fec_puncture_xx.block.yml
new file mode 100644
index 0000000000..de7cf16cab
--- /dev/null
+++ b/gr-fec/grc/fec_puncture_xx.block.yml
@@ -0,0 +1,35 @@
+id: fec_puncture_xx
+label: Puncture
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [byte, float]
+ option_attributes:
+ fcn: [bb, ff]
+ hide: part
+- id: puncsize
+ label: Puncture Size
+ dtype: int
+- id: puncpat
+ label: Puncture Pattern
+ dtype: int
+- id: delay
+ label: Delay
+ dtype: int
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.puncture_${type.fcn}(${puncsize}, ${puncpat}, ${delay})
+
+file_format: 1
diff --git a/gr-fec/grc/fec_puncture_xx.xml b/gr-fec/grc/fec_puncture_xx.xml
deleted file mode 100644
index 1075a1c062..0000000000
--- a/gr-fec/grc/fec_puncture_xx.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>Puncture</name>
- <key>fec_puncture_xx</key>
- <import>from gnuradio import fec</import>
- <make>fec.puncture_$(type.fcn)($puncsize, $puncpat, $delay)</make>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:bb</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- </param>
-
- <param>
- <name>Puncture Size</name>
- <key>puncsize</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Puncture Pattern</name>
- <key>puncpat</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Delay</name>
- <key>delay</key>
- <value>0</value>
- <type>int</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-
-</block>
diff --git a/gr-fec/grc/fec_tagged_decoder.block.yml b/gr-fec/grc/fec_tagged_decoder.block.yml
new file mode 100644
index 0000000000..7856bb6794
--- /dev/null
+++ b/gr-fec/grc/fec_tagged_decoder.block.yml
@@ -0,0 +1,47 @@
+id: fec_tagged_decoder
+label: FEC Tagged Decoder
+
+parameters:
+- id: decoder
+ label: Constituent Decoder
+ dtype: raw
+ default: decoder_variable
+- id: mtu
+ label: MTU (bytes)
+ dtype: int
+ default: '1500'
+- id: itype
+ label: Input Type
+ dtype: enum
+ options: [byte, float]
+ option_attributes:
+ size: [gr.sizeof_char, gr.sizeof_float]
+ hide: part
+- id: otype
+ label: Output Type
+ dtype: enum
+ options: [byte, float]
+ option_attributes:
+ size: [gr.sizeof_char, gr.sizeof_float]
+ hide: part
+- id: lentagname
+ label: Length Tag Name
+ dtype: string
+ default: '"pkt_len"'
+
+inputs:
+- domain: stream
+ dtype: ${ itype }
+
+outputs:
+- domain: stream
+ dtype: ${ otype }
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.tagged_decoder(${decoder}, ${itype.size}, ${otype.size}, ${lentagname},
+ ${mtu})
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/fec_tagged_decoder.xml b/gr-fec/grc/fec_tagged_decoder.xml
deleted file mode 100644
index 1ea20bd085..0000000000
--- a/gr-fec/grc/fec_tagged_decoder.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>FEC Tagged Decoder</name>
- <key>fec_tagged_decoder</key>
- <import>from gnuradio import fec</import>
- <make>fec.tagged_decoder($decoder, $itype.size, $otype.size, $lentagname, $mtu)</make>
-
- <param>
- <name>Constituent Decoder</name>
- <key>decoder</key>
- <value>decoder_variable</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>MTU (bytes)</name>
- <key>mtu</key>
- <value>1500</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Input Type</name>
- <key>itype</key>
- <type>enum</type>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- </param>
-
- <param>
- <name>Output Type</name>
- <key>otype</key>
- <type>enum</type>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- </param>
-
- <param>
- <name>Length Tag Name</name>
- <key>lentagname</key>
- <value>"pkt_len"</value>
- <type>string</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>$itype</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>$otype</type>
- </source>
-
- <doc>
- </doc>
-
-</block>
diff --git a/gr-fec/grc/fec_tagged_encoder.block.yml b/gr-fec/grc/fec_tagged_encoder.block.yml
new file mode 100644
index 0000000000..bf675e4188
--- /dev/null
+++ b/gr-fec/grc/fec_tagged_encoder.block.yml
@@ -0,0 +1,47 @@
+id: fec_tagged_encoder
+label: FEC Tagged Encoder
+
+parameters:
+- id: encoder
+ label: Constituent Encoder
+ dtype: raw
+ default: encoder_variable
+- id: mtu
+ label: MTU (bytes)
+ dtype: int
+ default: '1500'
+- id: itype
+ label: Input Type
+ dtype: enum
+ options: [byte, float]
+ option_attributes:
+ size: [gr.sizeof_char, gr.sizeof_float]
+ hide: part
+- id: otype
+ label: Output Type
+ dtype: enum
+ options: [byte, float]
+ option_attributes:
+ size: [gr.sizeof_char, gr.sizeof_float]
+ hide: part
+- id: lentagname
+ label: Length Tag Name
+ dtype: string
+ default: '"pkt_len"'
+
+inputs:
+- domain: stream
+ dtype: ${ itype }
+
+outputs:
+- domain: stream
+ dtype: ${ otype }
+
+templates:
+ imports: from gnuradio import fec
+ make: fec.tagged_encoder(${encoder}, ${itype.size}, ${otype.size}, ${lentagname},
+ ${mtu})
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/fec_tagged_encoder.xml b/gr-fec/grc/fec_tagged_encoder.xml
deleted file mode 100644
index 30fa20e45c..0000000000
--- a/gr-fec/grc/fec_tagged_encoder.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>FEC Tagged Encoder</name>
- <key>fec_tagged_encoder</key>
- <import>from gnuradio import fec</import>
- <make>fec.tagged_encoder($encoder, $itype.size, $otype.size, $lentagname, $mtu)</make>
-
- <param>
- <name>Constituent Encoder</name>
- <key>encoder</key>
- <value>encoder_variable</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>MTU (bytes)</name>
- <key>mtu</key>
- <value>1500</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Input Type</name>
- <key>itype</key>
- <type>enum</type>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- </param>
-
- <param>
- <name>Output Type</name>
- <key>otype</key>
- <type>enum</type>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- </param>
-
- <param>
- <name>Length Tag Name</name>
- <key>lentagname</key>
- <value>"pkt_len"</value>
- <type>string</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>$itype</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>$otype</type>
- </source>
-
- <doc>
- </doc>
-
-</block>
diff --git a/gr-fec/grc/ldpc_decoder_def_list.block.yml b/gr-fec/grc/ldpc_decoder_def_list.block.yml
new file mode 100644
index 0000000000..8dc32bdc3d
--- /dev/null
+++ b/gr-fec/grc/ldpc_decoder_def_list.block.yml
@@ -0,0 +1,53 @@
+id: variable_ldpc_decoder_def
+label: LDPC Decoder Definition
+
+parameters:
+- id: value
+ label: Ignore Me
+ dtype: raw
+ default: '"ok"'
+ hide: all
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ default: '0'
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '4'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '4'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: file
+ label: AList File
+ dtype: file_open
+- id: sigma
+ label: Sigma
+ dtype: float
+ default: '0.5'
+- id: max_iter
+ label: Max Iterations
+ dtype: int
+ default: '50'
+value: ${ value }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.ldpc_decoder.make(${file},\
+ \ ${sigma}, ${max_iter}); \n% elif int(ndim)==1 #:\nself.${id} = ${id} = map(\
+ \ (lambda a: fec.ldpc_decoder.make(${file}, ${sigma}, ${max_iter})), range(0,${dim1})\
+ \ ); \n% else:\nself.${id} = ${id} = map( (lambda b: map( ( lambda a: fec.ldpc_decoder.make(${file},\
+ \ ${sigma}, ${max_iter})), range(0,${dim2}) ) ), range(0,${dim1})); \n% endif"
+
+documentation: |-
+ This is a soft-decision decoder that uses belief propagation (also known as message passing) that is described at:
+
+ www.cs.toronto.edu/~radford/ftp/LDPC-2012-02-11/decoding.html
+
+ Designed for a memoryless AWGN channel, it assumes a noise variance of the value specified for sigma.
+
+file_format: 1
diff --git a/gr-fec/grc/ldpc_decoder_def_list.xml b/gr-fec/grc/ldpc_decoder_def_list.xml
deleted file mode 100644
index 007f85505c..0000000000
--- a/gr-fec/grc/ldpc_decoder_def_list.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>LDPC Decoder Definition</name>
- <key>variable_ldpc_decoder_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.ldpc_decoder.make($file, $sigma, $max_iter); #slurp
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map( (lambda a: fec.ldpc_decoder.make($file, $sigma, $max_iter)), range(0,$dim1) ); #slurp
-#else
-self.$(id) = $(id) = map( (lambda b: map( ( lambda a: fec.ldpc_decoder.make($file, $sigma, $max_iter)), range(0,$dim2) ) ), range(0,$dim1)); #slurp
-#end if</var_make>
- <make></make>
-
-<!-- This definition below is wierd, it seems required for the GRC to be happy, im confused -->
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value>0</value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>4</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>4</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>AList File</name>
- <key>file</key>
- <type>file_open</type>
- </param>
-
- <param>
- <name>Sigma</name>
- <key>sigma</key>
- <value>0.5</value>
- <type>float</type>
- </param>
-
- <param>
- <name>Max Iterations</name>
- <key>max_iter</key>
- <value>50</value>
- <type>int</type>
- </param>
-
- <doc>
-This is a soft-decision decoder that uses belief propagation (also known as message passing) that is described at:
-
-www.cs.toronto.edu/~radford/ftp/LDPC-2012-02-11/decoding.html
-
-Designed for a memoryless AWGN channel, it assumes a noise variance of the value specified for sigma.
- </doc>
-</block>
diff --git a/gr-fec/grc/ldpc_encoder_def_list.block.yml b/gr-fec/grc/ldpc_encoder_def_list.block.yml
new file mode 100644
index 0000000000..cc31e960d9
--- /dev/null
+++ b/gr-fec/grc/ldpc_encoder_def_list.block.yml
@@ -0,0 +1,38 @@
+id: variable_ldpc_encoder_def
+label: LDPC Encoder Definition
+
+parameters:
+- id: value
+ label: Ignore Me
+ dtype: raw
+ default: '"ok"'
+ hide: all
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ default: '0'
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '4'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: file
+ label: AList File
+ dtype: file_open
+value: ${ fec.ldpc_encoder_make(file) }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.ldpc_encoder_make(${file});\
+ \ \n% elif int(ndim)==1 #:\nself.${id} = ${id} = map( (lambda a: fec.ldpc_encoder_make(${file})),\
+ \ range(0,${dim1}) ); \n% else:\nself.${id} = ${id} = map( (lambda b: map(\
+ \ ( lambda a: fec.ldpc_encoder_make(${file})), range(0,${dim2}) ) ), range(0,${dim1}));\
+ \ \n% endif"
+
+file_format: 1
diff --git a/gr-fec/grc/ldpc_encoder_def_list.xml b/gr-fec/grc/ldpc_encoder_def_list.xml
deleted file mode 100755
index 985568afc5..0000000000
--- a/gr-fec/grc/ldpc_encoder_def_list.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-
-<block>
- <name>LDPC Encoder Definition</name>
- <key>variable_ldpc_encoder_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.ldpc_encoder_make($file); #slurp
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map( (lambda a: fec.ldpc_encoder_make($file)), range(0,$dim1) ); #slurp
-#else
-self.$(id) = $(id) = map( (lambda b: map( ( lambda a: fec.ldpc_encoder_make($file)), range(0,$dim2) ) ), range(0,$dim1)); #slurp
-#end if</var_make>
- <var_value>fec.ldpc_encoder_make($file)</var_value>
- <make></make>
-
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value>0</value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>4</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>AList File</name>
- <key>file</key>
- <value></value>
- <type>file_open</type>
- </param>
-
-</block>
diff --git a/gr-fec/grc/tpc_decoder_def_list.block.yml b/gr-fec/grc/tpc_decoder_def_list.block.yml
new file mode 100644
index 0000000000..94fb55b1b9
--- /dev/null
+++ b/gr-fec/grc/tpc_decoder_def_list.block.yml
@@ -0,0 +1,77 @@
+id: variable_tpc_decoder_def
+label: TPC Decoder Definition
+
+parameters:
+- id: value
+ label: Ignore Me
+ dtype: raw
+ default: '"ok"'
+ hide: all
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ default: '0'
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '4'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '4'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: row_poly
+ label: Row Encoder Polynomials
+ dtype: int_vector
+ default: '[3]'
+- id: col_poly
+ label: Column Encoder Polynomials
+ dtype: int_vector
+ default: '[43]'
+- id: krow
+ label: K Row
+ dtype: int
+ default: '26'
+- id: kcol
+ label: K Col
+ dtype: int
+ default: '6'
+- id: bval
+ label: B
+ dtype: int
+ default: '9'
+- id: qval
+ label: Q
+ dtype: int
+ default: '3'
+- id: max_iter
+ label: NUM Turbo Iterations
+ dtype: int
+ default: '6'
+- id: decoder_type
+ label: Decoder Type
+ dtype: enum
+ options: ['0', '1', '2', '3', '4']
+ option_labels: [Linear LOG-MAP, MAX LOG-MAP, Constant LOG-MAP, LOG-MAP (LUT Correction
+ Factor), LOG-MAP (C Correction Factor)]
+value: ${ value }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.tpc_decoder_make(${row_poly},\
+ \ ${col_poly}, ${krow}, ${kcol}, ${bval}, ${qval}, ${max_iter}, ${decoder_type});\
+ \ \n% elif int(ndim)==1 #:\nself.${id} = ${id} = map( (lambda a: fec.tpc_decoder_make(${row_poly},\
+ \ ${col_poly}, ${krow}, ${kcol}, ${bval}, ${qval}, ${max_iter}, ${decoder_type})),\
+ \ range(0,${dim1}) ); \n% else:\nself.${id} = ${id} = map( (lambda b: map(\
+ \ ( lambda a: fec.tpc_decoder_make(${row_poly}, ${col_poly}, ${krow}, ${kcol},\
+ \ ${bval}, ${qval}, ${max_iter}, ${decoder_type})), range(0,${dim2}) ) ),\
+ \ range(0,${dim1})); \n% endif"
+
+documentation: |-
+ This instantiates a 1-dim array or 2-dim array fo Turbo Product Encoders (TPC).
+ Restrictions: B and Q must be carefully chosen such that when the matrices are setup,
+ and the first B outputs are removed, they (the first B outputs) are all 0's.
+
+file_format: 1
diff --git a/gr-fec/grc/tpc_decoder_def_list.xml b/gr-fec/grc/tpc_decoder_def_list.xml
deleted file mode 100644
index aac08dbb76..0000000000
--- a/gr-fec/grc/tpc_decoder_def_list.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>TPC Decoder Definition</name>
- <key>variable_tpc_decoder_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.tpc_decoder_make($row_poly, $col_poly, $krow, $kcol, $bval, $qval, $max_iter, $decoder_type); #slurp
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map( (lambda a: fec.tpc_decoder_make($row_poly, $col_poly, $krow, $kcol, $bval, $qval, $max_iter, $decoder_type)), range(0,$dim1) ); #slurp
-#else
-self.$(id) = $(id) = map( (lambda b: map( ( lambda a: fec.tpc_decoder_make($row_poly, $col_poly, $krow, $kcol, $bval, $qval, $max_iter, $decoder_type)), range(0,$dim2) ) ), range(0,$dim1)); #slurp
-#end if</var_make>
- <make></make>
-
-<!-- This definition below is wierd, it seems required for the GRC to be happy, im confused -->
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value>0</value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>4</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>4</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Row Encoder Polynomials</name>
- <key>row_poly</key>
- <value>[3]</value>
- <type>int_vector</type>
- </param>
-
- <param>
- <name>Column Encoder Polynomials</name>
- <key>col_poly</key>
- <value>[43]</value>
- <type>int_vector</type>
- </param>
-
- <param>
- <name>K Row</name>
- <key>krow</key>
- <value>26</value>
- <type>int</type>
- </param>
-
- <param>
- <name>K Col</name>
- <key>kcol</key>
- <value>6</value>
- <type>int</type>
- </param>
-
- <param>
- <name>B</name>
- <key>bval</key>
- <value>9</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Q</name>
- <key>qval</key>
- <value>3</value>
- <type>int</type>
- </param>
-
- <param>
- <name>NUM Turbo Iterations</name>
- <key>max_iter</key>
- <value>6</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Decoder Type</name>
- <key>decoder_type</key>
- <value></value>
- <type>enum</type>
- <option>
- <name>Linear LOG-MAP</name>
- <key>0</key>
- </option>
- <option>
- <name>MAX LOG-MAP</name>
- <key>1</key>
- </option>
- <option>
- <name>Constant LOG-MAP</name>
- <key>2</key>
- </option>
- <option>
- <name>LOG-MAP (LUT Correction Factor)</name>
- <key>3</key>
- </option>
- <option>
- <name>LOG-MAP (C Correction Factor)</name>
- <key>4</key>
- </option>
- </param>
-
-
- <doc>
- This instantiates a 1-dim array or 2-dim array fo Turbo Product Encoders (TPC).
- Restrictions: B and Q must be carefully chosen such that when the matrices are setup,
- and the first B outputs are removed, they (the first B outputs) are all 0's.
- </doc>
-</block>
diff --git a/gr-fec/grc/tpc_encoder_def_list.block.yml b/gr-fec/grc/tpc_encoder_def_list.block.yml
new file mode 100644
index 0000000000..9e47207750
--- /dev/null
+++ b/gr-fec/grc/tpc_encoder_def_list.block.yml
@@ -0,0 +1,66 @@
+id: variable_tpc_encoder_def
+label: TPC Encoder Definition
+
+parameters:
+- id: value
+ label: Ignore Me
+ dtype: raw
+ default: '"ok"'
+ hide: all
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ default: '0'
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '4'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '4'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: row_poly
+ label: Row Encoder Polynomials
+ dtype: int_vector
+ default: '[3]'
+- id: col_poly
+ label: Column Encoder Polynomials
+ dtype: int_vector
+ default: '[43]'
+- id: krow
+ label: K Row
+ dtype: int
+ default: '26'
+- id: kcol
+ label: K Col
+ dtype: int
+ default: '6'
+- id: bval
+ label: B
+ dtype: int
+ default: '9'
+- id: qval
+ label: Q
+ dtype: int
+ default: '3'
+value: ${ value }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.tpc_encoder_make(${row_poly},\
+ \ ${col_poly}, ${krow}, ${kcol}, ${bval}, ${qval}); \n% elif int(ndim)==1\
+ \ #:\nself.${id} = ${id} = map( (lambda a: fec.tpc_encoder_make(${row_poly},\
+ \ ${col_poly}, ${krow}, ${kcol}, ${bval}, ${qval})), range(0,${dim1}) ); \n\
+ % else:\nself.${id} = ${id} = map( (lambda b: map( ( lambda a: fec.tpc_encoder_make(${row_poly},\
+ \ ${col_poly}, ${krow}, ${kcol}, ${bval}, ${qval})), range(0,${dim2}) ) ),\
+ \ range(0,${dim1})); \n% endif"
+
+documentation: |-
+ This instantiates a 1-dim array or 2-dim array fo Turbo Product Encoders (TPC).
+ Restrictions: B and Q must be carefully chosen such that when the matrices are setup,
+ and the first B outputs are removed, they (the first B outputs) are all 0's.
+
+file_format: 1
diff --git a/gr-fec/grc/tpc_encoder_def_list.xml b/gr-fec/grc/tpc_encoder_def_list.xml
deleted file mode 100755
index c035795b58..0000000000
--- a/gr-fec/grc/tpc_encoder_def_list.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>TPC Encoder Definition</name>
- <key>variable_tpc_encoder_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.tpc_encoder_make($row_poly, $col_poly, $krow, $kcol, $bval, $qval); #slurp
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map( (lambda a: fec.tpc_encoder_make($row_poly, $col_poly, $krow, $kcol, $bval, $qval)), range(0,$dim1) ); #slurp
-#else
-self.$(id) = $(id) = map( (lambda b: map( ( lambda a: fec.tpc_encoder_make($row_poly, $col_poly, $krow, $kcol, $bval, $qval)), range(0,$dim2) ) ), range(0,$dim1)); #slurp
-#end if</var_make>
- <make></make>
-
-<!-- This definition below is wierd, it seems required for the GRC to be happy, im confused -->
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value>0</value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>4</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>4</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Row Encoder Polynomials</name>
- <key>row_poly</key>
- <value>[3]</value>
- <type>int_vector</type>
- </param>
-
- <param>
- <name>Column Encoder Polynomials</name>
- <key>col_poly</key>
- <value>[43]</value>
- <type>int_vector</type>
- </param>
-
- <param>
- <name>K Row</name>
- <key>krow</key>
- <value>26</value>
- <type>int</type>
- </param>
-
- <param>
- <name>K Col</name>
- <key>kcol</key>
- <value>6</value>
- <type>int</type>
- </param>
-
- <param>
- <name>B</name>
- <key>bval</key>
- <value>9</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Q</name>
- <key>qval</key>
- <value>3</value>
- <type>int</type>
- </param>
-
- <doc>
- This instantiates a 1-dim array or 2-dim array fo Turbo Product Encoders (TPC).
- Restrictions: B and Q must be carefully chosen such that when the matrices are setup,
- and the first B outputs are removed, they (the first B outputs) are all 0's.
- </doc>
-</block>
diff --git a/gr-fec/grc/variable_cc_decoder_def_list.block.yml b/gr-fec/grc/variable_cc_decoder_def_list.block.yml
new file mode 100644
index 0000000000..0dd4aa86b2
--- /dev/null
+++ b/gr-fec/grc/variable_cc_decoder_def_list.block.yml
@@ -0,0 +1,76 @@
+id: variable_cc_decoder_def
+label: CC Decoder Definition
+
+parameters:
+- id: value
+ label: Ignore Me
+ dtype: raw
+ default: '"ok"'
+ hide: all
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ default: '0'
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: framebits
+ label: Frame Bits
+ dtype: int
+ default: '2048'
+- id: k
+ label: Constraint Length (K)
+ dtype: int
+ default: '7'
+- id: rate
+ label: Rate Inverse (1/R) (1/2) --> 2
+ dtype: int
+ default: '2'
+- id: polys
+ label: Polynomials
+ dtype: int_vector
+ default: '[79,109]'
+- id: state_start
+ label: Start State
+ dtype: int
+ default: '0'
+- id: state_end
+ label: End State
+ dtype: int
+ default: '-1'
+- id: mode
+ label: Streaming Behavior
+ dtype: enum
+ options: [fec.CC_STREAMING, fec.CC_TERMINATED, fec.CC_TAILBITING, fec.CC_TRUNCATED]
+ option_labels: [Streaming, Terminated, Tailbiting, Truncated]
+- id: padding
+ label: Byte Padding
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+value: ${ fec.cc_decoder.make(framebits, k, rate, polys, state_start, state_end, mode,
+ padding) }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.cc_decoder.make(${framebits},\
+ \ ${k}, ${rate}, ${polys}, ${state_start}, ${state_end}, ${mode}, ${padding})\n\
+ % elif int(ndim)==1 #:\nself.${id} = ${id} = map( (lambda a: fec.cc_decoder.make(${framebits},\
+ \ ${k}, ${rate}, ${polys}, ${state_start}, ${state_end}, ${mode}, ${padding})),\
+ \ range(0,${dim1}) ); \n% else:\nself.${id} = ${id} = map( (lambda b: map(\
+ \ ( lambda a: fec.cc_decoder.make(${framebits}, ${k}, ${rate}, ${polys}, ${state_start},\
+ \ ${state_end}, ${mode}, ${padding})), range(0,${dim2}) ) ), range(0,${dim1}));\
+ \ \n% endif\n "
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/variable_cc_decoder_def_list.xml b/gr-fec/grc/variable_cc_decoder_def_list.xml
deleted file mode 100644
index daa7c73ef4..0000000000
--- a/gr-fec/grc/variable_cc_decoder_def_list.xml
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# FEC CC DECODER
-###################################################
- -->
-<block>
- <name>CC Decoder Definition</name>
- <key>variable_cc_decoder_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.cc_decoder.make($framebits, $k, $rate, $polys, $state_start, $state_end, $mode, $padding)
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map( (lambda a: fec.cc_decoder.make($framebits, $k, $rate, $polys, $state_start, $state_end, $mode, $padding)), range(0,$dim1) ); #slurp
-#else
-self.$(id) = $(id) = map( (lambda b: map( ( lambda a: fec.cc_decoder.make($framebits, $k, $rate, $polys, $state_start, $state_end, $mode, $padding)), range(0,$dim2) ) ), range(0,$dim1)); #slurp
-#end if
- </var_make>
- <var_value>fec.cc_decoder.make($framebits, $k, $rate, $polys, $state_start, $state_end, $mode, $padding)</var_value>
- <make></make>
-
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value>0</value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Frame Bits</name>
- <key>framebits</key>
- <value>2048</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Constraint Length (K)</name>
- <key>k</key>
- <value>7</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Rate Inverse (1/R) (1/2) --> 2</name>
- <key>rate</key>
- <value>2</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Polynomials</name>
- <key>polys</key>
- <value>[79,109]</value>
- <type>int_vector</type>
- </param>
-
- <param>
- <name>Start State</name>
- <key>state_start</key>
- <value>0</value>
- <type>int</type>
- </param>
-
- <param>
- <name>End State</name>
- <key>state_end</key>
- <value>-1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Streaming Behavior</name>
- <key>mode</key>
- <value></value>
- <type>enum</type>
- <option>
- <name>Streaming</name>
- <key>fec.CC_STREAMING</key>
- </option>
- <option>
- <name>Terminated</name>
- <key>fec.CC_TERMINATED</key>
- </option>
- <option>
- <name>Tailbiting</name>
- <key>fec.CC_TAILBITING</key>
- </option>
- <option>
- <name>Truncated</name>
- <key>fec.CC_TRUNCATED</key>
- </option>
- </param>
-
- <param>
- <name>Byte Padding</name>
- <key>padding</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- </param>
-
- <doc>
- </doc>
-</block>
diff --git a/gr-fec/grc/variable_cc_encoder_def_list.block.yml b/gr-fec/grc/variable_cc_encoder_def_list.block.yml
new file mode 100644
index 0000000000..43f330a617
--- /dev/null
+++ b/gr-fec/grc/variable_cc_encoder_def_list.block.yml
@@ -0,0 +1,66 @@
+id: variable_cc_encoder_def
+label: CC Encoder Definition
+
+parameters:
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ default: '0'
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: framebits
+ label: Frame Bits
+ dtype: int
+ default: '2048'
+- id: k
+ label: Constraint Length (K)
+ dtype: int
+ default: '7'
+- id: rate
+ label: Rate Inverse (1/R) (1/2) --> 2
+ dtype: int
+ default: '2'
+- id: polys
+ label: Polynomials
+ dtype: int_vector
+ default: '[79,109]'
+- id: state_start
+ label: Start State
+ dtype: int
+ default: '0'
+- id: mode
+ label: Streaming Behavior
+ dtype: enum
+ options: [fec.CC_STREAMING, fec.CC_TERMINATED, fec.CC_TAILBITING, fec.CC_TRUNCATED]
+ option_labels: [Streaming, Terminated, Tailbiting, Truncated]
+- id: padding
+ label: Byte Padding
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+value: ${ fec.cc_encoder_make(framebits, k, rate, polys, state_start, mode, padding)
+ }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.cc_encoder_make(${framebits},\
+ \ ${k}, ${rate}, ${polys}, ${state_start}, ${mode}, ${padding})\n% elif int(ndim)==1\
+ \ #:\nself.${id} = ${id} = map( (lambda a: fec.cc_encoder_make(${framebits},\
+ \ ${k}, ${rate}, ${polys}, ${state_start}, ${mode}, ${padding})), range(0,${dim1})\
+ \ ); \n% else:\nself.${id} = ${id} = map( (lambda b: map( ( lambda a: fec.cc_encoder_make(${framebits},\
+ \ ${k}, ${rate}, ${polys}, ${state_start}, ${mode}, ${padding})), range(0,${dim2})\
+ \ ) ), range(0,${dim1})); \n% endif\n "
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/variable_cc_encoder_def_list.xml b/gr-fec/grc/variable_cc_encoder_def_list.xml
deleted file mode 100644
index 92965204d1..0000000000
--- a/gr-fec/grc/variable_cc_encoder_def_list.xml
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# FEC MAKING FOR GREAT JUSTICE
-###################################################
- -->
-<block>
- <name>CC Encoder Definition</name>
- <key>variable_cc_encoder_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.cc_encoder_make($framebits, $k, $rate, $polys, $state_start, $mode, $padding)
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map( (lambda a: fec.cc_encoder_make($framebits, $k, $rate, $polys, $state_start, $mode, $padding)), range(0,$dim1) ); #slurp
-#else
-self.$(id) = $(id) = map( (lambda b: map( ( lambda a: fec.cc_encoder_make($framebits, $k, $rate, $polys, $state_start, $mode, $padding)), range(0,$dim2) ) ), range(0,$dim1)); #slurp
-#end if
- </var_make>
- <var_value>fec.cc_encoder_make($framebits, $k, $rate, $polys, $state_start, $mode, $padding)</var_value>
- <make></make>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value>0</value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Frame Bits</name>
- <key>framebits</key>
- <value>2048</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Constraint Length (K)</name>
- <key>k</key>
- <value>7</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Rate Inverse (1/R) (1/2) --> 2</name>
- <key>rate</key>
- <value>2</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Polynomials</name>
- <key>polys</key>
- <value>[79,109]</value>
- <type>int_vector</type>
- </param>
-
- <param>
- <name>Start State</name>
- <key>state_start</key>
- <value>0</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Streaming Behavior</name>
- <key>mode</key>
- <value></value>
- <type>enum</type>
- <option>
- <name>Streaming</name>
- <key>fec.CC_STREAMING</key>
- </option>
- <option>
- <name>Terminated</name>
- <key>fec.CC_TERMINATED</key>
- </option>
- <option>
- <name>Tailbiting</name>
- <key>fec.CC_TAILBITING</key>
- </option>
- <option>
- <name>Truncated</name>
- <key>fec.CC_TRUNCATED</key>
- </option>
- </param>
-
- <param>
- <name>Byte Padding</name>
- <key>padding</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- </param>
-
- <doc>
- </doc>
-</block>
diff --git a/gr-fec/grc/variable_ccsds_encoder_def_list.block.yml b/gr-fec/grc/variable_ccsds_encoder_def_list.block.yml
new file mode 100644
index 0000000000..7a412dde96
--- /dev/null
+++ b/gr-fec/grc/variable_ccsds_encoder_def_list.block.yml
@@ -0,0 +1,46 @@
+id: variable_ccsds_encoder_def
+label: CCSDS Encoder Definition
+
+parameters:
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ default: '0'
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: framebits
+ label: Frame Bits
+ dtype: int
+ default: '2048'
+- id: state_start
+ label: Start State
+ dtype: int
+ default: '0'
+- id: mode
+ label: Streaming Behavior
+ dtype: enum
+ options: [fec.CC_STREAMING, fec.CC_TERMINATED, fec.CC_TAILBITING, fec.CC_TRUNCATED]
+ option_labels: [Streaming, Terminated, Tailbiting, Truncated]
+value: ${ fec.ccsds_encoder_make(framebits, state_start, mode) }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.ccsds_encoder_make(${framebits},\
+ \ ${state_start}, ${mode})\n% elif int(ndim)==1 #:\nself.${id} = ${id} = map(\
+ \ (lambda a: fec.ccsds_encoder_make(${framebits}, ${state_start}, ${mode})),\
+ \ range(0,${dim1}) ); \n% else:\nself.${id} = ${id} = map( (lambda b: map(\
+ \ ( lambda a: fec.ccsds_encoder_make(${framebits}, ${state_start}, ${mode})),\
+ \ range(0,${dim2}) ) ), range(0,${dim1})); \n% endif\n "
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/variable_ccsds_encoder_def_list.xml b/gr-fec/grc/variable_ccsds_encoder_def_list.xml
deleted file mode 100644
index d925fd1a7e..0000000000
--- a/gr-fec/grc/variable_ccsds_encoder_def_list.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# FEC MAKING FOR GREAT JUSTICE
-###################################################
- -->
-<block>
- <name>CCSDS Encoder Definition</name>
- <key>variable_ccsds_encoder_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.ccsds_encoder_make($framebits, $state_start, $mode)
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map( (lambda a: fec.ccsds_encoder_make($framebits, $state_start, $mode)), range(0,$dim1) ); #slurp
-#else
-self.$(id) = $(id) = map( (lambda b: map( ( lambda a: fec.ccsds_encoder_make($framebits, $state_start, $mode)), range(0,$dim2) ) ), range(0,$dim1)); #slurp
-#end if
- </var_make>
- <var_value>fec.ccsds_encoder_make($framebits, $state_start, $mode)</var_value>
- <make></make>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value>0</value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Frame Bits</name>
- <key>framebits</key>
- <value>2048</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Start State</name>
- <key>state_start</key>
- <value>0</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Streaming Behavior</name>
- <key>mode</key>
- <value></value>
- <type>enum</type>
- <option>
- <name>Streaming</name>
- <key>fec.CC_STREAMING</key>
- </option>
- <option>
- <name>Terminated</name>
- <key>fec.CC_TERMINATED</key>
- </option>
- <option>
- <name>Tailbiting</name>
- <key>fec.CC_TAILBITING</key>
- </option>
- <option>
- <name>Truncated</name>
- <key>fec.CC_TRUNCATED</key>
- </option>
- </param>
-
- <doc>
- </doc>
-</block>
diff --git a/gr-fec/grc/variable_dummy_decoder_def_list.block.yml b/gr-fec/grc/variable_dummy_decoder_def_list.block.yml
new file mode 100644
index 0000000000..14d0ff42d9
--- /dev/null
+++ b/gr-fec/grc/variable_dummy_decoder_def_list.block.yml
@@ -0,0 +1,40 @@
+id: variable_dummy_decoder_def
+label: Dummy Decoder Definition
+
+parameters:
+- id: value
+ label: Ignore Me
+ dtype: raw
+ default: '"ok"'
+ hide: all
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: framebits
+ label: Frame Bits
+ dtype: int
+ default: '2048'
+value: ${ fec.dummy_decoder.make(framebits) }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.dummy_decoder.make(${framebits})\n\
+ % elif int(ndim)==1 #:\nself.${id} = ${id} = map((lambda a: fec.dummy_decoder.make(${framebits})),\
+ \ range(0,${dim1})) \n% else:\nself.${id} = ${id} = map((lambda b: map((lambda\
+ \ a: fec.dummy_decoder.make(${framebits})), range(0,${dim2}))), range(0,${dim1}))\
+ \ \n% endif\n "
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/variable_dummy_decoder_def_list.xml b/gr-fec/grc/variable_dummy_decoder_def_list.xml
deleted file mode 100644
index 4a27971c87..0000000000
--- a/gr-fec/grc/variable_dummy_decoder_def_list.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# FEC DUMMY DECODER
-###################################################
- -->
-<block>
- <name>Dummy Decoder Definition</name>
- <key>variable_dummy_decoder_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.dummy_decoder.make($framebits)
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map((lambda a: fec.dummy_decoder.make($framebits)), range(0,$dim1)) #slurp
-#else
-self.$(id) = $(id) = map((lambda b: map((lambda a: fec.dummy_decoder.make($framebits)), range(0,$dim2))), range(0,$dim1)) #slurp
-#end if
- </var_make>
- <var_value>fec.dummy_decoder.make($framebits)</var_value>
- <make></make>
-
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value></value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Frame Bits</name>
- <key>framebits</key>
- <value>2048</value>
- <type>int</type>
- </param>
-
- <doc>
- </doc>
-</block>
diff --git a/gr-fec/grc/variable_dummy_encoder_def_list.block.yml b/gr-fec/grc/variable_dummy_encoder_def_list.block.yml
new file mode 100644
index 0000000000..cb9181bcd6
--- /dev/null
+++ b/gr-fec/grc/variable_dummy_encoder_def_list.block.yml
@@ -0,0 +1,36 @@
+id: variable_dummy_encoder_def
+label: Dummy Encoder Definition
+
+parameters:
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ default: '0'
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: framebits
+ label: Frame Bits
+ dtype: int
+ default: '2048'
+value: ${ fec.dummy_encoder_make(framebits) }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.dummy_encoder_make(${framebits})\n\
+ % elif int(ndim)==1 #:\nself.${id} = ${id} = map((lambda a: fec.dummy_encoder_make(${framebits})),\
+ \ range(0,${dim1})) \n% else:\nself.${id} = ${id} = map((lambda b: map((lambda\
+ \ a: fec.dummy_encoder_make(${framebits})), range(0,${dim2}))), range(0,${dim1}))\
+ \ \n% endif\n "
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/variable_dummy_encoder_def_list.xml b/gr-fec/grc/variable_dummy_encoder_def_list.xml
deleted file mode 100644
index 351fddadaf..0000000000
--- a/gr-fec/grc/variable_dummy_encoder_def_list.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# FEC DUMMY ENCODER
-###################################################
- -->
-<block>
- <name>Dummy Encoder Definition</name>
- <key>variable_dummy_encoder_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.dummy_encoder_make($framebits)
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map((lambda a: fec.dummy_encoder_make($framebits)), range(0,$dim1)) #slurp
-#else
-self.$(id) = $(id) = map((lambda b: map((lambda a: fec.dummy_encoder_make($framebits)), range(0,$dim2))), range(0,$dim1)) #slurp
-#end if
- </var_make>
- <var_value>fec.dummy_encoder_make($framebits)</var_value>
- <make></make>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value>0</value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Frame Bits</name>
- <key>framebits</key>
- <value>2048</value>
- <type>int</type>
- </param>
-
- <doc>
- </doc>
-</block>
diff --git a/gr-fec/grc/variable_ldpc_G_matrix_object.block.yml b/gr-fec/grc/variable_ldpc_G_matrix_object.block.yml
new file mode 100644
index 0000000000..24f0cb3cbe
--- /dev/null
+++ b/gr-fec/grc/variable_ldpc_G_matrix_object.block.yml
@@ -0,0 +1,31 @@
+id: variable_ldpc_G_matrix_def
+label: LDPC Generator Matrix
+
+parameters:
+- id: value
+ label: Ignore Me
+ dtype: raw
+ default: '"ok"'
+ hide: all
+- id: filename
+ label: File
+ dtype: file_open
+value: ${ value }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: self.${id} = ${id} = fec.ldpc_G_matrix(${filename})
+
+documentation: |-
+ This block creates a LDPC Generator Matrix variable.
+
+ This variable can be used by:
+ 1) LDPC Encoder Definition (via Generator) block
+ 2) LDPC Bit Flip Decoder Definition block
+
+ Provide an alist file, which contains a Generator matrix, G, in the standard format G = [I P], where I is an identity matrix and P is the parity submatrix.
+
+ The format of alist files is described at:
+ http://www.inference.phy.cam.ac.uk/mackay/codes/alist.html
+
+file_format: 1
diff --git a/gr-fec/grc/variable_ldpc_G_matrix_object.xml b/gr-fec/grc/variable_ldpc_G_matrix_object.xml
deleted file mode 100644
index cd9360c7f7..0000000000
--- a/gr-fec/grc/variable_ldpc_G_matrix_object.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# FEC LDPC MATRIX OBJECT
-###################################################
- -->
-
-<block>
- <name>LDPC Generator Matrix</name>
- <key>variable_ldpc_G_matrix_def</key>
- <import>from gnuradio import fec</import>
- <var_make>self.$(id) = $(id) = fec.ldpc_G_matrix($filename)</var_make>
-
- <make></make>
-
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>File</name>
- <key>filename</key>
- <value></value>
- <type>file_open</type>
- </param>
-
- <doc>
-This block creates a LDPC Generator Matrix variable.
-
-This variable can be used by:
- 1) LDPC Encoder Definition (via Generator) block
- 2) LDPC Bit Flip Decoder Definition block
-
-Provide an alist file, which contains a Generator matrix, G, in the standard format G = [I P], where I is an identity matrix and P is the parity submatrix.
-
-The format of alist files is described at:
-http://www.inference.phy.cam.ac.uk/mackay/codes/alist.html
- </doc>
-</block>
diff --git a/gr-fec/grc/variable_ldpc_H_matrix_object.block.yml b/gr-fec/grc/variable_ldpc_H_matrix_object.block.yml
new file mode 100644
index 0000000000..f2d1a640bd
--- /dev/null
+++ b/gr-fec/grc/variable_ldpc_H_matrix_object.block.yml
@@ -0,0 +1,40 @@
+id: variable_ldpc_H_matrix_def
+label: LDPC Parity Check Matrix
+
+parameters:
+- id: value
+ label: Ignore Me
+ dtype: raw
+ default: '"ok"'
+ hide: all
+- id: filename
+ label: File
+ dtype: file_open
+- id: gap
+ label: Gap
+ dtype: int
+value: ${ value }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: self.${id} = ${id} = fec.ldpc_H_matrix(${filename}, ${gap})
+
+documentation: |-
+ This block creates a FEC LDPC Parity Check Matrix variable.
+
+ This variable can be used by:
+ 1) LDPC Encoder Definition (via Parity Check) block
+ 2) LDPC Bit Flip Decoder Definition block
+
+ The format of alist files is described at:
+ http://www.inference.phy.cam.ac.uk/mackay/codes/alist.html
+
+ The specific format of this parity check matrix is described by Richardson and Urbanke in Appendix A of their book: Modern Coding Theory (ISBN 978-0-521-85229-6).
+
+ As an example, see the file {$target}/share/gnuradio/fec/ldpc/n_1800_k_0902_gap_28.alist, which is used by the FEC example flowgraph ber_curve_gen_ldpc.grc.
+
+ There is a small library of encoding-ready alist files at {$target}/share/gnuradio/fec/ldpc.
+
+ To convert a parity check matrix to the appropriate format required for this encoder, use the python functions in {$target}/lib/python2.7/dist-packages/gnuradio/fec/LDPC/Generate_LDPC_matrix.py.
+
+file_format: 1
diff --git a/gr-fec/grc/variable_ldpc_H_matrix_object.xml b/gr-fec/grc/variable_ldpc_H_matrix_object.xml
deleted file mode 100644
index 1bfb6be060..0000000000
--- a/gr-fec/grc/variable_ldpc_H_matrix_object.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# FEC LDPC PARITY CHECK MATRIX OBJECT
-###################################################
- -->
-<block>
- <name>LDPC Parity Check Matrix</name>
- <key>variable_ldpc_H_matrix_def</key>
- <import>from gnuradio import fec</import>
- <var_make>self.$(id) = $(id) = fec.ldpc_H_matrix($filename, $gap)</var_make>
-
- <make></make>
-
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>File</name>
- <key>filename</key>
- <value></value>
- <type>file_open</type>
- </param>
-
- <param>
- <name>Gap</name>
- <key>gap</key>
- <value></value>
- <type>int</type>
- </param>
-
- <doc>
-This block creates a FEC LDPC Parity Check Matrix variable.
-
-This variable can be used by:
- 1) LDPC Encoder Definition (via Parity Check) block
- 2) LDPC Bit Flip Decoder Definition block
-
-The format of alist files is described at:
-http://www.inference.phy.cam.ac.uk/mackay/codes/alist.html
-
-The specific format of this parity check matrix is described by Richardson and Urbanke in Appendix A of their book: Modern Coding Theory (ISBN 978-0-521-85229-6).
-
-As an example, see the file {$target}/share/gnuradio/fec/ldpc/n_1800_k_0902_gap_28.alist, which is used by the FEC example flowgraph ber_curve_gen_ldpc.grc.
-
-There is a small library of encoding-ready alist files at {$target}/share/gnuradio/fec/ldpc.
-
-To convert a parity check matrix to the appropriate format required for this encoder, use the python functions in {$target}/lib/python2.7/dist-packages/gnuradio/fec/LDPC/Generate_LDPC_matrix.py.
- </doc>
-</block>
diff --git a/gr-fec/grc/variable_ldpc_bit_flip_decoder.block.yml b/gr-fec/grc/variable_ldpc_bit_flip_decoder.block.yml
new file mode 100644
index 0000000000..4f66f07307
--- /dev/null
+++ b/gr-fec/grc/variable_ldpc_bit_flip_decoder.block.yml
@@ -0,0 +1,51 @@
+id: variable_ldpc_bit_flip_decoder_def
+label: LDPC Bit Flip Decoder Definition
+
+parameters:
+- id: value
+ label: Ignore Me
+ dtype: raw
+ default: '"ok"'
+ hide: all
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: max_iterations
+ label: Max Iterations
+ dtype: int
+ default: '100'
+- id: matrix_object
+ label: LDPC FEC Matrix ID
+ dtype: raw
+value: ${ value }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.ldpc_bit_flip_decoder.make(${matrix_object}.get_base_sptr(),\
+ \ ${max_iterations})\n% elif int(ndim)==1 #:\nself.${id} = ${id} = map((lambda\
+ \ a: fec.ldpc_bit_flip_decoder.make(${matrix_object}.get_base_sptr(), ${max_iterations})),\
+ \ range(0,${dim1})) \n% else:\nself.${id} = ${id} = map((lambda b: map((lambda\
+ \ a: fec.ldpc_bit_flip_decoder.make(${matrix_object}.get_base_sptr(), ${max_iterations})),\
+ \ range(0,${dim2}))), range(0,${dim1})) \n% endif"
+
+documentation: |-
+ This block creates a LDPC Bit Flip Decoder Definition variable.
+
+ The decoder requires knowledge of the matrix used to create (encode) the codewords. In the LDPC FEC Matrix ID field, input the ID of either a:
+ 1) LDPC Generator Matrix variable, or
+ 2) LDPC Parity Check Matrix variable
+
+ Max iterations may be increased from 100 for possibly better performance, but significantly higher number of iterations may slow things down.
+
+file_format: 1
diff --git a/gr-fec/grc/variable_ldpc_bit_flip_decoder.xml b/gr-fec/grc/variable_ldpc_bit_flip_decoder.xml
deleted file mode 100644
index d905ce27fb..0000000000
--- a/gr-fec/grc/variable_ldpc_bit_flip_decoder.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# FEC LDPC BIT FLIP DECODER
-###################################################
- -->
-<block>
- <name>LDPC Bit Flip Decoder Definition</name>
- <key>variable_ldpc_bit_flip_decoder_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.ldpc_bit_flip_decoder.make(${matrix_object}.get_base_sptr(), $max_iterations)
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map((lambda a: fec.ldpc_bit_flip_decoder.make(${matrix_object}.get_base_sptr(), $max_iterations)), range(0,$dim1)) #slurp
-#else
-self.$(id) = $(id) = map((lambda b: map((lambda a: fec.ldpc_bit_flip_decoder.make(${matrix_object}.get_base_sptr(), $max_iterations)), range(0,$dim2))), range(0,$dim1)) #slurp
-#end if</var_make>
- <make></make>
-
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value></value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Max Iterations</name>
- <key>max_iterations</key>
- <value>100</value>
- <type>int</type>
- </param>
-
- <param>
- <name>LDPC FEC Matrix ID</name>
- <key>matrix_object</key>
- <type>raw</type>
- </param>
-
- <doc>
-This block creates a LDPC Bit Flip Decoder Definition variable.
-
-The decoder requires knowledge of the matrix used to create (encode) the codewords. In the LDPC FEC Matrix ID field, input the ID of either a:
- 1) LDPC Generator Matrix variable, or
- 2) LDPC Parity Check Matrix variable
-
-Max iterations may be increased from 100 for possibly better performance, but significantly higher number of iterations may slow things down.
- </doc>
-</block>
diff --git a/gr-fec/grc/variable_ldpc_encoder_G.block.yml b/gr-fec/grc/variable_ldpc_encoder_G.block.yml
new file mode 100644
index 0000000000..f35f473705
--- /dev/null
+++ b/gr-fec/grc/variable_ldpc_encoder_G.block.yml
@@ -0,0 +1,42 @@
+id: variable_ldpc_encoder_G_def
+label: LDPC Encoder Definition (via Generator)
+
+parameters:
+- id: value
+ label: Ignore Me
+ dtype: raw
+ default: '"ok"'
+ hide: all
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: G
+ label: LDPC Generator Matrix
+ dtype: raw
+value: ${ value }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.ldpc_gen_mtrx_encoder_make(${G})\n\
+ % elif int(ndim)==1 #:\nself.${id} = ${id} = map((lambda a: fec.ldpc_gen_mtrx_encoder_make(${G})),\
+ \ range(0,${dim1})) \n% else:\nself.${id} = ${id} = map((lambda b: map((lambda\
+ \ a: fec.ldpc_gen_mtrx_encoder_make(${G})), range(0,${dim2}))), range(0,${dim1}))\
+ \ \n% endif"
+
+documentation: |-
+ Given a generator matrix in systematic form, G = [I|P], where I is the identity matrix and P is the parity submatrix, the information word s is encoded into a codeword x via:
+
+ x = G'*s
+
+file_format: 1
diff --git a/gr-fec/grc/variable_ldpc_encoder_G.xml b/gr-fec/grc/variable_ldpc_encoder_G.xml
deleted file mode 100644
index 3b4dbeee25..0000000000
--- a/gr-fec/grc/variable_ldpc_encoder_G.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# FEC LDPC ENCODER DEFINITION (VIA GENERATOR)
-###################################################
- -->
-
-<block>
- <name>LDPC Encoder Definition (via Generator)</name>
- <key>variable_ldpc_encoder_G_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.ldpc_gen_mtrx_encoder_make($G)
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map((lambda a: fec.ldpc_gen_mtrx_encoder_make($G)), range(0,$dim1)) #slurp
-#else
-self.$(id) = $(id) = map((lambda b: map((lambda a: fec.ldpc_gen_mtrx_encoder_make($G)), range(0,$dim2))), range(0,$dim1)) #slurp
-#end if</var_make>
- <make></make>
-
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value></value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>LDPC Generator Matrix</name>
- <key>G</key>
- <value></value>
- <type>raw</type>
- </param>
-
- <doc>
-Given a generator matrix in systematic form, G = [I|P], where I is the identity matrix and P is the parity submatrix, the information word s is encoded into a codeword x via:
-
-x = G'*s
- </doc>
-</block>
diff --git a/gr-fec/grc/variable_ldpc_encoder_H.block.yml b/gr-fec/grc/variable_ldpc_encoder_H.block.yml
new file mode 100644
index 0000000000..3fba6c7dbf
--- /dev/null
+++ b/gr-fec/grc/variable_ldpc_encoder_H.block.yml
@@ -0,0 +1,42 @@
+id: variable_ldpc_encoder_H_def
+label: LDPC Encoder Definition (via Parity Check)
+
+parameters:
+- id: value
+ label: Ignore Me
+ dtype: raw
+ default: '"ok"'
+ hide: all
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: H
+ label: Parity Check Matrix
+ dtype: raw
+value: ${ value }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.ldpc_par_mtrx_encoder_make_H(${H})\n\
+ % elif int(ndim)==1 #:\nself.${id} = ${id} = map((lambda a: fec.ldpc_par_mtrx_encoder_make_H(${H})),\
+ \ range(0,${dim1})) \n% else:\nself.${id} = ${id} = map((lambda b: map((lambda\
+ \ a: fec.ldpc_par_mtrx_encoder_make_H(${H})), range(0,${dim2}))), range(0,${dim1}))\
+ \ \n% endif"
+
+documentation: |-
+ This block creates a LDPC Encoder Definition variable.
+
+ This encoder performs a reduced complexity algorithm described by Richardson and Urbanke in Appendix A of their book: Modern Coding Theory. Compared to the block "LDPC Encoder Definition (via Generator)," this encoder requires orders of magnitude fewer operations to create each codeword. This is accomplished by completing a significant amount of the complex matrix manipulation (including inverse, multiplication, and Gaussian elimination operations) during preprocessing. The disadvantage of this encoder is that it requires a specially formatted matrix. However, GNU Radio includes python scripts to format a standard parity check matrix appropriately for this encoder, as well as a small library of encoding-ready matrices for use.
+
+file_format: 1
diff --git a/gr-fec/grc/variable_ldpc_encoder_H.xml b/gr-fec/grc/variable_ldpc_encoder_H.xml
deleted file mode 100644
index 555891b095..0000000000
--- a/gr-fec/grc/variable_ldpc_encoder_H.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# FEC LDPC ENCODER DEFINITION (PARITY CHECK)
-###################################################
- -->
-<block>
- <name>LDPC Encoder Definition (via Parity Check)</name>
- <key>variable_ldpc_encoder_H_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.ldpc_par_mtrx_encoder_make_H($H)
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map((lambda a: fec.ldpc_par_mtrx_encoder_make_H($H)), range(0,$dim1)) #slurp
-#else
-self.$(id) = $(id) = map((lambda b: map((lambda a: fec.ldpc_par_mtrx_encoder_make_H($H)), range(0,$dim2))), range(0,$dim1)) #slurp
-#end if</var_make>
- <make></make>
-
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value></value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Parity Check Matrix</name>
- <key>H</key>
- <value></value>
- <type>raw</type>
- </param>
- <doc>
-This block creates a LDPC Encoder Definition variable.
-
-This encoder performs a reduced complexity algorithm described by Richardson and Urbanke in Appendix A of their book: Modern Coding Theory. Compared to the block "LDPC Encoder Definition (via Generator)," this encoder requires orders of magnitude fewer operations to create each codeword. This is accomplished by completing a significant amount of the complex matrix manipulation (including inverse, multiplication, and Gaussian elimination operations) during preprocessing. The disadvantage of this encoder is that it requires a specially formatted matrix. However, GNU Radio includes python scripts to format a standard parity check matrix appropriately for this encoder, as well as a small library of encoding-ready matrices for use.
- </doc>
-</block>
diff --git a/gr-fec/grc/variable_polar_code_configurator.block.yml b/gr-fec/grc/variable_polar_code_configurator.block.yml
new file mode 100644
index 0000000000..2c07822c23
--- /dev/null
+++ b/gr-fec/grc/variable_polar_code_configurator.block.yml
@@ -0,0 +1,42 @@
+id: variable_polar_code_configurator
+label: POLAR code Configurator
+
+parameters:
+- id: channel
+ label: Channel
+ dtype: string
+ default: polar.CHANNEL_TYPE_BEC
+ options: [polar.CHANNEL_TYPE_BEC, polar.CHANNEL_TYPE_AWGN]
+ option_labels: [BEC, AWGN]
+- id: block_size
+ label: Block size (N)
+ dtype: int
+ default: '32'
+- id: num_info_bits
+ label: Info Bits (K)
+ dtype: int
+ default: '16'
+- id: design_snr
+ label: design SNR
+ dtype: float
+ default: '0.0'
+- id: mu
+ label: mu
+ dtype: int
+ default: '16'
+value: ${ polar.load_frozen_bits_info(True, channel, block_size, num_info_bits, design_snr,
+ mu) }
+
+templates:
+ imports: from gnuradio.fec import polar
+ var_make: self.${id} = ${id} = polar.load_frozen_bits_info(False, ${channel},
+ ${block_size}, ${num_info_bits}, ${design_snr}, ${mu})
+
+documentation: "This block serves as an interface to the underlying Python functions\
+ \ for channel construction.\n \n Current channel types are: BEC/AWGN\n Block\
+ \ size must be a power of 2!\n Info Bits must be 0 smaller K smaller N\n Design\
+ \ SNR does affect the target transmission SNR and thus performance.\n The parameter\
+ \ mu is only relevant for AWGN channels. It is passed on to the corresponding\
+ \ Channel construction algorithm."
+
+file_format: 1
diff --git a/gr-fec/grc/variable_polar_code_configurator.xml b/gr-fec/grc/variable_polar_code_configurator.xml
deleted file mode 100644
index ee145b16f7..0000000000
--- a/gr-fec/grc/variable_polar_code_configurator.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>POLAR code Configurator</name>
- <key>variable_polar_code_configurator</key>
- <import>from gnuradio.fec import polar</import>
- <var_make>self.$(id) = $(id) = polar.load_frozen_bits_info(False, $channel, $block_size, $num_info_bits, $design_snr, $mu)</var_make>
- <var_value>polar.load_frozen_bits_info(True, $channel, $block_size, $num_info_bits, $design_snr, $mu)</var_value>
- <make></make>
-
- <param>
- <name>Channel</name>
- <key>channel</key>
- <value>polar.CHANNEL_TYPE_BEC</value>
- <type>string</type>
- <option>
- <name>BEC</name>
- <key>polar.CHANNEL_TYPE_BEC</key>
- </option>
- <option>
- <name>AWGN</name>
- <key>polar.CHANNEL_TYPE_AWGN</key>
- </option>
- </param>
-
- <param>
- <name>Block size (N)</name>
- <key>block_size</key>
- <value>32</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Info Bits (K)</name>
- <key>num_info_bits</key>
- <value>16</value>
- <type>int</type>
- </param>
-
- <param>
- <name>design SNR</name>
- <key>design_snr</key>
- <value>0.0</value>
- <type>float</type>
- </param>
-
- <param>
- <name>mu</name>
- <key>mu</key>
- <value>16</value>
- <type>int</type>
- </param>
- <doc>This block serves as an interface to the underlying Python functions for channel construction.
-
- Current channel types are: BEC/AWGN
- Block size must be a power of 2!
- Info Bits must be 0 smaller K smaller N
- Design SNR does affect the target transmission SNR and thus performance.
- The parameter mu is only relevant for AWGN channels. It is passed on to the corresponding Channel construction algorithm.</doc>
-</block>
diff --git a/gr-fec/grc/variable_polar_decoder_sc.block.yml b/gr-fec/grc/variable_polar_decoder_sc.block.yml
new file mode 100644
index 0000000000..00120a65db
--- /dev/null
+++ b/gr-fec/grc/variable_polar_decoder_sc.block.yml
@@ -0,0 +1,45 @@
+id: variable_polar_decoder_sc_def
+label: POLAR Decoder SC Definition
+
+parameters:
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ default: '0'
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '4'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: block_size
+ label: Block size (N)
+ dtype: int
+- id: num_info_bits
+ label: '#Info Bits (K)'
+ dtype: int
+- id: frozen_bit_positions
+ label: Frozen Bit Positions
+ dtype: int_vector
+- id: frozen_bit_values
+ label: Frozen Bit Values
+ dtype: int_vector
+value: ${ fec.polar_decoder_sc.make(block_size, num_info_bits, frozen_bit_positions,
+ frozen_bit_values) }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "% if int(ndim)==0 #:\nself.${id} = ${id} = fec.polar_decoder_sc.make(${block_size},\
+ \ ${num_info_bits}, ${frozen_bit_positions}, ${frozen_bit_values}) \n% elif\
+ \ int(ndim)==1 #:\nself.${id} = ${id} = map((lambda a: fec.polar_decoder_sc.make(${block_size},\
+ \ ${num_info_bits}, ${frozen_bit_positions}, ${frozen_bit_values})), range(0,\
+ \ ${dim1}) ) \n% else:\nself.${id} = ${id} = map((lambda b: map((lambda a:\
+ \ fec.polar_decoder_sc.make(${block_size}, ${num_info_bits}, ${frozen_bit_positions},\
+ \ ${frozen_bit_values})), range(0, ${dim2}))), range(0, ${dim1})) \n% endif"
+
+file_format: 1
diff --git a/gr-fec/grc/variable_polar_decoder_sc.xml b/gr-fec/grc/variable_polar_decoder_sc.xml
deleted file mode 100644
index 4976afb4b6..0000000000
--- a/gr-fec/grc/variable_polar_decoder_sc.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>POLAR Decoder SC Definition</name>
- <key>variable_polar_decoder_sc_def</key>
- <import>from gnuradio import fec</import>
- <var_make>#if int($ndim())==0 #
-self.$(id) = $(id) = fec.polar_decoder_sc.make($block_size, $num_info_bits, $frozen_bit_positions, $frozen_bit_values) #slurp
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map((lambda a: fec.polar_decoder_sc.make($block_size, $num_info_bits, $frozen_bit_positions, $frozen_bit_values)), range(0, $dim1) ) #slurp
-#else
-self.$(id) = $(id) = map((lambda b: map((lambda a: fec.polar_decoder_sc.make($block_size, $num_info_bits, $frozen_bit_positions, $frozen_bit_values)), range(0, $dim2))), range(0, $dim1)) #slurp
-#end if</var_make>
- <var_value>fec.polar_decoder_sc.make($block_size, $num_info_bits, $frozen_bit_positions, $frozen_bit_values)</var_value>
- <make></make>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value>0</value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>4</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Block size (N)</name>
- <key>block_size</key>
- <type>int</type>
- </param>
-
- <param>
- <name>#Info Bits (K)</name>
- <key>num_info_bits</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Frozen Bit Positions</name>
- <key>frozen_bit_positions</key>
- <type>int_vector</type>
- </param>
-
- <param>
- <name>Frozen Bit Values</name>
- <key>frozen_bit_values</key>
- <type>int_vector</type>
- </param>
-</block>
diff --git a/gr-fec/grc/variable_polar_decoder_sc_list.block.yml b/gr-fec/grc/variable_polar_decoder_sc_list.block.yml
new file mode 100644
index 0000000000..7c9de3240f
--- /dev/null
+++ b/gr-fec/grc/variable_polar_decoder_sc_list.block.yml
@@ -0,0 +1,49 @@
+id: variable_polar_decoder_sc_list_def
+label: POLAR Decoder SC List Definition
+
+parameters:
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ default: '0'
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '4'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: max_list_size
+ label: Maximum List Size (L)
+ dtype: int
+- id: block_size
+ label: Block size (N)
+ dtype: int
+- id: num_info_bits
+ label: '#Info Bits (K)'
+ dtype: int
+- id: frozen_bit_positions
+ label: Frozen Bit Positions
+ dtype: int_vector
+- id: frozen_bit_values
+ label: Frozen Bit Values
+ dtype: int_vector
+value: ${ fec.polar_decoder_sc_list.make(max_list_size, block_size, num_info_bits,
+ frozen_bit_positions, frozen_bit_values) }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "% if int(ndim)==0 #:\nself.${id} = ${id} = fec.polar_decoder_sc_list.make(${max_list_size},\
+ \ ${block_size}, ${num_info_bits}, ${frozen_bit_positions}, ${frozen_bit_values})\
+ \ \n% elif int(ndim)==1 #:\nself.${id} = ${id} = map((lambda a: fec.polar_decoder_sc_list.make(${max_list_size},\
+ \ ${block_size}, ${num_info_bits}, ${frozen_bit_positions}, ${frozen_bit_values})),\
+ \ range(0, ${dim1})) \n% else:\nself.${id} = ${id} = map((lambda b: map((lambda\
+ \ a: fec.polar_decoder_sc_list.make(${max_list_size}, ${block_size}, ${num_info_bits},\
+ \ ${frozen_bit_positions}, ${frozen_bit_values})), range(0, ${dim2}))), range(0,\
+ \ ${dim1})) \n% endif"
+
+file_format: 1
diff --git a/gr-fec/grc/variable_polar_decoder_sc_list.xml b/gr-fec/grc/variable_polar_decoder_sc_list.xml
deleted file mode 100644
index 2128110ad4..0000000000
--- a/gr-fec/grc/variable_polar_decoder_sc_list.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>POLAR Decoder SC List Definition</name>
- <key>variable_polar_decoder_sc_list_def</key>
- <import>from gnuradio import fec</import>
- <var_make>#if int($ndim())==0 #
-self.$(id) = $(id) = fec.polar_decoder_sc_list.make($max_list_size, $block_size, $num_info_bits, $frozen_bit_positions, $frozen_bit_values) #slurp
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map((lambda a: fec.polar_decoder_sc_list.make($max_list_size, $block_size, $num_info_bits, $frozen_bit_positions, $frozen_bit_values)), range(0, $dim1)) #slurp
-#else
-self.$(id) = $(id) = map((lambda b: map((lambda a: fec.polar_decoder_sc_list.make($max_list_size, $block_size, $num_info_bits, $frozen_bit_positions, $frozen_bit_values)), range(0, $dim2))), range(0, $dim1)) #slurp
-#end if</var_make>
- <var_value>fec.polar_decoder_sc_list.make($max_list_size, $block_size, $num_info_bits, $frozen_bit_positions, $frozen_bit_values)</var_value>
- <make></make>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value>0</value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>4</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Maximum List Size (L)</name>
- <key>max_list_size</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Block size (N)</name>
- <key>block_size</key>
- <type>int</type>
- </param>
-
- <param>
- <name>#Info Bits (K)</name>
- <key>num_info_bits</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Frozen Bit Positions</name>
- <key>frozen_bit_positions</key>
- <type>int_vector</type>
- </param>
-
- <param>
- <name>Frozen Bit Values</name>
- <key>frozen_bit_values</key>
- <type>int_vector</type>
- </param>
-</block>
diff --git a/gr-fec/grc/variable_polar_decoder_sc_systematic.block.yml b/gr-fec/grc/variable_polar_decoder_sc_systematic.block.yml
new file mode 100644
index 0000000000..b730b20068
--- /dev/null
+++ b/gr-fec/grc/variable_polar_decoder_sc_systematic.block.yml
@@ -0,0 +1,42 @@
+id: variable_polar_decoder_sc_systematic_def
+label: systematic POLAR Decoder SC Definition
+
+parameters:
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ default: '0'
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '4'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: block_size
+ label: Block size (N)
+ dtype: int
+- id: num_info_bits
+ label: '#Info Bits (K)'
+ dtype: int
+- id: frozen_bit_positions
+ label: Frozen Bit Positions
+ dtype: int_vector
+value: ${ fec.polar_decoder_sc_systematic.make(block_size, num_info_bits, frozen_bit_positions)
+ }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "% if int(ndim)==0 #:\nself.${id} = ${id} = fec.polar_decoder_sc_systematic.make(${block_size},\
+ \ ${num_info_bits}, ${frozen_bit_positions}) \n% elif int(ndim)==1 #:\nself.${id}\
+ \ = ${id} = map((lambda a: fec.polar_decoder_sc_systematic.make(${block_size},\
+ \ ${num_info_bits}, ${frozen_bit_positions})), range(0, ${dim1}) ) \n% else:\n\
+ self.${id} = ${id} = map((lambda b: map((lambda a: fec.polar_decoder_sc_systematic.make(${block_size},\
+ \ ${num_info_bits}, ${frozen_bit_positions})), range(0, ${dim2}))), range(0,\
+ \ ${dim1})) \n% endif"
+
+file_format: 1
diff --git a/gr-fec/grc/variable_polar_decoder_sc_systematic.xml b/gr-fec/grc/variable_polar_decoder_sc_systematic.xml
deleted file mode 100644
index cefc7e237d..0000000000
--- a/gr-fec/grc/variable_polar_decoder_sc_systematic.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>systematic POLAR Decoder SC Definition</name>
- <key>variable_polar_decoder_sc_systematic_def</key>
- <import>from gnuradio import fec</import>
- <var_make>#if int($ndim())==0 #
-self.$(id) = $(id) = fec.polar_decoder_sc_systematic.make($block_size, $num_info_bits, $frozen_bit_positions) #slurp
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map((lambda a: fec.polar_decoder_sc_systematic.make($block_size, $num_info_bits, $frozen_bit_positions)), range(0, $dim1) ) #slurp
-#else
-self.$(id) = $(id) = map((lambda b: map((lambda a: fec.polar_decoder_sc_systematic.make($block_size, $num_info_bits, $frozen_bit_positions)), range(0, $dim2))), range(0, $dim1)) #slurp
-#end if</var_make>
- <var_value>fec.polar_decoder_sc_systematic.make($block_size, $num_info_bits, $frozen_bit_positions)</var_value>
- <make></make>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value>0</value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>4</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Block size (N)</name>
- <key>block_size</key>
- <type>int</type>
- </param>
-
- <param>
- <name>#Info Bits (K)</name>
- <key>num_info_bits</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Frozen Bit Positions</name>
- <key>frozen_bit_positions</key>
- <type>int_vector</type>
- </param>
-</block>
diff --git a/gr-fec/grc/variable_polar_encoder.block.yml b/gr-fec/grc/variable_polar_encoder.block.yml
new file mode 100644
index 0000000000..7979a71f43
--- /dev/null
+++ b/gr-fec/grc/variable_polar_encoder.block.yml
@@ -0,0 +1,52 @@
+id: variable_polar_encoder_def
+label: POLAR Encoder Definition
+
+parameters:
+- id: is_packed
+ label: Packed Bits
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['No', 'Yes']
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ default: '0'
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '4'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: block_size
+ label: Block size (N)
+ dtype: int
+- id: num_info_bits
+ label: '#Info Bits (K)'
+ dtype: int
+- id: frozen_bit_positions
+ label: Frozen Bit Positions
+ dtype: int_vector
+- id: frozen_bit_values
+ label: Frozen Bit Values
+ dtype: int_vector
+value: ${ fec.polar_encoder.make(block_size, num_info_bits, frozen_bit_positions,
+ frozen_bit_values, is_packed) }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "% if int(ndim)==0 #:\nself.${id} = ${id} = fec.polar_encoder.make(${block_size},\
+ \ ${num_info_bits}, ${frozen_bit_positions}, ${frozen_bit_values}, ${is_packed})\
+ \ \n% elif int(ndim)==1 #:\nself.${id} = ${id} = map((lambda a: fec.polar_encoder.make(${block_size},\
+ \ ${num_info_bits}, ${frozen_bit_positions}, ${frozen_bit_values}, ${is_packed})),\
+ \ range(0, ${dim1})) \n% else:\nself.${id} = ${id} = map((lambda b: map((lambda\
+ \ a: fec.polar_encoder.make(${block_size}, ${num_info_bits}, ${frozen_bit_positions},\
+ \ ${frozen_bit_values}, ${is_packed})), range(0, ${dim2}))), range(0, ${dim1}))\
+ \ \n% endif"
+
+file_format: 1
diff --git a/gr-fec/grc/variable_polar_encoder.xml b/gr-fec/grc/variable_polar_encoder.xml
deleted file mode 100644
index 4147cf1edf..0000000000
--- a/gr-fec/grc/variable_polar_encoder.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>POLAR Encoder Definition</name>
- <key>variable_polar_encoder_def</key>
- <import>from gnuradio import fec</import>
- <var_make>#if int($ndim())==0 #
-self.$(id) = $(id) = fec.polar_encoder.make($block_size, $num_info_bits, $frozen_bit_positions, $frozen_bit_values, $is_packed) #slurp
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map((lambda a: fec.polar_encoder.make($block_size, $num_info_bits, $frozen_bit_positions, $frozen_bit_values, $is_packed)), range(0, $dim1)) #slurp
-#else
-self.$(id) = $(id) = map((lambda b: map((lambda a: fec.polar_encoder.make($block_size, $num_info_bits, $frozen_bit_positions, $frozen_bit_values, $is_packed)), range(0, $dim2))), range(0, $dim1)) #slurp
-#end if</var_make>
- <var_value>fec.polar_encoder.make($block_size, $num_info_bits, $frozen_bit_positions, $frozen_bit_values, $is_packed)</var_value>
- <make></make>
-
- <param>
- <name>Packed Bits</name>
- <key>is_packed</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- </param>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value>0</value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>4</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Block size (N)</name>
- <key>block_size</key>
- <type>int</type>
- </param>
-
- <param>
- <name>#Info Bits (K)</name>
- <key>num_info_bits</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Frozen Bit Positions</name>
- <key>frozen_bit_positions</key>
- <type>int_vector</type>
- </param>
-
- <param>
- <name>Frozen Bit Values</name>
- <key>frozen_bit_values</key>
- <type>int_vector</type>
- </param>
-</block>
diff --git a/gr-fec/grc/variable_polar_encoder_systematic.block.yml b/gr-fec/grc/variable_polar_encoder_systematic.block.yml
new file mode 100644
index 0000000000..0f4c5f23a3
--- /dev/null
+++ b/gr-fec/grc/variable_polar_encoder_systematic.block.yml
@@ -0,0 +1,42 @@
+id: variable_polar_encoder_systematic_def
+label: systematic POLAR Encoder Definition
+
+parameters:
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ default: '0'
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '4'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: block_size
+ label: Block size (N)
+ dtype: int
+- id: num_info_bits
+ label: '#Info Bits (K)'
+ dtype: int
+- id: frozen_bit_positions
+ label: Frozen Bit Positions
+ dtype: int_vector
+value: ${ fec.polar_encoder_systematic.make(block_size, num_info_bits, frozen_bit_positions)
+ }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "% if int(ndim)==0 #:\nself.${id} = ${id} = fec.polar_encoder_systematic.make(${block_size},\
+ \ ${num_info_bits}, ${frozen_bit_positions}) \n% elif int(ndim)==1 #:\nself.${id}\
+ \ = ${id} = map((lambda a: fec.polar_encoder_systematic.make(${block_size},\
+ \ ${num_info_bits}, ${frozen_bit_positions})), range(0, ${dim1})) \n% else:\n\
+ self.${id} = ${id} = map((lambda b: map((lambda a: fec.polar_encoder_systematic.make(${block_size},\
+ \ ${num_info_bits}, ${frozen_bit_positions})), range(0, ${dim2}))), range(0,\
+ \ ${dim1})) \n% endif"
+
+file_format: 1
diff --git a/gr-fec/grc/variable_polar_encoder_systematic.xml b/gr-fec/grc/variable_polar_encoder_systematic.xml
deleted file mode 100644
index 0d9bcd96ab..0000000000
--- a/gr-fec/grc/variable_polar_encoder_systematic.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>systematic POLAR Encoder Definition</name>
- <key>variable_polar_encoder_systematic_def</key>
- <import>from gnuradio import fec</import>
- <var_make>#if int($ndim())==0 #
-self.$(id) = $(id) = fec.polar_encoder_systematic.make($block_size, $num_info_bits, $frozen_bit_positions) #slurp
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map((lambda a: fec.polar_encoder_systematic.make($block_size, $num_info_bits, $frozen_bit_positions)), range(0, $dim1)) #slurp
-#else
-self.$(id) = $(id) = map((lambda b: map((lambda a: fec.polar_encoder_systematic.make($block_size, $num_info_bits, $frozen_bit_positions)), range(0, $dim2))), range(0, $dim1)) #slurp
-#end if</var_make>
- <var_value>fec.polar_encoder_systematic.make($block_size, $num_info_bits, $frozen_bit_positions)</var_value>
- <make></make>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value>0</value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>4</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Block size (N)</name>
- <key>block_size</key>
- <type>int</type>
- </param>
-
- <param>
- <name>#Info Bits (K)</name>
- <key>num_info_bits</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Frozen Bit Positions</name>
- <key>frozen_bit_positions</key>
- <type>int_vector</type>
- </param>
-</block>
diff --git a/gr-fec/grc/variable_repetition_decoder_def_list.block.yml b/gr-fec/grc/variable_repetition_decoder_def_list.block.yml
new file mode 100644
index 0000000000..50590038e5
--- /dev/null
+++ b/gr-fec/grc/variable_repetition_decoder_def_list.block.yml
@@ -0,0 +1,49 @@
+id: variable_repetition_decoder_def
+label: Repetition Decoder Definition
+
+parameters:
+- id: value
+ label: Ignore Me
+ dtype: raw
+ default: '"ok"'
+ hide: all
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: framebits
+ label: Frame Bits
+ dtype: int
+ default: '2048'
+- id: rep
+ label: Repetitions
+ dtype: int
+ default: '3'
+- id: prob
+ label: a prior prob
+ dtype: float
+ default: '0.5'
+value: ${ fec.repetition_decoder.make(framebits, rep, prob) }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.repetition_decoder.make(${framebits},\
+ \ ${rep}, ${prob})\n% elif int(ndim)==1 #:\nself.${id} = ${id} = map( (lambda\
+ \ a: fec.repetition_decoder.make(${framebits}, ${rep}, ${prob})), range(0,${dim1})\
+ \ ) \n% else:\nself.${id} = ${id} = map( (lambda b: map( ( lambda a: fec.repetition_decoder.make(${framebits},\
+ \ ${rep}, ${prob})), range(0,${dim2}) ) ), range(0,${dim1})) \n% endif\n \
+ \ "
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/variable_repetition_decoder_def_list.xml b/gr-fec/grc/variable_repetition_decoder_def_list.xml
deleted file mode 100644
index cbeef445fa..0000000000
--- a/gr-fec/grc/variable_repetition_decoder_def_list.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# FEC REPETITION DECODER
-###################################################
- -->
-<block>
- <name>Repetition Decoder Definition</name>
- <key>variable_repetition_decoder_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.repetition_decoder.make($framebits, $rep, $prob)
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map( (lambda a: fec.repetition_decoder.make($framebits, $rep, $prob)), range(0,$dim1) ) #slurp
-#else
-self.$(id) = $(id) = map( (lambda b: map( ( lambda a: fec.repetition_decoder.make($framebits, $rep, $prob)), range(0,$dim2) ) ), range(0,$dim1)) #slurp
-#end if
- </var_make>
- <var_value>fec.repetition_decoder.make($framebits, $rep, $prob)</var_value>
- <make></make>
-
- <param>
- <name>Ignore Me</name>
- <key>value</key>
- <value>"ok"</value>
- <type>raw</type>
- <hide>all</hide>
- </param>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value></value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Frame Bits</name>
- <key>framebits</key>
- <value>2048</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Repetitions</name>
- <key>rep</key>
- <value>3</value>
- <type>int</type>
- </param>
-
- <param>
- <name>a prior prob</name>
- <key>prob</key>
- <value>0.5</value>
- <type>float</type>
- </param>
-
- <doc>
- </doc>
-</block>
diff --git a/gr-fec/grc/variable_repetition_encoder_def_list.block.yml b/gr-fec/grc/variable_repetition_encoder_def_list.block.yml
new file mode 100644
index 0000000000..3e86966e72
--- /dev/null
+++ b/gr-fec/grc/variable_repetition_encoder_def_list.block.yml
@@ -0,0 +1,39 @@
+id: variable_repetition_encoder_def
+label: Repetition Encoder Definition
+
+parameters:
+- id: ndim
+ label: Parallelism
+ dtype: enum
+ options: ['0', '1', '2']
+- id: dim1
+ label: Dimension 1
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 1) else 'all') }
+- id: dim2
+ label: Dimension 2
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if (int(ndim) >= 2) else 'all') }
+- id: framebits
+ label: Frame Bits
+ dtype: int
+ default: '2048'
+- id: rep
+ label: Repetitions
+ dtype: int
+ default: '3'
+value: ${ fec.repetition_encoder_make(framebits, rep) }
+
+templates:
+ imports: from gnuradio import fec
+ var_make: "\n% if int(ndim)==0 #:\nself.${id} = ${id} = fec.repetition_encoder_make(${framebits},\
+ \ ${rep})\n% elif int(ndim)==1 #:\nself.${id} = ${id} = map((lambda a: fec.repetition_encoder_make(${framebits},\
+ \ ${rep})), range(0,${dim1})) \n% else:\nself.${id} = ${id} = map((lambda\
+ \ b: map((lambda a: fec.repetition_encoder_make(${framebits}, ${rep})), range(0,${dim2}))),\
+ \ range(0,${dim1})) \n% endif\n "
+
+documentation: ""
+
+file_format: 1
diff --git a/gr-fec/grc/variable_repetition_encoder_def_list.xml b/gr-fec/grc/variable_repetition_encoder_def_list.xml
deleted file mode 100644
index e8554189cc..0000000000
--- a/gr-fec/grc/variable_repetition_encoder_def_list.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-# FEC REPETITION ENCODER
-###################################################
- -->
-<block>
- <name>Repetition Encoder Definition</name>
- <key>variable_repetition_encoder_def</key>
- <import>from gnuradio import fec</import>
- <var_make>
-#if int($ndim())==0 #
-self.$(id) = $(id) = fec.repetition_encoder_make($framebits, $rep)
-#else if int($ndim())==1 #
-self.$(id) = $(id) = map((lambda a: fec.repetition_encoder_make($framebits, $rep)), range(0,$dim1)) #slurp
-#else
-self.$(id) = $(id) = map((lambda b: map((lambda a: fec.repetition_encoder_make($framebits, $rep)), range(0,$dim2))), range(0,$dim1)) #slurp
-#end if
- </var_make>
- <var_value>fec.repetition_encoder_make($framebits, $rep)</var_value>
- <make></make>
-
- <param>
- <name>Parallelism</name>
- <key>ndim</key>
- <value></value>
- <type>enum</type>
- <option>
- <name>0</name>
- <key>0</key>
- </option>
- <option>
- <name>1</name>
- <key>1</key>
- </option>
- <option>
- <name>2</name>
- <key>2</key>
- </option>
- </param>
-
- <param>
- <name>Dimension 1</name>
- <key>dim1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Dimension 2</name>
- <key>dim2</key>
- <value>1</value>
- <type>int</type>
- <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
- </param>
-
- <param>
- <name>Frame Bits</name>
- <key>framebits</key>
- <value>2048</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Repetitions</name>
- <key>rep</key>
- <value>3</value>
- <type>int</type>
- </param>
-
- <doc>
- </doc>
-</block>
diff --git a/gr-fft/grc/CMakeLists.txt b/gr-fft/grc/CMakeLists.txt
index 8eeb431c3e..d0432c4281 100644
--- a/gr-fft/grc/CMakeLists.txt
+++ b/gr-fft/grc/CMakeLists.txt
@@ -18,10 +18,10 @@
# Boston, MA 02110-1301, USA.
install(FILES
- fft_block_tree.xml
- fft_fft_vxx.xml
- fft_goertzel_fc.xml
- fft_logpwrfft_x.xml
- fft_ctrlport_probe_psd.xml
+ fft.tree.yml
+ fft_fft_vxx.block.yml
+ fft_goertzel_fc.block.yml
+ fft_logpwrfft_x.block.yml
+ fft_ctrlport_probe_psd.block.yml
DESTINATION ${GRC_BLOCKS_DIR}
)
diff --git a/gr-fft/grc/fft.tree.yml b/gr-fft/grc/fft.tree.yml
new file mode 100644
index 0000000000..c198bc4573
--- /dev/null
+++ b/gr-fft/grc/fft.tree.yml
@@ -0,0 +1,7 @@
+'[Core]':
+- Fourier Analysis:
+ - fft_vxx
+ - goertzel_fc
+ - logpwrfft_x
+- Control Port:
+ - fft_ctrlport_probe_psd
diff --git a/gr-fft/grc/fft_block_tree.xml b/gr-fft/grc/fft_block_tree.xml
deleted file mode 100644
index e844d837b4..0000000000
--- a/gr-fft/grc/fft_block_tree.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2012 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##Block Tree for GR FFT blocks.
-###################################################
- -->
-<cat>
- <name>[Core]</name> <!-- Blank for Root Name -->
- <cat>
- <name>Fourier Analysis</name>
- <block>fft_vxx</block>
- <block>goertzel_fc</block>
- <block>logpwrfft_x</block>
- </cat>
- <cat>
- <name>Control Port</name>
- <block>fft_ctrlport_probe_psd</block>
- </cat>
-</cat>
diff --git a/gr-fft/grc/fft_ctrlport_probe_psd.block.yml b/gr-fft/grc/fft_ctrlport_probe_psd.block.yml
new file mode 100644
index 0000000000..3349f42639
--- /dev/null
+++ b/gr-fft/grc/fft_ctrlport_probe_psd.block.yml
@@ -0,0 +1,31 @@
+id: fft_ctrlport_probe_psd
+label: Ctrlport Probe PSD
+
+parameters:
+- id: name
+ label: Name
+ dtype: string
+ default: psd
+- id: desc
+ label: Description
+ dtype: string
+ default: PSD Plot
+- id: len
+ label: Length
+ dtype: int
+ default: '1024'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import fft
+ make: fft.ctrlport_probe_psd(${name}, ${desc}, ${len})
+ callbacks:
+ - set_length(${len})
+
+documentation: |-
+ Place this in a graph to export PSD values to a GRCP port probe.
+
+file_format: 1
diff --git a/gr-fft/grc/fft_ctrlport_probe_psd.xml b/gr-fft/grc/fft_ctrlport_probe_psd.xml
deleted file mode 100644
index f50144ba92..0000000000
--- a/gr-fft/grc/fft_ctrlport_probe_psd.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2012 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<block>
- <name>Ctrlport Probe PSD</name>
- <key>fft_ctrlport_probe_psd</key>
- <import>from gnuradio import fft</import>
- <make>fft.ctrlport_probe_psd($name, $desc, $len)</make>
- <callback>set_length($len)</callback>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>psd</value>
- <type>string</type>
- </param>
-
- <param>
- <name>Description</name>
- <key>desc</key>
- <value>PSD Plot</value>
- <type>string</type>
- </param>
-
- <param>
- <name>Length</name>
- <key>len</key>
- <value>1024</value>
- <type>int</type>
- </param>
-
-
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
-
- <doc>
- Place this in a graph to export PSD values to a GRCP port probe.
- </doc>
-
-</block>
-
diff --git a/gr-fft/grc/fft_fft_vxx.block.yml b/gr-fft/grc/fft_fft_vxx.block.yml
new file mode 100644
index 0000000000..33143f688a
--- /dev/null
+++ b/gr-fft/grc/fft_fft_vxx.block.yml
@@ -0,0 +1,60 @@
+id: fft_vxx
+label: FFT
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float]
+ option_attributes:
+ hide_shift: ['', all]
+ hide: part
+- id: fft_size
+ label: FFT Size
+ dtype: int
+ default: '1024'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: forward
+ label: Forward/Reverse
+ dtype: enum
+ options: ['True', 'False']
+ option_labels: [Forward, Reverse]
+- id: window
+ label: Window
+ dtype: real_vector
+ default: window.blackmanharris(1024)
+- id: shift
+ label: Shift
+ dtype: enum
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: ${ type.hide_shift }
+- id: nthreads
+ label: Num. Threads
+ dtype: int
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ fft_size }
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ fft_size }
+
+templates:
+ imports: |-
+ from gnuradio import fft
+ from gnuradio.fft import window
+ make: |-
+ % if type == "complex":
+ fft.fft_vcc(${fft_size}, ${forward}, ${window}, ${shift}, ${nthreads})
+ % else:
+ fft.fft_vfc(${fft_size}, ${forward}, ${window}, ${nthreads})
+ % endif
+ callbacks:
+ - set_nthreads(${nthreads})
+
+file_format: 1
diff --git a/gr-fft/grc/fft_fft_vxx.xml b/gr-fft/grc/fft_fft_vxx.xml
deleted file mode 100644
index 028721fe25..0000000000
--- a/gr-fft/grc/fft_fft_vxx.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##FFT
-###################################################
- -->
-<block>
- <name>FFT</name>
- <key>fft_vxx</key>
- <import>from gnuradio import fft</import>
- <import>from gnuradio.fft import window</import>
- <make>#if $type() == "complex"
-fft.fft_vcc($fft_size, $forward, $window, $shift, $nthreads)
-#else
-fft.fft_vfc($fft_size, $forward, $window, $nthreads)
-#end if</make>
- <callback>set_nthreads($nthreads)</callback>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>hide_shift:</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>hide_shift:all</opt>
- </option>
- </param>
- <param>
- <name>FFT Size</name>
- <key>fft_size</key>
- <value>1024</value>
- <type>int</type>
- </param>
- <param>
- <name>Forward/Reverse</name>
- <key>forward</key>
- <type>enum</type>
- <option>
- <name>Forward</name>
- <key>True</key>
- </option>
- <option>
- <name>Reverse</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Window</name>
- <key>window</key>
- <value>window.blackmanharris(1024)</value>
- <type>real_vector</type>
- </param>
- <param>
- <name>Shift</name>
- <key>shift</key>
- <type>enum</type>
- <hide>$type.hide_shift</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Num. Threads</name>
- <key>nthreads</key>
- <value>1</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$fft_size</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>$fft_size</vlen>
- </source>
-</block>
diff --git a/gr-fft/grc/fft_goertzel_fc.block.yml b/gr-fft/grc/fft_goertzel_fc.block.yml
new file mode 100644
index 0000000000..6ea74e7f53
--- /dev/null
+++ b/gr-fft/grc/fft_goertzel_fc.block.yml
@@ -0,0 +1,30 @@
+id: goertzel_fc
+label: Goertzel
+
+parameters:
+- id: rate
+ label: Rate
+ dtype: int
+- id: len
+ label: Length
+ dtype: int
+- id: freq
+ label: Frequency
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import fft
+ make: fft.goertzel_fc(${rate}, ${len}, ${freq})
+ callbacks:
+ - set_freq(${freq})
+ - set_rate(${rate})
+
+file_format: 1
diff --git a/gr-fft/grc/fft_goertzel_fc.xml b/gr-fft/grc/fft_goertzel_fc.xml
deleted file mode 100644
index 3712843586..0000000000
--- a/gr-fft/grc/fft_goertzel_fc.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Goertzel
-###################################################
- -->
-<block>
- <name>Goertzel</name>
- <key>goertzel_fc</key>
- <import>from gnuradio import fft</import>
- <make>fft.goertzel_fc($rate, $len, $freq)</make>
- <callback>set_freq($freq)</callback>
- <callback>set_rate($rate)</callback>
- <param>
- <name>Rate</name>
- <key>rate</key>
- <type>int</type>
- </param>
- <param>
- <name>Length</name>
- <key>len</key>
- <type>int</type>
- </param>
- <param>
- <name>Frequency</name>
- <key>freq</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-fft/grc/fft_logpwrfft_x.block.yml b/gr-fft/grc/fft_logpwrfft_x.block.yml
new file mode 100644
index 0000000000..1046fe81aa
--- /dev/null
+++ b/gr-fft/grc/fft_logpwrfft_x.block.yml
@@ -0,0 +1,59 @@
+id: logpwrfft_x
+label: Log Power FFT
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float]
+ option_attributes:
+ fcn: [c, f]
+ hide: part
+- id: sample_rate
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+- id: fft_size
+ label: FFT Size
+ dtype: int
+ default: '1024'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: ref_scale
+ label: Reference Scale
+ dtype: real
+ default: '2'
+- id: frame_rate
+ label: Frame Rate
+ dtype: real
+ default: '30'
+- id: average
+ label: Average
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+- id: avg_alpha
+ label: Average Alpha
+ dtype: real
+ default: '1.0'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: float
+ vlen: ${ fft_size }
+
+templates:
+ imports: from gnuradio.fft import logpwrfft
+ make: "logpwrfft.logpwrfft_${type.fcn}(\n\tsample_rate=${sample_rate},\n\tfft_size=${fft_size},\n\
+ \tref_scale=${ref_scale},\n\tframe_rate=${frame_rate},\n\tavg_alpha=${avg_alpha},\n\
+ \taverage=${average},\n)"
+ callbacks:
+ - set_sample_rate(${sample_rate})
+ - set_avg_alpha(${avg_alpha})
+ - set_average(${average})
+
+file_format: 1
diff --git a/gr-fft/grc/fft_logpwrfft_x.xml b/gr-fft/grc/fft_logpwrfft_x.xml
deleted file mode 100644
index ee45b577d8..0000000000
--- a/gr-fft/grc/fft_logpwrfft_x.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Log Power FFT
-###################################################
- -->
-<block>
- <name>Log Power FFT</name>
- <key>logpwrfft_x</key>
- <import>from gnuradio.fft import logpwrfft</import>
- <make>logpwrfft.logpwrfft_$(type.fcn)(
- sample_rate=$sample_rate,
- fft_size=$fft_size,
- ref_scale=$ref_scale,
- frame_rate=$frame_rate,
- avg_alpha=$avg_alpha,
- average=$average,
-)</make>
- <callback>set_sample_rate($sample_rate)</callback>
- <callback>set_avg_alpha($avg_alpha)</callback>
- <callback>set_average($average)</callback>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:c</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:f</opt>
- </option>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>sample_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>FFT Size</name>
- <key>fft_size</key>
- <value>1024</value>
- <type>int</type>
- </param>
- <param>
- <name>Reference Scale</name>
- <key>ref_scale</key>
- <value>2</value>
- <type>real</type>
- </param>
- <param>
- <name>Frame Rate</name>
- <key>frame_rate</key>
- <value>30</value>
- <type>real</type>
- </param>
- <param>
- <name>Average</name>
- <key>average</key>
- <value>False</value>
- <type>bool</type>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Average Alpha</name>
- <key>avg_alpha</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- <vlen>$fft_size</vlen>
- </source>
-</block>
diff --git a/gr-filter/grc/CMakeLists.txt b/gr-filter/grc/CMakeLists.txt
index d3039eb20b..95c286a136 100644
--- a/gr-filter/grc/CMakeLists.txt
+++ b/gr-filter/grc/CMakeLists.txt
@@ -18,37 +18,37 @@
# Boston, MA 02110-1301, USA.
install(FILES
- filter_block_tree.xml
- filter_dc_blocker_xx.xml
- filter_fft_filter_xxx.xml
- filter_fir_filter_xxx.xml
- filter_filter_delay_fc.xml
- filter_filterbank_vcvcf.xml
- filter_mmse_interpolator_xx.xml
- filter_mmse_resampler_xx.xml
- filter_freq_xlating_fft_filter_ccc.xml
- filter_freq_xlating_fir_filter_xxx.xml
- filter_hilbert_fc.xml
- filter_iir_filter_xxx.xml
- filter_interp_fir_filter_xxx.xml
- filter_pfb_arb_resampler.xml
- filter_pfb_channelizer.xml
- filter_pfb_channelizer_hier.xml
- filter_pfb_decimator.xml
- filter_pfb_interpolator.xml
- filter_pfb_synthesizer.xml
- filter_rational_resampler_xxx.xml
- filter_rational_resampler_base_xxx.xml
- filter_single_pole_iir_filter_xx.xml
- filter_low_pass_filter.xml
- filter_high_pass_filter.xml
- filter_band_pass_filter.xml
- filter_band_reject_filter.xml
- filter_root_raised_cosine_filter.xml
- variable_low_pass_filter_taps.xml
- variable_high_pass_filter_taps.xml
- variable_band_pass_filter_taps.xml
- variable_band_reject_filter_taps.xml
- variable_rrc_filter_taps.xml
+ filter.tree.yml
+ filter_dc_blocker_xx.block.yml
+ filter_fft_filter_xxx.block.yml
+ filter_fir_filter_xxx.block.yml
+ filter_filter_delay_fc.block.yml
+ filter_filterbank_vcvcf.block.yml
+ filter_mmse_interpolator_xx.block.yml
+ filter_mmse_resampler_xx.block.yml
+ filter_freq_xlating_fft_filter_ccc.block.yml
+ filter_freq_xlating_fir_filter_xxx.block.yml
+ filter_hilbert_fc.block.yml
+ filter_iir_filter_xxx.block.yml
+ filter_interp_fir_filter_xxx.block.yml
+ filter_pfb_arb_resampler.block.yml
+ filter_pfb_channelizer.block.yml
+ filter_pfb_channelizer_hier.block.yml
+ filter_pfb_decimator.block.yml
+ filter_pfb_interpolator.block.yml
+ filter_pfb_synthesizer.block.yml
+ filter_rational_resampler_xxx.block.yml
+ filter_rational_resampler_base_xxx.block.yml
+ filter_single_pole_iir_filter_xx.block.yml
+ filter_low_pass_filter.block.yml
+ filter_high_pass_filter.block.yml
+ filter_band_pass_filter.block.yml
+ filter_band_reject_filter.block.yml
+ filter_root_raised_cosine_filter.block.yml
+ variable_low_pass_filter_taps.block.yml
+ variable_high_pass_filter_taps.block.yml
+ variable_band_pass_filter_taps.block.yml
+ variable_band_reject_filter_taps.block.yml
+ variable_rrc_filter_taps.block.yml
DESTINATION ${GRC_BLOCKS_DIR}
)
diff --git a/gr-filter/grc/filter.tree.yml b/gr-filter/grc/filter.tree.yml
new file mode 100644
index 0000000000..dcb84503c9
--- /dev/null
+++ b/gr-filter/grc/filter.tree.yml
@@ -0,0 +1,35 @@
+'[Core]':
+- Filters:
+ - variable_low_pass_filter_taps
+ - variable_high_pass_filter_taps
+ - variable_band_pass_filter_taps
+ - variable_band_reject_filter_taps
+ - variable_rrc_filter_taps
+ - low_pass_filter
+ - high_pass_filter
+ - band_pass_filter
+ - band_reject_filter
+ - root_raised_cosine_filter
+ - dc_blocker_xx
+ - fft_filter_xxx
+ - fir_filter_xxx
+ - filterbank_vcvcf
+ - filter_delay_fc
+ - hilbert_fc
+ - iir_filter_xxx
+ - interp_fir_filter_xxx
+ - single_pole_iir_filter_xx
+- Resamplers:
+ - mmse_resampler_xx
+ - mmse_interpolator_xx
+ - pfb_arb_resampler_xxx
+ - rational_resampler_xxx
+ - rational_resampler_base_xxx
+- Channelizers:
+ - freq_xlating_fft_filter_ccc
+ - freq_xlating_fir_filter_xxx
+ - pfb_channelizer_ccf
+ - pfb_channelizer_hier_ccf
+ - pfb_decimator_ccf
+ - pfb_interpolator_ccf
+ - pfb_synthesizer_ccf
diff --git a/gr-filter/grc/filter_band_pass_filter.block.yml b/gr-filter/grc/filter_band_pass_filter.block.yml
new file mode 100644
index 0000000000..3d193cb122
--- /dev/null
+++ b/gr-filter/grc/filter_band_pass_filter.block.yml
@@ -0,0 +1,85 @@
+id: band_pass_filter
+label: Band Pass Filter
+
+parameters:
+- id: type
+ label: FIR Type
+ dtype: enum
+ options: [fir_filter_ccf, interp_fir_filter_ccf, fir_filter_fff, interp_fir_filter_fff,
+ fir_filter_ccc, interp_fir_filter_ccc, fir_filter_fcc, interp_fir_filter_fcc]
+ option_labels: [Complex->Complex (Real Taps) (Decim), Complex->Complex (Real Taps)
+ (Interp), Float->Float (Real Taps) (Decim), Float->Float (Real Taps) (Interp),
+ Complex->Complex (Complex Taps) (Decim), Complex->Complex (Complex Taps) (Interp),
+ Float->Complex (Complex Taps) (Decim), Float->Complex (Complex Taps) (Interp)]
+ option_attributes:
+ fcn: [band_pass, band_pass, band_pass, band_pass, complex_band_pass, complex_band_pass,
+ complex_band_pass, complex_band_pass]
+ input: [complex, complex, float, float, complex, complex, float, float]
+ output: [complex, complex, float, float, complex, complex, complex, complex]
+ hide: part
+- id: decim
+ label: Decimation
+ dtype: int
+ default: '1'
+ hide: ${ ('all' if str(type).startswith('interp') else 'none') }
+- id: interp
+ label: Interpolation
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if str(type).startswith('interp') else 'all') }
+- id: gain
+ label: Gain
+ dtype: real
+ default: '1'
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+- id: low_cutoff_freq
+ label: Low Cutoff Freq
+ dtype: real
+- id: high_cutoff_freq
+ label: High Cutoff Freq
+ dtype: real
+- id: width
+ label: Transition Width
+ dtype: real
+- id: win
+ label: Window
+ dtype: int
+ default: firdes.WIN_HAMMING
+ options: [firdes.WIN_HAMMING, firdes.WIN_HANN, firdes.WIN_BLACKMAN, firdes.WIN_RECTANGULAR,
+ firdes.WIN_KAISER]
+ option_labels: [Hamming, Hann, Blackman, Rectangular, Kaiser]
+- id: beta
+ label: Beta
+ dtype: real
+ default: '6.76'
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: "filter.$(type)(% if str(type).startswith('interp') then interp else decim#,\
+ \ firdes.type.fcn(:\n\t${gain}, ${samp_rate}, ${low_cutoff_freq}, ${high_cutoff_freq},\
+ \ ${width}, ${win}, ${beta}))"
+ callbacks:
+ - set_taps(firdes.${type.fcn}(${gain}, ${samp_rate}, ${low_cutoff_freq}, ${high_cutoff_freq},
+ ${width}, ${win}, ${beta}))
+
+documentation: |-
+ This filter is a convenience wrapper for an fir filter and a firdes taps generating function.
+
+ Sample rate, cutoff frequency, and transition width are in Hertz.
+
+ The beta paramater only applies to the Kaiser window.
+
+file_format: 1
diff --git a/gr-filter/grc/filter_band_pass_filter.xml b/gr-filter/grc/filter_band_pass_filter.xml
deleted file mode 100644
index c4c1852481..0000000000
--- a/gr-filter/grc/filter_band_pass_filter.xml
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Band Pass Filter: Custom wrapper
-###################################################
- -->
-<block>
- <name>Band Pass Filter</name>
- <key>band_pass_filter</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.$(type)(#if str($type).startswith('interp') then $interp else $decim#, firdes.$(type.fcn)(
- $gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, $win, $beta))</make>
- <callback>set_taps(firdes.$(type.fcn)($gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, $win, $beta))</callback>
- <param>
- <name>FIR Type</name>
- <key>type</key>
- <type>enum</type>
- <!-- Real Band Pass Taps -->
- <option>
- <name>Complex->Complex (Real Taps) (Decim)</name>
- <key>fir_filter_ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>fcn:band_pass</opt>
- </option>
- <option>
- <name>Complex->Complex (Real Taps) (Interp)</name>
- <key>interp_fir_filter_ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>fcn:band_pass</opt>
- </option>
- <option>
- <name>Float->Float (Real Taps) (Decim)</name>
- <key>fir_filter_fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- <opt>fcn:band_pass</opt>
- </option>
- <option>
- <name>Float->Float (Real Taps) (Interp)</name>
- <key>interp_fir_filter_fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- <opt>fcn:band_pass</opt>
- </option>
- <!-- Complex Band Pass Taps -->
- <option>
- <name>Complex->Complex (Complex Taps) (Decim)</name>
- <key>fir_filter_ccc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>fcn:complex_band_pass</opt>
- </option>
- <option>
- <name>Complex->Complex (Complex Taps) (Interp)</name>
- <key>interp_fir_filter_ccc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>fcn:complex_band_pass</opt>
- </option>
- <option>
- <name>Float->Complex (Complex Taps) (Decim)</name>
- <key>fir_filter_fcc</key>
- <opt>input:float</opt>
- <opt>output:complex</opt>
- <opt>fcn:complex_band_pass</opt>
- </option>
- <option>
- <name>Float->Complex (Complex Taps) (Interp)</name>
- <key>interp_fir_filter_fcc</key>
- <opt>input:float</opt>
- <opt>output:complex</opt>
- <opt>fcn:complex_band_pass</opt>
- </option>
- </param>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <value>1</value>
- <type>int</type>
- <hide>#if str($type).startswith('interp') then 'all' else 'none'#</hide>
- </param>
- <param>
- <name>Interpolation</name>
- <key>interp</key>
- <value>1</value>
- <type>int</type>
- <hide>#if str($type).startswith('interp') then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1</value>
- <type>real</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Low Cutoff Freq</name>
- <key>low_cutoff_freq</key>
- <type>real</type>
- </param>
- <param>
- <name>High Cutoff Freq</name>
- <key>high_cutoff_freq</key>
- <type>real</type>
- </param>
- <param>
- <name>Transition Width</name>
- <key>width</key>
- <type>real</type>
- </param>
- <param>
- <name>Window</name>
- <key>win</key>
- <value>firdes.WIN_HAMMING</value>
- <type>int</type>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- </param>
- <param>
- <name>Beta</name>
- <key>beta</key>
- <value>6.76</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <doc>
-This filter is a convenience wrapper for an fir filter and a firdes taps generating function.
-
-Sample rate, cutoff frequency, and transition width are in Hertz.
-
-The beta paramater only applies to the Kaiser window.
- </doc>
-</block>
diff --git a/gr-filter/grc/filter_band_reject_filter.block.yml b/gr-filter/grc/filter_band_reject_filter.block.yml
new file mode 100644
index 0000000000..a030bf4e42
--- /dev/null
+++ b/gr-filter/grc/filter_band_reject_filter.block.yml
@@ -0,0 +1,80 @@
+id: band_reject_filter
+label: Band Reject Filter
+
+parameters:
+- id: type
+ label: FIR Type
+ dtype: enum
+ options: [fir_filter_ccf, interp_fir_filter_ccf, fir_filter_fff, interp_fir_filter_fff]
+ option_labels: [Complex->Complex (Decimating), Complex->Complex (Interpolating),
+ Float->Float (Decimating), Float->Float (Interpolating)]
+ option_attributes:
+ input: [complex, complex, float, float]
+ output: [complex, complex, float, float]
+ hide: part
+- id: decim
+ label: Decimation
+ dtype: int
+ default: '1'
+ hide: ${ ('all' if str(type).startswith('interp') else 'none') }
+- id: interp
+ label: Interpolation
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if str(type).startswith('interp') else 'all') }
+- id: gain
+ label: Gain
+ dtype: real
+ default: '1'
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+- id: low_cutoff_freq
+ label: Low Cutoff Freq
+ dtype: real
+- id: high_cutoff_freq
+ label: High Cutoff Freq
+ dtype: real
+- id: width
+ label: Transition Width
+ dtype: real
+- id: win
+ label: Window
+ dtype: int
+ default: firdes.WIN_HAMMING
+ options: [firdes.WIN_HAMMING, firdes.WIN_HANN, firdes.WIN_BLACKMAN, firdes.WIN_RECTANGULAR,
+ firdes.WIN_KAISER]
+ option_labels: [Hamming, Hann, Blackman, Rectangular, Kaiser]
+- id: beta
+ label: Beta
+ dtype: real
+ default: '6.76'
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: "filter.$(type)(% if str(type).startswith('interp') then interp else decim#,\
+ \ firdes.band_reject(:\n\t${gain}, ${samp_rate}, ${low_cutoff_freq}, ${high_cutoff_freq},\
+ \ ${width}, ${win}, ${beta}))"
+ callbacks:
+ - set_taps(firdes.band_reject(${gain}, ${samp_rate}, ${low_cutoff_freq}, ${high_cutoff_freq},
+ ${width}, ${win}, ${beta}))
+
+documentation: |-
+ This filter is a convenience wrapper for an fir filter and a firdes taps generating function.
+
+ Sample rate, cutoff frequency, and transition width are in Hertz.
+
+ The beta paramater only applies to the Kaiser window.
+
+file_format: 1
diff --git a/gr-filter/grc/filter_band_reject_filter.xml b/gr-filter/grc/filter_band_reject_filter.xml
deleted file mode 100644
index a506789627..0000000000
--- a/gr-filter/grc/filter_band_reject_filter.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Band Reject Filter: Custom wrapper
-###################################################
- -->
-<block>
- <name>Band Reject Filter</name>
- <key>band_reject_filter</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.$(type)(#if str($type).startswith('interp') then $interp else $decim#, firdes.band_reject(
- $gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, $win, $beta))</make>
- <callback>set_taps(firdes.band_reject($gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, $win, $beta))</callback>
- <param>
- <name>FIR Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex (Decimating)</name>
- <key>fir_filter_ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- </option>
- <option>
- <name>Complex->Complex (Interpolating)</name>
- <key>interp_fir_filter_ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- </option>
- <option>
- <name>Float->Float (Decimating)</name>
- <key>fir_filter_fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- </option>
- <option>
- <name>Float->Float (Interpolating)</name>
- <key>interp_fir_filter_fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- </option>
- </param>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <value>1</value>
- <type>int</type>
- <hide>#if str($type).startswith('interp') then 'all' else 'none'#</hide>
- </param>
- <param>
- <name>Interpolation</name>
- <key>interp</key>
- <value>1</value>
- <type>int</type>
- <hide>#if str($type).startswith('interp') then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1</value>
- <type>real</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Low Cutoff Freq</name>
- <key>low_cutoff_freq</key>
- <type>real</type>
- </param>
- <param>
- <name>High Cutoff Freq</name>
- <key>high_cutoff_freq</key>
- <type>real</type>
- </param>
- <param>
- <name>Transition Width</name>
- <key>width</key>
- <type>real</type>
- </param>
- <param>
- <name>Window</name>
- <key>win</key>
- <value>firdes.WIN_HAMMING</value>
- <type>int</type>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- </param>
- <param>
- <name>Beta</name>
- <key>beta</key>
- <value>6.76</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <doc>
-This filter is a convenience wrapper for an fir filter and a firdes taps generating function.
-
-Sample rate, cutoff frequency, and transition width are in Hertz.
-
-The beta paramater only applies to the Kaiser window.
- </doc>
-</block>
diff --git a/gr-filter/grc/filter_block_tree.xml b/gr-filter/grc/filter_block_tree.xml
deleted file mode 100644
index b296e1cc74..0000000000
--- a/gr-filter/grc/filter_block_tree.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2012,2015 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##Block Tree for GR Filter blocks.
-###################################################
- -->
-<cat>
- <name>[Core]</name>
- <cat>
- <name>Filters</name>
- <!-- FIR filter tap generators -->
- <block>variable_low_pass_filter_taps</block>
- <block>variable_high_pass_filter_taps</block>
- <block>variable_band_pass_filter_taps</block>
- <block>variable_band_reject_filter_taps</block>
- <block>variable_rrc_filter_taps</block>
- <!-- FIR convenience filters -->
- <block>low_pass_filter</block>
- <block>high_pass_filter</block>
- <block>band_pass_filter</block>
- <block>band_reject_filter</block>
- <block>root_raised_cosine_filter</block>
- <!-- Regular Filter Blocks -->
- <block>dc_blocker_xx</block>
- <block>fft_filter_xxx</block>
- <block>fir_filter_xxx</block>
- <block>filterbank_vcvcf</block>
- <block>filter_delay_fc</block>
- <block>hilbert_fc</block>
- <block>iir_filter_xxx</block>
- <block>interp_fir_filter_xxx</block>
- <block>single_pole_iir_filter_xx</block>
- </cat>
- <cat>
- <name>Resamplers</name>
- <block>mmse_resampler_xx</block>
- <block>mmse_interpolator_xx</block>
- <block>pfb_arb_resampler_xxx</block>
- <block>rational_resampler_xxx</block>
- <block>rational_resampler_base_xxx</block>
- </cat>
- <cat>
- <name>Channelizers</name>
- <block>freq_xlating_fft_filter_ccc</block>
- <block>freq_xlating_fir_filter_xxx</block>
- <block>pfb_channelizer_ccf</block>
- <block>pfb_channelizer_hier_ccf</block>
- <block>pfb_decimator_ccf</block>
- <block>pfb_interpolator_ccf</block>
- <block>pfb_synthesizer_ccf</block>
- </cat>
-</cat>
diff --git a/gr-filter/grc/filter_dc_blocker_xx.block.yml b/gr-filter/grc/filter_dc_blocker_xx.block.yml
new file mode 100644
index 0000000000..2187624ff3
--- /dev/null
+++ b/gr-filter/grc/filter_dc_blocker_xx.block.yml
@@ -0,0 +1,35 @@
+id: dc_blocker_xx
+label: DC Blocker
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [cc, ff]
+ option_labels: [Complex->Complex, Float->Float]
+ option_attributes:
+ input: [complex, float]
+ output: [complex, float]
+ hide: part
+- id: length
+ label: Length
+ dtype: int
+ default: '32'
+- id: long_form
+ label: Long Form
+ dtype: bool
+ default: 'True'
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: from gnuradio import filter
+ make: filter.dc_blocker_${type}(${length}, ${long_form})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_dc_blocker_xx.xml b/gr-filter/grc/filter_dc_blocker_xx.xml
deleted file mode 100644
index 9bce5e980b..0000000000
--- a/gr-filter/grc/filter_dc_blocker_xx.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## DC Blocker
-###################################################
- -->
-<block>
- <name>DC Blocker</name>
- <key>dc_blocker_xx</key>
- <import>from gnuradio import filter</import>
- <make>filter.dc_blocker_$(type)($length, $long_form)</make>
- <!-- <callback>set_length($length)</callback> -->
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex</name>
- <key>cc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- </option>
- <option>
- <name>Float->Float</name>
- <key>ff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- </option>
- </param>
- <param>
- <name>Length</name>
- <key>length</key>
- <value>32</value>
- <type>int</type>
- </param>
- <param>
- <name>Long Form</name>
- <key>long_form</key>
- <value>True</value>
- <type>bool</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_fft_filter_xxx.block.yml b/gr-filter/grc/filter_fft_filter_xxx.block.yml
new file mode 100644
index 0000000000..bc53a02cd5
--- /dev/null
+++ b/gr-filter/grc/filter_fft_filter_xxx.block.yml
@@ -0,0 +1,52 @@
+id: fft_filter_xxx
+label: FFT Filter
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [ccc, ccf, fff]
+ option_labels: [Complex->Complex (Complex Taps), Complex->Complex (Real Taps),
+ Float->Float (Real Taps)]
+ option_attributes:
+ input: [complex, complex, float]
+ output: [complex, complex, float]
+ taps: [complex_vector, float_vector, float_vector]
+ hide: part
+- id: decim
+ label: Decimation
+ dtype: int
+ default: '1'
+- id: taps
+ label: Taps
+ dtype: ${ type.taps }
+- id: samp_delay
+ label: Sample Delay
+ dtype: int
+ default: '0'
+ hide: part
+- id: nthreads
+ label: Num. Threads
+ dtype: int
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: |
+ filter.fft_filter_${type}(${decim}, ${taps}, ${nthreads})
+ self.${id}.declare_sample_delay(${samp_delay})
+ callbacks:
+ - set_taps(${taps})
+ - set_nthreads(${nthreads})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_fft_filter_xxx.xml b/gr-filter/grc/filter_fft_filter_xxx.xml
deleted file mode 100644
index f843af2024..0000000000
--- a/gr-filter/grc/filter_fft_filter_xxx.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##FFT Filter
-###################################################
- -->
-<block>
- <name>FFT Filter</name>
- <key>fft_filter_xxx</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.fft_filter_$(type)($decim, $taps, $nthreads)
-self.$(id).declare_sample_delay($samp_delay)
-</make>
- <callback>set_taps($taps)</callback>
- <callback>set_nthreads($nthreads)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex (Complex Taps)</name>
- <key>ccc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Complex->Complex (Real Taps)</name>
- <key>ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:float_vector</opt>
- </option>
- <option>
- <name>Float->Float (Real Taps)</name>
- <key>fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- <opt>taps:float_vector</opt>
- </option>
- </param>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <type>$type.taps</type>
- </param>
- <param>
- <name>Sample Delay</name>
- <key>samp_delay</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Num. Threads</name>
- <key>nthreads</key>
- <value>1</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_filter_delay_fc.block.yml b/gr-filter/grc/filter_filter_delay_fc.block.yml
new file mode 100644
index 0000000000..5c220ccca6
--- /dev/null
+++ b/gr-filter/grc/filter_filter_delay_fc.block.yml
@@ -0,0 +1,26 @@
+id: filter_delay_fc
+label: Filter Delay
+
+parameters:
+- id: taps
+ label: Taps
+ dtype: real_vector
+
+inputs:
+- domain: stream
+ dtype: float
+- domain: stream
+ dtype: float
+ optional: true
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: filter.filter_delay_fc(${taps})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_filter_delay_fc.xml b/gr-filter/grc/filter_filter_delay_fc.xml
deleted file mode 100644
index 7b77c2caf9..0000000000
--- a/gr-filter/grc/filter_filter_delay_fc.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Filter Delay
-###################################################
- -->
-<block>
- <name>Filter Delay</name>
- <key>filter_delay_fc</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.filter_delay_fc($taps)</make>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <type>real_vector</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <sink>
- <name>in</name>
- <type>float</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_filterbank_vcvcf.block.yml b/gr-filter/grc/filter_filterbank_vcvcf.block.yml
new file mode 100644
index 0000000000..7ced5e27cb
--- /dev/null
+++ b/gr-filter/grc/filter_filterbank_vcvcf.block.yml
@@ -0,0 +1,26 @@
+id: filterbank_vcvcf
+label: Generic Filterbank
+
+parameters:
+- id: taps
+ label: Taps(list of lists)
+ dtype: raw
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ len(taps) }
+
+outputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ len(taps) }
+
+templates:
+ imports: from gnuradio import filter
+ make: filter.filterbank_vcvcf(${taps})
+ callbacks:
+ - set_taps(${taps})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_filterbank_vcvcf.xml b/gr-filter/grc/filter_filterbank_vcvcf.xml
deleted file mode 100644
index c8175358d1..0000000000
--- a/gr-filter/grc/filter_filterbank_vcvcf.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Generic Filterbank
-###################################################
- -->
-<block>
- <name>Generic Filterbank</name>
- <key>filterbank_vcvcf</key>
- <import>from gnuradio import filter</import>
- <make>filter.filterbank_vcvcf($taps)</make>
- <callback>set_taps($taps)</callback>
- <param>
- <name>Taps(list of lists)</name>
- <key>taps</key>
- <value></value>
- <type>raw</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>len($taps)</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <vlen>len($taps)</vlen>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_fir_filter_xxx.block.yml b/gr-filter/grc/filter_fir_filter_xxx.block.yml
new file mode 100644
index 0000000000..4d2f16b608
--- /dev/null
+++ b/gr-filter/grc/filter_fir_filter_xxx.block.yml
@@ -0,0 +1,49 @@
+id: fir_filter_xxx
+label: Decimating FIR Filter
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [ccc, ccf, fcc, fff, fsf, scc]
+ option_labels: [Complex->Complex (Complex Taps), Complex->Complex (Real Taps),
+ Float->Complex (Complex Taps), Float->Float (Real Taps), Float->Short (Real
+ Taps), Short->Complex (Complex Taps)]
+ option_attributes:
+ input: [complex, complex, float, float, float, short]
+ output: [complex, complex, complex, float, short, complex]
+ taps: [complex_vector, real_vector, complex_vector, real_vector, real_vector,
+ complex_vector]
+ hide: part
+- id: decim
+ label: Decimation
+ dtype: int
+ default: '1'
+- id: taps
+ label: Taps
+ dtype: ${ type.taps }
+- id: samp_delay
+ label: Sample Delay
+ dtype: int
+ default: '0'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: |
+ filter.fir_filter_${type}(${decim}, ${taps})
+ self.${id}.declare_sample_delay(${samp_delay})
+ callbacks:
+ - set_taps(${taps})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_fir_filter_xxx.xml b/gr-filter/grc/filter_fir_filter_xxx.xml
deleted file mode 100644
index edfd4b30c8..0000000000
--- a/gr-filter/grc/filter_fir_filter_xxx.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Decimating FIR Filter
-###################################################
- -->
-<block>
- <name>Decimating FIR Filter</name>
- <key>fir_filter_xxx</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.fir_filter_$(type)($decim, $taps)
-self.$(id).declare_sample_delay($samp_delay)
-</make>
- <callback>set_taps($taps)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex (Complex Taps)</name>
- <key>ccc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Complex->Complex (Real Taps)</name>
- <key>ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Float->Complex (Complex Taps)</name>
- <key>fcc</key>
- <opt>input:float</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Float->Float (Real Taps)</name>
- <key>fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Float->Short (Real Taps)</name>
- <key>fsf</key>
- <opt>input:float</opt>
- <opt>output:short</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Short->Complex (Complex Taps)</name>
- <key>scc</key>
- <opt>input:short</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- </param>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <type>$type.taps</type>
- </param>
- <param>
- <name>Sample Delay</name>
- <key>samp_delay</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_freq_xlating_fft_filter_ccc.block.yml b/gr-filter/grc/filter_freq_xlating_fft_filter_ccc.block.yml
new file mode 100644
index 0000000000..734f1aa909
--- /dev/null
+++ b/gr-filter/grc/filter_freq_xlating_fft_filter_ccc.block.yml
@@ -0,0 +1,51 @@
+id: freq_xlating_fft_filter_ccc
+label: Frequency Xlating FFT Filter
+
+parameters:
+- id: decim
+ label: Decimation
+ dtype: int
+ default: '1'
+- id: taps
+ label: Taps
+ dtype: complex_vector
+- id: center_freq
+ label: Center Frequency
+ dtype: real
+ default: '0'
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+- id: samp_delay
+ label: Sample Delay
+ dtype: int
+ default: '0'
+ hide: part
+- id: nthreads
+ label: Num. Threads
+ dtype: int
+ default: '1'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: |-
+ filter.freq_xlating_fft_filter_ccc(${decim}, ${taps}, ${center_freq}, ${samp_rate})
+ self.${id}.set_nthreads(${nthreads})
+ self.${id}.declare_sample_delay(${samp_delay})
+ callbacks:
+ - set_taps(${taps})
+ - set_center_freq(${center_freq})
+ - set_nthreads(${nthreads})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_freq_xlating_fft_filter_ccc.xml b/gr-filter/grc/filter_freq_xlating_fft_filter_ccc.xml
deleted file mode 100644
index ec27a4ff49..0000000000
--- a/gr-filter/grc/filter_freq_xlating_fft_filter_ccc.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Frequency Xlating FFT Filter
-###################################################
- -->
-<block>
- <name>Frequency Xlating FFT Filter</name>
- <key>freq_xlating_fft_filter_ccc</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.freq_xlating_fft_filter_ccc($decim, $taps, $center_freq, $samp_rate)
-self.$(id).set_nthreads($nthreads)
-self.$(id).declare_sample_delay($samp_delay)</make>
- <callback>set_taps($taps)</callback>
- <callback>set_center_freq($center_freq)</callback>
- <callback>set_nthreads($nthreads)</callback>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <type>complex_vector</type>
- </param>
- <param>
- <name>Center Frequency</name>
- <key>center_freq</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Sample Delay</name>
- <key>samp_delay</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Num. Threads</name>
- <key>nthreads</key>
- <value>1</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_freq_xlating_fir_filter_xxx.block.yml b/gr-filter/grc/filter_freq_xlating_fir_filter_xxx.block.yml
new file mode 100644
index 0000000000..aece398e29
--- /dev/null
+++ b/gr-filter/grc/filter_freq_xlating_fir_filter_xxx.block.yml
@@ -0,0 +1,55 @@
+id: freq_xlating_fir_filter_xxx
+label: Frequency Xlating FIR Filter
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [ccc, ccf, fcc, fcf, scc, scf]
+ option_labels: [Complex->Complex (Complex Taps), Complex->Complex (Real Taps),
+ Float->Complex (Complex Taps), Float->Complex (Real Taps), Short->Complex
+ (Complex Taps), Short->Complex (Real Taps)]
+ option_attributes:
+ input: [complex, complex, float, float, short, short]
+ output: [complex, complex, complex, complex, complex, complex]
+ taps: [complex_vector, real_vector, complex_vector, real_vector, complex_vector,
+ real_vector]
+ hide: part
+- id: decim
+ label: Decimation
+ dtype: int
+ default: '1'
+- id: taps
+ label: Taps
+ dtype: ${ type.taps }
+- id: center_freq
+ label: Center Frequency
+ dtype: real
+ default: '0'
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+- domain: message
+ id: freq
+ optional: true
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: filter.freq_xlating_fir_filter_${type}(${decim}, ${taps}, ${center_freq},
+ ${samp_rate})
+ callbacks:
+ - set_taps(${taps})
+ - set_center_freq(${center_freq})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_freq_xlating_fir_filter_xxx.xml b/gr-filter/grc/filter_freq_xlating_fir_filter_xxx.xml
deleted file mode 100644
index 8c8e100e60..0000000000
--- a/gr-filter/grc/filter_freq_xlating_fir_filter_xxx.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Frequency Xlating Filter
-###################################################
- -->
-<block>
- <name>Frequency Xlating FIR Filter</name>
- <key>freq_xlating_fir_filter_xxx</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.freq_xlating_fir_filter_$(type)($decim, $taps, $center_freq, $samp_rate)</make>
- <callback>set_taps($taps)</callback>
- <callback>set_center_freq($center_freq)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex (Complex Taps)</name>
- <key>ccc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Complex->Complex (Real Taps)</name>
- <key>ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Float->Complex (Complex Taps)</name>
- <key>fcc</key>
- <opt>input:float</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Float->Complex (Real Taps)</name>
- <key>fcf</key>
- <opt>input:float</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Short->Complex (Complex Taps)</name>
- <key>scc</key>
- <opt>input:short</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Short->Complex (Real Taps)</name>
- <key>scf</key>
- <opt>input:short</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- </param>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <type>$type.taps</type>
- </param>
- <param>
- <name>Center Frequency</name>
- <key>center_freq</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
-
- <sink>
- <name>freq</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
-
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_high_pass_filter.block.yml b/gr-filter/grc/filter_high_pass_filter.block.yml
new file mode 100644
index 0000000000..26947d1823
--- /dev/null
+++ b/gr-filter/grc/filter_high_pass_filter.block.yml
@@ -0,0 +1,77 @@
+id: high_pass_filter
+label: High Pass Filter
+
+parameters:
+- id: type
+ label: FIR Type
+ dtype: enum
+ options: [fir_filter_ccf, interp_fir_filter_ccf, fir_filter_fff, interp_fir_filter_fff]
+ option_labels: [Complex->Complex (Decimating), Complex->Complex (Interpolating),
+ Float->Float (Decimating), Float->Float (Interpolating)]
+ option_attributes:
+ input: [complex, complex, float, float]
+ output: [complex, complex, float, float]
+ hide: part
+- id: decim
+ label: Decimation
+ dtype: int
+ default: '1'
+ hide: ${ ('all' if str(type).startswith('interp') else 'none') }
+- id: interp
+ label: Interpolation
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if str(type).startswith('interp') else 'all') }
+- id: gain
+ label: Gain
+ dtype: real
+ default: '1'
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+- id: cutoff_freq
+ label: Cutoff Freq
+ dtype: real
+- id: width
+ label: Transition Width
+ dtype: real
+- id: win
+ label: Window
+ dtype: int
+ default: firdes.WIN_HAMMING
+ options: [firdes.WIN_HAMMING, firdes.WIN_HANN, firdes.WIN_BLACKMAN, firdes.WIN_RECTANGULAR,
+ firdes.WIN_KAISER]
+ option_labels: [Hamming, Hann, Blackman, Rectangular, Kaiser]
+- id: beta
+ label: Beta
+ dtype: real
+ default: '6.76'
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: "filter.$(type)(% if str(type).startswith('interp') then interp else decim#,\
+ \ firdes.high_pass(:\n\t${gain}, ${samp_rate}, ${cutoff_freq}, ${width}, ${win},\
+ \ ${beta}))"
+ callbacks:
+ - set_taps(firdes.high_pass(${gain}, ${samp_rate}, ${cutoff_freq}, ${width}, ${win},
+ ${beta}))
+
+documentation: |-
+ This filter is a convenience wrapper for an fir filter and a firdes taps generating function.
+
+ Sample rate, cutoff frequency, and transition width are in Hertz.
+
+ The beta paramater only applies to the Kaiser window.
+
+file_format: 1
diff --git a/gr-filter/grc/filter_high_pass_filter.xml b/gr-filter/grc/filter_high_pass_filter.xml
deleted file mode 100644
index 6b041145d5..0000000000
--- a/gr-filter/grc/filter_high_pass_filter.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##High Pass Filter: Custom wrapper
-###################################################
- -->
-<block>
- <name>High Pass Filter</name>
- <key>high_pass_filter</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.$(type)(#if str($type).startswith('interp') then $interp else $decim#, firdes.high_pass(
- $gain, $samp_rate, $cutoff_freq, $width, $win, $beta))</make>
- <callback>set_taps(firdes.high_pass($gain, $samp_rate, $cutoff_freq, $width, $win, $beta))</callback>
- <param>
- <name>FIR Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex (Decimating)</name>
- <key>fir_filter_ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- </option>
- <option>
- <name>Complex->Complex (Interpolating)</name>
- <key>interp_fir_filter_ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- </option>
- <option>
- <name>Float->Float (Decimating)</name>
- <key>fir_filter_fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- </option>
- <option>
- <name>Float->Float (Interpolating)</name>
- <key>interp_fir_filter_fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- </option>
- </param>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <value>1</value>
- <type>int</type>
- <hide>#if str($type).startswith('interp') then 'all' else 'none'#</hide>
- </param>
- <param>
- <name>Interpolation</name>
- <key>interp</key>
- <value>1</value>
- <type>int</type>
- <hide>#if str($type).startswith('interp') then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1</value>
- <type>real</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Cutoff Freq</name>
- <key>cutoff_freq</key>
- <type>real</type>
- </param>
- <param>
- <name>Transition Width</name>
- <key>width</key>
- <type>real</type>
- </param>
- <param>
- <name>Window</name>
- <key>win</key>
- <value>firdes.WIN_HAMMING</value>
- <type>int</type>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- </param>
- <param>
- <name>Beta</name>
- <key>beta</key>
- <value>6.76</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <doc>
-This filter is a convenience wrapper for an fir filter and a firdes taps generating function.
-
-Sample rate, cutoff frequency, and transition width are in Hertz.
-
-The beta paramater only applies to the Kaiser window.
- </doc>
-</block>
diff --git a/gr-filter/grc/filter_hilbert_fc.block.yml b/gr-filter/grc/filter_hilbert_fc.block.yml
new file mode 100644
index 0000000000..0d835c388d
--- /dev/null
+++ b/gr-filter/grc/filter_hilbert_fc.block.yml
@@ -0,0 +1,35 @@
+id: hilbert_fc
+label: Hilbert
+
+parameters:
+- id: num_taps
+ label: Num Taps
+ dtype: int
+ default: '65'
+- id: win
+ label: Window
+ dtype: int
+ default: firdes.WIN_HAMMING
+ options: [firdes.WIN_HAMMING, firdes.WIN_HANN, firdes.WIN_BLACKMAN, firdes.WIN_BLACKMAN_hARRIS,
+ firdes.WIN_RECTANGULAR, firdes.WIN_KAISER]
+ option_labels: [Hamming, Hann, Blackman, Blackman-harris, Rectangular, Kaiser]
+ hide: part
+- id: beta
+ label: Beta
+ dtype: real
+ default: '6.76'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: from gnuradio import filter
+ make: filter.hilbert_fc(${num_taps}, ${win}, ${beta})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_hilbert_fc.xml b/gr-filter/grc/filter_hilbert_fc.xml
deleted file mode 100644
index ddb7c334c5..0000000000
--- a/gr-filter/grc/filter_hilbert_fc.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Hilbert
-###################################################
- -->
-<block>
- <name>Hilbert</name>
- <key>hilbert_fc</key>
- <import>from gnuradio import filter</import>
- <make>filter.hilbert_fc($num_taps, $win, $beta)</make>
- <param>
- <name>Num Taps</name>
- <key>num_taps</key>
- <value>65</value>
- <type>int</type>
- </param>
- <param>
- <name>Window</name>
- <key>win</key>
- <value>firdes.WIN_HAMMING</value>
- <type>int</type>
- <hide>part</hide>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Blackman-harris</name>
- <key>firdes.WIN_BLACKMAN_hARRIS</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- </param>
- <param>
- <name>Beta</name>
- <key>beta</key>
- <value>6.76</value>
- <type>real</type>
- <hide>part</hide>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_iir_filter_xxx.block.yml b/gr-filter/grc/filter_iir_filter_xxx.block.yml
new file mode 100644
index 0000000000..4dfef2b0d6
--- /dev/null
+++ b/gr-filter/grc/filter_iir_filter_xxx.block.yml
@@ -0,0 +1,44 @@
+id: iir_filter_xxx
+label: IIR Filter
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [ffd, ccf, ccd, ccc, ccz]
+ option_labels: [Float->Float (Double Taps), Complex->Complex (Float Taps), Complex->Complex
+ (Double Taps), Complex->Complex (Complex Taps), Complex->Complex (Complex
+ Double Taps)]
+ option_attributes:
+ input: [float, complex, complex, complex, complex]
+ output: [float, complex, complex, complex, complex]
+ taps: [real_vector, real_vector, real_vector, complex_vector, complex_vector]
+ hide: part
+- id: fftaps
+ label: Feed-forward Taps
+ dtype: ${ type.taps }
+- id: fbtaps
+ label: Feedback Taps
+ dtype: ${ type.taps }
+- id: oldstyle
+ label: Old Style of Taps
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: from gnuradio import filter
+ make: filter.iir_filter_${type}(${fftaps}, ${fbtaps}, ${oldstyle})
+ callbacks:
+ - set_taps(${fftaps}, ${fbtaps})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_iir_filter_xxx.xml b/gr-filter/grc/filter_iir_filter_xxx.xml
deleted file mode 100644
index cd41d47caf..0000000000
--- a/gr-filter/grc/filter_iir_filter_xxx.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##IIR Filter
-###################################################
- -->
-<block>
- <name>IIR Filter</name>
- <key>iir_filter_xxx</key>
- <import>from gnuradio import filter</import>
- <make>filter.iir_filter_$(type)($fftaps, $fbtaps, $oldstyle)</make>
- <callback>set_taps($fftaps, $fbtaps)</callback>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Float->Float (Double Taps)</name>
- <key>ffd</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Complex->Complex (Float Taps)</name>
- <key>ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Complex->Complex (Double Taps)</name>
- <key>ccd</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Complex->Complex (Complex Taps)</name>
- <key>ccc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Complex->Complex (Complex Double Taps)</name>
- <key>ccz</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- </param>
-
- <param>
- <name>Feed-forward Taps</name>
- <key>fftaps</key>
- <type>$type.taps</type>
- </param>
-
- <param>
- <name>Feedback Taps</name>
- <key>fbtaps</key>
- <type>$type.taps</type>
- </param>
-
- <param>
- <name>Old Style of Taps</name>
- <key>oldstyle</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>True</name>
- <key>True</key>
- </option>
- <option>
- <name>False</name>
- <key>False</key>
- </option>
- </param>
-
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
-
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
-
-</block>
diff --git a/gr-filter/grc/filter_interp_fir_filter_xxx.block.yml b/gr-filter/grc/filter_interp_fir_filter_xxx.block.yml
new file mode 100644
index 0000000000..b5edfa1532
--- /dev/null
+++ b/gr-filter/grc/filter_interp_fir_filter_xxx.block.yml
@@ -0,0 +1,49 @@
+id: interp_fir_filter_xxx
+label: Interpolating FIR Filter
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [ccc, ccf, fcc, fff, fsf, scc]
+ option_labels: [Complex->Complex (Complex Taps), Complex->Complex (Real Taps),
+ Float->Complex (Complex Taps), Float->Float (Real Taps), Float->Short (Real
+ Taps), Short->Complex (Complex Taps)]
+ option_attributes:
+ input: [complex, complex, float, float, float, short]
+ output: [complex, complex, complex, float, short, complex]
+ taps: [complex_vector, real_vector, complex_vector, real_vector, real_vector,
+ complex_vector]
+ hide: part
+- id: interp
+ label: Interpolation
+ dtype: int
+ default: '1'
+- id: taps
+ label: Taps
+ dtype: ${ type.taps }
+- id: samp_delay
+ label: Sample Delay
+ dtype: int
+ default: '0'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: |
+ filter.interp_fir_filter_${type}(${interp}, ${taps})
+ self.${id}.declare_sample_delay(${samp_delay})
+ callbacks:
+ - set_taps(${taps})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_interp_fir_filter_xxx.xml b/gr-filter/grc/filter_interp_fir_filter_xxx.xml
deleted file mode 100644
index 0b82330f8c..0000000000
--- a/gr-filter/grc/filter_interp_fir_filter_xxx.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Interpolating FIR Filter
-###################################################
- -->
-<block>
- <name>Interpolating FIR Filter</name>
- <key>interp_fir_filter_xxx</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.interp_fir_filter_$(type)($interp, $taps)
-self.$(id).declare_sample_delay($samp_delay)
-</make>
- <callback>set_taps($taps)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex (Complex Taps)</name>
- <key>ccc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Complex->Complex (Real Taps)</name>
- <key>ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Float->Complex (Complex Taps)</name>
- <key>fcc</key>
- <opt>input:float</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Float->Float (Real Taps)</name>
- <key>fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Float->Short (Real Taps)</name>
- <key>fsf</key>
- <opt>input:float</opt>
- <opt>output:short</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Short->Complex (Complex Taps)</name>
- <key>scc</key>
- <opt>input:short</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- </param>
- <param>
- <name>Interpolation</name>
- <key>interp</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <type>$type.taps</type>
- </param>
- <param>
- <name>Sample Delay</name>
- <key>samp_delay</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_low_pass_filter.block.yml b/gr-filter/grc/filter_low_pass_filter.block.yml
new file mode 100644
index 0000000000..f2007b5f99
--- /dev/null
+++ b/gr-filter/grc/filter_low_pass_filter.block.yml
@@ -0,0 +1,77 @@
+id: low_pass_filter
+label: Low Pass Filter
+
+parameters:
+- id: type
+ label: FIR Type
+ dtype: enum
+ options: [fir_filter_ccf, interp_fir_filter_ccf, fir_filter_fff, interp_fir_filter_fff]
+ option_labels: [Complex->Complex (Decimating), Complex->Complex (Interpolating),
+ Float->Float (Decimating), Float->Float (Interpolating)]
+ option_attributes:
+ input: [complex, complex, float, float]
+ output: [complex, complex, float, float]
+ hide: part
+- id: decim
+ label: Decimation
+ dtype: int
+ default: '1'
+ hide: ${ ('all' if str(type).startswith('interp') else 'none') }
+- id: interp
+ label: Interpolation
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if str(type).startswith('interp') else 'all') }
+- id: gain
+ label: Gain
+ dtype: real
+ default: '1'
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+- id: cutoff_freq
+ label: Cutoff Freq
+ dtype: real
+- id: width
+ label: Transition Width
+ dtype: real
+- id: win
+ label: Window
+ dtype: int
+ default: firdes.WIN_HAMMING
+ options: [firdes.WIN_HAMMING, firdes.WIN_HANN, firdes.WIN_BLACKMAN, firdes.WIN_RECTANGULAR,
+ firdes.WIN_KAISER]
+ option_labels: [Hamming, Hann, Blackman, Rectangular, Kaiser]
+- id: beta
+ label: Beta
+ dtype: real
+ default: '6.76'
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: "filter.$(type)(% if str(type).startswith('interp') then interp else decim#,\
+ \ firdes.low_pass(:\n\t${gain}, ${samp_rate}, ${cutoff_freq}, ${width}, ${win},\
+ \ ${beta}))"
+ callbacks:
+ - set_taps(firdes.low_pass(${gain}, ${samp_rate}, ${cutoff_freq}, ${width}, ${win},
+ ${beta}))
+
+documentation: |-
+ This filter is a convenience wrapper for an fir filter and a firdes taps generating function.
+
+ Sample rate, cutoff frequency, and transition width are in Hertz.
+
+ The beta paramater only applies to the Kaiser window.
+
+file_format: 1
diff --git a/gr-filter/grc/filter_low_pass_filter.xml b/gr-filter/grc/filter_low_pass_filter.xml
deleted file mode 100644
index 66d15bb592..0000000000
--- a/gr-filter/grc/filter_low_pass_filter.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Low Pass Filter: Custom wrapper
-###################################################
- -->
-<block>
- <name>Low Pass Filter</name>
- <key>low_pass_filter</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.$(type)(#if str($type).startswith('interp') then $interp else $decim#, firdes.low_pass(
- $gain, $samp_rate, $cutoff_freq, $width, $win, $beta))</make>
- <callback>set_taps(firdes.low_pass($gain, $samp_rate, $cutoff_freq, $width, $win, $beta))</callback>
- <param>
- <name>FIR Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex (Decimating)</name>
- <key>fir_filter_ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- </option>
- <option>
- <name>Complex->Complex (Interpolating)</name>
- <key>interp_fir_filter_ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- </option>
- <option>
- <name>Float->Float (Decimating)</name>
- <key>fir_filter_fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- </option>
- <option>
- <name>Float->Float (Interpolating)</name>
- <key>interp_fir_filter_fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- </option>
- </param>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <value>1</value>
- <type>int</type>
- <hide>#if str($type).startswith('interp') then 'all' else 'none'#</hide>
- </param>
- <param>
- <name>Interpolation</name>
- <key>interp</key>
- <value>1</value>
- <type>int</type>
- <hide>#if str($type).startswith('interp') then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1</value>
- <type>real</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Cutoff Freq</name>
- <key>cutoff_freq</key>
- <type>real</type>
- </param>
- <param>
- <name>Transition Width</name>
- <key>width</key>
- <type>real</type>
- </param>
- <param>
- <name>Window</name>
- <key>win</key>
- <value>firdes.WIN_HAMMING</value>
- <type>int</type>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- </param>
- <param>
- <name>Beta</name>
- <key>beta</key>
- <value>6.76</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <doc>
-This filter is a convenience wrapper for an fir filter and a firdes taps generating function.
-
-Sample rate, cutoff frequency, and transition width are in Hertz.
-
-The beta paramater only applies to the Kaiser window.
- </doc>
-</block>
diff --git a/gr-filter/grc/filter_low_pass_xlating_filter.block.yml b/gr-filter/grc/filter_low_pass_xlating_filter.block.yml
new file mode 100644
index 0000000000..22cb100d06
--- /dev/null
+++ b/gr-filter/grc/filter_low_pass_xlating_filter.block.yml
@@ -0,0 +1,79 @@
+id: xlating_low_pass_filter
+label: Xlating Low Pass Filter
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [ccc, ccf, fcc, fcf, scc, scf]
+ option_labels: [Complex->Complex (Complex Taps), Complex->Complex (Real Taps),
+ Float->Complex (Complex Taps), Float->Complex (Real Taps), Short->Complex
+ (Complex Taps), Short->Complex (Real Taps)]
+ option_attributes:
+ input: [complex, complex, float, float, short, short]
+ output: [complex, complex, complex, complex, complex, complex]
+ taps: [complex_vector, real_vector, complex_vector, real_vector, complex_vector,
+ real_vector]
+ hide: part
+- id: decim
+ label: Decimation
+ dtype: int
+ default: '1'
+- id: gain
+ label: Gain
+ dtype: real
+ default: '1'
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+- id: center_freq
+ label: Center Frequency
+ dtype: real
+ default: '0'
+- id: cutoff_freq
+ label: Cutoff Freq
+ dtype: real
+- id: width
+ label: Transition Width
+ dtype: real
+- id: win
+ label: Window
+ dtype: int
+ default: firdes.WIN_HAMMING
+ options: [firdes.WIN_HAMMING, firdes.WIN_HANN, firdes.WIN_BLACKMAN, firdes.WIN_RECTANGULAR,
+ firdes.WIN_KAISER]
+ option_labels: [Hamming, Hann, Blackman, Rectangular, Kaiser]
+- id: beta
+ label: Beta
+ dtype: real
+ default: '6.76'
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: |-
+ filter.freq_xlating_fir_filter_${type}(${decim}, firdes.low_pass(
+ ${gain}, 2*${samp_rate}, ${cutoff_freq}, ${width}, ${win}, ${beta}), ${center_freq}, ${samp_rate})
+ callbacks:
+ - set_taps(firdes.low_pass(${gain}, 2*${samp_rate}, ${cutoff_freq}, ${width},
+ ${win}, ${beta}))
+ - set_center_freq(${center_freq})
+
+documentation: |-
+ This filter is a convenience wrapper for an xlating fir filter and a firdes taps generating function.
+
+ Sample rate, cutoff frequency, and transition width are in Hertz.
+
+ The beta paramater only applies to the Kaiser window.
+
+file_format: 1
diff --git a/gr-filter/grc/filter_low_pass_xlating_filter.xml b/gr-filter/grc/filter_low_pass_xlating_filter.xml
deleted file mode 100644
index 65d5e5bff6..0000000000
--- a/gr-filter/grc/filter_low_pass_xlating_filter.xml
+++ /dev/null
@@ -1,144 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Xlating Low Pass Filter: Custom wrapper
-###################################################
- -->
-<block>
- <name>Xlating Low Pass Filter</name>
- <key>xlating_low_pass_filter</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.freq_xlating_fir_filter_$(type)($decim, firdes.low_pass(
- $gain, 2*$samp_rate, $cutoff_freq, $width, $win, $beta), $center_freq, $samp_rate)</make>
- <callback>set_taps(firdes.low_pass($gain, 2*$samp_rate, $cutoff_freq, $width, $win, $beta))</callback>
- <callback>set_center_freq($center_freq)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex (Complex Taps)</name>
- <key>ccc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Complex->Complex (Real Taps)</name>
- <key>ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Float->Complex (Complex Taps)</name>
- <key>fcc</key>
- <opt>input:float</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Float->Complex (Real Taps)</name>
- <key>fcf</key>
- <opt>input:float</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Short->Complex (Complex Taps)</name>
- <key>scc</key>
- <opt>input:short</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Short->Complex (Real Taps)</name>
- <key>scf</key>
- <opt>input:short</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- </param>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1</value>
- <type>real</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Center Frequency</name>
- <key>center_freq</key>
- <value>0</value>
- <type>real</type>
- </param>
- <param>
- <name>Cutoff Freq</name>
- <key>cutoff_freq</key>
- <type>real</type>
- </param>
- <param>
- <name>Transition Width</name>
- <key>width</key>
- <type>real</type>
- </param>
- <param>
- <name>Window</name>
- <key>win</key>
- <value>firdes.WIN_HAMMING</value>
- <type>int</type>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- </param>
- <param>
- <name>Beta</name>
- <key>beta</key>
- <value>6.76</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <doc>
-This filter is a convenience wrapper for an xlating fir filter and a firdes taps generating function.
-
-Sample rate, cutoff frequency, and transition width are in Hertz.
-
-The beta paramater only applies to the Kaiser window.
- </doc>
-</block>
diff --git a/gr-filter/grc/filter_mmse_interpolator_xx.block.yml b/gr-filter/grc/filter_mmse_interpolator_xx.block.yml
new file mode 100644
index 0000000000..2eb0a3aa46
--- /dev/null
+++ b/gr-filter/grc/filter_mmse_interpolator_xx.block.yml
@@ -0,0 +1,33 @@
+id: mmse_interpolator_xx
+label: Fractional Interpolator
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float]
+ option_attributes:
+ fcn: [cc, ff]
+ hide: part
+- id: phase_shift
+ label: Phase Shift
+ dtype: real
+- id: interp_ratio
+ label: Interpolation Ratio
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import filter
+ make: filter.mmse_interpolator_${type.fcn}(${phase_shift}, ${interp_ratio})
+ callbacks:
+ - set_interp_ratio(${interp_ratio})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_mmse_interpolator_xx.xml b/gr-filter/grc/filter_mmse_interpolator_xx.xml
deleted file mode 100644
index 6677cf6f02..0000000000
--- a/gr-filter/grc/filter_mmse_interpolator_xx.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Fractional MMSE Interpolator
-###################################################
- -->
-<block>
- <name>Fractional Interpolator</name>
- <key>mmse_interpolator_xx</key>
- <import>from gnuradio import filter</import>
- <make>filter.mmse_interpolator_$(type.fcn)($phase_shift, $interp_ratio)</make>
- <callback>set_interp_ratio($interp_ratio)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- </param>
- <param>
- <name>Phase Shift</name>
- <key>phase_shift</key>
- <type>real</type>
- </param>
- <param>
- <name>Interpolation Ratio</name>
- <key>interp_ratio</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_mmse_resampler_xx.block.yml b/gr-filter/grc/filter_mmse_resampler_xx.block.yml
new file mode 100644
index 0000000000..d2ea3bdfe7
--- /dev/null
+++ b/gr-filter/grc/filter_mmse_resampler_xx.block.yml
@@ -0,0 +1,40 @@
+id: mmse_resampler_xx
+label: Fractional Resampler
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float]
+ option_attributes:
+ fcn: [cc, ff]
+ hide: part
+- id: phase_shift
+ label: Phase Shift
+ dtype: real
+- id: resamp_ratio
+ label: Resampling Ratio
+ dtype: real
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+- label: rate
+ domain: stream
+ dtype: float
+ optional: true
+- domain: message
+ id: msg_in
+ optional: true
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import filter
+ make: filter.mmse_resampler_${type.fcn}(${phase_shift}, ${resamp_ratio})
+ callbacks:
+ - set_resamp_ratio(${resamp_ratio})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_mmse_resampler_xx.xml b/gr-filter/grc/filter_mmse_resampler_xx.xml
deleted file mode 100644
index 5d5f9c1786..0000000000
--- a/gr-filter/grc/filter_mmse_resampler_xx.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Fractional MMSE Resampler
-###################################################
- -->
-<block>
- <name>Fractional Resampler</name>
- <key>mmse_resampler_xx</key>
- <import>from gnuradio import filter</import>
- <make>filter.mmse_resampler_$(type.fcn)($phase_shift, $resamp_ratio)</make>
- <callback>set_resamp_ratio($resamp_ratio)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- </param>
- <param>
- <name>Phase Shift</name>
- <key>phase_shift</key>
- <type>real</type>
- </param>
- <param>
- <name>Resampling Ratio</name>
- <key>resamp_ratio</key>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <sink>
- <name>rate</name>
- <type>float</type>
- <optional>1</optional>
- </sink>
- <sink>
- <name>msg_in</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_pfb_arb_resampler.block.yml b/gr-filter/grc/filter_pfb_arb_resampler.block.yml
new file mode 100644
index 0000000000..f724aa099e
--- /dev/null
+++ b/gr-filter/grc/filter_pfb_arb_resampler.block.yml
@@ -0,0 +1,55 @@
+id: pfb_arb_resampler_xxx
+label: Polyphase Arbitrary Resampler
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [ccf, fff, ccc]
+ option_labels: [Complex->Complex (Real Taps), Float->Float (Real Taps), Complex->Complex
+ (Complex Taps)]
+ option_attributes:
+ input: [complex, float, complex]
+ output: [complex, float, complex]
+ taps: [real_vector, real_vector, complex_vector]
+ hide: part
+- id: rrate
+ label: Resampling Rate
+ dtype: real
+- id: taps
+ label: Taps
+ dtype: ${ type.taps }
+- id: nfilts
+ label: Number of Filters
+ dtype: int
+ default: '32'
+- id: atten
+ label: Stop-band Attenuation
+ dtype: real
+ default: '100'
+- id: samp_delay
+ label: Sample Delay
+ dtype: int
+ default: '0'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: |-
+ from gnuradio.filter import pfb
+ from gnuradio.filter import firdes
+ make: "pfb.arb_resampler_${type}(\n\t ${rrate},\n% if taps:\n taps=${taps},\n\
+ % else:\n taps=None,\n% endif\n\t flt_size=${nfilts})\nself.${id}.declare_sample_delay(${samp_delay})\n\
+ \t"
+ callbacks:
+ - set_taps(${taps})
+ - set_rate(${rrate})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_pfb_arb_resampler.xml b/gr-filter/grc/filter_pfb_arb_resampler.xml
deleted file mode 100644
index b528adc00c..0000000000
--- a/gr-filter/grc/filter_pfb_arb_resampler.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Polyphase Arbitrary Resampler
-###################################################
- -->
-<block>
- <name>Polyphase Arbitrary Resampler</name>
- <key>pfb_arb_resampler_xxx</key>
- <import>from gnuradio.filter import pfb</import>
- <import>from gnuradio.filter import firdes</import>
- <make>pfb.arb_resampler_$(type)(
- $rrate,
-#if $taps()
- taps=$taps,
-#else
- taps=None,
-#end if
- flt_size=$nfilts)
-self.$(id).declare_sample_delay($samp_delay)
- </make>
- <callback>set_taps($taps)</callback>
- <callback>set_rate($rrate)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex (Real Taps)</name>
- <key>ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Float->Float (Real Taps)</name>
- <key>fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Complex->Complex (Complex Taps)</name>
- <key>ccc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- </param>
- <param>
- <name>Resampling Rate</name>
- <key>rrate</key>
- <type>real</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <type>$type.taps</type>
- </param>
- <param>
- <name>Number of Filters</name>
- <key>nfilts</key>
- <value>32</value>
- <type>int</type>
- </param>
- <param>
- <name>Stop-band Attenuation</name>
- <key>atten</key>
- <value>100</value>
- <type>real</type>
- </param>
- <param>
- <name>Sample Delay</name>
- <key>samp_delay</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_pfb_channelizer.block.yml b/gr-filter/grc/filter_pfb_channelizer.block.yml
new file mode 100644
index 0000000000..225a17451f
--- /dev/null
+++ b/gr-filter/grc/filter_pfb_channelizer.block.yml
@@ -0,0 +1,56 @@
+id: pfb_channelizer_ccf
+label: Polyphase Channelizer
+
+parameters:
+- id: nchans
+ label: Channels
+ dtype: int
+ default: '1'
+ hide: part
+- id: taps
+ label: Taps
+ dtype: real_vector
+- id: osr
+ label: Over Sample Ratio
+ dtype: real
+ default: '1.0'
+- id: atten
+ label: Attenuation
+ dtype: real
+ default: '100'
+- id: samp_delay
+ label: Sample Delay
+ dtype: int
+ default: '0'
+ hide: part
+- id: ch_map
+ label: Channel Map
+ dtype: int_vector
+ default: '[]'
+- id: bus_conns
+ label: Bus Connections
+ dtype: raw
+ default: '[[0,],]'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+ multiplicity: ${ nchans }
+
+templates:
+ imports: |-
+ from gnuradio.filter import pfb
+ from gnuradio.filter import firdes
+ make: "pfb.channelizer_ccf(\n\t ${nchans},\n\t ${taps},\n\t ${osr},\n\t ${atten})\n\
+ self.${id}.set_channel_map(${ch_map})\nself.${id}.declare_sample_delay(${samp_delay})\n\
+ \t"
+ callbacks:
+ - set_taps(${taps})
+ - set_channel_map(${ch_map})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_pfb_channelizer.xml b/gr-filter/grc/filter_pfb_channelizer.xml
deleted file mode 100644
index 446acf0591..0000000000
--- a/gr-filter/grc/filter_pfb_channelizer.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Polyphase Channelizer
-###################################################
- -->
-<block>
- <name>Polyphase Channelizer</name>
- <key>pfb_channelizer_ccf</key>
- <import>from gnuradio.filter import pfb</import>
- <import>from gnuradio.filter import firdes</import>
- <make>pfb.channelizer_ccf(
- $nchans,
- $taps,
- $osr,
- $atten)
-self.$(id).set_channel_map($ch_map)
-self.$(id).declare_sample_delay($samp_delay)
- </make>
- <callback>set_taps($taps)</callback>
- <callback>set_channel_map($ch_map)</callback>
-
- <param>
- <name>Channels</name>
- <key>nchans</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <value></value>
- <type>real_vector</type>
- </param>
- <param>
- <name>Over Sample Ratio</name>
- <key>osr</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Attenuation</name>
- <key>atten</key>
- <value>100</value>
- <type>real</type>
- </param>
- <param>
- <name>Sample Delay</name>
- <key>samp_delay</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Channel Map</name>
- <key>ch_map</key>
- <value>[]</value>
- <type>int_vector</type>
- </param>
- <param>
- <name>Bus Connections</name>
- <key>bus_conns</key>
- <value>[[0,],]</value>
- <type>raw</type>
- <hide>part</hide>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <nports>$nchans</nports>
- </source>
- <bus_structure_source>$bus_conns</bus_structure_source>
-</block>
diff --git a/gr-filter/grc/filter_pfb_channelizer_hier.block.yml b/gr-filter/grc/filter_pfb_channelizer_hier.block.yml
new file mode 100644
index 0000000000..764f88f65d
--- /dev/null
+++ b/gr-filter/grc/filter_pfb_channelizer_hier.block.yml
@@ -0,0 +1,55 @@
+id: pfb_channelizer_hier_ccf
+label: Hierarchical Polyphase Channelizer
+
+parameters:
+- id: nchans
+ label: Number of Channels
+ dtype: int
+ default: '3'
+ hide: part
+- id: n_filterbanks
+ label: Number of Filterbanks
+ dtype: int
+ default: '4'
+- id: taps
+ label: Taps
+ dtype: raw
+ default: None
+- id: outchans
+ label: Output Channels
+ dtype: raw
+ default: None
+- id: atten
+ label: Attenuation
+ dtype: real
+ default: '100'
+- id: bw
+ label: Fraction of Channel to Keep
+ dtype: real
+ default: '1.0'
+- id: tb
+ label: Transition Band (as a fraction of channel width)
+ dtype: real
+ default: '0.2'
+- id: ripple
+ label: Passband Ripple in dB
+ dtype: real
+ default: '0.1'
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+ multiplicity: ${ nchans }
+
+templates:
+ imports: from gnuradio.filter import pfb
+ make: "pfb.channelizer_hier_ccf(\n\t${nchans},\n\t${n_filterbanks},\n\t${taps},\n\
+ \t${outchans},\n ${atten},\n ${bw},\n ${tb},\n ${ripple}\n )\n\t"
+ callbacks:
+ - set_taps(${taps})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_pfb_channelizer_hier.xml b/gr-filter/grc/filter_pfb_channelizer_hier.xml
deleted file mode 100644
index 356187d90c..0000000000
--- a/gr-filter/grc/filter_pfb_channelizer_hier.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Hierarchical Polyphase Channelizer
-###################################################
- -->
-<block>
- <name>Hierarchical Polyphase Channelizer</name>
- <key>pfb_channelizer_hier_ccf</key>
- <import>from gnuradio.filter import pfb</import>
- <make>pfb.channelizer_hier_ccf(
- $nchans,
- $n_filterbanks,
- $taps,
- $outchans,
- $atten,
- $bw,
- $tb,
- $ripple
- )
- </make>
- <callback>set_taps($taps)</callback>
- <param>
- <name>Number of Channels</name>
- <key>nchans</key>
- <value>3</value>
- <type>int</type>
- </param>
- <param>
- <name>Number of Filterbanks</name>
- <key>n_filterbanks</key>
- <value>4</value>
- <type>int</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <value>None</value>
- <type>raw</type>
- </param>
- <param>
- <name>Output Channels</name>
- <key>outchans</key>
- <value>None</value>
- <type>raw</type>
- </param>
- <param>
- <name>Attenuation</name>
- <key>atten</key>
- <value>100</value>
- <type>real</type>
- </param>
- <param>
- <name>Fraction of Channel to Keep</name>
- <key>bw</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Transition Band (as a fraction of channel width)</name>
- <key>tb</key>
- <value>0.2</value>
- <type>real</type>
- </param>
- <param>
- <name>Passband Ripple in dB</name>
- <key>ripple</key>
- <value>0.1</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- <nports>$nchans</nports>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_pfb_decimator.block.yml b/gr-filter/grc/filter_pfb_decimator.block.yml
new file mode 100644
index 0000000000..2d3653ee03
--- /dev/null
+++ b/gr-filter/grc/filter_pfb_decimator.block.yml
@@ -0,0 +1,56 @@
+id: pfb_decimator_ccf
+label: Polyphase Decimator
+
+parameters:
+- id: decim
+ label: Decimation
+ dtype: int
+- id: taps
+ label: Taps
+ dtype: real_vector
+- id: channel
+ label: Output Channel
+ dtype: int
+ default: '0'
+- id: atten
+ label: Stop-band Attenuation
+ dtype: real
+ default: '100'
+- id: fft_rot
+ label: Use FFT Rotator
+ dtype: raw
+ default: 'True'
+ options: ['True', 'False']
+ hide: part
+- id: fft_filts
+ label: Use FFT Filters
+ dtype: raw
+ default: 'True'
+ options: ['True', 'False']
+ hide: part
+- id: samp_delay
+ label: Sample Delay
+ dtype: int
+ default: '0'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: |-
+ from gnuradio.filter import pfb
+ from gnuradio.filter import firdes
+ make: "pfb.decimator_ccf(\n\t ${decim},\n\t ${taps},\n\t ${channel},\n\t ${atten},\n\
+ \ ${fft_rot},\n ${fft_filts})\nself.${id}.declare_sample_delay(${samp_delay})\n\
+ \t"
+ callbacks:
+ - set_taps(${taps})
+ - set_channel(int(${channel}))
+
+file_format: 1
diff --git a/gr-filter/grc/filter_pfb_decimator.xml b/gr-filter/grc/filter_pfb_decimator.xml
deleted file mode 100644
index 2ad9e050c0..0000000000
--- a/gr-filter/grc/filter_pfb_decimator.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Polyphase Decimator
-###################################################
- -->
-<block>
- <name>Polyphase Decimator</name>
- <key>pfb_decimator_ccf</key>
- <import>from gnuradio.filter import pfb</import>
- <import>from gnuradio.filter import firdes</import>
- <make>pfb.decimator_ccf(
- $decim,
- $taps,
- $channel,
- $atten,
- $fft_rot,
- $fft_filts)
-self.$(id).declare_sample_delay($samp_delay)
- </make>
- <callback>set_taps($taps)</callback>
- <callback>set_channel(int($channel))</callback>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <type>int</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <value></value>
- <type>real_vector</type>
- </param>
- <param>
- <name>Output Channel</name>
- <key>channel</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Stop-band Attenuation</name>
- <key>atten</key>
- <value>100</value>
- <type>real</type>
- </param>
- <param>
- <name>Use FFT Rotator</name>
- <key>fft_rot</key>
- <value>True</value>
- <type>raw</type>
- <hide>part</hide>
- <option>
- <name>True</name>
- <key>True</key>
- </option>
- <option>
- <name>False</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Use FFT Filters</name>
- <key>fft_filts</key>
- <value>True</value>
- <type>raw</type>
- <hide>part</hide>
- <option>
- <name>True</name>
- <key>True</key>
- </option>
- <option>
- <name>False</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Sample Delay</name>
- <key>samp_delay</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_pfb_interpolator.block.yml b/gr-filter/grc/filter_pfb_interpolator.block.yml
new file mode 100644
index 0000000000..9da3c07a15
--- /dev/null
+++ b/gr-filter/grc/filter_pfb_interpolator.block.yml
@@ -0,0 +1,38 @@
+id: pfb_interpolator_ccf
+label: Polyphase Interpolator
+
+parameters:
+- id: interp
+ label: Interpolation
+ dtype: int
+- id: taps
+ label: Taps
+ dtype: real_vector
+- id: atten
+ label: Attenuation
+ dtype: real
+ default: '100'
+- id: samp_delay
+ label: Sample Delay
+ dtype: int
+ default: '0'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: complex
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: |-
+ from gnuradio.filter import pfb
+ from gnuradio.filter import firdes
+ make: "pfb.interpolator_ccf(\n\t ${interp},\n\t ${taps},\n\t ${atten})\nself.${id}.declare_sample_delay(${samp_delay})\n\
+ \t"
+ callbacks:
+ - set_taps(${taps})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_pfb_interpolator.xml b/gr-filter/grc/filter_pfb_interpolator.xml
deleted file mode 100644
index 0ad5909c12..0000000000
--- a/gr-filter/grc/filter_pfb_interpolator.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Polyphase Interpolator
-###################################################
- -->
-<block>
- <name>Polyphase Interpolator</name>
- <key>pfb_interpolator_ccf</key>
- <import>from gnuradio.filter import pfb</import>
- <import>from gnuradio.filter import firdes</import>
- <make>pfb.interpolator_ccf(
- $interp,
- $taps,
- $atten)
-self.$(id).declare_sample_delay($samp_delay)
- </make>
- <callback>set_taps($taps)</callback>
- <param>
- <name>Interpolation</name>
- <key>interp</key>
- <type>int</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <value></value>
- <type>real_vector</type>
- </param>
- <param>
- <name>Attenuation</name>
- <key>atten</key>
- <value>100</value>
- <type>real</type>
- </param>
- <param>
- <name>Sample Delay</name>
- <key>samp_delay</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_pfb_synthesizer.block.yml b/gr-filter/grc/filter_pfb_synthesizer.block.yml
new file mode 100644
index 0000000000..00da00e4e5
--- /dev/null
+++ b/gr-filter/grc/filter_pfb_synthesizer.block.yml
@@ -0,0 +1,55 @@
+id: pfb_synthesizer_ccf
+label: Polyphase Synthesizer
+
+parameters:
+- id: numchans
+ label: Channels
+ dtype: int
+ default: '2'
+- id: connections
+ label: Connections
+ dtype: int
+ default: '2'
+ hide: part
+- id: taps
+ label: Taps
+ dtype: real_vector
+- id: twox
+ label: 2x Sample Rate
+ dtype: bool
+ default: 'False'
+- id: samp_delay
+ label: Sample Delay
+ dtype: int
+ default: '0'
+ hide: part
+- id: ch_map
+ label: Channel Map
+ dtype: int_vector
+ default: '[]'
+- id: bus_conns
+ label: Bus Connections
+ dtype: raw
+ default: '[[0,],]'
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: complex
+ multiplicity: ${ connections }
+
+outputs:
+- domain: stream
+ dtype: complex
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: "filter.pfb_synthesizer_ccf(\n\t ${numchans}, ${taps}, ${twox})\nself.${id}.set_channel_map(${ch_map})\n\
+ self.${id}.declare_sample_delay(${samp_delay})\n\t"
+ callbacks:
+ - set_taps(${taps})
+ - set_channel_map(${ch_map})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_pfb_synthesizer.xml b/gr-filter/grc/filter_pfb_synthesizer.xml
deleted file mode 100644
index 8cbe19528d..0000000000
--- a/gr-filter/grc/filter_pfb_synthesizer.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Polyphase Synthesis Filterbank
-###################################################
- -->
-<block>
- <name>Polyphase Synthesizer</name>
- <key>pfb_synthesizer_ccf</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.pfb_synthesizer_ccf(
- $numchans, $taps, $twox)
-self.$(id).set_channel_map($ch_map)
-self.$(id).declare_sample_delay($samp_delay)
- </make>
- <callback>set_taps($taps)</callback>
- <callback>set_channel_map($ch_map)</callback>
-
- <param>
- <name>Channels</name>
- <key>numchans</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Connections</name>
- <key>connections</key>
- <value>2</value>
- <type>int</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <type>real_vector</type>
- </param>
- <param>
- <name>2x Sample Rate</name>
- <key>twox</key>
- <value>False</value>
- <type>bool</type>
- </param>
- <param>
- <name>Sample Delay</name>
- <key>samp_delay</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Channel Map</name>
- <key>ch_map</key>
- <value>[]</value>
- <type>int_vector</type>
- </param>
- <param>
- <name>Bus Connections</name>
- <key>bus_conns</key>
- <value>[[0,],]</value>
- <type>raw</type>
- <hide>part</hide>
- </param>
- <sink>
- <name>in</name>
- <type>complex</type>
- <nports>$connections</nports>
- </sink>
- <source>
- <name>out</name>
- <type>complex</type>
- </source>
- <bus_structure_sink>$bus_conns</bus_structure_sink>
-</block>
diff --git a/gr-filter/grc/filter_rational_resampler_base_xxx.block.yml b/gr-filter/grc/filter_rational_resampler_base_xxx.block.yml
new file mode 100644
index 0000000000..e8fc797d9b
--- /dev/null
+++ b/gr-filter/grc/filter_rational_resampler_base_xxx.block.yml
@@ -0,0 +1,46 @@
+id: rational_resampler_base_xxx
+label: Rational Resampler Base
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [ccc, ccf, fcc, fff, fsf, scc]
+ option_labels: [Complex->Complex (Complex Taps), Complex->Complex (Real Taps),
+ Float->Complex (Complex Taps), Float->Float (Real Taps), Float->Short (Real
+ Taps), Short->Complex (Complex Taps)]
+ option_attributes:
+ input: [complex, complex, float, float, float, short]
+ output: [complex, complex, complex, float, short, complex]
+ taps: [complex_vector, real_vector, complex_vector, real_vector, real_vector,
+ complex_vector]
+ hide: part
+- id: interp
+ label: Interpolation
+ dtype: int
+ default: '1'
+- id: decim
+ label: Decimation
+ dtype: int
+ default: '1'
+- id: taps
+ label: Taps
+ dtype: ${ type.taps }
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: filter.rational_resampler_base_${type}(${interp}, ${decim}, ${taps})
+ callbacks:
+ - set_taps(${taps})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_rational_resampler_base_xxx.xml b/gr-filter/grc/filter_rational_resampler_base_xxx.xml
deleted file mode 100644
index 399bfc74c9..0000000000
--- a/gr-filter/grc/filter_rational_resampler_base_xxx.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Rational Resampler Base
-###################################################
- -->
-<block>
- <name>Rational Resampler Base</name>
- <key>rational_resampler_base_xxx</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.rational_resampler_base_$(type)($interp, $decim, $taps)</make>
- <callback>set_taps($taps)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex (Complex Taps)</name>
- <key>ccc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Complex->Complex (Real Taps)</name>
- <key>ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Float->Complex (Complex Taps)</name>
- <key>fcc</key>
- <opt>input:float</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Float->Float (Real Taps)</name>
- <key>fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Float->Short (Real Taps)</name>
- <key>fsf</key>
- <opt>input:float</opt>
- <opt>output:short</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Short->Complex (Complex Taps)</name>
- <key>scc</key>
- <opt>input:short</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- </param>
- <param>
- <name>Interpolation</name>
- <key>interp</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <type>$type.taps</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_rational_resampler_xxx.block.yml b/gr-filter/grc/filter_rational_resampler_xxx.block.yml
new file mode 100644
index 0000000000..e67e7cbf6f
--- /dev/null
+++ b/gr-filter/grc/filter_rational_resampler_xxx.block.yml
@@ -0,0 +1,62 @@
+id: rational_resampler_xxx
+label: Rational Resampler
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [ccc, ccf, fcc, fff]
+ option_labels: [Complex->Complex (Complex Taps), Complex->Complex (Real Taps),
+ Float->Complex (Complex Taps), Float->Float (Real Taps)]
+ option_attributes:
+ input: [complex, complex, float, float]
+ output: [complex, complex, complex, float]
+ taps: [complex_vector, real_vector, complex_vector, real_vector]
+ hide: part
+- id: interp
+ label: Interpolation
+ dtype: int
+ default: '1'
+- id: decim
+ label: Decimation
+ dtype: int
+ default: '1'
+- id: taps
+ label: Taps
+ dtype: ${ type.taps }
+- id: fbw
+ label: Fractional BW
+ dtype: real
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: |-
+ filter.rational_resampler_${type}(
+ interpolation=${interp},
+ decimation=${decim},
+ % if taps:
+ taps=${taps},
+ % else:
+ taps=None,
+ % endif
+ % if fbw != 0:
+ fractional_bw=${fbw},
+ % else:
+ fractional_bw=None,
+ % endif
+ )
+ callbacks:
+ - set_taps(${taps})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_rational_resampler_xxx.xml b/gr-filter/grc/filter_rational_resampler_xxx.xml
deleted file mode 100644
index 7e275818d2..0000000000
--- a/gr-filter/grc/filter_rational_resampler_xxx.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Rational Resampler Base
-###################################################
- -->
-<block>
- <name>Rational Resampler</name>
- <key>rational_resampler_xxx</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.rational_resampler_$(type)(
- interpolation=$interp,
- decimation=$decim,
-#if $taps()
- taps=$taps,
-#else
- taps=None,
-#end if
-#if $fbw() != 0
- fractional_bw=$fbw,
-#else
- fractional_bw=None,
-#end if
-)</make>
- <callback>set_taps($taps)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex (Complex Taps)</name>
- <key>ccc</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Complex->Complex (Real Taps)</name>
- <key>ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- <opt>taps:real_vector</opt>
- </option>
- <option>
- <name>Float->Complex (Complex Taps)</name>
- <key>fcc</key>
- <opt>input:float</opt>
- <opt>output:complex</opt>
- <opt>taps:complex_vector</opt>
- </option>
- <option>
- <name>Float->Float (Real Taps)</name>
- <key>fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- <opt>taps:real_vector</opt>
- </option>
- </param>
- <param>
- <name>Interpolation</name>
- <key>interp</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Taps</name>
- <key>taps</key>
- <value></value>
- <type>$type.taps</type>
- </param>
- <param>
- <name>Fractional BW</name>
- <key>fbw</key>
- <value>0</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
-</block>
diff --git a/gr-filter/grc/filter_root_raised_cosine_filter.block.yml b/gr-filter/grc/filter_root_raised_cosine_filter.block.yml
new file mode 100644
index 0000000000..7a435f161b
--- /dev/null
+++ b/gr-filter/grc/filter_root_raised_cosine_filter.block.yml
@@ -0,0 +1,70 @@
+id: root_raised_cosine_filter
+label: Root Raised Cosine Filter
+
+parameters:
+- id: type
+ label: FIR Type
+ dtype: enum
+ options: [fir_filter_ccf, interp_fir_filter_ccf, fir_filter_fff, interp_fir_filter_fff]
+ option_labels: [Complex->Complex (Decimating), Complex->Complex (Interpolating),
+ Float->Float (Decimating), Float->Float (Interpolating)]
+ option_attributes:
+ input: [complex, complex, float, float]
+ output: [complex, complex, float, float]
+ hide: part
+- id: decim
+ label: Decimation
+ dtype: int
+ default: '1'
+ hide: ${ ('all' if str(type).startswith('interp') else 'none') }
+- id: interp
+ label: Interpolation
+ dtype: int
+ default: '1'
+ hide: ${ ('none' if str(type).startswith('interp') else 'all') }
+- id: gain
+ label: Gain
+ dtype: real
+ default: '1'
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+- id: sym_rate
+ label: Symbol Rate
+ dtype: real
+ default: '1.0'
+- id: alpha
+ label: Alpha
+ dtype: real
+ default: '0.35'
+- id: ntaps
+ label: Num Taps
+ dtype: int
+ default: 11*samp_rate
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+templates:
+ imports: |-
+ from gnuradio import filter
+ from gnuradio.filter import firdes
+ make: "filter.$(type)(% if str(type).startswith('interp') then interp else decim#,\
+ \ firdes.root_raised_cosine(:\n\t${gain}, ${samp_rate}, ${sym_rate}, ${alpha},\
+ \ ${ntaps}))"
+ callbacks:
+ - set_taps(firdes.root_raised_cosine(${gain}, ${samp_rate}, ${sym_rate}, ${alpha},
+ ${ntaps}))
+
+documentation: |-
+ This filter is a convenience wrapper for an fir filter and a firdes taps generating function.
+
+ Sample rate in Hertz.
+
+file_format: 1
diff --git a/gr-filter/grc/filter_root_raised_cosine_filter.xml b/gr-filter/grc/filter_root_raised_cosine_filter.xml
deleted file mode 100644
index fde88828da..0000000000
--- a/gr-filter/grc/filter_root_raised_cosine_filter.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Root Raised Cosine Filter: Custom wrapper
-###################################################
- -->
-<block>
- <name>Root Raised Cosine Filter</name>
- <key>root_raised_cosine_filter</key>
- <import>from gnuradio import filter</import>
- <import>from gnuradio.filter import firdes</import>
- <make>filter.$(type)(#if str($type).startswith('interp') then $interp else $decim#, firdes.root_raised_cosine(
- $gain, $samp_rate, $sym_rate, $alpha, $ntaps))</make>
- <callback>set_taps(firdes.root_raised_cosine($gain, $samp_rate, $sym_rate, $alpha, $ntaps))</callback>
- <param>
- <name>FIR Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex->Complex (Decimating)</name>
- <key>fir_filter_ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- </option>
- <option>
- <name>Complex->Complex (Interpolating)</name>
- <key>interp_fir_filter_ccf</key>
- <opt>input:complex</opt>
- <opt>output:complex</opt>
- </option>
- <option>
- <name>Float->Float (Decimating)</name>
- <key>fir_filter_fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- </option>
- <option>
- <name>Float->Float (Interpolating)</name>
- <key>interp_fir_filter_fff</key>
- <opt>input:float</opt>
- <opt>output:float</opt>
- </option>
- </param>
- <param>
- <name>Decimation</name>
- <key>decim</key>
- <value>1</value>
- <type>int</type>
- <hide>#if str($type).startswith('interp') then 'all' else 'none'#</hide>
- </param>
- <param>
- <name>Interpolation</name>
- <key>interp</key>
- <value>1</value>
- <type>int</type>
- <hide>#if str($type).startswith('interp') then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1</value>
- <type>real</type>
- </param>
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- <param>
- <name>Symbol Rate</name>
- <key>sym_rate</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Alpha</name>
- <key>alpha</key>
- <value>0.35</value>
- <type>real</type>
- </param>
- <param>
- <name>Num Taps</name>
- <key>ntaps</key>
- <value>11*samp_rate</value>
- <type>int</type>
- </param>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <doc>
-This filter is a convenience wrapper for an fir filter and a firdes taps generating function.
-
-Sample rate in Hertz.
- </doc>
-</block>
diff --git a/gr-filter/grc/filter_single_pole_iir_filter_xx.block.yml b/gr-filter/grc/filter_single_pole_iir_filter_xx.block.yml
new file mode 100644
index 0000000000..09561d7109
--- /dev/null
+++ b/gr-filter/grc/filter_single_pole_iir_filter_xx.block.yml
@@ -0,0 +1,38 @@
+id: single_pole_iir_filter_xx
+label: Single Pole IIR Filter
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float]
+ option_attributes:
+ fcn: [cc, ff]
+ hide: part
+- id: alpha
+ label: Alpha
+ dtype: real
+ default: '1.0'
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import filter
+ make: filter.single_pole_iir_filter_${type.fcn}(${alpha}, ${vlen})
+ callbacks:
+ - set_taps(${alpha})
+
+file_format: 1
diff --git a/gr-filter/grc/filter_single_pole_iir_filter_xx.xml b/gr-filter/grc/filter_single_pole_iir_filter_xx.xml
deleted file mode 100644
index 3eaf52625f..0000000000
--- a/gr-filter/grc/filter_single_pole_iir_filter_xx.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Single Pole IIR Filter
-###################################################
- -->
-<block>
- <name>Single Pole IIR Filter</name>
- <key>single_pole_iir_filter_xx</key>
- <import>from gnuradio import filter</import>
- <make>filter.single_pole_iir_filter_$(type.fcn)($alpha, $vlen)</make>
- <callback>set_taps($alpha)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:cc</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:ff</opt>
- </option>
- </param>
- <param>
- <name>Alpha</name>
- <key>alpha</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/gr-filter/grc/variable_band_pass_filter_taps.block.yml b/gr-filter/grc/variable_band_pass_filter_taps.block.yml
new file mode 100644
index 0000000000..4d82445a8a
--- /dev/null
+++ b/gr-filter/grc/variable_band_pass_filter_taps.block.yml
@@ -0,0 +1,53 @@
+id: variable_band_pass_filter_taps
+label: Band-pass Filter Taps
+
+parameters:
+- id: type
+ label: Tap Type
+ dtype: enum
+ options: [taps_real, taps_complex]
+ option_labels: [Real, Complex]
+ option_attributes:
+ fcn: [band_pass, complex_band_pass]
+- id: gain
+ label: Gain
+ dtype: float
+ default: '1.0'
+- id: samp_rate
+ label: Sample Rate (Hz)
+ dtype: float
+ default: samp_rate
+- id: low_cutoff_freq
+ label: Low Cutoff Freq (Hz)
+ dtype: float
+- id: high_cutoff_freq
+ label: High Cutoff Freq (Hz)
+ dtype: float
+- id: width
+ label: Transition Width (Hz)
+ dtype: float
+- id: win
+ label: Window
+ dtype: int
+ default: firdes.WIN_HAMMING
+ options: [firdes.WIN_HAMMING, firdes.WIN_HANN, firdes.WIN_BLACKMAN, firdes.WIN_RECTANGULAR,
+ firdes.WIN_KAISER]
+ option_labels: [Hamming, Hann, Blackman, Rectangular, Kaiser]
+- id: beta
+ label: Beta
+ dtype: float
+ default: '6.76'
+value: ${ firdes.type.fcn(gain, samp_rate, low_cutoff_freq, high_cutoff_freq, width,
+ win, beta) }
+
+templates:
+ imports: from gnuradio.filter import firdes
+ var_make: "\nself.${id} = ${id} = firdes.${type.fcn}(${gain}, ${samp_rate}, ${low_cutoff_freq},\
+ \ ${high_cutoff_freq}, ${width}, ${win}, ${beta})\n "
+
+documentation: |-
+ This is a convenience wrapper for calling firdes.band_pass() or firdes.complex_band_pass()
+
+ The beta paramater only applies to the Kaiser window.
+
+file_format: 1
diff --git a/gr-filter/grc/variable_band_pass_filter_taps.xml b/gr-filter/grc/variable_band_pass_filter_taps.xml
deleted file mode 100644
index 6cdfcc0373..0000000000
--- a/gr-filter/grc/variable_band_pass_filter_taps.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0"?>
-<!--
-#######################################################
-# Convenience wrapper for calling firdes.band_pass(...)
-# or firdes.complex_bandpass(...)
-#######################################################
- -->
-<block>
- <name>Band-pass Filter Taps</name>
- <key>variable_band_pass_filter_taps</key>
- <import>from gnuradio.filter import firdes</import>
- <var_make>
-self.$(id) = $(id) = firdes.$(type.fcn)($gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, $win, $beta)
- </var_make>
- <var_value>firdes.$(type.fcn)($gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, $win, $beta)</var_value>
- <make></make>
-
- <param>
- <name>Tap Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Real</name>
- <key>taps_real</key>
- <opt>fcn:band_pass</opt>
- </option>
- <option>
- <name>Complex</name>
- <key>taps_complex</key>
- <opt>fcn:complex_band_pass</opt>
- </option>
- </param>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1.0</value>
- <type>float</type>
- </param>
- <param>
- <name>Sample Rate (Hz)</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>float</type>
- </param>
- <param>
- <name>Low Cutoff Freq (Hz)</name>
- <key>low_cutoff_freq</key>
- <type>float</type>
- </param>
- <param>
- <name>High Cutoff Freq (Hz)</name>
- <key>high_cutoff_freq</key>
- <type>float</type>
- </param>
- <param>
- <name>Transition Width (Hz)</name>
- <key>width</key>
- <type>float</type>
- </param>
- <param>
- <name>Window</name>
- <key>win</key>
- <value>firdes.WIN_HAMMING</value>
- <type>int</type>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- </param>
- <param>
- <name>Beta</name>
- <key>beta</key>
- <value>6.76</value>
- <type>float</type>
- </param>
- <doc>
- This is a convenience wrapper for calling firdes.band_pass() or firdes.complex_band_pass()
-
- The beta paramater only applies to the Kaiser window.
- </doc>
-</block>
diff --git a/gr-filter/grc/variable_band_reject_filter_taps.block.yml b/gr-filter/grc/variable_band_reject_filter_taps.block.yml
new file mode 100644
index 0000000000..fbb3825067
--- /dev/null
+++ b/gr-filter/grc/variable_band_reject_filter_taps.block.yml
@@ -0,0 +1,46 @@
+id: variable_band_reject_filter_taps
+label: Band-reject Filter Taps
+
+parameters:
+- id: gain
+ label: Gain
+ dtype: float
+ default: '1.0'
+- id: samp_rate
+ label: Sample Rate (Hz)
+ dtype: float
+ default: samp_rate
+- id: low_cutoff_freq
+ label: Low Cutoff Freq (Hz)
+ dtype: float
+- id: high_cutoff_freq
+ label: High Cutoff Freq (Hz)
+ dtype: float
+- id: width
+ label: Transition Width (Hz)
+ dtype: float
+- id: win
+ label: Window
+ dtype: int
+ default: firdes.WIN_HAMMING
+ options: [firdes.WIN_HAMMING, firdes.WIN_HANN, firdes.WIN_BLACKMAN, firdes.WIN_RECTANGULAR,
+ firdes.WIN_KAISER]
+ option_labels: [Hamming, Hann, Blackman, Rectangular, Kaiser]
+- id: beta
+ label: Beta
+ dtype: float
+ default: '6.76'
+value: ${ firdes.band_reject(gain, samp_rate, low_cutoff_freq, high_cutoff_freq, width,
+ win, beta) }
+
+templates:
+ imports: from gnuradio.filter import firdes
+ var_make: "\nself.${id} = ${id} = firdes.band_reject(${gain}, ${samp_rate}, ${low_cutoff_freq},\
+ \ ${high_cutoff_freq}, ${width}, ${win}, ${beta})\n "
+
+documentation: |-
+ This is a convenience wrapper for calling firdes.band_reject().
+
+ The beta paramater only applies to the Kaiser window.
+
+file_format: 1
diff --git a/gr-filter/grc/variable_band_reject_filter_taps.xml b/gr-filter/grc/variable_band_reject_filter_taps.xml
deleted file mode 100644
index fbf25886d3..0000000000
--- a/gr-filter/grc/variable_band_reject_filter_taps.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0"?>
-<!--
-#########################################################
-# Convenience wrapper for calling firdes.band_reject(...)
-#########################################################
- -->
-<block>
- <name>Band-reject Filter Taps</name>
- <key>variable_band_reject_filter_taps</key>
- <import>from gnuradio.filter import firdes</import>
- <var_make>
-self.$(id) = $(id) = firdes.band_reject($gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, $win, $beta)
- </var_make>
- <var_value>firdes.band_reject($gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, $win, $beta)</var_value>
- <make></make>
-
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1.0</value>
- <type>float</type>
- </param>
- <param>
- <name>Sample Rate (Hz)</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>float</type>
- </param>
- <param>
- <name>Low Cutoff Freq (Hz)</name>
- <key>low_cutoff_freq</key>
- <type>float</type>
- </param>
- <param>
- <name>High Cutoff Freq (Hz)</name>
- <key>high_cutoff_freq</key>
- <type>float</type>
- </param>
- <param>
- <name>Transition Width (Hz)</name>
- <key>width</key>
- <type>float</type>
- </param>
- <param>
- <name>Window</name>
- <key>win</key>
- <value>firdes.WIN_HAMMING</value>
- <type>int</type>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- </param>
- <param>
- <name>Beta</name>
- <key>beta</key>
- <value>6.76</value>
- <type>float</type>
- </param>
- <doc>
- This is a convenience wrapper for calling firdes.band_reject().
-
- The beta paramater only applies to the Kaiser window.
- </doc>
-</block>
diff --git a/gr-filter/grc/variable_high_pass_filter_taps.block.yml b/gr-filter/grc/variable_high_pass_filter_taps.block.yml
new file mode 100644
index 0000000000..e7aa9ee0d5
--- /dev/null
+++ b/gr-filter/grc/variable_high_pass_filter_taps.block.yml
@@ -0,0 +1,42 @@
+id: variable_high_pass_filter_taps
+label: High-pass Filter Taps
+
+parameters:
+- id: gain
+ label: Gain
+ dtype: float
+ default: '1.0'
+- id: samp_rate
+ label: Sample Rate (Hz)
+ dtype: float
+ default: samp_rate
+- id: cutoff_freq
+ label: Cutoff Freq (Hz)
+ dtype: float
+- id: width
+ label: Transition Width (Hz)
+ dtype: float
+- id: win
+ label: Window
+ dtype: int
+ default: firdes.WIN_HAMMING
+ options: [firdes.WIN_HAMMING, firdes.WIN_HANN, firdes.WIN_BLACKMAN, firdes.WIN_RECTANGULAR,
+ firdes.WIN_KAISER]
+ option_labels: [Hamming, Hann, Blackman, Rectangular, Kaiser]
+- id: beta
+ label: Beta
+ dtype: float
+ default: '6.76'
+value: ${ firdes.high_pass(gain, samp_rate, cutoff_freq, width, win, beta) }
+
+templates:
+ imports: from gnuradio.filter import firdes
+ var_make: "\nself.${id} = ${id} = firdes.high_pass(${gain}, ${samp_rate}, ${cutoff_freq},\
+ \ ${width}, ${win}, ${beta})\n "
+
+documentation: |-
+ This variable is a convenience wrapper around a call to firdes.high_pass(...).
+
+ The beta paramater only applies to the Kaiser window.
+
+file_format: 1
diff --git a/gr-filter/grc/variable_high_pass_filter_taps.xml b/gr-filter/grc/variable_high_pass_filter_taps.xml
deleted file mode 100644
index 08768d808a..0000000000
--- a/gr-filter/grc/variable_high_pass_filter_taps.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-<!--
-######################################################
-## Convenience wrapper around call to fides.high_pass()
-######################################################
- -->
-<block>
- <name>High-pass Filter Taps</name>
- <key>variable_high_pass_filter_taps</key>
- <import>from gnuradio.filter import firdes</import>
- <var_make>
-self.$(id) = $(id) = firdes.high_pass($gain, $samp_rate, $cutoff_freq, $width, $win, $beta)
- </var_make>
- <var_value>firdes.high_pass($gain, $samp_rate, $cutoff_freq, $width, $win, $beta)</var_value>
- <make></make>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1.0</value>
- <type>float</type>
- </param>
- <param>
- <name>Sample Rate (Hz)</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>float</type>
- </param>
- <param>
- <name>Cutoff Freq (Hz)</name>
- <key>cutoff_freq</key>
- <type>float</type>
- </param>
- <param>
- <name>Transition Width (Hz)</name>
- <key>width</key>
- <type>float</type>
- </param>
- <param>
- <name>Window</name>
- <key>win</key>
- <value>firdes.WIN_HAMMING</value>
- <type>int</type>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- </param>
- <param>
- <name>Beta</name>
- <key>beta</key>
- <value>6.76</value>
- <type>float</type>
- </param>
- <doc>
- This variable is a convenience wrapper around a call to firdes.high_pass(...).
-
- The beta paramater only applies to the Kaiser window.
- </doc>
-</block>
diff --git a/gr-filter/grc/variable_low_pass_filter_taps.block.yml b/gr-filter/grc/variable_low_pass_filter_taps.block.yml
new file mode 100644
index 0000000000..2a28e2be1a
--- /dev/null
+++ b/gr-filter/grc/variable_low_pass_filter_taps.block.yml
@@ -0,0 +1,42 @@
+id: variable_low_pass_filter_taps
+label: Low-pass Filter Taps
+
+parameters:
+- id: gain
+ label: Gain
+ dtype: float
+ default: '1.0'
+- id: samp_rate
+ label: Sample Rate (Hz)
+ dtype: float
+ default: samp_rate
+- id: cutoff_freq
+ label: Cutoff Freq (Hz)
+ dtype: float
+- id: width
+ label: Transition Width (Hz)
+ dtype: float
+- id: win
+ label: Window
+ dtype: int
+ default: firdes.WIN_HAMMING
+ options: [firdes.WIN_HAMMING, firdes.WIN_HANN, firdes.WIN_BLACKMAN, firdes.WIN_RECTANGULAR,
+ firdes.WIN_KAISER]
+ option_labels: [Hamming, Hann, Blackman, Rectangular, Kaiser]
+- id: beta
+ label: Beta
+ dtype: float
+ default: '6.76'
+value: ${ firdes.low_pass(gain, samp_rate, cutoff_freq, width, win, beta) }
+
+templates:
+ imports: from gnuradio.filter import firdes
+ var_make: "\nself.${id} = ${id} = firdes.low_pass(${gain}, ${samp_rate}, ${cutoff_freq},\
+ \ ${width}, ${win}, ${beta})\n "
+
+documentation: |-
+ This variable is a convenience wrapper around a call to firdes.low_pass(...).
+
+ The beta paramater only applies to the Kaiser window.
+
+file_format: 1
diff --git a/gr-filter/grc/variable_low_pass_filter_taps.xml b/gr-filter/grc/variable_low_pass_filter_taps.xml
deleted file mode 100644
index e3367b1ec5..0000000000
--- a/gr-filter/grc/variable_low_pass_filter_taps.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-<!--
-######################################################
-## Convenience wrapper around call to fides.low_pass()
-######################################################
- -->
-<block>
- <name>Low-pass Filter Taps</name>
- <key>variable_low_pass_filter_taps</key>
- <import>from gnuradio.filter import firdes</import>
- <var_make>
-self.$(id) = $(id) = firdes.low_pass($gain, $samp_rate, $cutoff_freq, $width, $win, $beta)
- </var_make>
- <var_value>firdes.low_pass($gain, $samp_rate, $cutoff_freq, $width, $win, $beta)</var_value>
- <make></make>
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1.0</value>
- <type>float</type>
- </param>
- <param>
- <name>Sample Rate (Hz)</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>float</type>
- </param>
- <param>
- <name>Cutoff Freq (Hz)</name>
- <key>cutoff_freq</key>
- <type>float</type>
- </param>
- <param>
- <name>Transition Width (Hz)</name>
- <key>width</key>
- <type>float</type>
- </param>
- <param>
- <name>Window</name>
- <key>win</key>
- <value>firdes.WIN_HAMMING</value>
- <type>int</type>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- </param>
- <param>
- <name>Beta</name>
- <key>beta</key>
- <value>6.76</value>
- <type>float</type>
- </param>
- <doc>
- This variable is a convenience wrapper around a call to firdes.low_pass(...).
-
- The beta paramater only applies to the Kaiser window.
- </doc>
-</block>
diff --git a/gr-filter/grc/variable_rrc_filter_taps.block.yml b/gr-filter/grc/variable_rrc_filter_taps.block.yml
new file mode 100644
index 0000000000..6fcf0c56cb
--- /dev/null
+++ b/gr-filter/grc/variable_rrc_filter_taps.block.yml
@@ -0,0 +1,34 @@
+id: variable_rrc_filter_taps
+label: RRC Filter Taps
+
+parameters:
+- id: gain
+ label: Gain
+ dtype: float
+ default: '1.0'
+- id: samp_rate
+ label: Sample Rate (Hz)
+ dtype: float
+ default: samp_rate
+- id: sym_rate
+ label: Symbol Rate (Hz)
+ dtype: float
+- id: alpha
+ label: Excess BW
+ dtype: float
+ default: '0.35'
+- id: ntaps
+ label: Num Taps
+ dtype: int
+ default: 11*sps
+value: ${ firdes.root_raised_cosine(gain, samp_rate, sym_rate, alpha, ntaps) }
+
+templates:
+ imports: from gnuradio.filter import firdes
+ var_make: "\nself.${id} = ${id} = firdes.root_raised_cosine(${gain}, ${samp_rate},\
+ \ ${sym_rate}, ${alpha}, ${ntaps})\n "
+
+documentation: |-
+ This is a convenience wrapper for calling firdes.root_raised_cosine(...).
+
+file_format: 1
diff --git a/gr-filter/grc/variable_rrc_filter_taps.xml b/gr-filter/grc/variable_rrc_filter_taps.xml
deleted file mode 100644
index 2824ba75b2..0000000000
--- a/gr-filter/grc/variable_rrc_filter_taps.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-<!--
-########################################################################
-## Convenience wrapper for calling firdes.root_raised_cosine_filter(...)
-########################################################################
- -->
-<block>
- <name>RRC Filter Taps</name>
- <key>variable_rrc_filter_taps</key>
- <import>from gnuradio.filter import firdes</import>
- <var_make>
-self.$(id) = $(id) = firdes.root_raised_cosine($gain, $samp_rate, $sym_rate, $alpha, $ntaps)
- </var_make>
- <var_value>firdes.root_raised_cosine($gain, $samp_rate, $sym_rate, $alpha, $ntaps)</var_value>
- <make></make>
-
- <param>
- <name>Gain</name>
- <key>gain</key>
- <value>1.0</value>
- <type>float</type>
- </param>
- <param>
- <name>Sample Rate (Hz)</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>float</type>
- </param>
- <param>
- <name>Symbol Rate (Hz)</name>
- <key>sym_rate</key>
- <value></value>
- <type>float</type>
- </param>
- <param>
- <name>Excess BW</name>
- <key>alpha</key>
- <value>0.35</value>
- <type>float</type>
- </param>
- <param>
- <name>Num Taps</name>
- <key>ntaps</key>
- <value>11*sps</value>
- <type>int</type>
- </param>
- <doc>
- This is a convenience wrapper for calling firdes.root_raised_cosine(...).
- </doc>
-</block>
diff --git a/gr-qtgui/grc/CMakeLists.txt b/gr-qtgui/grc/CMakeLists.txt
index 74e6958639..f9ccf116cb 100644
--- a/gr-qtgui/grc/CMakeLists.txt
+++ b/gr-qtgui/grc/CMakeLists.txt
@@ -18,30 +18,30 @@
# Boston, MA 02110-1301, USA.
########################################################################
-file(GLOB xml_files "*.xml")
+file(GLOB yml_files "*.yml")
-macro(REPLACE_IN_FILE _xml_block match replace)
- set(xml_block_src "${CMAKE_CURRENT_SOURCE_DIR}/${_xml_block}")
- set(xml_block "${CMAKE_CURRENT_BINARY_DIR}/${_xml_block}")
+macro(REPLACE_IN_FILE _yml_block match replace)
+ set(yml_block_src "${CMAKE_CURRENT_SOURCE_DIR}/${_yml_block}")
+ set(yml_block "${CMAKE_CURRENT_BINARY_DIR}/${_yml_block}")
- list(REMOVE_ITEM xml_files "${xml_block_src}")
- file(READ "${xml_block_src}" xml_block_src_text)
+ list(REMOVE_ITEM yml_files "${yml_block_src}")
+ file(READ "${yml_block_src}" yml_block_src_text)
string(REPLACE "${match}" "${replace}"
- xml_block_text "${xml_block_src_text}")
- file(WRITE "${xml_block}" "${xml_block_text}")
+ yml_block_text "${yml_block_src_text}")
+ file(WRITE "${yml_block}" "${yml_block_text}")
- list(APPEND generated_xml_files "${xml_block}")
+ list(APPEND generated_yml_files "${yml_block}")
endmacro()
if(DESIRED_QT_VERSION EQUAL 4)
- foreach(xml_block_src ${xml_files})
- get_filename_component(xml_block "${xml_block_src}" NAME)
- REPLACE_IN_FILE("${xml_block}" "PyQt5" "PyQt4")
+ foreach(yml_block_src ${yml_files})
+ get_filename_component(yml_block "${yml_block_src}" NAME)
+ REPLACE_IN_FILE("${yml_block}" "PyQt5" "PyQt4")
endforeach()
endif()
install(
- FILES ${xml_files} ${generated_xml_files}
+ FILES ${yml_files} ${generated_yml_files}
DESTINATION "${GRC_BLOCKS_DIR}"
)
diff --git a/gr-qtgui/grc/qtgui.tree.yml b/gr-qtgui/grc/qtgui.tree.yml
new file mode 100644
index 0000000000..e479adf6af
--- /dev/null
+++ b/gr-qtgui/grc/qtgui.tree.yml
@@ -0,0 +1,23 @@
+'[Core]':
+- Instrumentation:
+ - QT:
+ - qtgui_freq_sink_x
+ - qtgui_time_sink_x
+ - qtgui_const_sink_x
+ - qtgui_waterfall_sink_x
+ - qtgui_time_raster_sink_x
+ - qtgui_bercurve_sink
+ - qtgui_histogram_sink_x
+ - qtgui_number_sink
+ - qtgui_vector_sink_f
+ - qtgui_sink_x
+- GUI Widgets:
+ - QT:
+ - qtgui_tab_widget
+ - variable_qtgui_range
+ - variable_qtgui_chooser
+ - variable_qtgui_check_box
+ - variable_qtgui_push_button
+ - variable_qtgui_entry
+ - variable_qtgui_label
+ - qtgui_edit_box_msg
diff --git a/gr-qtgui/grc/qtgui_ber_sink_b.block.yml b/gr-qtgui/grc/qtgui_ber_sink_b.block.yml
new file mode 100644
index 0000000000..ddf28cf1e5
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_ber_sink_b.block.yml
@@ -0,0 +1,366 @@
+id: qtgui_bercurve_sink
+label: QT GUI Bercurve Sink
+
+parameters:
+- id: esno
+ label: esno
+ dtype: raw
+ default: numpy.arange(0.0, 4.0, .5)
+ hide: part
+- id: berminerrors
+ label: Min. BER Errs.
+ dtype: int
+ default: '100'
+- id: berlimit
+ label: BER Limit
+ dtype: real
+ default: '-7.0'
+- id: num_curves
+ label: Num Curves
+ dtype: int
+ default: '1'
+ hide: part
+- id: curvenames
+ label: Curve Names
+ dtype: raw
+ default: '[]'
+ hide: part
+- id: ymin
+ label: Y min
+ dtype: real
+ default: '-10'
+ hide: part
+- id: ymax
+ label: Y max
+ dtype: real
+ default: '0'
+ hide: part
+- id: update_time
+ label: Update Period
+ dtype: real
+ default: '0.10'
+ hide: part
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+- id: label1
+ label: Line 1 Label
+ category: Config
+ dtype: string
+ hide: ${ ('part' if int(num_curves) >= 1 else 'all') }
+- id: width1
+ label: Line 1 Width
+ category: Config
+ dtype: int
+ default: '1'
+ hide: ${ ('part' if int(num_curves) >= 1 else 'all') }
+- id: color1
+ label: Line 1 Color
+ category: Config
+ dtype: enum
+ options: ['"blue"', '"red"', '"green"', '"black"', '"cyan"', '"magenta"', '"yellow"',
+ '"dark red"', '"dark green"', '"Dark Blue"']
+ option_labels: [Blue, Red, Green, Black, Cyan, Magenta, Yellow, Dark Red, Dark
+ Green, Dark Blue]
+ hide: ${ ('part' if int(num_curves) >= 1 else 'all') }
+- id: style1
+ label: Line 1 Style
+ category: Config
+ dtype: enum
+ options: ['1', '2', '3', '4', '5', '0']
+ option_labels: [Solid, Dash, Dots, Dash-Dot, Dash-Dot-Dot, None]
+ hide: ${ ('part' if int(num_curves) >= 1 else 'all') }
+- id: marker1
+ label: Line 1 Marker
+ category: Config
+ dtype: enum
+ options: ['0', '1', '2', '3', '4', '6', '7', '8', '9', '-1']
+ option_labels: [Circle, Rectangle, Diamond, Triangle, Down Triangle, Left Triangle,
+ Right Triangle, Cross, X-Cross, None]
+ hide: ${ ('part' if int(num_curves) >= 1 else 'all') }
+- id: alpha1
+ label: Line 1 Alpha
+ category: Config
+ dtype: float
+ default: '1.0'
+ hide: ${ ('part' if int(num_curves) >= 1 else 'all') }
+- id: label2
+ label: Line 2 Label
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 2 else 'all') }
+- id: width2
+ label: Line 2 Width
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 2 else 'all') }
+- id: color2
+ label: Line 2 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if int(num_curves) >= 2 else 'all') }
+- id: style2
+ label: Line 2 Style
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 2 else 'all') }
+- id: marker2
+ label: Line 2 Marker
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 2 else 'all') }
+- id: alpha2
+ label: Line 2 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 2 else 'all') }
+- id: label3
+ label: Line 3 Label
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 3 else 'all') }
+- id: width3
+ label: Line 3 Width
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 3 else 'all') }
+- id: color3
+ label: Line 3 Color
+ dtype: ''
+ default: '"green"'
+ hide: ${ ('part' if int(num_curves) >= 3 else 'all') }
+- id: style3
+ label: Line 3 Style
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 3 else 'all') }
+- id: marker3
+ label: Line 3 Marker
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 3 else 'all') }
+- id: alpha3
+ label: Line 3 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 3 else 'all') }
+- id: label4
+ label: Line 4 Label
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 4 else 'all') }
+- id: width4
+ label: Line 4 Width
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 4 else 'all') }
+- id: color4
+ label: Line 4 Color
+ dtype: ''
+ default: '"black"'
+ hide: ${ ('part' if int(num_curves) >= 4 else 'all') }
+- id: style4
+ label: Line 4 Style
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 4 else 'all') }
+- id: marker4
+ label: Line 4 Marker
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 4 else 'all') }
+- id: alpha4
+ label: Line 4 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 4 else 'all') }
+- id: label5
+ label: Line 5 Label
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 5 else 'all') }
+- id: width5
+ label: Line 5 Width
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 5 else 'all') }
+- id: color5
+ label: Line 5 Color
+ dtype: ''
+ default: '"cyan"'
+ hide: ${ ('part' if int(num_curves) >= 5 else 'all') }
+- id: style5
+ label: Line 5 Style
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 5 else 'all') }
+- id: marker5
+ label: Line 5 Marker
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 5 else 'all') }
+- id: alpha5
+ label: Line 5 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 5 else 'all') }
+- id: label6
+ label: Line 6 Label
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 6 else 'all') }
+- id: width6
+ label: Line 6 Width
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 6 else 'all') }
+- id: color6
+ label: Line 6 Color
+ dtype: ''
+ default: '"magenta"'
+ hide: ${ ('part' if int(num_curves) >= 6 else 'all') }
+- id: style6
+ label: Line 6 Style
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 6 else 'all') }
+- id: marker6
+ label: Line 6 Marker
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 6 else 'all') }
+- id: alpha6
+ label: Line 6 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 6 else 'all') }
+- id: label7
+ label: Line 7 Label
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 7 else 'all') }
+- id: width7
+ label: Line 7 Width
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 7 else 'all') }
+- id: color7
+ label: Line 7 Color
+ dtype: ''
+ default: '"yellow"'
+ hide: ${ ('part' if int(num_curves) >= 7 else 'all') }
+- id: style7
+ label: Line 7 Style
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 7 else 'all') }
+- id: marker7
+ label: Line 7 Marker
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 7 else 'all') }
+- id: alpha7
+ label: Line 7 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 7 else 'all') }
+- id: label8
+ label: Line 8 Label
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 8 else 'all') }
+- id: width8
+ label: Line 8 Width
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 8 else 'all') }
+- id: color8
+ label: Line 8 Color
+ dtype: ''
+ default: '"dark red"'
+ hide: ${ ('part' if int(num_curves) >= 8 else 'all') }
+- id: style8
+ label: Line 8 Style
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 8 else 'all') }
+- id: marker8
+ label: Line 8 Marker
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 8 else 'all') }
+- id: alpha8
+ label: Line 8 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 8 else 'all') }
+- id: label9
+ label: Line 9 Label
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 9 else 'all') }
+- id: width9
+ label: Line 9 Width
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 9 else 'all') }
+- id: color9
+ label: Line 9 Color
+ dtype: ''
+ default: '"dark green"'
+ hide: ${ ('part' if int(num_curves) >= 9 else 'all') }
+- id: style9
+ label: Line 9 Style
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 9 else 'all') }
+- id: marker9
+ label: Line 9 Marker
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 9 else 'all') }
+- id: alpha9
+ label: Line 9 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 9 else 'all') }
+- id: label10
+ label: Line 10 Label
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 10 else 'all') }
+- id: width10
+ label: Line 10 Width
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 10 else 'all') }
+- id: color10
+ label: Line 10 Color
+ dtype: ''
+ default: '"dark blue"'
+ hide: ${ ('part' if int(num_curves) >= 10 else 'all') }
+- id: style10
+ label: Line 10 Style
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 10 else 'all') }
+- id: marker10
+ label: Line 10 Marker
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 10 else 'all') }
+- id: alpha10
+ label: Line 10 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(num_curves) >= 10 else 'all') }
+
+inputs:
+- domain: stream
+ dtype: byte
+ multiplicity: ${ len(esno)*2*num_curves }
+
+templates:
+ imports: |-
+ from PyQt5import Qt
+ from gnuradio import qtgui
+ import sip
+ import numpy
+ make: |-
+ <%
+ win = 'self._%s_win'%id
+ %>\
+ qtgui.ber_sink_b(
+ ${esno}, #range of esnos
+ ${num_curves}, #number of curves
+ ${berminerrors}, #ensure at least
+ ${berlimit}, #cutoff
+ ${curvenames} #indiv. curve names
+ )
+ self.${id}.set_update_time(${update_time})
+ self.${id}.set_y_axis(${ymin}, ${ymax})
+ self.${id}.set_x_axis(${esno}[0], ${esno}[-1])
+
+ labels = [${label1}, ${label2}, ${label3}, ${label4}, ${label5},
+ ${label6}, ${label7}, ${label8}, ${label9}, ${label10}]
+ widths = [${width1}, ${width2}, ${width3}, ${width4}, ${width5},
+ ${width6}, ${width7}, ${width8}, ${width9}, ${width10}]
+ colors = [${color1}, ${color2}, ${color3}, ${color4}, ${color5},
+ ${color6}, ${color7}, ${color8}, ${color9}, ${color10}]
+ alphas = [${alpha1}, ${alpha2}, ${alpha3}, ${alpha4}, ${alpha5},
+ ${alpha6}, ${alpha7}, ${alpha8}, ${alpha9}, ${alpha10}]
+
+ for i in range(${num_curves}):
+ if len(labels[i]) == 0:
+ self.${id}.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.${id}.set_line_label(i, labels[i])
+ self.${id}.set_line_width(i, widths[i])
+ self.${id}.set_line_color(i, colors[i])
+ self.${id}.set_line_style(i, styles[i])
+ self.${id}.set_line_marker(i, markers[i])
+ self.${id}.set_line_alpha(i, alphas[i])
+
+ ${win} = sip.wrapinstance(self.${id}.pyqwidget(), Qt.QWidget)
+ ${gui_hint() % win}
+
+documentation: |-
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_ber_sink_b.xml b/gr-qtgui/grc/qtgui_ber_sink_b.xml
deleted file mode 100644
index 05a36dfbc0..0000000000
--- a/gr-qtgui/grc/qtgui_ber_sink_b.xml
+++ /dev/null
@@ -1,684 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##QT GUI Sink
-###################################################
- -->
-<block>
- <name>QT GUI Bercurve Sink</name>
- <key>qtgui_bercurve_sink</key>
- <import>from PyQt5import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>import sip</import>
- <import>import numpy</import>
- <make>#set $win = 'self._%s_win'%$id
- qtgui.ber_sink_b(
- $esno, \#range of esnos
- $num_curves, \#number of curves
- $berminerrors, \#ensure at least
- $berlimit, \#cutoff
- $curvenames, \#indiv. curve names
- )
-self.$(id).set_update_time($update_time)
-self.$(id).set_y_axis($ymin, $ymax)
-self.$(id).set_x_axis($(esno)[0], $(esno)[-1])
-
-labels = [$label1, $label2, $label3, $label4, $label5,
- $label6, $label7, $label8, $label9, $label10]
-widths = [$width1, $width2, $width3, $width4, $width5,
- $width6, $width7, $width8, $width9, $width10]
-colors = [$color1, $color2, $color3, $color4, $color5,
- $color6, $color7, $color8, $color9, $color10]
-styles = [$style1, $style2, $style3, $style4, $style5,
- $style6, $style7, $style8, $style9, $style10]
-markers = [$marker1, $marker2, $marker3, $marker4, $marker5,
- $marker6, $marker7, $marker8, $marker9, $marker10]
-alphas = [$alpha1, $alpha2, $alpha3, $alpha4, $alpha5,
- $alpha6, $alpha7, $alpha8, $alpha9, $alpha10]
-for i in xrange($num_curves):
- if len(labels[i]) == 0:
- self.$(id).set_line_label(i, "Data {0}".format(i))
- else:
- self.$(id).set_line_label(i, labels[i])
- self.$(id).set_line_width(i, widths[i])
- self.$(id).set_line_color(i, colors[i])
- self.$(id).set_line_style(i, styles[i])
- self.$(id).set_line_marker(i, markers[i])
- self.$(id).set_line_alpha(i, alphas[i])
-
-self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
-$(gui_hint()($win))</make>
-
- <param>
- <name>esno</name>
- <key>esno</key>
- <value>numpy.arange(0.0, 4.0, .5)</value>
- <type>raw</type>
- </param>
-
- <param>
- <name>Min. BER Errs.</name>
- <key>berminerrors</key>
- <value>100</value>
- <type>int</type>
- </param>
-
- <param>
- <name>BER Limit</name>
- <key>berlimit</key>
- <value>-7.0</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Num Curves</name>
- <key>num_curves</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Curve Names</name>
- <key>curvenames</key>
- <value>[]</value>
- <type>raw</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Y min</name>
- <key>ymin</key>
- <value>-10</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Y max</name>
- <key>ymax</key>
- <value>0</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Update Period</name>
- <key>update_time</key>
- <value>0.10</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Line 1 Label</name>
- <key>label1</key>
- <type>string</type>
- <hide>#if int($num_curves()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Width</name>
- <key>width1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if int($num_curves()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Color</name>
- <key>color1</key>
- <type>enum</type>
- <hide>#if int($num_curves()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Blue</name>
- <key>"blue"</key>
- </option>
- <option>
- <name>Red</name>
- <key>"red"</key>
- </option>
- <option>
- <name>Green</name>
- <key>"green"</key>
- </option>
- <option>
- <name>Black</name>
- <key>"black"</key>
- </option>
- <option>
- <name>Cyan</name>
- <key>"cyan"</key>
- </option>
- <option>
- <name>Magenta</name>
- <key>"magenta"</key>
- </option>
- <option>
- <name>Yellow</name>
- <key>"yellow"</key>
- </option>
- <option>
- <name>Dark Red</name>
- <key>"dark red"</key>
- </option>
- <option>
- <name>Dark Green</name>
- <key>"dark green"</key>
- </option>
- <option>
- <name>Dark Blue</name>
- <key>"Dark Blue"</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Style</name>
- <key>style1</key>
- <type>enum</type>
- <hide>#if int($num_curves()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Solid</name>
- <key>1</key>
- </option>
- <option>
- <name>Dash</name>
- <key>2</key>
- </option>
- <option>
- <name>Dots</name>
- <key>3</key>
- </option>
- <option>
- <name>Dash-Dot</name>
- <key>4</key>
- </option>
- <option>
- <name>Dash-Dot-Dot</name>
- <key>5</key>
- </option>
- <option>
- <name>None</name>
- <key>0</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Marker</name>
- <key>marker1</key>
- <type>enum</type>
- <hide>#if int($num_curves()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Circle</name>
- <key>0</key>
- </option>
- <option>
- <name>Rectangle</name>
- <key>1</key>
- </option>
- <option>
- <name>Diamond</name>
- <key>2</key>
- </option>
- <option>
- <name>Triangle</name>
- <key>3</key>
- </option>
- <option>
- <name>Down Triangle</name>
- <key>4</key>
- </option>
- <option>
- <name>Left Triangle</name>
- <key>6</key>
- </option>
- <option>
- <name>Right Triangle</name>
- <key>7</key>
- </option>
- <option>
- <name>Cross</name>
- <key>8</key>
- </option>
- <option>
- <name>X-Cross</name>
- <key>9</key>
- </option>
- <option>
- <name>None</name>
- <key>-1</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Alpha</name>
- <key>alpha1</key>
- <value>1.0</value>
- <type>float</type>
- <hide>#if int($num_curves()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 2 Label</name>
- <key>label2</key>
- <hide>#if int($num_curves()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 2 Width</name>
- <key>width2</key>
- <hide>#if int($num_curves()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 2 Color</name>
- <key>color2</key>
- <value>"red"</value>
- <hide>#if int($num_curves()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 2 Style</name>
- <key>style2</key>
- <hide>#if int($num_curves()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 2 Marker</name>
- <key>marker2</key>
- <hide>#if int($num_curves()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 2 Alpha</name>
- <key>alpha2</key>
- <hide>#if int($num_curves()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 3 Label</name>
- <key>label3</key>
- <hide>#if int($num_curves()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 3 Width</name>
- <key>width3</key>
- <hide>#if int($num_curves()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 3 Color</name>
- <key>color3</key>
- <value>"green"</value>
- <hide>#if int($num_curves()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 3 Style</name>
- <key>style3</key>
- <hide>#if int($num_curves()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 3 Marker</name>
- <key>marker3</key>
- <hide>#if int($num_curves()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 3 Alpha</name>
- <key>alpha3</key>
- <hide>#if int($num_curves()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 4 Label</name>
- <key>label4</key>
- <hide>#if int($num_curves()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 4 Width</name>
- <key>width4</key>
- <hide>#if int($num_curves()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 4 Color</name>
- <key>color4</key>
- <value>"black"</value>
- <hide>#if int($num_curves()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 4 Style</name>
- <key>style4</key>
- <hide>#if int($num_curves()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 4 Marker</name>
- <key>marker4</key>
- <hide>#if int($num_curves()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 4 Alpha</name>
- <key>alpha4</key>
- <hide>#if int($num_curves()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 5 Label</name>
- <key>label5</key>
- <hide>#if int($num_curves()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 5 Width</name>
- <key>width5</key>
- <hide>#if int($num_curves()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 5 Color</name>
- <key>color5</key>
- <value>"cyan"</value>
- <hide>#if int($num_curves()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 5 Style</name>
- <key>style5</key>
- <hide>#if int($num_curves()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 5 Marker</name>
- <key>marker5</key>
- <hide>#if int($num_curves()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 5 Alpha</name>
- <key>alpha5</key>
- <hide>#if int($num_curves()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 6 Label</name>
- <key>label6</key>
- <hide>#if int($num_curves()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 6 Width</name>
- <key>width6</key>
- <hide>#if int($num_curves()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 6 Color</name>
- <key>color6</key>
- <value>"magenta"</value>
- <hide>#if int($num_curves()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 6 Style</name>
- <key>style6</key>
- <hide>#if int($num_curves()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 6 Marker</name>
- <key>marker6</key>
- <hide>#if int($num_curves()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 6 Alpha</name>
- <key>alpha6</key>
- <hide>#if int($num_curves()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 7 Label</name>
- <key>label7</key>
- <hide>#if int($num_curves()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 7 Width</name>
- <key>width7</key>
- <hide>#if int($num_curves()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 7 Color</name>
- <key>color7</key>
- <value>"yellow"</value>
- <hide>#if int($num_curves()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 7 Style</name>
- <key>style7</key>
- <hide>#if int($num_curves()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 7 Marker</name>
- <key>marker7</key>
- <hide>#if int($num_curves()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 7 Alpha</name>
- <key>alpha7</key>
- <hide>#if int($num_curves()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 8 Label</name>
- <key>label8</key>
- <hide>#if int($num_curves()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 8 Width</name>
- <key>width8</key>
- <hide>#if int($num_curves()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 8 Color</name>
- <key>color8</key>
- <value>"dark red"</value>
- <hide>#if int($num_curves()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 8 Style</name>
- <key>style8</key>
- <hide>#if int($num_curves()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 8 Marker</name>
- <key>marker8</key>
- <hide>#if int($num_curves()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 8 Alpha</name>
- <key>alpha8</key>
- <hide>#if int($num_curves()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 9 Label</name>
- <key>label9</key>
- <hide>#if int($num_curves()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 9 Width</name>
- <key>width9</key>
- <hide>#if int($num_curves()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 9 Color</name>
- <key>color9</key>
- <value>"dark green"</value>
- <hide>#if int($num_curves()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 9 Style</name>
- <key>style9</key>
- <hide>#if int($num_curves()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 9 Marker</name>
- <key>marker9</key>
- <hide>#if int($num_curves()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 9 Alpha</name>
- <key>alpha9</key>
- <hide>#if int($num_curves()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 10 Label</name>
- <key>label10</key>
- <hide>#if int($num_curves()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 10 Width</name>
- <key>width10</key>
- <hide>#if int($num_curves()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 10 Color</name>
- <key>color10</key>
- <value>"dark blue"</value>
- <hide>#if int($num_curves()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 10 Style</name>
- <key>style10</key>
- <hide>#if int($num_curves()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 10 Marker</name>
- <key>marker10</key>
- <hide>#if int($num_curves()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 10 Alpha</name>
- <key>alpha10</key>
- <hide>#if int($num_curves()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
-
- <sink>
- <name>out</name>
- <type>byte</type>
- <nports>len($esno)*2*$num_curves</nports>
- </sink>
-
- <bus_structure_sink>map(lambda b: map(lambda a: b * len($esno) * 2 + a, range(len($esno)*2)), range($num_curves))</bus_structure_sink>
-
- <doc>
- The GUI hint can be used to position the widget within the application. \
- The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
- Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_block_tree.xml b/gr-qtgui/grc/qtgui_block_tree.xml
deleted file mode 100644
index 33fb12a7b5..0000000000
--- a/gr-qtgui/grc/qtgui_block_tree.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2012-2013 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##Block Tree for GR QTGUI blocks.
-###################################################
- -->
-<cat>
- <name>[Core]</name>
- <cat>
- <name>Instrumentation</name>
- <cat>
- <name>QT</name>
- <block>qtgui_freq_sink_x</block>
- <block>qtgui_time_sink_x</block>
- <block>qtgui_const_sink_x</block>
- <block>qtgui_waterfall_sink_x</block>
- <block>qtgui_time_raster_sink_x</block>
- <block>qtgui_bercurve_sink</block>
- <block>qtgui_histogram_sink_x</block>
- <block>qtgui_number_sink</block>
- <block>qtgui_vector_sink_f</block>
- <block>qtgui_sink_x</block>
- </cat>
- </cat>
- <cat>
- <name>GUI Widgets</name>
- <cat>
- <name>QT</name>
- <block>qtgui_tab_widget</block>
- <block>variable_qtgui_range</block>
- <block>variable_qtgui_chooser</block>
- <block>variable_qtgui_check_box</block>
- <block>variable_qtgui_push_button</block>
- <block>variable_qtgui_entry</block>
- <block>variable_qtgui_label</block>
- <block>qtgui_edit_box_msg</block>
- </cat>
- </cat>
-</cat>
diff --git a/gr-qtgui/grc/qtgui_check_box.block.yml b/gr-qtgui/grc/qtgui_check_box.block.yml
new file mode 100644
index 0000000000..dc67237e4f
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_check_box.block.yml
@@ -0,0 +1,66 @@
+id: variable_qtgui_check_box
+label: QT GUI Check Box
+
+parameters:
+- id: label
+ label: Label
+ dtype: string
+ hide: ${ ('none' if label else 'part') }
+- id: type
+ label: Type
+ dtype: enum
+ default: int
+ options: [real, int, string, bool, raw]
+ option_labels: [Float, Integer, String, Boolean, Any]
+ option_attributes:
+ conv: [float, int, str, bool, eval]
+ hide: part
+- id: value
+ label: Default Value
+ dtype: ${ type }
+ default: 'True'
+- id: 'true'
+ label: 'True'
+ dtype: ${ type }
+ default: 'True'
+- id: 'false'
+ label: 'False'
+ dtype: ${ type }
+ default: 'False'
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+value: ${ value }
+
+asserts:
+- ${value in (true, false)}
+
+templates:
+ imports: from PyQt5 import Qt
+ var_make: self.${id} = ${id} = ${value}
+ callbacks:
+ - self.set_${id}(${value})
+ - self._${id}_callback(${id})
+ make: |-
+ <%
+ win = '_%s_check_box'%id
+ if not label:
+ label = id
+ %>
+ ${win} = Qt.QCheckBox(${label})
+ self._${id}_choices = {True: ${true}, False: ${false}}
+ self._${id}_choices_inv = dict((v,k) for k,v in self._${id}_choices.iteritems())
+ self._${id}_callback = lambda i: Qt.QMetaObject.invokeMethod(${win}, "setChecked", Qt.Q_ARG("bool", self._${id}_choices_inv[i]))
+ self._${id}_callback(self.${id})
+ ${win}.stateChanged.connect(lambda i: self.set_${id}(self._${id}_choices[bool(i)]))
+ ${gui_hint() % win}
+
+documentation: |-
+ This block creates a variable check box. Leave the label blank to use the variable id as the label.
+
+ A check box selects between two values of similar type. Te values do not necessarily need to be of boolean type.
+
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_check_box.xml b/gr-qtgui/grc/qtgui_check_box.xml
deleted file mode 100644
index ccee59dd92..0000000000
--- a/gr-qtgui/grc/qtgui_check_box.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable Check Box:
-## a gui check box form
-###################################################
- -->
-<block>
- <name>QT GUI Check Box</name>
- <key>variable_qtgui_check_box</key>
- <import>from PyQt5 import Qt</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>#set $win = '_%s_check_box'%$id
-#if not $label()
- #set $label = '"%s"'%$id
-#end if
-$win = Qt.QCheckBox($label)
-self._$(id)_choices = {True: $true, False: $false}
-self._$(id)_choices_inv = dict((v,k) for k,v in self._$(id)_choices.iteritems())
-self._$(id)_callback = lambda i: Qt.QMetaObject.invokeMethod($(win), "setChecked", Qt.Q_ARG("bool", self._$(id)_choices_inv[i]))
-self._$(id)_callback(self.$id)
-$(win).stateChanged.connect(lambda i: self.set_$(id)(self._$(id)_choices[bool(i)]))
-$(gui_hint()($win))</make>
- <callback>self.set_$(id)($value)</callback>
- <callback>self._$(id)_callback($id)</callback>
- <param>
- <name>Label</name>
- <key>label</key>
- <value></value>
- <type>string</type>
- <hide>#if $label() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>int</value>
- <type>enum</type>
- <hide>part</hide>
- <option><name>Float</name><key>real</key><opt>conv:float</opt></option>
- <option><name>Integer</name><key>int</key><opt>conv:int</opt></option>
- <option><name>String</name><key>string</key><opt>conv:str</opt></option>
- <option><name>Boolean</name><key>bool</key><opt>conv:bool</opt></option>
- <option><name>Any</name><key>raw</key><opt>conv:eval</opt></option>
- </param>
- <param>
- <name>Default Value</name>
- <key>value</key>
- <value>True</value>
- <type>$type</type>
- </param>
- <param>
- <name>True</name>
- <key>true</key>
- <value>True</value>
- <type>$type</type>
- </param>
- <param>
- <name>False</name>
- <key>false</key>
- <value>False</value>
- <type>$type</type>
- </param>
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
- <check>$value in ($true, $false)</check>
- <doc>
-This block creates a variable check box. \
-Leave the label blank to use the variable id as the label.
-
-A check box selects between two values of similar type. \
-Te values do not necessarily need to be of boolean type.
-
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_chooser.block.yml b/gr-qtgui/grc/qtgui_chooser.block.yml
new file mode 100644
index 0000000000..a342beccc0
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_chooser.block.yml
@@ -0,0 +1,191 @@
+id: variable_qtgui_chooser
+label: QT GUI Chooser
+flags: has_python
+
+parameters:
+- id: label
+ label: Label
+ dtype: string
+ hide: ${ ('none' if label else 'part') }
+- id: type
+ label: Type
+ dtype: enum
+ default: int
+ options: [real, int, string, raw]
+ option_labels: [Float, Integer, String, Any]
+ hide: part
+- id: num_opts
+ label: Num Options
+ dtype: enum
+ default: '3'
+ options: ['0', '1', '2', '3', '4', '5']
+ option_labels: [List, '1', '2', '3', '4', '5']
+- id: value
+ label: Default Value
+ dtype: ${ type }
+ default: '0'
+- id: options
+ label: Options
+ dtype: raw
+ default: '[0, 1, 2]'
+ hide: ${ ('all' if int(num_opts) else 'none') }
+- id: labels
+ label: Labels
+ dtype: raw
+ default: '[]'
+ hide: ${ ('all' if int(num_opts) else 'none') }
+- id: option0
+ label: Option 0
+ dtype: ${ type }
+ default: '0'
+ hide: ${ ('none' if int(num_opts) > 0 else 'all') }
+- id: label0
+ label: Label 0
+ dtype: string
+ hide: ${ (int(num_opts) > 0) and (label0 and 'none' or 'part') or 'all' }
+- id: option1
+ label: Option 1
+ dtype: ${ type }
+ default: '1'
+ hide: ${ ('none' if int(num_opts) > 1 else 'all') }
+- id: label1
+ label: Label 1
+ dtype: string
+ hide: ${ (int(num_opts) > 1) and (label1 and 'none' or 'part') or 'all' }
+- id: option2
+ label: Option 2
+ dtype: ${ type }
+ default: '2'
+ hide: ${ ('none' if int(num_opts) > 2 else 'all') }
+- id: label2
+ label: Label 2
+ dtype: string
+ hide: ${ (int(num_opts) > 2) and (label2 and 'none' or 'part') or 'all' }
+- id: option3
+ label: Option 3
+ dtype: ${ type }
+ default: '3'
+ hide: ${ ('none' if int(num_opts) > 3 else 'all') }
+- id: label3
+ label: Label 3
+ dtype: string
+ hide: ${ (int(num_opts) > 3) and (label3 and 'none' or 'part') or 'all' }
+- id: option4
+ label: Option 4
+ dtype: ${ type }
+ default: '4'
+ hide: ${ ('none' if int(num_opts) > 4 else 'all') }
+- id: label4
+ label: Label 4
+ dtype: string
+ hide: ${ (int(num_opts) > 4) and (label4 and 'none' or 'part') or 'all' }
+- id: widget
+ label: Widget
+ dtype: enum
+ default: combo_box
+ options: [combo_box, radio_buttons]
+ option_labels: [Combo Box, Radio Buttons]
+ hide: part
+- id: orient
+ label: Orientation
+ dtype: enum
+ default: Qt.QVBoxLayout
+ options: [Qt.QHBoxLayout, Qt.QVBoxLayout]
+ option_labels: [Horizontal, Vertical]
+ hide: ${ ('part' if widget == 'radio_buttons' else 'all') }
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+value: ${ value }
+
+templates:
+ imports: |-
+ from PyQt5 import Qt
+ from PyQt5.QtCore import QObject, pyqtSlot
+ var_make: self.${id} = ${id} = ${value}
+ callbacks:
+ - self.set_${id}(${value})
+ - self._${id}_callback(${id})
+ make: |-
+ <%
+ all_options = [ option0, option1, option2, option3, option4 ][:int(num_opts)]
+ all_labels = [ label0, label1, label2, label3, label4 ][:int(num_opts)]
+ if not label:
+ label = id
+ %>\
+ # Create the options list
+ % if int(num_opts):
+ self._${id}_options = (\
+ % for ch in all_options:
+ ${ch}, \
+ % endfor
+ )
+ % else:
+ self._${id]_options = ${options}
+ % endif
+ # Create the labels list
+ % if int(num_opts):
+ self._${id}_labels = (\
+ % for i, lbl in all_labels:
+ % if lbl:
+ ${lbl}, \
+ % else:
+ str(self._${id}_options[${i}], \
+ % endif
+ % endfor
+ )
+ % elif labels:
+ self._${id]_labels = ${labels}
+ % else:
+ self._${id}_map(str, self._${id}_options)
+ % endif
+ # Create the combo box
+ % if widget == 'combo_box':
+ <%
+ win = 'self._%s_tool_bar'%id
+ %>\
+ ${win} = Qt.QToolBar(self)
+ ${win}.addWidget(Qt.QLabel(${label} + ": "))
+ self._${id}_combo_box = Qt.QComboBox()
+ ${win}.addWidget(self._${id}_combo_box)
+ for label in self._${id}_labels: self._${id}_combo_box.addItem(label)
+ self._${id}_callback = lambda i: Qt.QMetaObject.invokeMethod(self._${id}_combo_box, "setCurrentIndex", Qt.Q_ARG("int", self._${id}_options.index(i)))
+ self._${id}_callback(self.${id})
+ self._${id}_combo_box.currentIndexChanged.connect(
+ lambda i: self.set_${id}(self._${id}_options[i]))
+ % endif
+ # Create the radio buttons
+ % if widget == 'radio_buttons':
+ <%
+ win = 'self._%s_group_box'%id
+ %>\
+ ${win} = QtQGroupBox(${label})
+ self._${id}_box = ${orient}()
+ class variable_chooser_button_group(Qt.QButtonGroup):
+ def __init__(self, parent=None):
+ Qt.QButtonGroup.__init__(self, parent)
+ @pyqtSlot(int)
+ def updateButtonChecked(self, button_id):
+ self.button(button_id).setChecked(True)
+ self._${id}_button_group = variable_chooser_button_group()
+ ${win}.setLayout(self._${id}_box)
+ for i, label in enumerate(self._${id}_labels):
+ radio_button = Qt.QRadioButton(label)
+ self._${id}_box.addWidget(radio_button)
+ self._${id}_button_group.addButton(radio_button, i)
+ self._${id}_callback = lambda i: Qt.QMetaObject.invokeMethod(self._${id}_button_group, "updateButtonChecked", Qt.Q_ARG("int", self._${id}_options.index(i)))
+ self._${id}_callback(self.${id})
+ self._${id}_button_group.buttonClicked[int].connect(
+ lambda i: self.set_${id}(self._${id}_options[i]))
+ % endif
+ ${gui_hint() % win}
+
+documentation: |-
+ This block creates a variable with enumerated options. The gui widget is implemented as a combo box or radio button group. Leave the label blank to use the variable id as the label.
+
+ Choose the number of options available to your chooser. When the label is left blank, the option will be used as the label. Set the number of options to "list" to enter a single list of options and labels. When the labels is an empty list, the options will be used as the label.
+
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_chooser.xml b/gr-qtgui/grc/qtgui_chooser.xml
deleted file mode 100644
index f79bb8ccb3..0000000000
--- a/gr-qtgui/grc/qtgui_chooser.xml
+++ /dev/null
@@ -1,257 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable Chooser:
-## A chooser, radio buttons
-###################################################
- -->
-<block>
- <name>QT GUI Chooser</name>
- <key>variable_qtgui_chooser</key>
- <import>from PyQt5 import Qt</import>
- <import>from PyQt5.QtCore import QObject, pyqtSlot</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>#slurp
-#set $all_options = [$option0, $option1, $option2, $option3, $option4][:int($num_opts())]
-#set $all_labels = [$label0, $label1, $label2, $label3, $label4][:int($num_opts())]
-#if not $label()
- #set $label = '"%s"'%$id
-#end if
-########################################################################
-## Create the options list
-########################################################################
-#if int($num_opts())
-self._$(id)_options = (#slurp
- #for $ch in $all_options
-$ch, #slurp
- #end for
-)
-#else
-self._$(id)_options = $options
-#end if
-########################################################################
-## Create the labels list
-########################################################################
-#if int($num_opts())
-self._$(id)_labels = (#slurp
- #for i, $lbl in enumerate($all_labels)
- #if $lbl()
-$lbl, #slurp
- #else
-str(self._$(id)_options[$i]), #slurp
- #end if
- #end for
-)
-#elif $labels()
-self._$(id)_labels = $labels
-#else
-self._$(id)_labels = map(str, self._$(id)_options)
-#end if
-########################################################################
-## Create the combo box
-########################################################################
-#if $widget() == 'combo_box'
-#set $win = 'self._%s_tool_bar'%$id
-$win = Qt.QToolBar(self)
-$(win).addWidget(Qt.QLabel($label+": "))
-self._$(id)_combo_box = Qt.QComboBox()
-$(win).addWidget(self._$(id)_combo_box)
-for label in self._$(id)_labels: self._$(id)_combo_box.addItem(label)
-self._$(id)_callback = lambda i: Qt.QMetaObject.invokeMethod(self._$(id)_combo_box, "setCurrentIndex", Qt.Q_ARG("int", self._$(id)_options.index(i)))
-self._$(id)_callback(self.$id)
-self._$(id)_combo_box.currentIndexChanged.connect(
- lambda i: self.set_$(id)(self._$(id)_options[i]))
-#end if
-########################################################################
-## Create the radio buttons
-########################################################################
-#if $widget() == 'radio_buttons'
-#set $win = 'self._%s_group_box'%$id
-$win = Qt.QGroupBox($label)
-self._$(id)_box = $(orient)()
-class variable_chooser_button_group(Qt.QButtonGroup):
- def __init__(self, parent=None):
- Qt.QButtonGroup.__init__(self, parent)
- @pyqtSlot(int)
- def updateButtonChecked(self, button_id):
- self.button(button_id).setChecked(True)
-self._$(id)_button_group = variable_chooser_button_group()
-$(win).setLayout(self._$(id)_box)
-for i, label in enumerate(self._$(id)_labels):
- radio_button = Qt.QRadioButton(label)
- self._$(id)_box.addWidget(radio_button)
- self._$(id)_button_group.addButton(radio_button, i)
-self._$(id)_callback = lambda i: Qt.QMetaObject.invokeMethod(self._$(id)_button_group, "updateButtonChecked", Qt.Q_ARG("int", self._$(id)_options.index(i)))
-self._$(id)_callback(self.$id)
-self._$(id)_button_group.buttonClicked[int].connect(
- lambda i: self.set_$(id)(self._$(id)_options[i]))
-#end if
-$(gui_hint()($win))</make>
- <callback>self.set_$(id)($value)</callback>
- <callback>self._$(id)_callback($id)</callback>
- <param>
- <name>Label</name>
- <key>label</key>
- <value></value>
- <type>string</type>
- <hide>#if $label() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>int</value>
- <type>enum</type>
- <hide>part</hide>
- <option><name>Float</name><key>real</key></option>
- <option><name>Integer</name><key>int</key></option>
- <option><name>String</name><key>string</key></option>
- <option><name>Any</name><key>raw</key></option>
- </param>
- <param>
- <name>Num Options</name>
- <key>num_opts</key>
- <value>3</value>
- <type>enum</type>
- <option><name>List</name><key>0</key></option>
- <option><name>1</name><key>1</key></option>
- <option><name>2</name><key>2</key></option>
- <option><name>3</name><key>3</key></option>
- <option><name>4</name><key>4</key></option>
- <option><name>5</name><key>5</key></option>
- </param>
- <param>
- <name>Default Value</name>
- <key>value</key>
- <value>0</value>
- <type>$type</type>
- </param>
- <param>
- <name>Options</name>
- <key>options</key>
- <value>[0, 1, 2]</value>
- <type>raw</type>
- <hide>#if int($num_opts()) then 'all' else 'none'#</hide>
- </param>
- <param>
- <name>Labels</name>
- <key>labels</key>
- <value>[]</value>
- <type>raw</type>
- <hide>#if int($num_opts()) then 'all' else 'none'#</hide>
- </param>
- <param>
- <name>Option 0</name>
- <key>option0</key>
- <value>0</value>
- <type>$type</type>
- <hide>#if int($num_opts()) > 0 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 0</name>
- <key>label0</key>
- <value></value>
- <type>string</type>
- <hide>$((int($num_opts()) > 0) and ($label0() and 'none' or 'part') or 'all')</hide>
- </param>
- <param>
- <name>Option 1</name>
- <key>option1</key>
- <value>1</value>
- <type>$type</type>
- <hide>#if int($num_opts()) > 1 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 1</name>
- <key>label1</key>
- <value></value>
- <type>string</type>
- <hide>$((int($num_opts()) > 1) and ($label1() and 'none' or 'part') or 'all')</hide>
- </param>
- <param>
- <name>Option 2</name>
- <key>option2</key>
- <value>2</value>
- <type>$type</type>
- <hide>#if int($num_opts()) > 2 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 2</name>
- <key>label2</key>
- <value></value>
- <type>string</type>
- <hide>$((int($num_opts()) > 2) and ($label2() and 'none' or 'part') or 'all')</hide>
- </param>
- <param>
- <name>Option 3</name>
- <key>option3</key>
- <value>3</value>
- <type>$type</type>
- <hide>#if int($num_opts()) > 3 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 3</name>
- <key>label3</key>
- <value></value>
- <type>string</type>
- <hide>$((int($num_opts()) > 3) and ($label3() and 'none' or 'part') or 'all')</hide>
- </param>
- <param>
- <name>Option 4</name>
- <key>option4</key>
- <value>4</value>
- <type>$type</type>
- <hide>#if int($num_opts()) > 4 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 4</name>
- <key>label4</key>
- <value></value>
- <type>string</type>
- <hide>$((int($num_opts()) > 4) and ($label4() and 'none' or 'part') or 'all')</hide>
- </param>
- <param>
- <name>Widget</name>
- <key>widget</key>
- <value>combo_box</value>
- <type>enum</type>
- <hide>part</hide>
- <option><name>Combo Box</name><key>combo_box</key></option>
- <option><name>Radio Buttons</name><key>radio_buttons</key></option>
- </param>
- <param>
- <name>Orientation</name>
- <key>orient</key>
- <value>Qt.QVBoxLayout</value>
- <type>enum</type>
- <hide>#if $widget() == 'radio_buttons' then 'part' else 'all'#</hide>
- <option>
- <name>Horizontal</name>
- <key>Qt.QHBoxLayout</key>
- </option>
- <option>
- <name>Vertical</name>
- <key>Qt.QVBoxLayout</key>
- </option>
- </param>
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
- <doc>
-This block creates a variable with enumerated options. \
-The gui widget is implemented as a combo box or radio button group. \
-Leave the label blank to use the variable id as the label.
-
-Choose the number of options available to your chooser. \
-When the label is left blank, the option will be used as the label. \
-Set the number of options to "list" to enter a single list of options and labels. \
-When the labels is an empty list, the options will be used as the label.
-
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_const_sink_x.block.yml b/gr-qtgui/grc/qtgui_const_sink_x.block.yml
new file mode 100644
index 0000000000..1019393d6b
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_const_sink_x.block.yml
@@ -0,0 +1,457 @@
+id: qtgui_const_sink_x
+label: QT GUI Constellation Sink
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ default: complex
+ options: [complex, msg_complex]
+ option_labels: [Complex, Complex Message]
+ option_attributes:
+ fcn: [const_sink_c, const_sink_c]
+ t: [complex, message]
+ hide: part
+- id: name
+ label: Name
+ dtype: string
+ default: '""'
+ hide: ${ ('none' if len(name) > 0 else 'part') }
+- id: size
+ label: Number of Points
+ dtype: int
+ default: '1024'
+ hide: ${ ('all' if type.startswith('msg') else 'none') }
+- id: grid
+ label: Grid
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: autoscale
+ label: Autoscale
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: ymin
+ label: Y min
+ dtype: real
+ default: '-2'
+ hide: part
+- id: ymax
+ label: Y max
+ dtype: real
+ default: '2'
+ hide: part
+- id: xmin
+ label: X min
+ dtype: real
+ default: '-2'
+ hide: part
+- id: xmax
+ label: X max
+ dtype: real
+ default: '2'
+ hide: part
+- id: nconnections
+ label: Number of Inputs
+ dtype: int
+ default: '1'
+ hide: ${ ('all' if type.startswith('msg') else 'part') }
+- id: update_time
+ label: Update Period
+ dtype: real
+ default: '0.10'
+ hide: part
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+- id: tr_mode
+ label: Trigger Mode
+ category: Trigger
+ dtype: enum
+ default: qtgui.TRIG_MODE_FREE
+ options: [qtgui.TRIG_MODE_FREE, qtgui.TRIG_MODE_AUTO, qtgui.TRIG_MODE_NORM, qtgui.TRIG_MODE_TAG]
+ option_labels: [Free, Auto, Normal, Tag]
+ hide: part
+- id: tr_slope
+ label: Trigger Slope
+ category: Trigger
+ dtype: enum
+ default: qtgui.TRIG_MODE_POS
+ options: [qtgui.TRIG_SLOPE_POS, qtgui.TRIG_SLOPE_NEG]
+ option_labels: [Positive, Negative]
+ hide: part
+- id: tr_level
+ label: Trigger Level
+ category: Trigger
+ dtype: float
+ default: '0.0'
+ hide: part
+- id: tr_chan
+ label: Trigger Channel
+ category: Trigger
+ dtype: int
+ default: '0'
+ hide: part
+- id: tr_tag
+ label: Trigger Tag Key
+ category: Trigger
+ dtype: string
+ default: '""'
+ hide: part
+- id: legend
+ label: Legend
+ category: Config
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: axislabels
+ label: Axis Labels
+ category: Config
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: label1
+ label: Line 1 Label
+ category: Config
+ dtype: string
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: width1
+ label: Line 1 Width
+ category: Config
+ dtype: int
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: color1
+ label: Line 1 Color
+ category: Config
+ dtype: enum
+ options: ['"blue"', '"red"', '"green"', '"black"', '"cyan"', '"magenta"', '"yellow"',
+ '"dark red"', '"dark green"', '"Dark Blue"']
+ option_labels: [Blue, Red, Green, Black, Cyan, Magenta, Yellow, Dark Red, Dark
+ Green, Dark Blue]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: style1
+ label: Line 1 Style
+ category: Config
+ dtype: enum
+ options: ['0', '1', '2', '3', '4', '5']
+ option_labels: [None, Solid, Dash, Dots, Dash-Dot, Dash-Dot-Dot]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: marker1
+ label: Line 1 Marker
+ category: Config
+ dtype: enum
+ options: ['0', '1', '2', '3', '4', '6', '7', '8', '9', '-1']
+ option_labels: [Circle, Rectangle, Diamond, Triangle, Down Triangle, Left Triangle,
+ Right Triangle, Cross, X-Cross, None]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: alpha1
+ label: Line 1 Alpha
+ category: Config
+ dtype: float
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: label2
+ label: Line 2 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: width2
+ label: Line 2 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: color2
+ label: Line 2 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: style2
+ label: Line 2 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: marker2
+ label: Line 2 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: alpha2
+ label: Line 2 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: label3
+ label: Line 3 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: width3
+ label: Line 3 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: color3
+ label: Line 3 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: style3
+ label: Line 3 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: marker3
+ label: Line 3 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: alpha3
+ label: Line 3 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: label4
+ label: Line 4 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: width4
+ label: Line 4 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: color4
+ label: Line 4 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: style4
+ label: Line 4 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: marker4
+ label: Line 4 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: alpha4
+ label: Line 4 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: label5
+ label: Line 5 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: width5
+ label: Line 5 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: color5
+ label: Line 5 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: style5
+ label: Line 5 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: marker5
+ label: Line 5 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: alpha5
+ label: Line 5 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: label6
+ label: Line 6 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: width6
+ label: Line 6 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: color6
+ label: Line 6 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: style6
+ label: Line 6 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: marker6
+ label: Line 6 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: alpha6
+ label: Line 6 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: label7
+ label: Line 7 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: width7
+ label: Line 7 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: color7
+ label: Line 7 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: style7
+ label: Line 7 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: marker7
+ label: Line 7 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: alpha7
+ label: Line 7 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: label8
+ label: Line 8 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: width8
+ label: Line 8 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: color8
+ label: Line 8 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: style8
+ label: Line 8 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: marker8
+ label: Line 8 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: alpha8
+ label: Line 8 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: label9
+ label: Line 9 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: width9
+ label: Line 9 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: color9
+ label: Line 9 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: style9
+ label: Line 9 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: marker9
+ label: Line 9 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: alpha9
+ label: Line 9 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: label10
+ label: Line 10 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: width10
+ label: Line 10 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: color10
+ label: Line 10 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: style10
+ label: Line 10 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: marker10
+ label: Line 10 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: alpha10
+ label: Line 10 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+
+inputs:
+- domain: stream
+ dtype: ${ type.t }
+ multiplicity: ${ (0 if type.startswith('msg') else nconnections) }
+ optional: true
+
+templates:
+ imports: |-
+ from PyQt5 import Qt
+ from gnuradio import qtgui
+ import sip
+ callbacks:
+ - set_resize(${width}, ${height})
+ - set_update_time(${update_time})
+ - set_title(${which}, ${title})
+ - set_color(${which}, ${color})
+ - self.${id}.set_trigger_mode(${tr_mode}, ${tr_slope}, ${tr_level}, ${tr_chan},
+ ${tr_tag})
+ make: |-
+ <%
+ win = 'self._%s_win'%id
+ %>\
+ qtgui.${type.fcn}(
+ ${size}, #size
+ ${name}, #name
+ ${0 if type.startswith('msg') else nconnections} #number of inputs
+ )
+ self.${id}.set_update_time(${update_time})
+ self.${id}.set_y_axis(${ymin}, ${ymax})
+ self.${id}.set_x_axis(${xmin}, ${xmax})
+ self.${id}.set_trigger_mode(${tr_mode}, ${tr_slope}, ${tr_level}, ${tr_chan}, ${tr_tag})
+ self.${id}.enable_autoscale(${autoscale})
+ self.${id}.enable_grid(${grid})
+ self.${id}.enable_axis_labels(${axislabels})
+
+ if not ${legend}:
+ self.${id}.disable_legend()
+
+ labels = [${label1}, ${label2}, ${label3}, ${label4}, ${label5},
+ ${label6}, ${label7}, ${label8}, ${label9}, ${label10}]
+ widths = [${width1}, ${width2}, ${width3}, ${width4}, ${width5},
+ ${width6}, ${width7}, ${width8}, ${width9}, ${width10}]
+ colors = [${color1}, ${color2}, ${color3}, ${color4}, ${color5},
+ ${color6}, ${color7}, ${color8}, ${color9}, ${color10}]
+ styles = [${style1}, ${style2}, ${style3}, ${style4}, ${style5},
+ ${style6}, ${style7}, ${style8}, ${style9}, ${style10}]
+ markers = [${marker1}, ${marker2}, ${marker3}, ${marker4}, ${marker5},
+ ${marker6}, ${marker7}, ${marker8}, ${marker9}, ${marker10}]
+ alphas = [${alpha1}, ${alpha2}, ${alpha3}, ${alpha4}, ${alpha5},
+ ${alpha6}, ${alpha7}, ${alpha8}, ${alpha9}, ${alpha10}]
+
+ for i in range(${1 if type.startswith('msg') else nconnections}):
+ if len(labels[i]) == 0:
+ self.${id}.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.${id}.set_line_label(i, labels[i])
+ self.${id}.set_line_width(i, widths[i])
+ self.${id}.set_line_color(i, colors[i])
+ self.${id}.set_line_style(i, styles[i])
+ self.${id}.set_line_marker(i, markers[i])
+ self.${id}.set_line_alpha(i, alphas[i])
+
+ self._${id}_win = sip.wrapinstance(self.${id}.pyqwidget(), Qt.QWidget)
+ ${gui_hint() % win}
+
+documentation: |-
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_const_sink_x.xml b/gr-qtgui/grc/qtgui_const_sink_x.xml
deleted file mode 100644
index 10f82cce82..0000000000
--- a/gr-qtgui/grc/qtgui_const_sink_x.xml
+++ /dev/null
@@ -1,859 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##QT GUI Sink
-###################################################
- -->
-<block>
- <name>QT GUI Constellation Sink</name>
- <key>qtgui_const_sink_x</key>
- <import>from PyQt5 import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>import sip</import>
- <make>#set $win = 'self._%s_win'%$id
-qtgui.$(type.fcn)(
- $size, \#size
- $name, \#name
- #if $type.t == 'message' then 0 else $nconnections# \#number of inputs
-)
-self.$(id).set_update_time($update_time)
-self.$(id).set_y_axis($ymin, $ymax)
-self.$(id).set_x_axis($xmin, $xmax)
-self.$(id).set_trigger_mode($tr_mode, $tr_slope, $tr_level, $tr_chan, $tr_tag)
-self.$(id).enable_autoscale($autoscale)
-self.$(id).enable_grid($grid)
-self.$(id).enable_axis_labels($axislabels)
-
-if not $legend:
- self.$(id).disable_legend()
-
-labels = [$label1, $label2, $label3, $label4, $label5,
- $label6, $label7, $label8, $label9, $label10]
-widths = [$width1, $width2, $width3, $width4, $width5,
- $width6, $width7, $width8, $width9, $width10]
-colors = [$color1, $color2, $color3, $color4, $color5,
- $color6, $color7, $color8, $color9, $color10]
-styles = [$style1, $style2, $style3, $style4, $style5,
- $style6, $style7, $style8, $style9, $style10]
-markers = [$marker1, $marker2, $marker3, $marker4, $marker5,
- $marker6, $marker7, $marker8, $marker9, $marker10]
-alphas = [$alpha1, $alpha2, $alpha3, $alpha4, $alpha5,
- $alpha6, $alpha7, $alpha8, $alpha9, $alpha10]
-for i in xrange(#if $type.t == 'message' then 1 else $nconnections#):
- if len(labels[i]) == 0:
- self.$(id).set_line_label(i, "Data {0}".format(i))
- else:
- self.$(id).set_line_label(i, labels[i])
- self.$(id).set_line_width(i, widths[i])
- self.$(id).set_line_color(i, colors[i])
- self.$(id).set_line_style(i, styles[i])
- self.$(id).set_line_marker(i, markers[i])
- self.$(id).set_line_alpha(i, alphas[i])
-
-self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
-$(gui_hint()($win))</make>
- <callback>set_resize($width, $height)</callback>
- <callback>set_update_time($update_time)</callback>
- <callback>set_title($which, $title)</callback>
- <callback>set_color($which, $color)</callback>
- <callback>self.$(id).set_trigger_mode($tr_mode, $tr_slope, $tr_level, $tr_chan, $tr_tag)</callback>
-
- <param_tab_order>
- <tab>General</tab>
- <tab>Trigger</tab>
- <tab>Config</tab>
- </param_tab_order>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <value>complex</value>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:const_sink_c</opt>
- <opt>t:complex</opt>
- </option>
- <option>
- <name>Complex Message</name>
- <key>msg_complex</key>
- <opt>fcn:const_sink_c</opt>
- <opt>t:message</opt>
- </option>
- </param>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>""</value>
- <type>string</type>
- <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>Number of Points</name>
- <key>size</key>
- <value>1024</value>
- <type>int</type>
- <hide>#if $type.t == 'message' then 'all' else 'none'#</hide>
- </param>
-
- <param>
- <name>Grid</name>
- <key>grid</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Autoscale</name>
- <key>autoscale</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Y min</name>
- <key>ymin</key>
- <value>-2</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Y max</name>
- <key>ymax</key>
- <value>2</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>X min</name>
- <key>xmin</key>
- <value>-2</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>X max</name>
- <key>xmax</key>
- <value>2</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Number of Inputs</name>
- <key>nconnections</key>
- <value>1</value>
- <type>int</type>
- <hide>#if $type.t == 'message' then 'all' else 'part'#</hide>
- </param>
-
- <param>
- <name>Update Period</name>
- <key>update_time</key>
- <value>0.10</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
-
-
- <param>
- <name>Trigger Mode</name>
- <key>tr_mode</key>
- <value>qtgui.TRIG_MODE_FREE</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Free</name>
- <key>qtgui.TRIG_MODE_FREE</key>
- </option>
- <option>
- <name>Auto</name>
- <key>qtgui.TRIG_MODE_AUTO</key>
- </option>
- <option>
- <name>Normal</name>
- <key>qtgui.TRIG_MODE_NORM</key>
- </option>
- <option>
- <name>Tag</name>
- <key>qtgui.TRIG_MODE_TAG</key>
- </option>
- <tab>Trigger</tab>
- </param>
-
- <param>
- <name>Trigger Slope</name>
- <key>tr_slope</key>
- <value>qtgui.TRIG_MODE_POS</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Positive</name>
- <key>qtgui.TRIG_SLOPE_POS</key>
- </option>
- <option>
- <name>Negative</name>
- <key>qtgui.TRIG_SLOPE_NEG</key>
- </option>
- <tab>Trigger</tab>
- </param>
-
- <param>
- <name>Trigger Level</name>
- <key>tr_level</key>
- <value>0.0</value>
- <type>float</type>
- <hide>part</hide>
- <tab>Trigger</tab>
- </param>
-
- <param>
- <name>Trigger Channel</name>
- <key>tr_chan</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- <tab>Trigger</tab>
- </param>
-
- <param>
- <name>Trigger Tag Key</name>
- <key>tr_tag</key>
- <value>""</value>
- <type>string</type>
- <hide>part</hide>
- <tab>Trigger</tab>
- </param>
-
-
-
- <!-- Begin Config Tab items -->
- <param>
- <name>Legend</name>
- <key>legend</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Axis Labels</name>
- <key>axislabels</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Label</name>
- <key>label1</key>
- <type>string</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Width</name>
- <key>width1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Color</name>
- <key>color1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Blue</name>
- <key>"blue"</key>
- </option>
- <option>
- <name>Red</name>
- <key>"red"</key>
- </option>
- <option>
- <name>Green</name>
- <key>"green"</key>
- </option>
- <option>
- <name>Black</name>
- <key>"black"</key>
- </option>
- <option>
- <name>Cyan</name>
- <key>"cyan"</key>
- </option>
- <option>
- <name>Magenta</name>
- <key>"magenta"</key>
- </option>
- <option>
- <name>Yellow</name>
- <key>"yellow"</key>
- </option>
- <option>
- <name>Dark Red</name>
- <key>"dark red"</key>
- </option>
- <option>
- <name>Dark Green</name>
- <key>"dark green"</key>
- </option>
- <option>
- <name>Dark Blue</name>
- <key>"Dark Blue"</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Style</name>
- <key>style1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>None</name>
- <key>0</key>
- </option>
- <option>
- <name>Solid</name>
- <key>1</key>
- </option>
- <option>
- <name>Dash</name>
- <key>2</key>
- </option>
- <option>
- <name>Dots</name>
- <key>3</key>
- </option>
- <option>
- <name>Dash-Dot</name>
- <key>4</key>
- </option>
- <option>
- <name>Dash-Dot-Dot</name>
- <key>5</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Marker</name>
- <key>marker1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Circle</name>
- <key>0</key>
- </option>
- <option>
- <name>Rectangle</name>
- <key>1</key>
- </option>
- <option>
- <name>Diamond</name>
- <key>2</key>
- </option>
- <option>
- <name>Triangle</name>
- <key>3</key>
- </option>
- <option>
- <name>Down Triangle</name>
- <key>4</key>
- </option>
- <option>
- <name>Left Triangle</name>
- <key>6</key>
- </option>
- <option>
- <name>Right Triangle</name>
- <key>7</key>
- </option>
- <option>
- <name>Cross</name>
- <key>8</key>
- </option>
- <option>
- <name>X-Cross</name>
- <key>9</key>
- </option>
- <option>
- <name>None</name>
- <key>-1</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Alpha</name>
- <key>alpha1</key>
- <value>1.0</value>
- <type>float</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 2 Label</name>
- <key>label2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 2 Width</name>
- <key>width2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 2 Color</name>
- <key>color2</key>
- <value>"red"</value>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 2 Style</name>
- <key>style2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 2 Marker</name>
- <key>marker2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 2 Alpha</name>
- <key>alpha2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 3 Label</name>
- <key>label3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 3 Width</name>
- <key>width3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 3 Color</name>
- <key>color3</key>
- <value>"red"</value>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 3 Style</name>
- <key>style3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 3 Marker</name>
- <key>marker3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 3 Alpha</name>
- <key>alpha3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 4 Label</name>
- <key>label4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 4 Width</name>
- <key>width4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 4 Color</name>
- <key>color4</key>
- <value>"red"</value>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 4 Style</name>
- <key>style4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 4 Marker</name>
- <key>marker4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 4 Alpha</name>
- <key>alpha4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 5 Label</name>
- <key>label5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 5 Width</name>
- <key>width5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 5 Color</name>
- <key>color5</key>
- <value>"red"</value>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 5 Style</name>
- <key>style5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 5 Marker</name>
- <key>marker5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 5 Alpha</name>
- <key>alpha5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 6 Label</name>
- <key>label6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 6 Width</name>
- <key>width6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 6 Color</name>
- <key>color6</key>
- <value>"red"</value>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 6 Style</name>
- <key>style6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 6 Marker</name>
- <key>marker6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 6 Alpha</name>
- <key>alpha6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 7 Label</name>
- <key>label7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 7 Width</name>
- <key>width7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 7 Color</name>
- <key>color7</key>
- <value>"red"</value>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 7 Style</name>
- <key>style7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 7 Marker</name>
- <key>marker7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 7 Alpha</name>
- <key>alpha7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 8 Label</name>
- <key>label8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 8 Width</name>
- <key>width8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 8 Color</name>
- <key>color8</key>
- <value>"red"</value>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 8 Style</name>
- <key>style8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 8 Marker</name>
- <key>marker8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 8 Alpha</name>
- <key>alpha8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 9 Label</name>
- <key>label9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 9 Width</name>
- <key>width9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 9 Color</name>
- <key>color9</key>
- <value>"red"</value>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 9 Style</name>
- <key>style9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 9 Marker</name>
- <key>marker9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 9 Alpha</name>
- <key>alpha9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 10 Label</name>
- <key>label10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 10 Width</name>
- <key>width10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 10 Color</name>
- <key>color10</key>
- <value>"red"</value>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 10 Style</name>
- <key>style10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 10 Marker</name>
- <key>marker10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 10 Alpha</name>
- <key>alpha10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
-
- <sink>
- <name>in</name>
- <type>$type.t</type>
- <nports>#if $type.t == 'message' then 0 else $nconnections#</nports>
- <optional>1</optional>
- </sink>
-
- <doc>
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_edit_box_msg.block.yml b/gr-qtgui/grc/qtgui_edit_box_msg.block.yml
new file mode 100644
index 0000000000..ac867bfcef
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_edit_box_msg.block.yml
@@ -0,0 +1,69 @@
+id: qtgui_edit_box_msg
+label: QT GUI Message Edit Box
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ default: string
+ options: [string, int, float, double, complex, int_vec, flt_vec, dbl_vec, cpx_vec]
+ option_labels: [String, Int, Float, Double, Complex, Int (Vec), Float (Vec), Double
+ (Vec), Complex (Vec)]
+ option_attributes:
+ t: [qtgui.STRING, qtgui.INT, qtgui.FLOAT, qtgui.DOUBLE, qtgui.COMPLEX, qtgui.INT_VEC,
+ qtgui.FLOAT_VEC, qtgui.DOUBLE_VEC, qtgui.COMPLEX_VEC]
+- id: value
+ label: Value
+ dtype: string
+- id: label
+ label: Label
+ dtype: string
+- id: is_pair
+ label: Pair Mode
+ dtype: enum
+ default: 'True'
+ options: ['False', 'True']
+- id: is_static
+ label: Static Mode
+ dtype: enum
+ default: 'True'
+ options: ['False', 'True']
+- id: key
+ label: Key
+ dtype: string
+ hide: ${ ('none' if is_pair == 'True' else 'all') }
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+
+asserts:
+- ${(is_pair and is_static and len(key) > 0) or not (is_pair and is_static)}
+
+inputs:
+- domain: message
+ id: val
+ optional: true
+
+outputs:
+- domain: message
+ id: msg
+ optional: true
+
+templates:
+ imports: |-
+ from PyQt5 import Qt
+ from gnuradio import qtgui
+ import sip
+ make:
+ <%
+ win = 'self._%s_win'%id
+ %>\
+ qtgui.edit_box_msg(${type.t)}, ${value}, ${label}, ${is_pair}, ${is_static}, ${key})
+ ${win} = sip.wrapinstance(self.${id}.pyqwidget(), Qt.QWidget)
+ ${gui_hint() % win}
+
+documentation: |-
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_edit_box_msg.xml b/gr-qtgui/grc/qtgui_edit_box_msg.xml
deleted file mode 100644
index d77a4b3e1b..0000000000
--- a/gr-qtgui/grc/qtgui_edit_box_msg.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##QT GUI Edit Box that sends messages
-###################################################
- -->
-<block>
- <name>QT GUI Message Edit Box</name>
- <key>qtgui_edit_box_msg</key>
- <import>from PyQt5 import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>import sip</import>
- <make>#set $win = 'self._%s_win'%$id
-qtgui.edit_box_msg($(type.t), $value, $label, $is_pair, $is_static, $key)
-self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
-$(gui_hint()($win))</make>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <value>string</value>
- <type>enum</type>
- <option>
- <name>String</name>
- <key>string</key>
- <opt>t:qtgui.STRING</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>t:qtgui.INT</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>t:qtgui.FLOAT</opt>
- </option>
- <option>
- <name>Double</name>
- <key>double</key>
- <opt>t:qtgui.DOUBLE</opt>
- </option>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>t:qtgui.COMPLEX</opt>
- </option>
- <option>
- <name>Int (Vec)</name>
- <key>int_vec</key>
- <opt>t:qtgui.INT_VEC</opt>
- </option>
- <option>
- <name>Float (Vec)</name>
- <key>flt_vec</key>
- <opt>t:qtgui.FLOAT_VEC</opt>
- </option>
- <option>
- <name>Double (Vec)</name>
- <key>dbl_vec</key>
- <opt>t:qtgui.DOUBLE_VEC</opt>
- </option>
- <option>
- <name>Complex (Vec)</name>
- <key>cpx_vec</key>
- <opt>t:qtgui.COMPLEX_VEC</opt>
- </option>
- </param>
-
- <param>
- <name>Value</name>
- <key>value</key>
- <value></value>
- <type>string</type>
- </param>
-
- <param>
- <name>Label</name>
- <key>label</key>
- <value></value>
- <type>string</type>
- </param>
-
- <param>
- <name>Pair Mode</name>
- <key>is_pair</key>
- <value>True</value>
- <type>enum</type>
- <option>
- <name>False</name>
- <key>False</key>
- </option>
- <option>
- <name>True</name>
- <key>True</key>
- </option>
- </param>
-
- <param>
- <name>Static Mode</name>
- <key>is_static</key>
- <value>True</value>
- <type>enum</type>
- <option>
- <name>False</name>
- <key>False</key>
- </option>
- <option>
- <name>True</name>
- <key>True</key>
- </option>
- </param>
-
- <param>
- <name>Key</name>
- <key>key</key>
- <value></value>
- <type>string</type>
- <hide>#if $is_pair() == 'True' then 'none' else 'all'#</hide>
- </param>
-
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
-
- <!-- If both is_pair and is_static are True, we require a default key.
- If either or both are false, we don't care about a default key.
- -->
- <check>($is_pair and $is_static and len($key) &gt; 0) or not ($is_pair and $is_static)</check>
-
- <sink>
- <name>val</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
-
- <source>
- <name>msg</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-
- <doc>
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_entry.block.yml b/gr-qtgui/grc/qtgui_entry.block.yml
new file mode 100644
index 0000000000..8a430b2874
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_entry.block.yml
@@ -0,0 +1,57 @@
+id: variable_qtgui_entry
+label: QT GUI Entry
+
+parameters:
+- id: label
+ label: Label
+ dtype: string
+ hide: ${ ('none' if label else 'part') }
+- id: type
+ label: Type
+ dtype: enum
+ default: int
+ options: [real, int, string, bool, raw]
+ option_labels: [Float, Integer, String, Boolean, Any]
+ option_attributes:
+ conv: [eng_notation.str_to_num, int, str, bool, eval]
+ str: [eng_notation.num_to_str, str, str, str, repr]
+ hide: part
+- id: value
+ label: Default Value
+ dtype: ${ type }
+ default: '0'
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+value: ${ value }
+
+templates:
+ imports: |-
+ from PyQt5 import Qt
+ from gnuradio import eng_notation
+ var_make: self.${id} = ${id} = ${value}
+ callbacks:
+ - self.set_${id}(${value})
+ - Qt.QMetaObject.invokeMethod(self._${id}_line_edit, "setText", Qt.Q_ARG("QString",
+ ${type.str}(${id})))
+ make: |-
+ <%
+ win = 'self._%s_tool_bar'%id
+ if not label:
+ label = '"%s"'%id
+ %>
+ ${win} = Qt.QToolBar(self)
+ ${win}.addWidget(Qt.QLabel(${label}+": "))
+ self._${id}_line_edit = Qt.QLineEdit(str(self.${id}))
+ self._${id}_tool_bar.addWidget(self._${id}_line_edit)
+ self._${id}_line_edit.returnPressed.connect(
+ lambda: self.set_${id}(${type.conv}(str(self._${id}_line_edit.text().toAscii()))))
+ ${gui_hint() % win}
+
+documentation: |-
+ This block creates a variable with a text entry box. Leave the label blank to use the variable id as the label.
+
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_entry.xml b/gr-qtgui/grc/qtgui_entry.xml
deleted file mode 100644
index fc0f4089d1..0000000000
--- a/gr-qtgui/grc/qtgui_entry.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable Text Entry:
-## a gui text box form
-###################################################
- -->
-<block>
- <name>QT GUI Entry</name>
- <key>variable_qtgui_entry</key>
- <import>from PyQt5 import Qt</import>
- <import>from gnuradio import eng_notation</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>#set $win = 'self._%s_tool_bar'%$id
-$win = Qt.QToolBar(self)
-#if not $label()
- #set $label = '"%s"'%$id
-#end if
-$(win).addWidget(Qt.QLabel($label+": "))
-self._$(id)_line_edit = Qt.QLineEdit(str(self.$id))
-self._$(id)_tool_bar.addWidget(self._$(id)_line_edit)
-self._$(id)_line_edit.returnPressed.connect(
- lambda: self.set_$(id)($(type.conv)(str(self._$(id)_line_edit.text().toAscii()))))
-$(gui_hint()($win))</make>
- <callback>self.set_$(id)($value)</callback>
- <callback>Qt.QMetaObject.invokeMethod(self._$(id)_line_edit, "setText", Qt.Q_ARG("QString", $(type.str)($id)))</callback>
- <param>
- <name>Label</name>
- <key>label</key>
- <value></value>
- <type>string</type>
- <hide>#if $label() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>int</value>
- <type>enum</type>
- <hide>part</hide>
- <option><name>Float</name><key>real</key><opt>conv:eng_notation.str_to_num</opt><opt>str:eng_notation.num_to_str</opt></option>
- <option><name>Integer</name><key>int</key><opt>conv:int</opt><opt>str:str</opt></option>
- <option><name>String</name><key>string</key><opt>conv:str</opt><opt>str:str</opt></option>
- <option><name>Boolean</name><key>bool</key><opt>conv:bool</opt><opt>str:str</opt></option>
- <option><name>Any</name><key>raw</key><opt>conv:eval</opt><opt>str:repr</opt></option>
- </param>
- <param>
- <name>Default Value</name>
- <key>value</key>
- <value>0</value>
- <type>$type</type>
- </param>
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
- <doc>
-This block creates a variable with a text entry box. \
-Leave the label blank to use the variable id as the label.
-
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_freq_sink_x.block.yml b/gr-qtgui/grc/qtgui_freq_sink_x.block.yml
new file mode 100644
index 0000000000..d935f04c4e
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_freq_sink_x.block.yml
@@ -0,0 +1,447 @@
+id: qtgui_freq_sink_x
+label: QT GUI Frequency Sink
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ default: complex
+ options: [complex, float, msg_complex, msg_float]
+ option_labels: [Complex, Float, Complex Message, Float Message]
+ option_attributes:
+ fcn: [freq_sink_c, freq_sink_f, freq_sink_c, freq_sink_f]
+ t: [complex, float, message, message]
+ hide: part
+- id: name
+ label: Name
+ dtype: string
+ default: '""'
+ hide: ${ ('none' if len(name) > 0 else 'part') }
+- id: fftsize
+ label: FFT Size
+ dtype: int
+ default: '1024'
+ hide: ${ ('all' if (type == 'msg_complex' or type == 'msg_float') else 'none') }
+- id: freqhalf
+ label: Spectrum Width
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: [Full, Half]
+ hide: ${ ('part' if type == "float" or type == "msg_float" else 'all') }
+- id: wintype
+ label: Window Type
+ dtype: enum
+ default: firdes.WIN_BLACKMAN_hARRIS
+ options: [firdes.WIN_BLACKMAN_hARRIS, firdes.WIN_HAMMING, firdes.WIN_HANN, firdes.WIN_BLACKMAN,
+ firdes.WIN_RECTANGULAR, firdes.WIN_KAISER, firdes.WIN_FLATTOP]
+ option_labels: [Blackman-harris, Hamming, Hann, Blackman, Rectangular, Kaiser,
+ Flat-top]
+ hide: part
+- id: fc
+ label: Center Frequency (Hz)
+ dtype: real
+ default: '0'
+- id: bw
+ label: Bandwidth (Hz)
+ dtype: real
+ default: samp_rate
+- id: grid
+ label: Grid
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: autoscale
+ label: Autoscale
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: average
+ label: Average
+ dtype: enum
+ default: 'False'
+ options: ['1.0', '0.2', '0.1', '0.05']
+ option_labels: [None, Low, Medium, High]
+ hide: part
+- id: ymin
+ label: Y min
+ dtype: real
+ default: '-140'
+ hide: part
+- id: ymax
+ label: Y max
+ dtype: real
+ default: '10'
+ hide: part
+- id: label
+ label: Y label
+ dtype: string
+ default: Relative Gain
+ hide: part
+- id: units
+ label: Y units
+ dtype: string
+ default: dB
+ hide: part
+- id: nconnections
+ label: Number of Inputs
+ dtype: int
+ default: '1'
+ hide: ${ ('all' if (type == 'msg_complex' or type == 'msg_float') else 'part') }
+- id: update_time
+ label: Update Period
+ dtype: real
+ default: '0.10'
+ hide: part
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+- id: showports
+ label: Show Msg Ports
+ dtype: enum
+ default: 'True'
+ options: ['False', 'True']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: tr_mode
+ label: Trigger Mode
+ category: Trigger
+ dtype: enum
+ default: qtgui.TRIG_MODE_FREE
+ options: [qtgui.TRIG_MODE_FREE, qtgui.TRIG_MODE_AUTO, qtgui.TRIG_MODE_NORM, qtgui.TRIG_MODE_TAG]
+ option_labels: [Free, Auto, Normal, Tag]
+ hide: part
+- id: tr_level
+ label: Trigger Level
+ category: Trigger
+ dtype: float
+ default: '0.0'
+ hide: part
+- id: tr_chan
+ label: Trigger Channel
+ category: Trigger
+ dtype: int
+ default: '0'
+ hide: part
+- id: tr_tag
+ label: Trigger Tag Key
+ category: Trigger
+ dtype: string
+ default: '""'
+ hide: part
+- id: ctrlpanel
+ label: Control Panel
+ category: Config
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: legend
+ label: Legend
+ category: Config
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: axislabels
+ label: Axis Labels
+ category: Config
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: label1
+ label: Line 1 Label
+ category: Config
+ dtype: string
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: width1
+ label: Line 1 Width
+ category: Config
+ dtype: int
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: color1
+ label: Line 1 Color
+ category: Config
+ dtype: enum
+ options: ['"blue"', '"red"', '"green"', '"black"', '"cyan"', '"magenta"', '"yellow"',
+ '"dark red"', '"dark green"', '"dark blue"']
+ option_labels: [Blue, Red, Green, Black, Cyan, Magenta, Yellow, Dark Red, Dark
+ Green, Dark Blue]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: alpha1
+ label: Line 1 Alpha
+ category: Config
+ dtype: float
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: label2
+ label: Line 2 Label
+ dtype: ''
+ default: "''"
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: width2
+ label: Line 2 Width
+ dtype: ''
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: color2
+ label: Line 2 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: alpha2
+ label: Line 2 Alpha
+ dtype: ''
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: label3
+ label: Line 3 Label
+ dtype: ''
+ default: "''"
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: width3
+ label: Line 3 Width
+ dtype: ''
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: color3
+ label: Line 3 Color
+ dtype: ''
+ default: '"green"'
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: alpha3
+ label: Line 3 Alpha
+ dtype: ''
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: label4
+ label: Line 4 Label
+ dtype: ''
+ default: "''"
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: width4
+ label: Line 4 Width
+ dtype: ''
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: color4
+ label: Line 4 Color
+ dtype: ''
+ default: '"black"'
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: alpha4
+ label: Line 4 Alpha
+ dtype: ''
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: label5
+ label: Line 5 Label
+ dtype: ''
+ default: "''"
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: width5
+ label: Line 5 Width
+ dtype: ''
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: color5
+ label: Line 5 Color
+ dtype: ''
+ default: '"cyan"'
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: alpha5
+ label: Line 5 Alpha
+ dtype: ''
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: label6
+ label: Line 6 Label
+ dtype: ''
+ default: "''"
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: width6
+ label: Line 6 Width
+ dtype: ''
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: color6
+ label: Line 6 Color
+ dtype: ''
+ default: '"magenta"'
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: alpha6
+ label: Line 6 Alpha
+ dtype: ''
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: label7
+ label: Line 7 Label
+ dtype: ''
+ default: "''"
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: width7
+ label: Line 7 Width
+ dtype: ''
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: color7
+ label: Line 7 Color
+ dtype: ''
+ default: '"yellow"'
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: alpha7
+ label: Line 7 Alpha
+ dtype: ''
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: label8
+ label: Line 8 Label
+ dtype: ''
+ default: "''"
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: width8
+ label: Line 8 Width
+ dtype: ''
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: color8
+ label: Line 8 Color
+ dtype: ''
+ default: '"dark red"'
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: alpha8
+ label: Line 8 Alpha
+ dtype: ''
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: label9
+ label: Line 9 Label
+ dtype: ''
+ default: "''"
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: width9
+ label: Line 9 Width
+ dtype: ''
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: color9
+ label: Line 9 Color
+ dtype: ''
+ default: '"dark green"'
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: alpha9
+ label: Line 9 Alpha
+ dtype: ''
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: label10
+ label: Line 10 Label
+ dtype: ''
+ default: "''"
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: width10
+ label: Line 10 Width
+ dtype: ''
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: color10
+ label: Line 10 Color
+ dtype: ''
+ default: '"dark blue"'
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: alpha10
+ label: Line 10 Alpha
+ dtype: ''
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+
+inputs:
+- domain: stream
+ dtype: ${ type.t }
+ multiplicity: ${ (0 if (type == 'msg_complex' or type == 'msg_float') else nconnections) }
+ optional: true
+- domain: message
+ id: freq
+ optional: true
+ hide: ${ showports }
+
+outputs:
+- domain: message
+ id: freq
+ optional: true
+ hide: ${ showports }
+
+templates:
+ imports: |-
+ from PyQt5 import Qt
+ from gnuradio import qtgui
+ from gnuradio.filter import firdes
+ import sip
+ callbacks:
+ - set_frequency_range(${fc}, ${bw})
+ - set_update_time(${update_time})
+ - set_y_axis(${ymin}, ${ymax})
+ - self.${id}.set_trigger_mode(${tr_mode}, ${tr_level}, ${tr_chan}, ${tr_tag})
+ make: |-
+ <%
+ win = 'self._%s_win'%id
+ %>\
+ qtgui.${type.fcn}(
+ ${fftsize}, #size
+ ${wintype}, #wintype
+ ${fc}, #fc
+ ${bw}, #bw
+ ${name}, #name
+ ${ 0 if (type == 'msg_complex' or type == 'msg_float') else nconnections }
+ )
+ self.${id}.set_update_time(${update_time})
+ self.${id}.set_y_axis(${ymin}, ${ymax})
+ self.${id}.set_y_label(${label}, ${units})
+ self.${id}.set_trigger_mode(${tr_mode}, ${tr_level}, ${tr_chan}, ${tr_tag})
+ self.${id}.enable_autoscale(${autoscale})
+ self.${id}.enable_grid(${grid})
+ self.${id}.set_fft_average(${average})
+ self.${id}.enable_axis_labels(${axislabels})
+ self.${id}.enable_control_panel(${ctrlpanel})
+
+ if not ${legend}:
+ self.${id}.disable_legend()
+
+ if ${type} == "float" or ${type} == "msg_float":
+ self.${id}.set_plot_pos_half(not ${freqhalf})
+
+ labels = [${label1}, ${label2}, ${label3}, ${label4}, ${label5},
+ ${label6}, ${label7}, ${label8}, ${label9}, ${label10}]
+ widths = [${width1}, ${width2}, ${width3}, ${width4}, ${width5},
+ ${width6}, ${width7}, ${width8}, ${width9}, ${width10}]
+ colors = [${color1}, ${color2}, ${color3}, ${color4}, ${color5},
+ ${color6}, ${color7}, ${color8}, ${color9}, ${color10}]
+ alphas = [${alpha1}, ${alpha2}, ${alpha3}, ${alpha4}, ${alpha5},
+ ${alpha6}, ${alpha7}, ${alpha8}, ${alpha9}, ${alpha10}]
+
+ for i in range(${1 if (type == 'msg_complex' or type == 'msg_float') else nconnections}):
+ if len(labels[i]) == 0:
+ self.${id}.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.${id}.set_line_label(i, labels[i])
+ self.${id}.set_line_width(i, widths[i])
+ self.${id}.set_line_color(i, colors[i])
+ self.${id}.set_line_alpha(i, alphas[i])
+
+ ${win} = sip.wrapinstance(self.${id}.pyqwidget(), Qt.QWidget)
+ ${ gui_hint()(win)}
+
+documentation: |-
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_freq_sink_x.xml b/gr-qtgui/grc/qtgui_freq_sink_x.xml
deleted file mode 100644
index ed39db7781..0000000000
--- a/gr-qtgui/grc/qtgui_freq_sink_x.xml
+++ /dev/null
@@ -1,791 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##QT GUI Sink
-###################################################
- -->
-<block>
- <name>QT GUI Frequency Sink</name>
- <key>qtgui_freq_sink_x</key>
- <import>from PyQt5 import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>from gnuradio.filter import firdes</import>
- <import>import sip</import>
- <make>#set $win = 'self._%s_win'%$id
-qtgui.$(type.fcn)(
- $fftsize, \#size
- $wintype, \#wintype
- $fc, \#fc
- $bw, \#bw
- $name, \#name
- #if $type.t == 'message' then 0 else $nconnections# \#number of inputs
-)
-self.$(id).set_update_time($update_time)
-self.$(id).set_y_axis($ymin, $ymax)
-self.$(id).set_y_label($label, $units)
-self.$(id).set_trigger_mode($tr_mode, $tr_level, $tr_chan, $tr_tag)
-self.$(id).enable_autoscale($autoscale)
-self.$(id).enable_grid($grid)
-self.$(id).set_fft_average($average)
-self.$(id).enable_axis_labels($axislabels)
-self.$(id).enable_control_panel($ctrlpanel)
-
-if not $legend:
- self.$(id).disable_legend()
-
-if "$type" == "float" or "$type" == "msg_float":
- self.$(id).set_plot_pos_half(not $freqhalf)
-
-labels = [$label1, $label2, $label3, $label4, $label5,
- $label6, $label7, $label8, $label9, $label10]
-widths = [$width1, $width2, $width3, $width4, $width5,
- $width6, $width7, $width8, $width9, $width10]
-colors = [$color1, $color2, $color3, $color4, $color5,
- $color6, $color7, $color8, $color9, $color10]
-alphas = [$alpha1, $alpha2, $alpha3, $alpha4, $alpha5,
- $alpha6, $alpha7, $alpha8, $alpha9, $alpha10]
-for i in xrange(#if $type.t == 'message' then 1 else $nconnections#):
- if len(labels[i]) == 0:
- self.$(id).set_line_label(i, "Data {0}".format(i))
- else:
- self.$(id).set_line_label(i, labels[i])
- self.$(id).set_line_width(i, widths[i])
- self.$(id).set_line_color(i, colors[i])
- self.$(id).set_line_alpha(i, alphas[i])
-
-self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
-$(gui_hint()($win))</make>
- <callback>set_frequency_range($fc, $bw)</callback>
- <callback>set_update_time($update_time)</callback>
- <callback>set_title($which, $title)</callback>
- <callback>set_color($which, $color)</callback>
- <callback>set_y_axis($ymin, $ymax)</callback>
- <callback>self.$(id).set_trigger_mode($tr_mode, $tr_level, $tr_chan, $tr_tag)</callback>
-
- <param_tab_order>
- <tab>General</tab>
- <tab>Trigger</tab>
- <tab>Config</tab>
- </param_tab_order>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <value>complex</value>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:freq_sink_c</opt>
- <opt>t:complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:freq_sink_f</opt>
- <opt>t:float</opt>
- </option>
- <option>
- <name>Complex Message</name>
- <key>msg_complex</key>
- <opt>fcn:freq_sink_c</opt>
- <opt>t:message</opt>
- </option>
- <option>
- <name>Float Message</name>
- <key>msg_float</key>
- <opt>fcn:freq_sink_f</opt>
- <opt>t:message</opt>
- </option>
- </param>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>""</value>
- <type>string</type>
- <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>FFT Size</name>
- <key>fftsize</key>
- <value>1024</value>
- <type>int</type>
- <hide>#if $type.t == 'message' then 'all' else 'none'#</hide>
- </param>
-
- <param>
- <name>Spectrum Width</name>
- <key>freqhalf</key>
- <value>True</value>
- <type>enum</type>
- <hide>#if $type() == "float" or $type() == "msg_float" then 'part' else 'all'#</hide>
- <option>
- <name>Full</name>
- <key>True</key>
- </option>
- <option>
- <name>Half</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Window Type</name>
- <key>wintype</key>
- <value>firdes.WIN_BLACKMAN_hARRIS</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Blackman-harris</name>
- <key>firdes.WIN_BLACKMAN_hARRIS</key>
- </option>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- <option>
- <name>Flat-top</name>
- <key>firdes.WIN_FLATTOP</key>
- </option>
- </param>
-
- <param>
- <name>Center Frequency (Hz)</name>
- <key>fc</key>
- <value>0</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Bandwidth (Hz)</name>
- <key>bw</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Grid</name>
- <key>grid</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Autoscale</name>
- <key>autoscale</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Average</name>
- <key>average</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>None</name>
- <key>1.0</key>
- </option>
- <option>
- <name>Low</name>
- <key>0.2</key>
- </option>
- <option>
- <name>Medium</name>
- <key>0.1</key>
- </option>
- <option>
- <name>High</name>
- <key>0.05</key>
- </option>
- </param>
-
- <param>
- <name>Y min</name>
- <key>ymin</key>
- <value>-140</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Y max</name>
- <key>ymax</key>
- <value>10</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Y label</name>
- <key>label</key>
- <value>Relative Gain</value>
- <type>string</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Y units</name>
- <key>units</key>
- <value>dB</value>
- <type>string</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Number of Inputs</name>
- <key>nconnections</key>
- <value>1</value>
- <type>int</type>
- <hide>#if $type.t == 'message' then 'all' else 'part'#</hide>
- </param>
-
- <param>
- <name>Update Period</name>
- <key>update_time</key>
- <value>0.10</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Show Msg Ports</name>
- <key>showports</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>False</key>
- </option>
- <option>
- <name>No</name>
- <key>True</key>
- </option>
- </param>
-
-
- <!-- Begin Trigger Tab items -->
- <param>
- <name>Trigger Mode</name>
- <key>tr_mode</key>
- <value>qtgui.TRIG_MODE_FREE</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Free</name>
- <key>qtgui.TRIG_MODE_FREE</key>
- </option>
- <option>
- <name>Auto</name>
- <key>qtgui.TRIG_MODE_AUTO</key>
- </option>
- <option>
- <name>Normal</name>
- <key>qtgui.TRIG_MODE_NORM</key>
- </option>
- <option>
- <name>Tag</name>
- <key>qtgui.TRIG_MODE_TAG</key>
- </option>
- <tab>Trigger</tab>
- </param>
-
- <param>
- <name>Trigger Level</name>
- <key>tr_level</key>
- <value>0.0</value>
- <type>float</type>
- <hide>part</hide>
- <tab>Trigger</tab>
- </param>
-
- <param>
- <name>Trigger Channel</name>
- <key>tr_chan</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- <tab>Trigger</tab>
- </param>
-
- <param>
- <name>Trigger Tag Key</name>
- <key>tr_tag</key>
- <value>""</value>
- <type>string</type>
- <hide>part</hide>
- <tab>Trigger</tab>
- </param>
-
-
-
- <!-- Begin Config Tab items -->
- <param>
- <name>Control Panel</name>
- <key>ctrlpanel</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Legend</name>
- <key>legend</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Axis Labels</name>
- <key>axislabels</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Label</name>
- <key>label1</key>
- <type>string</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Width</name>
- <key>width1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Color</name>
- <key>color1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Blue</name>
- <key>"blue"</key>
- </option>
- <option>
- <name>Red</name>
- <key>"red"</key>
- </option>
- <option>
- <name>Green</name>
- <key>"green"</key>
- </option>
- <option>
- <name>Black</name>
- <key>"black"</key>
- </option>
- <option>
- <name>Cyan</name>
- <key>"cyan"</key>
- </option>
- <option>
- <name>Magenta</name>
- <key>"magenta"</key>
- </option>
- <option>
- <name>Yellow</name>
- <key>"yellow"</key>
- </option>
- <option>
- <name>Dark Red</name>
- <key>"dark red"</key>
- </option>
- <option>
- <name>Dark Green</name>
- <key>"dark green"</key>
- </option>
- <option>
- <name>Dark Blue</name>
- <key>"dark blue"</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Alpha</name>
- <key>alpha1</key>
- <value>1.0</value>
- <type>float</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 2 Label</name>
- <key>label2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 2 Width</name>
- <key>width2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 2 Color</name>
- <key>color2</key>
- <value>"red"</value>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 2 Alpha</name>
- <key>alpha2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 3 Label</name>
- <key>label3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 3 Width</name>
- <key>width3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 3 Color</name>
- <key>color3</key>
- <value>"green"</value>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 3 Alpha</name>
- <key>alpha3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 4 Label</name>
- <key>label4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 4 Width</name>
- <key>width4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 4 Color</name>
- <key>color4</key>
- <value>"black"</value>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 4 Alpha</name>
- <key>alpha4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 5 Label</name>
- <key>label5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 5 Width</name>
- <key>width5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 5 Color</name>
- <key>color5</key>
- <value>"cyan"</value>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 5 Alpha</name>
- <key>alpha5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 6 Label</name>
- <key>label6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 6 Width</name>
- <key>width6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 6 Color</name>
- <key>color6</key>
- <value>"magenta"</value>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 6 Alpha</name>
- <key>alpha6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 7 Label</name>
- <key>label7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 7 Width</name>
- <key>width7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 7 Color</name>
- <key>color7</key>
- <value>"yellow"</value>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 7 Alpha</name>
- <key>alpha7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 8 Label</name>
- <key>label8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 8 Width</name>
- <key>width8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 8 Color</name>
- <key>color8</key>
- <value>"dark red"</value>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 8 Alpha</name>
- <key>alpha8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 9 Label</name>
- <key>label9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 9 Width</name>
- <key>width9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 9 Color</name>
- <key>color9</key>
- <value>"dark green"</value>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 9 Alpha</name>
- <key>alpha9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 10 Label</name>
- <key>label10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 10 Width</name>
- <key>width10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 10 Color</name>
- <key>color10</key>
- <value>"dark blue"</value>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 10 Alpha</name>
- <key>alpha10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
-
- <sink>
- <name>in</name>
- <type>$type.t</type>
- <nports>#if $type.t == 'message' then 0 else $nconnections#</nports>
- <optional>1</optional>
- </sink>
-
- <sink>
- <name>freq</name>
- <type>message</type>
- <optional>1</optional>
- <hide>$showports</hide>
- </sink>
-
- <source>
- <name>freq</name>
- <type>message</type>
- <optional>1</optional>
- <hide>$showports</hide>
- </source>
-
- <doc>
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_histogram_sink_x.block.yml b/gr-qtgui/grc/qtgui_histogram_sink_x.block.yml
new file mode 100644
index 0000000000..f71c2edb94
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_histogram_sink_x.block.yml
@@ -0,0 +1,419 @@
+id: qtgui_histogram_sink_x
+label: QT GUI Histogram Sink
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ default: float
+ options: [float, msg_float]
+ option_labels: [Float, Float Message]
+ option_attributes:
+ fcn: [histogram_sink_f, histogram_sink_f]
+ t: [float, message]
+ hide: part
+- id: name
+ label: Name
+ dtype: string
+ default: '""'
+ hide: ${ ('none' if len(name) > 0 else 'part') }
+- id: size
+ label: Number of Points
+ dtype: int
+ default: '1024'
+ hide: ${ ('all' if type.startwith('msg') else 'none') }
+- id: bins
+ label: Number of Bins
+ dtype: int
+ default: '100'
+- id: grid
+ label: Grid
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: autoscale
+ label: Autoscale
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: accum
+ label: Accumulate
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: xmin
+ label: Min x-axis
+ dtype: real
+ default: '-1'
+- id: xmax
+ label: Max x-axis
+ dtype: real
+ default: '1'
+- id: nconnections
+ label: Number of Inputs
+ dtype: int
+ default: '1'
+ hide: ${ ('all' if type.startwith('msg') else 'part') }
+- id: update_time
+ label: Update Period
+ dtype: float
+ default: '0.10'
+ hide: part
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+- id: legend
+ label: Legend
+ category: Config
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: axislabels
+ label: Axis Labels
+ category: Config
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: label1
+ label: Line 1 Label
+ category: Config
+ dtype: string
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: width1
+ label: Line 1 Width
+ category: Config
+ dtype: int
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: color1
+ label: Line 1 Color
+ category: Config
+ dtype: enum
+ options: ['"blue"', '"red"', '"green"', '"black"', '"cyan"', '"magenta"', '"yellow"',
+ '"dark red"', '"dark green"', '"dark blue"']
+ option_labels: [Blue, Red, Green, Black, Cyan, Magenta, Yellow, Dark Red, Dark
+ Green, Dark Blue]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: style1
+ label: Line 1 Style
+ category: Config
+ dtype: enum
+ options: ['1', '2', '3', '4', '5', '0']
+ option_labels: [Solid, Dash, Dots, Dash-Dot, Dash-Dot-Dot, None]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: marker1
+ label: Line 1 Marker
+ category: Config
+ dtype: enum
+ options: ['-1', '0', '1', '2', '3', '4', '6', '7', '8', '9']
+ option_labels: [None, Circle, Rectangle, Diamond, Triangle, Down Triangle, Left
+ Triangle, Right Triangle, Cross, X-Cross]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: alpha1
+ label: Line 1 Alpha
+ category: Config
+ dtype: float
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: label2
+ label: Line 2 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: width2
+ label: Line 2 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: color2
+ label: Line 2 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: style2
+ label: Line 2 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: marker2
+ label: Line 2 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: alpha2
+ label: Line 2 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: label3
+ label: Line 3 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: width3
+ label: Line 3 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: color3
+ label: Line 3 Color
+ dtype: ''
+ default: '"green"'
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: style3
+ label: Line 3 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: marker3
+ label: Line 3 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: alpha3
+ label: Line 3 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: label4
+ label: Line 4 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: width4
+ label: Line 4 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: color4
+ label: Line 4 Color
+ dtype: ''
+ default: '"black"'
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: style4
+ label: Line 4 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: marker4
+ label: Line 4 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: alpha4
+ label: Line 4 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: label5
+ label: Line 5 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: width5
+ label: Line 5 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: color5
+ label: Line 5 Color
+ dtype: ''
+ default: '"cyan"'
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: style5
+ label: Line 5 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: marker5
+ label: Line 5 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: alpha5
+ label: Line 5 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: label6
+ label: Line 6 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: width6
+ label: Line 6 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: color6
+ label: Line 6 Color
+ dtype: ''
+ default: '"magenta"'
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: style6
+ label: Line 6 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: marker6
+ label: Line 6 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: alpha6
+ label: Line 6 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: label7
+ label: Line 7 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: width7
+ label: Line 7 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: color7
+ label: Line 7 Color
+ dtype: ''
+ default: '"yellow"'
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: style7
+ label: Line 7 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: marker7
+ label: Line 7 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: alpha7
+ label: Line 7 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: label8
+ label: Line 8 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: width8
+ label: Line 8 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: color8
+ label: Line 8 Color
+ dtype: ''
+ default: '"dark red"'
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: style8
+ label: Line 8 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: marker8
+ label: Line 8 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: alpha8
+ label: Line 8 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: label9
+ label: Line 9 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: width9
+ label: Line 9 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: color9
+ label: Line 9 Color
+ dtype: ''
+ default: '"dark green"'
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: style9
+ label: Line 9 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: marker9
+ label: Line 9 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: alpha9
+ label: Line 9 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: label10
+ label: Line 10 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: width10
+ label: Line 10 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: color10
+ label: Line 10 Color
+ dtype: ''
+ default: '"dark blue"'
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: style10
+ label: Line 10 Style
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: marker10
+ label: Line 10 Marker
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: alpha10
+ label: Line 10 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+
+inputs:
+- domain: stream
+ dtype: ${ type.t }
+ multiplicity: ${ (0 if type.startswith('msg') else nconnections) }
+ optional: true
+
+templates:
+ imports: |-
+ from PyQt5 import Qt
+ from gnuradio import qtgui
+ import sip
+ callbacks:
+ - set_update_time(${update_time})
+ - set_title(${which}, ${title})
+ - set_color(${which}, ${color})
+ - set_bins(${bins})
+ - set_bins(${bins})
+ - set_x_axis(${xmin}, ${xmax})
+ make: |-
+ <%
+ win = 'self._%s_win'%id
+ %>\
+ qtgui.histogram_sink_f(
+ $size,
+ $bins,
+ $xmin,
+ $xmax,
+ $name,
+ ${ 0 if type.startswith('msg') else nconnections}
+ )
+
+ self.${id}.set_update_time(${update_time})
+ self.${id}.enable_autoscale(${autoscale})
+ self.${id}.enable_accumulate(${accum})
+ self.${id}.enable_grid(${grid})
+ self.${id}.enable_axis_labels(${axislabels})
+
+ if not ${legend}:
+ self.${id}.disable_legend()
+
+ labels = [${label1}, ${label2}, ${label3}, ${label4}, ${label5},
+ ${label6}, ${label7}, ${label8}, ${label9}, ${label10}]
+ widths = [${width1}, ${width2}, ${width3}, ${width4}, ${width5},
+ ${width6}, ${width7}, ${width8}, ${width9}, ${width10}]
+ colors = [${color1}, ${color2}, ${color3}, ${color4}, ${color5},
+ ${color6}, ${color7}, ${color8}, ${color9}, ${color10}]
+ alphas = [${alpha1}, ${alpha2}, ${alpha3}, ${alpha4}, ${alpha5},
+ ${alpha6}, ${alpha7}, ${alpha8}, ${alpha9}, ${alpha10}]
+
+ for i in range(${1 if type.startswith('msg') else nconnections}):
+ if len(labels[i]) == 0:
+ self.${id}.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.${id}.set_line_label(i, labels[i])
+ self.${id}.set_line_width(i, widths[i])
+ self.${id}.set_line_color(i, colors[i])
+ self.${id}.set_line_style(i, styles[i])
+ self.${id}.set_line_marker(i, markers[i])
+ self.${id}.set_line_alpha(i, alphas[i])
+
+ ${win} = sip.wrapinstance(self.${id}.pyqwidget(), Qt.QWidget)
+ ${gui_hint() % win}
+
+documentation: |-
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_histogram_sink_x.xml b/gr-qtgui/grc/qtgui_histogram_sink_x.xml
deleted file mode 100644
index 9e3dcb104f..0000000000
--- a/gr-qtgui/grc/qtgui_histogram_sink_x.xml
+++ /dev/null
@@ -1,794 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##QT GUI Histogram Sink
-###################################################
- -->
-<block>
- <name>QT GUI Histogram Sink</name>
- <key>qtgui_histogram_sink_x</key>
- <import>from PyQt5 import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>import sip</import>
- <make>#set $win = 'self._%s_win'%$id
-qtgui.histogram_sink_f(
- $size,
- $bins,
- $xmin,
- $xmax,
- $name,
- #if $type.t == 'message' then 0 else $nconnections#
-)
-
-self.$(id).set_update_time($update_time)
-self.$(id).enable_autoscale($autoscale)
-self.$(id).enable_accumulate($accum)
-self.$(id).enable_grid($grid)
-self.$(id).enable_axis_labels($axislabels)
-
-if not $legend:
- self.$(id).disable_legend()
-
-labels = [$label1, $label2, $label3, $label4, $label5,
- $label6, $label7, $label8, $label9, $label10]
-widths = [$width1, $width2, $width3, $width4, $width5,
- $width6, $width7, $width8, $width9, $width10]
-colors = [$color1, $color2, $color3, $color4, $color5,
- $color6, $color7, $color8, $color9, $color10]
-styles = [$style1, $style2, $style3, $style4, $style5,
- $style6, $style7, $style8, $style9, $style10]
-markers = [$marker1, $marker2, $marker3, $marker4, $marker5,
- $marker6, $marker7, $marker8, $marker9, $marker10]
-alphas = [$alpha1, $alpha2, $alpha3, $alpha4, $alpha5,
- $alpha6, $alpha7, $alpha8, $alpha9, $alpha10]
-for i in xrange(#if $type.t == 'message' then 1 else $nconnections#):
- if len(labels[i]) == 0:
- self.$(id).set_line_label(i, "Data {0}".format(i))
- else:
- self.$(id).set_line_label(i, labels[i])
- self.$(id).set_line_width(i, widths[i])
- self.$(id).set_line_color(i, colors[i])
- self.$(id).set_line_style(i, styles[i])
- self.$(id).set_line_marker(i, markers[i])
- self.$(id).set_line_alpha(i, alphas[i])
-
-self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
-$(gui_hint()($win))
- </make>
- <callback>set_update_time($update_time)</callback>
- <callback>set_title($which, $title)</callback>
- <callback>set_color($which, $color)</callback>
- <callback>set_bins($bins)</callback>
- <callback>set_bins($bins)</callback>
- <callback>set_x_axis($xmin, $xmax)</callback>
-
- <param_tab_order>
- <tab>General</tab>
- <tab>Config</tab>
- </param_tab_order>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <value>float</value>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:histogram_sink_f</opt>
- <opt>t:float</opt>
- </option>
- <option>
- <name>Float Message</name>
- <key>msg_float</key>
- <opt>fcn:histogram_sink_f</opt>
- <opt>t:message</opt>
- </option>
- </param>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>""</value>
- <type>string</type>
- <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>Number of Points</name>
- <key>size</key>
- <value>1024</value>
- <type>int</type>
- <hide>#if $type.t == 'message' then 'all' else 'none'#</hide>
- </param>
-
- <param>
- <name>Number of Bins</name>
- <key>bins</key>
- <value>100</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Grid</name>
- <key>grid</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Autoscale</name>
- <key>autoscale</key>
- <value>True</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Accumulate</name>
- <key>accum</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Min x-axis</name>
- <key>xmin</key>
- <value>-1</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Max x-axis</name>
- <key>xmax</key>
- <value>1</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Number of Inputs</name>
- <key>nconnections</key>
- <value>1</value>
- <type>int</type>
- <hide>#if $type.t == 'message' then 'all' else 'part'#</hide>
- </param>
-
- <param>
- <name>Update Period</name>
- <key>update_time</key>
- <value>0.10</value>
- <type>float</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
-
- <!-- Begin Config Tab items -->
- <param>
- <name>Legend</name>
- <key>legend</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Axis Labels</name>
- <key>axislabels</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Label</name>
- <key>label1</key>
- <type>string</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Width</name>
- <key>width1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Color</name>
- <key>color1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Blue</name>
- <key>"blue"</key>
- </option>
- <option>
- <name>Red</name>
- <key>"red"</key>
- </option>
- <option>
- <name>Green</name>
- <key>"green"</key>
- </option>
- <option>
- <name>Black</name>
- <key>"black"</key>
- </option>
- <option>
- <name>Cyan</name>
- <key>"cyan"</key>
- </option>
- <option>
- <name>Magenta</name>
- <key>"magenta"</key>
- </option>
- <option>
- <name>Yellow</name>
- <key>"yellow"</key>
- </option>
- <option>
- <name>Dark Red</name>
- <key>"dark red"</key>
- </option>
- <option>
- <name>Dark Green</name>
- <key>"dark green"</key>
- </option>
- <option>
- <name>Dark Blue</name>
- <key>"dark blue"</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Style</name>
- <key>style1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Solid</name>
- <key>1</key>
- </option>
- <option>
- <name>Dash</name>
- <key>2</key>
- </option>
- <option>
- <name>Dots</name>
- <key>3</key>
- </option>
- <option>
- <name>Dash-Dot</name>
- <key>4</key>
- </option>
- <option>
- <name>Dash-Dot-Dot</name>
- <key>5</key>
- </option>
- <option>
- <name>None</name>
- <key>0</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Marker</name>
- <key>marker1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>None</name>
- <key>-1</key>
- </option>
- <option>
- <name>Circle</name>
- <key>0</key>
- </option>
- <option>
- <name>Rectangle</name>
- <key>1</key>
- </option>
- <option>
- <name>Diamond</name>
- <key>2</key>
- </option>
- <option>
- <name>Triangle</name>
- <key>3</key>
- </option>
- <option>
- <name>Down Triangle</name>
- <key>4</key>
- </option>
- <option>
- <name>Left Triangle</name>
- <key>6</key>
- </option>
- <option>
- <name>Right Triangle</name>
- <key>7</key>
- </option>
- <option>
- <name>Cross</name>
- <key>8</key>
- </option>
- <option>
- <name>X-Cross</name>
- <key>9</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Alpha</name>
- <key>alpha1</key>
- <value>1.0</value>
- <type>float</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 2 Label</name>
- <key>label2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 2 Width</name>
- <key>width2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 2 Color</name>
- <key>color2</key>
- <value>"red"</value>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 2 Style</name>
- <key>style2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 2 Marker</name>
- <key>marker2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 2 Alpha</name>
- <key>alpha2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 3 Label</name>
- <key>label3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 3 Width</name>
- <key>width3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 3 Color</name>
- <key>color3</key>
- <value>"green"</value>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 3 Style</name>
- <key>style3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 3 Marker</name>
- <key>marker3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 3 Alpha</name>
- <key>alpha3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 4 Label</name>
- <key>label4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 4 Width</name>
- <key>width4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 4 Color</name>
- <key>color4</key>
- <value>"black"</value>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 4 Style</name>
- <key>style4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 4 Marker</name>
- <key>marker4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 4 Alpha</name>
- <key>alpha4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 5 Label</name>
- <key>label5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 5 Width</name>
- <key>width5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 5 Color</name>
- <key>color5</key>
- <value>"cyan"</value>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 5 Style</name>
- <key>style5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 5 Marker</name>
- <key>marker5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 5 Alpha</name>
- <key>alpha5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 6 Label</name>
- <key>label6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 6 Width</name>
- <key>width6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 6 Color</name>
- <key>color6</key>
- <value>"magenta"</value>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 6 Style</name>
- <key>style6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 6 Marker</name>
- <key>marker6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 6 Alpha</name>
- <key>alpha6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 7 Label</name>
- <key>label7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 7 Width</name>
- <key>width7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 7 Color</name>
- <key>color7</key>
- <value>"yellow"</value>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 7 Style</name>
- <key>style7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 7 Marker</name>
- <key>marker7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 7 Alpha</name>
- <key>alpha7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 8 Label</name>
- <key>label8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 8 Width</name>
- <key>width8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 8 Color</name>
- <key>color8</key>
- <value>"dark red"</value>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 8 Style</name>
- <key>style8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 8 Marker</name>
- <key>marker8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 8 Alpha</name>
- <key>alpha8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 9 Label</name>
- <key>label9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 9 Width</name>
- <key>width9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 9 Color</name>
- <key>color9</key>
- <value>"dark green"</value>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 9 Style</name>
- <key>style9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 9 Marker</name>
- <key>marker9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 9 Alpha</name>
- <key>alpha9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 10 Label</name>
- <key>label10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 10 Width</name>
- <key>width10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 10 Color</name>
- <key>color10</key>
- <value>"dark blue"</value>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 10 Style</name>
- <key>style10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 10 Marker</name>
- <key>marker10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 10 Alpha</name>
- <key>alpha10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
-
- <sink>
- <name>in</name>
- <type>$type.t</type>
- <nports>#if $type.t == 'message' then 0 else $nconnections#</nports>
- <optional>1</optional>
- </sink>
-
- <doc>
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_label.block.yml b/gr-qtgui/grc/qtgui_label.block.yml
new file mode 100644
index 0000000000..e86aa20727
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_label.block.yml
@@ -0,0 +1,66 @@
+id: variable_qtgui_label
+label: QT GUI Label
+
+parameters:
+- id: label
+ label: Label
+ dtype: string
+ hide: ${ ('none' if label else 'part') }
+- id: type
+ label: Type
+ dtype: enum
+ default: int
+ options: [real, int, string, bool, raw]
+ option_labels: [Float, Integer, String, Boolean, Any]
+ option_attributes:
+ conv: [eng_notation.str_to_num, int, str, bool, eval]
+ str: [eng_notation.num_to_str, str, str, str, repr]
+ hide: part
+- id: value
+ label: Default Value
+ dtype: ${ type }
+ default: '0'
+- id: formatter
+ label: Formatter
+ dtype: raw
+ default: None
+ hide: part
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+value: ${ value }
+
+templates:
+ imports: |-
+ from PyQt5 import Qt
+ from gnuradio import eng_notation
+ var_make: self.${id} = ${id} = ${value}
+ callbacks:
+ - self.set_${id}(self._${id}_formatter(${value}))
+ - Qt.QMetaObject.invokeMethod(self._${id}_label, "setText", Qt.Q_ARG("QString",
+ ${id}))
+ make: |-
+ <%
+ win = 'self._%s_win'%id
+ if not label:
+ label = 'self._%s_tool_bar'%id
+ %>\
+ ${win} = Qt.QToolBar(self)
+
+ if ${formatter}:
+ self._${id}_formatter = ${formatter}
+ else:
+ self._${id}_formatter = lambda x: ${type.str}(x)
+
+ ${win}.addWidget(Qt.QLabel(${label}+": "))
+ self._${id}_label = Qt.QLabel(str(self._${id}_formatter(self.${id})))
+ self._${id}_tool_bar.addWidget(self._${id}_label)
+ ${gui_hint() % win}
+
+documentation: |-
+ This block creates a variable with a label widget for text. Leave the label blank to use the variable id as the label.
+
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_label.xml b/gr-qtgui/grc/qtgui_label.xml
deleted file mode 100644
index 946cee36ab..0000000000
--- a/gr-qtgui/grc/qtgui_label.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable Label Text:
-## a gui static text form
-###################################################
- -->
-
-<block>
- <name>QT GUI Label</name>
- <key>variable_qtgui_label</key>
- <import>from PyQt5 import Qt</import>
- <import>from gnuradio import eng_notation</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>#set $win = 'self._%s_tool_bar'%$id
-$win = Qt.QToolBar(self)
-#if not $label()
- #set $label = '"%s"'%$id
-#end if
-
-if $(formatter):
- self._$(id)_formatter = $formatter
-else:
- self._$(id)_formatter = lambda x: $(type.str)(x)
-
-$(win).addWidget(Qt.QLabel($label+": "))
-self._$(id)_label = Qt.QLabel(str(self._$(id)_formatter(self.$id)))
-self._$(id)_tool_bar.addWidget(self._$(id)_label)
-$(gui_hint()($win))
- </make>
-
- <callback>self.set_$(id)(self._$(id)_formatter($value))</callback>
- <callback>Qt.QMetaObject.invokeMethod(self._$(id)_label, "setText", Qt.Q_ARG("QString", $id))</callback>
-
- <param>
- <name>Label</name>
- <key>label</key>
- <value></value>
- <type>string</type>
- <hide>#if $label() then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <value>int</value>
- <type>enum</type>
- <hide>part</hide>
- <option><name>Float</name><key>real</key><opt>conv:eng_notation.str_to_num</opt><opt>str:eng_notation.num_to_str</opt></option>
- <option><name>Integer</name><key>int</key><opt>conv:int</opt><opt>str:str</opt></option>
- <option><name>String</name><key>string</key><opt>conv:str</opt><opt>str:str</opt></option>
- <option><name>Boolean</name><key>bool</key><opt>conv:bool</opt><opt>str:str</opt></option>
- <option><name>Any</name><key>raw</key><opt>conv:eval</opt><opt>str:repr</opt></option>
- </param>
-
- <param>
- <name>Default Value</name>
- <key>value</key>
- <value>0</value>
- <type>$type</type>
- </param>
-
- <param>
- <name>Formatter</name>
- <key>formatter</key>
- <value>None</value>
- <type>raw</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
-
- <doc>
-This block creates a variable with a label widget for text. \
-Leave the label blank to use the variable id as the label.
-
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_number_sink.block.yml b/gr-qtgui/grc/qtgui_number_sink.block.yml
new file mode 100644
index 0000000000..05adc13d3c
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_number_sink.block.yml
@@ -0,0 +1,283 @@
+id: qtgui_number_sink
+label: QT GUI Number Sink
+
+parameters:
+- id: name
+ label: Name
+ dtype: string
+ default: '""'
+ hide: ${ ('none' if len(name) > 0 else 'part') }
+- id: type
+ label: Input Type
+ category: General
+ dtype: enum
+ options: [float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_float, gr.sizeof_int, gr.sizeof_short, gr.sizeof_char]
+ hide: part
+- id: autoscale
+ label: Autoscale
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: avg
+ label: Average
+ category: General
+ dtype: float
+ default: '0'
+- id: graph_type
+ label: Graph Type
+ category: General
+ dtype: enum
+ options: [qtgui.NUM_GRAPH_HORIZ, qtgui.NUM_GRAPH_VERT, qtgui.NUM_GRAPH_NONE]
+ option_labels: [Horizontal, Vertical, None]
+- id: nconnections
+ label: Number of Inputs
+ category: General
+ dtype: int
+ default: '1'
+ hide: part
+- id: min
+ label: Min
+ dtype: float
+ default: '-1'
+ hide: part
+- id: max
+ label: Max
+ dtype: float
+ default: '1'
+ hide: part
+- id: update_time
+ label: Update Period
+ category: General
+ dtype: float
+ default: '0.10'
+ hide: part
+- id: gui_hint
+ label: GUI Hint
+ category: General
+ dtype: gui_hint
+ hide: part
+- id: label1
+ label: Line 1 Label
+ category: Config
+ dtype: string
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: unit1
+ label: Line 1 Unit
+ category: Config
+ dtype: string
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: color1
+ label: Line 1 Color
+ category: Config
+ dtype: enum
+ options: ['("black", "black")', '("blue", "red")', '("black", "white")', '("white",
+ "black")', '("black", "red")']
+ option_labels: [Black, Blue-Red, White Hot, Black Hot, Black-Red]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: factor1
+ label: Line 1 Factor
+ category: Config
+ dtype: float
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: label2
+ label: Line 2 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: unit2
+ label: Line 2 Unit
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: color2
+ label: Line 2 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: factor2
+ label: Line 2 Factor
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: label3
+ label: Line 3 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: unit3
+ label: Line 3 Unit
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: color3
+ label: Line 3 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: factor3
+ label: Line 3 Factor
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: label4
+ label: Line 4 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: unit4
+ label: Line 4 Unit
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: color4
+ label: Line 4 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: factor4
+ label: Line 4 Factor
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: label5
+ label: Line 5 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: unit5
+ label: Line 5 Unit
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: color5
+ label: Line 5 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: factor5
+ label: Line 5 Factor
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: label6
+ label: Line 6 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: unit6
+ label: Line 6 Unit
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: color6
+ label: Line 6 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: factor6
+ label: Line 6 Factor
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: label7
+ label: Line 7 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: unit7
+ label: Line 7 Unit
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: color7
+ label: Line 7 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: factor7
+ label: Line 7 Factor
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: label8
+ label: Line 8 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: unit8
+ label: Line 8 Unit
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: color8
+ label: Line 8 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: factor8
+ label: Line 8 Factor
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: label9
+ label: Line 9 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: unit9
+ label: Line 9 Unit
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: color9
+ label: Line 9 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: factor9
+ label: Line 9 Factor
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: label10
+ label: Line 10 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: unit10
+ label: Line 10 Unit
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: color10
+ label: Line 10 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: factor10
+ label: Line 10 Factor
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ multiplicity: ${ nconnections }
+
+templates:
+ imports: |-
+ from PyQt5 import Qt
+ from gnuradio import qtgui
+ import sip
+ callbacks:
+ - set_update_time(${update_time})
+ make: |-
+ <%
+ win = 'self._%s_win'%id
+ %>\
+ qtgui.number_sink(
+ ${type.size},
+ ${avg},
+ ${graph_type},
+ ${nconnections}
+ )
+ self.${id}.set_update_time(${update_time})
+ self.${id}.set_title(${name})
+
+ labels = [${label1}, ${label2}, ${label3}, ${label4}, ${label5},
+ ${label6}, ${label7}, ${label8}, ${label9}, ${label10}]
+ units = [${unit1}, ${unit2}, ${unit3}, ${unit4}, ${unit5},
+ ${unit6}, ${unit7}, ${unit8}, ${unit9}, ${unit10}]
+ colors = [${color1}, ${color2}, ${color3}, ${color4}, ${color5},
+ ${color6}, ${color7}, ${color8}, ${color9}, ${color10}]
+ factor = [${factor1}, ${factor2}, ${factor3}, ${factor4}, ${factor5},
+ ${factor6}, ${factor7}, ${factor8}, ${factor9}, ${factor10}]
+
+ for i in range(${nconnections}):
+ self.${id}.set_min(i, ${min})
+ self.${id}.set_max(i, ${max})
+ self.${id}.set_color(i, colors[i][0], colors[i][1])
+ if len(labels[i]) == 0:
+ self.${id}.set_label(i, "Data {0}".format(i))
+ else:
+ self.${id}.set_label(i, labels[i])
+ self.${id}.set_unit(i, units[i])
+ self.${id}.set_factor(i, factor[i])
+
+ self.${id}.enable_autoscale(${autoscale})
+ ${win} = sip.wrapinstance(self.${id}.pyqwidget(), Qt.QWidget)
+ ${gui_hint() % win}
+
+documentation: |-
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_number_sink.xml b/gr-qtgui/grc/qtgui_number_sink.xml
deleted file mode 100644
index 06837493c3..0000000000
--- a/gr-qtgui/grc/qtgui_number_sink.xml
+++ /dev/null
@@ -1,496 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##QT GUI Number Sink
-###################################################
- -->
-<block>
- <name>QT GUI Number Sink</name>
- <key>qtgui_number_sink</key>
- <import>from PyQt5 import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>import sip</import>
- <make>#set $win = 'self._%s_win'%$id
-qtgui.number_sink(
- $type.size,
- $avg,
- $graph_type,
- $nconnections
-)
-self.$(id).set_update_time($update_time)
-self.$(id).set_title($name)
-
-labels = [$label1, $label2, $label3, $label4, $label5,
- $label6, $label7, $label8, $label9, $label10]
-units = [$unit1, $unit2, $unit3, $unit4, $unit5,
- $unit6, $unit7, $unit8, $unit9, $unit10]
-colors = [$color1, $color2, $color3, $color4, $color5,
- $color6, $color7, $color8, $color9, $color10]
-factor = [$factor1, $factor2, $factor3, $factor4, $factor5,
- $factor6, $factor7, $factor8, $factor9, $factor10]
-for i in xrange($nconnections):
- self.$(id).set_min(i, $min)
- self.$(id).set_max(i, $max)
- self.$(id).set_color(i, colors[i][0], colors[i][1])
- if len(labels[i]) == 0:
- self.$(id).set_label(i, "Data {0}".format(i))
- else:
- self.$(id).set_label(i, labels[i])
- self.$(id).set_unit(i, units[i])
- self.$(id).set_factor(i, factor[i])
-
-self.$(id).enable_autoscale($autoscale)
-self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
-$(gui_hint()($win))</make>
- <callback>set_update_time($update_time)</callback>
-
- <param_tab_order>
- <tab>General</tab>
- <tab>Config</tab>
- </param_tab_order>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>""</value>
- <type>string</type>
- <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- <tab>General</tab>
- </param>
-
- <param>
- <name>Autoscale</name>
- <key>autoscale</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Average</name>
- <key>avg</key>
- <value>0</value>
- <type>float</type>
- <tab>General</tab>
- </param>
-
- <param>
- <name>Graph Type</name>
- <key>graph_type</key>
- <type>enum</type>
- <option>
- <name>Horizontal</name>
- <key>qtgui.NUM_GRAPH_HORIZ</key>
- </option>
- <option>
- <name>Vertical</name>
- <key>qtgui.NUM_GRAPH_VERT</key>
- </option>
- <option>
- <name>None</name>
- <key>qtgui.NUM_GRAPH_NONE</key>
- </option>
- <tab>General</tab>
- </param>
-
- <param>
- <name>Number of Inputs</name>
- <key>nconnections</key>
- <value>1</value>
- <type>int</type>
- <hide>part</hide>
- <tab>General</tab>
- </param>
-
- <param>
- <name>Min</name>
- <key>min</key>
- <value>-1</value>
- <type>float</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Max</name>
- <key>max</key>
- <value>1</value>
- <type>float</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Update Period</name>
- <key>update_time</key>
- <value>0.10</value>
- <type>float</type>
- <hide>part</hide>
- <tab>General</tab>
- </param>
-
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- <tab>General</tab>
- </param>
-
- <param>
- <name>Line 1 Label</name>
- <key>label1</key>
- <type>string</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Unit</name>
- <key>unit1</key>
- <type>string</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Color</name>
- <key>color1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Black</name>
- <key>("black", "black")</key>
- </option>
- <option>
- <name>Blue-Red</name>
- <key>("blue", "red")</key>
- </option>
- <option>
- <name>White Hot</name>
- <key>("black", "white")</key>
- </option>
- <option>
- <name>Black Hot</name>
- <key>("white", "black")</key>
- </option>
- <option>
- <name>Black-Red</name>
- <key>("black", "red")</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Factor</name>
- <key>factor1</key>
- <value>1</value>
- <type>float</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 2 Label</name>
- <key>label2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>unit1</base_key>
- <name>Line 2 Unit</name>
- <key>unit2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 2 Color</name>
- <key>color2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>factor1</base_key>
- <name>Line 2 Factor</name>
- <key>factor2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 3 Label</name>
- <key>label3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>unit1</base_key>
- <name>Line 3 Unit</name>
- <key>unit3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 3 Color</name>
- <key>color3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>factor1</base_key>
- <name>Line 3 Factor</name>
- <key>factor3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 4 Label</name>
- <key>label4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>unit1</base_key>
- <name>Line 4 Unit</name>
- <key>unit4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 4 Color</name>
- <key>color4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>factor1</base_key>
- <name>Line 4 Factor</name>
- <key>factor4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 5 Label</name>
- <key>label5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>unit1</base_key>
- <name>Line 5 Unit</name>
- <key>unit5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 5 Color</name>
- <key>color5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>factor1</base_key>
- <name>Line 5 Factor</name>
- <key>factor5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 6 Label</name>
- <key>label6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>unit1</base_key>
- <name>Line 6 Unit</name>
- <key>unit6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 6 Color</name>
- <key>color6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>factor1</base_key>
- <name>Line 6 Factor</name>
- <key>factor6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 7 Label</name>
- <key>label7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>unit1</base_key>
- <name>Line 7 Unit</name>
- <key>unit7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 7 Color</name>
- <key>color7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>factor1</base_key>
- <name>Line 7 Factor</name>
- <key>factor7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 8 Label</name>
- <key>label8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>unit1</base_key>
- <name>Line 8 Unit</name>
- <key>unit8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 8 Color</name>
- <key>color8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>factor1</base_key>
- <name>Line 8 Factor</name>
- <key>factor8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 9 Label</name>
- <key>label9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>unit1</base_key>
- <name>Line 9 Unit</name>
- <key>unit9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 9 Color</name>
- <key>color9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>factor1</base_key>
- <name>Line 9 Factor</name>
- <key>factor9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 10 Label</name>
- <key>label10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>unit1</base_key>
- <name>Line 10 Unit</name>
- <key>unit10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 10 Color</name>
- <key>color10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>factor1</base_key>
- <name>Line 10 Factor</name>
- <key>factor10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
-
- <sink>
- <name>in</name>
- <type>$type</type>
- <nports>$nconnections</nports>
- </sink>
- <doc>
- The GUI hint can be used to position the widget within the application. \
- The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
- Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_push_button.block.yml b/gr-qtgui/grc/qtgui_push_button.block.yml
new file mode 100644
index 0000000000..20e4593404
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_push_button.block.yml
@@ -0,0 +1,60 @@
+id: variable_qtgui_push_button
+label: QT GUI Push Button
+
+parameters:
+- id: label
+ label: Label
+ dtype: string
+ hide: ${ ('none' if label else 'part') }
+- id: type
+ label: Type
+ dtype: enum
+ default: int
+ options: [real, int, string, bool, raw]
+ option_labels: [Float, Integer, String, Boolean, Any]
+ option_attributes:
+ conv: [float, int, str, bool, eval]
+ hide: part
+- id: value
+ label: Default Value
+ dtype: ${ type }
+ default: '0'
+- id: pressed
+ label: Pressed
+ dtype: ${ type }
+ default: '1'
+- id: released
+ label: Released
+ dtype: ${ type }
+ default: '0'
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+value: ${ value }
+
+templates:
+ imports: from PyQt5 import Qt
+ var_make: self.${id} = ${id} = ${value}
+ callbacks:
+ - self.set_${id}(${value})
+ make: |-
+ <%
+ win = '_%s_push_button'%id
+ if not label:
+ label = '"%s"'%id
+ %>\
+ ${win} = Qt.QPushButton(${label})
+ self._${id}_choices = {'Pressed': ${pressed}, 'Released': ${released}}
+ ${win}.pressed.connect(lambda: self.set_${id}(self._${id}_choices['Pressed']))
+ ${win}.released.connect(lambda: self.set_${id}(self._${id}_choices['Released']))
+ ${gui_hint() % win}
+
+documentation: |-
+ This block creates a variable push button. Leave the label blank to use the variable id as the label.
+
+ A push button selects between two values of similar type. The variable will take on one value or the other depending on whether the button is pressed or released.
+
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_push_button.xml b/gr-qtgui/grc/qtgui_push_button.xml
deleted file mode 100644
index 49c2e9d6f0..0000000000
--- a/gr-qtgui/grc/qtgui_push_button.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable Push Button:
-## a gui push button form
-###################################################
- -->
-<block>
- <name>QT GUI Push Button</name>
- <key>variable_qtgui_push_button</key>
- <import>from PyQt5 import Qt</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>#set $win = '_%s_push_button'%$id
-#if not $label()
- #set $label = '"%s"'%$id
-#end if
-$win = Qt.QPushButton($label)
-self._$(id)_choices = {'Pressed': $pressed, 'Released': $released}
-$(win).pressed.connect(lambda: self.set_$(id)(self._$(id)_choices['Pressed']))
-$(win).released.connect(lambda: self.set_$(id)(self._$(id)_choices['Released']))
-$(gui_hint()($win))</make>
- <callback>self.set_$(id)($value)</callback>
- <param>
- <name>Label</name>
- <key>label</key>
- <value></value>
- <type>string</type>
- <hide>#if $label() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>int</value>
- <type>enum</type>
- <hide>part</hide>
- <option><name>Float</name><key>real</key><opt>conv:float</opt></option>
- <option><name>Integer</name><key>int</key><opt>conv:int</opt></option>
- <option><name>String</name><key>string</key><opt>conv:str</opt></option>
- <option><name>Boolean</name><key>bool</key><opt>conv:bool</opt></option>
- <option><name>Any</name><key>raw</key><opt>conv:eval</opt></option>
- </param>
- <param>
- <name>Default Value</name>
- <key>value</key>
- <value>0</value>
- <type>$type</type>
- </param>
- <param>
- <name>Pressed</name>
- <key>pressed</key>
- <value>1</value>
- <type>$type</type>
- </param>
- <param>
- <name>Released</name>
- <key>released</key>
- <value>0</value>
- <type>$type</type>
- </param>
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
- <doc>
-This block creates a variable push button. \
-Leave the label blank to use the variable id as the label.
-
-A push button selects between two values of similar type. \
-The variable will take on one value or the other depending \
-on whether the button is pressed or released.
-
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_range.block.yml b/gr-qtgui/grc/qtgui_range.block.yml
new file mode 100644
index 0000000000..a4aaa5925c
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_range.block.yml
@@ -0,0 +1,86 @@
+id: variable_qtgui_range
+label: QT GUI Range
+
+parameters:
+- id: label
+ label: Label
+ dtype: string
+ hide: ${ ('none' if label else 'part') }
+- id: rangeType
+ label: Type
+ dtype: enum
+ default: '"float"'
+ options: [float, int]
+ option_attributes:
+ type: [float, int]
+ hide: part
+- id: value
+ label: Default Value
+ dtype: ${ rangeType.type }
+ default: '50'
+- id: start
+ label: Start
+ dtype: ${ rangeType.type }
+ default: '0'
+- id: stop
+ label: Stop
+ dtype: ${ rangeType.type }
+ default: '100'
+- id: step
+ label: Step
+ dtype: ${ rangeType.type }
+ default: '1'
+- id: widget
+ label: Widget
+ dtype: enum
+ default: counter_slider
+ options: [counter_slider, counter, slider, dial]
+ option_labels: [Counter + Slider, Counter, Slider, Knob]
+ hide: part
+- id: orient
+ label: Orientation
+ dtype: enum
+ default: Qt.Horizontal
+ options: [Qt.Horizontal, Qt.Vertical]
+ option_labels: [Horizontal, Vertical]
+ option_attributes:
+ minfcn: [setMinimumWidth, setMinimumHeight]
+ scalepos: [BottomScale, LeftScale]
+ hide: ${ ('part' if widget == "slider" else 'all') }
+- id: min_len
+ label: Minimum Length
+ dtype: int
+ default: '200'
+ hide: part
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+value: ${ value }
+
+asserts:
+- ${start <= value <= stop}
+- ${start <= stop}
+
+templates:
+ imports: from gnuradio.qtgui import Range, RangeWidget
+ var_make: self.${id} = ${id} = ${value}
+ callbacks:
+ - self.set_${id}(${value})
+ make: |-
+ <%
+ win = 'self._%s_win'%id
+ range = 'self._%s_range'%id
+ if not label:
+ label = '"%s"'%id
+ %>\
+ ${range} = Range(${start}, ${stop}, ${step}, ${value}, ${min_len})
+ ${win} = RangeWidget(${range}, self.set_${id}, ${label}, "${widget}", ${rangeType})
+ ${gui_hint() % win}
+
+documentation: |-
+ This block creates a variable with a slider. Leave the label blank to use the variable id as the label. The value must be a real number. The value must be between the start and the stop.
+
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_range.xml b/gr-qtgui/grc/qtgui_range.xml
deleted file mode 100644
index 71b614cc5e..0000000000
--- a/gr-qtgui/grc/qtgui_range.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable Range:
-## ranged widgets like a slider or a knob
-###################################################
- -->
-<block>
- <name>QT GUI Range</name>
- <key>variable_qtgui_range</key>
- <import>from gnuradio.qtgui import Range, RangeWidget</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>#set $win = 'self._%s_win'%$id
- #set $range = 'self._%s_range'%$id
-#if not $label()
- #set $label = '"%s"'%$id
-#end if
-$(range) = Range($start, $stop, $step, $value, $min_len)
-$(win) = RangeWidget($range, self.set_$(id), $label, "$widget", $rangeType)
-$(gui_hint()($win))</make>
- <callback>self.set_$(id)($value)</callback>
-
- <param>
- <name>Label</name>
- <key>label</key>
- <value></value>
- <type>string</type>
- <hide>#if $label() then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>Type</name>
- <key>rangeType</key>
- <value>"float"</value>
- <type>enum</type>
- <hide>part</hide>
- <option><name>Float</name><key>float</key><opt>type:float</opt></option>
- <option><name>Int</name><key>int</key><opt>type:int</opt></option>
- </param>
-
- <param>
- <name>Default Value</name>
- <key>value</key>
- <value>50</value>
- <type>$rangeType.type</type>
- </param>
-
- <param>
- <name>Start</name>
- <key>start</key>
- <value>0</value>
- <type>$rangeType.type</type>
- </param>
-
- <param>
- <name>Stop</name>
- <key>stop</key>
- <value>100</value>
- <type>$rangeType.type</type>
- </param>
-
- <param>
- <name>Step</name>
- <key>step</key>
- <value>1</value>
- <type>$rangeType.type</type>
- </param>
-
- <param>
- <name>Widget</name>
- <key>widget</key>
- <value>counter_slider</value>
- <type>enum</type>
- <hide>part</hide>
- <option><name>Counter + Slider</name><key>counter_slider</key></option>
- <option><name>Counter</name><key>counter</key></option>
- <option><name>Slider</name><key>slider</key></option>
- <option><name>Knob</name><key>dial</key></option>
- </param>
-
- <param>
- <name>Orientation</name>
- <key>orient</key>
- <value>Qt.Horizontal</value>
- <type>enum</type>
- <hide>#if $widget() == "slider" then 'part' else 'all'#</hide>
- <option>
- <name>Horizontal</name>
- <key>Qt.Horizontal</key>
- <opt>scalepos:BottomScale</opt>
- <opt>minfcn:setMinimumWidth</opt>
- </option>
- <option>
- <name>Vertical</name>
- <key>Qt.Vertical</key>
- <opt>scalepos:LeftScale</opt>
- <opt>minfcn:setMinimumHeight</opt>
- </option>
- </param>
-
- <param>
- <name>Minimum Length</name>
- <key>min_len</key>
- <value>200</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <!-- from min_len <hide>#if $widget().split('_')[0] in ("slider", "counter") then 'part' else 'all'#</hide>-->
-
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
-
- <check>$start &lt;= $value &lt;= $stop</check>
- <check>$start &lt; $stop</check>
-
- <doc>
- This block creates a variable with a slider. \
- Leave the label blank to use the variable id as the label. \
- The value must be a real number. \
- The value must be between the start and the stop.
-
- The GUI hint can be used to position the widget within the application. \
- The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
- Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_sink_x.block.yml b/gr-qtgui/grc/qtgui_sink_x.block.yml
new file mode 100644
index 0000000000..30194a7a57
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_sink_x.block.yml
@@ -0,0 +1,148 @@
+id: qtgui_sink_x
+label: QT GUI Sink
+flags: has_python
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ default: complex
+ options: [complex, float]
+ option_attributes:
+ fcn: [sink_c, sink_f]
+ hide: part
+- id: name
+ label: Name
+ dtype: string
+ default: '""'
+- id: fftsize
+ label: FFT Size
+ dtype: int
+ default: '1024'
+- id: wintype
+ label: Window Type
+ dtype: int
+ default: firdes.WIN_BLACKMAN_hARRIS
+ options: [firdes.WIN_BLACKMAN_hARRIS, firdes.WIN_HAMMING, firdes.WIN_HANN, firdes.WIN_BLACKMAN,
+ firdes.WIN_RECTANGULAR, firdes.WIN_KAISER]
+ option_labels: [Blackman-harris, Hamming, Hann, Blackman, Rectangular, Kaiser]
+ hide: part
+- id: fc
+ label: Center Frequency (Hz)
+ dtype: real
+ default: '0'
+- id: bw
+ label: Bandwidth (Hz)
+ dtype: real
+ default: samp_rate
+- id: rate
+ label: Update Rate
+ dtype: real
+ default: '10'
+- id: showrf
+ label: Show RF Freq
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: plotfreq
+ label: Plot Frequency
+ dtype: bool
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: part
+- id: plotwaterfall
+ label: Plot Waterfall
+ dtype: bool
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: part
+- id: plottime
+ label: Plot Time
+ dtype: bool
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: part
+- id: plotconst
+ label: Plot Const
+ dtype: bool
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: part
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+- id: freqchangevar
+ label: Clicked freq variable
+ dtype: raw
+ default: None
+ hide: part
+- id: showports
+ label: Show Msg Ports
+ dtype: enum
+ default: 'True'
+ options: ['False', 'True']
+ option_labels: ['Yes', 'No']
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ multiplicity: ${ num_inputs }
+- domain: message
+ id: freq
+ optional: true
+ hide: ${ showports }
+
+outputs:
+- domain: message
+ id: freq
+ optional: true
+ hide: ${ showports }
+
+templates:
+ imports: |-
+ from PyQt5 import Qt
+ from gnuradio import qtgui
+ from gnuradio.filter import firdes
+ import sip
+ callbacks:
+ - set_frequency_range(${fc}, ${bw})
+ make: |-
+ <%
+ win = 'self._%s_win'%id
+ %>\
+ qtgui.${type.fcn}(
+ ${fftsize}, #fftsize
+ ${wintype}, #wintype
+ ${fc}, #fc
+ ${bw}, #bw
+ ${name}, #name
+ ${plotfreq}, #plotfreq
+ ${plotwaterfall}, #plotwaterfall
+ ${plottime}, #plottime
+ ${plotconst} #plotconst
+ )
+ self.${id}.set_update_time(1.0/${rate})
+ ${win} = sip.wrapinstance(self.${id}.pyqwidget(), Qt.QWidget)
+
+ self.${id}.enable_rf_freq($showrf)
+
+ % if freqchangevar is not None:
+ def ${id}_callback(p, num):
+ if num == 1 or num == 2:
+ self.set_${freqchangevar}(p.x())
+
+ Qt.QObject.connect(self._${id}_win, Qt.SIGNAL("plotPointSelected(QPointF, int)"), ${id}_callback)
+ % endif
+
+documentation: |-
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_sink_x.xml b/gr-qtgui/grc/qtgui_sink_x.xml
deleted file mode 100644
index a9bc469cd2..0000000000
--- a/gr-qtgui/grc/qtgui_sink_x.xml
+++ /dev/null
@@ -1,232 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##QT GUI Sink
-###################################################
- -->
-<block>
- <name>QT GUI Sink</name>
- <key>qtgui_sink_x</key>
- <import>from PyQt5 import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>from gnuradio.filter import firdes</import>
- <import>import sip</import>
- <make>#set $win = 'self._%s_win'%$id
-qtgui.$(type.fcn)(
- $fftsize, \#fftsize
- $wintype, \#wintype
- $fc, \#fc
- $bw, \#bw
- $name, \#name
- $plotfreq, \#plotfreq
- $plotwaterfall, \#plotwaterfall
- $plottime, \#plottime
- $plotconst, \#plotconst
-)
-self.$(id).set_update_time(1.0/$rate)
-self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
-$(gui_hint()($win))
-
-self.$(id).enable_rf_freq($showrf)
-
-#if $freqchangevar() is not None
-def $(id)_callback(p, num):
- if num == 1 or num == 2: self.set_$(freqchangevar)(p.x())
-
-Qt.QObject.connect(self._$(id)_win, Qt.SIGNAL("plotPointSelected(QPointF, int)"), $(id)_callback )
-#end if
-
- </make>
- <callback>set_frequency_range($fc, $bw)</callback>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <value>complex</value>
- <type>enum</type>
- <option><name>Complex</name><key>complex</key><opt>fcn:sink_c</opt></option>
- <option><name>Float</name><key>float</key><opt>fcn:sink_f</opt></option>
- </param>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>""</value>
- <type>string</type>
- <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>FFT Size</name>
- <key>fftsize</key>
- <value>1024</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Window Type</name>
- <key>wintype</key>
- <value>firdes.WIN_BLACKMAN_hARRIS</value>
- <type>int</type>
- <hide>part</hide>
- <option>
- <name>Blackman-harris</name>
- <key>firdes.WIN_BLACKMAN_hARRIS</key>
- </option>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- </param>
-
- <param>
- <name>Center Frequency (Hz)</name>
- <key>fc</key>
- <value>0</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Bandwidth (Hz)</name>
- <key>bw</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Update Rate</name>
- <key>rate</key>
- <value>10</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Show RF Freq</name>
- <key>showrf</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Plot Frequency</name>
- <key>plotfreq</key>
- <value>True</value>
- <type>bool</type>
- <hide>part</hide>
- <option><name>On</name><key>True</key></option>
- <option><name>Off</name><key>False</key></option>
- </param>
-
- <param>
- <name>Plot Waterfall</name>
- <key>plotwaterfall</key>
- <value>True</value>
- <type>bool</type>
- <hide>part</hide>
- <option><name>On</name><key>True</key></option>
- <option><name>Off</name><key>False</key></option>
- </param>
-
- <param>
- <name>Plot Time</name>
- <key>plottime</key>
- <value>True</value>
- <type>bool</type>
- <hide>part</hide>
- <option><name>On</name><key>True</key></option>
- <option><name>Off</name><key>False</key></option>
- </param>
-
- <param>
- <name>Plot Const</name>
- <key>plotconst</key>
- <value>True</value>
- <type>bool</type>
- <hide>part</hide>
- <option><name>On</name><key>True</key></option>
- <option><name>Off</name><key>False</key></option>
- </param>
-
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Clicked freq variable</name>
- <key>freqchangevar</key>
- <value>None</value>
- <type>raw</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Show Msg Ports</name>
- <key>showports</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>False</key>
- </option>
- <option>
- <name>No</name>
- <key>True</key>
- </option>
- </param>
-
- <sink>
- <name>in</name>
- <type>$type</type>
- <nports>$num_inputs</nports>
- </sink>
-
- <sink>
- <name>freq</name>
- <type>message</type>
- <optional>1</optional>
- <hide>$showports</hide>
- </sink>
-
- <source>
- <name>freq</name>
- <type>message</type>
- <optional>1</optional>
- <hide>$showports</hide>
- </source>
-
- <doc>
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_tab_widget.block.yml b/gr-qtgui/grc/qtgui_tab_widget.block.yml
new file mode 100644
index 0000000000..12a902eac2
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_tab_widget.block.yml
@@ -0,0 +1,141 @@
+id: qtgui_tab_widget
+label: QT GUI Tab Widget
+
+parameters:
+- id: num_tabs
+ label: Num Tabs
+ dtype: enum
+ default: '1'
+ options: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13',
+ '14', '15', '16', '17', '18', '19', '20']
+- id: label0
+ label: Label 0
+ dtype: string
+ default: Tab 0
+ hide: ${ ('none' if int(num_tabs) > 0 else 'all') }
+- id: label1
+ label: Label 1
+ dtype: string
+ default: Tab 1
+ hide: ${ ('none' if int(num_tabs) > 1 else 'all') }
+- id: label2
+ label: Label 2
+ dtype: string
+ default: Tab 2
+ hide: ${ ('none' if int(num_tabs) > 2 else 'all') }
+- id: label3
+ label: Label 3
+ dtype: string
+ default: Tab 3
+ hide: ${ ('none' if int(num_tabs) > 3 else 'all') }
+- id: label4
+ label: Label 4
+ dtype: string
+ default: Tab 4
+ hide: ${ ('none' if int(num_tabs) > 4 else 'all') }
+- id: label5
+ label: Label 5
+ dtype: string
+ default: Tab 5
+ hide: ${ ('none' if int(num_tabs) > 5 else 'all') }
+- id: label6
+ label: Label 6
+ dtype: string
+ default: Tab 6
+ hide: ${ ('none' if int(num_tabs) > 6 else 'all') }
+- id: label7
+ label: Label 7
+ dtype: string
+ default: Tab 7
+ hide: ${ ('none' if int(num_tabs) > 7 else 'all') }
+- id: label8
+ label: Label 8
+ dtype: string
+ default: Tab 8
+ hide: ${ ('none' if int(num_tabs) > 8 else 'all') }
+- id: label9
+ label: Label 9
+ dtype: string
+ default: Tab 9
+ hide: ${ ('none' if int(num_tabs) > 9 else 'all') }
+- id: label10
+ label: Label 10
+ dtype: string
+ default: Tab 10
+ hide: ${ ('none' if int(num_tabs) > 10 else 'all') }
+- id: label11
+ label: Label 11
+ dtype: string
+ default: Tab 11
+ hide: ${ ('none' if int(num_tabs) > 11 else 'all') }
+- id: label12
+ label: Label 12
+ dtype: string
+ default: Tab 12
+ hide: ${ ('none' if int(num_tabs) > 12 else 'all') }
+- id: label13
+ label: Label 13
+ dtype: string
+ default: Tab 13
+ hide: ${ ('none' if int(num_tabs) > 13 else 'all') }
+- id: label14
+ label: Label 14
+ dtype: string
+ default: Tab 14
+ hide: ${ ('none' if int(num_tabs) > 14 else 'all') }
+- id: label15
+ label: Label 15
+ dtype: string
+ default: Tab 15
+ hide: ${ ('none' if int(num_tabs) > 15 else 'all') }
+- id: label16
+ label: Label 16
+ dtype: string
+ default: Tab 16
+ hide: ${ ('none' if int(num_tabs) > 16 else 'all') }
+- id: label17
+ label: Label 17
+ dtype: string
+ default: Tab 17
+ hide: ${ ('none' if int(num_tabs) > 17 else 'all') }
+- id: label18
+ label: Label 18
+ dtype: string
+ default: Tab 18
+ hide: ${ ('none' if int(num_tabs) > 18 else 'all') }
+- id: label19
+ label: Label 19
+ dtype: string
+ default: Tab 19
+ hide: ${ ('none' if int(num_tabs) > 19 else 'all') }
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+
+templates:
+ imports: from PyQt5 import Qt
+ make: |-
+ <%
+ win = 'self._%s_win'%id
+ all_labels = [label0, label1, label2, label3, label4,
+ label5, label6, label7, label8, label9,
+ label10, label11, label12, label13, label14,
+ label15, label16, label17, label18, label19][:int(num_tabs())]
+ %>\
+ Qt.QTabWidget()
+ % for i, label in enumrate(all_labels):
+ self.${id}_widget_${i} = Qt.QWidget()
+ self.${id}_layout_${i} = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.${id}_widget_${i})
+ self.${id}_grid_layout_${i} = Qt.QGridLayout()
+ self.${id}_layout_${i}.addLayout(self.${id}_grid_layout_${i})
+ ${win}.addTab(self.${id}_widget_${i}, ${label})
+ % endfor
+ ${gui_hint() % win}
+
+documentation: |-
+ This block creates a tabbed widget to organize other widgets. The ID of this block can be used as the tab_id in the GUI hints of other widgets.
+
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_tab_widget.xml b/gr-qtgui/grc/qtgui_tab_widget.xml
deleted file mode 100644
index 805542cc8b..0000000000
--- a/gr-qtgui/grc/qtgui_tab_widget.xml
+++ /dev/null
@@ -1,206 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##WX GUI Notebook
-###################################################
- -->
-<block>
- <name>QT GUI Tab Widget</name>
- <key>qtgui_tab_widget</key>
- <import>from PyQt5 import Qt</import>
- <make>#set $win = 'self.%s'%$id
-Qt.QTabWidget()
-#set $all_labels = [$label0, $label1, $label2, $label3, $label4,
- $label5, $label6, $label7, $label8, $label9,
- $label10, $label11, $label12, $label13, $label14,
- $label15, $label16, $label17, $label18, $label19][:int($num_tabs())]
-#for i, label in enumerate($all_labels)
-self.$(id)_widget_$(i) = Qt.QWidget()
-self.$(id)_layout_$(i) = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.$(id)_widget_$(i))
-self.$(id)_grid_layout_$(i) = Qt.QGridLayout()
-self.$(id)_layout_$(i).addLayout(self.$(id)_grid_layout_$(i))
-$(win).addTab(self.$(id)_widget_$(i), $label)
-#end for
-$(gui_hint()($win))</make>
- <param>
- <name>Num Tabs</name>
- <key>num_tabs</key>
- <value>1</value>
- <type>enum</type>
- <option><name>1</name><key>1</key></option>
- <option><name>2</name><key>2</key></option>
- <option><name>3</name><key>3</key></option>
- <option><name>4</name><key>4</key></option>
- <option><name>5</name><key>5</key></option>
- <option><name>6</name><key>6</key></option>
- <option><name>7</name><key>7</key></option>
- <option><name>8</name><key>8</key></option>
- <option><name>9</name><key>9</key></option>
- <option><name>10</name><key>10</key></option>
- <option><name>11</name><key>11</key></option>
- <option><name>12</name><key>12</key></option>
- <option><name>13</name><key>13</key></option>
- <option><name>14</name><key>14</key></option>
- <option><name>15</name><key>15</key></option>
- <option><name>16</name><key>16</key></option>
- <option><name>17</name><key>17</key></option>
- <option><name>18</name><key>18</key></option>
- <option><name>19</name><key>19</key></option>
- <option><name>20</name><key>20</key></option>
- </param>
- <param>
- <name>Label 0</name>
- <key>label0</key>
- <value>Tab 0</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 0 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 1</name>
- <key>label1</key>
- <value>Tab 1</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 1 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 2</name>
- <key>label2</key>
- <value>Tab 2</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 2 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 3</name>
- <key>label3</key>
- <value>Tab 3</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 3 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 4</name>
- <key>label4</key>
- <value>Tab 4</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 4 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 5</name>
- <key>label5</key>
- <value>Tab 5</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 5 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 6</name>
- <key>label6</key>
- <value>Tab 6</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 6 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 7</name>
- <key>label7</key>
- <value>Tab 7</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 7 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 8</name>
- <key>label8</key>
- <value>Tab 8</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 8 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 9</name>
- <key>label9</key>
- <value>Tab 9</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 9 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 10</name>
- <key>label10</key>
- <value>Tab 10</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 10 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 11</name>
- <key>label11</key>
- <value>Tab 11</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 11 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 12</name>
- <key>label12</key>
- <value>Tab 12</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 12 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 13</name>
- <key>label13</key>
- <value>Tab 13</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 13 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 14</name>
- <key>label14</key>
- <value>Tab 14</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 14 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 15</name>
- <key>label15</key>
- <value>Tab 15</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 15 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 16</name>
- <key>label16</key>
- <value>Tab 16</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 16 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 17</name>
- <key>label17</key>
- <value>Tab 17</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 17 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 18</name>
- <key>label18</key>
- <value>Tab 18</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 18 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Label 19</name>
- <key>label19</key>
- <value>Tab 19</value>
- <type>string</type>
- <hide>#if int($num_tabs()) > 19 then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
- <doc>
-This block creates a tabbed widget to organize other widgets. \
-The ID of this block can be used as the tab_id in the GUI hints of other widgets.
-
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_time_raster_x.block.yml b/gr-qtgui/grc/qtgui_time_raster_x.block.yml
new file mode 100644
index 0000000000..6ffaf1934a
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_time_raster_x.block.yml
@@ -0,0 +1,266 @@
+id: qtgui_time_raster_sink_x
+label: QT GUI Time Raster Sink
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ default: complex
+ options: [byte, float, msg_byte, msg_float]
+ option_labels: [Byte, Float, Byte Message, Float Message]
+ option_attributes:
+ fcn: [time_raster_sink_b, time_raster_sink_f, time_raster_sink_b, time_raster_sink_f]
+ t: [byte, float, message, message]
+ hide: part
+- id: name
+ label: Name
+ dtype: string
+ default: '""'
+ hide: ${ ('none' if len(name) > 0 else 'part') }
+- id: samp_rate
+ label: Sample Rate
+ dtype: real
+ default: samp_rate
+- id: nrows
+ label: Num. Rows
+ dtype: int
+ hide: ${ ('all' if type.startswith('msg') else 'none') }
+- id: ncols
+ label: Num. Cols
+ dtype: int
+- id: grid
+ label: Grid
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: zmin
+ label: Int. min
+ dtype: real
+ default: '-1'
+ hide: part
+- id: zmax
+ label: Int. max
+ dtype: real
+ default: '1'
+ hide: part
+- id: mult
+ label: Multiplier
+ dtype: real_vector
+ default: '[]'
+ hide: part
+- id: offset
+ label: Offset
+ dtype: real_vector
+ default: '[]'
+ hide: part
+- id: nconnections
+ label: Number of Inputs
+ dtype: int
+ default: '1'
+ hide: ${ ('all' if type.startswith('msg') else 'part') }
+- id: update_time
+ label: Update Period
+ dtype: real
+ default: '0.10'
+ hide: part
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+- id: axislabels
+ label: Axis Labels
+ category: Config
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: label1
+ label: Line 1 Label
+ category: Config
+ dtype: string
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: color1
+ label: Line 1 Color
+ category: Config
+ dtype: enum
+ options: ['0', '1', '2', '3', '5', '6']
+ option_labels: [Multi Color, White Hot, Black Hot, Incandescent, Sunset, Cool]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: alpha1
+ label: Line 1 Alpha
+ category: Config
+ dtype: float
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: label2
+ label: Line 2 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: color2
+ label: Line 2 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: alpha2
+ label: Line 2 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: label3
+ label: Line 3 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: color3
+ label: Line 3 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: alpha3
+ label: Line 3 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: label4
+ label: Line 4 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: color4
+ label: Line 4 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: alpha4
+ label: Line 4 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: label5
+ label: Line 5 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: color5
+ label: Line 5 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: alpha5
+ label: Line 5 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: label6
+ label: Line 6 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: color6
+ label: Line 6 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: alpha6
+ label: Line 6 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: label7
+ label: Line 7 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: color7
+ label: Line 7 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: alpha7
+ label: Line 7 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: label8
+ label: Line 8 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: color8
+ label: Line 8 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: alpha8
+ label: Line 8 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: label9
+ label: Line 9 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: color9
+ label: Line 9 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: alpha9
+ label: Line 9 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: label10
+ label: Line 10 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: color10
+ label: Line 10 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: alpha10
+ label: Line 10 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+
+inputs:
+- domain: stream
+ dtype: ${ type.t }
+ multiplicity: ${ (0 if type.startswith('msg') else nconnections) }
+ optional: true
+
+templates:
+ imports: |-
+ from PyQt5 import Qt
+ from gnuradio import qtgui
+ import sip
+ callbacks:
+ - set_num_rows(${nrows})
+ - set_num_cols(${ncols})
+ - set_multiplier(${mult})
+ - set_offset(${offset})
+ - set_update_time(${update_time})
+ - set_title(${which}, ${title})
+ - set_color(${which}, ${color})
+ make: |-
+ <%
+ win = 'self._%s_win'%id
+ %>\
+ qtgui.${type.fcn}(
+ ${samp_rate},
+ ${nrows},
+ ${ncols},
+ ${mult},
+ ${offset},
+ ${name},
+ ${0 if type.startswith('msg') else nconnections}
+ )
+
+ self.${id}.set_update_time(${update_time})
+ self.${id}.set_intensity_range(${zmin}, ${zmax})
+ self.${id}.enable_grid(${grid})
+ self.${id}.enable_axis_labels(${axislabels})
+
+ labels = [${label1}, ${label2}, ${label3}, ${label4}, ${label5},
+ ${label6}, ${label7}, ${label8}, ${label9}, ${label10}]
+ colors = [${color1}, ${color2}, ${color3}, ${color4}, ${color5},
+ ${color6}, ${color7}, ${color8}, ${color9}, ${color10}]
+ alphas = [${alpha1}, ${alpha2}, ${alpha3}, ${alpha4}, ${alpha5},
+ ${alpha6}, ${alpha7}, ${alpha8}, ${alpha9}, ${alpha10}]
+
+ for i in range(${1 if type.startswith('msg') else nconnections}):
+ if len(labels[i]) == 0:
+ self.${id}.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.${id}.set_line_label(i, labels[i])
+ self.${id}.set_color_map(i, colors[i])
+ self.${id}.set_line_alpha(i, alphas[i])
+
+ ${win} = sip.wrapinstance(self.${id}.pyqwidget(), Qt.QWidget)
+ ${gui_hint() % win}
+
+documentation: |-
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_time_raster_x.xml b/gr-qtgui/grc/qtgui_time_raster_x.xml
deleted file mode 100644
index d458f67eb9..0000000000
--- a/gr-qtgui/grc/qtgui_time_raster_x.xml
+++ /dev/null
@@ -1,466 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##QT GUI Sink
-###################################################
- -->
-<block>
- <name>QT GUI Time Raster Sink</name>
- <key>qtgui_time_raster_sink_x</key>
- <import>from PyQt5 import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>import sip</import>
- <make>#set $win = 'self._%s_win'%$id
-qtgui.$(type.fcn)(
- $samp_rate,
- $nrows,
- $ncols,
- $mult,
- $offset,
- $name,
- #if $type.t == 'message' then 0 else $nconnections#,
- )
-
-self.$(id).set_update_time($update_time)
-self.$(id).set_intensity_range($zmin, $zmax)
-self.$(id).enable_grid($grid)
-self.$(id).enable_axis_labels($axislabels)
-
-labels = [$label1, $label2, $label3, $label4, $label5,
- $label6, $label7, $label8, $label9, $label10]
-colors = [$color1, $color2, $color3, $color4, $color5,
- $color6, $color7, $color8, $color9, $color10]
-alphas = [$alpha1, $alpha2, $alpha3, $alpha4, $alpha5,
- $alpha6, $alpha7, $alpha8, $alpha9, $alpha10]
-for i in xrange(#if $type.t == 'message' then 1 else $nconnections#):
- if len(labels[i]) == 0:
- self.$(id).set_line_label(i, "Data {0}".format(i))
- else:
- self.$(id).set_line_label(i, labels[i])
- self.$(id).set_color_map(i, colors[i])
- self.$(id).set_line_alpha(i, alphas[i])
-
-self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
-$(gui_hint()($win))</make>
- <callback>set_num_rows($nrows)</callback>
- <callback>set_num_cols($ncols)</callback>
- <callback>set_multiplier($mult)</callback>
- <callback>set_offset($offset)</callback>
- <callback>set_update_time($update_time)</callback>
- <callback>set_title($which, $title)</callback>
- <callback>set_color($which, $color)</callback>
-
- <param_tab_order>
- <tab>General</tab>
- <tab>Config</tab>
- </param_tab_order>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <value>complex</value>
- <type>enum</type>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:time_raster_sink_b</opt>
- <opt>t:byte</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:time_raster_sink_f</opt>
- <opt>t:float</opt>
- </option>
- <option>
- <name>Byte Message</name>
- <key>msg_byte</key>
- <opt>fcn:time_raster_sink_b</opt>
- <opt>t:message</opt>
- </option>
- <option>
- <name>Float Message</name>
- <key>msg_float</key>
- <opt>fcn:time_raster_sink_f</opt>
- <opt>t:message</opt>
- </option>
- </param>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>""</value>
- <type>string</type>
- <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>Sample Rate</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Num. Rows</name>
- <key>nrows</key>
- <type>int</type>
- <hide>#if $type.t == 'message' then 'all' else 'none'#</hide>
- </param>
-
- <param>
- <name>Num. Cols</name>
- <key>ncols</key>
- <type>int</type>
- </param>
-
- <param>
- <name>Grid</name>
- <key>grid</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Int. min</name>
- <key>zmin</key>
- <value>-1</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Int. max</name>
- <key>zmax</key>
- <value>1</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Multiplier</name>
- <key>mult</key>
- <value>[]</value>
- <type>real_vector</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Offset</name>
- <key>offset</key>
- <value>[]</value>
- <type>real_vector</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Number of Inputs</name>
- <key>nconnections</key>
- <value>1</value>
- <type>int</type>
- <hide>#if $type.t == 'message' then 'all' else 'part'#</hide>
- </param>
-
- <param>
- <name>Update Period</name>
- <key>update_time</key>
- <value>0.10</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Axis Labels</name>
- <key>axislabels</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Label</name>
- <key>label1</key>
- <type>string</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Color</name>
- <key>color1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Multi Color</name>
- <key>0</key>
- </option>
- <option>
- <name>White Hot</name>
- <key>1</key>
- </option>
- <option>
- <name>Black Hot</name>
- <key>2</key>
- </option>
- <option>
- <name>Incandescent</name>
- <key>3</key>
- </option>
- <option>
- <name>Sunset</name>
- <key>5</key>
- </option>
- <option>
- <name>Cool</name>
- <key>6</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Alpha</name>
- <key>alpha1</key>
- <value>1.0</value>
- <type>float</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 2 Label</name>
- <key>label2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 2 Color</name>
- <key>color2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 2 Alpha</name>
- <key>alpha2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 3 Label</name>
- <key>label3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 3 Color</name>
- <key>color3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 3 Alpha</name>
- <key>alpha3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 4 Label</name>
- <key>label4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 4 Color</name>
- <key>color4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 4 Alpha</name>
- <key>alpha4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 5 Label</name>
- <key>label5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 5 Color</name>
- <key>color5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 5 Alpha</name>
- <key>alpha5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 6 Label</name>
- <key>label6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 6 Color</name>
- <key>color6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 6 Alpha</name>
- <key>alpha6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 7 Label</name>
- <key>label7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 7 Color</name>
- <key>color7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 7 Alpha</name>
- <key>alpha7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 8 Label</name>
- <key>label8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 8 Color</name>
- <key>color8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 8 Alpha</name>
- <key>alpha8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 9 Label</name>
- <key>label9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 9 Color</name>
- <key>color9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 9 Alpha</name>
- <key>alpha9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 10 Label</name>
- <key>label10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 10 Color</name>
- <key>color10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 10 Alpha</name>
- <key>alpha10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
-
- <sink>
- <name>in</name>
- <type>$type.t</type>
- <nports>#if $type.t == 'message' then 0 else $nconnections#</nports>
- <optional>1</optional>
- </sink>
-
- <doc>
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_time_sink_x.block.yml b/gr-qtgui/grc/qtgui_time_sink_x.block.yml
new file mode 100644
index 0000000000..4da2d3ec66
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_time_sink_x.block.yml
@@ -0,0 +1,559 @@
+id: qtgui_time_sink_x
+label: QT GUI Time Sink
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ default: complex
+ options: [complex, float, msg_complex, msg_float]
+ option_labels: [Complex, Float, Complex Message, Float Message]
+ option_attributes:
+ fcn: [time_sink_c, time_sink_f, time_sink_c, time_sink_f]
+ t: [complex, float, message, message]
+ hide: part
+- id: name
+ label: Name
+ dtype: string
+ default: '""'
+ hide: ${ ('none' if len(name) > 0 else 'part') }
+- id: ylabel
+ label: Y Axis Label
+ dtype: string
+ default: Amplitude
+ hide: part
+- id: yunit
+ label: Y Axis Unit
+ dtype: string
+ default: '""'
+ hide: part
+- id: size
+ label: Number of Points
+ dtype: int
+ default: '1024'
+ hide: ${ ('all' if type.startswith('msg') else 'none') }
+- id: srate
+ label: Sample Rate
+ dtype: float
+ default: samp_rate
+- id: grid
+ label: Grid
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: autoscale
+ label: Autoscale
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: ymin
+ label: Y min
+ dtype: float
+ default: '-1'
+ hide: part
+- id: ymax
+ label: Y max
+ dtype: float
+ default: '1'
+ hide: part
+- id: nconnections
+ label: Number of Inputs
+ dtype: int
+ default: '1'
+ hide: ${ ('all' if type.startswith('msg') else 'part') }
+- id: update_time
+ label: Update Period
+ dtype: float
+ default: '0.10'
+ hide: part
+- id: entags
+ label: Disp. Tags
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: ${ ('all' if type.startswith('msg') else 'part') }
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+- id: tr_mode
+ label: Trigger Mode
+ category: Trigger
+ dtype: enum
+ default: qtgui.TRIG_MODE_FREE
+ options: [qtgui.TRIG_MODE_FREE, qtgui.TRIG_MODE_AUTO, qtgui.TRIG_MODE_NORM, qtgui.TRIG_MODE_TAG]
+ option_labels: [Free, Auto, Normal, Tag]
+ hide: part
+- id: tr_slope
+ label: Trigger Slope
+ category: Trigger
+ dtype: enum
+ default: qtgui.TRIG_MODE_POS
+ options: [qtgui.TRIG_SLOPE_POS, qtgui.TRIG_SLOPE_NEG]
+ option_labels: [Positive, Negative]
+ hide: part
+- id: tr_level
+ label: Trigger Level
+ category: Trigger
+ dtype: float
+ default: '0.0'
+ hide: part
+- id: tr_delay
+ label: Trigger Delay
+ category: Trigger
+ dtype: float
+ default: '0'
+ hide: part
+- id: tr_chan
+ label: Trigger Channel
+ category: Trigger
+ dtype: int
+ default: '0'
+ hide: part
+- id: tr_tag
+ label: Trigger Tag Key
+ category: Trigger
+ dtype: string
+ default: '""'
+ hide: part
+- id: ctrlpanel
+ label: Control Panel
+ category: Config
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: legend
+ label: Legend
+ category: Config
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: axislabels
+ label: Axis Labels
+ category: Config
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: label1
+ label: Line 1 Label
+ category: Config
+ dtype: string
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: width1
+ label: Line 1 Width
+ category: Config
+ dtype: int
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: color1
+ label: Line 1 Color
+ category: Config
+ dtype: enum
+ options: ['"blue"', '"red"', '"green"', '"black"', '"cyan"', '"magenta"', '"yellow"',
+ '"dark red"', '"dark green"', '"Dark Blue"']
+ option_labels: [Blue, Red, Green, Black, Cyan, Magenta, Yellow, Dark Red, Dark
+ Green, Dark Blue]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: style1
+ label: Line 1 Style
+ category: Config
+ dtype: enum
+ options: ['1', '2', '3', '4', '5', '0']
+ option_labels: [Solid, Dash, Dots, Dash-Dot, Dash-Dot-Dot, None]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: marker1
+ label: Line 1 Marker
+ category: Config
+ dtype: enum
+ options: ['-1', '0', '1', '2', '3', '4', '6', '7', '8', '9']
+ option_labels: [None, Circle, Rectangle, Diamond, Triangle, Down Triangle, Left
+ Triangle, Right Triangle, Cross, X-Cross]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: alpha1
+ label: Line 1 Alpha
+ category: Config
+ dtype: float
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: label2
+ label: Line 2 Label
+ dtype: ''
+ hide: ${ ('part' if (int(nconnections) >= 2 or (type == "complex" and int(nconnections)
+ >= 1) or (type == "msg_complex")) and (not type == "msg_float") else 'all')
+ }
+- id: width2
+ label: Line 2 Width
+ dtype: ''
+ hide: ${ ('part' if (int(nconnections) >= 2 or (type == "complex" and int(nconnections)
+ >= 1) or (type == "msg_complex")) and (not type == "msg_float") else 'all')
+ }
+- id: color2
+ label: Line 2 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if (int(nconnections) >= 2 or (type == "complex" and int(nconnections)
+ >= 1) or (type == "msg_complex")) and (not type == "msg_float") else 'all')
+ }
+- id: style2
+ label: Line 2 Style
+ dtype: ''
+ hide: ${ ('part' if (int(nconnections) >= 2 or (type == "complex" and int(nconnections)
+ >= 1) or (type == "msg_complex")) and (not type == "msg_float") else 'all')
+ }
+- id: marker2
+ label: Line 2 Marker
+ dtype: ''
+ hide: ${ ('part' if (int(nconnections) >= 2 or (type == "complex" and int(nconnections)
+ >= 1) or (type == "msg_complex")) and (not type == "msg_float") else 'all')
+ }
+- id: alpha2
+ label: Line 2 Alpha
+ dtype: ''
+ hide: ${ ('part' if (int(nconnections) >= 2 or (type == "complex" and int(nconnections)
+ >= 1) or (type == "msg_complex")) and (not type == "msg_float") else 'all')
+ }
+- id: label3
+ label: Line 3 Label
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 3 or (type == "complex" and int(nconnections)
+ >= 2)) and not type.t == "message") else 'all') }
+- id: width3
+ label: Line 3 Width
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 3 or (type == "complex" and int(nconnections)
+ >= 2)) and not type.t == "message") else 'all') }
+- id: color3
+ label: Line 3 Color
+ dtype: ''
+ default: '"green"'
+ hide: ${ ('part' if ((int(nconnections) >= 3 or (type == "complex" and int(nconnections)
+ >= 2)) and not type.t == "message") else 'all') }
+- id: style3
+ label: Line 3 Style
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 3 or (type == "complex" and int(nconnections)
+ >= 2)) and not type.t == "message") else 'all') }
+- id: marker3
+ label: Line 3 Marker
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 3 or (type == "complex" and int(nconnections)
+ >= 2)) and not type.t == "message") else 'all') }
+- id: alpha3
+ label: Line 3 Alpha
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 3 or (type == "complex" and int(nconnections)
+ >= 2)) and not type.t == "message") else 'all') }
+- id: label4
+ label: Line 4 Label
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 4 or (type == "complex" and int(nconnections)
+ >= 2)) and not type.t == "message") else 'all') }
+- id: width4
+ label: Line 4 Width
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 4 or (type == "complex" and int(nconnections)
+ >= 2)) and not type.t == "message") else 'all') }
+- id: color4
+ label: Line 4 Color
+ dtype: ''
+ default: '"black"'
+ hide: ${ ('part' if ((int(nconnections) >= 4 or (type == "complex" and int(nconnections)
+ >= 2)) and not type.t == "message") else 'all') }
+- id: style4
+ label: Line 4 Style
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 4 or (type == "complex" and int(nconnections)
+ >= 2)) and not type.t == "message") else 'all') }
+- id: marker4
+ label: Line 4 Marker
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 4 or (type == "complex" and int(nconnections)
+ >= 2)) and not type.t == "message") else 'all') }
+- id: alpha4
+ label: Line 4 Alpha
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 4 or (type == "complex" and int(nconnections)
+ >= 2)) and not type.t == "message") else 'all') }
+- id: label5
+ label: Line 5 Label
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 5 or (type == "complex" and int(nconnections)
+ >= 3)) and not type.t == "message") else 'all') }
+- id: width5
+ label: Line 5 Width
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 5 or (type == "complex" and int(nconnections)
+ >= 3)) and not type.t == "message") else 'all') }
+- id: color5
+ label: Line 5 Color
+ dtype: ''
+ default: '"cyan"'
+ hide: ${ ('part' if ((int(nconnections) >= 5 or (type == "complex" and int(nconnections)
+ >= 3)) and not type.t == "message") else 'all') }
+- id: style5
+ label: Line 5 Style
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 5 or (type == "complex" and int(nconnections)
+ >= 3)) and not type.t == "message") else 'all') }
+- id: marker5
+ label: Line 5 Marker
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 5 or (type == "complex" and int(nconnections)
+ >= 3)) and not type.t == "message") else 'all') }
+- id: alpha5
+ label: Line 5 Alpha
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 5 or (type == "complex" and int(nconnections)
+ >= 3)) and not type.t == "message") else 'all') }
+- id: label6
+ label: Line 6 Label
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 6 or (type == "complex" and int(nconnections)
+ >= 3)) and not type.t == "message") else 'all') }
+- id: width6
+ label: Line 6 Width
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 6 or (type == "complex" and int(nconnections)
+ >= 3)) and not type.t == "message") else 'all') }
+- id: color6
+ label: Line 6 Color
+ dtype: ''
+ default: '"magenta"'
+ hide: ${ ('part' if ((int(nconnections) >= 6 or (type == "complex" and int(nconnections)
+ >= 3)) and not type.t == "message") else 'all') }
+- id: style6
+ label: Line 6 Style
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 6 or (type == "complex" and int(nconnections)
+ >= 3)) and not type.t == "message") else 'all') }
+- id: marker6
+ label: Line 6 Marker
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 6 or (type == "complex" and int(nconnections)
+ >= 3)) and not type.t == "message") else 'all') }
+- id: alpha6
+ label: Line 6 Alpha
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 6 or (type == "complex" and int(nconnections)
+ >= 3)) and not type.t == "message") else 'all') }
+- id: label7
+ label: Line 7 Label
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 7 or (type == "complex" and int(nconnections)
+ >= 4)) and not type.t == "message") else 'all') }
+- id: width7
+ label: Line 7 Width
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 7 or (type == "complex" and int(nconnections)
+ >= 4)) and not type.t == "message") else 'all') }
+- id: color7
+ label: Line 7 Color
+ dtype: ''
+ default: '"yellow"'
+ hide: ${ ('part' if ((int(nconnections) >= 7 or (type == "complex" and int(nconnections)
+ >= 4)) and not type.t == "message") else 'all') }
+- id: style7
+ label: Line 7 Style
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 7 or (type == "complex" and int(nconnections)
+ >= 4)) and not type.t == "message") else 'all') }
+- id: marker7
+ label: Line 7 Marker
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 7 or (type == "complex" and int(nconnections)
+ >= 4)) and not type.t == "message") else 'all') }
+- id: alpha7
+ label: Line 7 Alpha
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 7 or (type == "complex" and int(nconnections)
+ >= 4)) and not type.t == "message") else 'all') }
+- id: label8
+ label: Line 8 Label
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 8 or (type == "complex" and int(nconnections)
+ >= 4)) and not type.t == "message") else 'all') }
+- id: width8
+ label: Line 8 Width
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 8 or (type == "complex" and int(nconnections)
+ >= 4)) and not type.t == "message") else 'all') }
+- id: color8
+ label: Line 8 Color
+ dtype: ''
+ default: '"dark red"'
+ hide: ${ ('part' if ((int(nconnections) >= 8 or (type == "complex" and int(nconnections)
+ >= 4)) and not type.t == "message") else 'all') }
+- id: style8
+ label: Line 8 Style
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 8 or (type == "complex" and int(nconnections)
+ >= 4)) and not type.t == "message") else 'all') }
+- id: marker8
+ label: Line 8 Marker
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 8 or (type == "complex" and int(nconnections)
+ >= 4)) and not type.t == "message") else 'all') }
+- id: alpha8
+ label: Line 8 Alpha
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 8 or (type == "complex" and int(nconnections)
+ >= 4)) and not type.t == "message") else 'all') }
+- id: label9
+ label: Line 9 Label
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 9 or (type == "complex" and int(nconnections)
+ >= 5)) and not type.t == "message") else 'all') }
+- id: width9
+ label: Line 9 Width
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 9 or (type == "complex" and int(nconnections)
+ >= 5)) and not type.t == "message") else 'all') }
+- id: color9
+ label: Line 9 Color
+ dtype: ''
+ default: '"dark green"'
+ hide: ${ ('part' if ((int(nconnections) >= 9 or (type == "complex" and int(nconnections)
+ >= 5)) and not type.t == "message") else 'all') }
+- id: style9
+ label: Line 9 Style
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 9 or (type == "complex" and int(nconnections)
+ >= 5)) and not type.t == "message") else 'all') }
+- id: marker9
+ label: Line 9 Marker
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 9 or (type == "complex" and int(nconnections)
+ >= 5)) and not type.t == "message") else 'all') }
+- id: alpha9
+ label: Line 9 Alpha
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 9 or (type == "complex" and int(nconnections)
+ >= 5)) and not type.t == "message") else 'all') }
+- id: label10
+ label: Line 10 Label
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 10 or (type == "complex" and int(nconnections)
+ >= 5)) and not type.t == "message") else 'all') }
+- id: width10
+ label: Line 10 Width
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 10 or (type == "complex" and int(nconnections)
+ >= 5)) and not type.t == "message") else 'all') }
+- id: color10
+ label: Line 10 Color
+ dtype: ''
+ default: '"dark blue"'
+ hide: ${ ('part' if ((int(nconnections) >= 10 or (type == "complex" and int(nconnections)
+ >= 5)) and not type.t == "message") else 'all') }
+- id: style10
+ label: Line 10 Style
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 10 or (type == "complex" and int(nconnections)
+ >= 5)) and not type.t == "message") else 'all') }
+- id: marker10
+ label: Line 10 Marker
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 10 or (type == "complex" and int(nconnections)
+ >= 5)) and not type.t == "message") else 'all') }
+- id: alpha10
+ label: Line 10 Alpha
+ dtype: ''
+ hide: ${ ('part' if ((int(nconnections) >= 10 or (type == "complex" and int(nconnections)
+ >= 5)) and not type.t == "message") else 'all') }
+
+asserts:
+- ${nconnections <= (5 if type == 'complex' else 10)}
+
+inputs:
+- domain: stream
+ dtype: ${ type.t }
+ multiplicity: ${ (0 if type.startswith('msg') else nconnections) }
+ optional: true
+
+templates:
+ imports: |-
+ from PyQt5 import Qt
+ from gnuradio import qtgui
+ from gnuradio.filter import firdes
+ import sip
+ callbacks:
+ - set_time_domain_axis(${min}, ${max})
+ - set_update_time(${update_time})
+ - set_title(${which}, ${title})
+ - set_color(${which}, ${color})
+ - set_y_axis(${ymin}, ${ymax})
+ - set_samp_rate(${srate})
+ - self.${id}.set_trigger_mode(${tr_mode}, ${tr_slope}, ${tr_level}, ${tr_delay},
+ ${tr_chan}, ${tr_tag})
+ make: |-
+ <%
+ win = 'self._%s_win'%id
+ %>\
+ qtgui.${type.fcn}(
+ ${size}, #size
+ ${srate}, #samp_rate
+ ${name}, #name
+ ${0 if type.startswith('msg') else nconnections} #number of inputs
+ )
+ self.${id}.set_update_time(${update_time})
+ self.${id}.set_y_axis(${ymin}, ${ymax})
+
+ self.${id}.set_y_label(${ylabel}, ${yunit})
+
+ self.${id}.enable_tags(-1, ${entags})
+ self.${id}.set_trigger_mode(${tr_mode}, ${tr_slope}, ${tr_level}, ${tr_delay}, ${tr_chan}, ${tr_tag})
+ self.${id}.enable_autoscale(${autoscale})
+ self.${id}.enable_grid(${grid})
+ self.${id}.enable_axis_labels(${axislabels})
+ self.${id}.enable_control_panel(${ctrlpanel})
+
+ if not ${legend}:
+ self.${id}.disable_legend()
+
+ labels = [${label1}, ${label2}, ${label3}, ${label4}, ${label5},
+ ${label6}, ${label7}, ${label8}, ${label9}, ${label10}]
+ widths = [${width1}, ${width2}, ${width3}, ${width4}, ${width5},
+ ${width6}, ${width7}, ${width8}, ${width9}, ${width10}]
+ colors = [${color1}, ${color2}, ${color3}, ${color4}, ${color5},
+ ${color6}, ${color7}, ${color8}, ${color9}, ${color10}]
+ alphas = [${alpha1}, ${alpha2}, ${alpha3}, ${alpha4}, ${alpha5},
+ ${alpha6}, ${alpha7}, ${alpha8}, ${alpha9}, ${alpha10}]
+ styles = [${style1}, ${style2}, ${style3}, ${style4}, ${style5},
+ ${style6}, ${style7}, ${style8}, ${style9}, ${style10}]
+ markers = [${marker1}, ${marker2}, ${marker3}, ${marker4}, ${marker5},
+ ${marker6}, ${marker7}, ${marker8}, ${marker9}, ${marker10}]
+
+
+ % if type.endswith('complex'):
+ for i in range(${2 if type.startswith('msg') else 2*nconnections}):
+ if len(labels[i]) == 0:
+ if (i % 2 == 0):
+ self.${id}.set_line_label(i, "Re{{Data {0}}}".format(i/2))
+ else:
+ self.${id}.set_line_label(i, "Im{{Data {0}}}".format(i/2))
+ else:
+ self.${id}.set_line_label(i, labels[i])
+ self.${id].set_line_width(i, widths[i])
+ self.${id].set_line_color(i, colors[i])
+ self.${id].set_line_style(i, styles[i])
+ self.${id].set_line_marker(i, markers[i])
+ self.${id].set_line_alpha(i, alphas[i])
+ % endif
+
+ ${win} = sip.wrapinstance(self.${id}.pyqwidget(), Qt.QWidget)
+ ${gui_hint() % win}
+
+documentation: |-
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_time_sink_x.xml b/gr-qtgui/grc/qtgui_time_sink_x.xml
deleted file mode 100644
index d4347950ea..0000000000
--- a/gr-qtgui/grc/qtgui_time_sink_x.xml
+++ /dev/null
@@ -1,948 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##QT GUI Sink
-###################################################
- -->
-<block>
- <name>QT GUI Time Sink</name>
- <key>qtgui_time_sink_x</key>
- <import>from PyQt5 import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>from gnuradio.filter import firdes</import>
- <import>import sip</import>
- <make>#set $win = 'self._%s_win'%$id
-qtgui.$(type.fcn)(
- $size, \#size
- $srate, \#samp_rate
- $name, \#name
- #if $type.t == 'message' then 0 else $nconnections# \#number of inputs
-)
-self.$(id).set_update_time($update_time)
-self.$(id).set_y_axis($ymin, $ymax)
-
-self.$(id).set_y_label($ylabel, $yunit)
-
-self.$(id).enable_tags(-1, $entags)
-self.$(id).set_trigger_mode($tr_mode, $tr_slope, $tr_level, $tr_delay, $tr_chan, $tr_tag)
-self.$(id).enable_autoscale($autoscale)
-self.$(id).enable_grid($grid)
-self.$(id).enable_axis_labels($axislabels)
-self.$(id).enable_control_panel($ctrlpanel)
-
-if not $legend:
- self.$(id).disable_legend()
-
-labels = [$label1, $label2, $label3, $label4, $label5,
- $label6, $label7, $label8, $label9, $label10]
-widths = [$width1, $width2, $width3, $width4, $width5,
- $width6, $width7, $width8, $width9, $width10]
-colors = [$color1, $color2, $color3, $color4, $color5,
- $color6, $color7, $color8, $color9, $color10]
-styles = [$style1, $style2, $style3, $style4, $style5,
- $style6, $style7, $style8, $style9, $style10]
-markers = [$marker1, $marker2, $marker3, $marker4, $marker5,
- $marker6, $marker7, $marker8, $marker9, $marker10]
-alphas = [$alpha1, $alpha2, $alpha3, $alpha4, $alpha5,
- $alpha6, $alpha7, $alpha8, $alpha9, $alpha10]
-
-#if ($type() == 'complex' or $type() == 'msg_complex')
-for i in xrange(#if $type.t == 'message' then 2 else 2*$nconnections()#):
- if len(labels[i]) == 0:
- if(i % 2 == 0):
- self.$(id).set_line_label(i, "Re{{Data {0}}}".format(i/2))
- else:
- self.$(id).set_line_label(i, "Im{{Data {0}}}".format(i/2))
- else:
- self.$(id).set_line_label(i, labels[i])
- self.$(id).set_line_width(i, widths[i])
- self.$(id).set_line_color(i, colors[i])
- self.$(id).set_line_style(i, styles[i])
- self.$(id).set_line_marker(i, markers[i])
- self.$(id).set_line_alpha(i, alphas[i])
-#else
-for i in xrange(#if $type.t == 'message' then 1 else $nconnections#):
- if len(labels[i]) == 0:
- self.$(id).set_line_label(i, "Data {0}".format(i))
- else:
- self.$(id).set_line_label(i, labels[i])
- self.$(id).set_line_width(i, widths[i])
- self.$(id).set_line_color(i, colors[i])
- self.$(id).set_line_style(i, styles[i])
- self.$(id).set_line_marker(i, markers[i])
- self.$(id).set_line_alpha(i, alphas[i])
-#end if
-
-self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
-$(gui_hint()($win))</make>
- <callback>set_time_domain_axis($min, $max)</callback>
- <callback>set_update_time($update_time)</callback>
- <callback>set_title($which, $title)</callback>
- <callback>set_color($which, $color)</callback>
- <callback>set_y_axis($ymin, $ymax)</callback>
- <callback>set_samp_rate($srate)</callback>
- <callback>self.$(id).set_trigger_mode($tr_mode, $tr_slope, $tr_level, $tr_delay, $tr_chan, $tr_tag)</callback>
-
- <param_tab_order>
- <tab>General</tab>
- <tab>Trigger</tab>
- <tab>Config</tab>
- </param_tab_order>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <value>complex</value>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:time_sink_c</opt>
- <opt>t:complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:time_sink_f</opt>
- <opt>t:float</opt>
- </option>
- <option>
- <name>Complex Message</name>
- <key>msg_complex</key>
- <opt>fcn:time_sink_c</opt>
- <opt>t:message</opt>
- </option>
- <option>
- <name>Float Message</name>
- <key>msg_float</key>
- <opt>fcn:time_sink_f</opt>
- <opt>t:message</opt>
- </option>
- </param>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>""</value>
- <type>string</type>
- <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>Y Axis Label</name>
- <key>ylabel</key>
- <value>Amplitude</value>
- <type>string</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Y Axis Unit</name>
- <key>yunit</key>
- <value>""</value>
- <type>string</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Number of Points</name>
- <key>size</key>
- <value>1024</value>
- <type>int</type>
- <hide>#if $type.t == 'message' then 'all' else 'none'#</hide>
- </param>
-
- <param>
- <name>Sample Rate</name>
- <key>srate</key>
- <value>samp_rate</value>
- <type>float</type>
- </param>
-
- <param>
- <name>Grid</name>
- <key>grid</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Autoscale</name>
- <key>autoscale</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Y min</name>
- <key>ymin</key>
- <value>-1</value>
- <type>float</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Y max</name>
- <key>ymax</key>
- <value>1</value>
- <type>float</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Number of Inputs</name>
- <key>nconnections</key>
- <value>1</value>
- <type>int</type>
- <hide>#if $type.t == 'message' then 'all' else 'part'#</hide>
- </param>
-
- <param>
- <name>Update Period</name>
- <key>update_time</key>
- <value>0.10</value>
- <type>float</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Disp. Tags</name>
- <key>entags</key>
- <value>True</value>
- <type>enum</type>
- <hide>#if $type.t == 'message' then 'all' else 'part'#</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
-
-
- <param>
- <name>Trigger Mode</name>
- <key>tr_mode</key>
- <value>qtgui.TRIG_MODE_FREE</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Free</name>
- <key>qtgui.TRIG_MODE_FREE</key>
- </option>
- <option>
- <name>Auto</name>
- <key>qtgui.TRIG_MODE_AUTO</key>
- </option>
- <option>
- <name>Normal</name>
- <key>qtgui.TRIG_MODE_NORM</key>
- </option>
- <option>
- <name>Tag</name>
- <key>qtgui.TRIG_MODE_TAG</key>
- </option>
- <tab>Trigger</tab>
- </param>
-
- <param>
- <name>Trigger Slope</name>
- <key>tr_slope</key>
- <value>qtgui.TRIG_MODE_POS</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Positive</name>
- <key>qtgui.TRIG_SLOPE_POS</key>
- </option>
- <option>
- <name>Negative</name>
- <key>qtgui.TRIG_SLOPE_NEG</key>
- </option>
- <tab>Trigger</tab>
- </param>
-
- <param>
- <name>Trigger Level</name>
- <key>tr_level</key>
- <value>0.0</value>
- <type>float</type>
- <hide>part</hide>
- <tab>Trigger</tab>
- </param>
-
- <param>
- <name>Trigger Delay</name>
- <key>tr_delay</key>
- <value>0</value>
- <type>float</type>
- <hide>part</hide>
- <tab>Trigger</tab>
- </param>
-
- <param>
- <name>Trigger Channel</name>
- <key>tr_chan</key>
- <value>0</value>
- <type>int</type>
- <hide>part</hide>
- <tab>Trigger</tab>
- </param>
-
- <param>
- <name>Trigger Tag Key</name>
- <key>tr_tag</key>
- <value>""</value>
- <type>string</type>
- <hide>part</hide>
- <tab>Trigger</tab>
- </param>
-
-
-
- <!-- Begin Config Tab items -->
-
- <param>
- <name>Control Panel</name>
- <key>ctrlpanel</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Legend</name>
- <key>legend</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Axis Labels</name>
- <key>axislabels</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Label</name>
- <key>label1</key>
- <type>string</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Width</name>
- <key>width1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Color</name>
- <key>color1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Blue</name>
- <key>"blue"</key>
- </option>
- <option>
- <name>Red</name>
- <key>"red"</key>
- </option>
- <option>
- <name>Green</name>
- <key>"green"</key>
- </option>
- <option>
- <name>Black</name>
- <key>"black"</key>
- </option>
- <option>
- <name>Cyan</name>
- <key>"cyan"</key>
- </option>
- <option>
- <name>Magenta</name>
- <key>"magenta"</key>
- </option>
- <option>
- <name>Yellow</name>
- <key>"yellow"</key>
- </option>
- <option>
- <name>Dark Red</name>
- <key>"dark red"</key>
- </option>
- <option>
- <name>Dark Green</name>
- <key>"dark green"</key>
- </option>
- <option>
- <name>Dark Blue</name>
- <key>"Dark Blue"</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Style</name>
- <key>style1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Solid</name>
- <key>1</key>
- </option>
- <option>
- <name>Dash</name>
- <key>2</key>
- </option>
- <option>
- <name>Dots</name>
- <key>3</key>
- </option>
- <option>
- <name>Dash-Dot</name>
- <key>4</key>
- </option>
- <option>
- <name>Dash-Dot-Dot</name>
- <key>5</key>
- </option>
- <option>
- <name>None</name>
- <key>0</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Marker</name>
- <key>marker1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>None</name>
- <key>-1</key>
- </option>
- <option>
- <name>Circle</name>
- <key>0</key>
- </option>
- <option>
- <name>Rectangle</name>
- <key>1</key>
- </option>
- <option>
- <name>Diamond</name>
- <key>2</key>
- </option>
- <option>
- <name>Triangle</name>
- <key>3</key>
- </option>
- <option>
- <name>Down Triangle</name>
- <key>4</key>
- </option>
- <option>
- <name>Left Triangle</name>
- <key>6</key>
- </option>
- <option>
- <name>Right Triangle</name>
- <key>7</key>
- </option>
- <option>
- <name>Cross</name>
- <key>8</key>
- </option>
- <option>
- <name>X-Cross</name>
- <key>9</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Alpha</name>
- <key>alpha1</key>
- <value>1.0</value>
- <type>float</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 2 Label</name>
- <key>label2</key>
- <hide>#if (int($nconnections()) >= 2 or ($type() == "complex" and int($nconnections()) >= 1) or ($type() == "msg_complex")) and (not $type() == "msg_float") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 2 Width</name>
- <key>width2</key>
- <hide>#if (int($nconnections()) >= 2 or ($type() == "complex" and int($nconnections()) >= 1) or ($type() == "msg_complex")) and (not $type() == "msg_float") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 2 Color</name>
- <key>color2</key>
- <value>"red"</value>
- <hide>#if (int($nconnections()) >= 2 or ($type() == "complex" and int($nconnections()) >= 1) or ($type() == "msg_complex")) and (not $type() == "msg_float") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 2 Style</name>
- <key>style2</key>
- <hide>#if (int($nconnections()) >= 2 or ($type() == "complex" and int($nconnections()) >= 1) or ($type() == "msg_complex")) and (not $type() == "msg_float") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 2 Marker</name>
- <key>marker2</key>
- <hide>#if (int($nconnections()) >= 2 or ($type() == "complex" and int($nconnections()) >= 1) or ($type() == "msg_complex")) and (not $type() == "msg_float") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 2 Alpha</name>
- <key>alpha2</key>
- <hide>#if (int($nconnections()) >= 2 or ($type() == "complex" and int($nconnections()) >= 1) or ($type() == "msg_complex")) and (not $type() == "msg_float") then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 3 Label</name>
- <key>label3</key>
- <hide>#if ((int($nconnections()) >= 3 or ($type() == "complex" and int($nconnections()) >= 2)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 3 Width</name>
- <key>width3</key>
- <hide>#if ((int($nconnections()) >= 3 or ($type() == "complex" and int($nconnections()) >= 2)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 3 Color</name>
- <key>color3</key>
- <value>"green"</value>
- <hide>#if ((int($nconnections()) >= 3 or ($type() == "complex" and int($nconnections()) >= 2)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 3 Style</name>
- <key>style3</key>
- <hide>#if ((int($nconnections()) >= 3 or ($type() == "complex" and int($nconnections()) >= 2)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 3 Marker</name>
- <key>marker3</key>
- <hide>#if ((int($nconnections()) >= 3 or ($type() == "complex" and int($nconnections()) >= 2)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 3 Alpha</name>
- <key>alpha3</key>
- <hide>#if ((int($nconnections()) >= 3 or ($type() == "complex" and int($nconnections()) >= 2)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 4 Label</name>
- <key>label4</key>
- <hide>#if ((int($nconnections()) >= 4 or ($type() == "complex" and int($nconnections()) >= 2)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 4 Width</name>
- <key>width4</key>
- <hide>#if ((int($nconnections()) >= 4 or ($type() == "complex" and int($nconnections()) >= 2)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 4 Color</name>
- <key>color4</key>
- <value>"black"</value>
- <hide>#if ((int($nconnections()) >= 4 or ($type() == "complex" and int($nconnections()) >= 2)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 4 Style</name>
- <key>style4</key>
- <hide>#if ((int($nconnections()) >= 4 or ($type() == "complex" and int($nconnections()) >= 2)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 4 Marker</name>
- <key>marker4</key>
- <hide>#if ((int($nconnections()) >= 4 or ($type() == "complex" and int($nconnections()) >= 2)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 4 Alpha</name>
- <key>alpha4</key>
- <hide>#if ((int($nconnections()) >= 4 or ($type() == "complex" and int($nconnections()) >= 2)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 5 Label</name>
- <key>label5</key>
- <hide>#if ((int($nconnections()) >= 5 or ($type() == "complex" and int($nconnections()) >= 3)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 5 Width</name>
- <key>width5</key>
- <hide>#if ((int($nconnections()) >= 5 or ($type() == "complex" and int($nconnections()) >= 3)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 5 Color</name>
- <key>color5</key>
- <value>"cyan"</value>
- <hide>#if ((int($nconnections()) >= 5 or ($type() == "complex" and int($nconnections()) >= 3)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 5 Style</name>
- <key>style5</key>
- <hide>#if ((int($nconnections()) >= 5 or ($type() == "complex" and int($nconnections()) >= 3)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 5 Marker</name>
- <key>marker5</key>
- <hide>#if ((int($nconnections()) >= 5 or ($type() == "complex" and int($nconnections()) >= 3)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 5 Alpha</name>
- <key>alpha5</key>
- <hide>#if ((int($nconnections()) >= 5 or ($type() == "complex" and int($nconnections()) >= 3)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 6 Label</name>
- <key>label6</key>
- <hide>#if ((int($nconnections()) >= 6 or ($type() == "complex" and int($nconnections()) >= 3)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 6 Width</name>
- <key>width6</key>
- <hide>#if ((int($nconnections()) >= 6 or ($type() == "complex" and int($nconnections()) >= 3)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 6 Color</name>
- <key>color6</key>
- <value>"magenta"</value>
- <hide>#if ((int($nconnections()) >= 6 or ($type() == "complex" and int($nconnections()) >= 3)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 6 Style</name>
- <key>style6</key>
- <hide>#if ((int($nconnections()) >= 6 or ($type() == "complex" and int($nconnections()) >= 3)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 6 Marker</name>
- <key>marker6</key>
- <hide>#if ((int($nconnections()) >= 6 or ($type() == "complex" and int($nconnections()) >= 3)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 6 Alpha</name>
- <key>alpha6</key>
- <hide>#if ((int($nconnections()) >= 6 or ($type() == "complex" and int($nconnections()) >= 3)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 7 Label</name>
- <key>label7</key>
- <hide>#if ((int($nconnections()) >= 7 or ($type() == "complex" and int($nconnections()) >= 4)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 7 Width</name>
- <key>width7</key>
- <hide>#if ((int($nconnections()) >= 7 or ($type() == "complex" and int($nconnections()) >= 4)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 7 Color</name>
- <key>color7</key>
- <value>"yellow"</value>
- <hide>#if ((int($nconnections()) >= 7 or ($type() == "complex" and int($nconnections()) >= 4)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 7 Style</name>
- <key>style7</key>
- <hide>#if ((int($nconnections()) >= 7 or ($type() == "complex" and int($nconnections()) >= 4)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 7 Marker</name>
- <key>marker7</key>
- <hide>#if ((int($nconnections()) >= 7 or ($type() == "complex" and int($nconnections()) >= 4)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 7 Alpha</name>
- <key>alpha7</key>
- <hide>#if ((int($nconnections()) >= 7 or ($type() == "complex" and int($nconnections()) >= 4)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 8 Label</name>
- <key>label8</key>
- <hide>#if ((int($nconnections()) >= 8 or ($type() == "complex" and int($nconnections()) >= 4)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 8 Width</name>
- <key>width8</key>
- <hide>#if ((int($nconnections()) >= 8 or ($type() == "complex" and int($nconnections()) >= 4)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 8 Color</name>
- <key>color8</key>
- <value>"dark red"</value>
- <hide>#if ((int($nconnections()) >= 8 or ($type() == "complex" and int($nconnections()) >= 4)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 8 Style</name>
- <key>style8</key>
- <hide>#if ((int($nconnections()) >= 8 or ($type() == "complex" and int($nconnections()) >= 4)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 8 Marker</name>
- <key>marker8</key>
- <hide>#if ((int($nconnections()) >= 8 or ($type() == "complex" and int($nconnections()) >= 4)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 8 Alpha</name>
- <key>alpha8</key>
- <hide>#if ((int($nconnections()) >= 8 or ($type() == "complex" and int($nconnections()) >= 4)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 9 Label</name>
- <key>label9</key>
- <hide>#if ((int($nconnections()) >= 9 or ($type() == "complex" and int($nconnections()) >= 5)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 9 Width</name>
- <key>width9</key>
- <hide>#if ((int($nconnections()) >= 9 or ($type() == "complex" and int($nconnections()) >= 5)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 9 Color</name>
- <key>color9</key>
- <value>"dark green"</value>
- <hide>#if ((int($nconnections()) >= 9 or ($type() == "complex" and int($nconnections()) >= 5)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 9 Style</name>
- <key>style9</key>
- <hide>#if ((int($nconnections()) >= 9 or ($type() == "complex" and int($nconnections()) >= 5)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 9 Marker</name>
- <key>marker9</key>
- <hide>#if ((int($nconnections()) >= 9 or ($type() == "complex" and int($nconnections()) >= 5)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 9 Alpha</name>
- <key>alpha9</key>
- <hide>#if ((int($nconnections()) >= 9 or ($type() == "complex" and int($nconnections()) >= 5)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 10 Label</name>
- <key>label10</key>
- <hide>#if ((int($nconnections()) >= 10 or ($type() == "complex" and int($nconnections()) >= 5)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 10 Width</name>
- <key>width10</key>
- <hide>#if ((int($nconnections()) >= 10 or ($type() == "complex" and int($nconnections()) >= 5)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 10 Color</name>
- <key>color10</key>
- <value>"dark blue"</value>
- <hide>#if ((int($nconnections()) >= 10 or ($type() == "complex" and int($nconnections()) >= 5)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>style1</base_key>
- <name>Line 10 Style</name>
- <key>style10</key>
- <hide>#if ((int($nconnections()) >= 10 or ($type() == "complex" and int($nconnections()) >= 5)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>marker1</base_key>
- <name>Line 10 Marker</name>
- <key>marker10</key>
- <hide>#if ((int($nconnections()) >= 10 or ($type() == "complex" and int($nconnections()) >= 5)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 10 Alpha</name>
- <key>alpha10</key>
- <hide>#if ((int($nconnections()) >= 10 or ($type() == "complex" and int($nconnections()) >= 5)) and not $type.t == "message") then 'part' else 'all'#</hide>
- </param>
-
- <check>$nconnections &lt;= #if $type() == "complex" then 5 else 10#</check>
-
- <sink>
- <name>in</name>
- <type>$type.t</type>
- <nports>#if $type.t == 'message' then 0 else $nconnections#</nports>
- <optional>1</optional>
- </sink>
-
- <doc>
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_vector_sink_f.block.yml b/gr-qtgui/grc/qtgui_vector_sink_f.block.yml
new file mode 100644
index 0000000000..d2fb1a7d5d
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_vector_sink_f.block.yml
@@ -0,0 +1,352 @@
+id: qtgui_vector_sink_f
+label: QT GUI Vector Sink
+
+parameters:
+- id: name
+ label: Name
+ dtype: string
+ default: '""'
+ hide: ${ ('none' if len(name) > 0 else 'part') }
+- id: vlen
+ label: Vector Size
+ dtype: int
+ default: '1024'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: x_start
+ label: X-Axis Start Value
+ dtype: real
+ default: '0'
+- id: x_step
+ label: X-Axis Step Value
+ dtype: real
+ default: '1.0'
+- id: x_axis_label
+ label: X-Axis Label
+ dtype: string
+ default: '"x-Axis"'
+ hide: ${ ('none' if (len(x_axis_label) > 0 and x_axis_label != "x-Axis") else
+ 'part') }
+- id: y_axis_label
+ label: Y-Axis Label
+ dtype: string
+ default: '"y-Axis"'
+ hide: ${ ('none' if (len(y_axis_label) > 0 and y_axis_label != "y-Axis") else
+ 'part') }
+- id: x_units
+ label: X-Axis Units
+ dtype: string
+ default: '""'
+ hide: '''part'''
+- id: y_units
+ label: Y-Axis Units
+ dtype: string
+ default: '""'
+ hide: '''part'''
+- id: ref_level
+ label: Ref Level
+ dtype: real
+ default: '0'
+- id: grid
+ label: Grid
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: autoscale
+ label: Autoscale
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: average
+ label: Average
+ dtype: enum
+ default: 'False'
+ options: ['1.0', '0.2', '0.1', '0.05']
+ option_labels: [None, Low, Medium, High]
+ hide: part
+- id: ymin
+ label: Y min
+ dtype: real
+ default: '-140'
+ hide: part
+- id: ymax
+ label: Y max
+ dtype: real
+ default: '10'
+ hide: part
+- id: nconnections
+ label: Number of Inputs
+ dtype: int
+ default: '1'
+ hide: part
+- id: update_time
+ label: Update Period
+ dtype: real
+ default: '0.10'
+ hide: part
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+- id: showports
+ label: Show Msg Ports
+ dtype: enum
+ default: 'True'
+ options: ['False', 'True']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: label1
+ label: Line 1 Label
+ category: Config
+ dtype: string
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: width1
+ label: Line 1 Width
+ category: Config
+ dtype: int
+ default: '1'
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: color1
+ label: Line 1 Color
+ category: Config
+ dtype: enum
+ options: ['"blue"', '"red"', '"green"', '"black"', '"cyan"', '"magenta"', '"yellow"',
+ '"dark red"', '"dark green"', '"dark blue"']
+ option_labels: [Blue, Red, Green, Black, Cyan, Magenta, Yellow, Dark Red, Dark
+ Green, Dark Blue]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: alpha1
+ label: Line 1 Alpha
+ category: Config
+ dtype: float
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: label2
+ label: Line 2 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: width2
+ label: Line 2 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: color2
+ label: Line 2 Color
+ dtype: ''
+ default: '"red"'
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: alpha2
+ label: Line 2 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: label3
+ label: Line 3 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: width3
+ label: Line 3 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: color3
+ label: Line 3 Color
+ dtype: ''
+ default: '"green"'
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: alpha3
+ label: Line 3 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: label4
+ label: Line 4 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: width4
+ label: Line 4 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: color4
+ label: Line 4 Color
+ dtype: ''
+ default: '"black"'
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: alpha4
+ label: Line 4 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: label5
+ label: Line 5 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: width5
+ label: Line 5 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: color5
+ label: Line 5 Color
+ dtype: ''
+ default: '"cyan"'
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: alpha5
+ label: Line 5 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: label6
+ label: Line 6 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: width6
+ label: Line 6 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: color6
+ label: Line 6 Color
+ dtype: ''
+ default: '"magenta"'
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: alpha6
+ label: Line 6 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: label7
+ label: Line 7 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: width7
+ label: Line 7 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: color7
+ label: Line 7 Color
+ dtype: ''
+ default: '"yellow"'
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: alpha7
+ label: Line 7 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: label8
+ label: Line 8 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: width8
+ label: Line 8 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: color8
+ label: Line 8 Color
+ dtype: ''
+ default: '"dark red"'
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: alpha8
+ label: Line 8 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: label9
+ label: Line 9 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: width9
+ label: Line 9 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: color9
+ label: Line 9 Color
+ dtype: ''
+ default: '"dark green"'
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: alpha9
+ label: Line 9 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: label10
+ label: Line 10 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: width10
+ label: Line 10 Width
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: color10
+ label: Line 10 Color
+ dtype: ''
+ default: '"dark blue"'
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: alpha10
+ label: Line 10 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+
+inputs:
+- domain: stream
+ dtype: float
+ vlen: ${ vlen }
+ multiplicity: ${ nconnections }
+
+outputs:
+- domain: message
+ id: xval
+ optional: true
+ hide: ${ showports }
+
+templates:
+ imports: |-
+ from PyQt5 import Qt
+ from gnuradio import qtgui
+ import sip
+ callbacks:
+ - set_update_time(${update_time})
+ - set_title(${title})
+ - set_color(${which}, ${color})
+ - set_x_axis(${x_start}, ${x_step})
+ - set_y_axis(${ymin}, ${ymax})
+ - set_ref_level(${ref_level})
+ - set_x_axis_units(${x_units})
+ - set_y_axis_units(${y_units})
+ make: |-
+ <%
+ win = 'self._%s_win'%id
+ %>\
+ qtgui.vector_sink_f(
+ ${vlen},
+ ${x_start},
+ ${x_step},
+ ${x_axis_label},
+ ${y_axis_label},
+ ${name},
+ ${nconnections} # Number of inputs
+ )
+ self.${id}.set_update_time(${update_time})
+ self.${id}.set_y_axis(${ymin}, ${ymax})
+ self.${id}.enable_autoscale(${autoscale})
+ self.${id}.enable_grid(${grid})
+ self.${id}.set_x_axis_units(${x_units})
+ self.${id}.set_y_axis_units(${y_units})
+ self.${id}.set_ref_level(${ref_level})
+
+ labels = [${label1}, ${label2}, ${label3}, ${label4}, ${label5},
+ ${label6}, ${label7}, ${label8}, ${label9}, ${label10}]
+ widths = [${width1}, ${width2}, ${width3}, ${width4}, ${width5},
+ ${width6}, ${width7}, ${width8}, ${width9}, ${width10}]
+ colors = [${color1}, ${color2}, ${color3}, ${color4}, ${color5},
+ ${color6}, ${color7}, ${color8}, ${color9}, ${color10}]
+ alphas = [${alpha1}, ${alpha2}, ${alpha3}, ${alpha4}, ${alpha5},
+ ${alpha6}, ${alpha7}, ${alpha8}, ${alpha9}, ${alpha10}]
+
+ for i in range(${nconnections}):
+ if len(labels[i]) == 0:
+ self.${id}.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.${id}.set_line_label(i, labels[i])
+ self.${id}.set_line_width(i, widths[i])
+ self.${id}.set_line_color(i, colors[i])
+ self.${id}.set_line_alpha(i, alphas[i])
+
+ ${win} = sip.wrapinstance(self.${id}.pyqwidget(), Qt.QWidget)
+ ${gui_hint() % win}
+
+documentation: |-
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_vector_sink_f.xml b/gr-qtgui/grc/qtgui_vector_sink_f.xml
deleted file mode 100644
index 0f456323bf..0000000000
--- a/gr-qtgui/grc/qtgui_vector_sink_f.xml
+++ /dev/null
@@ -1,603 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##QT GUI Sink
-###################################################
- -->
-<block>
- <name>QT GUI Vector Sink</name>
- <key>qtgui_vector_sink_f</key>
- <import>from PyQt5 import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>import sip</import>
- <make>#set $win = 'self._%s_win'%$id
-qtgui.vector_sink_f(
- $vlen,
- $x_start,
- $x_step,
- $x_axis_label,
- $y_axis_label,
- $name,
- $nconnections \# Number of inputs
-)
-self.$(id).set_update_time($update_time)
-self.$(id).set_y_axis($ymin, $ymax)
-self.$(id).enable_autoscale($autoscale)
-self.$(id).enable_grid($grid)
-self.$(id).set_x_axis_units($x_units)
-self.$(id).set_y_axis_units($y_units)
-self.$(id).set_ref_level($ref_level)
-
-labels = [$label1, $label2, $label3, $label4, $label5,
- $label6, $label7, $label8, $label9, $label10]
-widths = [$width1, $width2, $width3, $width4, $width5,
- $width6, $width7, $width8, $width9, $width10]
-colors = [$color1, $color2, $color3, $color4, $color5,
- $color6, $color7, $color8, $color9, $color10]
-alphas = [$alpha1, $alpha2, $alpha3, $alpha4, $alpha5,
- $alpha6, $alpha7, $alpha8, $alpha9, $alpha10]
-for i in xrange($nconnections):
- if len(labels[i]) == 0:
- self.$(id).set_line_label(i, "Data {0}".format(i))
- else:
- self.$(id).set_line_label(i, labels[i])
- self.$(id).set_line_width(i, widths[i])
- self.$(id).set_line_color(i, colors[i])
- self.$(id).set_line_alpha(i, alphas[i])
-
-self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
-$(gui_hint()($win))</make>
- <callback>set_update_time($update_time)</callback>
- <callback>set_title($title)</callback>
- <callback>set_color($which, $color)</callback>
- <callback>set_x_axis($x_start, $x_step)</callback>
- <callback>set_y_axis($ymin, $ymax)</callback>
- <callback>set_ref_level($ref_level)</callback>
- <callback>set_x_axis_units($x_units)</callback>
- <callback>set_y_axis_units($y_units)</callback>
-
- <param_tab_order>
- <tab>General</tab>
- <tab>Config</tab>
- </param_tab_order>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>""</value>
- <type>string</type>
- <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>Vector Size</name>
- <key>vlen</key>
- <value>1024</value>
- <type>int</type>
- </param>
-
- <param>
- <name>X-Axis Start Value</name>
- <key>x_start</key>
- <value>0</value>
- <type>real</type>
- </param>
-
- <param>
- <name>X-Axis Step Value</name>
- <key>x_step</key>
- <value>1.0</value>
- <type>real</type>
- </param>
-
- <param>
- <name>X-Axis Label</name>
- <key>x_axis_label</key>
- <value>"x-Axis"</value>
- <type>string</type>
- <hide>#if (len($x_axis_label()) > 0 and $x_axis_label != "x-Axis") then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>Y-Axis Label</name>
- <key>y_axis_label</key>
- <value>"y-Axis"</value>
- <type>string</type>
- <hide>#if (len($y_axis_label()) > 0 and $y_axis_label != "y-Axis") then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>X-Axis Units</name>
- <key>x_units</key>
- <value>""</value>
- <type>string</type>
- <hide>'part'</hide>
- </param>
-
- <param>
- <name>Y-Axis Units</name>
- <key>y_units</key>
- <value>""</value>
- <type>string</type>
- <hide>'part'</hide>
- </param>
-
- <param>
- <name>Ref Level</name>
- <key>ref_level</key>
- <value>0</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Grid</name>
- <key>grid</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Autoscale</name>
- <key>autoscale</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Average</name>
- <key>average</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>None</name>
- <key>1.0</key>
- </option>
- <option>
- <name>Low</name>
- <key>0.2</key>
- </option>
- <option>
- <name>Medium</name>
- <key>0.1</key>
- </option>
- <option>
- <name>High</name>
- <key>0.05</key>
- </option>
- </param>
-
- <param>
- <name>Y min</name>
- <key>ymin</key>
- <value>-140</value>
- <type>real</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Y max</name>
- <key>ymax</key>
- <value>10</value>
- <type>real</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Number of Inputs</name>
- <key>nconnections</key>
- <value>1</value>
- <type>int</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Update Period</name>
- <key>update_time</key>
- <value>0.10</value>
- <type>real</type>
- <hide>part</hide>
- </param>
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Show Msg Ports</name>
- <key>showports</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>False</key>
- </option>
- <option>
- <name>No</name>
- <key>True</key>
- </option>
- </param>
-
- <param>
- <name>Line 1 Label</name>
- <key>label1</key>
- <type>string</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Width</name>
- <key>width1</key>
- <value>1</value>
- <type>int</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Color</name>
- <key>color1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Blue</name>
- <key>"blue"</key>
- </option>
- <option>
- <name>Red</name>
- <key>"red"</key>
- </option>
- <option>
- <name>Green</name>
- <key>"green"</key>
- </option>
- <option>
- <name>Black</name>
- <key>"black"</key>
- </option>
- <option>
- <name>Cyan</name>
- <key>"cyan"</key>
- </option>
- <option>
- <name>Magenta</name>
- <key>"magenta"</key>
- </option>
- <option>
- <name>Yellow</name>
- <key>"yellow"</key>
- </option>
- <option>
- <name>Dark Red</name>
- <key>"dark red"</key>
- </option>
- <option>
- <name>Dark Green</name>
- <key>"dark green"</key>
- </option>
- <option>
- <name>Dark Blue</name>
- <key>"dark blue"</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Alpha</name>
- <key>alpha1</key>
- <value>1.0</value>
- <type>float</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 2 Label</name>
- <key>label2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 2 Width</name>
- <key>width2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 2 Color</name>
- <key>color2</key>
- <value>"red"</value>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 2 Alpha</name>
- <key>alpha2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 3 Label</name>
- <key>label3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 3 Width</name>
- <key>width3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 3 Color</name>
- <key>color3</key>
- <value>"green"</value>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 3 Alpha</name>
- <key>alpha3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 4 Label</name>
- <key>label4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 4 Width</name>
- <key>width4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 4 Color</name>
- <key>color4</key>
- <value>"black"</value>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 4 Alpha</name>
- <key>alpha4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 5 Label</name>
- <key>label5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 5 Width</name>
- <key>width5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 5 Color</name>
- <key>color5</key>
- <value>"cyan"</value>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 5 Alpha</name>
- <key>alpha5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 6 Label</name>
- <key>label6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 6 Width</name>
- <key>width6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 6 Color</name>
- <key>color6</key>
- <value>"magenta"</value>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 6 Alpha</name>
- <key>alpha6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 7 Label</name>
- <key>label7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 7 Width</name>
- <key>width7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 7 Color</name>
- <key>color7</key>
- <value>"yellow"</value>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 7 Alpha</name>
- <key>alpha7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 8 Label</name>
- <key>label8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 8 Width</name>
- <key>width8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 8 Color</name>
- <key>color8</key>
- <value>"dark red"</value>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 8 Alpha</name>
- <key>alpha8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 9 Label</name>
- <key>label9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 9 Width</name>
- <key>width9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 9 Color</name>
- <key>color9</key>
- <value>"dark green"</value>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 9 Alpha</name>
- <key>alpha9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 10 Label</name>
- <key>label10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>width1</base_key>
- <name>Line 10 Width</name>
- <key>width10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 10 Color</name>
- <key>color10</key>
- <value>"dark blue"</value>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 10 Alpha</name>
- <key>alpha10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <sink>
- <name>in</name>
- <type>float</type>
- <vlen>$vlen</vlen>
- <nports>$nconnections</nports>
- </sink>
-
- <source>
- <name>xval</name>
- <type>message</type>
- <optional>1</optional>
- <hide>$showports</hide>
- </source>
-
- <doc>
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-qtgui/grc/qtgui_waterfall_sink_x.block.yml b/gr-qtgui/grc/qtgui_waterfall_sink_x.block.yml
new file mode 100644
index 0000000000..45fc6c41fd
--- /dev/null
+++ b/gr-qtgui/grc/qtgui_waterfall_sink_x.block.yml
@@ -0,0 +1,303 @@
+id: qtgui_waterfall_sink_x
+label: QT GUI Waterfall Sink
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ default: complex
+ options: [complex, float, msg_complex, msg_float]
+ option_labels: [Complex, Float, Complex Message, Float Message]
+ option_attributes:
+ fcn: [waterfall_sink_c, waterfall_sink_f, waterfall_sink_c, waterfall_sink_f]
+ t: [complex, float, message, message]
+ hide: part
+- id: name
+ label: Name
+ dtype: string
+ default: '""'
+ hide: ${ ('none' if len(name) > 0 else 'part') }
+- id: fftsize
+ label: FFT Size
+ dtype: int
+ default: '1024'
+ hide: ${ ('all' if type.startswith('msg') else 'none') }
+- id: freqhalf
+ label: Spectrum Width
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: [Full, Half]
+ hide: ${ ('part' if type == "float" or type == "msg_float" else 'all') }
+- id: wintype
+ label: Window Type
+ dtype: int
+ default: firdes.WIN_BLACKMAN_hARRIS
+ options: [firdes.WIN_BLACKMAN_hARRIS, firdes.WIN_HAMMING, firdes.WIN_HANN, firdes.WIN_BLACKMAN,
+ firdes.WIN_RECTANGULAR, firdes.WIN_KAISER, firdes.WIN_FLATTOP]
+ option_labels: [Blackman-harris, Hamming, Hann, Blackman, Rectangular, Kaiser,
+ Flat-top]
+ hide: part
+- id: fc
+ label: Center Frequency (Hz)
+ dtype: real
+ default: '0'
+- id: bw
+ label: Bandwidth (Hz)
+ dtype: real
+ default: samp_rate
+- id: int_min
+ label: Intensity Min
+ dtype: float
+ default: '-140'
+ hide: part
+- id: int_max
+ label: Intensity Max
+ dtype: float
+ default: '10'
+ hide: part
+- id: grid
+ label: Grid
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: nconnections
+ label: Number of Inputs
+ dtype: int
+ default: '1'
+ hide: ${ ('all' if type.startswith('msg') else 'part') }
+- id: update_time
+ label: Update Period
+ dtype: real
+ default: '0.10'
+ hide: part
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+- id: showports
+ label: Show Msg Ports
+ dtype: enum
+ default: 'True'
+ options: ['False', 'True']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: legend
+ label: Legend
+ category: Config
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: label1
+ label: Line 1 Label
+ category: Config
+ dtype: string
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: axislabels
+ label: Axis Labels
+ category: Config
+ dtype: enum
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+ hide: part
+- id: color1
+ label: Line 1 Color
+ category: Config
+ dtype: enum
+ options: ['0', '1', '2', '3', '5', '6']
+ option_labels: [Multi Color, White Hot, Black Hot, Incandescent, Sunset, Cool]
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: alpha1
+ label: Line 1 Alpha
+ category: Config
+ dtype: float
+ default: '1.0'
+ hide: ${ ('part' if int(nconnections) >= 1 else 'all') }
+- id: label2
+ label: Line 2 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: color2
+ label: Line 2 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: alpha2
+ label: Line 2 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 2 else 'all') }
+- id: label3
+ label: Line 3 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: color3
+ label: Line 3 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: alpha3
+ label: Line 3 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 3 else 'all') }
+- id: label4
+ label: Line 4 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: color4
+ label: Line 4 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: alpha4
+ label: Line 4 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 4 else 'all') }
+- id: label5
+ label: Line 5 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: color5
+ label: Line 5 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: alpha5
+ label: Line 5 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 5 else 'all') }
+- id: label6
+ label: Line 6 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: color6
+ label: Line 6 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: alpha6
+ label: Line 6 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 6 else 'all') }
+- id: label7
+ label: Line 7 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: color7
+ label: Line 7 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: alpha7
+ label: Line 7 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 7 else 'all') }
+- id: label8
+ label: Line 8 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: color8
+ label: Line 8 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: alpha8
+ label: Line 8 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 8 else 'all') }
+- id: label9
+ label: Line 9 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: color9
+ label: Line 9 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: alpha9
+ label: Line 9 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 9 else 'all') }
+- id: label10
+ label: Line 10 Label
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: color10
+ label: Line 10 Color
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+- id: alpha10
+ label: Line 10 Alpha
+ dtype: ''
+ hide: ${ ('part' if int(nconnections) >= 10 else 'all') }
+
+inputs:
+- domain: stream
+ dtype: ${ type.t }
+ multiplicity: ${ (0 if type.startswith('msg') else nconnections) }
+ optional: true
+- domain: message
+ id: freq
+ optional: true
+ hide: ${ showports }
+
+outputs:
+- domain: message
+ id: freq
+ optional: true
+ hide: ${ showports }
+
+templates:
+ imports: |-
+ from PyQt5 import Qt
+ from gnuradio import qtgui
+ from gnuradio.filter import firdes
+ import sip
+ callbacks:
+ - set_frequency_range(${fc}, ${bw})
+ - set_update_time(${update_time})
+ - set_title(${which}, ${title})
+ - set_color(${which}, ${color})
+ - set_intensity_range(${int_min}, ${int_max})
+ make: |-
+ <%
+ win = 'self._%s_win'%id
+ %>\
+ qtgui.${type.fcn}(
+ ${fftsize}, #size
+ ${wintype}, #wintype
+ ${fc}, #fc
+ ${bw}, #bw
+ ${name}, #name
+ ${ (0 if type.startswith('msg') else nconnections) } #number of inputs
+ )
+ self.${id}.set_update_time(${update_time})
+ self.${id}.enable_grid(${grid})
+ self.${id}.enable_axis_labels(${axislabels})
+
+ if not ${legend}:
+ self.${id}.disable_legend()
+
+ if "${type}" == "float" or "${type}" == "msg_float":
+ self.${id}.set_plot_pos_half(not ${freqhalf})
+
+ labels = [${label1}, ${label2}, ${label3}, ${label4}, ${label5},
+ ${label6}, ${label7}, ${label8}, ${label9}, ${label10}]
+ colors = [${color1}, ${color2}, ${color3}, ${color4}, ${color5},
+ ${color6}, ${color7}, ${color8}, ${color9}, ${color10}]
+ alphas = [${alpha1}, ${alpha2}, ${alpha3}, ${alpha4}, ${alpha5},
+ ${alpha6}, ${alpha7}, ${alpha8}, ${alpha9}, ${alpha10}]
+
+ for i in range(${1 if type.startswith('msg') else nconnections}):
+ if len(labels[i]) == 0:
+ self.${id}.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.${id}.set_line_label(i, labels[i])
+ self.${id}.set_color_map(i, colors[i])
+ self.${id}.set_line_alpha(i, alphas[i])
+
+ self.${id}.set_intensity_range(${int_min}, ${int_max})
+
+ ${win} = sip.wrapinstance(self.${id}.pyqwidget(), Qt.QWidget)
+ ${gui_hint() % win}
+
+documentation: |-
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/gr-qtgui/grc/qtgui_waterfall_sink_x.xml b/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
deleted file mode 100644
index a684492246..0000000000
--- a/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
+++ /dev/null
@@ -1,557 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##QT GUI Sink
-###################################################
- -->
-<block>
- <name>QT GUI Waterfall Sink</name>
- <key>qtgui_waterfall_sink_x</key>
- <import>from PyQt5 import Qt</import>
- <import>from gnuradio import qtgui</import>
- <import>from gnuradio.filter import firdes</import>
- <import>import sip</import>
- <make>#set $win = 'self._%s_win'%$id
-qtgui.$(type.fcn)(
- $fftsize, \#size
- $wintype, \#wintype
- $fc, \#fc
- $bw, \#bw
- $name, \#name
- #if $type.t == 'message' then 0 else $nconnections# \#number of inputs
-)
-self.$(id).set_update_time($update_time)
-self.$(id).enable_grid($grid)
-self.$(id).enable_axis_labels($axislabels)
-
-if not $legend:
- self.$(id).disable_legend()
-
-if "$type" == "float" or "$type" == "msg_float":
- self.$(id).set_plot_pos_half(not $freqhalf)
-
-labels = [$label1, $label2, $label3, $label4, $label5,
- $label6, $label7, $label8, $label9, $label10]
-colors = [$color1, $color2, $color3, $color4, $color5,
- $color6, $color7, $color8, $color9, $color10]
-alphas = [$alpha1, $alpha2, $alpha3, $alpha4, $alpha5,
- $alpha6, $alpha7, $alpha8, $alpha9, $alpha10]
-for i in xrange(#if $type.t == 'message' then 1 else $nconnections#):
- if len(labels[i]) == 0:
- self.$(id).set_line_label(i, "Data {0}".format(i))
- else:
- self.$(id).set_line_label(i, labels[i])
- self.$(id).set_color_map(i, colors[i])
- self.$(id).set_line_alpha(i, alphas[i])
-
-self.$(id).set_intensity_range($int_min, $int_max)
-
-self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget)
-$(gui_hint()($win))</make>
- <callback>set_frequency_range($fc, $bw)</callback>
- <callback>set_update_time($update_time)</callback>
- <callback>set_title($which, $title)</callback>
- <callback>set_color($which, $color)</callback>
- <callback>set_intensity_range($int_min, $int_max)</callback>
-
- <param_tab_order>
- <tab>General</tab>
- <tab>Config</tab>
- </param_tab_order>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <value>complex</value>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>fcn:waterfall_sink_c</opt>
- <opt>t:complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>fcn:waterfall_sink_f</opt>
- <opt>t:float</opt>
- </option>
- <option>
- <name>Complex Message</name>
- <key>msg_complex</key>
- <opt>fcn:waterfall_sink_c</opt>
- <opt>t:message</opt>
- </option>
- <option>
- <name>Float Message</name>
- <key>msg_float</key>
- <opt>fcn:waterfall_sink_f</opt>
- <opt>t:message</opt>
- </option>
- </param>
-
- <param>
- <name>Name</name>
- <key>name</key>
- <value>""</value>
- <type>string</type>
- <hide>#if len($name()) > 0 then 'none' else 'part'#</hide>
- </param>
-
- <param>
- <name>FFT Size</name>
- <key>fftsize</key>
- <value>1024</value>
- <type>int</type>
- <hide>#if $type.t == 'message' then 'all' else 'none'#</hide>
- </param>
-
- <param>
- <name>Spectrum Width</name>
- <key>freqhalf</key>
- <value>True</value>
- <type>enum</type>
- <hide>#if $type() == "float" or $type() == "msg_float" then 'part' else 'all'#</hide>
- <option>
- <name>Full</name>
- <key>True</key>
- </option>
- <option>
- <name>Half</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Window Type</name>
- <key>wintype</key>
- <value>firdes.WIN_BLACKMAN_hARRIS</value>
- <type>int</type>
- <hide>part</hide>
- <option>
- <name>Blackman-harris</name>
- <key>firdes.WIN_BLACKMAN_hARRIS</key>
- </option>
- <option>
- <name>Hamming</name>
- <key>firdes.WIN_HAMMING</key>
- </option>
- <option>
- <name>Hann</name>
- <key>firdes.WIN_HANN</key>
- </option>
- <option>
- <name>Blackman</name>
- <key>firdes.WIN_BLACKMAN</key>
- </option>
- <option>
- <name>Rectangular</name>
- <key>firdes.WIN_RECTANGULAR</key>
- </option>
- <option>
- <name>Kaiser</name>
- <key>firdes.WIN_KAISER</key>
- </option>
- <option>
- <name>Flat-top</name>
- <key>firdes.WIN_FLATTOP</key>
- </option>
- </param>
-
- <param>
- <name>Center Frequency (Hz)</name>
- <key>fc</key>
- <value>0</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Bandwidth (Hz)</name>
- <key>bw</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
-
- <param>
- <name>Intensity Min</name>
- <key>int_min</key>
- <value>-140</value>
- <type>float</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Intensity Max</name>
- <key>int_max</key>
- <value>10</value>
- <type>float</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Grid</name>
- <key>grid</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>Number of Inputs</name>
- <key>nconnections</key>
- <value>1</value>
- <type>int</type>
- <hide>#if $type.t == 'message' then 'all' else 'part'#</hide>
- </param>
-
- <param>
- <name>Update Period</name>
- <key>update_time</key>
- <value>0.10</value>
- <type>real</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
-
- <param>
- <name>Show Msg Ports</name>
- <key>showports</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>False</key>
- </option>
- <option>
- <name>No</name>
- <key>True</key>
- </option>
- </param>
-
-
- <!-- Begin Config Tab items -->
- <param>
- <name>Legend</name>
- <key>legend</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Label</name>
- <key>label1</key>
- <type>string</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Axis Labels</name>
- <key>axislabels</key>
- <value>True</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Color</name>
- <key>color1</key>
- <type>enum</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <option>
- <name>Multi Color</name>
- <key>0</key>
- </option>
- <option>
- <name>White Hot</name>
- <key>1</key>
- </option>
- <option>
- <name>Black Hot</name>
- <key>2</key>
- </option>
- <option>
- <name>Incandescent</name>
- <key>3</key>
- </option>
- <option>
- <name>Sunset</name>
- <key>5</key>
- </option>
- <option>
- <name>Cool</name>
- <key>6</key>
- </option>
- <tab>Config</tab>
- </param>
-
- <param>
- <name>Line 1 Alpha</name>
- <key>alpha1</key>
- <value>1.0</value>
- <type>float</type>
- <hide>#if int($nconnections()) >= 1 then 'part' else 'all'#</hide>
- <tab>Config</tab>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 2 Label</name>
- <key>label2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 2 Color</name>
- <key>color2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 2 Alpha</name>
- <key>alpha2</key>
- <hide>#if int($nconnections()) >= 2 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 3 Label</name>
- <key>label3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 3 Color</name>
- <key>color3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 3 Alpha</name>
- <key>alpha3</key>
- <hide>#if int($nconnections()) >= 3 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 4 Label</name>
- <key>label4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 4 Color</name>
- <key>color4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 4 Alpha</name>
- <key>alpha4</key>
- <hide>#if int($nconnections()) >= 4 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 5 Label</name>
- <key>label5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 5 Color</name>
- <key>color5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 5 Alpha</name>
- <key>alpha5</key>
- <hide>#if int($nconnections()) >= 5 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 6 Label</name>
- <key>label6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 6 Color</name>
- <key>color6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 6 Alpha</name>
- <key>alpha6</key>
- <hide>#if int($nconnections()) >= 6 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 7 Label</name>
- <key>label7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 7 Color</name>
- <key>color7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 7 Alpha</name>
- <key>alpha7</key>
- <hide>#if int($nconnections()) >= 7 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 8 Label</name>
- <key>label8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 8 Color</name>
- <key>color8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 8 Alpha</name>
- <key>alpha8</key>
- <hide>#if int($nconnections()) >= 8 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 9 Label</name>
- <key>label9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 9 Color</name>
- <key>color9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 9 Alpha</name>
- <key>alpha9</key>
- <hide>#if int($nconnections()) >= 9 then 'part' else 'all'#</hide>
- </param>
-
-
- <param>
- <base_key>label1</base_key>
- <name>Line 10 Label</name>
- <key>label10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>color1</base_key>
- <name>Line 10 Color</name>
- <key>color10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
- <param>
- <base_key>alpha1</base_key>
- <name>Line 10 Alpha</name>
- <key>alpha10</key>
- <hide>#if int($nconnections()) >= 10 then 'part' else 'all'#</hide>
- </param>
-
-
- <sink>
- <name>in</name>
- <type>$type.t</type>
- <nports>#if $type.t == 'message' then 0 else $nconnections#</nports>
- <optional>1</optional>
- </sink>
-
- <sink>
- <name>freq</name>
- <type>message</type>
- <optional>1</optional>
- <hide>$showports</hide>
- </sink>
-
- <source>
- <name>freq</name>
- <type>message</type>
- <optional>1</optional>
- <hide>$showports</hide>
- </source>
-
- <doc>
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/gr-trellis/grc/CMakeLists.txt b/gr-trellis/grc/CMakeLists.txt
index 9fbadd50d8..f727da92d4 100644
--- a/gr-trellis/grc/CMakeLists.txt
+++ b/gr-trellis/grc/CMakeLists.txt
@@ -18,18 +18,18 @@
# Boston, MA 02110-1301, USA.
install(FILES
- trellis_encoder_xx.xml
- trellis_siso_combined_f.xml
- trellis_viterbi_x.xml
- trellis_metrics_x.xml
- trellis_siso_f.xml
- trellis_permutation.xml
- trellis_viterbi_combined_xx.xml
- trellis_sccc_encoder_xx.xml
- trellis_sccc_decoder_x.xml
- trellis_sccc_decoder_combined_xx.xml
- trellis_pccc_encoder_xx.xml
- trellis_pccc_decoder_x.xml
- trellis_pccc_decoder_combined_xx.xml
+ trellis_encoder_xx.block.yml
+ trellis_siso_combined_f.block.yml
+ trellis_viterbi_x.block.yml
+ trellis_metrics_x.block.yml
+ trellis_siso_f.block.yml
+ trellis_permutation.block.yml
+ trellis_viterbi_combined_xx.block.yml
+ trellis_sccc_encoder_xx.block.yml
+ trellis_sccc_decoder_x.block.yml
+ trellis_sccc_decoder_combined_xx.block.yml
+ trellis_pccc_encoder_xx.block.yml
+ trellis_pccc_decoder_x.block.yml
+ trellis_pccc_decoder_combined_xx.block.yml
DESTINATION ${GRC_BLOCKS_DIR}
)
diff --git a/gr-trellis/grc/trellis_encoder_xx.block.yml b/gr-trellis/grc/trellis_encoder_xx.block.yml
new file mode 100644
index 0000000000..d437c16119
--- /dev/null
+++ b/gr-trellis/grc/trellis_encoder_xx.block.yml
@@ -0,0 +1,59 @@
+id: trellis_encoder_xx
+label: Trellis Encoder
+category: '[Core]/Trellis Coding'
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [bb, bs, bi, ss, si, ii]
+ option_labels: [Byte->Byte, Byte->Short, Byte->Int, Short->Short, Short->Int,
+ Int->Int]
+ option_attributes:
+ input: [byte, byte, byte, short, short, int]
+ output: [byte, short, int, short, int, int]
+ hide: part
+- id: fsm_args
+ label: FSM Args
+ dtype: raw
+- id: init_state
+ label: Initial State
+ dtype: int
+ default: '0'
+- id: blockwise
+ label: Blockwise
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['On', 'Off']
+ hide: part
+- id: blocklength
+ label: Block length
+ dtype: int
+ default: '0'
+ hide: ${ ('none' if blockwise == 'True' else 'all') }
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+asserts:
+- ${ (isinstance(eval(""" fsm_args """[1:-1], locals(),globals()), str) and open(fsm_args).close()) or True }
+
+templates:
+ imports: from gnuradio import trellis
+ make: ' trellis.encoder_${type}(trellis.fsm(${fsm_args}), ${init_state}, ${blocklength})
+ if ${blockwise} else trellis.encoder_${type}(trellis.fsm(${fsm_args}), ${init_state}) '
+ callbacks:
+ - set_FSM(trellis.fsm(${fsm_args}))
+ - set_ST(${init_state})
+ - set_K(${blocklength})
+
+documentation: |-
+ The fsm arguments are passed directly to the trellis.fsm() constructor.
+
+file_format: 1
diff --git a/gr-trellis/grc/trellis_encoder_xx.xml b/gr-trellis/grc/trellis_encoder_xx.xml
deleted file mode 100644
index ab7d5226e9..0000000000
--- a/gr-trellis/grc/trellis_encoder_xx.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Trellis Encoder
-###################################################
- -->
-
-<block>
- <name>Trellis Encoder</name>
- <key>trellis_encoder_xx</key>
- <category>[Core]/Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make> trellis.encoder_$(type)(trellis.fsm($fsm_args), $init_state, $blocklength) if $blockwise else trellis.encoder_$(type)(trellis.fsm($fsm_args), $init_state) </make>
- <callback>set_FSM(trellis.fsm($fsm_args))</callback>
- <callback>set_ST($init_state)</callback>
- <callback>set_K($blocklength)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Byte->Byte</name>
- <key>bb</key>
- <opt>input:byte</opt>
- <opt>output:byte</opt>
- </option>
- <option>
- <name>Byte->Short</name>
- <key>bs</key>
- <opt>input:byte</opt>
- <opt>output:short</opt>
- </option>
- <option>
- <name>Byte->Int</name>
- <key>bi</key>
- <opt>input:byte</opt>
- <opt>output:int</opt>
- </option>
- <option>
- <name>Short->Short</name>
- <key>ss</key>
- <opt>input:short</opt>
- <opt>output:short</opt>
- </option>
- <option>
- <name>Short->Int</name>
- <key>si</key>
- <opt>input:short</opt>
- <opt>output:int</opt>
- </option>
- <option>
- <name>Int->Int</name>
- <key>ii</key>
- <opt>input:int</opt>
- <opt>output:int</opt>
- </option>
- </param>
- <param>
- <name>FSM Args</name>
- <key>fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State</name>
- <key>init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Blockwise</name>
- <key>blockwise</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>On</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Block length</name>
- <key>blocklength</key>
- <value>0</value>
- <type>int</type>
- <hide>#if $blockwise() == 'True' then 'none' else 'all'#</hide>
- </param>
- <check>(isinstance(eval(""" $fsm_args """[1:-1], locals(),globals()), str) and open($fsm_args).close()) or True</check>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <doc>
-The fsm arguments are passed directly to the trellis.fsm() constructor.
- </doc>
-</block>
diff --git a/gr-trellis/grc/trellis_metrics_x.block.yml b/gr-trellis/grc/trellis_metrics_x.block.yml
new file mode 100644
index 0000000000..e4559ea15c
--- /dev/null
+++ b/gr-trellis/grc/trellis_metrics_x.block.yml
@@ -0,0 +1,50 @@
+id: trellis_metrics_x
+label: Trellis Metrics
+category: '[Core]/Trellis Coding'
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [c, f, i, s]
+ option_labels: [Complex, Float, Int, Short]
+ option_attributes:
+ io: [complex, float, int, short]
+ table: [complex_vector, real_vector, int_vector, int_vector]
+ hide: part
+- id: card
+ label: Output Cardinality
+ dtype: int
+- id: dim
+ label: Dimensionality
+ dtype: int
+- id: table
+ label: Constellation
+ dtype: ${ type.table }
+- id: metric_type
+ label: Metric Type
+ dtype: enum
+ options: [digital.TRELLIS_EUCLIDEAN, digital.TRELLIS_HARD_SYMBOL, digital.TRELLIS_HARD_BIT]
+ option_labels: [Euclidean, Hard Symbol, Hard Bit]
+
+inputs:
+- domain: stream
+ dtype: ${ type.io }
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import trellis, digital
+ make: trellis.metrics_${type}(${card}, ${dim}, ${table}, ${metric_type})
+ callbacks:
+ - set_O(${card})
+ - set_D(${dim})
+ - set_TYPE(${metric_type})
+ - set_TABLE(${table})
+
+documentation: |-
+ Generate metrics required for Viterbi or SISO algorithms.
+
+file_format: 1
diff --git a/gr-trellis/grc/trellis_metrics_x.xml b/gr-trellis/grc/trellis_metrics_x.xml
deleted file mode 100644
index 15e7338098..0000000000
--- a/gr-trellis/grc/trellis_metrics_x.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Trellis Metrics
-###################################################
- -->
-
-
-<block>
- <name>Trellis Metrics</name>
- <key>trellis_metrics_x</key>
- <category>[Core]/Trellis Coding</category>
- <import>from gnuradio import trellis, digital</import>
- <make>trellis.metrics_$(type)($card, $dim, $table, $metric_type)</make>
- <callback>set_O($card)</callback>
- <callback>set_D($dim)</callback>
- <callback>set_TYPE($metric_type)</callback>
- <callback>set_TABLE($table)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>c</key>
- <opt>io:complex</opt>
- <opt>table:complex_vector</opt>
- </option>
- <option>
- <name>Float</name>
- <key>f</key>
- <opt>io:float</opt>
- <opt>table:real_vector</opt>
- </option>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- <opt>table:int_vector</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- <opt>table:int_vector</opt>
- </option>
- </param>
- <param>
- <name>Output Cardinality</name>
- <key>card</key>
- <type>int</type>
- </param>
- <param>
- <name>Dimensionality</name>
- <key>dim</key>
- <type>int</type>
- </param>
- <param>
- <name>Constellation</name>
- <key>table</key>
- <type>$type.table</type>
- </param>
- <param>
- <name>Metric Type</name>
- <key>metric_type</key>
- <type>enum</type>
- <option>
- <name>Euclidean</name>
- <key>digital.TRELLIS_EUCLIDEAN</key>
- </option>
- <option>
- <name>Hard Symbol</name>
- <key>digital.TRELLIS_HARD_SYMBOL</key>
- </option>
- <option>
- <name>Hard Bit</name>
- <key>digital.TRELLIS_HARD_BIT</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>$type.io</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
- <doc>
-Generate metrics required for Viterbi or SISO algorithms.
- </doc>
-</block>
diff --git a/gr-trellis/grc/trellis_pccc_decoder_combined_xx.block.yml b/gr-trellis/grc/trellis_pccc_decoder_combined_xx.block.yml
new file mode 100644
index 0000000000..dbfe1ec31d
--- /dev/null
+++ b/gr-trellis/grc/trellis_pccc_decoder_combined_xx.block.yml
@@ -0,0 +1,102 @@
+id: trellis_pccc_decoder_combined_xx
+label: PCCC Decoder Combo
+category: '[Core]/Trellis Coding'
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [c, f]
+ option_labels: [Complex, Float]
+ option_attributes:
+ io: [complex, float]
+ table: [complex_vector, real_vector]
+ hide: part
+- id: out_type
+ label: Output Type
+ dtype: enum
+ options: [i, s, b]
+ option_labels: [Int, Short, Byte]
+ option_attributes:
+ io: [int, short, byte]
+ hide: part
+- id: o_fsm_args
+ label: FSM 1
+ dtype: raw
+- id: o_init_state
+ label: Initial State 1
+ dtype: int
+ default: '0'
+- id: o_final_state
+ label: Final State 1
+ dtype: int
+ default: '-1'
+- id: i_fsm_args
+ label: FSM 2
+ dtype: raw
+- id: i_init_state
+ label: Initial State 2
+ dtype: int
+ default: '0'
+- id: i_final_state
+ label: Final State 2
+ dtype: int
+ default: '-1'
+- id: interleaver
+ label: Interleaver
+ dtype: raw
+- id: block_size
+ label: Block Size
+ dtype: int
+- id: iterations
+ label: Iterations
+ dtype: int
+ default: '10'
+- id: dim
+ label: Dimensionality
+ dtype: int
+- id: table
+ label: Constellation
+ dtype: ${ type.table }
+- id: metric_type
+ label: Metric Type
+ dtype: enum
+ options: [digital.TRELLIS_EUCLIDEAN, digital.TRELLIS_HARD_SYMBOL, digital.TRELLIS_HARD_BIT]
+ option_labels: [Euclidean, Hard Symbol, Hard Bit]
+- id: siso_type
+ label: SISO Type
+ dtype: enum
+ options: [trellis.TRELLIS_MIN_SUM, trellis.TRELLIS_SUM_PRODUCT]
+ option_labels: [Min Sum, Sum Product]
+- id: scaling
+ label: Scaling
+ dtype: real
+ default: '1.0'
+
+inputs:
+- domain: stream
+ dtype: ${ type.io }
+
+outputs:
+- domain: stream
+ dtype: ${ out_type.io }
+
+asserts:
+- ${ (isinstance(eval(""" o_fsm_args """[1:-1], locals(),globals()), str) and open(o_fsm_args).close()) or True }
+- ${ (isinstance(eval(""" i_fsm_args """[1:-1], locals(),globals()), str) and open(i_fsm_args).close()) or True }
+
+templates:
+ imports: from gnuradio import trellis, digital
+ make: "trellis.pccc_decoder_combined_${type}${out_type}(\n trellis.fsm(${o_fsm_args}),\
+ \ ${o_init_state}, ${o_final_state},\n trellis.fsm(${i_fsm_args}), ${i_init_state},\
+ \ ${i_final_state},\n trellis.interleaver(${interleaver}),\n ${block_size},\n\
+ \ ${iterations},\n ${siso_type},\n ${dim}, ${table}, ${metric_type},\n\
+ \ ${scaling})\n "
+ callbacks:
+ - set_scaling(${scaling})
+
+documentation: |-
+ PCCC turbo Decoder combined with metric calculation.
+ The fsm arguments are passed directly to the trellis.fsm() constructor.
+
+file_format: 1
diff --git a/gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml b/gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml
deleted file mode 100644
index 7bb38db893..0000000000
--- a/gr-trellis/grc/trellis_pccc_decoder_combined_xx.xml
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## PCCC Decoder Combined
-###################################################
- -->
-
-
-<block>
- <name>PCCC Decoder Combo</name>
- <key>trellis_pccc_decoder_combined_xx</key>
- <category>[Core]/Trellis Coding</category>
- <import>from gnuradio import trellis, digital</import>
- <make>trellis.pccc_decoder_combined_$(type)$(out_type)(
- trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
- trellis.fsm($i_fsm_args), $i_init_state, $i_final_state,
- trellis.interleaver($interleaver),
- $block_size,
- $iterations,
- $siso_type,
- $dim, $table, $metric_type,
- $scaling)
- </make>
- <callback>set_scaling($scaling)</callback>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>c</key>
- <opt>io:complex</opt>
- <opt>table:complex_vector</opt>
- </option>
- <option>
- <name>Float</name>
- <key>f</key>
- <opt>io:float</opt>
- <opt>table:real_vector</opt>
- </option>
- </param>
- <param>
- <name>Output Type</name>
- <key>out_type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>b</key>
- <opt>io:byte</opt>
- </option>
- </param>
- <param>
- <name>FSM 1</name>
- <key>o_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State 1</name>
- <key>o_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State 1</name>
- <key>o_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>FSM 2</name>
- <key>i_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State 2</name>
- <key>i_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State 2</name>
- <key>i_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Interleaver</name>
- <key>interleaver</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Iterations</name>
- <key>iterations</key>
- <value>10</value>
- <type>int</type>
- </param>
- <param>
- <name>Dimensionality</name>
- <key>dim</key>
- <type>int</type>
- </param>
- <param>
- <name>Constellation</name>
- <key>table</key>
- <type>$type.table</type>
- </param>
- <param>
- <name>Metric Type</name>
- <key>metric_type</key>
- <type>enum</type>
- <option>
- <name>Euclidean</name>
- <key>digital.TRELLIS_EUCLIDEAN</key>
- </option>
- <option>
- <name>Hard Symbol</name>
- <key>digital.TRELLIS_HARD_SYMBOL</key>
- </option>
- <option>
- <name>Hard Bit</name>
- <key>digital.TRELLIS_HARD_BIT</key>
- </option>
- </param>
- <param>
- <name>SISO Type</name>
- <key>siso_type</key>
- <type>enum</type>
- <option>
- <name>Min Sum</name>
- <key>trellis.TRELLIS_MIN_SUM</key>
- </option>
- <option>
- <name>Sum Product</name>
- <key>trellis.TRELLIS_SUM_PRODUCT</key>
- </option>
- </param>
- <param>
- <name>Scaling</name>
- <key>scaling</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <check>(isinstance(eval(""" $o_fsm_args """[1:-1], locals(),globals()), str) and open($o_fsm_args).close()) or True</check>
- <check>(isinstance(eval(""" $i_fsm_args """[1:-1], locals(),globals()), str) and open($i_fsm_args).close()) or True </check>
- <sink>
- <name>in</name>
- <type>$type.io</type>
- </sink>
- <source>
- <name>out</name>
- <type>$out_type.io</type>
- </source>
- <doc>
-PCCC turbo Decoder combined with metric calculation.
-The fsm arguments are passed directly to the trellis.fsm() constructor.
- </doc>
-</block>
diff --git a/gr-trellis/grc/trellis_pccc_decoder_x.block.yml b/gr-trellis/grc/trellis_pccc_decoder_x.block.yml
new file mode 100644
index 0000000000..f49ec91a70
--- /dev/null
+++ b/gr-trellis/grc/trellis_pccc_decoder_x.block.yml
@@ -0,0 +1,75 @@
+id: trellis_pccc_decoder_x
+label: PCCC Decoder
+category: '[Core]/Trellis Coding'
+
+parameters:
+- id: out_type
+ label: Output Type
+ dtype: enum
+ options: [i, s, b]
+ option_labels: [Int, Short, Byte]
+ option_attributes:
+ io: [int, short, byte]
+ hide: part
+- id: o_fsm_args
+ label: FSM 1
+ dtype: raw
+- id: o_init_state
+ label: Initial State 1
+ dtype: int
+ default: '0'
+- id: o_final_state
+ label: Final State 1
+ dtype: int
+ default: '-1'
+- id: i_fsm_args
+ label: FSM 2
+ dtype: raw
+- id: i_init_state
+ label: Initial State 2
+ dtype: int
+ default: '0'
+- id: i_final_state
+ label: Final State 2
+ dtype: int
+ default: '-1'
+- id: interleaver
+ label: Interleaver
+ dtype: raw
+- id: block_size
+ label: Block Size
+ dtype: int
+- id: iterations
+ label: Iterations
+ dtype: int
+ default: '10'
+- id: siso_type
+ label: SISO Type
+ dtype: enum
+ options: [trellis.TRELLIS_MIN_SUM, trellis.TRELLIS_SUM_PRODUCT]
+ option_labels: [Min Sum, Sum Product]
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: ${ out_type.io }
+
+asserts:
+- ${ (isinstance(eval(""" o_fsm_args """[1:-1], locals(),globals()), str) and open(o_fsm_args).close()) or True }
+- ${ (isinstance(eval(""" i_fsm_args """[1:-1], locals(),globals()), str) and open(i_fsm_args).close()) or True }
+
+templates:
+ imports: from gnuradio import trellis
+ make: "trellis.pccc_decoder_${out_type}(\n trellis.fsm(${o_fsm_args}), ${o_init_state},\
+ \ ${o_final_state},\n trellis.fsm(${i_fsm_args}), ${i_init_state}, ${i_final_state},\n\
+ \ trellis.interleaver(${interleaver}),\n ${block_size},\n ${iterations},\n\
+ \ ${siso_type})\n "
+
+documentation: |-
+ PCCC turbo Decoder.
+ The fsm and interleaver arguments are passed directly to the trellis.fsm() and trellis.interleaver() constructors.
+
+file_format: 1
diff --git a/gr-trellis/grc/trellis_pccc_decoder_x.xml b/gr-trellis/grc/trellis_pccc_decoder_x.xml
deleted file mode 100644
index 08d1f526af..0000000000
--- a/gr-trellis/grc/trellis_pccc_decoder_x.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## PCCC Decoder
-###################################################
- -->
-
-
-<block>
- <name>PCCC Decoder</name>
- <key>trellis_pccc_decoder_x</key>
- <category>[Core]/Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.pccc_decoder_$(out_type)(
- trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
- trellis.fsm($i_fsm_args), $i_init_state, $i_final_state,
- trellis.interleaver($interleaver),
- $block_size,
- $iterations,
- $siso_type)
- </make>
- <param>
- <name>Output Type</name>
- <key>out_type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>b</key>
- <opt>io:byte</opt>
- </option>
- </param>
- <param>
- <name>FSM 1</name>
- <key>o_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State 1</name>
- <key>o_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State 1</name>
- <key>o_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>FSM 2</name>
- <key>i_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State 2</name>
- <key>i_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State 2</name>
- <key>i_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Interleaver</name>
- <key>interleaver</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Iterations</name>
- <key>iterations</key>
- <value>10</value>
- <type>int</type>
- </param>
- <param>
- <name>SISO Type</name>
- <key>siso_type</key>
- <type>enum</type>
- <option>
- <name>Min Sum</name>
- <key>trellis.TRELLIS_MIN_SUM</key>
- </option>
- <option>
- <name>Sum Product</name>
- <key>trellis.TRELLIS_SUM_PRODUCT</key>
- </option>
- </param>
- <check>(isinstance(eval(""" $o_fsm_args """[1:-1], locals(),globals()), str) and open($o_fsm_args).close()) or True</check>
- <check>(isinstance(eval(""" $i_fsm_args """[1:-1], locals(),globals()), str) and open($i_fsm_args).close()) or True </check>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>$out_type.io</type>
- </source>
- <doc>
-PCCC turbo Decoder.
-The fsm and interleaver arguments are passed directly to the trellis.fsm() and trellis.interleaver() constructors.
- </doc>
-</block>
diff --git a/gr-trellis/grc/trellis_pccc_encoder_xx.block.yml b/gr-trellis/grc/trellis_pccc_encoder_xx.block.yml
new file mode 100644
index 0000000000..4bc2f10b3b
--- /dev/null
+++ b/gr-trellis/grc/trellis_pccc_encoder_xx.block.yml
@@ -0,0 +1,58 @@
+id: trellis_pccc_encoder_xx
+label: PCCC Encoder
+category: '[Core]/Trellis Coding'
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [bb, bs, bi, ss, si, ii]
+ option_labels: [Byte->Byte, Byte->Short, Byte->Int, Short->Short, Short->Int,
+ Int->Int]
+ option_attributes:
+ input: [byte, byte, byte, short, short, int]
+ output: [byte, short, int, short, int, int]
+ hide: part
+- id: o_fsm_args
+ label: FSM 1
+ dtype: raw
+- id: o_init_state
+ label: Initial State 1
+ dtype: int
+ default: '0'
+- id: i_fsm_args
+ label: FSM 2
+ dtype: raw
+- id: i_init_state
+ label: Initial State 2
+ dtype: int
+ default: '0'
+- id: interleaver_args
+ label: Interleaver
+ dtype: raw
+- id: bl
+ label: Blocklength
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+asserts:
+- ${ (isinstance(eval(""" o_fsm_args """[1:-1], locals(),globals()), str) and open(o_fsm_args).close()) or True }
+- ${ (isinstance(eval(""" i_fsm_args """[1:-1], locals(),globals()), str) and open(i_fsm_args).close()) or True }
+
+templates:
+ imports: from gnuradio import trellis
+ make: trellis.pccc_encoder_${type}(trellis.fsm(${o_fsm_args}), ${o_init_state},
+ trellis.fsm(${i_fsm_args}), ${i_init_state}, trellis.interleaver(${interleaver_args}),
+ ${bl})
+
+documentation: |-
+ The fsm and interleaver arguments are passed directly to the trellis.fsm() and trellis.interleaver() constructors.
+
+file_format: 1
diff --git a/gr-trellis/grc/trellis_pccc_encoder_xx.xml b/gr-trellis/grc/trellis_pccc_encoder_xx.xml
deleted file mode 100644
index 85348e6e9b..0000000000
--- a/gr-trellis/grc/trellis_pccc_encoder_xx.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## PCCC Encoder
-###################################################
- -->
-
-<block>
- <name>PCCC Encoder</name>
- <key>trellis_pccc_encoder_xx</key>
- <category>[Core]/Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.pccc_encoder_$(type)(trellis.fsm($o_fsm_args), $o_init_state, trellis.fsm($i_fsm_args), $i_init_state, trellis.interleaver($interleaver_args), $bl)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Byte->Byte</name>
- <key>bb</key>
- <opt>input:byte</opt>
- <opt>output:byte</opt>
- </option>
- <option>
- <name>Byte->Short</name>
- <key>bs</key>
- <opt>input:byte</opt>
- <opt>output:short</opt>
- </option>
- <option>
- <name>Byte->Int</name>
- <key>bi</key>
- <opt>input:byte</opt>
- <opt>output:int</opt>
- </option>
- <option>
- <name>Short->Short</name>
- <key>ss</key>
- <opt>input:short</opt>
- <opt>output:short</opt>
- </option>
- <option>
- <name>Short->Int</name>
- <key>si</key>
- <opt>input:short</opt>
- <opt>output:int</opt>
- </option>
- <option>
- <name>Int->Int</name>
- <key>ii</key>
- <opt>input:int</opt>
- <opt>output:int</opt>
- </option>
- </param>
- <param>
- <name>FSM 1</name>
- <key>o_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State 1</name>
- <key>o_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>FSM 2</name>
- <key>i_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Initial State 2</name>
- <key>i_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Interleaver</name>
- <key>interleaver_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Blocklength</name>
- <key>bl</key>
- <type>int</type>
- </param>
- <check>(isinstance(eval(""" $o_fsm_args """[1:-1], locals(),globals()), str) and open($o_fsm_args).close()) or True</check>
- <check>(isinstance(eval(""" $i_fsm_args """[1:-1], locals(),globals()), str) and open($i_fsm_args).close()) or True </check>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <doc>
-The fsm and interleaver arguments are passed directly to the trellis.fsm() and trellis.interleaver() constructors.
- </doc>
-</block>
diff --git a/gr-trellis/grc/trellis_permutation.block.yml b/gr-trellis/grc/trellis_permutation.block.yml
new file mode 100644
index 0000000000..2dba671448
--- /dev/null
+++ b/gr-trellis/grc/trellis_permutation.block.yml
@@ -0,0 +1,54 @@
+id: trellis_permutation
+label: Trellis Permutation
+category: '[Core]/Trellis Coding'
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: interleaver_size
+ label: Interleaver Size
+ dtype: int
+- id: table
+ label: Table
+ dtype: int_vector
+- id: syms_per_block
+ label: Symbols per Block
+ dtype: int
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ imports: from gnuradio import trellis
+ make: trellis.permutation(${interleaver_size}, ${table}, ${syms_per_block}, ${type.size}*${vlen})
+ callbacks:
+ - set_K(${interleaver_size})
+ - set_TABLE(${table})
+ - set_SYMS_PER_BLOCK(${syms_per_block})
+
+documentation: |-
+ Interleaver size is given in blocks.
+ One Symbol = (in/out type) * (vector length)
+
+file_format: 1
diff --git a/gr-trellis/grc/trellis_permutation.xml b/gr-trellis/grc/trellis_permutation.xml
deleted file mode 100644
index 99eb2d291c..0000000000
--- a/gr-trellis/grc/trellis_permutation.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Trellis Permutation
-###################################################
- -->
-
-
-<block>
- <name>Trellis Permutation</name>
- <key>trellis_permutation</key>
- <category>[Core]/Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.permutation($interleaver_size, $table, $syms_per_block, $type.size*$vlen)</make>
- <callback>set_K($interleaver_size)</callback>
- <callback>set_TABLE($table)</callback>
- <callback>set_SYMS_PER_BLOCK($syms_per_block)</callback>
-
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- </param>
- <param>
- <name>Interleaver Size</name>
- <key>interleaver_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Table</name>
- <key>table</key>
- <type>int_vector</type>
- </param>
- <param>
- <name>Symbols per Block</name>
- <key>syms_per_block</key>
- <type>int</type>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
- <doc>
-Interleaver size is given in blocks.
-One Symbol = (in/out type) * (vector length)
- </doc>
-</block>
diff --git a/gr-trellis/grc/trellis_sccc_decoder_combined_xx.block.yml b/gr-trellis/grc/trellis_sccc_decoder_combined_xx.block.yml
new file mode 100644
index 0000000000..441d9593b8
--- /dev/null
+++ b/gr-trellis/grc/trellis_sccc_decoder_combined_xx.block.yml
@@ -0,0 +1,102 @@
+id: trellis_sccc_decoder_combined_xx
+label: SCCC Decoder Combo
+category: '[Core]/Trellis Coding'
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [c, f]
+ option_labels: [Complex, Float]
+ option_attributes:
+ io: [complex, float]
+ table: [complex_vector, real_vector]
+ hide: part
+- id: out_type
+ label: Output Type
+ dtype: enum
+ options: [i, s, b]
+ option_labels: [Int, Short, Byte]
+ option_attributes:
+ io: [int, short, byte]
+ hide: part
+- id: o_fsm_args
+ label: Outer FSM
+ dtype: raw
+- id: o_init_state
+ label: Outer Initial State
+ dtype: int
+ default: '0'
+- id: o_final_state
+ label: Outer Final State
+ dtype: int
+ default: '-1'
+- id: i_fsm_args
+ label: Inner FSM
+ dtype: raw
+- id: i_init_state
+ label: Inner Initial State
+ dtype: int
+ default: '0'
+- id: i_final_state
+ label: Inner Final State
+ dtype: int
+ default: '-1'
+- id: interleaver
+ label: Interleaver
+ dtype: raw
+- id: block_size
+ label: Block Size
+ dtype: int
+- id: iterations
+ label: Iterations
+ dtype: int
+ default: '10'
+- id: dim
+ label: Dimensionality
+ dtype: int
+- id: table
+ label: Constellation
+ dtype: ${ type.table }
+- id: metric_type
+ label: Metric Type
+ dtype: enum
+ options: [digital.TRELLIS_EUCLIDEAN, digital.TRELLIS_HARD_SYMBOL, digital.TRELLIS_HARD_BIT]
+ option_labels: [Euclidean, Hard Symbol, Hard Bit]
+- id: siso_type
+ label: SISO Type
+ dtype: enum
+ options: [trellis.TRELLIS_MIN_SUM, trellis.TRELLIS_SUM_PRODUCT]
+ option_labels: [Min Sum, Sum Product]
+- id: scaling
+ label: Scaling
+ dtype: real
+ default: '1.0'
+
+inputs:
+- domain: stream
+ dtype: ${ type.io }
+
+outputs:
+- domain: stream
+ dtype: ${ out_type.io }
+
+asserts:
+- ${ (isinstance(eval(""" o_fsm_args """[1:-1], locals(),globals()), str) and open(o_fsm_args).close()) or True }
+- ${ (isinstance(eval(""" i_fsm_args """[1:-1], locals(),globals()), str) and open(i_fsm_args).close()) or True }
+
+templates:
+ imports: from gnuradio import trellis, digital
+ make: "trellis.sccc_decoder_combined_${type}${out_type}(\n trellis.fsm(${o_fsm_args}),\
+ \ ${o_init_state}, ${o_final_state},\n trellis.fsm(${i_fsm_args}), ${i_init_state},\
+ \ ${i_final_state},\n trellis.interleaver(${interleaver}),\n ${block_size},\n\
+ \ ${iterations},\n ${siso_type},\n ${dim}, ${table},\
+ \ ${metric_type},\n ${scaling})\n "
+ callbacks:
+ - set_scaling(${scaling})
+
+documentation: |-
+ SCCC turbo Decoder combined with metric calculation.
+ The fsm arguments are passed directly to the trellis.fsm() constructor.
+
+file_format: 1
diff --git a/gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml b/gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml
deleted file mode 100644
index 79be0b8b5d..0000000000
--- a/gr-trellis/grc/trellis_sccc_decoder_combined_xx.xml
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## SCCC Decoder Combined
-###################################################
- -->
-
-
-<block>
- <name>SCCC Decoder Combo</name>
- <key>trellis_sccc_decoder_combined_xx</key>
- <category>[Core]/Trellis Coding</category>
- <import>from gnuradio import trellis, digital</import>
- <make>trellis.sccc_decoder_combined_$(type)$(out_type)(
- trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
- trellis.fsm($i_fsm_args), $i_init_state, $i_final_state,
- trellis.interleaver($interleaver),
- $block_size,
- $iterations,
- $siso_type,
- $dim, $table, $metric_type,
- $scaling)
- </make>
- <callback>set_scaling($scaling)</callback>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>c</key>
- <opt>io:complex</opt>
- <opt>table:complex_vector</opt>
- </option>
- <option>
- <name>Float</name>
- <key>f</key>
- <opt>io:float</opt>
- <opt>table:real_vector</opt>
- </option>
- </param>
- <param>
- <name>Output Type</name>
- <key>out_type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>b</key>
- <opt>io:byte</opt>
- </option>
- </param>
- <param>
- <name>Outer FSM</name>
- <key>o_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Outer Initial State</name>
- <key>o_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Outer Final State</name>
- <key>o_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Inner FSM</name>
- <key>i_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Inner Initial State</name>
- <key>i_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Inner Final State</name>
- <key>i_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Interleaver</name>
- <key>interleaver</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Iterations</name>
- <key>iterations</key>
- <value>10</value>
- <type>int</type>
- </param>
- <param>
- <name>Dimensionality</name>
- <key>dim</key>
- <type>int</type>
- </param>
- <param>
- <name>Constellation</name>
- <key>table</key>
- <type>$type.table</type>
- </param>
- <param>
- <name>Metric Type</name>
- <key>metric_type</key>
- <type>enum</type>
- <option>
- <name>Euclidean</name>
- <key>digital.TRELLIS_EUCLIDEAN</key>
- </option>
- <option>
- <name>Hard Symbol</name>
- <key>digital.TRELLIS_HARD_SYMBOL</key>
- </option>
- <option>
- <name>Hard Bit</name>
- <key>digital.TRELLIS_HARD_BIT</key>
- </option>
- </param>
- <param>
- <name>SISO Type</name>
- <key>siso_type</key>
- <type>enum</type>
- <option>
- <name>Min Sum</name>
- <key>trellis.TRELLIS_MIN_SUM</key>
- </option>
- <option>
- <name>Sum Product</name>
- <key>trellis.TRELLIS_SUM_PRODUCT</key>
- </option>
- </param>
- <param>
- <name>Scaling</name>
- <key>scaling</key>
- <value>1.0</value>
- <type>real</type>
- </param>
- <check>(isinstance(eval(""" $o_fsm_args """[1:-1], locals(),globals()), str) and open($o_fsm_args).close()) or True</check>
- <check>(isinstance(eval(""" $i_fsm_args """[1:-1], locals(),globals()), str) and open($i_fsm_args).close()) or True </check>
- <sink>
- <name>in</name>
- <type>$type.io</type>
- </sink>
- <source>
- <name>out</name>
- <type>$out_type.io</type>
- </source>
- <doc>
-SCCC turbo Decoder combined with metric calculation.
-The fsm arguments are passed directly to the trellis.fsm() constructor.
- </doc>
-</block>
diff --git a/gr-trellis/grc/trellis_sccc_decoder_x.block.yml b/gr-trellis/grc/trellis_sccc_decoder_x.block.yml
new file mode 100644
index 0000000000..794115d48a
--- /dev/null
+++ b/gr-trellis/grc/trellis_sccc_decoder_x.block.yml
@@ -0,0 +1,75 @@
+id: trellis_sccc_decoder_x
+label: SCCC Decoder
+category: '[Core]/Trellis Coding'
+
+parameters:
+- id: out_type
+ label: Output Type
+ dtype: enum
+ options: [i, s, b]
+ option_labels: [Int, Short, Byte]
+ option_attributes:
+ io: [int, short, byte]
+ hide: part
+- id: o_fsm_args
+ label: Outer FSM
+ dtype: raw
+- id: o_init_state
+ label: Outer Initial State
+ dtype: int
+ default: '0'
+- id: o_final_state
+ label: Outer Final State
+ dtype: int
+ default: '-1'
+- id: i_fsm_args
+ label: Inner FSM
+ dtype: raw
+- id: i_init_state
+ label: Inner Initial State
+ dtype: int
+ default: '0'
+- id: i_final_state
+ label: Inner Final State
+ dtype: int
+ default: '-1'
+- id: interleaver
+ label: Interleaver
+ dtype: raw
+- id: block_size
+ label: Block Size
+ dtype: int
+- id: iterations
+ label: Iterations
+ dtype: int
+ default: '10'
+- id: siso_type
+ label: SISO Type
+ dtype: enum
+ options: [trellis.TRELLIS_MIN_SUM, trellis.TRELLIS_SUM_PRODUCT]
+ option_labels: [Min Sum, Sum Product]
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: ${ out_type.io }
+
+asserts:
+- ${ (isinstance(eval(""" o_fsm_args """[1:-1], locals(),globals()), str) and open(o_fsm_args).close()) or True }
+- ${ (isinstance(eval(""" i_fsm_args """[1:-1], locals(),globals()), str) and open(i_fsm_args).close()) or True }
+
+templates:
+ imports: from gnuradio import trellis
+ make: "trellis.sccc_decoder_${out_type}(\n trellis.fsm(${o_fsm_args}), ${o_init_state},\
+ \ ${o_final_state},\n trellis.fsm(${i_fsm_args}), ${i_init_state}, ${i_final_state},\n\
+ \ trellis.interleaver(${interleaver}),\n ${block_size},\n ${iterations},\n\
+ \ ${siso_type})\n "
+
+documentation: |-
+ SCCC turbo Decoder.
+ The fsm and interleaver arguments are passed directly to the trellis.fsm() and trellis.interleaver() constructors.
+
+file_format: 1
diff --git a/gr-trellis/grc/trellis_sccc_decoder_x.xml b/gr-trellis/grc/trellis_sccc_decoder_x.xml
deleted file mode 100644
index 584ff0b0af..0000000000
--- a/gr-trellis/grc/trellis_sccc_decoder_x.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## SCCC Decoder
-###################################################
- -->
-
-
-<block>
- <name>SCCC Decoder</name>
- <key>trellis_sccc_decoder_x</key>
- <category>[Core]/Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.sccc_decoder_$(out_type)(
- trellis.fsm($o_fsm_args), $o_init_state, $o_final_state,
- trellis.fsm($i_fsm_args), $i_init_state, $i_final_state,
- trellis.interleaver($interleaver),
- $block_size,
- $iterations,
- $siso_type)
- </make>
- <param>
- <name>Output Type</name>
- <key>out_type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>b</key>
- <opt>io:byte</opt>
- </option>
- </param>
- <param>
- <name>Outer FSM</name>
- <key>o_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Outer Initial State</name>
- <key>o_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Outer Final State</name>
- <key>o_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Inner FSM</name>
- <key>i_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Inner Initial State</name>
- <key>i_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Inner Final State</name>
- <key>i_final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Interleaver</name>
- <key>interleaver</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Iterations</name>
- <key>iterations</key>
- <value>10</value>
- <type>int</type>
- </param>
- <param>
- <name>SISO Type</name>
- <key>siso_type</key>
- <type>enum</type>
- <option>
- <name>Min Sum</name>
- <key>trellis.TRELLIS_MIN_SUM</key>
- </option>
- <option>
- <name>Sum Product</name>
- <key>trellis.TRELLIS_SUM_PRODUCT</key>
- </option>
- </param>
- <check>(isinstance(eval(""" $o_fsm_args """[1:-1], locals(),globals()), str) and open($o_fsm_args).close()) or True</check>
- <check>(isinstance(eval(""" $i_fsm_args """[1:-1], locals(),globals()), str) and open($i_fsm_args).close()) or True </check>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>$out_type.io</type>
- </source>
- <doc>
-SCCC turbo Decoder.
-The fsm and interleaver arguments are passed directly to the trellis.fsm() and trellis.interleaver() constructors.
- </doc>
-</block>
diff --git a/gr-trellis/grc/trellis_sccc_encoder_xx.block.yml b/gr-trellis/grc/trellis_sccc_encoder_xx.block.yml
new file mode 100644
index 0000000000..5068af38ff
--- /dev/null
+++ b/gr-trellis/grc/trellis_sccc_encoder_xx.block.yml
@@ -0,0 +1,58 @@
+id: trellis_sccc_encoder_xx
+label: SCCC Encoder
+category: '[Core]/Trellis Coding'
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [bb, bs, bi, ss, si, ii]
+ option_labels: [Byte->Byte, Byte->Short, Byte->Int, Short->Short, Short->Int,
+ Int->Int]
+ option_attributes:
+ input: [byte, byte, byte, short, short, int]
+ output: [byte, short, int, short, int, int]
+ hide: part
+- id: o_fsm_args
+ label: Outer FSM
+ dtype: raw
+- id: o_init_state
+ label: Outer Initial State
+ dtype: int
+ default: '0'
+- id: i_fsm_args
+ label: Inner FSM
+ dtype: raw
+- id: i_init_state
+ label: Inner Initial State
+ dtype: int
+ default: '0'
+- id: interleaver_args
+ label: Interleaver
+ dtype: raw
+- id: bl
+ label: Blocklength
+ dtype: int
+
+inputs:
+- domain: stream
+ dtype: ${ type.input }
+
+outputs:
+- domain: stream
+ dtype: ${ type.output }
+
+asserts:
+- ${ (isinstance(eval(""" o_fsm_args """[1:-1], locals(),globals()), str) and open(o_fsm_args).close()) or True }
+- ${ (isinstance(eval(""" i_fsm_args """[1:-1], locals(),globals()), str) and open(i_fsm_args).close()) or True }
+
+templates:
+ imports: from gnuradio import trellis
+ make: trellis.sccc_encoder_${type}(trellis.fsm(${o_fsm_args}), ${o_init_state},
+ trellis.fsm(${i_fsm_args}), ${i_init_state}, trellis.interleaver(${interleaver_args}),
+ ${bl})
+
+documentation: |-
+ The fsm and interleaver arguments are passed directly to the trellis.fsm() and trellis.interleaver() constructors.
+
+file_format: 1
diff --git a/gr-trellis/grc/trellis_sccc_encoder_xx.xml b/gr-trellis/grc/trellis_sccc_encoder_xx.xml
deleted file mode 100644
index 7b4ab30c75..0000000000
--- a/gr-trellis/grc/trellis_sccc_encoder_xx.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##SCCC Encoder
-###################################################
- -->
-
-<block>
- <name>SCCC Encoder</name>
- <key>trellis_sccc_encoder_xx</key>
- <category>[Core]/Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.sccc_encoder_$(type)(trellis.fsm($o_fsm_args), $o_init_state, trellis.fsm($i_fsm_args), $i_init_state, trellis.interleaver($interleaver_args), $bl)</make>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Byte->Byte</name>
- <key>bb</key>
- <opt>input:byte</opt>
- <opt>output:byte</opt>
- </option>
- <option>
- <name>Byte->Short</name>
- <key>bs</key>
- <opt>input:byte</opt>
- <opt>output:short</opt>
- </option>
- <option>
- <name>Byte->Int</name>
- <key>bi</key>
- <opt>input:byte</opt>
- <opt>output:int</opt>
- </option>
- <option>
- <name>Short->Short</name>
- <key>ss</key>
- <opt>input:short</opt>
- <opt>output:short</opt>
- </option>
- <option>
- <name>Short->Int</name>
- <key>si</key>
- <opt>input:short</opt>
- <opt>output:int</opt>
- </option>
- <option>
- <name>Int->Int</name>
- <key>ii</key>
- <opt>input:int</opt>
- <opt>output:int</opt>
- </option>
- </param>
- <param>
- <name>Outer FSM</name>
- <key>o_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Outer Initial State</name>
- <key>o_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Inner FSM</name>
- <key>i_fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Inner Initial State</name>
- <key>i_init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Interleaver</name>
- <key>interleaver_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Blocklength</name>
- <key>bl</key>
- <type>int</type>
- </param>
- <check>(isinstance(eval(""" $o_fsm_args """[1:-1], locals(),globals()), str) and open($o_fsm_args).close()) or True</check>
- <check>(isinstance(eval(""" $i_fsm_args """[1:-1], locals(),globals()), str) and open($i_fsm_args).close()) or True </check>
- <sink>
- <name>in</name>
- <type>$type.input</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.output</type>
- </source>
- <doc>
-The fsm and interleaver arguments are passed directly to the trellis.fsm() and trellis.interleaver() constructors.
- </doc>
-</block>
diff --git a/gr-trellis/grc/trellis_siso_combined_f.block.yml b/gr-trellis/grc/trellis_siso_combined_f.block.yml
new file mode 100644
index 0000000000..0a10dc14d3
--- /dev/null
+++ b/gr-trellis/grc/trellis_siso_combined_f.block.yml
@@ -0,0 +1,79 @@
+id: trellis_siso_combined_f
+label: SISO Combo
+category: '[Core]/Trellis Coding'
+
+parameters:
+- id: fsm_args
+ label: FSM Args
+ dtype: raw
+- id: block_size
+ label: Block Size
+ dtype: int
+- id: init_state
+ label: Initial State
+ dtype: int
+ default: '0'
+- id: final_state
+ label: Final State
+ dtype: int
+ default: '-1'
+- id: a_post_in
+ label: A-posteriori In
+ dtype: enum
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: a_post_out
+ label: A-posteriori Out
+ dtype: enum
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: siso_type
+ label: SISO Type
+ dtype: enum
+ options: [trellis.TRELLIS_MIN_SUM, trellis.TRELLIS_SUM_PRODUCT]
+ option_labels: [Min Sum, Sum Product]
+- id: dim
+ label: Dimensionality
+ dtype: int
+- id: table
+ label: Constellation
+ dtype: real_vector
+- id: metric_type
+ label: Metric Type
+ dtype: enum
+ options: [trellis.TRELLIS_EUCLIDEAN, trellis.TRELLIS_HARD_SYMBOL, trellis.TRELLIS_HARD_BIT]
+ option_labels: [Euclidean, Hard Symbol, Hard Bit]
+
+inputs:
+- label: in_i
+ domain: stream
+ dtype: float
+- label: in_o
+ domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import trellis
+ make: trellis.siso_combined_f(trellis.fsm(${fsm_args}), ${block_size}, ${init_state},
+ ${final_state}, ${a_post_in}, ${a_post_out}, ${siso_type}, ${dim}, ${table},
+ ${metric_type})
+ callbacks:
+ - set_FSM(trellis.fsm(${fsm_args}))
+ - set_K(${block_size})
+ - set_S0(${init_state})
+ - set_SK(${final_state})
+ - set_POSTI(${a_post_in})
+ - set_POSTO(${a_post_out})
+ - set_SISO_TYPE(${siso_type})
+ - set_D(${dim})
+ - set_TABLE(${table})
+ - set_TYPE(${metric_type})
+
+documentation: |-
+ BCJR Algorithm combined with metric calculation. The fsm arguments are passed directly to the trellis.fsm() constructor.
+
+file_format: 1
diff --git a/gr-trellis/grc/trellis_siso_combined_f.xml b/gr-trellis/grc/trellis_siso_combined_f.xml
deleted file mode 100644
index f8ec9c2d21..0000000000
--- a/gr-trellis/grc/trellis_siso_combined_f.xml
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Trellis SISO Combined
-###################################################
- -->
-
-
-<block>
- <name>SISO Combo</name>
- <key>trellis_siso_combined_f</key>
- <category>[Core]/Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.siso_combined_f(trellis.fsm($fsm_args), $block_size, $init_state, $final_state, $a_post_in, $a_post_out, $siso_type, $dim, $table, $metric_type)</make>
- <callback>set_FSM(trellis.fsm($fsm_args))</callback>
- <callback>set_K($block_size)</callback>
- <callback>set_S0($init_state)</callback>
- <callback>set_SK($final_state)</callback>
- <callback>set_POSTI($a_post_in)</callback>
- <callback>set_POSTO($a_post_out)</callback>
- <callback>set_SISO_TYPE($siso_type)</callback>
- <callback>set_D($dim)</callback>
- <callback>set_TABLE($table)</callback>
- <callback>set_TYPE($metric_type)</callback>
- <param>
- <name>FSM Args</name>
- <key>fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Initial State</name>
- <key>init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State</name>
- <key>final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>A-posteriori In</name>
- <key>a_post_in</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>A-posteriori Out</name>
- <key>a_post_out</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>SISO Type</name>
- <key>siso_type</key>
- <type>enum</type>
- <option>
- <name>Min Sum</name>
- <key>trellis.TRELLIS_MIN_SUM</key>
- </option>
- <option>
- <name>Sum Product</name>
- <key>trellis.TRELLIS_SUM_PRODUCT</key>
- </option>
- </param>
- <param>
- <name>Dimensionality</name>
- <key>dim</key>
- <type>int</type>
- </param>
- <param>
- <name>Constellation</name>
- <key>table</key>
- <type>real_vector</type>
- </param>
- <param>
- <name>Metric Type</name>
- <key>metric_type</key>
- <type>enum</type>
- <option>
- <name>Euclidean</name>
- <key>trellis.TRELLIS_EUCLIDEAN</key>
- </option>
- <option>
- <name>Hard Symbol</name>
- <key>trellis.TRELLIS_HARD_SYMBOL</key>
- </option>
- <option>
- <name>Hard Bit</name>
- <key>trellis.TRELLIS_HARD_BIT</key>
- </option>
- </param>
- <sink>
- <name>in_i</name>
- <type>float</type>
- </sink>
- <sink>
- <name>in_o</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
- <doc>
-BCJR Algorithm combined with metric calculation. \
-The fsm arguments are passed directly to the trellis.fsm() constructor.
- </doc>
-</block>
diff --git a/gr-trellis/grc/trellis_siso_f.block.yml b/gr-trellis/grc/trellis_siso_f.block.yml
new file mode 100644
index 0000000000..5687dee4ea
--- /dev/null
+++ b/gr-trellis/grc/trellis_siso_f.block.yml
@@ -0,0 +1,67 @@
+id: trellis_siso_f
+label: SISO
+category: '[Core]/Trellis Coding'
+
+parameters:
+- id: fsm_args
+ label: FSM Args
+ dtype: raw
+- id: block_size
+ label: Block Size
+ dtype: int
+- id: init_state
+ label: Initial State
+ dtype: int
+ default: '0'
+- id: final_state
+ label: Final State
+ dtype: int
+ default: '-1'
+- id: a_post_in
+ label: A-posteriori In
+ dtype: enum
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: a_post_out
+ label: A-posteriori Out
+ dtype: enum
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: siso_type
+ label: SISO Type
+ dtype: enum
+ options: [trellis.TRELLIS_MIN_SUM, trellis.TRELLIS_SUM_PRODUCT]
+ option_labels: [Min Sum, Sum Product]
+
+inputs:
+- label: priori
+ domain: stream
+ dtype: float
+- label: prioro
+ domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: float
+
+asserts:
+- ${ (isinstance(eval(""" fsm_args """[1:-1], locals(),globals()), str) and open(fsm_args).close()) or True }
+
+templates:
+ imports: from gnuradio import trellis
+ make: trellis.siso_f(trellis.fsm(${fsm_args}), ${block_size}, ${init_state}, ${final_state},
+ ${a_post_in}, ${a_post_out}, ${siso_type})
+ callbacks:
+ - set_FSM(trellis.fsm(${fsm_args}))
+ - set_K(${block_size})
+ - set_S0(${init_state})
+ - set_SK(${final_state})
+ - set_POSTI(${a_post_in})
+ - set_POSTO(${a_post_out})
+ - set_SISO_TYPE(${siso_type})
+
+documentation: |-
+ BCJR Algorithm. The fsm arguments are passed directly to the trellis.fsm() constructor.
+
+file_format: 1
diff --git a/gr-trellis/grc/trellis_siso_f.xml b/gr-trellis/grc/trellis_siso_f.xml
deleted file mode 100644
index e121643e3f..0000000000
--- a/gr-trellis/grc/trellis_siso_f.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Trellis SISO
-###################################################
- -->
-
-
-<block>
- <name>SISO</name>
- <key>trellis_siso_f</key>
- <category>[Core]/Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.siso_f(trellis.fsm($fsm_args), $block_size, $init_state, $final_state, $a_post_in, $a_post_out, $siso_type)</make>
- <callback>set_FSM(trellis.fsm($fsm_args))</callback>
- <callback>set_K($block_size)</callback>
- <callback>set_S0($init_state)</callback>
- <callback>set_SK($final_state)</callback>
- <callback>set_POSTI($a_post_in)</callback>
- <callback>set_POSTO($a_post_out)</callback>
- <callback>set_SISO_TYPE($siso_type)</callback>
- <param>
- <name>FSM Args</name>
- <key>fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Initial State</name>
- <key>init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State</name>
- <key>final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>A-posteriori In</name>
- <key>a_post_in</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>A-posteriori Out</name>
- <key>a_post_out</key>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>SISO Type</name>
- <key>siso_type</key>
- <type>enum</type>
- <option>
- <name>Min Sum</name>
- <key>trellis.TRELLIS_MIN_SUM</key>
- </option>
- <option>
- <name>Sum Product</name>
- <key>trellis.TRELLIS_SUM_PRODUCT</key>
- </option>
- </param>
- <check>(isinstance(eval(""" $fsm_args """[1:-1], locals(),globals()), str) and open($fsm_args).close()) or True</check>
- <sink>
- <name>priori</name>
- <type>float</type>
- </sink>
- <sink>
- <name>prioro</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
- <doc>
-BCJR Algorithm. \
-The fsm arguments are passed directly to the trellis.fsm() constructor.
- </doc>
-</block>
diff --git a/gr-trellis/grc/trellis_viterbi_combined_xx.block.yml b/gr-trellis/grc/trellis_viterbi_combined_xx.block.yml
new file mode 100644
index 0000000000..8d1451e2da
--- /dev/null
+++ b/gr-trellis/grc/trellis_viterbi_combined_xx.block.yml
@@ -0,0 +1,76 @@
+id: trellis_viterbi_combined_xx
+label: Viterbi Combo
+category: '[Core]/Trellis Coding'
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [c, f, i, s]
+ option_labels: [Complex, Float, Int, Short]
+ option_attributes:
+ io: [complex, float, int, short]
+ table: [complex_vector, real_vector, int_vector, int_vector]
+ hide: part
+- id: out_type
+ label: Output Type
+ dtype: enum
+ options: [i, s, b]
+ option_labels: [Int, Short, Byte]
+ option_attributes:
+ io: [int, short, byte]
+ hide: part
+- id: fsm_args
+ label: FSM Args
+ dtype: raw
+- id: block_size
+ label: Block Size
+ dtype: int
+- id: init_state
+ label: Initial State
+ dtype: int
+ default: '0'
+- id: final_state
+ label: Final State
+ dtype: int
+ default: '-1'
+- id: dim
+ label: Dimensionality
+ dtype: int
+- id: table
+ label: Constellation
+ dtype: ${ type.table }
+- id: metric_type
+ label: Metric Type
+ dtype: enum
+ options: [digital.TRELLIS_EUCLIDEAN, digital.TRELLIS_HARD_SYMBOL, digital.TRELLIS_HARD_BIT]
+ option_labels: [Euclidean, Hard Symbol, Hard Bit]
+
+inputs:
+- domain: stream
+ dtype: ${ type.io }
+
+outputs:
+- domain: stream
+ dtype: ${ out_type.io }
+
+asserts:
+- ${ (isinstance(eval(""" fsm_args """[1:-1], locals(),globals()), str) and open(fsm_args).close()) or True }
+
+templates:
+ imports: from gnuradio import trellis, digital
+ make: trellis.viterbi_combined_${type}${out_type}(trellis.fsm(${fsm_args}), ${block_size},
+ ${init_state}, ${final_state}, ${dim}, ${table}, ${metric_type})
+ callbacks:
+ - set_FSM(trellis.fsm(${fsm_args}))
+ - set_K(${block_size})
+ - set_S0(${init_state})
+ - set_SK(${final_state})
+ - set_D(${dim})
+ - set_TABLE(${table})
+ - set_TYPE(${metric_type})
+
+documentation: |-
+ Viterbi Decoder combined with metric calculation. The fsm arguments are passed directly to the trellis.fsm() constructor.
+
+file_format: 1
diff --git a/gr-trellis/grc/trellis_viterbi_combined_xx.xml b/gr-trellis/grc/trellis_viterbi_combined_xx.xml
deleted file mode 100644
index a52e5ed2b5..0000000000
--- a/gr-trellis/grc/trellis_viterbi_combined_xx.xml
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Trellis Viterbi Combined
-###################################################
- -->
-
-
-<block>
- <name>Viterbi Combo</name>
- <key>trellis_viterbi_combined_xx</key>
- <category>[Core]/Trellis Coding</category>
- <import>from gnuradio import trellis, digital</import>
- <make>trellis.viterbi_combined_$(type)$(out_type)(trellis.fsm($fsm_args), $block_size, $init_state, $final_state, $dim, $table, $metric_type)</make>
- <callback>set_FSM(trellis.fsm($fsm_args))</callback>
- <callback>set_K($block_size)</callback>
- <callback>set_S0($init_state)</callback>
- <callback>set_SK($final_state)</callback>
- <callback>set_D($dim)</callback>
- <callback>set_TABLE($table)</callback>
- <callback>set_TYPE($metric_type)</callback>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>c</key>
- <opt>io:complex</opt>
- <opt>table:complex_vector</opt>
- </option>
- <option>
- <name>Float</name>
- <key>f</key>
- <opt>io:float</opt>
- <opt>table:real_vector</opt>
- </option>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- <opt>table:int_vector</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- <opt>table:int_vector</opt>
- </option>
- </param>
- <param>
- <name>Output Type</name>
- <key>out_type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>b</key>
- <opt>io:byte</opt>
- </option>
- </param>
- <param>
- <name>FSM Args</name>
- <key>fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Initial State</name>
- <key>init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State</name>
- <key>final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <param>
- <name>Dimensionality</name>
- <key>dim</key>
- <type>int</type>
- </param>
- <param>
- <name>Constellation</name>
- <key>table</key>
- <type>$type.table</type>
- </param>
- <param>
- <name>Metric Type</name>
- <key>metric_type</key>
- <type>enum</type>
- <option>
- <name>Euclidean</name>
- <key>digital.TRELLIS_EUCLIDEAN</key>
- </option>
- <option>
- <name>Hard Symbol</name>
- <key>digital.TRELLIS_HARD_SYMBOL</key>
- </option>
- <option>
- <name>Hard Bit</name>
- <key>digital.TRELLIS_HARD_BIT</key>
- </option>
- </param>
- <check>(isinstance(eval(""" $fsm_args """[1:-1], locals(),globals()), str) and open($fsm_args).close()) or True</check>
- <sink>
- <name>in</name>
- <type>$type.io</type>
- </sink>
- <source>
- <name>out</name>
- <type>$out_type.io</type>
- </source>
- <doc>
-Viterbi Decoder combined with metric calculation. \
-The fsm arguments are passed directly to the trellis.fsm() constructor.
- </doc>
-</block>
diff --git a/gr-trellis/grc/trellis_viterbi_x.block.yml b/gr-trellis/grc/trellis_viterbi_x.block.yml
new file mode 100644
index 0000000000..2caa5992e7
--- /dev/null
+++ b/gr-trellis/grc/trellis_viterbi_x.block.yml
@@ -0,0 +1,53 @@
+id: trellis_viterbi_x
+label: Viterbi
+category: '[Core]/Trellis Coding'
+
+parameters:
+- id: type
+ label: Type
+ dtype: enum
+ options: [i, s, b]
+ option_labels: [Int, Short, Byte]
+ option_attributes:
+ io: [int, short, byte]
+ hide: part
+- id: fsm_args
+ label: FSM Args
+ dtype: raw
+- id: block_size
+ label: Block Size
+ dtype: int
+- id: init_state
+ label: Initial State
+ dtype: int
+ default: '0'
+- id: final_state
+ label: Final State
+ dtype: int
+ default: '-1'
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: ${ type.io }
+
+asserts:
+- ${ (isinstance(eval(""" fsm_args """[1:-1], locals(),globals()), str) and open(fsm_args).close()) or True }
+
+templates:
+ imports: from gnuradio import trellis
+ make: trellis.viterbi_${type}(trellis.fsm(${fsm_args}), ${block_size}, ${init_state},
+ ${final_state})
+ callbacks:
+ - set_FSM(trellis.fsm(${fsm_args}))
+ - set_K(${block_size})
+ - set_S0(${init_state})
+ - set_SK(${final_state})
+
+documentation: |-
+ Viterbi Decoder. The fsm arguments are passed directly to the trellis.fsm() constructor.
+
+file_format: 1
diff --git a/gr-trellis/grc/trellis_viterbi_x.xml b/gr-trellis/grc/trellis_viterbi_x.xml
deleted file mode 100644
index 21611ee51d..0000000000
--- a/gr-trellis/grc/trellis_viterbi_x.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Trellis Viterbi
-###################################################
- -->
-
-
-<block>
- <name>Viterbi</name>
- <key>trellis_viterbi_x</key>
- <category>[Core]/Trellis Coding</category>
- <import>from gnuradio import trellis</import>
- <make>trellis.viterbi_$(type)(trellis.fsm($fsm_args), $block_size, $init_state, $final_state)</make>
- <callback>set_FSM(trellis.fsm($fsm_args))</callback>
- <callback>set_K($block_size)</callback>
- <callback>set_S0($init_state)</callback>
- <callback>set_SK($final_state)</callback>
- <param>
- <name>Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>i</key>
- <opt>io:int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>s</key>
- <opt>io:short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>b</key>
- <opt>io:byte</opt>
- </option>
- </param>
- <param>
- <name>FSM Args</name>
- <key>fsm_args</key>
- <type>raw</type>
- </param>
- <param>
- <name>Block Size</name>
- <key>block_size</key>
- <type>int</type>
- </param>
- <param>
- <name>Initial State</name>
- <key>init_state</key>
- <value>0</value>
- <type>int</type>
- </param>
- <param>
- <name>Final State</name>
- <key>final_state</key>
- <value>-1</value>
- <type>int</type>
- </param>
- <check>(isinstance(eval(""" $fsm_args """[1:-1], locals(),globals()), str) and open($fsm_args).close()) or True</check>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>$type.io</type>
- </source>
- <doc>
-Viterbi Decoder. \
-The fsm arguments are passed directly to the trellis.fsm() constructor.
- </doc>
-</block>
diff --git a/gr-uhd/grc/CMakeLists.txt b/gr-uhd/grc/CMakeLists.txt
index d748bfacef..72a6543df3 100644
--- a/gr-uhd/grc/CMakeLists.txt
+++ b/gr-uhd/grc/CMakeLists.txt
@@ -18,28 +18,28 @@
# Boston, MA 02110-1301, USA.
########################################################################
-# Rules for generating the source and sink xml wrappers
+# Rules for generating the source and sink yml wrappers
########################################################################
include(GrPython)
-macro(GEN_BLOCK_XML _generator _xml_block)
+macro(GEN_BLOCK_YML _generator _yml_block)
set(generator ${CMAKE_CURRENT_SOURCE_DIR}/${_generator})
- set(xml_block ${CMAKE_CURRENT_BINARY_DIR}/${_xml_block})
- list(APPEND xml_blocks ${xml_block})
+ set(yml_block ${CMAKE_CURRENT_BINARY_DIR}/${_yml_block})
+ list(APPEND yml_blocks ${yml_block})
add_custom_command(
- DEPENDS ${generator} OUTPUT ${xml_block}
- COMMAND ${PYTHON_EXECUTABLE} ${generator} ${xml_block}
+ DEPENDS ${generator} OUTPUT ${yml_block}
+ COMMAND ${PYTHON_EXECUTABLE} ${generator} ${yml_block}
)
-endmacro(GEN_BLOCK_XML)
+endmacro(GEN_BLOCK_YML)
-GEN_BLOCK_XML(gen_uhd_usrp_blocks.py uhd_usrp_source.xml)
-GEN_BLOCK_XML(gen_uhd_usrp_blocks.py uhd_usrp_sink.xml)
+GEN_BLOCK_YML(gen_uhd_usrp_blocks.py uhd_usrp_source.block.yml)
+GEN_BLOCK_YML(gen_uhd_usrp_blocks.py uhd_usrp_sink.block.yml)
-add_custom_target(uhd_grc_xml_blocks ALL DEPENDS ${xml_blocks})
+add_custom_target(uhd_grc_yml_blocks ALL DEPENDS ${yml_blocks})
install(FILES
- ${xml_blocks}
- uhd_amsg_source.xml
- uhd_block_tree.xml
+ ${yml_blocks}
+ uhd_amsg_source.block.yml
+ uhd.tree.yml
DESTINATION ${GRC_BLOCKS_DIR}
)
diff --git a/gr-uhd/grc/gen_uhd_usrp_blocks.py b/gr-uhd/grc/gen_uhd_usrp_blocks.py
index 1bba490a23..4a7b484f7d 100644
--- a/gr-uhd/grc/gen_uhd_usrp_blocks.py
+++ b/gr-uhd/grc/gen_uhd_usrp_blocks.py
@@ -19,669 +19,344 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
"""
MAIN_TMPL = """\
-<?xml version="1.0"?>
-<block>
- <name>UHD: USRP $sourk.title()</name>
- <key>uhd_usrp_$(sourk)</key>
- <flags>throttle</flags>
- <import>from gnuradio import uhd</import>
- <import>import time</import>
- <make>uhd.usrp_$(sourk)(
- ",".join((\$dev_addr, \$dev_args)),
- uhd.stream_args(
- cpu_format="\$type",
- \#if \$otw()
- otw_format=\$otw,
- \#end if
- \#if \$stream_args()
- args=\$stream_args,
- \#end if
- \#if \$stream_chans()
- channels=\$stream_chans,
- \#else
- channels=range(\$nchan),
- \#end if
- ),$lentag_arg
-)
-\#if \$clock_rate()
-self.\$(id).set_clock_rate(\$clock_rate, uhd.ALL_MBOARDS)
-\#end if
-#for $m in range($max_mboards)
-########################################################################
-\#if \$num_mboards() > $m and \$clock_source$(m)()
-self.\$(id).set_clock_source(\$clock_source$(m), $m)
-\#end if
-########################################################################
-\#if \$num_mboards() > $m and \$time_source$(m)()
-self.\$(id).set_time_source(\$time_source$(m), $m)
-\#end if
-########################################################################
-\#if \$num_mboards() > $m and \$sd_spec$(m)()
-self.\$(id).set_subdev_spec(\$sd_spec$(m), $m)
-\#end if
-########################################################################
-#end for
-self.\$(id).set_samp_rate(\$samp_rate)
-\#if \$sync() == 'sync'
-self.\$(id).set_time_unknown_pps(uhd.time_spec())
-\#elif \$sync() == 'pc_clock'
-self.\$(id).set_time_now(uhd.time_spec(time.time()), uhd.ALL_MBOARDS)
-\#end if
-#for $n in range($max_nchan)
-\#if \$nchan() > $n
-self.\$(id).set_center_freq(\$center_freq$(n), $n)
-\#if \$norm_gain${n}()
-self.\$(id).set_normalized_gain(\$gain$(n), $n)
-\#else
-self.\$(id).set_gain(\$gain$(n), $n)
-\#end if
- \#if \$ant$(n)()
-self.\$(id).set_antenna(\$ant$(n), $n)
- \#end if
- \#if \$bw$(n)()
-self.\$(id).set_bandwidth(\$bw$(n), $n)
- \#end if
-#if $sourk == 'source'
- \#if \$lo_export$(n)() and not \$hide_lo_controls()
-self.\$(id).set_lo_export_enabled(\$lo_export$(n), uhd.ALL_LOS, $n)
- \#end if
- \#if \$lo_source$(n)() and not \$hide_lo_controls()
-self.\$(id).set_lo_source(\$lo_source$(n), uhd.ALL_LOS, $n)
- \#end if
- \#if \$dc_offs_enb$(n)()
-self.\$(id).set_auto_dc_offset(\$dc_offs_enb$(n), $n)
- \#end if
- \#if \$iq_imbal_enb$(n)()
-self.\$(id).set_auto_iq_balance(\$iq_imbal_enb$(n), $n)
- \#end if
-#end if
-\#end if
-#end for
-</make>
- <callback>set_samp_rate(\$samp_rate)</callback>
- #for $n in range($max_nchan)
- <callback>set_center_freq(\$center_freq$(n), $n)</callback>
- <callback>\#if \$norm_gain${n}()
-self.\$(id).set_normalized_gain(\$gain$(n), $n)
-\#else
-self.\$(id).set_gain(\$gain$(n), $n)
-\#end if
- </callback>
- <callback>\#if not \$hide_lo_controls()
-set_lo_source(\$lo_source$(n), uhd.ALL_LOS, $n)
-\#end if
- </callback>
- <callback>\#if not \$hide_lo_controls()
-set_lo_export_enabled(\$lo_export$(n), uhd.ALL_LOS, $n)
-\#end if
- </callback>
- <callback>set_antenna(\$ant$(n), $n)</callback>
- <callback>set_bandwidth(\$bw$(n), $n)</callback>
- #end for
- <param>
- <name>$(direction.title())put Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex float32</name>
- <key>fc32</key>
- <opt>type:fc32</opt>
- </option>
- <option>
- <name>Complex int16</name>
- <key>sc16</key>
- <opt>type:sc16</opt>
- </option>
- <option>
- <name>VITA word32</name>
- <key>item32</key>
- <opt>type:s32</opt>
- </option>
- </param>
- <param>
- <name>Wire Format</name>
- <key>otw</key>
- <value></value>
- <type>string</type>
- <hide>
- \#if \$otw()
- none
- \#else
- part
- \#end if
- </hide>
- <option>
- <name>Automatic</name>
- <key></key>
- </option>
- <option>
- <name>Complex int16</name>
- <key>sc16</key>
- </option>
- <option>
- <name>Complex int12</name>
- <key>sc12</key>
- </option>
- <option>
- <name>Complex int8</name>
- <key>sc8</key>
- </option>
- </param>
- <param>
- <name>Stream args</name>
- <key>stream_args</key>
- <value></value>
- <type>string</type>
- <hide>
- \#if \$stream_args()
- none
- \#else
- part
- \#end if
- </hide>
- <option>
- <name>peak=0.003906</name>
- <key>peak=0.003906</key>
- </option>
- </param>
- <param>
- <name>Stream channels</name>
- <key>stream_chans</key>
- <value>[]</value>
- <type>int_vector</type>
- <hide>
- \#if \$stream_chans()
- none
- \#else
- part
- \#end if
- </hide>
- </param>
- <param>
- <name>Device Address</name>
- <key>dev_addr</key>
- <value>""</value>
- <type>string</type>
- <hide>
- \#if \$dev_addr()
- none
- \#else
- part
- \#end if
- </hide>
- </param>
- <param>
- <name>Device Arguments</name>
- <key>dev_args</key>
- <value>""</value>
- <type>string</type>
- <hide>
- \#if \$dev_args()
- none
- \#else
- part
- \#end if
- </hide>
- </param>
- <param>
- <name>Sync</name>
- <key>sync</key>
- <value></value>
- <type>enum</type>
- <hide>\#if \$sync() then 'none' else 'part'#</hide>
- <option>
- <name>unknown PPS</name>
- <key>sync</key>
- </option>
- <option>
- <name>PC Clock</name>
- <key>pc_clock</key>
- </option>
- <option>
- <name>don't sync</name>
- <key></key>
- </option>
- </param>
- <param>
- <name>Clock Rate (Hz)</name>
- <key>clock_rate</key>
- <value>0.0</value>
- <type>real</type>
- <hide>\#if \$clock_rate() then 'none' else 'part'#</hide>
- <option>
- <name>Default</name>
- <key>0.0</key>
- </option>
- <option>
- <name>200 MHz</name>
- <key>200e6</key>
- </option>
- <option>
- <name>184.32 MHz</name>
- <key>184.32e6</key>
- </option>
- <option>
- <name>120 MHz</name>
- <key>120e6</key>
- </option>
- <option>
- <name>30.72 MHz</name>
- <key>30.72e6</key>
- </option>
- </param>
- <param>
- <name>Num Mboards</name>
- <key>num_mboards</key>
- <value>1</value>
- <type>int</type>
- <hide>part</hide>
- #for $m in range(1, $max_mboards+1)
- <option>
- <name>$(m)</name>
- <key>$m</key>
- </option>
- #end for
- </param>
- #for $m in range($max_mboards)
- <param>
- <name>Mb$(m): Clock Source</name>
- <key>clock_source$(m)</key>
- <value></value>
- <type>string</type>
- <hide>
- \#if not \$num_mboards() > $m
- all
- \#elif \$clock_source$(m)()
- none
- \#else
- part
- \#end if
- </hide>
- <option><name>Default</name><key></key></option>
- <option><name>Internal</name><key>internal</key></option>
- <option><name>External</name><key>external</key></option>
- <option><name>MIMO Cable</name><key>mimo</key></option>
- <option><name>O/B GPSDO</name><key>gpsdo</key></option>
- </param>
- <param>
- <name>Mb$(m): Time Source</name>
- <key>time_source$(m)</key>
- <value></value>
- <type>string</type>
- <hide>
- \#if not \$num_mboards() > $m
- all
- \#elif \$time_source$(m)()
- none
- \#else
- part
- \#end if
- </hide>
- <option><name>Default</name><key></key></option>
- <option><name>External</name><key>external</key></option>
- <option><name>MIMO Cable</name><key>mimo</key></option>
- <option><name>O/B GPSDO</name><key>gpsdo</key></option>
- </param>
- <param>
- <name>Mb$(m): Subdev Spec</name>
- <key>sd_spec$(m)</key>
- <value></value>
- <type>string</type>
- <hide>
- \#if not \$num_mboards() > $m
- all
- \#elif \$sd_spec$(m)()
- none
- \#else
- part
- \#end if
- </hide>
- </param>
- #end for
- <param>
- <name>Num Channels</name>
- <key>nchan</key>
- <value>1</value>
- <type>int</type>
- #for $n in range(1, $max_nchan+1)
- <option>
- <name>$(n)</name>
- <key>$n</key>
- </option>
- #end for
- </param>
- <param>
- <name>Samp Rate (Sps)</name>
- <key>samp_rate</key>
- <value>samp_rate</value>
- <type>real</type>
- </param>
- $params
- <check>$max_nchan >= \$nchan</check>
- <check>\$nchan > 0</check>
- <check>$max_mboards >= \$num_mboards</check>
- <check>\$num_mboards > 0</check>
- <check>\$nchan >= \$num_mboards</check>
- <check>(not \$stream_chans()) or (\$nchan == len(\$stream_chans))</check>
- #for $n in range($max_nchan)
- <check>(\$norm_gain${n} and \$gain${n} &gt;= 0 and \$gain${n} &lt;= 1) or not \$norm_gain${n}</check>
- #end for
- <sink>
- <name>command</name>
- <type>message</type>
- <optional>1</optional>
- <hide>\$hide_cmd_port</hide>
- </sink>
- <$sourk>
- <name>$direction</name>
- <type>\$type.type</type>
- <nports>\$nchan</nports>
- </$sourk>
- <doc>
-The UHD USRP $sourk.title() Block:
-
-Device Address:
-The device address is a delimited string used to locate UHD devices on your system. \\
-If left blank, the first UHD device found will be used. \\
-Use the device address to specify a specific device or list of devices.
-USRP1 Example: serial=12345678
-USRP2 Example: addr=192.168.10.2
-USRP2 Example: addr0=192.168.10.2, addr1=192.168.10.3
-
-$(direction.title()) Type:
-This parameter controls the data type of the stream in gnuradio.
-
-Wire Format:
-This parameter controls the form of the data over the bus/network. \
-Complex bytes may be used to trade off precision for bandwidth. \
-Not all formats are supported on all devices.
-
-Stream Args:
-Optional arguments to be passed in the UHD streamer object. \
-Streamer args is a list of key/value pairs; usage is determined by the implementation.
-Ex: the scalar key affects the scaling between 16 and 8 bit integers in sc8 wire format.
-
-Num Motherboards:
-Selects the number of USRP motherboards in this device configuration.
-
-Reference Source:
-Where the motherboard should sync its time and clock references.
-If source and sink blocks reference the same device,
-it is only necessary to set the reference source on one of the blocks.
-
-Subdevice specification:
-Each motherboard should have its own subdevice specification \\
-and all subdevice specifications should be the same length. \\
-Select the subdevice or subdevices for each channel using a markup string. \\
-The markup string consists of a list of dboard_slot:subdev_name pairs (one pair per channel). \\
-If left blank, the UHD will try to select the first subdevice on your system. \\
-See the application notes for further details.
-Single channel example: :AB
-Dual channel example: :A :B
-
-Num Channels:
-Selects the total number of channels in this multi-USRP configuration.
-Ex: 4 motherboards with 2 channels per board = 8 channels total
-
-Sample rate:
-The sample rate is the number of samples per second input by this block. \\
-The UHD device driver will try its best to match the requested sample rate. \\
-If the requested rate is not possible, the UHD block will print an error at runtime.
-
-Center frequency:
-The center frequency is the overall frequency of the RF chain. \\
-For greater control of how the UHD tunes elements in the RF chain, \\
+id: uhd_usrp_sink
+label: 'UHD: USRP ${sourk.title()}'
+flags: throttle
+
+parameters:
+- id: type
+ label: ${'$'}{direction.title()}put Type
+ dtype: enum
+ options: [fc32, sc16, item32]
+ option_labels: [Complex float32, Complex int16, VITA word32]
+ option_attributes:
+ type: [fc32, sc16, s32]
+ hide: part
+- id: otw
+ label: Wire Format
+ dtype: enum
+ options: ['', sc16, sc12, sc8]
+ option_labels: [Automatic, Complex int16, Complex int12, Complex int8]
+ hide: ${'$'}{ 'none' if otw else 'part'}
+- id: stream_args
+ label: Stream args
+ dtype: string
+ options: [peak=0.003906]
+ option_labels: [peak=0.003906]
+ hide: ${'$'}{ 'none' if stream_args else 'part'}
+- id: stream_chans
+ label: Stream channels
+ dtype: int_vector
+ default: '[]'
+ hide: ${'$'}{ 'none' if stream_chans else 'part'}
+- id: dev_addr
+ label: Device Address
+ dtype: string
+ default: '""'
+ hide: ${'$'}{ 'none' if dev_addr else 'part'}
+- id: dev_args
+ label: Device Arguments
+ dtype: string
+ default: '""'
+ hide: ${'$'}{ 'none' if dev_args else 'part'}
+- id: sync
+ label: Sync
+ dtype: enum
+ options: [sync, pc_clock, '']
+ option_labels: [unknown PPS, PC Clock, don't sync]
+ hide: ${'$'}{ 'none' if sync else 'part'}
+- id: clock_rate
+ label: Clock Rate (Hz)
+ dtype: real
+ default: '0.0'
+ options: ['0.0', 200e6, 184.32e6, 120e6, 30.72e6]
+ option_labels: [Default, 200 MHz, 184.32 MHz, 120 MHz, 30.72 MHz]
+ hide: ${'$'}{ 'none' if clock_rate else 'part' }
+- id: num_mboards
+ label: Num Mboards
+ dtype: int
+ default: '1'
+ options: ['1', '2', '3', '4', '5', '6', '7', '8']
+ hide: part
+% for m in range(max_mboards):
+- id: clock_source${m}
+ label: 'Mb${m}: Clock Source'
+ dtype: string
+ options: ['', internal, external, mimo, gpsdo]
+ option_labels: [Default, Internal, External, MIMO Cable, O/B GPSDO]
+ hide: ${'$'}{ 'all' if not (num_mboards > ${m}) else ( 'none' if clock_source${m}) else 'part')}
+- id: time_source${m}
+ label: 'Mb${m}: Time Source'
+ dtype: string
+ options: ['', external, mimo, gpsdo]
+ option_labels: [Default, External, MIMO Cable, O/B GPSDO]
+ hide: ${'$'}{ 'all' if not (num_mboards > ${m}) else ('none' if time_source${m}) else 'part')}
+- id: sd_spec${m}
+ label: 'Mb${m}: Subdev Spec'
+ dtype: string
+ hide: ${'$'}{ 'all' if not (num_mboards > ${m}) else ('none' if sd_spec${m}) else 'part')}
+% endfor
+- id: nchan
+ label: Num Channels
+ dtype: int
+ default: 1
+ options: [ ${", ".join([str(n) for n in range(1, max_nchan+1)])} ]
+ hide: part
+- id: samp_rate
+ label: Smp rate (Sps)
+ dtype: real
+${params}
+
+
+
+inputs:
+- domain: message
+ id: command
+ optional: true
+ hide: ${'$'}{hide_cmd_port}
+% if sourk == 'sink':
+- domain: stream
+% else:
+
+outputs:
+- domain: stream
+% endif
+ dtype: ${'$'}{type.type}
+ multiplicity: ${'$'}{nchan}
+
+templates:
+ imports: |-
+ from gnuradio import uhd
+ import time
+ make: |
+ uhd.usrp_sink(
+ ",".join((${'$'}{dev_addr}, ${'$'}{dev_args})),
+ uhd.stream_args(
+ cpu_format="${'$'}{type}",
+ ${'%'} if otw:
+ otw_format=${'$'}{otw},
+ ${'%'} endif
+ ${'%'} if stream_args:
+ args=${'$'}{stream_args},
+ ${'%'} endif
+ ${'%'} if stream_chans:
+ channels=${'$'}{stream_chans},
+ ${'%'} else:
+ channels=range(${'$'}{nchan}),
+ ${'%'} endif
+ ),
+ ${'%'} if len_tag_name:
+ ${'$'}{len_tag_name},
+ ${'%'} endif
+ )
+ ${'%'} if clock_rate:
+ self.${'$'}{id}.set_clock_rate(${'$'}{clock_rate}, uhd.ALL_MBOARDS)
+ ${'%'} endif
+ self.${'$'}{id}.set_samp_rate(${'$'}{samp_rate})
+ ${'%'} if sync == 'sync':
+ self.${'$'}{id}.set_time_unknown_pps(uhd.time_spec())
+ #elif ${'$'}{sync} == 'pc_clock'
+ self.${'$'}{id}.set_time_now(uhd.time_spec(time.time()), uhd.ALL_MBOARDS)
+ ${'%'} endif
+ callbacks:
+ - set_samp_rate(${'$'}{samp_rate})
+ % for n in range(max_nchan):
+ - set_center_freq(${'center_freq' + str(n)}, ${n})
+ - self.${'$'}{id}.set_${'$'}{'normalized_' if eval('norm_gain' + str(n))}gain(gain${n}, ${n})
+ - ${'$'}{'set_lo_source(lo_source${n}, uhd.ALL_LOS, ${n})' if not hide_lo_controls()}
+ - ${'$'}{'set_lo_export_enabled(lo_export${n}, uhd.ALL_LOS, ${n})' if not hide_lo_controls()}
+ - set_antenna(${'ant' + str(n)}, ${n})
+ - set_bandwidth(${'bw' + str(n)}, ${n})
+ % endfor
+
+
+documentation: |-
+ The UHD USRP ${sourk.title()} Block:
+
+ Device Address:
+ The device address is a delimited string used to locate UHD devices on your system. \\
+ If left blank, the first UHD device found will be used. \\
+ Use the device address to specify a specific device or list of devices.
+ USRP1 Example: serial=12345678
+ USRP2 Example: addr=192.168.10.2
+ USRP2 Example: addr0=192.168.10.2, addr1=192.168.10.3
+
+ ${direction.title()} Type:
+ This parameter controls the data type of the stream in gnuradio.
+
+ Wire Format:
+ This parameter controls the form of the data over the bus/network. \
+ Complex bytes may be used to trade off precision for bandwidth. \
+ Not all formats are supported on all devices.
+
+ Stream Args:
+ Optional arguments to be passed in the UHD streamer object. \
+ Streamer args is a list of key/value pairs; usage is determined by the implementation.
+ Ex: the scalar key affects the scaling between 16 and 8 bit integers in sc8 wire format.
+
+ Num Motherboards:
+ Selects the number of USRP motherboards in this device configuration.
+
+ Reference Source:
+ Where the motherboard should sync its time and clock references.
+ If source and sink blocks reference the same device,
+ it is only necessary to set the reference source on one of the blocks.
+
+ Subdevice specification:
+ Each motherboard should have its own subdevice specification \\
+ and all subdevice specifications should be the same length. \\
+ Select the subdevice or subdevices for each channel using a markup string. \\
+ The markup string consists of a list of dboard_slot:subdev_name pairs (one pair per channel). \\
+ If left blank, the UHD will try to select the first subdevice on your system. \\
+ See the application notes for further details.
+ Single channel example: :AB
+ Dual channel example: :A :B
+
+ Num Channels:
+ Selects the total number of channels in this multi-USRP configuration.
+ Ex: 4 motherboards with 2 channels per board = 8 channels total
+
+ Sample rate:
+ The sample rate is the number of samples per second input by this block. \\
+ The UHD device driver will try its best to match the requested sample rate. \\
+ If the requested rate is not possible, the UHD block will print an error at runtime.
+
+ Center frequency:
+ The center frequency is the overall frequency of the RF chain. \\
+ For greater control of how the UHD tunes elements in the RF chain, \\
pass a tune_request object rather than a simple target frequency.
-Tuning with an LO offset example: uhd.tune_request(freq, lo_off)
-Tuning without DSP: uhd.tune_request(target_freq, dsp_freq=0, \\
+ Tuning with an LO offset example: uhd.tune_request(freq, lo_off)
+ Tuning without DSP: uhd.tune_request(target_freq, dsp_freq=0, \\
dsp_freq_policy=uhd.tune_request.POLICY_MANUAL)
-Antenna:
-For subdevices with only one antenna, this may be left blank. \\
-Otherwise, the user should specify one of the possible antenna choices. \\
-See the daughterboard application notes for the possible antenna choices.
+ Antenna:
+ For subdevices with only one antenna, this may be left blank. \\
+ Otherwise, the user should specify one of the possible antenna choices. \\
+ See the daughterboard application notes for the possible antenna choices.
+
+ Bandwidth:
+ To use the default bandwidth filter setting, this should be zero. \\
+ Only certain subdevices have configurable bandwidth filters. \\
+ See the daughterboard application notes for possible configurations.
-Bandwidth:
-To use the default bandwidth filter setting, this should be zero. \\
-Only certain subdevices have configurable bandwidth filters. \\
-See the daughterboard application notes for possible configurations.
+ Length tag key (Sink only):
+ When a nonempty string is given, the USRP sink will look for length tags \\
+ to determine transmit burst lengths.
-Length tag key (Sink only):
-When a nonempty string is given, the USRP sink will look for length tags \\
-to determine transmit burst lengths.
+ See the UHD manual for more detailed documentation:
+ http://uhd.ettus.com
-See the UHD manual for more detailed documentation:
-http://uhd.ettus.com
- </doc>
-</block>
+file_format: 1
"""
-PARAMS_TMPL = """ <param>
- <name>Ch$(n): Center Freq (Hz)</name>
- <key>center_freq$(n)</key>
- <value>0</value>
- <type>real</type>
- <hide>\#if \$nchan() > $n then 'none' else 'all'#</hide>
- <tab>RF Options</tab>
- </param>
- <param>
- <name>Ch$(n): Gain Value</name>
- <key>gain$(n)</key>
- <value>0</value>
- <type>float</type>
- <hide>\#if \$nchan() > $n then 'none' else 'all'#</hide>
- <tab>RF Options</tab>
- </param>
- <param>
- <name>Ch$(n): Gain Type</name>
- <key>norm_gain$(n)</key>
- <value>False</value>
- <type>bool</type>
- <hide>\#if \$nchan() &lt;= $n
- all
- \#elif bool(\$norm_gain${n}())
- none
- \#else
- part
- \#end if</hide>
- <option>
- <name>Absolute (dB)</name>
- <key>False</key>
- </option>
- <option>
- <name>Normalized</name>
- <key>True</key>
- </option>
- <tab>RF Options</tab>
- </param>
- <param>
- <name>Ch$(n): Antenna</name>
- <key>ant$(n)</key>
- <value></value>
- <type>string</type>
- <hide>
- \#if not \$nchan() > $n
- all
- \#elif \$ant$(n)()
- none
- \#else
- part
- \#end if
- </hide>
- <option>
- <name>TX/RX</name>
- <key>TX/RX</key>
- </option>
-#if $sourk == 'source'
- <option>
- <name>RX2</name>
- <key>RX2</key>
- </option>
- <option>
- <name>RX1</name>
- <key>RX1</key>
- </option>
-#end if
- <tab>RF Options</tab>
- </param>
- <param>
- <name>Ch$(n): Bandwidth (Hz)</name>
- <key>bw$(n)</key>
- <value>0</value>
- <type>real</type>
- <hide>
- \#if not \$nchan() > $n
- all
- \#elif \$bw$(n)()
- none
- \#else
- part
- \#end if
- </hide>
- <tab>RF Options</tab>
- </param>
-#if $sourk == 'source'
- <param>
- <name>Ch$(n): LO Source</name>
- <key>lo_source$(n)</key>
- <value>internal</value>
- <type>string</type>
- <hide>
- \#if not \$nchan() > $n
- all
- \#elif \$hide_lo_controls()
- all
- \#else
- none
- \#end if
- </hide>
- <option>
- <name>Internal</name>
- <key>internal</key>
- </option>
- <option>
- <name>External</name>
- <key>external</key>
- </option>
- <option>
- <name>Companion</name>
- <key>companion</key>
- </option>
- <tab>RF Options</tab>
- </param>
-#end if
-#if $sourk == 'source'
- <param>
- <name>Ch$(n): LO Export</name>
- <key>lo_export$(n)</key>
- <value>False</value>
- <type>bool</type>
- <hide>
- \#if not \$nchan() > $n
- all
- \#elif \$hide_lo_controls()
- all
- \#else
- none
- \#end if
- </hide>
- <option>
- <name>True</name>
- <key>True</key>
- </option>
- <option>
- <name>False</name>
- <key>False</key>
- </option>
- <tab>RF Options</tab>
- </param>
-#end if
-#if $sourk == 'source'
- <param>
- <name>Ch$(n): Enable DC Offset Correction</name>
- <key>dc_offs_enb$(n)</key>
- <value>""</value>
- <type>raw</type>
- <hide>
- \#if not \$nchan() > $n
- all
- \#else
- part
- \#end if
- </hide>
- <tab>FE Corrections</tab>
- </param>
- <param>
- <name>Ch$(n): Enable IQ Imbalance Correction</name>
- <key>iq_imbal_enb$(n)</key>
- <value>""</value>
- <type>raw</type>
- <hide>
- \#if not \$nchan() > $n
- all
- \#else
- part
- \#end if
- </hide>
- <tab>FE Corrections</tab>
- </param>
-#end if
+PARAMS_TMPL = """
+- id: center_freq${n}
+ label: 'Ch${n}: Center Freq (Hz)'
+ category: RF Options
+ dtype: real
+ default: '0'
+ hide: ${'$'}{ 'none' if (nchan > ${n}) else 'all' }
+- id: gain${n}
+ label: 'Ch${n}: Gain Value'
+ category: RF Options
+ dtype: float
+ default: '0'
+ hide: ${'$'}{ 'none' if nchan > ${n} else 'all' }
+- id: norm_gain${n}
+ label: 'Ch${n}: Gain Type'
+ category: RF Options
+ dtype: bool
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: [Absolute (dB), Normalized]
+ hide: ${'$'}{ 'all' if nchan <= ${n} else ('none' if bool(eval('norm_gain' + str(n))) else 'part')}
+- id: ant${n}
+ label: 'Ch${n}: Antenna'
+ category: RF Options
+ dtype: string
+% if sourk == 'source':
+ options: [TX/RX, RX2, RX1]
+ option_labels: [TX/RX, RX2, RX1]
+% else:
+ options: [TX/RX]
+ option_labels: [TX/RX]
+% endif
+ hide: ${'$'}{ 'all' if not nchan > ${n} else ('none' if eval('ant' + str(n)) else 'part')}
+- id: bw${n}
+ label: 'Ch${n}: Bandwidth (Hz)'
+ category: RF Options
+ dtype: real
+ default: '0'
+ hide: ${'$'}{ 'all' if not nchan > ${n} else ('none' if eval('bw' + str(n)) else 'part')}
+% if sourk == 'source':
+- id: lo_source${n}
+ label: 'Ch${n}: LO Source'
+ category: RF Options
+ dtype: string
+ default: internal
+ options: [internal, external, companion]
+ hide: ${'$'}{ 'all' if not nchan > ${n} else ('all' if hide_lo_controls else 'none')}
+- id: lo_export
+ label: 'Ch${n}: LO Export'
+ category: RF Options
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ hide: ${'$'}{ 'all' if not nchan > ${n} else ('all' if hide_lo_controls else 'none')}
+- id: dc_offs_enb${n}
+ label: 'Ch${n}: Enable DC Offset Correction'
+ category: FE Corrections
+ dtype: raw
+ default: '""'
+ hide: ${'$'}{ 'all' if not nchan > ${n} else 'part'}
+- id: iq_imbal_enb${n}
+ label: 'Ch${n}: Enable IQ Imbalance Correction'
+ category: FE Corrections
+ dtype: raw
+ default: '""'
+ hide: ${'$'}{ 'all' if not nchan > ${n} else 'part'}
+% endif
"""
SHOW_CMD_PORT_PARAM = """
- <param>
- <name>Show Command Port</name>
- <key>hide_cmd_port</key>
- <value>False</value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>False</key>
- </option>
- <option>
- <name>No</name>
- <key>True</key>
- </option>
- <tab>Advanced</tab>
- </param>
+- id: hide_cmd_port
+ label: Show Command Port
+ category: Advanced
+ dtype: enum
+ default: 'False'
+ options: ['False', 'True']
+ option_labels: ['Yes', 'No']
+ hide: part
"""
SHOW_LO_CONTROLS_PARAM = """
- <param>
- <name>Show LO Controls</name>
- <key>hide_lo_controls</key>
- <value>True</value>
- <type>bool</type>
- <hide>part</hide>
- <option>
- <name>Yes</name>
- <key>False</key>
- </option>
- <option>
- <name>No</name>
- <key>True</key>
- </option>
- <tab>Advanced</tab>
- </param>
+- id: hide_lo_controls
+ label: Show LO Controls
+ category: Advanced
+ dtype: bool
+ default: 'True'
+ options: ['False', 'True']
+ option_labels: ['Yes', 'No']
+ hide: part
"""
-TSBTAG_PARAM = """ <param>
- <name>TSB tag name</name>
- <key>len_tag_name</key>
- <value></value>
- <type>string</type>
- <hide>\#if len(str(\$len_tag_name())) then 'none' else 'part'#</hide>
- </param>"""
+TSBTAG_PARAM = """
+- id: len_tag_name
+ label: TSB tag name
+ dtype: string
+ hide: ${ 'none' if len(str(len_tag_name)) else 'part'}
+"""
TSBTAG_ARG = """
- #if $len_tag_name()
- $len_tag_name,
- #end if"""
+${'%'} if len_tag_name():
+${'$'}{len_tag_name},
+${'%'} endif
+"""
def parse_tmpl(_tmpl, **kwargs):
- from Cheetah import Template
- return str(Template.Template(_tmpl, kwargs))
+ from mako.template import Template
+ block_template = Template(_tmpl)
+ return str(block_template.render(**kwargs))
max_num_mboards = 8
max_num_channels = max_num_mboards*4
@@ -689,13 +364,13 @@ max_num_channels = max_num_mboards*4
if __name__ == '__main__':
import sys
for file in sys.argv[1:]:
- if file.endswith ('source.xml'):
+ if file.endswith ('source.block.yml'):
sourk = 'source'
direction = 'out'
- elif file.endswith ('sink.xml'):
+ elif file.endswith ('sink.block.yml'):
sourk = 'sink'
direction = 'in'
- else: raise Exception('is %s a source or sink?'%file)
+ else: raise Exception('is % a source or sink?'%file)
params = ''.join([parse_tmpl(PARAMS_TMPL, n=n, sourk=sourk) for n in range(max_num_channels)])
params += SHOW_CMD_PORT_PARAM
@@ -704,6 +379,7 @@ if __name__ == '__main__':
params += TSBTAG_PARAM
lentag_arg = TSBTAG_ARG
else: lentag_arg = ''
+
open(file, 'w').write(parse_tmpl(MAIN_TMPL,
lentag_arg=lentag_arg,
max_nchan=max_num_channels,
diff --git a/gr-uhd/grc/uhd.tree.yml b/gr-uhd/grc/uhd.tree.yml
new file mode 100644
index 0000000000..a4d140d779
--- /dev/null
+++ b/gr-uhd/grc/uhd.tree.yml
@@ -0,0 +1,5 @@
+'[Core]':
+- UHD:
+ - uhd_usrp_source
+ - uhd_usrp_sink
+ - uhd_amsg_source
diff --git a/gr-uhd/grc/uhd_amsg_source.block.yml b/gr-uhd/grc/uhd_amsg_source.block.yml
new file mode 100644
index 0000000000..b07ab77913
--- /dev/null
+++ b/gr-uhd/grc/uhd_amsg_source.block.yml
@@ -0,0 +1,18 @@
+id: uhd_amsg_source
+label: 'UHD: USRP Async Msg Source'
+
+parameters:
+- id: dev_addr
+ label: Device Addr
+ dtype: string
+ hide: ${ 'none' if dev_addr else 'part' }
+
+outputs:
+- domain: stream
+ dtype: msg
+
+templates:
+ imports: from gnuradio import uhd
+ make: uhd.amsg_source(device_addr=${dev_addr}, msgq=${id}_msgq_out)
+
+file_format: 1
diff --git a/gr-uhd/grc/uhd_amsg_source.xml b/gr-uhd/grc/uhd_amsg_source.xml
deleted file mode 100644
index 78c9d7b58e..0000000000
--- a/gr-uhd/grc/uhd_amsg_source.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>UHD: USRP Async Msg Source</name>
- <key>uhd_amsg_source</key>
- <import>from gnuradio import uhd</import>
- <make>uhd.amsg_source(device_addr=$dev_addr, msgq=$(id)_msgq_out)</make>
- <param>
- <name>Device Addr</name>
- <key>dev_addr</key>
- <value></value>
- <type>string</type>
- <hide>
- #if $dev_addr()
- none
- #else
- part
- #end if
- </hide>
- </param>
- <source>
- <name>out</name>
- <type>msg</type>
- </source>
-</block>
diff --git a/gr-uhd/grc/uhd_block_tree.xml b/gr-uhd/grc/uhd_block_tree.xml
deleted file mode 100644
index c598645526..0000000000
--- a/gr-uhd/grc/uhd_block_tree.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Block Tree for uhd blocks.
-###################################################
- -->
-<cat>
- <name>[Core]</name> <!-- Blank for Root Name -->
- <cat>
- <name>UHD</name>
- <block>uhd_usrp_source</block>
- <block>uhd_usrp_sink</block>
- <block>uhd_amsg_source</block>
- </cat>
-</cat>
diff --git a/gr-video-sdl/grc/CMakeLists.txt b/gr-video-sdl/grc/CMakeLists.txt
index f62d41b6db..f72c9e3576 100644
--- a/gr-video-sdl/grc/CMakeLists.txt
+++ b/gr-video-sdl/grc/CMakeLists.txt
@@ -18,8 +18,8 @@
# Boston, MA 02110-1301, USA.
install(FILES
- video_sdl_sink.xml
- video_block_tree.xml
+ video_sdl_sink.block.yml
+ video.tree.yml
DESTINATION share/gnuradio/grc/blocks
)
diff --git a/gr-video-sdl/grc/video.tree.yml b/gr-video-sdl/grc/video.tree.yml
new file mode 100644
index 0000000000..566de33ecc
--- /dev/null
+++ b/gr-video-sdl/grc/video.tree.yml
@@ -0,0 +1,3 @@
+'[Core]':
+- Video:
+ - video_sdl_sink
diff --git a/gr-video-sdl/grc/video_block_tree.xml b/gr-video-sdl/grc/video_block_tree.xml
deleted file mode 100644
index f4f3e4199c..0000000000
--- a/gr-video-sdl/grc/video_block_tree.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Block Tree for video blocks.
-###################################################
- -->
-<cat>
- <name>[Core]</name>
- <cat>
- <name>Video</name>
- <block>video_sdl_sink</block>
- </cat>
-</cat>
diff --git a/gr-video-sdl/grc/video_sdl_sink.block.yml b/gr-video-sdl/grc/video_sdl_sink.block.yml
new file mode 100644
index 0000000000..cc3b9949b0
--- /dev/null
+++ b/gr-video-sdl/grc/video_sdl_sink.block.yml
@@ -0,0 +1,61 @@
+id: video_sdl_sink
+label: Video SDL Sink
+
+parameters:
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [byte, short]
+ option_attributes:
+ fcn: [uc, s]
+ hide: part
+- id: width
+ label: Input Width
+ dtype: int
+ default: '640'
+- id: height
+ label: Input Height
+ dtype: int
+ default: '480'
+- id: display_width
+ label: Display Width
+ dtype: int
+ default: '640'
+- id: display_height
+ label: Display Height
+ dtype: int
+ default: '480'
+- id: fps
+ label: Framerate
+ dtype: float
+ default: '0'
+- id: num_channels
+ label: Channels
+ dtype: enum
+ options: ['1', '2', '3']
+ option_labels: [1 (Grayscale), '2 (Y, alternating pixels U and V)', 3 (YUV)]
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: 1
+ multiplicity: ${ num_channels }
+
+templates:
+ imports: from gnuradio import video_sdl
+ make: video_sdl.sink_${type.fcn}(${fps}, ${width}, ${height}, 0, ${display_width},
+ ${display_height})
+
+documentation: |-
+ Provides a rudimentary on-screen video display using libsdl.
+
+ A framerate of zero means video will be displayed as quickly as possible.
+
+ In 1-channel mode, input data is assumed to be grayscale, with each input item mapping to a single pixel.
+
+ In 2-channel mode, the first channel is Y for every pixel while the second channel alternates between pixels values for U and V.
+
+ In 3-channel mode, input channels are assumed to be matching triples of YUV values, one byte per pixel, per channel.
+
+file_format: 1
diff --git a/gr-video-sdl/grc/video_sdl_sink.xml b/gr-video-sdl/grc/video_sdl_sink.xml
deleted file mode 100644
index 02ad089aff..0000000000
--- a/gr-video-sdl/grc/video_sdl_sink.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version='1.0'?>
-<block>
- <name>Video SDL Sink</name>
- <key>video_sdl_sink</key>
- <import>from gnuradio import video_sdl</import>
- <make>video_sdl.sink_$(type.fcn)($fps, $width, $height, 0, $display_width, $display_height)</make>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:uc</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:s</opt>
- </option>
- </param>
- <param>
- <name>Input Width</name>
- <key>width</key>
- <value>640</value>
- <type>int</type>
- </param>
- <param>
- <name>Input Height</name>
- <key>height</key>
- <value>480</value>
- <type>int</type>
- </param>
- <param>
- <name>Display Width</name>
- <key>display_width</key>
- <value>640</value>
- <type>int</type>
- </param>
- <param>
- <name>Display Height</name>
- <key>display_height</key>
- <value>480</value>
- <type>int</type>
- </param>
- <param>
- <name>Framerate</name>
- <key>fps</key>
- <value>0</value>
- <type>float</type>
- </param>
- <param>
- <name>Channels</name>
- <key>num_channels</key>
- <type>enum</type>
- <option>
- <name>1 (Grayscale)</name>
- <key>1</key>
- </option>
- <option>
- <name>2 (Y, alternating pixels U and V)</name>
- <key>2</key>
- </option>
- <option>
- <name>3 (YUV)</name>
- <key>3</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>1</vlen>
- <nports>$num_channels</nports>
- </sink>
- <doc>
-Provides a rudimentary on-screen video display using libsdl.
-
-A framerate of zero means video will be displayed as quickly as possible.
-
-In 1-channel mode, input data is assumed to be grayscale, with each input item mapping to a single pixel.
-
-In 2-channel mode, the first channel is Y for every pixel while the second channel alternates between pixels values for U and V.
-
-In 3-channel mode, input channels are assumed to be matching triples of YUV values, one byte per pixel, per channel.
- </doc>
-</block>
diff --git a/gr-vocoder/grc/CMakeLists.txt b/gr-vocoder/grc/CMakeLists.txt
index eef52179cb..1d85c69ab1 100644
--- a/gr-vocoder/grc/CMakeLists.txt
+++ b/gr-vocoder/grc/CMakeLists.txt
@@ -18,36 +18,35 @@
# Boston, MA 02110-1301, USA.
install(FILES
- vocoder_alaw_decode_bs.xml
- vocoder_alaw_encode_sb.xml
- vocoder_block_tree.xml
- vocoder_cvsd_decode_bs.xml
- vocoder_cvsd_decode.xml
- vocoder_cvsd_encode_sb.xml
- vocoder_cvsd_encode.xml
- vocoder_g721_decode_bs.xml
- vocoder_g721_encode_sb.xml
- vocoder_g723_24_decode_bs.xml
- vocoder_g723_24_encode_sb.xml
- vocoder_g723_40_decode_bs.xml
- vocoder_g723_40_encode_sb.xml
- vocoder_ulaw_decode_bs.xml
- vocoder_ulaw_encode_sb.xml
+ vocoder_alaw_decode_bs.block.yml
+ vocoder_alaw_encode_sb.block.yml
+ vocoder_cvsd_decode_bs.block.yml
+ vocoder_cvsd_decode.block.yml
+ vocoder_cvsd_encode_sb.block.yml
+ vocoder_cvsd_encode.block.yml
+ vocoder_g721_decode_bs.block.yml
+ vocoder_g721_encode_sb.block.yml
+ vocoder_g723_24_decode_bs.block.yml
+ vocoder_g723_24_encode_sb.block.yml
+ vocoder_g723_40_decode_bs.block.yml
+ vocoder_g723_40_encode_sb.block.yml
+ vocoder_ulaw_decode_bs.block.yml
+ vocoder_ulaw_encode_sb.block.yml
DESTINATION ${GRC_BLOCKS_DIR}
)
if(LIBCODEC2_FOUND)
install(FILES
- vocoder_codec2_decode_ps.xml
- vocoder_codec2_encode_sp.xml
+ vocoder_codec2_decode_ps.block.yml
+ vocoder_codec2_encode_sp.block.yml
DESTINATION ${GRC_BLOCKS_DIR}
)
endif(LIBCODEC2_FOUND)
if(LIBCODEC2_HAS_FREEDV_API)
install(FILES
- vocoder_freedv_rx_ss.xml
- vocoder_freedv_tx_ss.xml
+ vocoder_freedv_rx_ss.block.yml
+ vocoder_freedv_tx_ss.block.yml
DESTINATION ${GRC_BLOCKS_DIR}
COMPONENT "vocoder_python"
)
@@ -55,8 +54,8 @@ endif(LIBCODEC2_HAS_FREEDV_API)
if(LIBGSM_FOUND)
install(FILES
- vocoder_gsm_fr_decode_ps.xml
- vocoder_gsm_fr_encode_sp.xml
+ vocoder_gsm_fr_decode_ps.block.yml
+ vocoder_gsm_fr_encode_sp.block.yml
DESTINATION ${GRC_BLOCKS_DIR}
)
endif(LIBGSM_FOUND)
diff --git a/gr-vocoder/grc/CMakeLists.txt.orig b/gr-vocoder/grc/CMakeLists.txt.orig
index fd320545ad..fb2cc5053e 100644
--- a/gr-vocoder/grc/CMakeLists.txt.orig
+++ b/gr-vocoder/grc/CMakeLists.txt.orig
@@ -18,36 +18,36 @@
# Boston, MA 02110-1301, USA.
install(FILES
- vocoder_alaw_decode_bs.xml
- vocoder_alaw_encode_sb.xml
- vocoder_block_tree.xml
- vocoder_cvsd_decode_bs.xml
- vocoder_cvsd_decode.xml
- vocoder_cvsd_encode_sb.xml
- vocoder_cvsd_encode.xml
- vocoder_g721_decode_bs.xml
- vocoder_g721_encode_sb.xml
- vocoder_g723_24_decode_bs.xml
- vocoder_g723_24_encode_sb.xml
- vocoder_g723_40_decode_bs.xml
- vocoder_g723_40_encode_sb.xml
- vocoder_ulaw_decode_bs.xml
- vocoder_ulaw_encode_sb.xml
+ vocoder_alaw_decode_bs.block.yml
+ vocoder_alaw_encode_sb.block.yml
+ vocoder_block_tree.block.yml
+ vocoder_cvsd_decode_bs.block.yml
+ vocoder_cvsd_decode.block.yml
+ vocoder_cvsd_encode_sb.block.yml
+ vocoder_cvsd_encode.block.yml
+ vocoder_g721_decode_bs.block.yml
+ vocoder_g721_encode_sb.block.yml
+ vocoder_g723_24_decode_bs.block.yml
+ vocoder_g723_24_encode_sb.block.yml
+ vocoder_g723_40_decode_bs.block.yml
+ vocoder_g723_40_encode_sb.block.yml
+ vocoder_ulaw_decode_bs.block.yml
+ vocoder_ulaw_encode_sb.block.yml
DESTINATION ${GRC_BLOCKS_DIR}
)
if(LIBCODEC2_FOUND)
install(FILES
- vocoder_codec2_decode_ps.xml
- vocoder_codec2_encode_sp.xml
+ vocoder_codec2_decode_ps.block.yml
+ vocoder_codec2_encode_sp.block.yml
DESTINATION ${GRC_BLOCKS_DIR}
)
endif(LIBCODEC2_FOUND)
if(LIBGSM_FOUND)
install(FILES
- vocoder_gsm_fr_decode_ps.xml
- vocoder_gsm_fr_encode_sp.xml
+ vocoder_gsm_fr_decode_ps.block.yml
+ vocoder_gsm_fr_encode_sp.block.yml
DESTINATION ${GRC_BLOCKS_DIR}
)
endif(LIBGSM_FOUND)
diff --git a/gr-vocoder/grc/vocoder.tree.yml b/gr-vocoder/grc/vocoder.tree.yml
new file mode 100644
index 0000000000..bdcf2de462
--- /dev/null
+++ b/gr-vocoder/grc/vocoder.tree.yml
@@ -0,0 +1,22 @@
+'[Core]':
+- Audio:
+ - vocoder_alaw_decode_bs
+ - vocoder_alaw_encode_sb
+ - vocoder_codec2_decode_ps
+ - vocoder_codec2_encode_sp
+ - vocoder_cvsd_decode_bs
+ - vocoder_cvsd_encode_sb
+ - vocoder_cvsd_decode_bf
+ - vocoder_cvsd_encode_fb
+ - vocoder_freedv_tx_ss
+ - vocoder_freedv_rx_ss
+ - vocoder_g721_decode_bs
+ - vocoder_g721_encode_sb
+ - vocoder_g723_24_decode_bs
+ - vocoder_g723_24_encode_sb
+ - vocoder_g723_40_decode_bs
+ - vocoder_g723_40_encode_sb
+ - vocoder_gsm_fr_decode_ps
+ - vocoder_gsm_fr_encode_sp
+ - vocoder_ulaw_decode_bs
+ - vocoder_ulaw_encode_sb
diff --git a/gr-vocoder/grc/vocoder_alaw_decode_bs.block.yml b/gr-vocoder/grc/vocoder_alaw_decode_bs.block.yml
new file mode 100644
index 0000000000..f4e7e92e56
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_alaw_decode_bs.block.yml
@@ -0,0 +1,16 @@
+id: vocoder_alaw_decode_bs
+label: Alaw Audio Decoder
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: short
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.alaw_decode_bs()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_alaw_decode_bs.xml b/gr-vocoder/grc/vocoder_alaw_decode_bs.xml
deleted file mode 100644
index 776187d4de..0000000000
--- a/gr-vocoder/grc/vocoder_alaw_decode_bs.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Alaw audio decoder
-###################################################
- -->
-<block>
- <name>Alaw Audio Decoder</name>
- <key>vocoder_alaw_decode_bs</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.alaw_decode_bs()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>short</type>
- </source>
-</block>
diff --git a/gr-vocoder/grc/vocoder_alaw_encode_sb.block.yml b/gr-vocoder/grc/vocoder_alaw_encode_sb.block.yml
new file mode 100644
index 0000000000..8a688ed963
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_alaw_encode_sb.block.yml
@@ -0,0 +1,16 @@
+id: vocoder_alaw_encode_sb
+label: g711 Alaw Audio Encoder
+
+inputs:
+- domain: stream
+ dtype: short
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.alaw_encode_sb()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_alaw_encode_sb.xml b/gr-vocoder/grc/vocoder_alaw_encode_sb.xml
deleted file mode 100644
index 728158eec7..0000000000
--- a/gr-vocoder/grc/vocoder_alaw_encode_sb.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Alaw audio encoder
-###################################################
- -->
-<block>
- <name>g711 Alaw Audio Encoder</name>
- <key>vocoder_alaw_encode_sb</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.alaw_encode_sb()</make>
- <sink>
- <name>in</name>
- <type>short</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
-
-
diff --git a/gr-vocoder/grc/vocoder_block_tree.xml b/gr-vocoder/grc/vocoder_block_tree.xml
deleted file mode 100644
index e47af4cdd5..0000000000
--- a/gr-vocoder/grc/vocoder_block_tree.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2011 Free Software Foundation, Inc.
-
- This file is part of GNU Radio
-
- GNU Radio is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GNU Radio is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Radio; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street,
- Boston, MA 02110-1301, USA.
--->
-
-<!--
-###################################################
-##Block Tree for GR Digital blocks.
-###################################################
- -->
-<cat>
- <name>[Core]</name>
- <cat>
- <name>Audio</name>
- <block>vocoder_alaw_decode_bs</block>
- <block>vocoder_alaw_encode_sb</block>
- <block>vocoder_codec2_decode_ps</block>
- <block>vocoder_codec2_encode_sp</block>
- <block>vocoder_cvsd_decode_bs</block>
- <block>vocoder_cvsd_encode_sb</block>
- <block>vocoder_cvsd_decode_bf</block>
- <block>vocoder_cvsd_encode_fb</block>
- <block>vocoder_freedv_tx_ss</block>
- <block>vocoder_freedv_rx_ss</block>
- <block>vocoder_g721_decode_bs</block>
- <block>vocoder_g721_encode_sb</block>
- <block>vocoder_g723_24_decode_bs</block>
- <block>vocoder_g723_24_encode_sb</block>
- <block>vocoder_g723_40_decode_bs</block>
- <block>vocoder_g723_40_encode_sb</block>
- <block>vocoder_gsm_fr_decode_ps</block>
- <block>vocoder_gsm_fr_encode_sp</block>
- <block>vocoder_ulaw_decode_bs</block>
- <block>vocoder_ulaw_encode_sb</block>
- </cat>
-</cat>
diff --git a/gr-vocoder/grc/vocoder_codec2_decode_ps.block.yml b/gr-vocoder/grc/vocoder_codec2_decode_ps.block.yml
new file mode 100644
index 0000000000..0aec7ec4c1
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_codec2_decode_ps.block.yml
@@ -0,0 +1,30 @@
+id: vocoder_codec2_decode_ps
+label: CODEC2 Audio Decoder
+
+parameters:
+- id: mode
+ label: Bit rate
+ dtype: int
+ default: codec2.MODE_2400
+ options: [codec2.MODE_3200, codec2.MODE_2400, codec2.MODE_1600, codec2.MODE_1400,
+ codec2.MODE_1300, codec2.MODE_1200, codec2.MODE_700, codec2.MODE_700B]
+ option_labels: [3200 bps, 2400 bps, 1600 bps, 1400 bps, 1300 bps, 1200 bps, 700
+ bps, 700B bps]
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: '${ { 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48, 6: 28, 7: 28 }[mode] }'
+
+outputs:
+- domain: stream
+ dtype: short
+
+templates:
+ imports: |-
+ from gnuradio import vocoder
+ from gnuradio.vocoder import codec2
+ make: vocoder.codec2_decode_ps(${mode})
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_codec2_decode_ps.xml b/gr-vocoder/grc/vocoder_codec2_decode_ps.xml
deleted file mode 100644
index 8448dc83df..0000000000
--- a/gr-vocoder/grc/vocoder_codec2_decode_ps.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## CODEC2 audio decoder
-###################################################
- -->
-<block>
- <name>CODEC2 Audio Decoder</name>
- <key>vocoder_codec2_decode_ps</key>
- <import>from gnuradio import vocoder</import>
- <import>from gnuradio.vocoder import codec2</import>
- <make>vocoder.codec2_decode_ps($mode)</make>
- <param>
- <name>Bit rate</name>
- <key>mode</key>
- <value>codec2.MODE_2400</value>
- <type>int</type>
- <option>
- <name>3200 bps</name>
- <key>codec2.MODE_3200</key>
- </option>
- <option>
- <name>2400 bps</name>
- <key>codec2.MODE_2400</key>
- </option>
- <option>
- <name>1600 bps</name>
- <key>codec2.MODE_1600</key>
- </option>
- <option>
- <name>1400 bps</name>
- <key>codec2.MODE_1400</key>
- </option>
- <option>
- <name>1300 bps</name>
- <key>codec2.MODE_1300</key>
- </option>
- <option>
- <name>1200 bps</name>
- <key>codec2.MODE_1200</key>
- </option>
- <option>
- <name>700 bps</name>
- <key>codec2.MODE_700</key>
- </option>
- <option>
- <name>700B bps</name>
- <key>codec2.MODE_700B</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>{ 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48, 6: 28, 7: 28 }[$mode]</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>short</type>
- </source>
-</block>
diff --git a/gr-vocoder/grc/vocoder_codec2_encode_sp.block.yml b/gr-vocoder/grc/vocoder_codec2_encode_sp.block.yml
new file mode 100644
index 0000000000..f03787341c
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_codec2_encode_sp.block.yml
@@ -0,0 +1,30 @@
+id: vocoder_codec2_encode_sp
+label: CODEC2 Audio Encoder
+
+parameters:
+- id: mode
+ label: Bit rate
+ dtype: int
+ default: codec2.MODE_2400
+ options: [codec2.MODE_3200, codec2.MODE_2400, codec2.MODE_1600, codec2.MODE_1400,
+ codec2.MODE_1300, codec2.MODE_1200, codec2.MODE_700, codec2.MODE_700B]
+ option_labels: [3200 bps, 2400 bps, 1600 bps, 1400 bps, 1300 bps, 1200 bps, 700
+ bps, 700B bps]
+ hide: ${ 'part' if vlen == 1 else 'none' }
+
+inputs:
+- domain: stream
+ dtype: short
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: '${ { 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48, 6: 28, 7: 28 }[mode] }'
+
+templates:
+ imports: |-
+ from gnuradio import vocoder
+ from gnuradio.vocoder import codec2
+ make: vocoder.codec2_encode_sp(${mode})
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_codec2_encode_sp.xml b/gr-vocoder/grc/vocoder_codec2_encode_sp.xml
deleted file mode 100644
index f11ad443c6..0000000000
--- a/gr-vocoder/grc/vocoder_codec2_encode_sp.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## CODEC2 audio encoder
-###################################################
- -->
-<block>
- <name>CODEC2 Audio Encoder</name>
- <key>vocoder_codec2_encode_sp</key>
- <import>from gnuradio import vocoder</import>
- <import>from gnuradio.vocoder import codec2</import>
- <make>vocoder.codec2_encode_sp($mode)</make>
- <param>
- <name>Bit rate</name>
- <key>mode</key>
- <value>codec2.MODE_2400</value>
- <type>int</type>
- <option>
- <name>3200 bps</name>
- <key>codec2.MODE_3200</key>
- </option>
- <option>
- <name>2400 bps</name>
- <key>codec2.MODE_2400</key>
- </option>
- <option>
- <name>1600 bps</name>
- <key>codec2.MODE_1600</key>
- </option>
- <option>
- <name>1400 bps</name>
- <key>codec2.MODE_1400</key>
- </option>
- <option>
- <name>1300 bps</name>
- <key>codec2.MODE_1300</key>
- </option>
- <option>
- <name>1200 bps</name>
- <key>codec2.MODE_1200</key>
- </option>
- <option>
- <name>700 bps</name>
- <key>codec2.MODE_700</key>
- </option>
- <option>
- <name>700B bps</name>
- <key>codec2.MODE_700B</key>
- </option>
- </param>
- <sink>
- <name>in</name>
- <type>short</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>{ 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48, 6: 28, 7: 28 }[$mode]</vlen>
- </source>
-</block>
-
diff --git a/gr-vocoder/grc/vocoder_cvsd_decode.block.yml b/gr-vocoder/grc/vocoder_cvsd_decode.block.yml
new file mode 100644
index 0000000000..59d9a7a1be
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_cvsd_decode.block.yml
@@ -0,0 +1,26 @@
+id: vocoder_cvsd_decode_bf
+label: CVSD Decoder
+
+parameters:
+- id: resample
+ label: Resample
+ dtype: int
+ default: '8'
+- id: bw
+ label: Frac. Bandwidth
+ dtype: real
+ default: '0.5'
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: float
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.cvsd_decode_bf(${resample},${bw})
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_cvsd_decode.xml b/gr-vocoder/grc/vocoder_cvsd_decode.xml
deleted file mode 100644
index ce117c5d4e..0000000000
--- a/gr-vocoder/grc/vocoder_cvsd_decode.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## CVSD Encoder
-###################################################
- -->
-<block>
- <name>CVSD Decoder</name>
- <key>vocoder_cvsd_decode_bf</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.cvsd_decode_bf($resample,$bw)</make>
- <param>
- <name>Resample</name>
- <key>resample</key>
- <value>8</value>
- <type>int</type>
- </param>
- <param>
- <name>Frac. Bandwidth</name>
- <key>bw</key>
- <value>0.5</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>float</type>
- </source>
-</block>
diff --git a/gr-vocoder/grc/vocoder_cvsd_decode_bs.block.yml b/gr-vocoder/grc/vocoder_cvsd_decode_bs.block.yml
new file mode 100644
index 0000000000..f7893aed29
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_cvsd_decode_bs.block.yml
@@ -0,0 +1,16 @@
+id: vocoder_cvsd_decode_bs
+label: CVSD Audio Decoder (Raw Bit-Level)
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: short
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.cvsd_decode_bs()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_cvsd_decode_bs.xml b/gr-vocoder/grc/vocoder_cvsd_decode_bs.xml
deleted file mode 100644
index 40ddc04d43..0000000000
--- a/gr-vocoder/grc/vocoder_cvsd_decode_bs.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## CVSD audio decoder
-###################################################
- -->
-<block>
- <name>CVSD Audio Decoder (Raw Bit-Level)</name>
- <key>vocoder_cvsd_decode_bs</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.cvsd_decode_bs()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>short</type>
- </source>
-</block>
-
diff --git a/gr-vocoder/grc/vocoder_cvsd_encode.block.yml b/gr-vocoder/grc/vocoder_cvsd_encode.block.yml
new file mode 100644
index 0000000000..ab3f43c17f
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_cvsd_encode.block.yml
@@ -0,0 +1,26 @@
+id: vocoder_cvsd_encode_fb
+label: CVSD Encoder
+
+parameters:
+- id: resample
+ label: Resample
+ dtype: int
+ default: '8'
+- id: bw
+ label: Frac. Bandwidth
+ dtype: real
+ default: '0.5'
+
+inputs:
+- domain: stream
+ dtype: float
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.cvsd_encode_fb(${resample},${bw})
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_cvsd_encode.xml b/gr-vocoder/grc/vocoder_cvsd_encode.xml
deleted file mode 100644
index 12e73f6025..0000000000
--- a/gr-vocoder/grc/vocoder_cvsd_encode.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## CVSD Encoder
-###################################################
- -->
-<block>
- <name>CVSD Encoder</name>
- <key>vocoder_cvsd_encode_fb</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.cvsd_encode_fb($resample,$bw)</make>
- <param>
- <name>Resample</name>
- <key>resample</key>
- <value>8</value>
- <type>int</type>
- </param>
- <param>
- <name>Frac. Bandwidth</name>
- <key>bw</key>
- <value>0.5</value>
- <type>real</type>
- </param>
- <sink>
- <name>in</name>
- <type>float</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
diff --git a/gr-vocoder/grc/vocoder_cvsd_encode_sb.block.yml b/gr-vocoder/grc/vocoder_cvsd_encode_sb.block.yml
new file mode 100644
index 0000000000..6b2ab297bf
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_cvsd_encode_sb.block.yml
@@ -0,0 +1,16 @@
+id: vocoder_cvsd_encode_sb
+label: CVSD Audio Encoder (Raw Bit-Level)
+
+inputs:
+- domain: stream
+ dtype: short
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.cvsd_encode_sb()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_cvsd_encode_sb.xml b/gr-vocoder/grc/vocoder_cvsd_encode_sb.xml
deleted file mode 100644
index a92387a60b..0000000000
--- a/gr-vocoder/grc/vocoder_cvsd_encode_sb.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## CVSD audio encoder
-###################################################
- -->
-<block>
- <name>CVSD Audio Encoder (Raw Bit-Level)</name>
- <key>vocoder_cvsd_encode_sb</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.cvsd_encode_sb()</make>
- <sink>
- <name>in</name>
- <type>short</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
-
-
diff --git a/gr-vocoder/grc/vocoder_freedv_rx_ss.block.yml b/gr-vocoder/grc/vocoder_freedv_rx_ss.block.yml
new file mode 100644
index 0000000000..4b486d41cb
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_freedv_rx_ss.block.yml
@@ -0,0 +1,33 @@
+id: vocoder_freedv_rx_ss
+label: FreeDV demodulator
+
+parameters:
+- id: mode
+ label: Operating Mode
+ dtype: int
+ default: freedv_api.MODE_1600
+ options: [freedv_api.MODE_1600, freedv_api.MODE_700, freedv_api.MODE_700B, freedv_api.MODE_2400A,
+ freedv_api.MODE_2400B, freedv_api.MODE_800XA]
+ option_labels: ['1600', '700', 700B, 2400A, 2400B, 800XA]
+- id: squelch_thresh
+ label: Squelch Threshold
+ dtype: float
+ default: '-100.0'
+
+inputs:
+- domain: stream
+ dtype: short
+
+outputs:
+- domain: stream
+ dtype: short
+
+templates:
+ imports: |-
+ from gnuradio import vocoder
+ from gnuradio.vocoder import freedv_api
+ make: vocoder.freedv_rx_ss(${mode},${squelch_thresh})
+ callbacks:
+ - set_squelch_thresh(${squelch_thresh})
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_freedv_rx_ss.xml b/gr-vocoder/grc/vocoder_freedv_rx_ss.xml
deleted file mode 100644
index 14e00a0979..0000000000
--- a/gr-vocoder/grc/vocoder_freedv_rx_ss.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## FreeDV audio modem demodulator
-###################################################
- -->
-<block>
- <name>FreeDV demodulator</name>
- <key>vocoder_freedv_rx_ss</key>
- <import>from gnuradio import vocoder</import>
- <import>from gnuradio.vocoder import freedv_api</import>
- <make>vocoder.freedv_rx_ss($mode,$squelch_thresh)</make>
- <callback>set_squelch_thresh($squelch_thresh)</callback>
- <param>
- <name>Operating Mode</name>
- <key>mode</key>
- <value>freedv_api.MODE_1600</value>
- <type>int</type>
- <option>
- <name>1600</name>
- <key>freedv_api.MODE_1600</key>
- </option>
- <option>
- <name>700</name>
- <key>freedv_api.MODE_700</key>
- </option>
- <option>
- <name>700B</name>
- <key>freedv_api.MODE_700B</key>
- </option>
- <option>
- <name>2400A</name>
- <key>freedv_api.MODE_2400A</key>
- </option>
- <option>
- <name>2400B</name>
- <key>freedv_api.MODE_2400B</key>
- </option>
- <option>
- <name>800XA</name>
- <key>freedv_api.MODE_800XA</key>
- </option>
- </param>
- <param>
- <name>Squelch Threshold</name>
- <key>squelch_thresh</key>
- <value>-100.0</value>
- <type>float</type>
- </param>
- <sink>
- <name>in</name>
- <type>short</type>
- </sink>
- <source>
- <name>out</name>
- <type>short</type>
- </source>
-</block>
diff --git a/gr-vocoder/grc/vocoder_freedv_tx_ss.block.yml b/gr-vocoder/grc/vocoder_freedv_tx_ss.block.yml
new file mode 100644
index 0000000000..6ae73dfbbb
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_freedv_tx_ss.block.yml
@@ -0,0 +1,31 @@
+id: vocoder_freedv_tx_ss
+label: FreeDV modulator
+
+parameters:
+- id: mode
+ label: Operating Mode
+ dtype: int
+ default: freedv_api.MODE_1600
+ options: [freedv_api.MODE_1600, freedv_api.MODE_700, freedv_api.MODE_700B, freedv_api.MODE_2400A,
+ freedv_api.MODE_2400B, freedv_api.MODE_800XA]
+ option_labels: ['1600', '700', 700B, 2400A, 2400B, 800XA]
+- id: txt_msg
+ label: Text Message
+ dtype: string
+ default: '''GNU Radio'''
+
+inputs:
+- domain: stream
+ dtype: short
+
+outputs:
+- domain: stream
+ dtype: short
+
+templates:
+ imports: |-
+ from gnuradio import vocoder
+ from gnuradio.vocoder import freedv_api
+ make: vocoder.freedv_tx_ss(${mode},${txt_msg})
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_freedv_tx_ss.xml b/gr-vocoder/grc/vocoder_freedv_tx_ss.xml
deleted file mode 100644
index 54a49b730f..0000000000
--- a/gr-vocoder/grc/vocoder_freedv_tx_ss.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## FreeDV audio modem modulator
-###################################################
- -->
-<block>
- <name>FreeDV modulator</name>
- <key>vocoder_freedv_tx_ss</key>
- <import>from gnuradio import vocoder</import>
- <import>from gnuradio.vocoder import freedv_api</import>
- <make>vocoder.freedv_tx_ss($mode,$txt_msg)</make>
- <param>
- <name>Operating Mode</name>
- <key>mode</key>
- <value>freedv_api.MODE_1600</value>
- <type>int</type>
- <option>
- <name>1600</name>
- <key>freedv_api.MODE_1600</key>
- </option>
- <option>
- <name>700</name>
- <key>freedv_api.MODE_700</key>
- </option>
- <option>
- <name>700B</name>
- <key>freedv_api.MODE_700B</key>
- </option>
- <option>
- <name>2400A</name>
- <key>freedv_api.MODE_2400A</key>
- </option>
- <option>
- <name>2400B</name>
- <key>freedv_api.MODE_2400B</key>
- </option>
- <option>
- <name>800XA</name>
- <key>freedv_api.MODE_800XA</key>
- </option>
- </param>
- <param>
- <name>Text Message</name>
- <key>txt_msg</key>
- <value>'GNU Radio'</value>
- <type>string</type>
- </param>
- <sink>
- <name>in</name>
- <type>short</type>
- </sink>
- <source>
- <name>out</name>
- <type>short</type>
- </source>
-</block>
diff --git a/gr-vocoder/grc/vocoder_g721_decode_bs.block.yml b/gr-vocoder/grc/vocoder_g721_decode_bs.block.yml
new file mode 100644
index 0000000000..8ee30dca01
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_g721_decode_bs.block.yml
@@ -0,0 +1,16 @@
+id: vocoder_g721_decode_bs
+label: g721 Audio Decoder
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: short
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.g721_decode_bs()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_g721_decode_bs.xml b/gr-vocoder/grc/vocoder_g721_decode_bs.xml
deleted file mode 100644
index d5c0291b7d..0000000000
--- a/gr-vocoder/grc/vocoder_g721_decode_bs.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## g271 audio decoder
-###################################################
- -->
-<block>
- <name>g721 Audio Decoder</name>
- <key>vocoder_g721_decode_bs</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.g721_decode_bs()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>short</type>
- </source>
-</block>
diff --git a/gr-vocoder/grc/vocoder_g721_encode_sb.block.yml b/gr-vocoder/grc/vocoder_g721_encode_sb.block.yml
new file mode 100644
index 0000000000..f9a60ed25b
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_g721_encode_sb.block.yml
@@ -0,0 +1,16 @@
+id: vocoder_g721_encode_sb
+label: g721 Audio Encoder
+
+inputs:
+- domain: stream
+ dtype: short
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.g721_encode_sb()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_g721_encode_sb.xml b/gr-vocoder/grc/vocoder_g721_encode_sb.xml
deleted file mode 100644
index f105ff8ff0..0000000000
--- a/gr-vocoder/grc/vocoder_g721_encode_sb.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## g721 audio encoder
-###################################################
- -->
-<block>
- <name>g721 Audio Encoder</name>
- <key>vocoder_g721_encode_sb</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.g721_encode_sb()</make>
- <sink>
- <name>in</name>
- <type>short</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
-
-
diff --git a/gr-vocoder/grc/vocoder_g723_24_decode_bs.block.yml b/gr-vocoder/grc/vocoder_g723_24_decode_bs.block.yml
new file mode 100644
index 0000000000..d16a1d3a0b
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_g723_24_decode_bs.block.yml
@@ -0,0 +1,16 @@
+id: vocoder_g723_24_decode_bs
+label: g723_24 Audio Decoder
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: short
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.g723_24_decode_bs()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_g723_24_decode_bs.xml b/gr-vocoder/grc/vocoder_g723_24_decode_bs.xml
deleted file mode 100644
index 939a7f91b3..0000000000
--- a/gr-vocoder/grc/vocoder_g723_24_decode_bs.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## g723_24 audio decoder
-###################################################
- -->
-<block>
- <name>g723_24 Audio Decoder</name>
- <key>vocoder_g723_24_decode_bs</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.g723_24_decode_bs()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>short</type>
- </source>
-</block>
diff --git a/gr-vocoder/grc/vocoder_g723_24_encode_sb.block.yml b/gr-vocoder/grc/vocoder_g723_24_encode_sb.block.yml
new file mode 100644
index 0000000000..36f95b630a
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_g723_24_encode_sb.block.yml
@@ -0,0 +1,16 @@
+id: vocoder_g723_24_encode_sb
+label: g723_24 Audio Encoder
+
+inputs:
+- domain: stream
+ dtype: short
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.g723_24_encode_sb()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_g723_24_encode_sb.xml b/gr-vocoder/grc/vocoder_g723_24_encode_sb.xml
deleted file mode 100644
index 0e70ddedc0..0000000000
--- a/gr-vocoder/grc/vocoder_g723_24_encode_sb.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## g723_24 audio encoder
-###################################################
- -->
-<block>
- <name>g723_24 Audio Encoder</name>
- <key>vocoder_g723_24_encode_sb</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.g723_24_encode_sb()</make>
- <sink>
- <name>in</name>
- <type>short</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
-
-
diff --git a/gr-vocoder/grc/vocoder_g723_40_decode_bs.block.yml b/gr-vocoder/grc/vocoder_g723_40_decode_bs.block.yml
new file mode 100644
index 0000000000..e42e33d6bd
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_g723_40_decode_bs.block.yml
@@ -0,0 +1,16 @@
+id: vocoder_g723_40_decode_bs
+label: g723_40 Audio Decoder
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: short
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.g723_40_decode_bs()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_g723_40_decode_bs.xml b/gr-vocoder/grc/vocoder_g723_40_decode_bs.xml
deleted file mode 100644
index f3ba56e5bc..0000000000
--- a/gr-vocoder/grc/vocoder_g723_40_decode_bs.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## g723_40 audio decoder
-###################################################
- -->
-<block>
- <name>g723_40 Audio Decoder</name>
- <key>vocoder_g723_40_decode_bs</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.g723_40_decode_bs()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>short</type>
- </source>
-</block>
diff --git a/gr-vocoder/grc/vocoder_g723_40_encode_sb.block.yml b/gr-vocoder/grc/vocoder_g723_40_encode_sb.block.yml
new file mode 100644
index 0000000000..2f58b41514
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_g723_40_encode_sb.block.yml
@@ -0,0 +1,16 @@
+id: vocoder_g723_40_encode_sb
+label: g723_40 Audio Encoder
+
+inputs:
+- domain: stream
+ dtype: short
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.g723_40_encode_sb()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_g723_40_encode_sb.xml b/gr-vocoder/grc/vocoder_g723_40_encode_sb.xml
deleted file mode 100644
index fbbf600ffa..0000000000
--- a/gr-vocoder/grc/vocoder_g723_40_encode_sb.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## g723_40 audio encoder
-###################################################
- -->
-<block>
- <name>g723_40 Audio Encoder</name>
- <key>vocoder_g723_40_encode_sb</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.g723_40_encode_sb()</make>
- <sink>
- <name>in</name>
- <type>short</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
-
-
diff --git a/gr-vocoder/grc/vocoder_gsm_fr_decode_ps.block.yml b/gr-vocoder/grc/vocoder_gsm_fr_decode_ps.block.yml
new file mode 100644
index 0000000000..47ff9621ba
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_gsm_fr_decode_ps.block.yml
@@ -0,0 +1,17 @@
+id: vocoder_gsm_fr_decode_ps
+label: GSM full-rate Audio Decoder
+
+inputs:
+- domain: stream
+ dtype: byte
+ vlen: 33
+
+outputs:
+- domain: stream
+ dtype: short
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.gsm_fr_decode_ps()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_gsm_fr_decode_ps.xml b/gr-vocoder/grc/vocoder_gsm_fr_decode_ps.xml
deleted file mode 100644
index bef07fb822..0000000000
--- a/gr-vocoder/grc/vocoder_gsm_fr_decode_ps.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## GSM full-rate audio decoder
-###################################################
- -->
-<block>
- <name>GSM full-rate Audio Decoder</name>
- <key>vocoder_gsm_fr_decode_ps</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.gsm_fr_decode_ps()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- <vlen>33</vlen>
- </sink>
- <source>
- <name>out</name>
- <type>short</type>
- </source>
-</block>
diff --git a/gr-vocoder/grc/vocoder_gsm_fr_encode_sp.block.yml b/gr-vocoder/grc/vocoder_gsm_fr_encode_sp.block.yml
new file mode 100644
index 0000000000..4fcd2dc6d0
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_gsm_fr_encode_sp.block.yml
@@ -0,0 +1,17 @@
+id: vocoder_gsm_fr_encode_sp
+label: GSM full-rate Audio Encoder
+
+inputs:
+- domain: stream
+ dtype: short
+
+outputs:
+- domain: stream
+ dtype: byte
+ vlen: 33
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.gsm_fr_encode_sp()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_gsm_fr_encode_sp.xml b/gr-vocoder/grc/vocoder_gsm_fr_encode_sp.xml
deleted file mode 100644
index 4c3eab71a8..0000000000
--- a/gr-vocoder/grc/vocoder_gsm_fr_encode_sp.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## GSM full-rate audio encoder
-###################################################
- -->
-<block>
- <name>GSM full-rate Audio Encoder</name>
- <key>vocoder_gsm_fr_encode_sp</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.gsm_fr_encode_sp()</make>
- <sink>
- <name>in</name>
- <type>short</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- <vlen>33</vlen>
- </source>
-</block>
-
-
diff --git a/gr-vocoder/grc/vocoder_ulaw_decode_bs.block.yml b/gr-vocoder/grc/vocoder_ulaw_decode_bs.block.yml
new file mode 100644
index 0000000000..384036ee53
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_ulaw_decode_bs.block.yml
@@ -0,0 +1,16 @@
+id: vocoder_ulaw_decode_bs
+label: ulaw Audio Decoder
+
+inputs:
+- domain: stream
+ dtype: byte
+
+outputs:
+- domain: stream
+ dtype: short
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.ulaw_decode_bs()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_ulaw_decode_bs.xml b/gr-vocoder/grc/vocoder_ulaw_decode_bs.xml
deleted file mode 100644
index ca3c535c18..0000000000
--- a/gr-vocoder/grc/vocoder_ulaw_decode_bs.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Ulaw audio decoder
-###################################################
- -->
-<block>
- <name>ulaw Audio Decoder</name>
- <key>vocoder_ulaw_decode_bs</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.ulaw_decode_bs()</make>
- <sink>
- <name>in</name>
- <type>byte</type>
- </sink>
- <source>
- <name>out</name>
- <type>short</type>
- </source>
-</block>
diff --git a/gr-vocoder/grc/vocoder_ulaw_encode_sb.block.yml b/gr-vocoder/grc/vocoder_ulaw_encode_sb.block.yml
new file mode 100644
index 0000000000..024384d625
--- /dev/null
+++ b/gr-vocoder/grc/vocoder_ulaw_encode_sb.block.yml
@@ -0,0 +1,16 @@
+id: vocoder_ulaw_encode_sb
+label: ulaw Audio Encoder
+
+inputs:
+- domain: stream
+ dtype: short
+
+outputs:
+- domain: stream
+ dtype: byte
+
+templates:
+ imports: from gnuradio import vocoder
+ make: vocoder.ulaw_encode_sb()
+
+file_format: 1
diff --git a/gr-vocoder/grc/vocoder_ulaw_encode_sb.xml b/gr-vocoder/grc/vocoder_ulaw_encode_sb.xml
deleted file mode 100644
index 8e76d8d083..0000000000
--- a/gr-vocoder/grc/vocoder_ulaw_encode_sb.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## ulaw audio encoder
-###################################################
- -->
-<block>
- <name>ulaw Audio Encoder</name>
- <key>vocoder_ulaw_encode_sb</key>
- <import>from gnuradio import vocoder</import>
- <make>vocoder.ulaw_encode_sb()</make>
- <sink>
- <name>in</name>
- <type>short</type>
- </sink>
- <source>
- <name>out</name>
- <type>byte</type>
- </source>
-</block>
-
-
diff --git a/gr-zeromq/grc/CMakeLists.txt b/gr-zeromq/grc/CMakeLists.txt
index 7807bcfe9d..50aa1d7d52 100644
--- a/gr-zeromq/grc/CMakeLists.txt
+++ b/gr-zeromq/grc/CMakeLists.txt
@@ -18,18 +18,18 @@
# Boston, MA 02110-1301, USA.
install(FILES
- zeromq_pub_sink.xml
- zeromq_pub_msg_sink.xml
- zeromq_sub_source.xml
- zeromq_sub_msg_source.xml
- zeromq_push_sink.xml
- zeromq_push_msg_sink.xml
- zeromq_pull_source.xml
- zeromq_pull_msg_source.xml
- zeromq_rep_sink.xml
- zeromq_rep_msg_sink.xml
- zeromq_req_source.xml
- zeromq_req_msg_source.xml
+ zeromq_pub_sink.block.yml
+ zeromq_pub_msg_sink.block.yml
+ zeromq_sub_source.block.yml
+ zeromq_sub_msg_source.block.yml
+ zeromq_push_sink.block.yml
+ zeromq_push_msg_sink.block.yml
+ zeromq_pull_source.block.yml
+ zeromq_pull_msg_source.block.yml
+ zeromq_rep_sink.block.yml
+ zeromq_rep_msg_sink.block.yml
+ zeromq_req_source.block.yml
+ zeromq_req_msg_source.block.yml
DESTINATION share/gnuradio/grc/blocks
)
diff --git a/gr-zeromq/grc/zeromq_pub_msg_sink.block.yml b/gr-zeromq/grc/zeromq_pub_msg_sink.block.yml
new file mode 100644
index 0000000000..ee4e9739df
--- /dev/null
+++ b/gr-zeromq/grc/zeromq_pub_msg_sink.block.yml
@@ -0,0 +1,23 @@
+id: zeromq_pub_msg_sink
+label: ZMQ PUB Message Sink
+category: '[Core]/ZeroMQ Interfaces'
+
+parameters:
+- id: address
+ label: Address
+ dtype: string
+- id: timeout
+ label: Timeout (msec)
+ dtype: float
+ default: '100'
+
+inputs:
+- domain: message
+ id: in
+ optional: true
+
+templates:
+ imports: from gnuradio import zeromq
+ make: zeromq.pub_msg_sink(${address}, ${timeout})
+
+file_format: 1
diff --git a/gr-zeromq/grc/zeromq_pub_msg_sink.xml b/gr-zeromq/grc/zeromq_pub_msg_sink.xml
deleted file mode 100644
index 245ac37180..0000000000
--- a/gr-zeromq/grc/zeromq_pub_msg_sink.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>ZMQ PUB Message Sink</name>
- <key>zeromq_pub_msg_sink</key>
- <category>[Core]/ZeroMQ Interfaces</category>
- <import>from gnuradio import zeromq</import>
- <make>zeromq.pub_msg_sink($address, $timeout)</make>
-
- <param>
- <name>Address</name>
- <key>address</key>
- <type>string</type>
- </param>
-
- <param>
- <name>Timeout (msec)</name>
- <key>timeout</key>
- <value>100</value>
- <type>float</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
-
-</block>
diff --git a/gr-zeromq/grc/zeromq_pub_sink.block.yml b/gr-zeromq/grc/zeromq_pub_sink.block.yml
new file mode 100644
index 0000000000..d8e5983d20
--- /dev/null
+++ b/gr-zeromq/grc/zeromq_pub_sink.block.yml
@@ -0,0 +1,48 @@
+id: zeromq_pub_sink
+label: ZMQ PUB Sink
+category: '[Core]/ZeroMQ Interfaces'
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ itemsize: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: address
+ label: Address
+ dtype: string
+- id: timeout
+ label: Timeout (msec)
+ dtype: float
+ default: '100'
+- id: pass_tags
+ label: Pass Tags
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: hwm
+ label: High Watermark
+ dtype: int
+ default: '-1'
+ hide: ${ ('part' if hwm == -1 else 'none') }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import zeromq
+ make: zeromq.pub_sink(${type.itemsize}, ${vlen}, ${address}, ${timeout}, ${pass_tags},
+ ${hwm})
+
+file_format: 1
diff --git a/gr-zeromq/grc/zeromq_pub_sink.xml b/gr-zeromq/grc/zeromq_pub_sink.xml
deleted file mode 100644
index af130eeb21..0000000000
--- a/gr-zeromq/grc/zeromq_pub_sink.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>ZMQ PUB Sink</name>
- <key>zeromq_pub_sink</key>
- <category>[Core]/ZeroMQ Interfaces</category>
- <import>from gnuradio import zeromq</import>
- <make>zeromq.pub_sink($type.itemsize, $vlen, $address, $timeout, $pass_tags, $hwm)</make>
-
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>itemsize:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>itemsize:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>itemsize:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>itemsize:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>itemsize:gr.sizeof_char</opt>
- </option>
- </param>
-
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Address</name>
- <key>address</key>
- <type>string</type>
- </param>
-
- <param>
- <name>Timeout (msec)</name>
- <key>timeout</key>
- <value>100</value>
- <type>float</type>
- </param>
-
- <param>
- <name>Pass Tags</name>
- <key>pass_tags</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>High Watermark</name>
- <key>hwm</key>
- <value>-1</value>
- <type>int</type>
- <hide>#if $hwm() == -1 then 'part' else 'none'#</hide>
- </param>
-
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
-
-</block>
diff --git a/gr-zeromq/grc/zeromq_pull_msg_source.block.yml b/gr-zeromq/grc/zeromq_pull_msg_source.block.yml
new file mode 100644
index 0000000000..00be80c2c2
--- /dev/null
+++ b/gr-zeromq/grc/zeromq_pull_msg_source.block.yml
@@ -0,0 +1,23 @@
+id: zeromq_pull_msg_source
+label: ZMQ PULL Message Source
+category: '[Core]/ZeroMQ Interfaces'
+
+parameters:
+- id: address
+ label: Address
+ dtype: string
+- id: timeout
+ label: Timeout (msec)
+ dtype: float
+ default: '100'
+
+outputs:
+- domain: message
+ id: out
+ optional: true
+
+templates:
+ imports: from gnuradio import zeromq
+ make: zeromq.pull_msg_source(${address}, ${timeout})
+
+file_format: 1
diff --git a/gr-zeromq/grc/zeromq_pull_msg_source.xml b/gr-zeromq/grc/zeromq_pull_msg_source.xml
deleted file mode 100644
index c6004d987e..0000000000
--- a/gr-zeromq/grc/zeromq_pull_msg_source.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>ZMQ PULL Message Source</name>
- <key>zeromq_pull_msg_source</key>
- <category>[Core]/ZeroMQ Interfaces</category>
- <import>from gnuradio import zeromq</import>
- <make>zeromq.pull_msg_source($address, $timeout)</make>
-
- <param>
- <name>Address</name>
- <key>address</key>
- <type>string</type>
- </param>
-
- <param>
- <name>Timeout (msec)</name>
- <key>timeout</key>
- <value>100</value>
- <type>float</type>
- </param>
-
- <source>
- <name>out</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-
-</block>
diff --git a/gr-zeromq/grc/zeromq_pull_source.block.yml b/gr-zeromq/grc/zeromq_pull_source.block.yml
new file mode 100644
index 0000000000..a318b568f1
--- /dev/null
+++ b/gr-zeromq/grc/zeromq_pull_source.block.yml
@@ -0,0 +1,48 @@
+id: zeromq_pull_source
+label: ZMQ PULL Source
+category: '[Core]/ZeroMQ Interfaces'
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ itemsize: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: address
+ label: Address
+ dtype: string
+- id: timeout
+ label: Timeout (msec)
+ dtype: float
+ default: '100'
+- id: pass_tags
+ label: Pass Tags
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: hwm
+ label: High Watermark
+ dtype: int
+ default: '-1'
+ hide: ${ ('part' if hwm == -1 else 'none') }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import zeromq
+ make: zeromq.pull_source(${type.itemsize}, ${vlen}, ${address}, ${timeout}, ${pass_tags},
+ ${hwm})
+
+file_format: 1
diff --git a/gr-zeromq/grc/zeromq_pull_source.xml b/gr-zeromq/grc/zeromq_pull_source.xml
deleted file mode 100644
index f2c8b61d86..0000000000
--- a/gr-zeromq/grc/zeromq_pull_source.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>ZMQ PULL Source</name>
- <key>zeromq_pull_source</key>
- <category>[Core]/ZeroMQ Interfaces</category>
- <import>from gnuradio import zeromq</import>
- <make>zeromq.pull_source($type.itemsize, $vlen, $address, $timeout, $pass_tags, $hwm)</make>
-
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>itemsize:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>itemsize:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>itemsize:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>itemsize:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>itemsize:gr.sizeof_char</opt>
- </option>
- </param>
-
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Address</name>
- <key>address</key>
- <type>string</type>
- </param>
-
- <param>
- <name>Timeout (msec)</name>
- <key>timeout</key>
- <value>100</value>
- <type>float</type>
- </param>
-
- <param>
- <name>Pass Tags</name>
- <key>pass_tags</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>High Watermark</name>
- <key>hwm</key>
- <value>-1</value>
- <type>int</type>
- <hide>#if $hwm() == -1 then 'part' else 'none'#</hide>
- </param>
-
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-
-</block>
diff --git a/gr-zeromq/grc/zeromq_push_msg_sink.block.yml b/gr-zeromq/grc/zeromq_push_msg_sink.block.yml
new file mode 100644
index 0000000000..d1c9d8f82c
--- /dev/null
+++ b/gr-zeromq/grc/zeromq_push_msg_sink.block.yml
@@ -0,0 +1,23 @@
+id: zeromq_push_msg_sink
+label: ZMQ PUSH Message Sink
+category: '[Core]/ZeroMQ Interfaces'
+
+parameters:
+- id: address
+ label: Address
+ dtype: string
+- id: timeout
+ label: Timeout (msec)
+ dtype: float
+ default: '100'
+
+inputs:
+- domain: message
+ id: in
+ optional: true
+
+templates:
+ imports: from gnuradio import zeromq
+ make: zeromq.push_msg_sink(${address}, ${timeout})
+
+file_format: 1
diff --git a/gr-zeromq/grc/zeromq_push_msg_sink.xml b/gr-zeromq/grc/zeromq_push_msg_sink.xml
deleted file mode 100644
index 283a250064..0000000000
--- a/gr-zeromq/grc/zeromq_push_msg_sink.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>ZMQ PUSH Message Sink</name>
- <key>zeromq_push_msg_sink</key>
- <category>[Core]/ZeroMQ Interfaces</category>
- <import>from gnuradio import zeromq</import>
- <make>zeromq.push_msg_sink($address, $timeout)</make>
-
- <param>
- <name>Address</name>
- <key>address</key>
- <type>string</type>
- </param>
-
- <param>
- <name>Timeout (msec)</name>
- <key>timeout</key>
- <value>100</value>
- <type>float</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
-
-</block>
diff --git a/gr-zeromq/grc/zeromq_push_sink.block.yml b/gr-zeromq/grc/zeromq_push_sink.block.yml
new file mode 100644
index 0000000000..63b9d2497c
--- /dev/null
+++ b/gr-zeromq/grc/zeromq_push_sink.block.yml
@@ -0,0 +1,48 @@
+id: zeromq_push_sink
+label: ZMQ PUSH Sink
+category: '[Core]/ZeroMQ Interfaces'
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ itemsize: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: address
+ label: Address
+ dtype: string
+- id: timeout
+ label: Timeout (msec)
+ dtype: float
+ default: '100'
+- id: pass_tags
+ label: Pass Tags
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: hwm
+ label: High Watermark
+ dtype: int
+ default: '-1'
+ hide: ${ ('part' if hwm == -1 else 'none') }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import zeromq
+ make: zeromq.push_sink(${type.itemsize}, ${vlen}, ${address}, ${timeout}, ${pass_tags},
+ ${hwm})
+
+file_format: 1
diff --git a/gr-zeromq/grc/zeromq_push_sink.xml b/gr-zeromq/grc/zeromq_push_sink.xml
deleted file mode 100644
index 8277c02c22..0000000000
--- a/gr-zeromq/grc/zeromq_push_sink.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>ZMQ PUSH Sink</name>
- <key>zeromq_push_sink</key>
- <category>[Core]/ZeroMQ Interfaces</category>
- <import>from gnuradio import zeromq</import>
- <make>zeromq.push_sink($type.itemsize, $vlen, $address, $timeout, $pass_tags, $hwm)</make>
-
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>itemsize:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>itemsize:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>itemsize:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>itemsize:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>itemsize:gr.sizeof_char</opt>
- </option>
- </param>
-
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Address</name>
- <key>address</key>
- <type>string</type>
- </param>
-
- <param>
- <name>Timeout (msec)</name>
- <key>timeout</key>
- <value>100</value>
- <type>float</type>
- </param>
-
- <param>
- <name>Pass Tags</name>
- <key>pass_tags</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>High Watermark</name>
- <key>hwm</key>
- <value>-1</value>
- <type>int</type>
- <hide>#if $hwm() == -1 then 'part' else 'none'#</hide>
- </param>
-
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
-
-</block>
diff --git a/gr-zeromq/grc/zeromq_rep_msg_sink.block.yml b/gr-zeromq/grc/zeromq_rep_msg_sink.block.yml
new file mode 100644
index 0000000000..d4732a705d
--- /dev/null
+++ b/gr-zeromq/grc/zeromq_rep_msg_sink.block.yml
@@ -0,0 +1,23 @@
+id: zeromq_rep_msg_sink
+label: ZMQ REP Message Sink
+category: '[Core]/ZeroMQ Interfaces'
+
+parameters:
+- id: address
+ label: Address
+ dtype: string
+- id: timeout
+ label: Timeout (msec)
+ dtype: float
+ default: '100'
+
+inputs:
+- domain: message
+ id: in
+ optional: true
+
+templates:
+ imports: from gnuradio import zeromq
+ make: zeromq.rep_msg_sink(${address}, ${timeout})
+
+file_format: 1
diff --git a/gr-zeromq/grc/zeromq_rep_msg_sink.xml b/gr-zeromq/grc/zeromq_rep_msg_sink.xml
deleted file mode 100644
index 37515b39bc..0000000000
--- a/gr-zeromq/grc/zeromq_rep_msg_sink.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>ZMQ REP Message Sink</name>
- <key>zeromq_rep_msg_sink</key>
- <category>[Core]/ZeroMQ Interfaces</category>
- <import>from gnuradio import zeromq</import>
- <make>zeromq.rep_msg_sink($address, $timeout)</make>
-
- <param>
- <name>Address</name>
- <key>address</key>
- <type>string</type>
- </param>
-
- <param>
- <name>Timeout (msec)</name>
- <key>timeout</key>
- <value>100</value>
- <type>float</type>
- </param>
-
- <sink>
- <name>in</name>
- <type>message</type>
- <optional>1</optional>
- </sink>
-
-</block>
diff --git a/gr-zeromq/grc/zeromq_rep_sink.block.yml b/gr-zeromq/grc/zeromq_rep_sink.block.yml
new file mode 100644
index 0000000000..fbc27fcf0d
--- /dev/null
+++ b/gr-zeromq/grc/zeromq_rep_sink.block.yml
@@ -0,0 +1,49 @@
+id: zeromq_rep_sink
+label: ZMQ REP Sink
+category: '[Core]/ZeroMQ Interfaces'
+
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ itemsize: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: address
+ label: Address
+ dtype: string
+- id: timeout
+ label: Timeout (msec)
+ dtype: float
+ default: '100'
+- id: pass_tags
+ label: Pass Tags
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: hwm
+ label: High Watermark
+ dtype: int
+ default: '-1'
+ hide: ${ ('part' if hwm == -1 else 'none') }
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import zeromq
+ make: zeromq.rep_sink(${type.itemsize}, ${vlen}, ${address}, ${timeout}, ${pass_tags},
+ ${hwm})
+
+file_format: 1
diff --git a/gr-zeromq/grc/zeromq_rep_sink.xml b/gr-zeromq/grc/zeromq_rep_sink.xml
deleted file mode 100644
index 17c824156c..0000000000
--- a/gr-zeromq/grc/zeromq_rep_sink.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>ZMQ REP Sink</name>
- <key>zeromq_rep_sink</key>
- <category>[Core]/ZeroMQ Interfaces</category>
- <import>from gnuradio import zeromq</import>
- <make>zeromq.rep_sink($type.itemsize, $vlen, $address, $timeout, $pass_tags, $hwm)</make>
-
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>itemsize:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>itemsize:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>itemsize:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>itemsize:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>itemsize:gr.sizeof_char</opt>
- </option>
- </param>
-
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Address</name>
- <key>address</key>
- <type>string</type>
- </param>
-
- <param>
- <name>Timeout (msec)</name>
- <key>timeout</key>
- <value>100</value>
- <type>float</type>
- </param>
-
- <param>
- <name>Pass Tags</name>
- <key>pass_tags</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>High Watermark</name>
- <key>hwm</key>
- <value>-1</value>
- <type>int</type>
- <hide>#if $hwm() == -1 then 'part' else 'none'#</hide>
- </param>
-
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </sink>
-
-</block>
diff --git a/gr-zeromq/grc/zeromq_req_msg_source.block.yml b/gr-zeromq/grc/zeromq_req_msg_source.block.yml
new file mode 100644
index 0000000000..81cefd573a
--- /dev/null
+++ b/gr-zeromq/grc/zeromq_req_msg_source.block.yml
@@ -0,0 +1,23 @@
+id: zeromq_req_msg_source
+label: ZMQ REQ Message Source
+category: '[Core]/ZeroMQ Interfaces'
+
+parameters:
+- id: address
+ label: Address
+ dtype: string
+- id: timeout
+ label: Timeout (msec)
+ dtype: float
+ default: '100'
+
+outputs:
+- domain: message
+ id: out
+ optional: true
+
+templates:
+ imports: from gnuradio import zeromq
+ make: zeromq.req_msg_source(${address}, ${timeout})
+
+file_format: 1
diff --git a/gr-zeromq/grc/zeromq_req_msg_source.xml b/gr-zeromq/grc/zeromq_req_msg_source.xml
deleted file mode 100644
index ae34c30dd0..0000000000
--- a/gr-zeromq/grc/zeromq_req_msg_source.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>ZMQ REQ Message Source</name>
- <key>zeromq_req_msg_source</key>
- <category>[Core]/ZeroMQ Interfaces</category>
- <import>from gnuradio import zeromq</import>
- <make>zeromq.req_msg_source($address, $timeout)</make>
-
- <param>
- <name>Address</name>
- <key>address</key>
- <type>string</type>
- </param>
-
- <param>
- <name>Timeout (msec)</name>
- <key>timeout</key>
- <value>100</value>
- <type>float</type>
- </param>
-
- <source>
- <name>out</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-
-</block>
diff --git a/gr-zeromq/grc/zeromq_req_source.block.yml b/gr-zeromq/grc/zeromq_req_source.block.yml
new file mode 100644
index 0000000000..f534e106a9
--- /dev/null
+++ b/gr-zeromq/grc/zeromq_req_source.block.yml
@@ -0,0 +1,48 @@
+id: zeromq_req_source
+label: ZMQ REQ Source
+category: '[Core]/ZeroMQ Interfaces'
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ itemsize: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: address
+ label: Address
+ dtype: string
+- id: timeout
+ label: Timeout (msec)
+ dtype: float
+ default: '100'
+- id: pass_tags
+ label: Pass Tags
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: hwm
+ label: High Watermark
+ dtype: int
+ default: '-1'
+ hide: ${ ('part' if hwm == -1 else 'none') }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import zeromq
+ make: zeromq.req_source(${type.itemsize}, ${vlen}, ${address}, ${timeout}, ${pass_tags},
+ ${hwm})
+
+file_format: 1
diff --git a/gr-zeromq/grc/zeromq_req_source.xml b/gr-zeromq/grc/zeromq_req_source.xml
deleted file mode 100644
index 0fc1aa1488..0000000000
--- a/gr-zeromq/grc/zeromq_req_source.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>ZMQ REQ Source</name>
- <key>zeromq_req_source</key>
- <category>[Core]/ZeroMQ Interfaces</category>
- <import>from gnuradio import zeromq</import>
- <make>zeromq.req_source($type.itemsize, $vlen, $address, $timeout, $pass_tags, $hwm)</make>
-
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>itemsize:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>itemsize:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>itemsize:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>itemsize:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>itemsize:gr.sizeof_char</opt>
- </option>
- </param>
-
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Address</name>
- <key>address</key>
- <type>string</type>
- </param>
-
- <param>
- <name>Timeout (msec)</name>
- <key>timeout</key>
- <value>100</value>
- <type>float</type>
- </param>
-
- <param>
- <name>Pass Tags</name>
- <key>pass_tags</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>High Watermark</name>
- <key>hwm</key>
- <value>-1</value>
- <type>int</type>
- <hide>#if $hwm() == -1 then 'part' else 'none'#</hide>
- </param>
-
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-
-</block>
diff --git a/gr-zeromq/grc/zeromq_sub_msg_source.block.yml b/gr-zeromq/grc/zeromq_sub_msg_source.block.yml
new file mode 100644
index 0000000000..a9202d9480
--- /dev/null
+++ b/gr-zeromq/grc/zeromq_sub_msg_source.block.yml
@@ -0,0 +1,23 @@
+id: zeromq_sub_msg_source
+label: ZMQ SUB Message Source
+category: '[Core]/ZeroMQ Interfaces'
+
+parameters:
+- id: address
+ label: Address
+ dtype: string
+- id: timeout
+ label: Timeout (msec)
+ dtype: float
+ default: '100'
+
+outputs:
+- domain: message
+ id: out
+ optional: true
+
+templates:
+ imports: from gnuradio import zeromq
+ make: zeromq.sub_msg_source(${address}, ${timeout})
+
+file_format: 1
diff --git a/gr-zeromq/grc/zeromq_sub_msg_source.xml b/gr-zeromq/grc/zeromq_sub_msg_source.xml
deleted file mode 100644
index 475537f5fe..0000000000
--- a/gr-zeromq/grc/zeromq_sub_msg_source.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>ZMQ SUB Message Source</name>
- <key>zeromq_sub_msg_source</key>
- <category>[Core]/ZeroMQ Interfaces</category>
- <import>from gnuradio import zeromq</import>
- <make>zeromq.sub_msg_source($address, $timeout)</make>
-
- <param>
- <name>Address</name>
- <key>address</key>
- <type>string</type>
- </param>
-
- <param>
- <name>Timeout (msec)</name>
- <key>timeout</key>
- <value>100</value>
- <type>float</type>
- </param>
-
- <source>
- <name>out</name>
- <type>message</type>
- <optional>1</optional>
- </source>
-
-</block>
diff --git a/gr-zeromq/grc/zeromq_sub_source.block.yml b/gr-zeromq/grc/zeromq_sub_source.block.yml
new file mode 100644
index 0000000000..7235d480f4
--- /dev/null
+++ b/gr-zeromq/grc/zeromq_sub_source.block.yml
@@ -0,0 +1,48 @@
+id: zeromq_sub_source
+label: ZMQ SUB Source
+category: '[Core]/ZeroMQ Interfaces'
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [complex, float, int, short, byte]
+ option_attributes:
+ itemsize: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char]
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: address
+ label: Address
+ dtype: string
+- id: timeout
+ label: Timeout (msec)
+ dtype: float
+ default: '100'
+- id: pass_tags
+ label: Pass Tags
+ dtype: enum
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: ['Yes', 'No']
+- id: hwm
+ label: High Watermark
+ dtype: int
+ default: '-1'
+ hide: ${ ('part' if hwm == -1 else 'none') }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+
+templates:
+ imports: from gnuradio import zeromq
+ make: zeromq.sub_source(${type.itemsize}, ${vlen}, ${address}, ${timeout}, ${pass_tags},
+ ${hwm})
+
+file_format: 1
diff --git a/gr-zeromq/grc/zeromq_sub_source.xml b/gr-zeromq/grc/zeromq_sub_source.xml
deleted file mode 100644
index 31e6170c6a..0000000000
--- a/gr-zeromq/grc/zeromq_sub_source.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<block>
- <name>ZMQ SUB Source</name>
- <key>zeromq_sub_source</key>
- <category>[Core]/ZeroMQ Interfaces</category>
- <import>from gnuradio import zeromq</import>
- <make>zeromq.sub_source($type.itemsize, $vlen, $address, $timeout, $pass_tags, $hwm)</make>
-
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>itemsize:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>itemsize:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>itemsize:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>itemsize:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>itemsize:gr.sizeof_char</opt>
- </option>
- </param>
-
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Address</name>
- <key>address</key>
- <type>string</type>
- </param>
-
- <param>
- <name>Timeout (msec)</name>
- <key>timeout</key>
- <value>100</value>
- <type>float</type>
- </param>
-
- <param>
- <name>Pass Tags</name>
- <key>pass_tags</key>
- <value>False</value>
- <type>enum</type>
- <option>
- <name>Yes</name>
- <key>True</key>
- </option>
- <option>
- <name>No</name>
- <key>False</key>
- </option>
- </param>
-
- <param>
- <name>High Watermark</name>
- <key>hwm</key>
- <value>-1</value>
- <type>int</type>
- <hide>#if $hwm() == -1 then 'part' else 'none'#</hide>
- </param>
-
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- </source>
-
-</block>
diff --git a/grc/blocks/CMakeLists.txt b/grc/blocks/CMakeLists.txt
index 2dbc7c6d0d..f5ec6dd214 100644
--- a/grc/blocks/CMakeLists.txt
+++ b/grc/blocks/CMakeLists.txt
@@ -21,40 +21,39 @@
include(GrPython)
file(GLOB yml_files "*.yml")
-file(GLOB xml_files "*.xml")
-macro(REPLACE_IN_FILE _xml_block match replace)
- set(xml_block_src "${CMAKE_CURRENT_SOURCE_DIR}/${_xml_block}")
- set(xml_block "${CMAKE_CURRENT_BINARY_DIR}/${_xml_block}")
+macro(REPLACE_IN_FILE _yml_block match replace)
+ set(yml_block_src "${CMAKE_CURRENT_SOURCE_DIR}/${_yml_block}")
+ set(yml_block "${CMAKE_CURRENT_BINARY_DIR}/${_yml_block}")
- list(REMOVE_ITEM xml_files "${xml_block_src}")
- file(READ "${xml_block_src}" xml_block_src_text)
+ list(REMOVE_ITEM yml_files "${yml_block_src}")
+ file(READ "${yml_block_src}" yml_block_src_text)
string(REPLACE "${match}" "${replace}"
- xml_block_text "${xml_block_src_text}")
- file(WRITE "${xml_block}" "${xml_block_text}")
+ yml_block_text "${yml_block_src_text}")
+ file(WRITE "${yml_block}" "${yml_block_text}")
- list(APPEND generated_xml_files "${xml_block}")
+ list(APPEND generated_yml_files "${yml_block}")
endmacro()
-macro(GEN_BLOCK_XML _generator _xml_block)
+macro(GEN_BLOCK_YML _generator _yml_block)
set(generator ${CMAKE_CURRENT_SOURCE_DIR}/${_generator})
- set(xml_block ${CMAKE_CURRENT_BINARY_DIR}/${_xml_block})
- list(APPEND generated_xml_files ${xml_block})
+ set(yml_block ${CMAKE_CURRENT_BINARY_DIR}/${_yml_block})
+ list(APPEND generated_yml_files ${yml_block})
add_custom_command(
- DEPENDS ${generator} OUTPUT ${xml_block}
- COMMAND ${PYTHON_EXECUTABLE} ${generator} ${xml_block}
+ DEPENDS ${generator} OUTPUT ${yml_block}
+ COMMAND ${PYTHON_EXECUTABLE} ${generator} ${yml_block}
)
endmacro()
-GEN_BLOCK_XML(variable_struct.xml.py variable_struct.xml)
+GEN_BLOCK_YML(variable_struct.block.yml.py variable_struct.block.yml)
if(DESIRED_QT_VERSION EQUAL 4)
- REPLACE_IN_FILE(options.xml PyQt5 PyQt4)
+ REPLACE_IN_FILE(options.yml PyQt5 PyQt4)
endif()
-add_custom_target(grc_generated_xml ALL DEPENDS ${generated_xml_files})
+add_custom_target(grc_generated_yml ALL DEPENDS ${generated_yml_files})
install(
- FILES ${yml_files} ${xml_files} ${generated_xml_files}
+ FILES ${yml_files} ${generated_yml_files}
DESTINATION ${GRC_BLOCKS_DIR}
)
diff --git a/grc/blocks/block_tree.xml b/grc/blocks/block_tree.xml
deleted file mode 100644
index 2a063f1f60..0000000000
--- a/grc/blocks/block_tree.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-<cat>
- <name>[Core]</name>
- <cat>
- <name>Misc</name>
- <block>pad_source</block>
- <block>pad_sink</block>
- <block>virtual_source</block>
- <block>virtual_sink</block>
-
- <block>epy_module</block>
-
- <block>note</block>
- <block>import</block>
- </cat>
- <cat>
- <name>Variables</name>
- <block>variable</block>
- <block>variable_struct</block>
- <block>variable_config</block>
- <block>variable_function_probe</block>
- <block>parameter</block>
- </cat>
-</cat>
diff --git a/grc/blocks/grc.tree.yml b/grc/blocks/grc.tree.yml
new file mode 100644
index 0000000000..c84a6dc478
--- /dev/null
+++ b/grc/blocks/grc.tree.yml
@@ -0,0 +1,15 @@
+'[Core]':
+- Misc:
+ - pad_source
+ - pad_sink
+ - virtual_source
+ - virtual_sink
+ - epy_module
+ - note
+ - import
+- Variables:
+ - variable
+ - variable_struct
+ - variable_config
+ - variable_function_probe
+ - parameter
diff --git a/grc/blocks/import.block.yml b/grc/blocks/import.block.yml
new file mode 100644
index 0000000000..2d36b7396d
--- /dev/null
+++ b/grc/blocks/import.block.yml
@@ -0,0 +1,20 @@
+id: import_
+label: Import
+
+parameters:
+- id: imports
+ label: Import
+ dtype: import
+
+templates:
+ imports: ${imports}
+
+documentation: |-
+ Import additional python modules into the namespace.
+
+ Examples:
+ from gnuradio.filter import firdes
+ import math,cmath
+ from math import pi
+
+file_format: 1
diff --git a/grc/blocks/import.xml b/grc/blocks/import.xml
deleted file mode 100644
index 58e99a2d01..0000000000
--- a/grc/blocks/import.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Import python modules into the namespace
-###################################################
- -->
-<block>
- <name>Import</name>
- <key>import</key>
- <import>$imports</import>
- <make></make>
- <param>
- <name>Import</name>
- <key>imports</key>
- <value></value>
- <type>import</type>
- </param>
- <doc>
-Import additional python modules into the namespace.
-
-Examples:
-from gnuradio.filter import firdes
-import math,cmath
-from math import pi
- </doc>
-</block>
diff --git a/grc/blocks/note.block.yml b/grc/blocks/note.block.yml
new file mode 100644
index 0000000000..3f21a75ceb
--- /dev/null
+++ b/grc/blocks/note.block.yml
@@ -0,0 +1,9 @@
+id: note
+label: Note
+
+parameters:
+- id: note
+ label: Note
+ dtype: string
+
+file_format: 1
diff --git a/grc/blocks/note.xml b/grc/blocks/note.xml
deleted file mode 100644
index db6687c033..0000000000
--- a/grc/blocks/note.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Note Block (dummy)
-###################################################
- -->
-<block>
- <name>Note</name>
- <key>note</key>
- <make></make>
- <param>
- <name>Note</name>
- <key>note</key>
- <value></value>
- <type>string</type>
- </param>
-</block>
diff --git a/grc/blocks/options.block.yml b/grc/blocks/options.block.yml
new file mode 100644
index 0000000000..ab18f8ae5f
--- /dev/null
+++ b/grc/blocks/options.block.yml
@@ -0,0 +1,146 @@
+id: options
+label: Options
+
+parameters:
+- id: title
+ label: Title
+ dtype: string
+ hide: ${ ('none' if title else 'part') }
+- id: author
+ label: Author
+ dtype: string
+ hide: ${ ('none' if author else 'part') }
+- id: description
+ label: Description
+ dtype: string
+ hide: ${ ('none' if description else 'part') }
+- id: window_size
+ label: Canvas Size
+ dtype: int_vector
+ hide: part
+- id: generate_options
+ label: Generate Options
+ dtype: enum
+ default: qt_gui
+ options: [qt_gui, bokeh_gui, no_gui, hb, hb_qt_gui]
+ option_labels: [QT GUI, Bokeh GUI, No GUI, Hier Block, Hier Block (QT GUI)]
+- id: category
+ label: Category
+ dtype: string
+ default: '[GRC Hier Blocks]'
+ hide: ${ ('none' if generate_options.startswith('hb') else 'all') }
+- id: run_options
+ label: Run Options
+ dtype: enum
+ default: prompt
+ options: [run, prompt]
+ option_labels: [Run to Completion, Prompt for Exit]
+ hide: ${ ('none' if generate_options == 'no_gui' else 'all') }
+- id: placement
+ label: Widget Placement
+ dtype: int_vector
+ default: (0,0)
+ hide: ${ ('part' if generate_options == 'bokeh_gui' else 'all') }
+- id: sizing_mode
+ label: Sizing Mode
+ dtype: enum
+ default: fixed
+ options: [fixed, stretch_both, scale_width, scale_height, scale_both]
+ option_labels: [Fixed, Stretch Both, Scale Width, Scale Height, Scale Both]
+ hide: ${ ('part' if generate_options == 'bokeh_gui' else 'all') }
+- id: run
+ label: Run
+ dtype: bool
+ default: 'True'
+ options: ['True', 'False']
+ option_labels: [Autostart, 'Off']
+ hide: ${ ('all' if generate_options not in ('qt_gui', 'bokeh_gui') else ('part'
+ if run else 'none')) }
+- id: max_nouts
+ label: Max Number of Output
+ dtype: int
+ default: '0'
+ hide: ${ ('all' if generate_options.startswith('hb') else ('none' if max_nouts
+ else 'part')) }
+- id: realtime_scheduling
+ label: Realtime Scheduling
+ dtype: enum
+ options: ['', '1']
+ option_labels: ['Off', 'On']
+ hide: ${ ('all' if generate_options.startswith('hb') else ('none' if realtime_scheduling
+ else 'part')) }
+- id: qt_qss_theme
+ label: QSS Theme
+ dtype: file_open
+ hide: ${ ('all' if generate_options != 'qt_gui' else ('none' if qt_qss_theme else
+ 'part')) }
+- id: thread_safe_setters
+ label: Thread-safe setters
+ category: Advanced
+ dtype: enum
+ options: ['', '1']
+ option_labels: ['Off', 'On']
+ hide: part
+- id: run_command
+ label: Run Command
+ category: Advanced
+ dtype: string
+ default: '{python} -u {filename}'
+ hide: ${ ('all' if generate_options.startswith('hb') else 'part') }
+- id: hier_block_src_path
+ label: Hier Block Source Path
+ category: Advanced
+ dtype: string
+ default: '.:'
+ hide: part
+
+asserts:
+- ${ not window_size or len(window_size) == 2 }
+- ${ not window_size or 300 <= window_size[0] <= 4096 }
+- ${ not window_size or 300 <= window_size[1] <= 4096 }
+- ${ len(placement) == 4 or len(placement) == 2 }
+- ${ all(i >= 0 for i in placement) }
+
+templates:
+ imports: |-
+ from gnuradio import gr
+ from gnuradio.filter import firdes
+ % if generate_options == 'qt_gui':
+ from PyQt5 import Qt
+ import sys
+ % endif
+ % if generate_options == 'bokeh_gui':
+ import time
+ import signal
+ import functools
+ from bokeh.client import push_session
+ from bokeh.plotting import curdoc
+ % endif
+ % if not generate_options.startswith('hb'):
+ from argparse import ArgumentParser
+ from gnuradio.eng_arg import eng_float, intx
+ from gnuradio import eng_notation
+ % endif
+ callbacks:
+ - 'if ${run}: self.start()
+
+ else: self.stop(); self.wait()'
+
+documentation: |-
+ The options block sets special parameters for the flow graph. Only one option block is allowed per flow graph.
+
+ Title, author, and description parameters are for identification purposes.
+
+ The window size controls the dimensions of the flow graph editor. The window size (width, height) must be between (300, 300) and (4096, 4096).
+
+ The generate options controls the type of code generated. Non-graphical flow graphs should avoid using graphical sinks or graphical variable controls.
+
+ In a graphical application, run can be controlled by a variable to start and stop the flowgraph at runtime.
+
+ The id of this block determines the name of the generated file and the name of the class. For example, an id of my_block will generate the file my_block.py and class my_block(gr....
+
+ The category parameter determines the placement of the block in the block selection window. The category only applies when creating hier blocks. To put hier blocks into the root category, enter / for the category.
+
+ The Max Number of Output is the maximum number of output items allowed for any block in the flowgraph; to disable this set the max_nouts equal to 0.Use this to adjust the maximum latency a flowgraph can exhibit.
+
+file_format: 1
diff --git a/grc/blocks/options.xml b/grc/blocks/options.xml
deleted file mode 100644
index 5fa4fc1b17..0000000000
--- a/grc/blocks/options.xml
+++ /dev/null
@@ -1,250 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Options Block:
-## options for window size,
-## and flow graph building.
-###################################################
- -->
-<block>
- <name>Options</name>
- <key>options</key>
- <import>from gnuradio import gr</import>
- <import>from gnuradio.filter import firdes</import>
- <import>#if $generate_options() == 'qt_gui'
-from PyQt5 import Qt
-import sys
-#end if
-#if $generate_options() == 'bokeh_gui'
-import time
-import signal
-import functools
-from bokeh.client import push_session
-from bokeh.plotting import curdoc
-#end if
-#if not $generate_options().startswith('hb')
-from argparse import ArgumentParser
-from gnuradio.eng_arg import eng_float, intx
-from gnuradio import eng_notation
-#end if</import>
- <make></make>
- <callback>if $run: self.start()
-else: self.stop(); self.wait()</callback>
- <param>
- <name>Title</name>
- <key>title</key>
- <value></value>
- <type>string</type>
- <hide>#if $title() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Author</name>
- <key>author</key>
- <value></value>
- <type>string</type>
- <hide>#if $author() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Description</name>
- <key>description</key>
- <value></value>
- <type>string</type>
- <hide>#if $description() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Canvas Size</name>
- <key>window_size</key>
- <value></value>
- <type>int_vector</type>
- <hide>part</hide>
- </param>
- <param>
- <name>Generate Options</name>
- <key>generate_options</key>
- <value>qt_gui</value>
- <type>enum</type>
- <option>
- <name>QT GUI</name>
- <key>qt_gui</key>
- </option>
- <option>
- <name>Bokeh GUI</name>
- <key>bokeh_gui</key>
- </option>
- <option>
- <name>No GUI</name>
- <key>no_gui</key>
- </option>
- <option>
- <name>Hier Block</name>
- <key>hb</key>
- </option>
- <option>
- <name>Hier Block (QT GUI)</name>
- <key>hb_qt_gui</key>
- </option>
- </param>
- <param>
- <name>Category</name>
- <key>category</key>
- <value>[GRC Hier Blocks]</value>
- <type>string</type>
- <hide>#if $generate_options().startswith('hb') then 'none' else 'all'#</hide>
- </param>
- <param>
- <name>Run Options</name>
- <key>run_options</key>
- <value>prompt</value>
- <type>enum</type>
- <hide>#if $generate_options() == 'no_gui' then 'none' else 'all'#</hide>
- <option>
- <name>Run to Completion</name>
- <key>run</key>
- </option>
- <option>
- <name>Prompt for Exit</name>
- <key>prompt</key>
- </option>
- </param>
- <param>
- <name>Widget Placement</name>
- <key>placement</key>
- <value>(0,0)</value>
- <type>int_vector</type>
- <hide>#if $generate_options() == 'bokeh_gui' then 'part' else 'all'#</hide>
- </param>
- <param>
- <name>Sizing Mode</name>
- <key>sizing_mode</key>
- <value>fixed</value>
- <type>enum</type>
- <hide>#if $generate_options() == 'bokeh_gui' then 'part' else 'all'#</hide>
- <option>
- <name>Fixed</name>
- <key>fixed</key>
- </option>
- <option>
- <name>Stretch Both</name>
- <key>stretch_both</key>
- </option>
- <option>
- <name>Scale Width</name>
- <key>scale_width</key>
- </option>
- <option>
- <name>Scale Height</name>
- <key>scale_height</key>
- </option>
- <option>
- <name>Scale Both</name>
- <key>scale_both</key>
- </option>
- </param>
- <param>
- <name>Run</name>
- <key>run</key>
- <value>True</value>
- <type>bool</type>
- <hide>#if $generate_options() not in ('qt_gui', 'bokeh_gui') then 'all' else ('part' if $run() else 'none')#</hide>
- <option>
- <name>Autostart</name>
- <key>True</key>
- </option>
- <option>
- <name>Off</name>
- <key>False</key>
- </option>
- </param>
- <param>
- <name>Max Number of Output</name>
- <key>max_nouts</key>
- <value>0</value>
- <type>int</type>
- <hide>#if $generate_options().startswith('hb') then 'all' else ('none' if $max_nouts() else 'part')#</hide>
- </param>
- <param>
- <name>Realtime Scheduling</name>
- <key>realtime_scheduling</key>
- <value></value>
- <type>enum</type>
- <hide>#if $generate_options().startswith('hb') then 'all' else ('none' if $realtime_scheduling() else 'part')#</hide>
- <option>
- <name>Off</name>
- <key></key>
- </option>
- <option>
- <name>On</name>
- <key>1</key>
- </option>
- </param>
- <param>
- <name>QSS Theme</name>
- <key>qt_qss_theme</key>
- <value></value>
- <type>file_open</type>
- <hide>#if $generate_options() != 'qt_gui' then 'all' else ('none' if $qt_qss_theme() else 'part')#</hide>
- </param>
- <param>
- <name>Thread-safe setters</name>
- <key>thread_safe_setters</key>
- <value></value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Off</name>
- <key></key>
- </option>
- <option>
- <name>On</name>
- <key>1</key>
- </option>
- <tab>Advanced</tab>
- </param>
- <param>
- <name>Run Command</name>
- <key>run_command</key>
- <value>{python} -u {filename}</value>
- <type>string</type>
- <hide>#if $generate_options().startswith('hb') then 'all' else 'part'</hide>
- <tab>Advanced</tab>
- </param>
- <param>
- <name>Hier Block Source Path</name>
- <key>hier_block_src_path</key>
- <value>.:</value>
- <type>string</type>
- <hide>part</hide>
- <tab>Advanced</tab>
- </param>
- <check>not $window_size or len($window_size) == 2</check>
- <check>not $window_size or 300 &lt;= $(window_size)[0] &lt;= 4096</check>
- <check>not $window_size or 300 &lt;= $(window_size)[1] &lt;= 4096</check>
- <check>len($placement) == 4 or len($placement) == 2</check>
- <check>all(i &gt;= 0 for i in $(placement))</check>
- <doc>
-The options block sets special parameters for the flow graph. \
-Only one option block is allowed per flow graph.
-
-Title, author, and description parameters are for identification purposes.
-
-The window size controls the dimensions of the flow graph editor. \
-The window size (width, height) must be between (300, 300) and (4096, 4096).
-
-The generate options controls the type of code generated. \
-Non-graphical flow graphs should avoid using graphical sinks or graphical variable controls.
-
-In a graphical application, \
-run can be controlled by a variable to start and stop the flowgraph at runtime.
-
-The id of this block determines the name of the generated file and the name of the class. \
-For example, an id of my_block will generate the file my_block.py and class my_block(gr....
-
-The category parameter determines the placement of the block in the block selection window. \
-The category only applies when creating hier blocks. \
-To put hier blocks into the root category, enter / for the category.
-
-The Max Number of Output is the maximum number of output items allowed for any block \
-in the flowgraph; to disable this set the max_nouts equal to 0.\
-Use this to adjust the maximum latency a flowgraph can exhibit.
- </doc>
-</block>
diff --git a/grc/blocks/pad_sink.block.yml b/grc/blocks/pad_sink.block.yml
new file mode 100644
index 0000000000..d304a998b4
--- /dev/null
+++ b/grc/blocks/pad_sink.block.yml
@@ -0,0 +1,51 @@
+id: pad_sink
+label: Pad Sink
+
+parameters:
+- id: label
+ label: Label
+ dtype: string
+ default: out
+- id: type
+ label: Input Type
+ dtype: enum
+ options: [complex, float, int, short, byte, bit, message, '']
+ option_labels: [Complex, Float, Int, Short, Byte, Bits, Message, Wildcard]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char, gr.sizeof_char, '0', '0']
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: num_streams
+ label: Num Streams
+ dtype: int
+ default: '1'
+ hide: part
+- id: optional
+ label: Optional
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: [Optional, Required]
+ hide: part
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_streams }
+
+asserts:
+- ${ vlen > 0 }
+- ${ num_streams > 0 }
+
+documentation: |-
+ The inputs of this block will become the outputs to this flow graph when it is instantiated as a hierarchical block.
+
+ Pad sink will be ordered alphabetically by their ids. The first pad sink will have an index of 0.
+
+file_format: 1
diff --git a/grc/blocks/pad_sink.xml b/grc/blocks/pad_sink.xml
deleted file mode 100644
index 8ea8871d2e..0000000000
--- a/grc/blocks/pad_sink.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Pad Sink: IO Pads
-###################################################
- -->
-<block>
- <name>Pad Sink</name>
- <key>pad_sink</key>
- <make></make>
- <param>
- <name>Label</name>
- <key>label</key>
- <value>out</value>
- <type>string</type>
- </param>
- <param>
- <name>Input Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- <option>
- <name>Bits</name>
- <key>bit</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- <option>
- <name>Message</name>
- <key>message</key>
- <opt>size:0</opt>
- </option>
- <option>
- <name>Wildcard</name>
- <key></key>
- <opt>size:0</opt>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Num Streams</name>
- <key>num_streams</key>
- <value>1</value>
- <type>int</type>
- </param>
- <param>
- <name>Optional</name>
- <key>optional</key>
- <value>False</value>
- <type>bool</type>
- <hide>part</hide>
- <option>
- <name>Optional</name>
- <key>True</key>
- </option>
- <option>
- <name>Required</name>
- <key>False</key>
- </option>
- </param>
- <check>$vlen &gt; 0</check>
- <check>$num_streams &gt; 0</check>
- <sink>
- <name>in</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_streams</nports>
- </sink>
- <doc>
-The inputs of this block will become the outputs to this flow graph when it is instantiated as a hierarchical block.
-
-Pad sink will be ordered alphabetically by their ids. The first pad sink will have an index of 0.
- </doc>
-</block>
diff --git a/grc/blocks/pad_source.block.yml b/grc/blocks/pad_source.block.yml
new file mode 100644
index 0000000000..92f7a8b822
--- /dev/null
+++ b/grc/blocks/pad_source.block.yml
@@ -0,0 +1,51 @@
+id: pad_source
+label: Pad Source
+
+parameters:
+- id: label
+ label: Label
+ dtype: string
+ default: in
+- id: type
+ label: Output Type
+ dtype: enum
+ options: [complex, float, int, short, byte, bit, message, '']
+ option_labels: [Complex, Float, Int, Short, Byte, Bits, Message, Wildcard]
+ option_attributes:
+ size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, gr.sizeof_short,
+ gr.sizeof_char, gr.sizeof_char, '0', '0']
+ hide: part
+- id: vlen
+ label: Vec Length
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: num_streams
+ label: Num Streams
+ dtype: int
+ default: '1'
+ hide: part
+- id: optional
+ label: Optional
+ dtype: bool
+ default: 'False'
+ options: ['True', 'False']
+ option_labels: [Optional, Required]
+ hide: part
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+ vlen: ${ vlen }
+ multiplicity: ${ num_streams }
+
+asserts:
+- ${ vlen > 0 }
+- ${ num_streams > 0 }
+
+documentation: |-
+ The outputs of this block will become the inputs to this flow graph when it is instantiated as a hierarchical block.
+
+ Pad sources will be ordered alphabetically by their ids. The first pad source will have an index of 0.
+
+file_format: 1
diff --git a/grc/blocks/pad_source.xml b/grc/blocks/pad_source.xml
deleted file mode 100644
index 3d8ccbed6a..0000000000
--- a/grc/blocks/pad_source.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Pad Source: IO Pads
-###################################################
- -->
-<block>
- <name>Pad Source</name>
- <key>pad_source</key>
- <make></make>
- <param>
- <name>Label</name>
- <key>label</key>
- <value>in</value>
- <type>string</type>
- </param>
- <param>
- <name>Output Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>size:gr.sizeof_gr_complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>float</key>
- <opt>size:gr.sizeof_float</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>size:gr.sizeof_int</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>size:gr.sizeof_short</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- <option>
- <name>Bits</name>
- <key>bit</key>
- <opt>size:gr.sizeof_char</opt>
- </option>
- <option>
- <name>Message</name>
- <key>message</key>
- <opt>size:0</opt>
- </option>
- <option>
- <name>Wildcard</name>
- <key></key>
- <opt>size:0</opt>
- </option>
- </param>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Num Streams</name>
- <key>num_streams</key>
- <value>1</value>
- <type>int</type>
- </param>
-
- <param>
- <name>Optional</name>
- <key>optional</key>
- <value>False</value>
- <type>bool</type>
- <hide>part</hide>
- <option>
- <name>Optional</name>
- <key>True</key>
- </option>
- <option>
- <name>Required</name>
- <key>False</key>
- </option>
- </param>
- <check>$vlen &gt; 0</check>
- <check>$num_streams &gt; 0</check>
- <source>
- <name>out</name>
- <type>$type</type>
- <vlen>$vlen</vlen>
- <nports>$num_streams</nports>
- </source>
- <doc>
-The outputs of this block will become the inputs to this flow graph when it is instantiated as a hierarchical block.
-
-Pad sources will be ordered alphabetically by their ids. The first pad source will have an index of 0.
- </doc>
-</block>
diff --git a/grc/blocks/parameter.block.yml b/grc/blocks/parameter.block.yml
new file mode 100644
index 0000000000..ac97c7d319
--- /dev/null
+++ b/grc/blocks/parameter.block.yml
@@ -0,0 +1,55 @@
+id: parameter
+label: Parameter
+
+parameters:
+- id: label
+ label: Label
+ dtype: string
+ hide: ${ ('none' if label else 'part') }
+- id: value
+ label: Value
+ dtype: ${ type.type }
+ default: '0'
+- id: type
+ label: Type
+ dtype: enum
+ options: ['', complex, eng_float, intx, long, str]
+ option_labels: [None, Complex, Float, Int, Long, String]
+ option_attributes:
+ type: [raw, complex, real, int, int, string]
+ hide: ${ ('none' if type else 'part') }
+- id: short_id
+ label: Short ID
+ dtype: string
+ hide: ${ 'all' if not type else ('none' if short_id else 'part') }
+- id: hide
+ label: Show
+ dtype: enum
+ options: [none, part]
+ option_labels: [Always, Only in Properties]
+ hide: part
+
+asserts:
+- ${ len(short_id) in (0, 1) }
+- ${ short_id == '' or short_id.isalpha() }
+
+templates:
+ var_make: self.${id} = ${id}
+ make: ${value}
+
+documentation: |-
+ This block represents a parameter to the flow graph. A parameter can be used to pass command line arguments into a top block. Or, parameters can pass arguments into an instantiated hierarchical block.
+
+ The paramater value cannot depend on any variables.
+
+ Leave the label blank to use the parameter id as the label.
+
+ When type is not None, this parameter also becomes a command line option of the form:
+
+ -[short_id] --[id] [value]
+
+ The Short ID field may be left blank.
+
+ To disable showing the parameter on the hierarchical block in GRC, use Only in Properties option in the Show field.
+
+file_format: 1
diff --git a/grc/blocks/parameter.xml b/grc/blocks/parameter.xml
deleted file mode 100644
index f01527acb0..0000000000
--- a/grc/blocks/parameter.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Parameter block: a grc variable with key, value
-###################################################
- -->
-<block>
- <name>Parameter</name>
- <key>parameter</key>
- <var_make>self.$(id) = $(id)</var_make>
- <make>$value</make>
- <param>
- <name>Label</name>
- <key>label</key>
- <value></value>
- <type>string</type>
- <hide>#if $label() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Value</name>
- <key>value</key>
- <value>0</value>
- <type>$type.type</type>
- </param>
- <param>
- <name>Type</name>
- <key>type</key>
- <value></value>
- <type>enum</type>
- <hide>#if $type() then 'none' else 'part'#</hide>
- <option>
- <name>None</name>
- <key></key>
- <opt>type:raw</opt>
- </option>
- <option>
- <name>Complex</name>
- <key>complex</key>
- <opt>type:complex</opt>
- </option>
- <option>
- <name>Float</name>
- <key>eng_float</key>
- <opt>type:real</opt>
- </option>
- <option>
- <name>Int</name>
- <key>intx</key>
- <opt>type:int</opt>
- </option>
- <option>
- <name>Long</name>
- <key>long</key>
- <opt>type:int</opt>
- </option>
- <option>
- <name>String</name>
- <key>str</key>
- <opt>type:string</opt>
- </option>
- <!-- Do not forget to add option value type handler import into
- grc/python/flow_graph.tmpl for each new type. -->
- <!-- not supported yet in tmpl
- <option>
- <name>Boolean</name>
- <key>bool</key>
- <opt>type:bool</opt>
- </option>
- -->
- </param>
- <param>
- <name>Short ID</name>
- <key>short_id</key>
- <value></value>
- <type>string</type>
- <hide>#if not $type()
-all#slurp
-#elif $short_id()
-none#slurp
-#else
-part#slurp
-#end if</hide>
- </param>
- <param>
- <name>Show</name>
- <key>hide</key>
- <value></value>
- <type>enum</type>
- <hide>part</hide>
- <option>
- <name>Always</name>
- <key>none</key> <!--## Do not hide the parameter value-->
- </option>
- <option>
- <name>Only in Properties</name>
- <key>part</key> <!--## Partially hide the parameter value-->
- </option>
- </param>
- <check>len($short_id) in (0, 1)</check>
- <check>$short_id == '' or $(short_id).isalpha()</check>
- <doc>
-This block represents a parameter to the flow graph. \
-A parameter can be used to pass command line arguments into a top block. \
-Or, parameters can pass arguments into an instantiated hierarchical block.
-
-The paramater value cannot depend on any variables.
-
-Leave the label blank to use the parameter id as the label.
-
-When type is not None, this parameter also becomes a command line option of the form:
-
--[short_id] --[id] [value]
-
-The Short ID field may be left blank.
-
-To disable showing the parameter on the hierarchical block in GRC, use Only in Properties option in the Show field.
- </doc>
-</block>
diff --git a/grc/blocks/variable.block.yml b/grc/blocks/variable.block.yml
new file mode 100644
index 0000000000..fa62dabe87
--- /dev/null
+++ b/grc/blocks/variable.block.yml
@@ -0,0 +1,19 @@
+id: variable
+label: Variable
+
+parameters:
+- id: value
+ label: Value
+ dtype: raw
+ default: '0'
+value: ${ value }
+
+templates:
+ var_make: self.${id} = ${id} = ${value}
+ callbacks:
+ - self.set_${id}(${value})
+
+documentation: |-
+ This block maps a value to a unique variable. This variable block has no graphical representation.
+
+file_format: 1
diff --git a/grc/blocks/variable.xml b/grc/blocks/variable.xml
deleted file mode 100644
index afee0f5d4a..0000000000
--- a/grc/blocks/variable.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable block: a grc variable with key, value
-###################################################
- -->
-<block>
- <name>Variable</name>
- <key>variable</key>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make></make>
- <callback>self.set_$(id)($value)</callback>
- <param>
- <name>Value</name>
- <key>value</key>
- <value>0</value>
- <type>raw</type>
- </param>
- <doc>
-This block maps a value to a unique variable. \
-This variable block has no graphical representation.
- </doc>
-</block>
diff --git a/grc/blocks/variable_config.block.yml b/grc/blocks/variable_config.block.yml
new file mode 100644
index 0000000000..bb64ea2a8f
--- /dev/null
+++ b/grc/blocks/variable_config.block.yml
@@ -0,0 +1,58 @@
+id: variable_config
+label: Variable Config
+
+parameters:
+- id: value
+ label: Default Value
+ dtype: ${ type }
+ default: '0'
+- id: type
+ label: Type
+ dtype: enum
+ default: real
+ options: [real, int, bool, string]
+ option_labels: [Float, Int, Bool, String]
+ option_attributes:
+ get: [getfloat, getint, getboolean, get]
+- id: config_file
+ label: Config File
+ dtype: file_open
+ default: default
+- id: section
+ label: Section
+ dtype: string
+ default: main
+- id: option
+ label: Option
+ dtype: string
+ default: key
+- id: writeback
+ label: WriteBack
+ dtype: raw
+ default: None
+value: ${ value }
+
+templates:
+ imports: import ConfigParser
+ var_make: 'self._${id}_config = ConfigParser.ConfigParser()
+
+ self._${id}_config.read(${config_file})
+
+ try: ${id} = self._${id}_config.${type.get}(${section}, ${option})
+
+ except: ${id} = ${value}
+
+ self.${id} = ${id}'
+ callbacks:
+ - self.set_${id}(${value})
+ - "self._${id}_config = ConfigParser.ConfigParser()\nself._${id}_config.read(${config_file})\n\
+ if not self._${id}_config.has_section(${section}):\n\tself._${id}_config.add_section(${section})\n\
+ self._${id}_config.set(${section}, ${option}, str(${writeback}))\nself._${id}_config.write(open(${config_file},\
+ \ 'w'))"
+
+documentation: |-
+ This block represents a variable that can be read from a config file.
+
+ To save the value back into the config file: enter the name of another variable into the writeback param. When the other variable is changed at runtime, the config file will be re-written.
+
+file_format: 1
diff --git a/grc/blocks/variable_config.xml b/grc/blocks/variable_config.xml
deleted file mode 100644
index 11bff9edc2..0000000000
--- a/grc/blocks/variable_config.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable Config block:
-## a variable that reads and writes to a config file
-###################################################
- -->
-<block>
- <name>Variable Config</name>
- <key>variable_config</key>
- <import>import ConfigParser</import>
- <var_make>self._$(id)_config = ConfigParser.ConfigParser()
-self._$(id)_config.read($config_file)
-try: $(id) = self._$(id)_config.$(type.get)($section, $option)
-except: $(id) = $value
-self.$(id) = $(id)</var_make>
- <make></make>
- <callback>self.set_$(id)($value)</callback>
- <callback>self._$(id)_config = ConfigParser.ConfigParser()
-self._$(id)_config.read($config_file)
-if not self._$(id)_config.has_section($section):
- self._$(id)_config.add_section($section)
-self._$(id)_config.set($section, $option, str($writeback))
-self._$(id)_config.write(open($config_file, 'w'))</callback>
- <param>
- <name>Default Value</name>
- <key>value</key>
- <value>0</value>
- <type>$type</type>
- </param>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>real</value>
- <type>enum</type>
- <option>
- <name>Float</name>
- <key>real</key>
- <opt>get:getfloat</opt>
- </option>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>get:getint</opt>
- </option>
- <option>
- <name>Bool</name>
- <key>bool</key>
- <opt>get:getboolean</opt>
- </option>
- <option>
- <name>String</name>
- <key>string</key>
- <opt>get:get</opt>
- </option>
- </param>
- <param>
- <name>Config File</name>
- <key>config_file</key>
- <value>default</value>
- <type>file_open</type>
- </param>
- <param>
- <name>Section</name>
- <key>section</key>
- <value>main</value>
- <type>string</type>
- </param>
- <param>
- <name>Option</name>
- <key>option</key>
- <value>key</value>
- <type>string</type>
- </param>
- <param>
- <name>WriteBack</name>
- <key>writeback</key>
- <value>None</value>
- <type>raw</type>
- </param>
- <doc>
-This block represents a variable that can be read from a config file.
-
-To save the value back into the config file: \
-enter the name of another variable into the writeback param. \
-When the other variable is changed at runtime, the config file will be re-written.
- </doc>
-</block>
diff --git a/grc/blocks/variable_function_probe.block.yml b/grc/blocks/variable_function_probe.block.yml
new file mode 100644
index 0000000000..702ab5d60e
--- /dev/null
+++ b/grc/blocks/variable_function_probe.block.yml
@@ -0,0 +1,54 @@
+id: variable_function_probe
+label: Function Probe
+
+parameters:
+- id: block_id
+ label: Block ID
+ dtype: string
+ default: my_block_0
+- id: function_name
+ label: Function Name
+ dtype: string
+ default: get_number
+- id: function_args
+ label: Function Args
+ dtype: string
+ hide: ${ ('none' if function_args else 'part') }
+- id: poll_rate
+ label: Poll Rate (Hz)
+ dtype: real
+ default: '10'
+- id: value
+ label: Initial Value
+ dtype: raw
+ default: '0'
+ hide: part
+value: ${ value }
+
+templates:
+ imports: |-
+ import time
+ import threading
+ var_make: self.${id} = ${id} = ${value}
+ make: "\ndef _${id}_probe():\n while True:\n <% obj = 'self' + ('.'\
+ \ + block_id if block_id else '') %>\n val = ${obj}.${function_name}(${function_args})\n\
+ \ try:\n self.set_${id}(val)\n except AttributeError:\n\
+ \ pass\n time.sleep(1.0 / (${poll_rate}))\n_${id}_thread\
+ \ = threading.Thread(target=_${id}_probe)\n_${id}_thread.daemon = True\n_${id}_thread.start()\n\
+ \ "
+ callbacks:
+ - self.set_${id}(${value})
+
+documentation: |-
+ Periodically probe a function and set its value to this variable.
+
+ Set the values for block ID, function name, and function args appropriately: Block ID should be the ID of another block in this flow graph. An empty Block ID references the flow graph itself. Function name should be the name of a class method on that block. Function args are the parameters passed into that function. For a function with no arguments, leave function args blank. When passing a string for the function arguments, quote the string literal: '"arg"'.
+
+ The values will used literally, and generated into the following form:
+ self.block_id.function_name(function_args)
+ or, if the Block ID is empty,
+ self.function_name(function_args)
+
+ To poll a stream for a level, use this with the probe signal block.
+
+file_format: 1
diff --git a/grc/blocks/variable_function_probe.xml b/grc/blocks/variable_function_probe.xml
deleted file mode 100644
index 47c11b29fe..0000000000
--- a/grc/blocks/variable_function_probe.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Variable function probe
-###################################################
- -->
-<block>
- <name>Function Probe</name>
- <key>variable_function_probe</key>
- <import>import time</import>
- <import>import threading</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>
-def _$(id)_probe():
- while True:
- #set $obj = 'self' + ('.' + $block_id() if $block_id() else '')
- val = $(obj).$(function_name())($(function_args()))
- try:
- self.set_$(id)(val)
- except AttributeError:
- pass
- time.sleep(1.0 / ($poll_rate))
-_$(id)_thread = threading.Thread(target=_$(id)_probe)
-_$(id)_thread.daemon = True
-_$(id)_thread.start()
- </make>
- <callback>self.set_$(id)($value)</callback>
- <param>
- <name>Block ID</name>
- <key>block_id</key>
- <value>my_block_0</value>
- <type>string</type>
- </param>
- <param>
- <name>Function Name</name>
- <key>function_name</key>
- <value>get_number</value>
- <type>string</type>
- </param>
- <param>
- <name>Function Args</name>
- <key>function_args</key>
- <value></value>
- <type>string</type>
- <hide>#if $function_args() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Poll Rate (Hz)</name>
- <key>poll_rate</key>
- <value>10</value>
- <type>real</type>
- </param>
- <param>
- <name>Initial Value</name>
- <key>value</key>
- <value>0</value>
- <type>raw</type>
- <hide>part</hide>
- </param>
- <doc>
-Periodically probe a function and set its value to this variable.
-
-Set the values for block ID, function name, and function args appropriately: \
-Block ID should be the ID of another block in this flow graph. \
-An empty Block ID references the flow graph itself. \
-Function name should be the name of a class method on that block. \
-Function args are the parameters passed into that function. \
-For a function with no arguments, leave function args blank. \
-When passing a string for the function arguments, quote the string literal: '"arg"'.
-
-The values will used literally, and generated into the following form:
- self.block_id.function_name(function_args)
-or, if the Block ID is empty,
- self.function_name(function_args)
-
-To poll a stream for a level, use this with the probe signal block.
- </doc>
-</block>
diff --git a/grc/blocks/variable_struct.block.yml.py b/grc/blocks/variable_struct.block.yml.py
new file mode 100644
index 0000000000..19b29982e7
--- /dev/null
+++ b/grc/blocks/variable_struct.block.yml.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+
+MAX_NUM_FIELDS = 20
+
+HEADER = """\
+id: variable_struct
+label: Struct Variable
+
+parameters:
+"""
+
+TEMPLATES = """\
+
+templates:
+ imports: "def struct(data): return type('Struct', (object,), data)()"
+ var_make: |-
+ self.${{id}} = ${{id}} = struct({{
+ % for i in range({0}):
+ <%
+ field = getVar('field' + str(i))
+ %>
+ % if len(str(field)) > 2:
+ ${{field}}: getVar('value' + str(i)),
+ % endif
+ % endfor
+ }})
+ var_value: |-
+ struct({{
+ % for i in range({0}):
+ <%
+ field = getVar('field' + str(i))
+ %>
+ % if len(str(field)) > 2:
+ ${{field}}: getVar('field' + str(i)),
+ % endif
+ % endfor
+ }})
+"""
+
+FIELD0 = """\
+- id: field0
+ label: Field 0
+ category: Fields
+ dtype: string
+ default: ${field0}
+ hide: part
+"""
+
+FIELDS = """\
+- id: field{0}
+ label: Field {0}
+ category: Fields
+ dtype: string
+ hide: part
+"""
+
+VALUES = """\
+- id: value{0}
+ label: ${{field{0}}}
+ dtype: raw
+ default: '0'
+ hide: ${{ 'none' if field{0} else 'all' }}
+"""
+
+ASSERTS = """\
+- ${{ (str(field{0}) or "a")[0].isalpha() }}
+- ${{ (str(field{0}) or "a").isalnum() }}
+"""
+
+FOOTER = """\
+
+documentation: |-
+ This is a simple struct/record like variable.
+
+ Attribute/field names can be specified in the tab 'Fields'.
+ For each non-empty field a parameter with type raw is shown.
+ Value access via the dot operator, e.g. "variable_struct_0.field0"
+
+file_format: 1
+"""
+
+
+def make_yml(num_fields):
+ return ''.join((
+ HEADER.format(num_fields),
+ FIELD0, ''.join(FIELDS.format(i) for i in range(1, num_fields)),
+ ''.join(VALUES.format(i) for i in range(num_fields)),
+ 'value: ${value}\n\nasserts:\n',
+ ''.join(ASSERTS.format(i) for i in range(num_fields)),
+ ''.join(TEMPLATES.format(num_fields)),
+ FOOTER
+ ))
+
+
+if __name__ == '__main__':
+ import sys
+ try:
+ filename = sys.argv[1]
+ except IndexError:
+ filename = __file__[:-3]
+
+ data = make_yml(MAX_NUM_FIELDS)
+
+ with open(filename, 'wb') as fp:
+ fp.write(data.encode())
diff --git a/grc/blocks/variable_struct.xml.py b/grc/blocks/variable_struct.xml.py
deleted file mode 100644
index c0d3dac355..0000000000
--- a/grc/blocks/variable_struct.xml.py
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/usr/bin/env python
-
-MAX_NUM_FIELDS = 20
-
-HEADER = """\
-<block>
- <name>Struct Variable</name>
- <key>variable_struct</key>
- <import>def struct(data): return type('Struct', (object,), data)()</import>
- <var_make>self.$id = $id = struct({{#slurp
-#for $i in range({0}):
-#set $field = $getVar('field' + str(i))
-#if len(str($field)) > 2
-$field: $getVar('value' + str(i)), #slurp
-#end if
-#end for
-}})</var_make>
- <var_value>struct({{#slurp
-#for $i in range({0}):
-#set $field = $getVar('field' + str(i))
-#if len(str($field)) > 2
-$field: $getVar('value' + str(i)), #slurp
-#end if
-#end for
-}})</var_value>
- <make></make>
-"""
-
-FIELD0 = """\
- <param>
- <name>Field 0</name>
- <key>field0</key>
- <value>field0</value>
- <type>string</type>
- <hide>part</hide>
- <tab>Fields</tab>
- </param>
-"""
-
-FIELDS = """\
- <param>
- <name>Field {0}</name>
- <key>field{0}</key>
- <value></value>
- <type>string</type>
- <hide>part</hide>
- <tab>Fields</tab>
- </param>
-"""
-
-VALUES = """\
- <param>
- <name>$field{0}()</name>
- <key>value{0}</key>
- <value>0</value>
- <type>raw</type>
- <hide>#if $field{0}() then 'none' else 'all'#</hide>
- </param>
-"""
-
-CHECKS = """\
- <check>($str($field{0}) or "a")[0].isalpha()</check>
- <check>($str($field{0}) or "a").isalnum()</check>
-"""
-
-FOOTER = """\
- <doc>This is a simple struct/record like variable.
-
-Attribute/field names can be specified in the tab 'Fields'.
-For each non-empty field a parameter with type raw is shown.
-Value access via the dot operator, e.g. "variable_struct_0.field0"
- </doc>
-</block>
-"""
-
-
-def make_xml(num_fields):
- return ''.join((
- HEADER.format(num_fields),
- FIELD0, ''.join(FIELDS.format(i) for i in range(1, num_fields)),
- ''.join(VALUES.format(i) for i in range(num_fields)),
- ''.join(CHECKS.format(i) for i in range(num_fields)),
- FOOTER
- ))
-
-
-if __name__ == '__main__':
- import sys
- try:
- filename = sys.argv[1]
- except IndexError:
- filename = __file__[:-3]
-
- data = make_xml(MAX_NUM_FIELDS)
-
- with open(filename, 'wb') as fp:
- fp.write(data.encode())
diff --git a/grc/blocks/virtual_sink.xml b/grc/blocks/virtual_sink.xml
deleted file mode 100644
index 35fb27e67c..0000000000
--- a/grc/blocks/virtual_sink.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Virtual Sink
-###################################################
- -->
-<block>
- <name>Virtual Sink</name>
- <key>virtual_sink</key>
- <make></make>
- <param>
- <name>Stream ID</name>
- <key>stream_id</key>
- <value></value>
- <type>stream_id</type>
- </param>
- <sink>
- <name>in</name>
- <type></type>
- </sink>
-</block>
diff --git a/grc/blocks/virtual_source.xml b/grc/blocks/virtual_source.xml
deleted file mode 100644
index e0c7754492..0000000000
--- a/grc/blocks/virtual_source.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-##Virtual Source
-###################################################
- -->
-<block>
- <name>Virtual Source</name>
- <key>virtual_source</key>
- <make></make>
- <param>
- <name>Stream ID</name>
- <key>stream_id</key>
- <value></value>
- <type>stream_id</type>
- </param>
- <source>
- <name>out</name>
- <type></type>
- </source>
-</block>
diff --git a/grc/core/Config.py b/grc/core/Config.py
index eb53e1751d..4accb74c63 100644
--- a/grc/core/Config.py
+++ b/grc/core/Config.py
@@ -31,8 +31,6 @@ class Config(object):
hier_block_lib_dir = os.environ.get('GRC_HIER_PATH', Constants.DEFAULT_HIER_BLOCK_LIB_DIR)
- yml_block_cache = os.path.expanduser('~/.cache/grc_gnuradio') # FIXME: remove this as soon as converter is stable
-
def __init__(self, version, version_parts=None, name=None, prefs=None):
self._gr_prefs = prefs if prefs else DummyPrefs()
self.version = version
@@ -40,9 +38,6 @@ class Config(object):
if name:
self.name = name
- if not os.path.exists(self.yml_block_cache):
- os.mkdir(self.yml_block_cache)
-
@property
def block_paths(self):
path_list_sep = {'/': ':', '\\': ';'}[os.path.sep]
@@ -50,7 +45,6 @@ class Config(object):
paths_sources = (
self.hier_block_lib_dir,
os.environ.get('GRC_BLOCKS_PATH', ''),
- self.yml_block_cache,
self._gr_prefs.get_string('grc', 'local_blocks_path', ''),
self._gr_prefs.get_string('grc', 'global_blocks_path', ''),
)
diff --git a/grc/core/Constants.py b/grc/core/Constants.py
index fc5383378c..8ed8899c70 100644
--- a/grc/core/Constants.py
+++ b/grc/core/Constants.py
@@ -20,6 +20,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
from __future__ import absolute_import
import os
+import numbers
import stat
import numpy
@@ -31,6 +32,8 @@ BLOCK_DTD = os.path.join(DATA_DIR, 'block.dtd')
DEFAULT_FLOW_GRAPH = os.path.join(DATA_DIR, 'default_flow_graph.grc')
DEFAULT_HIER_BLOCK_LIB_DIR = os.path.expanduser('~/.grc_gnuradio')
+CACHE_FILE = os.path.expanduser('~/.cache/grc_gnuradio/cache.json')
+
BLOCK_DESCRIPTION_FILE_FORMAT_VERSION = 1
# File format versions:
# 0: undefined / legacy
@@ -52,7 +55,7 @@ TOP_BLOCK_FILE_MODE = stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP
stat.S_IWGRP | stat.S_IXGRP | stat.S_IROTH
HIER_BLOCK_FILE_MODE = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH
-PARAM_TYPE_NAMES = (
+PARAM_TYPE_NAMES = {
'raw', 'enum',
'complex', 'real', 'float', 'int',
'complex_vector', 'real_vector', 'float_vector', 'int_vector',
@@ -61,18 +64,17 @@ PARAM_TYPE_NAMES = (
'id', 'stream_id',
'gui_hint',
'import',
-)
+}
+
+PARAM_TYPE_MAP = {
+ 'complex': numbers.Complex,
+ 'float': numbers.Real,
+ 'real': numbers.Real,
+ 'int': numbers.Integral,
+}
# Define types, native python + numpy
VECTOR_TYPES = (tuple, list, set, numpy.ndarray)
-COMPLEX_TYPES = [complex, numpy.complex, numpy.complex64, numpy.complex128]
-REAL_TYPES = [float, numpy.float, numpy.float32, numpy.float64]
-INT_TYPES = [int, numpy.int, numpy.int8, numpy.int16, numpy.int32, numpy.uint64,
- numpy.uint, numpy.uint8, numpy.uint16, numpy.uint32, numpy.uint64]
-# Cast to tuple for isinstance, concat subtypes
-COMPLEX_TYPES = tuple(COMPLEX_TYPES + REAL_TYPES + INT_TYPES)
-REAL_TYPES = tuple(REAL_TYPES + INT_TYPES)
-INT_TYPES = tuple(INT_TYPES)
# Updating colors. Using the standard color palette from:
# http://www.google.com/design/spec/style/color.html#color-color-palette
diff --git a/grc/core/FlowGraph.py b/grc/core/FlowGraph.py
index 3f21ec6a9c..8c59ec0bea 100644
--- a/grc/core/FlowGraph.py
+++ b/grc/core/FlowGraph.py
@@ -172,7 +172,7 @@ class FlowGraph(Element):
return elements
def children(self):
- return itertools.chain(self.blocks, self.connections)
+ return itertools.chain(self.iter_enabled_blocks(), self.connections)
def rewrite(self):
"""
diff --git a/grc/core/Param.py b/grc/core/Param.py
deleted file mode 100644
index 56855908ea..0000000000
--- a/grc/core/Param.py
+++ /dev/null
@@ -1,413 +0,0 @@
-"""
-Copyright 2008-2015 Free Software Foundation, Inc.
-This file is part of GNU Radio
-
-GNU Radio Companion is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-GNU Radio Companion is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-"""
-
-from __future__ import absolute_import
-
-import ast
-import numbers
-import re
-import collections
-
-import six
-from six.moves import builtins, filter, map, range, zip
-
-from . import Constants, blocks
-from .base import Element
-from .utils.descriptors import Evaluated, EvaluatedEnum, setup_names
-
-# Blacklist certain ids, its not complete, but should help
-ID_BLACKLIST = ['self', 'options', 'gr', 'math', 'firdes'] + dir(builtins)
-try:
- from gnuradio import gr
- ID_BLACKLIST.extend(attr for attr in dir(gr.top_block()) if not attr.startswith('_'))
-except (ImportError, AttributeError):
- pass
-
-
-class TemplateArg(str):
- """
- A cheetah template argument created from a param.
- The str of this class evaluates to the param's to code method.
- The use of this class as a dictionary (enum only) will reveal the enum opts.
- The __call__ or () method can return the param evaluated to a raw python data type.
- """
-
- def __new__(cls, param):
- value = param.to_code()
- instance = str.__new__(cls, value)
- setattr(instance, '_param', param)
- return instance
-
- def __getitem__(self, item):
- return str(self._param.get_opt(item)) if self._param.is_enum() else NotImplemented
-
- def __getattr__(self, item):
- if not self._param.is_enum():
- raise AttributeError()
- try:
- return str(self._param.get_opt(item))
- except KeyError:
- raise AttributeError()
-
- def __str__(self):
- return str(self._param.to_code())
-
- def __call__(self):
- return self._param.get_evaluated()
-
-
-@setup_names
-class Param(Element):
-
- is_param = True
-
- name = Evaluated(str, default='no name')
- dtype = EvaluatedEnum(Constants.PARAM_TYPE_NAMES, default='raw')
- hide = EvaluatedEnum('none all part')
-
- # region init
- def __init__(self, parent, id, label='', dtype='raw', default='',
- options=None, option_labels=None, option_attributes=None,
- category='', hide='none', **_):
- """Make a new param from nested data"""
- super(Param, self).__init__(parent)
- self.key = id
- self.name = label.strip() or id.title()
- self.category = category or Constants.DEFAULT_PARAM_TAB
-
- self.dtype = dtype
- self.value = self.default = str(default)
-
- self.options = self._init_options(options or [], option_labels or [],
- option_attributes or {})
- self.hide = hide or 'none'
- # end of args ########################################################
-
- self._evaluated = None
- self._stringify_flag = False
- self._lisitify_flag = False
- self._init = False
-
- @property
- def template_arg(self):
- return TemplateArg(self)
-
- def _init_options(self, values, labels, attributes):
- """parse option and option attributes"""
- options = collections.OrderedDict()
- options.attributes = collections.defaultdict(dict)
-
- padding = [''] * max(len(values), len(labels))
- attributes = {key: value + padding for key, value in six.iteritems(attributes)}
-
- for i, option in enumerate(values):
- # Test against repeated keys
- if option in options:
- raise KeyError('Value "{}" already exists in options'.format(option))
- # get label
- try:
- label = str(labels[i])
- except IndexError:
- label = str(option)
- # Store the option
- options[option] = label
- options.attributes[option] = {attrib: values[i] for attrib, values in six.iteritems(attributes)}
-
- default = next(iter(options)) if options else ''
- if not self.value:
- self.value = self.default = default
-
- if self.is_enum() and self.value not in options:
- self.value = self.default = default # TODO: warn
- # raise ValueError('The value {!r} is not in the possible values of {}.'
- # ''.format(self.get_value(), ', '.join(self.options)))
- return options
- # endregion
-
- def __str__(self):
- return 'Param - {}({})'.format(self.name, self.key)
-
- def __repr__(self):
- return '{!r}.param[{}]'.format(self.parent, self.key)
-
- def is_enum(self):
- return self.get_raw('dtype') == 'enum'
-
- def get_value(self):
- value = self.value
- if self.is_enum() and value not in self.options:
- value = self.default
- self.set_value(value)
- return value
-
- def set_value(self, value):
- # Must be a string
- self.value = str(value)
-
- def set_default(self, value):
- if self.default == self.value:
- self.set_value(value)
- self.default = str(value)
-
- def rewrite(self):
- Element.rewrite(self)
- del self.name
- del self.dtype
- del self.hide
-
- self._evaluated = None
- try:
- self._evaluated = self.evaluate()
- except Exception as e:
- self.add_error_message(str(e))
-
- def validate(self):
- """
- Validate the param.
- The value must be evaluated and type must a possible type.
- """
- Element.validate(self)
- if self.dtype not in Constants.PARAM_TYPE_NAMES:
- self.add_error_message('Type "{}" is not a possible type.'.format(self.dtype))
-
- def get_evaluated(self):
- return self._evaluated
-
- def evaluate(self):
- """
- Evaluate the value.
-
- Returns:
- evaluated type
- """
- self._init = True
- self._lisitify_flag = False
- self._stringify_flag = False
- dtype = self.dtype
- expr = self.get_value()
-
- #########################
- # Enum Type
- #########################
- if self.is_enum():
- return expr
-
- #########################
- # Numeric Types
- #########################
- elif dtype in ('raw', 'complex', 'real', 'float', 'int', 'hex', 'bool'):
- # Raise exception if python cannot evaluate this value
- try:
- value = self.parent_flowgraph.evaluate(expr)
- except Exception as value:
- raise Exception('Value "{}" cannot be evaluated:\n{}'.format(expr, value))
- # Raise an exception if the data is invalid
- if dtype == 'raw':
- return value
- elif dtype == 'complex':
- if not isinstance(value, Constants.COMPLEX_TYPES):
- raise Exception('Expression "{}" is invalid for type complex.'.format(str(value)))
- return value
- elif dtype in ('real', 'float'):
- if not isinstance(value, Constants.REAL_TYPES):
- raise Exception('Expression "{}" is invalid for type float.'.format(str(value)))
- return value
- elif dtype == 'int':
- if not isinstance(value, Constants.INT_TYPES):
- raise Exception('Expression "{}" is invalid for type integer.'.format(str(value)))
- return value
- elif dtype == 'hex':
- return hex(value)
- elif dtype == 'bool':
- if not isinstance(value, bool):
- raise Exception('Expression "{}" is invalid for type bool.'.format(str(value)))
- return value
- else:
- raise TypeError('Type "{}" not handled'.format(dtype))
- #########################
- # Numeric Vector Types
- #########################
- elif dtype in ('complex_vector', 'real_vector', 'float_vector', 'int_vector'):
- default = []
-
- if not expr:
- return default # Turn a blank string into an empty list, so it will eval
-
- try:
- value = self.parent.parent.evaluate(expr)
- except Exception as value:
- raise Exception('Value "{}" cannot be evaluated:\n{}'.format(expr, value))
-
- if not isinstance(value, Constants.VECTOR_TYPES):
- self._lisitify_flag = True
- value = [value]
-
- # Raise an exception if the data is invalid
- if dtype == 'complex_vector' and not all(isinstance(item, numbers.Complex) for item in value):
- raise Exception('Expression "{}" is invalid for type complex vector.'.format(value))
- elif dtype in ('real_vector', 'float_vector') and not all(isinstance(item, numbers.Real) for item in value):
- raise Exception('Expression "{}" is invalid for type float vector.'.format(value))
- elif dtype == 'int_vector' and not all(isinstance(item, Constants.INT_TYPES) for item in value):
- raise Exception('Expression "{}" is invalid for type integer vector.'.format(str(value)))
- return value
- #########################
- # String Types
- #########################
- elif dtype in ('string', 'file_open', 'file_save', '_multiline', '_multiline_python_external'):
- # Do not check if file/directory exists, that is a runtime issue
- try:
- value = self.parent.parent.evaluate(expr)
- if not isinstance(value, str):
- raise Exception()
- except:
- self._stringify_flag = True
- value = str(expr)
- if dtype == '_multiline_python_external':
- ast.parse(value) # Raises SyntaxError
- return value
- #########################
- # Unique ID Type
- #########################
- elif dtype == 'id':
- self.validate_block_id()
- return expr
-
- #########################
- # Stream ID Type
- #########################
- elif dtype == 'stream_id':
- self.validate_stream_id()
- return expr
-
- #########################
- # GUI Position/Hint
- #########################
- elif dtype == 'gui_hint':
- if ':' in expr:
- tab, pos = expr.split(':')
- elif '@' in expr:
- tab, pos = expr, ''
- else:
- tab, pos = '', expr
-
- if '@' in tab:
- tab, index = tab.split('@')
- else:
- index = '?'
-
- # TODO: Problem with this code. Produces bad tabs
- widget_str = ({
- (True, True): 'self.%(tab)s_grid_layout_%(index)s.addWidget(%(widget)s, %(pos)s)',
- (True, False): 'self.%(tab)s_layout_%(index)s.addWidget(%(widget)s)',
- (False, True): 'self.top_grid_layout.addWidget(%(widget)s, %(pos)s)',
- (False, False): 'self.top_layout.addWidget(%(widget)s)',
- }[bool(tab), bool(pos)]) % {'tab': tab, 'index': index, 'widget': '%s', 'pos': pos}
-
- # FIXME: Move replace(...) into the make template of the qtgui blocks
- # Return a string here
- class GuiHint(object):
- def __init__(self, ws):
- self._ws = ws
-
- def __call__(self, w):
- return (self._ws.replace('addWidget', 'addLayout') if 'layout' in w else self._ws) % w
-
- def __str__(self):
- return self._ws
- return GuiHint(widget_str)
- #########################
- # Import Type
- #########################
- elif dtype == 'import':
- # New namespace
- n = dict()
- try:
- exec(expr, n)
- except ImportError:
- raise Exception('Import "{}" failed.'.format(expr))
- except Exception:
- raise Exception('Bad import syntax: "{}".'.format(expr))
- return [k for k in list(n.keys()) if str(k) != '__builtins__']
-
- #########################
- else:
- raise TypeError('Type "{}" not handled'.format(dtype))
-
- def validate_block_id(self):
- value = self.value
- # Can python use this as a variable?
- if not re.match(r'^[a-z|A-Z]\w*$', value):
- raise Exception('ID "{}" must begin with a letter and may contain letters, numbers, '
- 'and underscores.'.format(value))
- if value in ID_BLACKLIST:
- raise Exception('ID "{}" is blacklisted.'.format(value))
- block_names = [block.name for block in self.parent_flowgraph.iter_enabled_blocks()]
- # Id should only appear once, or zero times if block is disabled
- if self.key == 'id' and block_names.count(value) > 1:
- raise Exception('ID "{}" is not unique.'.format(value))
- elif value not in block_names:
- raise Exception('ID "{}" does not exist.'.format(value))
- return value
-
- def validate_stream_id(self):
- value = self.value
- stream_ids = [
- block.params['stream_id'].value
- for block in self.parent_flowgraph.iter_enabled_blocks()
- if isinstance(block, blocks.VirtualSink)
- ]
- # Check that the virtual sink's stream id is unique
- if isinstance(self.parent_block, blocks.VirtualSink) and stream_ids.count(value) >= 2:
- # Id should only appear once, or zero times if block is disabled
- raise Exception('Stream ID "{}" is not unique.'.format(value))
- # Check that the virtual source's steam id is found
- elif isinstance(self.parent_block, blocks.VirtualSource) and value not in stream_ids:
- raise Exception('Stream ID "{}" is not found.'.format(value))
-
- def to_code(self):
- """
- Convert the value to code.
- For string and list types, check the init flag, call evaluate().
- This ensures that evaluate() was called to set the xxxify_flags.
-
- Returns:
- a string representing the code
- """
- self._init = True
- v = self.get_value()
- t = self.dtype
- # String types
- if t in ('string', 'file_open', 'file_save', '_multiline', '_multiline_python_external'):
- if not self._init:
- self.evaluate()
- return repr(v) if self._stringify_flag else v
-
- # Vector types
- elif t in ('complex_vector', 'real_vector', 'float_vector', 'int_vector'):
- if not self._init:
- self.evaluate()
- if self._lisitify_flag:
- return '(%s, )' % v
- else:
- return '(%s)' % v
- else:
- return v
-
- def get_opt(self, item):
- return self.options.attributes[self.get_value()][item]
diff --git a/grc/core/blocks/__init__.py b/grc/core/blocks/__init__.py
index e4a085d477..4ca0d5d2bc 100644
--- a/grc/core/blocks/__init__.py
+++ b/grc/core/blocks/__init__.py
@@ -29,6 +29,7 @@ build_ins = {}
def register_build_in(cls):
+ cls.loaded_from = '(build-in)'
build_ins[cls.key] = cls
return cls
diff --git a/grc/core/blocks/_build.py b/grc/core/blocks/_build.py
index 9221433387..6db06040cf 100644
--- a/grc/core/blocks/_build.py
+++ b/grc/core/blocks/_build.py
@@ -17,8 +17,13 @@
from __future__ import absolute_import
+import collections
+import itertools
import re
+from ..Constants import ADVANCED_PARAM_TAB
+from ..utils import to_list
+
from .block import Block
from ._flags import Flags
from ._templates import MakoTemplates
@@ -29,23 +34,24 @@ def build(id, label='', category='', flags='', documentation='',
parameters=None, inputs=None, outputs=None, templates=None, **kwargs):
block_id = id
- cls = type(block_id, (Block,), {})
+ cls = type(str(block_id), (Block,), {})
cls.key = block_id
cls.label = label or block_id.title()
cls.category = [cat.strip() for cat in category.split('/') if cat.strip()]
- cls.flags = Flags(flags)
+ cls.flags = Flags(to_list(flags))
if re.match(r'options$|variable|virtual', block_id):
- cls.flags += Flags.NOT_DSP + Flags.DISABLE_BYPASS
+ cls.flags.set(Flags.NOT_DSP, Flags.DISABLE_BYPASS)
cls.documentation = {'': documentation.strip('\n\t ').replace('\\\n', '')}
- cls.asserts = [_single_mako_expr(a, block_id) for a in (asserts or [])]
+ cls.asserts = [_single_mako_expr(a, block_id) for a in to_list(asserts)]
- cls.parameters_data = parameters or []
- cls.inputs_data = inputs or []
- cls.outputs_data = outputs or []
+ cls.inputs_data = _build_ports(inputs, 'sink') if inputs else []
+ cls.outputs_data = _build_ports(outputs, 'source') if outputs else []
+ cls.parameters_data = _build_params(parameters or [],
+ bool(cls.inputs_data), bool(cls.outputs_data), cls.flags)
cls.extra_data = kwargs
templates = templates or {}
@@ -62,8 +68,68 @@ def build(id, label='', category='', flags='', documentation='',
return cls
+def _build_ports(ports_raw, direction):
+ ports = []
+ port_ids = set()
+ stream_port_ids = itertools.count()
+
+ for i, port_params in enumerate(ports_raw):
+ port = port_params.copy()
+ port['direction'] = direction
+
+ port_id = port.setdefault('id', str(next(stream_port_ids)))
+ if port_id in port_ids:
+ raise Exception('Port id "{}" already exists in {}s'.format(port_id, direction))
+ port_ids.add(port_id)
+
+ ports.append(port)
+ return ports
+
+
+def _build_params(params_raw, have_inputs, have_outputs, flags):
+ params = []
+
+ def add_param(**data):
+ params.append(data)
+
+ add_param(id='id', name='ID', dtype='id', hide='part')
+
+ if not flags.not_dsp:
+ add_param(id='alias', name='Block Alias', dtype='string',
+ hide='part', category=ADVANCED_PARAM_TAB)
+
+ if have_outputs or have_inputs:
+ add_param(id='affinity', name='Core Affinity', dtype='int_vector',
+ hide='part', category=ADVANCED_PARAM_TAB)
+
+ if have_outputs:
+ add_param(id='minoutbuf', name='Min Output Buffer', dtype='int',
+ hide='part', value='0', category=ADVANCED_PARAM_TAB)
+ add_param(id='maxoutbuf', name='Max Output Buffer', dtype='int',
+ hide='part', value='0', category=ADVANCED_PARAM_TAB)
+
+ base_params_n = {}
+ for param_data in params_raw:
+ param_id = param_data['id']
+ if param_id in params:
+ raise Exception('Param id "{}" is not unique'.format(param_id))
+
+ base_key = param_data.get('base_key', None)
+ param_data_ext = base_params_n.get(base_key, {}).copy()
+ param_data_ext.update(param_data)
+
+ add_param(**param_data_ext)
+ base_params_n[param_id] = param_data_ext
+
+ add_param(id='comment', name='Comment', dtype='_multiline', hide='part',
+ value='', category=ADVANCED_PARAM_TAB)
+ return params
+
+
def _single_mako_expr(value, block_id):
- match = re.match(r'\s*\$\{\s*(.*?)\s*\}\s*', str(value))
- if value and not match:
+ if not value:
+ return None
+ value = value.strip()
+ if not (value.startswith('${') and value.endswith('}')):
raise ValueError('{} is not a mako substitution in {}'.format(value, block_id))
- return match.group(1) if match else None
+ return value[2:-1].strip()
diff --git a/grc/core/blocks/_flags.py b/grc/core/blocks/_flags.py
index ffea2ad569..bbedd6a2d7 100644
--- a/grc/core/blocks/_flags.py
+++ b/grc/core/blocks/_flags.py
@@ -17,10 +17,8 @@
from __future__ import absolute_import
-import six
-
-class Flags(six.text_type):
+class Flags(object):
THROTTLE = 'throttle'
DISABLE_BYPASS = 'disable_bypass'
@@ -28,12 +26,14 @@ class Flags(six.text_type):
DEPRECATED = 'deprecated'
NOT_DSP = 'not_dsp'
+ def __init__(self, flags):
+ self.data = set(flags)
+
def __getattr__(self, item):
return item in self
- def __add__(self, other):
- if not isinstance(other, six.string_types):
- return NotImplemented
- return self.__class__(str(self) + other)
+ def __contains__(self, item):
+ return item in self.data
- __iadd__ = __add__
+ def set(self, *flags):
+ self.data.update(flags)
diff --git a/grc/core/blocks/block.py b/grc/core/blocks/block.py
index adc046936d..0cb3f61237 100644
--- a/grc/core/blocks/block.py
+++ b/grc/core/blocks/block.py
@@ -19,7 +19,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
from __future__ import absolute_import
-import ast
import collections
import itertools
@@ -29,7 +28,6 @@ from six.moves import range
from ._templates import MakoTemplates
from ._flags import Flags
-from ..Constants import ADVANCED_PARAM_TAB
from ..base import Element
from ..utils.descriptors import lazy_property
@@ -63,82 +61,28 @@ class Block(Element):
outputs_data = []
extra_data = {}
+ loaded_from = '(unknown)'
- # region Init
def __init__(self, parent):
"""Make a new block from nested data."""
super(Block, self).__init__(parent)
- self.params = self._init_params()
- self.sinks = self._init_ports(self.inputs_data, direction='sink')
- self.sources = self._init_ports(self.outputs_data, direction='source')
-
- self.active_sources = [] # on rewrite
- self.active_sinks = [] # on rewrite
-
- self.states = {'state': True}
-
- def _init_params(self):
- is_dsp_block = not self.flags.not_dsp
- has_inputs = bool(self.inputs_data)
- has_outputs = bool(self.outputs_data)
-
- params = collections.OrderedDict()
param_factory = self.parent_platform.make_param
-
- def add_param(id, **kwargs):
- params[id] = param_factory(self, id=id, **kwargs)
-
- add_param(id='id', name='ID', dtype='id',
- hide='none' if (self.key == 'options' or self.is_variable) else 'part')
-
- if is_dsp_block:
- add_param(id='alias', name='Block Alias', dtype='string',
- hide='part', category=ADVANCED_PARAM_TAB)
-
- if has_outputs or has_inputs:
- add_param(id='affinity', name='Core Affinity', dtype='int_vector',
- hide='part', category=ADVANCED_PARAM_TAB)
-
- if has_outputs:
- add_param(id='minoutbuf', name='Min Output Buffer', dtype='int',
- hide='part', value='0', category=ADVANCED_PARAM_TAB)
- add_param(id='maxoutbuf', name='Max Output Buffer', dtype='int',
- hide='part', value='0', category=ADVANCED_PARAM_TAB)
-
- base_params_n = {}
- for param_data in self.parameters_data:
- param_id = param_data['id']
- if param_id in params:
- raise Exception('Param id "{}" is not unique'.format(param_id))
-
- base_key = param_data.get('base_key', None)
- param_data_ext = base_params_n.get(base_key, {}).copy()
- param_data_ext.update(param_data)
-
- add_param(**param_data_ext)
- base_params_n[param_id] = param_data_ext
-
- add_param(id='comment', name='Comment', dtype='_multiline', hide='part',
- value='', category=ADVANCED_PARAM_TAB)
- return params
-
- def _init_ports(self, ports_n, direction):
- ports = []
port_factory = self.parent_platform.make_port
- port_ids = set()
- stream_port_ids = itertools.count()
+ self.params = collections.OrderedDict(
+ (data['id'], param_factory(parent=self, **data))
+ for data in self.parameters_data
+ )
+ if self.key == 'options' or self.is_variable:
+ self.params['id'].hide = 'part'
- for i, port_data in enumerate(ports_n):
- port_id = port_data.setdefault('id', str(next(stream_port_ids)))
- if port_id in port_ids:
- raise Exception('Port id "{}" already exists in {}s'.format(port_id, direction))
- port_ids.add(port_id)
+ self.sinks = [port_factory(parent=self, **params) for params in self.inputs_data]
+ self.sources = [port_factory(parent=self, **params) for params in self.outputs_data]
- port = port_factory(parent=self, direction=direction, **port_data)
- ports.append(port)
- return ports
- # endregion
+ self.active_sources = [] # on rewrite
+ self.active_sinks = [] # on rewrite
+
+ self.states = {'state': True}
# region Rewrite_and_Validation
def rewrite(self):
diff --git a/grc/core/cache.py b/grc/core/cache.py
new file mode 100644
index 0000000000..f438d58bd9
--- /dev/null
+++ b/grc/core/cache.py
@@ -0,0 +1,99 @@
+# Copyright 2017 Free Software Foundation, Inc.
+# This file is part of GNU Radio
+#
+# GNU Radio Companion is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# GNU Radio Companion is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+from __future__ import absolute_import, print_function
+
+from io import open
+import json
+import logging
+import os
+
+import six
+
+from .io import yaml
+
+logger = logging.getLogger(__name__)
+
+
+class Cache(object):
+
+ def __init__(self, filename):
+ self.cache_file = filename
+ self.cache = {}
+ self.need_cache_write = True
+ self._accessed_items = set()
+ try:
+ os.makedirs(os.path.dirname(filename))
+ except OSError:
+ pass
+ try:
+ self._converter_mtime = os.path.getmtime(filename)
+ except OSError:
+ self._converter_mtime = -1
+
+ def load(self):
+ try:
+ logger.debug("Loading block cache from: {}".format(self.cache_file))
+ with open(self.cache_file, encoding='utf-8') as cache_file:
+ self.cache = json.load(cache_file)
+ self.need_cache_write = False
+ except (IOError, ValueError):
+ self.need_cache_write = True
+
+ def get_or_load(self, filename):
+ self._accessed_items.add(filename)
+ if os.path.getmtime(filename) <= self._converter_mtime:
+ try:
+ return self.cache[filename]
+ except KeyError:
+ pass
+
+ with open(filename, encoding='utf-8') as fp:
+ data = yaml.safe_load(fp)
+ self.cache[filename] = data
+ self.need_cache_write = True
+ return data
+
+ def save(self):
+ if not self.need_cache_write:
+ return
+
+ logger.info('Saving %d entries to json cache', len(self.cache))
+ with open(self.cache_file, 'w', encoding='utf8') as cache_file:
+ json.dump(self.cache, cache_file)
+
+ def prune(self):
+ for filename in (set(self.cache) - self._accessed_items):
+ del self.cache[filename]
+
+ def __enter__(self):
+ self.load()
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ self.save()
+
+
+def byteify(data):
+ if isinstance(data, dict):
+ return {byteify(key): byteify(value) for key, value in six.iteritems(data)}
+ elif isinstance(data, list):
+ return [byteify(element) for element in data]
+ elif isinstance(data, six.text_type) and six.PY2:
+ return data.encode('utf-8')
+ else:
+ return data
diff --git a/grc/core/default_flow_graph.grc b/grc/core/default_flow_graph.grc
index 9df289f327..d57ec75aea 100644
--- a/grc/core/default_flow_graph.grc
+++ b/grc/core/default_flow_graph.grc
@@ -5,6 +5,7 @@
options:
parameters:
+ id: 'top_block'
title: 'top_block'
states:
coordinate:
diff --git a/grc/core/generator/hier_block.py b/grc/core/generator/hier_block.py
index 237fd71377..31cd198c01 100644
--- a/grc/core/generator/hier_block.py
+++ b/grc/core/generator/hier_block.py
@@ -149,8 +149,8 @@ class QtHierBlockGenerator(HierBlockGenerator):
block_n['param'].append(gui_hint_param)
block_n['make'] += (
- "\n#set $win = 'self.%s' % $id"
- "\n${gui_hint()($win)}"
+ "\n<% win = 'self.' + id %>"
+ "\n${ gui_hint % win }"
)
return {'block': block_n}
diff --git a/grc/core/params/__init__.py b/grc/core/params/__init__.py
new file mode 100644
index 0000000000..93663bdada
--- /dev/null
+++ b/grc/core/params/__init__.py
@@ -0,0 +1,18 @@
+# Copyright 2017 Free Software Foundation, Inc.
+# This file is part of GNU Radio
+#
+# GNU Radio Companion is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# GNU Radio Companion is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+from .param import Param
diff --git a/grc/core/params/dtypes.py b/grc/core/params/dtypes.py
new file mode 100644
index 0000000000..f52868c080
--- /dev/null
+++ b/grc/core/params/dtypes.py
@@ -0,0 +1,103 @@
+# Copyright 2008-2017 Free Software Foundation, Inc.
+# This file is part of GNU Radio
+#
+# GNU Radio Companion is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# GNU Radio Companion is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+from __future__ import absolute_import
+
+import re
+
+from six.moves import builtins
+
+from .. import blocks
+from .. import Constants
+
+
+# Blacklist certain ids, its not complete, but should help
+ID_BLACKLIST = ['self', 'options', 'gr', 'math', 'firdes'] + dir(builtins)
+try:
+ from gnuradio import gr
+ ID_BLACKLIST.extend(attr for attr in dir(gr.top_block()) if not attr.startswith('_'))
+except (ImportError, AttributeError):
+ pass
+
+
+validators = {}
+
+
+def validates(*dtypes):
+ def decorator(func):
+ for dtype in dtypes:
+ assert dtype in Constants.PARAM_TYPE_NAMES
+ validators[dtype] = func
+ return func
+ return decorator
+
+
+class ValidateError(Exception):
+ """Raised by validate functions"""
+
+
+@validates('id')
+def validate_block_id(param):
+ value = param.value
+ # Can python use this as a variable?
+ if not re.match(r'^[a-z|A-Z]\w*$', value):
+ raise ValidateError('ID "{}" must begin with a letter and may contain letters, numbers, '
+ 'and underscores.'.format(value))
+ if value in ID_BLACKLIST:
+ raise ValidateError('ID "{}" is blacklisted.'.format(value))
+ block_names = [block.name for block in param.parent_flowgraph.iter_enabled_blocks()]
+ # Id should only appear once, or zero times if block is disabled
+ if param.key == 'id' and block_names.count(value) > 1:
+ raise ValidateError('ID "{}" is not unique.'.format(value))
+ elif value not in block_names:
+ raise ValidateError('ID "{}" does not exist.'.format(value))
+ return value
+
+
+@validates('stream_id')
+def validate_stream_id(param):
+ value = param.value
+ stream_ids = [
+ block.params['stream_id'].value
+ for block in param.parent_flowgraph.iter_enabled_blocks()
+ if isinstance(block, blocks.VirtualSink)
+ ]
+ # Check that the virtual sink's stream id is unique
+ if isinstance(param.parent_block, blocks.VirtualSink) and stream_ids.count(value) >= 2:
+ # Id should only appear once, or zero times if block is disabled
+ raise ValidateError('Stream ID "{}" is not unique.'.format(value))
+ # Check that the virtual source's steam id is found
+ elif isinstance(param.parent_block, blocks.VirtualSource) and value not in stream_ids:
+ raise ValidateError('Stream ID "{}" is not found.'.format(value))
+
+
+@validates('complex', 'real', 'float', 'int')
+def validate_scalar(param):
+ valid_types = Constants.PARAM_TYPE_MAP[param.dtype]
+ if not isinstance(param.get_evaluated(), valid_types):
+ raise ValidateError('Expression {!r} is invalid for type {!r}.'.format(
+ param.get_evaluated(), param.dtype))
+
+
+@validates('complex_vector', 'real_vector', 'float_vector', 'int_vector')
+def validate_vector(param):
+ # todo: check vector types
+
+ valid_types = Constants.PARAM_TYPE_MAP[param.dtype.split('_', 1)[0]]
+ if not all(isinstance(item, valid_types) for item in param.get_evaluated()):
+ raise ValidateError('Expression {!r} is invalid for type {!r}.'.format(
+ param.get_evaluated(), param.dtype))
diff --git a/grc/core/params/param.py b/grc/core/params/param.py
new file mode 100644
index 0000000000..30a48bb434
--- /dev/null
+++ b/grc/core/params/param.py
@@ -0,0 +1,407 @@
+# Copyright 2008-2017 Free Software Foundation, Inc.
+# This file is part of GNU Radio
+#
+# GNU Radio Companion is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# GNU Radio Companion is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+from __future__ import absolute_import
+
+import ast
+import collections
+import textwrap
+
+import six
+from six.moves import range
+
+from .. import Constants
+from ..base import Element
+from ..utils.descriptors import Evaluated, EvaluatedEnum, setup_names
+
+from . import dtypes
+from .template_arg import TemplateArg
+
+
+@setup_names
+class Param(Element):
+
+ is_param = True
+
+ name = Evaluated(str, default='no name')
+ dtype = EvaluatedEnum(Constants.PARAM_TYPE_NAMES, default='raw')
+ hide = EvaluatedEnum('none all part')
+
+ # region init
+ def __init__(self, parent, id, label='', dtype='raw', default='',
+ options=None, option_labels=None, option_attributes=None,
+ category='', hide='none', **_):
+ """Make a new param from nested data"""
+ super(Param, self).__init__(parent)
+ self.key = id
+ self.name = label.strip() or id.title()
+ self.category = category or Constants.DEFAULT_PARAM_TAB
+
+ self.dtype = dtype
+ self.value = self.default = str(default)
+
+ self.options = self._init_options(options or [], option_labels or [],
+ option_attributes or {})
+ self.hide = hide or 'none'
+ # end of args ########################################################
+
+ self._evaluated = None
+ self._stringify_flag = False
+ self._lisitify_flag = False
+ self.hostage_cells = set()
+ self._init = False
+
+ def _init_options(self, values, labels, attributes):
+ """parse option and option attributes"""
+ options = collections.OrderedDict()
+ options.attributes = collections.defaultdict(dict)
+
+ padding = [''] * max(len(values), len(labels))
+ attributes = {key: value + padding for key, value in six.iteritems(attributes)}
+
+ for i, option in enumerate(values):
+ # Test against repeated keys
+ if option in options:
+ raise KeyError('Value "{}" already exists in options'.format(option))
+ # get label
+ try:
+ label = str(labels[i])
+ except IndexError:
+ label = str(option)
+ # Store the option
+ options[option] = label
+ options.attributes[option] = {attrib: values[i] for attrib, values in six.iteritems(attributes)}
+
+ default = next(iter(options)) if options else ''
+ if not self.value:
+ self.value = self.default = default
+
+ if self.is_enum() and self.value not in options:
+ self.value = self.default = default # TODO: warn
+ # raise ValueError('The value {!r} is not in the possible values of {}.'
+ # ''.format(self.get_value(), ', '.join(self.options)))
+ return options
+ # endregion
+
+ @property
+ def template_arg(self):
+ return TemplateArg(self)
+
+ def __str__(self):
+ return 'Param - {}({})'.format(self.name, self.key)
+
+ def __repr__(self):
+ return '{!r}.param[{}]'.format(self.parent, self.key)
+
+ def is_enum(self):
+ return self.get_raw('dtype') == 'enum'
+
+ def get_value(self):
+ value = self.value
+ if self.is_enum() and value not in self.options:
+ value = self.default
+ self.set_value(value)
+ return value
+
+ def set_value(self, value):
+ # Must be a string
+ self.value = str(value)
+
+ def set_default(self, value):
+ if self.default == self.value:
+ self.set_value(value)
+ self.default = str(value)
+
+ def rewrite(self):
+ Element.rewrite(self)
+ del self.name
+ del self.dtype
+ del self.hide
+
+ self._evaluated = None
+ try:
+ self._evaluated = self.evaluate()
+ except Exception as e:
+ self.add_error_message(str(e))
+
+ rewriter = getattr(dtypes, 'rewrite_' + self.dtype, None)
+ if rewriter:
+ rewriter(self)
+
+ def validate(self):
+ """
+ Validate the param.
+ The value must be evaluated and type must a possible type.
+ """
+ Element.validate(self)
+ if self.dtype not in Constants.PARAM_TYPE_NAMES:
+ self.add_error_message('Type "{}" is not a possible type.'.format(self.dtype))
+
+ validator = dtypes.validators.get(self.dtype, None)
+ if self._init and validator:
+ try:
+ validator(self)
+ except dtypes.ValidateError as e:
+ self.add_error_message(e.message)
+
+ def get_evaluated(self):
+ return self._evaluated
+
+ def evaluate(self):
+ """
+ Evaluate the value.
+
+ Returns:
+ evaluated type
+ """
+ self._init = True
+ self._lisitify_flag = False
+ self._stringify_flag = False
+ dtype = self.dtype
+ expr = self.get_value()
+
+ #########################
+ # ID and Enum types (not evaled)
+ #########################
+ if dtype in ('id', 'stream_id') or self.is_enum():
+ return expr
+
+ #########################
+ # Numeric Types
+ #########################
+ elif dtype in ('raw', 'complex', 'real', 'float', 'int', 'hex', 'bool'):
+ if expr:
+ try:
+ value = self.parent_flowgraph.evaluate(expr)
+ except Exception as e:
+ raise Exception('Value "{}" cannot be evaluated:\n{}'.format(expr, e))
+ else:
+ value = 0
+ if dtype == 'hex':
+ value = hex(value)
+ elif dtype == 'bool':
+ value = bool(value)
+ return value
+
+ #########################
+ # Numeric Vector Types
+ #########################
+ elif dtype in ('complex_vector', 'real_vector', 'float_vector', 'int_vector'):
+ if not expr:
+ return [] # Turn a blank string into an empty list, so it will eval
+ try:
+ value = self.parent.parent.evaluate(expr)
+ except Exception as value:
+ raise Exception('Value "{}" cannot be evaluated:\n{}'.format(expr, value))
+ if not isinstance(value, Constants.VECTOR_TYPES):
+ self._lisitify_flag = True
+ value = [value]
+ return value
+ #########################
+ # String Types
+ #########################
+ elif dtype in ('string', 'file_open', 'file_save', '_multiline', '_multiline_python_external'):
+ # Do not check if file/directory exists, that is a runtime issue
+ try:
+ value = self.parent_flowgraph.evaluate(expr)
+ if not isinstance(value, str):
+ raise Exception()
+ except:
+ self._stringify_flag = True
+ value = str(expr)
+ if dtype == '_multiline_python_external':
+ ast.parse(value) # Raises SyntaxError
+ return value
+ #########################
+ # GUI Position/Hint
+ #########################
+ elif dtype == 'gui_hint':
+ return self.parse_gui_hint(expr) if self.parent_block.state == 'enabled' else ''
+ #########################
+ # Import Type
+ #########################
+ elif dtype == 'import':
+ # New namespace
+ n = dict()
+ try:
+ exec(expr, n)
+ except ImportError:
+ raise Exception('Import "{}" failed.'.format(expr))
+ except Exception:
+ raise Exception('Bad import syntax: "{}".'.format(expr))
+ return [k for k in list(n.keys()) if str(k) != '__builtins__']
+
+ #########################
+ else:
+ raise TypeError('Type "{}" not handled'.format(dtype))
+
+ def to_code(self):
+ """
+ Convert the value to code.
+ For string and list types, check the init flag, call evaluate().
+ This ensures that evaluate() was called to set the xxxify_flags.
+
+ Returns:
+ a string representing the code
+ """
+ self._init = True
+ value = self.get_value()
+ # String types
+ if self.dtype in ('string', 'file_open', 'file_save', '_multiline', '_multiline_python_external'):
+ if not self._init:
+ self.evaluate()
+ return repr(value) if self._stringify_flag else value
+
+ # Vector types
+ elif self.dtype in ('complex_vector', 'real_vector', 'float_vector', 'int_vector'):
+ if not self._init:
+ self.evaluate()
+ return '[' + value + ']' if self._lisitify_flag else value
+ else:
+ return value
+
+ def get_opt(self, item):
+ return self.options.attributes[self.get_value()][item]
+
+ ##############################################
+ # GUI Hint
+ ##############################################
+ def parse_gui_hint(self, expr):
+ """
+ Parse/validate gui hint value.
+
+ Args:
+ expr: gui_hint string from a block's 'gui_hint' param
+
+ Returns:
+ string of python code for positioning GUI elements in pyQT
+ """
+ self.hostage_cells.clear()
+
+ # Parsing
+ if ':' in expr:
+ tab, pos = expr.split(':')
+ elif ',' in expr:
+ tab, pos = '', expr
+ else:
+ tab, pos = expr, ''
+
+ if '@' in tab:
+ tab, index = tab.split('@')
+ else:
+ index = '0'
+ index = int(index)
+
+ # Validation
+ def parse_pos():
+ e = self.parent_flowgraph.evaluate(pos)
+
+ if not isinstance(e, (list, tuple)) or len(e) not in (2, 4) or not all(isinstance(ei, int) for ei in e):
+ raise Exception('Invalid GUI Hint entered: {e!r} (Must be a list of {{2,4}} non-negative integers).'.format(e=e))
+
+ if len(e) == 2:
+ row, col = e
+ row_span = col_span = 1
+ else:
+ row, col, row_span, col_span = e
+
+ if (row < 0) or (col < 0):
+ raise Exception('Invalid GUI Hint entered: {e!r} (non-negative integers only).'.format(e=e))
+
+ if (row_span < 1) or (col_span < 1):
+ raise Exception('Invalid GUI Hint entered: {e!r} (positive row/column span required).'.format(e=e))
+
+ return row, col, row_span, col_span
+
+ def validate_tab():
+ tabs = (block for block in self.parent_flowgraph.iter_enabled_blocks()
+ if block.key == 'qtgui_tab_widget' and block.name == tab)
+ tab_block = next(iter(tabs), None)
+ if not tab_block:
+ raise Exception('Invalid tab name entered: {tab} (Tab name not found).'.format(tab=tab))
+
+ tab_index_size = int(tab_block.params['num_tabs'].value)
+ if index >= tab_index_size:
+ raise Exception('Invalid tab index entered: {tab}@{index} (Index out of range).'.format(
+ tab=tab, index=index))
+
+ # Collision Detection
+ def collision_detection(row, col, row_span, col_span):
+ my_parent = '{tab}@{index}'.format(tab=tab, index=index) if tab else 'main'
+ # Calculate hostage cells
+ for r in range(row, row + row_span):
+ for c in range(col, col + col_span):
+ self.hostage_cells.add((my_parent, (r, c)))
+
+ for other in self.get_all_params('gui_hint'):
+ if other is self:
+ continue
+ collision = next(iter(self.hostage_cells & other.hostage_cells), None)
+ if collision:
+ raise Exception('Block {block!r} is also using parent {parent!r}, cell {cell!r}.'.format(
+ block=other.parent_block.name, parent=collision[0], cell=collision[1]
+ ))
+
+ # Code Generation
+ if tab:
+ validate_tab()
+ layout = '{tab}_grid_layout_{index}'.format(tab=tab, index=index)
+ else:
+ layout = 'top_grid_layout'
+
+ widget = '%s' # to be fill-out in the mail template
+
+ if pos:
+ row, col, row_span, col_span = parse_pos()
+ collision_detection(row, col, row_span, col_span)
+
+ widget_str = textwrap.dedent("""
+ self.{layout}.addWidget({widget}, {row}, {col}, {row_span}, {col_span})
+ for r in range({row}, {row_end}):
+ self.{layout}.setRowStretch(r, 1)
+ for c in range({col}, {col_end}):
+ self.{layout}.setColumnStretch(c, 1)
+ """.strip('\n')).format(
+ layout=layout, widget=widget,
+ row=row, row_span=row_span, row_end=row+row_span,
+ col=col, col_span=col_span, col_end=col+col_span,
+ )
+
+ else:
+ widget_str = 'self.{layout}.addWidget({widget})'.format(layout=layout, widget=widget)
+
+ return widget_str
+
+ def get_all_params(self, dtype, key=None):
+ """
+ Get all the params from the flowgraph that have the given type and
+ optionally a given key
+
+ Args:
+ dtype: the specified type
+ key: the key to match against
+
+ Returns:
+ a list of params
+ """
+ params = []
+ for block in self.parent_flowgraph.iter_enabled_blocks():
+ params.extend(
+ param for param in block.params.values()
+ if param.dtype == dtype and (key is None or key == param.name)
+ )
+ return params
diff --git a/grc/core/params/template_arg.py b/grc/core/params/template_arg.py
new file mode 100644
index 0000000000..5c8c610b4f
--- /dev/null
+++ b/grc/core/params/template_arg.py
@@ -0,0 +1,50 @@
+# Copyright 2008-2017 Free Software Foundation, Inc.
+# This file is part of GNU Radio
+#
+# GNU Radio Companion is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# GNU Radio Companion is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+from __future__ import absolute_import
+
+
+class TemplateArg(str):
+ """
+ A cheetah template argument created from a param.
+ The str of this class evaluates to the param's to code method.
+ The use of this class as a dictionary (enum only) will reveal the enum opts.
+ The __call__ or () method can return the param evaluated to a raw python data type.
+ """
+
+ def __new__(cls, param):
+ value = param.to_code()
+ instance = str.__new__(cls, value)
+ setattr(instance, '_param', param)
+ return instance
+
+ def __getitem__(self, item):
+ return str(self._param.get_opt(item)) if self._param.is_enum() else NotImplemented
+
+ def __getattr__(self, item):
+ if not self._param.is_enum():
+ raise AttributeError()
+ try:
+ return str(self._param.get_opt(item))
+ except KeyError:
+ raise AttributeError()
+
+ def __str__(self):
+ return str(self._param.to_code())
+
+ def __call__(self):
+ return self._param.get_evaluated()
diff --git a/grc/core/platform.py b/grc/core/platform.py
index 538bacade2..6d02cb6441 100644
--- a/grc/core/platform.py
+++ b/grc/core/platform.py
@@ -19,7 +19,6 @@ from __future__ import absolute_import, print_function
from codecs import open
from collections import namedtuple
-import glob
import os
import logging
from itertools import chain
@@ -29,16 +28,16 @@ from six.moves import range
from . import (
Messages, Constants,
- blocks, ports, errors, utils, schema_checker
+ blocks, params, ports, errors, utils, schema_checker
)
from .Config import Config
+from .cache import Cache
from .base import Element
from .io import yaml
from .generator import Generator
from .FlowGraph import FlowGraph
from .Connection import Connection
-from .Param import Param
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
@@ -141,44 +140,41 @@ class Platform(Element):
self.connection_templates.clear()
self._block_categories.clear()
- # FIXME: remove this as soon as converter is stable
- from ..converter import Converter
- converter = Converter(self.config.block_paths, self.config.yml_block_cache)
- converter.run()
- logging.info('XML converter done.')
-
- for file_path in self._iter_files_in_block_path(path):
- try:
- data = converter.cache[file_path]
- except KeyError:
- with open(file_path, encoding='utf-8') as fp:
- data = yaml.safe_load(fp)
-
- if file_path.endswith('.block.yml'):
- loader = self.load_block_description
- scheme = schema_checker.BLOCK_SCHEME
- elif file_path.endswith('.domain.yml'):
- loader = self.load_domain_description
- scheme = schema_checker.DOMAIN_SCHEME
- elif file_path.endswith('.tree.yml'):
- loader = self.load_category_tree_description
- scheme = None
- else:
- continue
-
- try:
- checker = schema_checker.Validator(scheme)
- passed = checker.run(data)
- for msg in checker.messages:
- logger.warning('{:<40s} {}'.format(os.path.basename(file_path), msg))
- if not passed:
- logger.info('YAML schema check failed for: ' + file_path)
-
- loader(data, file_path)
- except Exception as error:
- logger.exception('Error while loading %s', file_path)
- logger.exception(error)
- raise
+ # # FIXME: remove this as soon as converter is stable
+ # from ..converter import Converter
+ # converter = Converter(self.config.block_paths, self.config.yml_block_cache)
+ # converter.run()
+ # logging.info('XML converter done.')
+
+ with Cache(Constants.CACHE_FILE) as cache:
+ for file_path in self._iter_files_in_block_path(path):
+ data = cache.get_or_load(file_path)
+
+ if file_path.endswith('.block.yml'):
+ loader = self.load_block_description
+ scheme = schema_checker.BLOCK_SCHEME
+ elif file_path.endswith('.domain.yml'):
+ loader = self.load_domain_description
+ scheme = schema_checker.DOMAIN_SCHEME
+ elif file_path.endswith('.tree.yml'):
+ loader = self.load_category_tree_description
+ scheme = None
+ else:
+ continue
+
+ try:
+ checker = schema_checker.Validator(scheme)
+ passed = checker.run(data)
+ for msg in checker.messages:
+ logger.warning('{:<40s} {}'.format(os.path.basename(file_path), msg))
+ if not passed:
+ logger.info('YAML schema check failed for: ' + file_path)
+
+ loader(data, file_path)
+ except Exception as error:
+ logger.exception('Error while loading %s', file_path)
+ logger.exception(error)
+ raise
for key, block in six.iteritems(self.blocks):
category = self._block_categories.get(key, block.category)
@@ -201,10 +197,9 @@ class Platform(Element):
if os.path.isfile(entry):
yield entry
elif os.path.isdir(entry):
- pattern = os.path.join(entry, '**.' + ext)
- yield_from = glob.iglob(pattern)
- for file_path in yield_from:
- yield file_path
+ for dirpath, dirnames, filenames in os.walk(entry):
+ for filename in sorted(filter(lambda f: f.endswith('.' + ext), filenames)):
+ yield os.path.join(dirpath, filename)
else:
logger.debug('Ignoring invalid path entry %r', entry)
@@ -232,16 +227,18 @@ class Platform(Element):
log.error('Unknown format version %d in %s', file_format, file_path)
return
- block_id = data.pop('id').rstrip('_')
+ block_id = data['id'] = data['id'].rstrip('_')
if block_id in self.block_classes_build_in:
log.warning('Not overwriting build-in block %s with %s', block_id, file_path)
return
if block_id in self.blocks:
- log.warning('Block with id "%s" overwritten by %s', block_id, file_path)
+ log.warning('Block with id "%s" loaded from\n %s\noverwritten by\n %s',
+ block_id, self.blocks[block_id].loaded_from, file_path)
try:
- block_cls = self.blocks[block_id] = self.new_block_class(block_id, **data)
+ block_cls = self.blocks[block_id] = self.new_block_class(**data)
+ block_cls.loaded_from = file_path
except errors.BlockLoadError as error:
log.error('Unable to load block %s', block_id)
log.exception(error)
@@ -288,19 +285,12 @@ class Platform(Element):
path = []
def load_category(name, elements):
- if not isinstance(name, str):
- log.debug('invalid name %r', name)
- return
- if isinstance(elements, list):
- pass
- elif isinstance(elements, str):
- elements = [elements]
- else:
- log.debug('Ignoring elements of %s', name)
+ if not isinstance(name, six.string_types):
+ log.debug('Invalid name %r', name)
return
path.append(name)
- for element in elements:
- if isinstance(element, str):
+ for element in utils.to_list(elements):
+ if isinstance(element, six.string_types):
block_id = element
self._block_categories[block_id] = list(path)
elif isinstance(element, dict):
@@ -404,7 +394,7 @@ class Platform(Element):
'clone': ports.PortClone, # clone of ports with multiplicity > 1
}
param_classes = {
- None: Param, # default
+ None: params.Param, # default
}
def make_flow_graph(self, from_filename=None):
@@ -415,8 +405,8 @@ class Platform(Element):
fg.import_data(data)
return fg
- def new_block_class(self, block_id, **data):
- return blocks.build(block_id, **data)
+ def new_block_class(self, **data):
+ return blocks.build(**data)
def make_block(self, parent, block_id, **kwargs):
cls = self.block_classes[block_id]
diff --git a/grc/core/schema_checker/block.py b/grc/core/schema_checker/block.py
index ea079b4276..d511e36887 100644
--- a/grc/core/schema_checker/block.py
+++ b/grc/core/schema_checker/block.py
@@ -37,7 +37,7 @@ TEMPLATES_SCHEME = expand(
BLOCK_SCHEME = expand(
id=Spec(types=str_, required=True, item_scheme=None),
label=str_,
- category=(list, str_),
+ category=str_,
flags=(list, str_),
parameters=Spec(types=list, required=False, item_scheme=PARAM_SCHEME),
diff --git a/grc/core/utils/__init__.py b/grc/core/utils/__init__.py
index 660eb594a5..f2ac986fb4 100644
--- a/grc/core/utils/__init__.py
+++ b/grc/core/utils/__init__.py
@@ -17,5 +17,17 @@
from __future__ import absolute_import
+import six
+
from . import epy_block_io, expr_utils, extract_docs, flow_graph_complexity
from .hide_bokeh_gui_options_if_not_installed import hide_bokeh_gui_options_if_not_installed
+
+
+def to_list(value):
+ if not value:
+ return []
+ elif isinstance(value, six.string_types):
+ return [value]
+ else:
+ return list(value)
+
diff --git a/grc/core/utils/descriptors/evaluated.py b/grc/core/utils/descriptors/evaluated.py
index 313cee5b96..0e1b68761c 100644
--- a/grc/core/utils/descriptors/evaluated.py
+++ b/grc/core/utils/descriptors/evaluated.py
@@ -15,6 +15,10 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+from __future__ import absolute_import
+
+import six
+
class Evaluated(object):
def __init__(self, expected_type, default, name=None):
@@ -62,7 +66,7 @@ class Evaluated(object):
def __set__(self, instance, value):
attribs = instance.__dict__
value = value or self.default
- if isinstance(value, str) and value.startswith('${') and value.endswith('}'):
+ if isinstance(value, six.text_type) and value.startswith('${') and value.endswith('}'):
attribs[self.name_raw] = value[2:-1].strip()
else:
attribs[self.name] = type(self.default)(value)
@@ -75,9 +79,10 @@ class Evaluated(object):
class EvaluatedEnum(Evaluated):
def __init__(self, allowed_values, default=None, name=None):
- self.allowed_values = allowed_values if isinstance(allowed_values, (list, tuple)) else \
- allowed_values.split()
- default = default if default is not None else self.allowed_values[0]
+ if isinstance(allowed_values, six.string_types):
+ allowed_values = set(allowed_values.split())
+ self.allowed_values = allowed_values
+ default = default if default is not None else next(iter(self.allowed_values))
super(EvaluatedEnum, self).__init__(str, default, name)
def default_eval_func(self, instance):
diff --git a/grc/gui/Actions.py b/grc/gui/Actions.py
index d214f28049..14b0422764 100644
--- a/grc/gui/Actions.py
+++ b/grc/gui/Actions.py
@@ -302,6 +302,7 @@ ELEMENT_DELETE = actions.register("win.delete",
label='_Delete',
tooltip='Delete the selected blocks',
icon_name='edit-delete',
+ keypresses=["Delete"],
)
BLOCK_MOVE = actions.register("win.block_move")
BLOCK_ROTATE_CCW = actions.register("win.block_rotate_ccw",
diff --git a/grc/gui/Application.py b/grc/gui/Application.py
index ea7ad5cd80..70cf9b78b2 100644
--- a/grc/gui/Application.py
+++ b/grc/gui/Application.py
@@ -663,7 +663,7 @@ class Application(Gtk.Application):
flow_graph_update(new_flow_graph)
page.saved = False
elif action == Actions.FLOW_GRAPH_SCREEN_CAPTURE:
- file_path, background_transparent = FileDialogs.SaveScreenShot(main, page.file_path).run()
+ file_path, background_transparent = SaveScreenShotDialog(main, page.get_file_path()).run()
if file_path is not None:
try:
Utils.make_screenshot(flow_graph, file_path, background_transparent)
diff --git a/grc/gui/ParamWidgets.py b/grc/gui/ParamWidgets.py
index 18d1da736b..747c3ffec5 100644
--- a/grc/gui/ParamWidgets.py
+++ b/grc/gui/ParamWidgets.py
@@ -57,12 +57,13 @@ class InputParam(Gtk.HBox):
"""The base class for an input parameter inside the input parameters dialog."""
expand = False
- def __init__(self, param, changed_callback=None, editing_callback=None):
+ def __init__(self, param, changed_callback=None, editing_callback=None, transient_for=None):
Gtk.HBox.__init__(self)
self.param = param
self._changed_callback = changed_callback
self._editing_callback = editing_callback
+ self._transient_for = transient_for
self.label = Gtk.Label()
self.label.set_size_request(Utils.scale_scalar(150), -1)
@@ -199,7 +200,7 @@ class PythonEditorParam(InputParam):
self.pack_start(button, True, True, True)
def open_editor(self, widget=None):
- self.param.parent_flowgraph.install_external_editor(self.param)
+ self.param.parent_flowgraph.install_external_editor(self.param, parent=self._transient_for)
def get_text(self):
pass # we never update the value from here
@@ -289,7 +290,7 @@ class FileParam(EntryParam):
If the button was clicked, open a file dialog in open/save format.
Replace the text in the entry with the new filename from the file dialog.
"""
- #get the paths
+ # get the paths
file_path = self.param.is_valid() and self.param.get_evaluated() or ''
(dirname, basename) = os.path.isfile(file_path) and os.path.split(file_path) or (file_path, '')
# check for qss theme default directory
@@ -301,22 +302,28 @@ class FileParam(EntryParam):
if not os.path.exists(dirname):
dirname = os.getcwd() # fix bad paths
- #build the dialog
+ # build the dialog
if self.param.dtype == 'file_open':
- file_dialog = Gtk.FileChooserDialog('Open a Data File...', None,
- Gtk.FileChooserAction.OPEN, ('gtk-cancel',Gtk.ResponseType.CANCEL,'gtk-open',Gtk.ResponseType.OK))
+ file_dialog = Gtk.FileChooserDialog(
+ 'Open a Data File...', None, Gtk.FileChooserAction.OPEN,
+ ('gtk-cancel', Gtk.ResponseType.CANCEL, 'gtk-open', Gtk.ResponseType.OK),
+ transient_for=self._transient_for,
+ )
elif self.param.dtype == 'file_save':
- file_dialog = Gtk.FileChooserDialog('Save a Data File...', None,
- Gtk.FileChooserAction.SAVE, ('gtk-cancel',Gtk.ResponseType.CANCEL, 'gtk-save',Gtk.ResponseType.OK))
+ file_dialog = Gtk.FileChooserDialog(
+ 'Save a Data File...', None, Gtk.FileChooserAction.SAVE,
+ ('gtk-cancel', Gtk.ResponseType.CANCEL, 'gtk-save', Gtk.ResponseType.OK),
+ transient_for=self._transient_for,
+ )
file_dialog.set_do_overwrite_confirmation(True)
- file_dialog.set_current_name(basename) #show the current filename
+ file_dialog.set_current_name(basename) # show the current filename
else:
raise ValueError("Can't open file chooser dialog for type " + repr(self.param.dtype))
- file_dialog.set_current_folder(dirname) #current directory
+ file_dialog.set_current_folder(dirname) # current directory
file_dialog.set_select_multiple(False)
file_dialog.set_local_only(True)
- if Gtk.ResponseType.OK == file_dialog.run(): #run the dialog
- file_path = file_dialog.get_filename() #get the file path
+ if Gtk.ResponseType.OK == file_dialog.run(): # run the dialog
+ file_path = file_dialog.get_filename() # get the file path
self._input.set_text(file_path)
self._editing_callback()
self._apply_change()
diff --git a/grc/gui/Platform.py b/grc/gui/Platform.py
index 2a38bc619e..8eb79f3459 100644
--- a/grc/gui/Platform.py
+++ b/grc/gui/Platform.py
@@ -63,8 +63,8 @@ class Platform(CorePlatform):
FlowGraph = canvas.FlowGraph
Connection = canvas.Connection
- def new_block_class(self, block_id, **data):
- cls = CorePlatform.new_block_class(self, block_id, **data)
+ def new_block_class(self, **data):
+ cls = CorePlatform.new_block_class(self, **data)
return canvas.Block.make_cls_with_base(cls)
block_classes_build_in = {key: canvas.Block.make_cls_with_base(cls)
diff --git a/grc/gui/PropsDialog.py b/grc/gui/PropsDialog.py
index 9ce9bf2701..ac4506a3d8 100644
--- a/grc/gui/PropsDialog.py
+++ b/grc/gui/PropsDialog.py
@@ -185,12 +185,13 @@ class PropsDialog(Gtk.Dialog):
continue
box_all_valid = box_all_valid and param.is_valid()
- input_widget = param.get_input(self._handle_changed, self._activate_apply)
+ input_widget = param.get_input(self._handle_changed, self._activate_apply,
+ transient_for=self.get_transient_for())
input_widget.show_all()
vbox.pack_start(input_widget, input_widget.expand, True, 1)
- label.set_markup('<span foreground="{color}">{name}</span>'.format(
- color='black' if box_all_valid else 'red', name=Utils.encode(category)
+ label.set_markup('<span {color}>{name}</span>'.format(
+ color='foreground="red"' if not box_all_valid else '', name=Utils.encode(category)
))
vbox.show() # show params box with new params
diff --git a/grc/gui/Utils.py b/grc/gui/Utils.py
index f47c2e6b97..1b32e91439 100644
--- a/grc/gui/Utils.py
+++ b/grc/gui/Utils.py
@@ -19,6 +19,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
from __future__ import absolute_import
+import numbers
+
from gi.repository import GLib
import cairo
import six
@@ -91,7 +93,7 @@ def num_to_str(num):
return template.format(value / factor, symbol.strip())
return template.format(value, '')
- if isinstance(num, Constants.COMPLEX_TYPES):
+ if isinstance(num, numbers.Complex):
num = complex(num) # Cast to python complex
if num == 0:
return '0'
diff --git a/grc/gui/canvas/flowgraph.py b/grc/gui/canvas/flowgraph.py
index 79af5d5931..3e0fd83dad 100644
--- a/grc/gui/canvas/flowgraph.py
+++ b/grc/gui/canvas/flowgraph.py
@@ -88,7 +88,7 @@ class FlowGraph(CoreFlowgraph, Drawable):
break
return block_id
- def install_external_editor(self, param):
+ def install_external_editor(self, param, parent=None):
target = (param.parent_block.name, param.key)
if target in self._external_updaters:
@@ -96,7 +96,7 @@ class FlowGraph(CoreFlowgraph, Drawable):
else:
config = self.parent_platform.config
editor = (find_executable(config.editor) or
- Dialogs.choose_editor(None, config)) # todo: pass in parent
+ Dialogs.choose_editor(parent, config)) # todo: pass in parent
if not editor:
return
updater = functools.partial(
diff --git a/grc/gui/canvas/param.py b/grc/gui/canvas/param.py
index e2c335d9cf..5777423c68 100644
--- a/grc/gui/canvas/param.py
+++ b/grc/gui/canvas/param.py
@@ -17,11 +17,11 @@
from __future__ import absolute_import
-from .drawable import Drawable
+import numbers
+from .drawable import Drawable
from .. import ParamWidgets, Utils, Constants
-
-from ...core.Param import Param as CoreParam
+from ...core.params import Param as CoreParam
class Param(CoreParam):
@@ -128,7 +128,7 @@ class Param(CoreParam):
t = self.dtype
if isinstance(e, bool):
return str(e)
- elif isinstance(e, Constants.COMPLEX_TYPES):
+ elif isinstance(e, numbers.Complex):
dt_str = Utils.num_to_str(e)
elif isinstance(e, Constants.VECTOR_TYPES):
# Vector types
diff --git a/grc/tests/resources/file1.block.yml b/grc/tests/resources/file1.block.yml
new file mode 100644
index 0000000000..f486c89ea8
--- /dev/null
+++ b/grc/tests/resources/file1.block.yml
@@ -0,0 +1,38 @@
+id: block_key
+label: testname
+
+parameters:
+- id: vlen
+ label: Vec Length
+ category: test
+ dtype: int
+ default: '1'
+ hide: ${ 'part' if vlen == 1 else 'none' }
+- id: out_type
+ label: Vec Length
+ dtype: string
+ default: complex
+ hide: part
+- id: a
+ label: Alpha
+ dtype: ${ (out_type) }
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: complex
+ vlen: ${ 2 * vlen }
+- domain: message
+ id: in2
+
+outputs:
+- domain: stream
+ dtype: ${ out_type }
+ vlen: ${ vlen }
+asserts:
+- ${ vlen > 0 }
+
+templates:
+ make: blocks.complex_to_mag_squared(${vlen})
+
+file_format: 1
diff --git a/grc/tests/resources/file1.xml b/grc/tests/resources/file1.xml
deleted file mode 100644
index f03288b85d..0000000000
--- a/grc/tests/resources/file1.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Copyright 2014 Free Software Foundation, Inc.
-This file is part of GNU Radio
-
-GNU Radio Companion is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-GNU Radio Companion is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
--->
-<block>
- <name>testname</name>
- <key>block_key</key>
- <make>blocks.complex_to_mag_squared($(vlen))</make>
- <param>
- <name>Vec Length</name>
- <key>vlen</key>
- <value>1</value>
- <type>int</type>
- <tab>test</tab>
- </param>
- <param>
- <name>Vec Length</name>
- <key>out_type</key>
- <value>complex</value>
- <type>string</type>
- </param>
- <param>
- <name>Alpha</name>
- <key>a</key>
- <value>0</value>
- <type>($out_type)</type>
- </param>
- <check>$vlen &gt; 0</check>
- <sink>
- <name>in</name>
- <type>complex</type>
- <vlen>2 * $vlen</vlen>
- </sink>
- <sink>
- <name>in2</name>
- <type>message</type>
- </sink>
- <source>
- <name>out</name>
- <type>$out_type</type>
- <vlen>$vlen</vlen>
- </source>
-</block>
diff --git a/grc/tests/resources/file2.block.yml b/grc/tests/resources/file2.block.yml
new file mode 100644
index 0000000000..459527260c
--- /dev/null
+++ b/grc/tests/resources/file2.block.yml
@@ -0,0 +1,31 @@
+id: blocks_and_const_xx
+label: And Const
+
+parameters:
+- id: type
+ label: IO Type
+ dtype: enum
+ options: [int, short, byte]
+ option_attributes:
+ fcn: [ii, ss, bb]
+ hide: part
+- id: const
+ label: Constant
+ dtype: int
+ default: '0'
+
+inputs:
+- domain: stream
+ dtype: ${ type }
+
+outputs:
+- domain: stream
+ dtype: ${ type }
+
+templates:
+ imports: from gnuradio import blocks
+ make: blocks.and_const_${type.fcn}(${const})
+ callbacks:
+ - set_k(${const})
+
+file_format: 1
diff --git a/grc/tests/resources/file2.xml b/grc/tests/resources/file2.xml
deleted file mode 100644
index 1300c7f5a1..0000000000
--- a/grc/tests/resources/file2.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Copyright 2014 Free Software Foundation, Inc.
-This file is part of GNU Radio
-
-GNU Radio Companion is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-GNU Radio Companion is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
--->
-<!--
-###################################################
-## And Const Block:
-## all types, 1 output, 1 input & const
-###################################################
- -->
-<block>
- <name>And Const</name>
- <key>blocks_and_const_xx</key>
- <category>test</category>
- <throttle>1</throttle>
- <import>from gnuradio import blocks</import>
- <make>blocks.and_const_$(type.fcn)($const)</make>
- <callback>set_k($const)</callback>
- <param>
- <name>IO Type</name>
- <key>type</key>
- <type>enum</type>
- <option>
- <name>Int</name>
- <key>int</key>
- <opt>fcn:ii</opt>
- </option>
- <option>
- <name>Short</name>
- <key>short</key>
- <opt>fcn:ss</opt>
- </option>
- <option>
- <name>Byte</name>
- <key>byte</key>
- <opt>fcn:bb</opt>
- </option>
- </param>
- <param>
- <name>Constant</name>
- <key>const</key>
- <value>0</value>
- <type>${type}</type>
- <hide>#if $log then 'none' else 'part'#</hide>
- </param>
- <sink>
- <name>in</name>
- <type>$type</type>
- </sink>
- <source>
- <name>out</name>
- <type>$(type.fcn)</type>
- </source>
- <doc>
-This block creates a variable check box. \
-Leave the label blank to use the variable id as the label.
-
-A check box selects between two values of similar type. \
-Te values do not necessarily need to be of boolean type.
-
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>
diff --git a/grc/tests/resources/file3.block.yml b/grc/tests/resources/file3.block.yml
new file mode 100644
index 0000000000..e53515d134
--- /dev/null
+++ b/grc/tests/resources/file3.block.yml
@@ -0,0 +1,66 @@
+id: variable_qtgui_check_box
+label: QT GUI Check Box
+
+parameters:
+- id: label
+ label: Label
+ dtype: string
+ hide: ${ ('none' if label else 'part') }
+- id: type
+ label: Type
+ dtype: enum
+ default: int
+ options: [real, int, string, bool, raw]
+ option_labels: [Float, Integer, String, Boolean, Any]
+ option_attributes:
+ conv: [float, int, str, bool, eval]
+ hide: part
+- id: value
+ label: Default Value
+ dtype: ${ type }
+ default: 'True'
+- id: 'true'
+ label: 'True'
+ dtype: ${ type }
+ default: 'True'
+- id: 'false'
+ label: 'False'
+ dtype: ${ type }
+ default: 'False'
+- id: gui_hint
+ label: GUI Hint
+ dtype: gui_hint
+ hide: part
+value: ${ value }
+
+asserts:
+- ${value in (true, false)}
+
+templates:
+ imports: from PyQt4 import Qt
+ var_make: self.${id} = ${id} = ${value}
+ callbacks:
+ - self.set_${id}(${value})
+ - self._${id}_callback(${id})
+ make: |-
+ <%
+ win = '_%s_check_box'%id
+ if not label:
+ label = id
+ %>
+ ${win} = Qt.QCheckBox(${label})
+ self._${id}_choices = {True: ${true}, False: ${false}}
+ self._${id}_choices_inv = dict((v,k) for k,v in self._${id}_choices.iteritems())
+ self._${id}_callback = lambda i: Qt.QMetaObject.invokeMethod(${win}, "setChecked", Qt.Q_ARG("bool", self._${id}_choices_inv[i]))
+ self._${id}_callback(self.${id})
+ ${win}.stateChanged.connect(lambda i: self.set_${id}(self._${id}_choices[bool(i)]))
+ ${gui_hint()(win)}
+
+documentation: |-
+ This block creates a variable check box. Leave the label blank to use the variable id as the label.
+
+ A check box selects between two values of similar type. Te values do not necessarily need to be of boolean type.
+
+ The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional.
+
+file_format: 1
diff --git a/grc/tests/resources/file3.xml b/grc/tests/resources/file3.xml
deleted file mode 100644
index 71753badb1..0000000000
--- a/grc/tests/resources/file3.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Copyright 2014 Free Software Foundation, Inc.
-This file is part of GNU Radio
-
-GNU Radio Companion is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-GNU Radio Companion is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
--->
-<!--
-###################################################
-##Variable Check Box:
-## a gui check box form
-###################################################
- -->
-<block>
- <name>QT GUI Check Box</name>
- <key>variable_qtgui_check_box</key>
- <import>from PyQt4 import Qt</import>
- <var_make>self.$(id) = $(id) = $value</var_make>
- <make>#set $win = '_%s_check_box'%$id
-#if not $label()
- #set $label = '"%s"'%$id
-#end if
-$win = Qt.QCheckBox($label)
-self._$(id)_choices = {True: $true, False: $false}
-self._$(id)_choices_inv = dict((v,k) for k,v in self._$(id)_choices.iteritems())
-self._$(id)_callback = lambda i: Qt.QMetaObject.invokeMethod($(win), "setChecked", Qt.Q_ARG("bool", self._$(id)_choices_inv[i]))
-self._$(id)_callback(self.$id)
-$(win).stateChanged.connect(lambda i: self.set_$(id)(self._$(id)_choices[bool(i)]))
-$(gui_hint()($win))</make>
- <callback>self.set_$(id)($value)</callback>
- <callback>self._$(id)_callback($id)</callback>
- <param>
- <name>Label</name>
- <key>label</key>
- <value></value>
- <type>string</type>
- <hide>#if $label() then 'none' else 'part'#</hide>
- </param>
- <param>
- <name>Type</name>
- <key>type</key>
- <value>int</value>
- <type>enum</type>
- <hide>part</hide>
- <option><name>Float</name><key>real</key><opt>conv:float</opt></option>
- <option><name>Integer</name><key>int</key><opt>conv:int</opt></option>
- <option><name>String</name><key>string</key><opt>conv:str</opt></option>
- <option><name>Boolean</name><key>bool</key><opt>conv:bool</opt></option>
- <option><name>Any</name><key>raw</key><opt>conv:eval</opt></option>
- </param>
- <param>
- <name>Default Value</name>
- <key>value</key>
- <value>True</value>
- <type>$type</type>
- </param>
- <param>
- <name>True</name>
- <key>true</key>
- <value>True</value>
- <type>$type</type>
- </param>
- <param>
- <name>False</name>
- <key>false</key>
- <value>False</value>
- <type>$type</type>
- </param>
- <param>
- <name>GUI Hint</name>
- <key>gui_hint</key>
- <value></value>
- <type>gui_hint</type>
- <hide>part</hide>
- </param>
- <check>$value in ($true, $false)</check>
- <doc>
-This block creates a variable check box. \
-Leave the label blank to use the variable id as the label.
-
-A check box selects between two values of similar type. \
-Te values do not necessarily need to be of boolean type.
-
-The GUI hint can be used to position the widget within the application. \
-The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. \
-Both the tab specification and the grid position are optional.
- </doc>
-</block>