GnuRadio 伴侣使用 XML 文件来描述树外 (OOT) 模块块的 API。描述该 XML 模式的文档在哪里?
1 回答
这里有部分描述:https ://wiki.gnuradio.org/index.php/GNURadioCompanion#Creating_the_XML_Block_Definition
名称标签规定了模块、参数和端口的标签文本。
关键标签是唯一标识符,它们可能不包含空格。区块键在 GRC 的所有区块中必须是全局唯一的。参数键必须仅在块内是唯一的。
类别标签是一个 unix 风格的路径,表示块在块选择窗口内的位置。路径可以是新类别(自定义),也可以表示子类别(过滤器/自定义)。要将块放入根类别,只需在根路径中使用一个斜杠 (/)。
导入标签(可以有多个)必须是包含您的块的模块的有效 python 导入语句。
make标记包含构建块所需的代码。这段代码本质上是一个嵌套在 xml 标签内的 cheetah 模板。在代码生成时,模板对“$”参数执行文本替换。有关更高级的功能,请参阅 cheetah 模板文档。
回调标记从您的自定义块中注册一个设置方法。一旦注册了 set-method,就可以在运行时在更改变量时调用 set-method。可以有任意数量的回调标签,一个用于块的每个 set-method。或者如果这不适用,则没有回调标签。
对于param标签,type 标签的常用值有:complex、real、int、complex_vector、real_vector、int_vector、string 和 raw。原始类型允许在不执行类型检查的情况下使用任何值。real 类型应该用于单精度和双精度浮点数。int 类型应该用于 longs、ints、shorts 和 chars。
隐藏标签控制参数在 GRC 中的显示方式。它要么是无,要么是部分(显示在道具对话框中,而不是在画布上的块中)或全部。
sink标签表示输入端口,source标签表示输出端口。类型标记的允许值为:complex、float、int、short 和 byte。对于具有向量长度的端口,在 type 标记之后指定 vlen 标记。
代替更好的选择,有一个描述块 XML 的文档类型定义:https ://github.com/gnuradio/gnuradio/blob/master/grc/core/block.dtd 。相关部分如下图所示:
<!--
Top level element.
A block contains a name, ...parameters list, and list of IO ports.
-->
<!ELEMENT block (name, key, category?, throttle?, flags?, import*, var_make?, var_value?,
make, callback*, param_tab_order?, param*, bus_sink?, bus_source?, check*,
sink*, source*, bus_structure_sink?, bus_structure_source?, doc?, grc_source?)>
<!--
Sub level elements.
-->
<!ELEMENT param_tab_order (tab+)>
<!ELEMENT param (base_key?, name, key, value?, type?, hide?, option*, tab?)>
<!ELEMENT option (name, key, opt*)>
<!ELEMENT sink (name, type, vlen?, domain?, nports?, optional?, hide?)>
<!ELEMENT source (name, type, vlen?, domain?, nports?, optional?, hide?)>
<!--
Bottom level elements.
Character data only.
-->
Wikipedia 描述了Document 类型定义中使用的限定符:
量词是紧跟在它所应用的指定项之后的单个字符,以限制这些项在元素内容中的指定位置连续出现的次数;它可能是:
+ 用于指定该项目必须出现一次或多次——每次出现的有效内容可能不同;
* 用于指定允许出现任意次数(零次或多次)——该项是可选的,每次出现的有效内容可能不同
? 用于指定不得超过一次出现 - 该项目是可选的;
< check>标签可用于验证。例如,如果您有一个带有键“title”的参数和另一个带有键“num”的参数,您可以使用以下顶级标签进行验证。
<check>$title != ""</check>
<check>$num > -1</check>
<check>$num < 5</check>