org.bluez.GattCharacteristic1 WriteValue方法
我正在使用Bluez-5.43,并使用dbus API。org.bluez.GattCharacteristic1 WriteValue方法
当尝试使用WriteValue方法如下误差值写入特征出现:
GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: Method "WriteValue" with signature "ay" on interface "org.bluez.GattCharacteristic1" doesn't exist.
我应该心存感激,如果有人能帮我解决这个问题:)
这是代码,导致此问题:
GVariant *char_value = g_variant_new_from_data(G_VARIANT_TYPE ("ay"), buffer, *buffer_len, TRUE, NULL, NULL);
if (char_value == NULL){
printf("converting value error\n");
return -1;
}
else{
printf("converting value succeed\n");
g_dbus_proxy_call_sync (char_write_proxy, "WriteValue", g_variant_new ("(@ay)", char_value), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
printf("lign 154\n");
if (error != NULL){
printf("write failed: %s\n", error->message);
return -1;
}
else
break;
}
}
WriteValue()的签名居然是“绫{} SV”,换句话说,你需要一个(通常是空的)的字典作为塞康d论证。
该文档是相当不错:https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/gatt-api.txt
有多种方式来构建一个字典,我更喜欢Variantbuilder。像这样的:
GVariantBuilder builder;
g_variant_builder_init (&builder, G_VARIANT_TYPE("a{sv}"));
write_value_argument = g_variant_new ("(@aya{sv})", char_value, &builder);
谢谢你的回应:)你可以请帮助我如何在调用WriteValue方法时使用g_dbus_proxy_call_sync传递这些参数 –
我已经添加了_untested_例子 - 我认为这是正确的,但这些可以是棘手... https://developer.gnome.org/glib/stable/gvariant-format-strings.html是一个很好的资源,当试图得到这个权利 - 它也解释了“建设者作为g_variant_new()参数”的伎俩。 – jku
你的代码在哪里产生这个问题? –
你应该张贴在你的文章 –