Я пытаюсь аннотировать xml-файл, чтобы dbus-codegen генерировал метод, который использует GVariant * вместо нативного типа, такого как gchar.
Вот код xml, с которым я работаю.
<node>
<interface name="org.bluez.GattCharacteristic1">
<method name="WriteValue">
<arg name="value" type="ay" direction="in"/>
</method>
</interface>
</node>
Я прочитал следующий пост stackoverflow:
Отправка байтового массива (типа `ay`) по D-Bus с использованием GDBus
Прочитав этот пост, я попробовал следующее:
1) Отредактируйте XML-файл, добавив аннотации
<node>
<interface name="org.bluez.GattCharacteristic1">
<method name="WriteValue">
<annotation name="org.gtk.GDBus.C.ForceGVariant" value="true">
<arg name="value" type="ay" direction="in"/>
</annotation>
</method>
</interface>
</node>
затем выполните:
gdbus-codegen --interface-prefix org.bluez --c-generate-object-manager --generate-c-code generated-code org.bluez.xml
Это не сгенерировало то, что я хотел.
2) Используйте ключ --annotate на gdbus-codegen:
gdbus-codegen --annotate "org.bluez.GattCharacteristic1.WriteValue()" org.gtk.GDBus.C.ForceGVariant true --interface-prefix org.bluez --c-generate-object-manager --generate-c-code generated-code org.bluez.xml
Это не сгенерировало то, что я хотел.
Единственный способ добиться успеха - поменять «ay» в следующем коде на «a (y):
<annotation name="org.gtk.GDBus.C.ForceGVariant" value="true">
<arg name="value" type="a(y)" direction="in"/>
</annotation>'
Однако это вызывает другие проблемы.
Итак, как мне получить метод WriteValue со следующим объявлением:
gboolean gatt_characteristic1_call_write_value_sync
(GattCharacteristic1 *proxy,
GVariant *arg_value,
GCancellable *cancellable,
GError **error)
вместо:
gboolean gatt_characteristic1_call_write_value_sync (
GattCharacteristic1 *proxy,
const gchar *arg_value,
GCancellable *cancellable,
GError **error)
Может кто-нибудь сказать мне, что я делаю не так.
спасибо.