【发布时间】:2021-03-31 03:03:49
【问题描述】:
我目前正在linux系统中开发传感器信息分发器。我通过 UART 接口接收序列化消息,该接口提供许多传感器的信息,这些信息被分发到在同一系统上运行的各种应用程序。
每个传感器提供相同的信息,但来自不同的地方。
因此从我收到的每个传感器; ID, data1,data2,dataN
运行的应用程序只需要一些特定传感器的信息。这意味着Applications A 可能对传感器 10 和 15 感兴趣,而Application B 可能对传感器 10 感兴趣。
我计划通过 d-BUS 将信息从我的“分销商”发送到应用程序。这意味着
Application A 将订阅 signal_10 和 signal_15,其中分别包含来自传感器 10 和 15 的 data1,data2,dataN,而 Application B 将仅订阅 signal_10。
这将允许每个应用程序仅接收相关信息并避免在每个应用程序中解析相关信号。此外,它将允许添加新应用程序并订阅传感器的任何组合。
从我在 dbus 规范中看到的信号名称需要明确定义。
<signal name="changed_value_10">
<arg type="s" name="change_source_name" direction="out"/>
</signal>
因此定义参数信号是不可能的。我想定义一个通用信号并将其重用于所有传感器。作为概念:
<signal name="changed_value_%ID%">
<arg type="s" name="change_source_name" direction="out"/>
</signal>
尽管我可以手动将所有 +200 传感器定义到自省 XML 中,但我觉得它并不优雅。
有没有办法定义一个信号,以便可以重复使用它来定义多个信号?类似于 C 编程中的 MACRO 或任何其他方式。
注意事项:
- 我决定使用 d-bus,因为我对它有点熟悉,并将在系统上运行的其他应用程序中使用它。不过,我愿意接受任何反馈或其他选择。
- 应用程序是用 C 编写的
【问题讨论】: