diff options
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | binding/gdbus/ofono_voicecallmanager.c | 48 | ||||
-rw-r--r-- | binding/gdbus/ofono_voicecallmanager.h | 1 | ||||
-rw-r--r-- | binding/telephony-binding.c | 13 |
4 files changed, 63 insertions, 0 deletions
@@ -21,6 +21,7 @@ Telephony service allows respective clients access to the Handsfree Profile via | hangup_multiparty | Hangs up the multi-party call | | | create_multiparty | Joins active and held calls together into a multi-party call | | | swap_calls | Swaps Active and Held calls | | +| get_calls | get active call properties | *Response:* {"active calls": [ {"Object Path": "/hfp/org/bluez/hci0/dev_xx_xx_xx_xx_xx_xx/voicecall01", "State": "dialing", "LineIdentification": "123456789", "Name": "", "Multiparty": false, "RemoteHeld": false, "RemoteMultiparty": false, "Emergency": false } ] } | | get_battery_level | getting battery level of connected phone device | | | get_network_registration | getting network registration of connected phone device | *Response:* {"Status": "registered","Mode": "auto-only","Name": "Irancell","Strength": 20} | diff --git a/binding/gdbus/ofono_voicecallmanager.c b/binding/gdbus/ofono_voicecallmanager.c index 78924dc..8118f1f 100644 --- a/binding/gdbus/ofono_voicecallmanager.c +++ b/binding/gdbus/ofono_voicecallmanager.c @@ -276,3 +276,51 @@ gboolean ofono_voicecallmanager_swap_calls(OrgOfonoVoiceCallManager *manager) return (error == NULL); } + +json_object* ofono_voicecallmanager_get_calls(OrgOfonoVoiceCallManager *manager) +{ + GError *error = NULL; + gboolean res; + GVariant *reply = NULL; + g_autoptr(GVariantIter) iter1 = NULL; + g_autoptr(GVariantIter) iter2 = NULL; + GVariant *value = NULL; + const gchar *key1 = NULL; + const gchar *key2 = NULL; + json_object *jprop = NULL; + if (!manager) { + AFB_ERROR("Ofono VoiceCallmanager uninitialized\n"); + return NULL; + } + + res = org_ofono_voice_call_manager_call_get_calls_sync(manager, &reply, NULL, &error); + + json_object *jarray = json_object_new_array(); + json_object *jresp = json_object_new_object(); + json_object_object_add(jresp, "active calls", jarray); + + if (res) { + g_variant_get(reply, "a(oa{sv})", &iter1); + jprop = json_object_new_object(); + while (g_variant_iter_loop(iter1, "(&oa{sv})", &key1, &iter2)) { + json_object_object_add(jprop, "Object Path", json_object_new_string(key1)); + while (g_variant_iter_loop(iter2, "{&sv}", &key2, &value)) { + const char* type = g_variant_get_type_string(value); + switch (*type) { + case 'o': + case 's': + json_object_object_add(jprop,key2, json_object_new_string(g_variant_get_string(value, NULL))); + break; + case 'b': + json_object_object_add(jprop,key2,json_object_new_boolean(g_variant_get_boolean(value))); + break; + default: + break; + } + } + json_object_array_add(jarray, jprop); + } + g_variant_unref(reply); + } + return jresp; +} diff --git a/binding/gdbus/ofono_voicecallmanager.h b/binding/gdbus/ofono_voicecallmanager.h index df058a2..770c409 100644 --- a/binding/gdbus/ofono_voicecallmanager.h +++ b/binding/gdbus/ofono_voicecallmanager.h @@ -34,3 +34,4 @@ gboolean ofono_voicecallmanager_hold_and_answer(OrgOfonoVoiceCallManager *); gboolean ofono_voicecallmanager_release_and_answer(OrgOfonoVoiceCallManager *); gboolean ofono_voicecallmanager_swap_calls(OrgOfonoVoiceCallManager *); gchar **ofono_voicecallmanager_create_multiparty(OrgOfonoVoiceCallManager *); +json_object *ofono_voicecallmanager_get_calls(OrgOfonoVoiceCallManager *); diff --git a/binding/telephony-binding.c b/binding/telephony-binding.c index 9e47c76..e764601 100644 --- a/binding/telephony-binding.c +++ b/binding/telephony-binding.c @@ -232,6 +232,15 @@ static void swap_calls(afb_req_t request) } } +static void get_calls(afb_req_t request) +{ + json_object *result = ofono_voicecallmanager_get_calls(vcm); + if (!result) + afb_req_fail(request, "failed", "Can not find any active voice calls"); + else + afb_req_success(request, result, NULL); +} + static void get_battery_level(afb_req_t request) { const gchar *device; @@ -638,6 +647,10 @@ static const afb_verb_t verbs[]= { .callback = release_and_answer, }, { + .verb = "get_calls", + .callback = get_calls, + }, + { .verb = "get_battery_level", .callback = get_battery_level, }, |