是否有等同于 TX 的 matchAllocationIdToStreamId?

Is there an equivalent to matchAllocationIdToStreamId for TX?

我正在尝试为具有两个独立 TX 通道的收音机完成一个 FE 设备。该向导为 TX 数据生成了一个带有 2 个短输入端口的设备。当我作为设备的用户分配一个 TX 通道时,我不知道分配使用了哪个端口。处理此问题的最佳方法是什么,因为我必须从适当的端口读取数据以发送到 TX 通道?

如果我将输入端口的数量减少到一个,我可以拥有为每个路由设置流 ID(作为过滤器)的属性,并让用户将流 ID 与调谐器索引相关联。这必须在分配之后完成。

你的想法是对的。应该有一个可以处理多个流的输入 BulkIO 端口,而不是多个输入端口。该向导允许开发人员指定要生成多少个输入端口,因此您必须选择两个。 FEI 调谐器设备没有太多理由拥有两个相同类型的输入端口来接收数据流。 USRP_UHD 是多个输入端口确实有意义的示例,但这只是因为它支持多种数据类型(shortfloat)并且每种类型都有一个输入端口。

现在让我们假设您有一个用于将数据发送到两个 TX 通道的输入端口。您应该将输入数据的流 ID 映射到 TX 调谐器的分配 ID。您建议使用调谐器索引,但我建议改用分配 ID。有(至少)三种方法可以将输入流映射到特定分配的调谐器:

  1. 使用结构序列 属性 将输入流 ID 映射到目标 TX 调谐器的分配 ID(这与您的建议类似)。 connectionTable 属性 通常用于 multi-out 端口,但同样的概念可以应用于 multi-in 端口。每个结构条目都会将一个输入流 ID 映射到一个分配 ID(可能还有输入端口的端口名称,尽管在这种情况下最好不要使用端口名称)。这必须像任何其他 属性 一样在外部配置,而不是当它用于 multi-out 端口时,它是在 FEI 设备本身分配期间配置的。当输入端口接收到数据时,开发人员代码必须检查 connectionTable 属性 以了解数据流与哪个调谐器关联(如果有)。
  2. 另一种可能性是定义一个 SRI 关键字,使用分配 ID 标识目标 TX 调谐器(例如 key="TUNER_ID" 和 value=<actual allocation id of TX tuner>)并将其添加到输入数据流的 SRI .同样,开发人员代码将需要检查 SRI 关键字以了解数据流与哪个调谐器关联(如果有)。
  3. 当然,另一种选择是要求分配 ID 与流 ID 相同,这样分配将使用流 ID 作为分配 ID(而不是更改流 ID 以匹配任何内容)使用了分配 ID...虽然两者都可以)。

请注意,对于 multi-out 端口,到端口的连接是使用与分配 ID 匹配的连接 ID 建立的,并且连同 connectionTable 属性(映射 Allocation/Connection ID to Stream ID) 使输出端口仅将数据流发送到适当的连接。输入端口(或称为 "provides" 端口)实际上不知道连接 ID,因此不能采用类似的方法。

上面提出的每个解决方案都各有利弊:

  • 选项 1 需要配置设备属性。如果 who-/what-ever 进行分配时也知道流 ID,这并不是什么大问题。如果分配是通过框架处理分配的波形中的 uses-device 关系进行的,则有点棘手。此外,在配置 connectionTable 属性 时必须格外小心,因为很容易清除现有的 connectionTable 配置。您必须查询 属性 以获取当前配置,根据需要进行修改,然后使用修改后的值配置 属性。简单地配置流 ID 和分配 ID 映射将清除所有现有配置。解决此问题的一个简单方法是创建一个名为 addStreamMapping 的结构 属性,在配置时将值添加到 connectionTable 结构序列(使用 属性 侦听器)。相同的技术可用于删除 connectionTable 条目。这允许 FEI 设备同步 adding/removing 个条目。
  • 选项 2 需要注入关键字,这并不总是需要的。数据处理路径必须知道分配 ID 才能工作。使用关键字注入器组件使这更可行。
  • 选项 3 要求:流 ID 在分配时已知,或者流 ID 设置为分配 ID。

理想情况下,您甚至可以同时支持这三个。 FEI 没有定义如何将输入数据流映射到特定的 TX 调谐器,因此在定义和记录它之前,请使用最适合您的用例的方法。