我需要从 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
) 和一个字节数组 ( )。(ay
D-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
在此示例中使用。)