使用可变I / O类型编程OOT模块

时间:2015-10-30 12:07:40

标签: gnuradio gnuradio-companion

我想在c ++中为GNU Radio编写一个OOT模块。

为了熟悉此事,我想写一下现有的Block' add_xx'自己。

我不知道如何在IO-Type的块设置中出现下拉菜单。

任何人都可以举一个简单的例子,我是否必须在_impl.cc和_impl.h文件中编写它?

我有使用gr_modtool创建的代码框架。如果样本基于此,那就太好了。

1 个答案:

答案 0 :(得分:0)

所以,诀窍是add_XX块的不同类型实际上是不同的类,下拉菜单实际上使GNU Radio伴侣设置了几个变量,而这些变量又用于决定哪个块是用过的;这是the XML file中描述add_xx的所有相对丑陋的代码:

<?xml version="1.0"?>
...
<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>
        ...
    </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>

因此,复杂的add_cc类,浮点数add_ff等等。实际上,GNU Radio的构建系统从单个文本模板生成这些实现。

所以,虽然我认为重新创建一个像add_cc这样的简单块是一个非常好的主意,但是在实现新东西时,类型可变性是很少需要的功能,对初学者来说很难做到。

所以:从单一类型开始,然后从1到5跟随official GNU Radio Guided Tutorials。它们是专为像你这样的人制作的,它们涵盖了C ++块!