2 * Copyright (C) 2017 Konsulko Group
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <afb/afb-binding.h>
23 #include "ofono_voicecallmanager_interface.h"
25 static const struct afb_binding_interface *interface;
27 static void call_added(OrgOfonoVoiceCallManager *manager,
34 const gchar *state, *cl = NULL;
36 g_variant_get(properties, "a{sv}", &iter);
37 while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
38 if (!strcmp(key, "State")) {
39 state = g_variant_get_string(value, NULL);
40 } else if (!strcmp(key, "LineIdentification")) {
41 cl = g_variant_get_string(value, NULL);
45 if (!strcmp(state, "incoming")) {
46 g_signal_emit_by_name(manager, "incoming-call", op, cl ? cl : "");
47 } else if (!strcmp(state, "dialing")) {
48 g_signal_emit_by_name(manager, "dialing-call", op, cl ? cl : "");
52 static void call_removed(OrgOfonoVoiceCallManager *manager,
56 g_signal_emit_by_name(manager, "terminated-call", op);
60 const OrgOfonoVoiceCallManager
61 *ofono_voicecallmanager_init(const struct afb_binding_interface *iface,
63 void (*incoming_call)(OrgOfonoVoiceCallManager *manager,gchar *,gchar *),
64 void (*dialing_call)(OrgOfonoVoiceCallManager *manager,gchar *,gchar *),
65 void (*terminated_call)(OrgOfonoVoiceCallManager *manager,gchar *))
69 OrgOfonoVoiceCallManager *manager = org_ofono_voice_call_manager_proxy_new_for_bus_sync(
70 G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE,
71 "org.ofono", op, NULL, NULL);
73 g_signal_new("incoming-call",
79 g_cclosure_marshal_generic,
85 g_signal_new("dialing-call",
91 g_cclosure_marshal_generic,
97 g_signal_new("terminated-call",
103 g_cclosure_marshal_generic,
108 if (g_signal_connect(G_OBJECT(manager), "incoming-call", G_CALLBACK(incoming_call), NULL) <= 0) {
109 ERROR(interface, "Failed to connect to signal incoming-call\n");
112 if (g_signal_connect(G_OBJECT(manager), "dialing-call", G_CALLBACK(dialing_call), NULL) <= 0) {
113 ERROR(interface, "Failed to connect to signal dialing-call\n");
116 if (g_signal_connect(G_OBJECT(manager), "terminated-call", G_CALLBACK(terminated_call), NULL) <= 0) {
117 ERROR(interface, "Failed to connect to signal terminated-call\n");
120 if (g_signal_connect(manager, "call-added", G_CALLBACK(call_added), NULL) <= 0) {
121 ERROR(interface, "Failed to connect to signal call-added\n");
124 if (g_signal_connect(manager, "call-removed", G_CALLBACK(call_removed), NULL) <= 0) {
125 ERROR(interface, "Failed to connect to signal call-removed\n");
131 gchar *ofono_voicecallmanager_dial(OrgOfonoVoiceCallManager *manager,
136 GError *error = NULL;
139 ERROR(interface, "Ofono VoiceCallmanager uninitialized\n");
143 org_ofono_voice_call_manager_call_dial_sync(manager, number, cid, &out, NULL, &error);
150 void ofono_voicecallmanager_hangup_all(OrgOfonoVoiceCallManager *manager)
152 GError *error = NULL;
155 ERROR(interface, "Ofono VoiceCallmanager uninitialized\n");
159 org_ofono_voice_call_manager_call_hangup_all_sync(manager, NULL, &error);