2017-05-23 7 views
0

私はBluez-5.43で作業しており、dbus APIを使用しています。 WriteValueメソッドに次のエラーを使用して、特性に値を書き込もうとorg.bluez.GattCharacteristic1 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; 
    } 
} 
+0

この問題を引き起こすコードはどこですか? –

+0

あなたの投稿に投稿する必要があります –

答えて

1

WriteValueを()署名が実際seconとして「彩{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); 
+0

回答ありがとうございます:) g_dbus_proxy_call_syncを使用してWriteValueメソッドを呼び出すときに、これらの引数を渡す方法を教えてください。 –

+0

_untested_例を追加しました。トリッキーな... https://developer.gnome.org/glib/stable/gvariant-format-strings.htmlその権利を取得しようとするときには良いリソースです - それはまた、 "ビルダーg_variant_new()引数として"トリックを説明します。 – jku

関連する問題