#include <string.h>
#include "bluetooth-ag-agent.h"
#include "bluetooth-ag-handler.h"
-#include <dbus/dbus.h>
+#include "bluetooth-agent-profile.h"
+#include <glib.h>
+
+#include "bluetooth-ag-phonebook.h"
+
+#include <TapiUtility.h>
+#include <ITapiSim.h>
+
+#include <device/battery.h>
+#include <device-error.h>
#define PHONEBOOK_AGENT_BUS_NAME "org.bluez.pb_agent"
#define PHONEBOOK_AGENT_PATH "/org/bluez/pb_agent"
.signal_strength = 0,
};
+#ifdef TIZEN_FEATURE_BT_PBAP_SIM
+static const char *agent_pb_store_list[] = {
+ "\"ME\"", "\"DC\"", "\"MC\"", "\"SM\"", "\"RC\""
+};
+#else
static const char *agent_pb_store_list[] = {
"\"ME\"", "\"DC\"", "\"MC\"", "\"RC\""
};
+#endif
static const char *agent_supported_character_set[] = {
"\"UTF-8\"", "\"IRA\""
};
-#if defined(TIZEN_PROFILE_WEARABLE) && defined(TIZEN_FEATURE_BT_HFP_AG)
-static const char *ag_chld_str = "0,1,2";
-#else
-static const char *ag_chld_str = "0,1,2,3";
-#endif
-
#define AGENT_PB_STORE_LIST_SIZE (sizeof(agent_pb_store_list) \
/sizeof(const char *))
#define AGENT_SUPPORTED_CHARACTER_SET_SIZE ( \
.charset_id = 0
};
+void __bt_hfp_print_callpath(const char *call_path, const char *call_sender)
+{
+ GSList *sender_list = call_senders_paths;
+ sender_info_t *sender;
+
+ INFO("=============================");
+ INFO("call path is = %s\n", call_path);
+ INFO("sender is = %s\n", call_sender);
+
+ if (call_path == NULL || call_sender == NULL) {
+ ERR("Invalid Parameters");
+ return;
+ }
+
+ while (sender_list != NULL) {
+ sender = sender_list->data;
+
+ if (sender == NULL)
+ break;
+
+ INFO("sender->sender_path [%s] ", sender->sender_path);
+ sender_list = sender_list->next;
+ }
+ INFO("=============================");
+ return;
+}
+
static gboolean __bt_hfp_check_for_callpath(const char *call_path,
const char *call_sender)
{
sender_list = sender_list->next;
}
- ERR("Call path is not already registered");
+ ERR("Call path [%s] is not registered", call_path);
return FALSE;
}
__bt_hfp_reset_indicators();
}
-void _bt_hfp_initialize_telephony_manager(uint32_t ag_features)
+void _bt_hfp_initialize_telephony_manager(uint32_t ag_features, TapiHandle *handler)
{
int index;
int value;
int ret;
+ char *ag_chld_str;
+
+ if (TIZEN_PROFILE_WEARABLE)
+ ag_chld_str = "0,1,2";
+ else
+ ag_chld_str = "0,1,2,3";
/* Reset the indicator values */
for (index = 0; hfp_ag_ind[index].indicator_desc != NULL; index++) {
if (g_str_equal(hfp_ag_ind[index].indicator_desc, "battchg")) {
- ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CAPACITY,
- &value);
- if (ret != 0) {
- ERR("Get battery status failed : %d\n", ret);
+ ret = device_battery_get_percent(&value);
+ if (ret != DEVICE_ERROR_NONE) {
+ ERR("Get battery status failed. Err = %d\n", ret);
} else {
/* Send battery status ranging from 0-5 */
if (value < 5)
hfp_ag_ind[index].hfp_value = value / 20 + 1;
}
} else if (g_str_equal(hfp_ag_ind[index].indicator_desc, "signal")) {
- ret = vconf_get_int(VCONFKEY_TELEPHONY_RSSI, &value);
- if (ret != 0) {
+ ret = tel_get_property_int(handler, TAPI_PROP_NETWORK_SIGNALSTRENGTH_LEVEL, &value);
+ if (ret != TAPI_API_SUCCESS) {
ERR("Get signal status failed err = %d\n", ret);
} else {
BT_CHECK_SIGNAL_STRENGTH(value);
hfp_ag_ind[index].hfp_value = value;
}
} else if (g_str_equal(hfp_ag_ind[index].indicator_desc, "roam")) {
- ret = vconf_get_int(VCONFKEY_TELEPHONY_SVC_ROAM, &value);
- if (ret != 0)
+ ret = tel_get_property_int(handler, TAPI_PROP_NETWORK_ROAMING_STATUS, &value);
+ if (ret != TAPI_API_SUCCESS)
ERR("Get roaming status failed err = %d\n", ret);
else
hfp_ag_ind[index].hfp_value = value;
} else if (g_str_equal(hfp_ag_ind[index].indicator_desc, "service")) {
- ret = vconf_get_int(VCONFKEY_TELEPHONY_SVCTYPE, &value);
- if (ret != 0) {
+ ret = tel_get_property_int(handler, TAPI_PROP_NETWORK_SERVICE_TYPE, &value);
+ if (ret != TAPI_API_SUCCESS) {
ERR("Get Service status failed : %d\n", ret);
} else {
switch (value) {
- case VCONFKEY_TELEPHONY_SVCTYPE_NONE:
- case VCONFKEY_TELEPHONY_SVCTYPE_NOSVC:
- case VCONFKEY_TELEPHONY_SVCTYPE_SEARCH:
+ case TAPI_NETWORK_SERVICE_TYPE_UNKNOWN:
+ case TAPI_NETWORK_SERVICE_TYPE_NO_SERVICE:
+ case TAPI_NETWORK_SERVICE_TYPE_SEARCH:
hfp_ag_ind[index].hfp_value =
INDICATOR_EVENT_SERVICE_NONE;
break;
if (sender == NULL || path_to_register == NULL)
return BT_HFP_AGENT_ERROR_INVALID_PARAM;
- DBG(" register_flag = %d", register_flag);
- DBG(" path_to_register = %s", path_to_register);
- DBG(" sender = %s", sender);
+ INFO(" register_flag = %d", register_flag);
+ INFO(" path_to_register = %s", path_to_register);
+ INFO(" sender = %s", sender);
if (register_flag) {
if (__bt_hfp_check_for_callpath(path_to_register, sender))
return BT_HFP_AGENT_ERROR_ALREADY_EXSIST;
/* add call path to the senders list*/
- DBG("Call path doesn't exist. Add path %s to global path",
+ INFO("Call path doesn't exist. Add path %s to global path",
path_to_register);
sender_info = g_new0(sender_info_t, 1);
sender_info->sender_path = g_strdup(path_to_register);
sender_info->sender_name = g_strdup(sender);
- call_senders_paths = g_slist_append(call_senders_paths,
- sender_info);
+ call_senders_paths = g_slist_append(call_senders_paths, sender_info);
return BT_HFP_AGENT_ERROR_NONE;
} else {
if (g_strcmp0(sender_info->sender_path,
path_to_register) == 0) {
+ INFO("Remove path [%s]", path_to_register);
call_senders_paths = g_slist_remove(
call_senders_paths,
sender_info);
__bt_hfp_clear_sender_path(sender_info);
+
return BT_HFP_AGENT_ERROR_NONE;
}
s_list = s_list->next;
const char *sender)
{
struct telephony_call *t_call = NULL;
- bt_hfp_agent_error_t hfp_err = BT_HFP_AGENT_ERROR_NOT_AVAILABLE;
+ bt_hfp_agent_error_t hfp_err = BT_HFP_AGENT_ERROR_NONE;
int t_number = AGENT_NUMBER_TYPE_TELEPHONY;
int error;
if (sender == NULL || call_path == NULL)
return BT_HFP_AGENT_ERROR_INVALID_PARAM;
- if (!__bt_hfp_check_for_callpath(call_path, sender))
+ if (!__bt_hfp_check_for_callpath(call_path, sender)) {
+ __bt_hfp_print_callpath(call_path, sender);
return BT_HFP_AGENT_ERROR_NOT_AVAILABLE;
+ }
if (!__bt_hfp_is_call_allowed(call_path))
return BT_HFP_AGENT_ERROR_NOT_AVAILABLE;
bt_hfp_agent_error_t ret = BT_HFP_AGENT_ERROR_NONE;
gboolean err = FALSE;
-
err = __bt_hfp_check_for_callpath(call_path, sender);
- if (!err)
+ if (!err) {
+ __bt_hfp_print_callpath(call_path, sender);
return BT_HFP_AGENT_ERROR_NOT_AVAILABLE;
-
+ }
/*check if the call_path exisits in the active call list, if not
don't allow as the call may be initated by some other application*/
ret = __bt_hfp_check_for_callpath(call_path, sender);
- if (!ret)
+ if (!ret) {
+ __bt_hfp_print_callpath(call_path, sender);
return BT_HFP_AGENT_ERROR_NOT_AVAILABLE;
+ }
ret = __bt_hfp_is_call_allowed(call_path);
if (!ret)
if (g_str_equal("SubscriberNumberChanged", property)) {
g_free(ag_subscriber_num);
ag_subscriber_num = g_strdup(operator_name);
- DBG("HFP: subscriber_number updated: %s", ag_subscriber_num);
+ DBG_SECURE("HFP: subscriber_number updated: %s", ag_subscriber_num);
ret = 1;
}
return ret;
static int __bt_hfp_release_conference(void)
{
GSList *temp_list = existing_call_list;
+ int ret = 0;
while (temp_list != NULL) {
struct telephony_call *t_call = temp_list->data;
- if (t_call->call_conference)
- __bt_hfp_release_call(t_call);
+ if (t_call->call_conference) {
+ ret = __bt_hfp_release_call(t_call);
+ if (ret < 0)
+ ERR("Seems like there are no active calls.");
+ }
temp_list = temp_list->next;
}
if (!sender)
return;
- DBG("sender [%s]", sender);
-
while (temp_list != NULL) {
struct telephony_call *t_call = temp_list->data;
static int __bt_hfp_get_phonebook_count(const char *path, uint32_t *max_size,
uint32_t *used)
{
-#ifndef TIZEN_PROFILE_WEARABLE
- GDBusConnection *g_conn;
- GDBusProxy *g_proxy;
- GError *err = NULL;
- GVariant *ret = NULL;
+ FN_START;
+ PhoneBookType pb_type = TELECOM_NONE;
+ guint count = 0;
uint32_t max = 0;
- uint32_t size = 0;
-
- g_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err);
- if (!g_conn) {
- if (err) {
- ERR("Unable to connect to gdbus: %s", err->message);
- g_clear_error(&err);
- }
- return -1;
+ INFO("name: %s\n", path);
+ if (contacts_connect() != CONTACTS_ERROR_NONE) {
+ ERR("Can not connect contacts server\n");
+ return 0;
}
- g_proxy = g_dbus_proxy_new_sync(g_conn,
- G_DBUS_PROXY_FLAGS_NONE, NULL,
- PHONEBOOK_AGENT_BUS_NAME, PHONEBOOK_AGENT_PATH,
- PHONEBOOK_AGENT_INTERFACE, NULL, &err);
+ pb_type = __bluetooth_pb_get_storage_pb_type(path);
- if (!g_proxy) {
- if (err) {
- ERR("Unable to connect to gdbus: %s", err->message);
- g_clear_error(&err);
- }
- return -1;
+ if (__bluetooth_pb_get_count(pb_type, &count) == FALSE) {
+ ERR("unable to get count");
+ if (contacts_disconnect() != CONTACTS_ERROR_NONE)
+ ERR("contacts_disconnect failed");
+ return 0;
}
- ret = g_dbus_proxy_call_sync(g_proxy, "GetPhonebookSizeAt",
- g_variant_new("(s)",
- path),
- G_DBUS_CALL_FLAGS_NONE, -1,
- NULL, &err);
-
- if (ret == NULL) {
- ERR("dbus call failed");
- if (err != NULL) {
- ERR("D-Bus API failure: errCode[%x], message[%s]",
- err->code, err->message);
-
- g_clear_error(&err);
- }
- }
- if (ret != NULL) {
- g_variant_get(ret, "(u)", &size);
- g_variant_unref(ret);
- }
- DBG("Size returned %d", size);
+ DBG("Size returned %d", count);
if ((g_strcmp0(path, "\"SM\"") == 0) ||
(g_strcmp0(path, "\"ME\"") == 0)) {
max = AGENT_MAX_PB_COUNT;
if (max_size)
*max_size = max;
if (used) {
- if (size > max)
+ if (count > max)
*used = max;
else
- *used = size;
+ *used = count;
}
-
- if (g_conn)
- g_object_unref(g_conn);
- if (g_proxy)
- g_object_unref(g_proxy);
-#endif
+ if (contacts_disconnect() != CONTACTS_ERROR_NONE)
+ ERR("contacts_disconnect failed");
+ FN_END;
return 0;
}
static int __bt_hfp_get_phonebook_entries(int start_index, int end_index)
{
-#ifdef TIZEN_PROFILE_WEARABLE
- int count = 0;
-#else
- GDBusConnection *g_conn;
- GDBusProxy *g_proxy;
- GError *err = NULL;
- GVariant *ret = NULL;
+ FN_START;
int count = 0;
- GVariant *value = NULL;
- GVariant *tuple = NULL;
- const char *name = NULL;
- const char *number = NULL;
-
- char *uni_name;
- char *uni_number;
-
- uint32_t handle = 0;
+ PhoneBookType pb_type = TELECOM_NONE;
- g_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err);
+ DBG("command: %s, start_index: %d, end_index: %d\n",
+ agent_pb_store_list[ag_pb_info.path_id], start_index, end_index);
- if (!g_conn) {
- if (err) {
- ERR("Unable to connect to gdbus: %s", err->message);
- g_clear_error(&err);
- }
- return -1;
+ if (contacts_connect() != CONTACTS_ERROR_NONE) {
+ ERR("Can not connect contacts server");
+ return 0;
}
- g_proxy = g_dbus_proxy_new_sync(g_conn,
- G_DBUS_PROXY_FLAGS_NONE, NULL,
- PHONEBOOK_AGENT_BUS_NAME, PHONEBOOK_AGENT_PATH,
- PHONEBOOK_AGENT_INTERFACE, NULL, &err);
- if (!g_proxy) {
- if (err) {
- ERR("Unable to connect to gdbus: %s", err->message);
- g_clear_error(&err);
- }
- return -1;
- }
+ pb_type = __bluetooth_pb_get_storage_pb_type(
+ agent_pb_store_list[ag_pb_info.path_id]);
- ret = g_dbus_proxy_call_sync(g_proxy, "GetPhonebookEntriesAt",
- g_variant_new("(sii)",
- agent_pb_store_list[ag_pb_info.path_id],
- start_index, end_index),
- G_DBUS_CALL_FLAGS_NONE, -1,
- NULL, &err);
+ if (pb_type == TELECOM_NONE || pb_type == TELECOM_CCH) {
+ if (contacts_disconnect() != CONTACTS_ERROR_NONE)
+ ERR("contacts_disconnect failed");
+ return 0;
+ }
- if (ret == NULL) {
- ERR("Dbus call failed");
- if (err != NULL) {
- ERR("D-Bus API failure: errCode[%x], message[%s]",
- err->code, err->message);
+ __bluetooth_pb_get_list_number(pb_type,
+ start_index, end_index, &count);
- g_clear_error(&err);
- } else {
- ERR("error returned was NULL");
- }
- return -1;
- } else {
- tuple = g_variant_get_child_value(ret, 0);
- if (tuple != NULL) {
- int number_contacts = g_variant_n_children(tuple);
- DBG("number of contacts %d", number_contacts);
- while (count < number_contacts) {
- value = NULL;
-
- value = g_variant_get_child_value(tuple, count);
-
- g_variant_get(value, "(ssu)", &name, &number, &handle);
- count++;
- uni_name = g_strndup(name, AGENT_PB_NAME_MAX_LENGTH);
- uni_number = g_strndup(number, AGENT_PB_NAME_MAX_LENGTH);
-
- _bt_read_phonebook_entries_indicator(uni_name,
- uni_number, handle);
- g_variant_unref(value);
- g_free(uni_name);
- g_free(uni_number);
- g_free((gpointer)name);
- g_free((gpointer)number);
- }
- g_variant_unref(tuple);
- }
- }
- g_variant_unref(ret);
- if (g_conn)
- g_object_unref(g_conn);
- if (g_proxy)
- g_object_unref(g_proxy);
-#endif
+ if (contacts_disconnect() != CONTACTS_ERROR_NONE)
+ ERR("contacts_disconnect failed");
+ FN_END;
return count;
}
HFP_STATE_MNGR_ERR_NONE);
}
+static int __bt_hfp_get_phonebook_entries_by_name(int start_index,
+ int end_index,
+ const char *str)
+{
+ FN_START;
+ int count = 0;
+ PhoneBookType pb_type = TELECOM_NONE;
+
+ DBG("command: %s, start_index: %d, end_index: %d\n",
+ agent_pb_store_list[ag_pb_info.path_id], start_index, end_index);
+
+ if (contacts_connect() != CONTACTS_ERROR_NONE) {
+ ERR("Can not connect contacts server");
+ return 0;
+ }
+
+ pb_type = __bluetooth_pb_get_storage_pb_type(
+ agent_pb_store_list[ag_pb_info.path_id]);
+
+ if (pb_type == TELECOM_NONE || pb_type == TELECOM_CCH) {
+ if (contacts_disconnect() != CONTACTS_ERROR_NONE)
+ ERR("contacts_disconnect failed");
+ return 0;
+ }
+
+ __bluetooth_pb_get_list_entries_by_name(pb_type,
+ start_index, end_index, str, &count);
+
+ if (contacts_disconnect() != CONTACTS_ERROR_NONE)
+ ERR("contacts_disconnect failed");
+ FN_END;
+ return count;
+}
+
static int __bt_hfp_find_pb_entries(const char *str)
{
+ char *search = g_ascii_strup(str, strlen(str));
+
+ /* No limit on number of searched item and need to search complete list*/
+ __bt_hfp_get_phonebook_entries_by_name(0, 0, search);
+ g_free(search);
return 0;
}