为什么DBus无法调用该属性?

问题描述 投票:0回答:1

我正在尝试在 Ubuntu Desktop 23.10 中使用 DBus 调用 BLE 设备。

这是bluez中设备的DBus定义:

user@machine-desktop:~$ sudo busctl introspect org.bluez /org/bluez/hci0/dev_00_12_05_FF_13_A0
NAME                                TYPE      SIGNATURE RESULT/VALUE                             FLAGS
org.bluez.Device1                   interface -         -                                        -
.CancelPairing                      method    -         -                                        -
.Connect                            method    -         -                                        -
.ConnectProfile                     method    s         -                                        -
.Disconnect                         method    -         -                                        -
.DisconnectProfile                  method    s         -                                        -
.Pair                               method    -         -                                        -
.Adapter                            property  o         "/org/bluez/hci0"                        emits-change
.Address                            property  s         "00:1C:05:FF:13:A0"                      emits-change
.AddressType                        property  s         "public"                                 emits-change
.Alias                              property  s         "Nonin3230_502726737"                    emits-change writable
.Appearance                         property  q         3137                                     emits-change
.Blocked                            property  b         false                                    emits-change writable
.Bonded                             property  b         true                                     emits-change
.Class                              property  u         -                                        emits-change
.Connected                          property  b         false                                    emits-change
.Icon                               property  s         -                                        emits-change
.LegacyPairing                      property  b         false                                    emits-change
.ManufacturerData                   property  a{qv}     -                                        emits-change
.Modalias                           property  s         -                                        emits-change
.Name                               property  s         "Nonin3230_502726737"                    emits-change
.Paired                             property  b         true                                     emits-change
.RSSI                               property  n         -                                        emits-change
.ServiceData                        property  a{sv}     -                                        emits-change
.ServicesResolved                   property  b         false                                    emits-change
.Sets                               property  a{oa{sv}} -                                        emits-change
.Trusted                            property  b         true                                     emits-change writable
.TxPower                            property  n         -                                        emits-change
.UUIDs                              property  as        6 "00001800-0000-1000-8000-00805f9b34fb… emits-change
.WakeAllowed                        property  b         -                                        emits-change writable
org.freedesktop.DBus.Introspectable interface -         -                                        -
.Introspect                         method    -         s                                        -
org.freedesktop.DBus.Properties     interface -         -                                        -
.Get                                method    ss        v                                        -
.GetAll                             method    s         a{sv}                                    -
.Set                                method    ssv       -                                        -

我正在尝试使用 : 获取 ServiceData

属性值
user@machine-desktop:~$ dbus-send --system --dest=org.bluez --print-reply /org/bluez/hci0/dev_00_1C_05_FF_13_A0 org.freedesktop.DBus.Properties.Get string:org.bluez.Device1 string:ServiceData
Error org.freedesktop.DBus.Error.InvalidArgs: No such property 'ServiceData'

我不应该能够调用属性并获取值吗?

问候。

编辑:忘记说 archis arm64。树莓派 4b

ubuntu bluetooth bluetooth-lowenergy dbus
1个回答
0
投票

浏览 BlueZ 源代码 (src/device.c) 后,似乎当相应的结构字段为 null 时,该服务会报告属性不存在。

它们在静态定义的“内省”XML 中保持可见,但 BlueZ 有自己的 Get() 方法处理程序,如果字段为 null,它将“手动”返回 D-Bus 错误。

(这样做的原因很可能是因为 D-Bus 既没有可为 null 的类型,也没有“可能”的类型,因此 BlueZ 开发人员可能希望避免在使用 null 属性时返回

0
""
时可能发生的混乱。又空了?)

因此,您似乎应该考虑预期的错误并在代码中处理它 - 或者,使用 GetAll() 获取包含“存在”的所有属性的字典。

© www.soinside.com 2019 - 2024. All rights reserved.