DBus 从 shell 发送

DBus 从 shell 发送

我需要从 shell 发送一个带有 DBus 的方法调用

当我从 shell 发送此代码时:

dbus-send --print-reply --system --type=method_call \
--dest=vehicle.network.service /Diag \
vehicle.network.service.Diag.setVariantCoding

我收到了这样的答复:

错误 org.freedesktop.DBus.Error.InvalidArgs:消息类型“()”与预期类型“(uay)”不匹配

我怎样才能将消息类型设为(uay)?

我知道它有 6 个字节长。

答案1

类型根据您提供的参数自动确定。

(uay)意味着您需要为该特定方法提供一个 uint32 ( u) 和一个字节数组 ( )。(ayD-Bus 规范解释类型符号的含义。

例如,如果您想调用setVariantCoding(12345, "\xAB\xCD\xEF"),请使用:

dbus-send --system --print-reply --type=method_call \
          --dest=vehicle.network.service \
          /Diag \
          vehicle.network.service.Diag.setVariantCoding \
          uint32:12345 array:byte:0xAB,0xCD,0xEF

gdbus

gdbus call -y -d vehicle.network.service \
              -o /Diag \
              -m vehicle.network.service.Diag.setVariantCoding \
              "@u 12345" "@ay [0xAB,0xCD,0xEF]"

busctl

busctl call --system \
            vehicle.network.service \
            /Diag \
            vehicle.network.service.Diag \
            setVariantCoding \
            uay 12345 3 0xAB 0xCD 0xEF

(在 busctl 中,数组长度明确指定,3在此示例中使用。)

相关内容