为Bluez BLE编写gdbus客户端(版本5.48)
使用gdbus-codegen工具生成代理和骨架。 XML Content的详细信息如下。
<interface name="org.bluez.LEAdvertisement1">
<method name="Release">
<annotation name="org.freedesktop.DBus.Method.NoReply" value="true"/>
</method>
<annotation name="org.freedesktop.DBus.Properties.PropertiesChanged" value="const"/>
<property name="Type" type="s" access="read"/>
<property name="ServiceUUIDs" type="as" access="read"/>
<property name="ManufacturerData" type="a{qv}" access="read"/>
<property name="SolicitUUIDs" type="as" access="read"/>
<property name="Includes" type="as" access="read"/>
<property name="ServiceData" type="a{sv}" access="read"/>
<property name="IncludeTxPower" type="b" access="read"/>
<property name="LocalName" type="s" access="read"/>
<property name="Appearance" type="q" access="read"/>
<property name="Duration" type="q" access="read"/>
<property name="Timeout" type="q" access="read"/>
</interface>
以上所有属性都会从我的客户端分配到默认值。因为我反省使用d-feet。
但bluetoothctl这些值未分配为默认值。
我调试了
bluez/src/Advertising.c function client_proxy_added()->parse_advertisement()
g_dbus_proxy_get_property returns TRUE for properties set by bluetoothctl, others it returns FALSE.
但是使用自动生成的代码,尽管没有设置任何属性。 g_dbus_proxy_get_property能够获取其解析的所有属性和默认值。由于以上面临的问题,同时开始做广告。 1)超时默认值为零,立即超时。 2)当设置include属性时,解析名称属性,尽管没有设置。 bluez抛出错误&#34;已包含本地名称&#34;。
我们如何使用gdbus自动生成的代码与bluetoothctl进行相同的行为?