2017-05-23 16 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