#include "bt-hal.h"
#include "bt-hal-log.h"
#include "bt-hal-msg.h"
+#include "bt-hal-utils.h"
#include "bt-hal-internal.h"
#include "bt-hal-event-receiver.h"
#include "bt-hal-dbus-common-utils.h"
DBG("-");
return result;
}
+
+int _bt_hal_device_get_connection_state(const bt_bdaddr_t *bd_addr)
+{
+ char address[BT_HAL_ADDRESS_STRING_SIZE];
+ gchar *device_path = NULL;
+ GDBusProxy *adapter_proxy;
+ GDBusProxy *device_proxy;
+ GError *error = NULL;
+ GDBusConnection *conn;
+ GVariant *result;
+ GVariant *tmp_value = NULL;
+ GVariant *value = NULL;
+ gboolean is_connected = FALSE;
+
+ if (!bd_addr) {
+ ERR("bd_addr is NULL");
+ return 0;
+ }
+
+ adapter_proxy = _bt_get_adapter_proxy();
+ if (!adapter_proxy) {
+ ERR("Could not get Adapter Proxy");
+ return 0;
+ }
+
+ conn = _bt_get_system_gconn();
+ if (!conn) {
+ ERR("_bt_get_system_gconn failed");
+ return 0;
+ }
+
+ _bt_convert_addr_type_to_string(address, bd_addr->address);
+ INFO("Address: %s", address);
+
+ device_path = _bt_get_device_object_path(address);
+ if (device_path == NULL) {
+ ERR("No paired device");
+ return 0;
+ }
+
+ device_proxy = g_dbus_proxy_new_sync(conn, G_DBUS_PROXY_FLAGS_NONE,
+ NULL, BT_HAL_BLUEZ_NAME, device_path,
+ BT_HAL_PROPERTIES_INTERFACE, NULL, NULL);
+ g_free(device_path);
+ if (!device_proxy) {
+ ERR("Error creating device_proxy");
+ return 0;
+ }
+
+ result = g_dbus_proxy_call_sync(device_proxy, "GetProperties",
+ g_variant_new("(s)", address),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ &error);
+ g_object_unref(device_proxy);
+ if (!result) {
+ ERR("Error occured in Proxy call");
+ if (error != NULL) {
+ ERR("Error occured in Proxy call (Error: %s)", error->message);
+ g_clear_error(&error);
+ }
+ return 0;
+ }
+
+ g_variant_get(result , "(@a{sv})", &value);
+ g_variant_unref(result);
+
+ if (value) {
+ tmp_value = g_variant_lookup_value(value,
+ "Connected",
+ G_VARIANT_TYPE_BOOLEAN);
+ if (tmp_value) {
+ is_connected = g_variant_get_boolean(tmp_value);
+ g_variant_unref(tmp_value);
+ }
+ g_variant_unref(value);
+ }
+
+ if (!is_connected)
+ return 0;
+
+ return 1;
+}
+
+#ifdef TIZEN_BT_HAL
+int _bt_hal_device_get_service_connection_state(
+ const bt_bdaddr_t *bd_addr, bt_service_id_t rem_svc_id)
+{
+ char address[BT_HAL_ADDRESS_STRING_SIZE];
+ gchar *device_path = NULL;
+ GDBusProxy *adapter_proxy;
+ GDBusProxy *device_proxy;
+ GError *error = NULL;
+ GDBusConnection *conn;
+ GVariant *result;
+ gboolean is_connected;
+ char *uuid = NULL;
+
+ if (!bd_addr) {
+ ERR("bd_addr is NULL");
+ return 0;
+ }
+
+ adapter_proxy = _bt_get_adapter_proxy();
+ if (!adapter_proxy) {
+ ERR("Could not get Adapter Proxy");
+ return 0;
+ }
+
+ conn = _bt_get_system_gconn();
+ if (!conn) {
+ ERR("_bt_get_system_gconn failed");
+ return 0;
+ }
+
+ _bt_convert_addr_type_to_string(address, bd_addr->address);
+ INFO("Address: %s: Remote svc_id: %d", address, rem_svc_id);
+
+ device_path = _bt_get_device_object_path(address);
+ if (device_path == NULL) {
+ ERR("No paired device");
+ return 0;
+ }
+
+ device_proxy = g_dbus_proxy_new_sync(conn, G_DBUS_PROXY_FLAGS_NONE,
+ NULL, BT_HAL_BLUEZ_NAME, device_path,
+ BT_HAL_DEVICE_INTERFACE, NULL, NULL);
+ g_free(device_path);
+ if (!device_proxy) {
+ ERR("Error creating device_proxy");
+ return 0;
+ }
+
+ uuid = _bt_convert_service_id_to_uuid_string(rem_svc_id);
+ DBG("uuid: %s", uuid);
+
+ result = g_dbus_proxy_call_sync(device_proxy, "IsConnectedProfile",
+ g_variant_new("(s)", uuid),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ &error);
+ g_free(uuid);
+ g_object_unref(device_proxy);
+ if (!result) {
+ ERR("Error occured in Proxy call");
+ if (error != NULL) {
+ ERR("Error occured in Proxy call (Error: %s)", error->message);
+ g_clear_error(&error);
+ }
+ return 0;
+ }
+
+ g_variant_get(result, "(b)", &is_connected);
+ g_variant_unref(result);
+
+ if (!is_connected)
+ return 0;
+
+ return 1;
+}
+#endif
#include <stdlib.h>
#include <dlog.h>
+#include <glib.h>
#include "bt-hal-msg.h"
#include "bt-hal.h"
{
switch (prop_type) {
- case BT_PROPERTY_BDNAME:
- return "[Bluetooth Name]";
- case BT_PROPERTY_BDADDR:
- return "[Bluetooth Address]";
- case BT_PROPERTY_UUIDS:
- return "[UUIDS]";
- case BT_PROPERTY_CLASS_OF_DEVICE:
- return "[Class of Device]";
- case BT_PROPERTY_TYPE_OF_DEVICE:
- return "[Bluetooth Type of Device]";
- case BT_PROPERTY_SERVICE_RECORD:
- return "[Bluetooth Service record]";
- case BT_PROPERTY_ADAPTER_SCAN_MODE:
- return "[Bluetooth Adapter Scan Mode]";
- case BT_PROPERTY_ADAPTER_BONDED_DEVICES:
- return "[Bluetooth Bonded Devices]";
- case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT:
- return "[Bluetooth Adapter Discovery Timeout]";
- case BT_PROPERTY_REMOTE_FRIENDLY_NAME:
- return "[Bluetooth Friendly Name]";
- case BT_PROPERTY_REMOTE_RSSI:
- return "[Bluetooth Rmote RSSI]";
- case BT_PROPERTY_REMOTE_VERSION_INFO:
- return "[Bluetooth Version Info]";
- case BT_PROPERTY_LOCAL_LE_FEATURES:
- return "[Bluetooth LE Features]";
- case BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP:
- return "[Bluetooth Remote Device Timestamp]";
- default:
- return "[Default Property]";
+ case BT_PROPERTY_BDNAME:
+ return "[Bluetooth Name]";
+ case BT_PROPERTY_BDADDR:
+ return "[Bluetooth Address]";
+ case BT_PROPERTY_UUIDS:
+ return "[UUIDS]";
+ case BT_PROPERTY_CLASS_OF_DEVICE:
+ return "[Class of Device]";
+ case BT_PROPERTY_TYPE_OF_DEVICE:
+ return "[Bluetooth Type of Device]";
+ case BT_PROPERTY_SERVICE_RECORD:
+ return "[Bluetooth Service record]";
+ case BT_PROPERTY_ADAPTER_SCAN_MODE:
+ return "[Bluetooth Adapter Scan Mode]";
+ case BT_PROPERTY_ADAPTER_BONDED_DEVICES:
+ return "[Bluetooth Bonded Devices]";
+ case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT:
+ return "[Bluetooth Adapter Discovery Timeout]";
+ case BT_PROPERTY_REMOTE_FRIENDLY_NAME:
+ return "[Bluetooth Friendly Name]";
+ case BT_PROPERTY_REMOTE_RSSI:
+ return "[Bluetooth Rmote RSSI]";
+ case BT_PROPERTY_REMOTE_VERSION_INFO:
+ return "[Bluetooth Version Info]";
+ case BT_PROPERTY_LOCAL_LE_FEATURES:
+ return "[Bluetooth LE Features]";
+ case BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP:
+ return "[Bluetooth Remote Device Timestamp]";
+ default:
+ return "[Default Property]";
}
}
const char* bt_device_type_t2str(bt_device_type_t device_type)
{
switch (device_type) {
- case BT_DEVICE_DEVTYPE_BREDR:
- return "BREDR Device";
- break;
- case BT_DEVICE_DEVTYPE_BLE:
- return "BLE Device";
- break;
- case BT_DEVICE_DEVTYPE_DUAL:
- return "Dual Device";
- break;
- default:
- return "Unknown Device Type";
+ case BT_DEVICE_DEVTYPE_BREDR:
+ return "BREDR Device";
+ break;
+ case BT_DEVICE_DEVTYPE_BLE:
+ return "BLE Device";
+ break;
+ case BT_DEVICE_DEVTYPE_DUAL:
+ return "Dual Device";
+ break;
+ default:
+ return "Unknown Device Type";
}
}
const char* bt_scan_mode_t2str(bt_scan_mode_t scan_mode)
{
switch(scan_mode) {
- case BT_SCAN_MODE_NONE:
- return "Non Scannable";
- case BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE:
- return "Connectable And Discoverable";
- case BT_SCAN_MODE_CONNECTABLE:
- return "Connectable";
- default:
- return "Unknown Scan Mode";
+ case BT_SCAN_MODE_NONE:
+ return "Non Scannable";
+ case BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE:
+ return "Connectable And Discoverable";
+ case BT_SCAN_MODE_CONNECTABLE:
+ return "Connectable";
+ default:
+ return "Unknown Scan Mode";
}
}
static void local_le_feat2string(char *str, const bt_local_le_features_t *f)
{
- uint16_t scan_num;
+ uint16_t scan_num;
- str += sprintf(str, "{\n");
+ str += sprintf(str, "{\n");
- str += sprintf(str, "Privacy supported: %s,\n",
- f->local_privacy_enabled ? "TRUE" : "FALSE");
+ str += sprintf(str, "Privacy supported: %s,\n",
+ f->local_privacy_enabled ? "TRUE" : "FALSE");
- str += sprintf(str, "Num of advertising instances: %u,\n",
- f->max_adv_instance);
+ str += sprintf(str, "Num of advertising instances: %u,\n",
+ f->max_adv_instance);
- str += sprintf(str, "PRA offloading support: %s,\n",
- f->rpa_offload_supported ? "TRUE" : "FALSE");
+ str += sprintf(str, "PRA offloading support: %s,\n",
+ f->rpa_offload_supported ? "TRUE" : "FALSE");
- str += sprintf(str, "Num of offloaded IRKs: %u,\n",
- f->max_irk_list_size);
+ str += sprintf(str, "Num of offloaded IRKs: %u,\n",
+ f->max_irk_list_size);
- str += sprintf(str, "Num of offloaded scan filters: %u,\n",
- f->max_adv_filter_supported);
+ str += sprintf(str, "Num of offloaded scan filters: %u,\n",
+ f->max_adv_filter_supported);
- scan_num = (f->scan_result_storage_size_hibyte << 8) +
- f->scan_result_storage_size_lobyte;
+ scan_num = (f->scan_result_storage_size_hibyte << 8) +
+ f->scan_result_storage_size_lobyte;
- str += sprintf(str, "Num of offloaded scan results: %u,\n", scan_num);
+ str += sprintf(str, "Num of offloaded scan results: %u,\n", scan_num);
- str += sprintf(str, "Activity & energy report support: %s\n",
- f->activity_energy_info_supported ? "TRUE" : "FALSE");
+ str += sprintf(str, "Activity & energy report support: %s\n",
+ f->activity_energy_info_supported ? "TRUE" : "FALSE");
- sprintf(str, "}");
+ sprintf(str, "}");
}
const char *btproperty2str(const bt_property_t *property)
property->len);
switch (property->type) {
- case BT_PROPERTY_BDNAME:
- case BT_PROPERTY_REMOTE_FRIENDLY_NAME:
- snprintf(p, property->len + 1, "%s",
- ((bt_bdname_t *) property->val)->name);
- break;
- case BT_PROPERTY_BDADDR:
- sprintf(p, "%s", bdaddr2str((bt_bdaddr_t *) property->val));
- break;
- case BT_PROPERTY_CLASS_OF_DEVICE:
- sprintf(p, "%06x", *((unsigned int *) property->val));
- break;
- case BT_PROPERTY_TYPE_OF_DEVICE:
- sprintf(p, "%s", bt_device_type_t2str(
- *((bt_device_type_t *) property->val)));
- break;
- case BT_PROPERTY_REMOTE_RSSI:
- sprintf(p, "%d", *((char *) property->val));
- break;
- case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT:
- sprintf(p, "%d", *((unsigned int *) property->val));
- break;
- case BT_PROPERTY_ADAPTER_SCAN_MODE:
- sprintf(p, "%s",
- bt_scan_mode_t2str(*((bt_scan_mode_t *) property->val)));
- break;
- case BT_PROPERTY_ADAPTER_BONDED_DEVICES:
- bonded_devices2string(p, property->val, property->len);
- break;
- case BT_PROPERTY_UUIDS:
- uuids2string(p, property->val, property->len);
- break;
- case BT_PROPERTY_SERVICE_RECORD:
- rec = property->val;
- sprintf(p, "{%s, %d, %s}", btuuid2str(rec->uuid.uu),
- rec->channel, rec->name);
- break;
- case BT_PROPERTY_LOCAL_LE_FEATURES:
- local_le_feat2string(p, property->val);
- break;
- case BT_PROPERTY_REMOTE_VERSION_INFO:
- case BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP:
- default:
- sprintf(p, "%p", property->val);
- break;
+ case BT_PROPERTY_BDNAME:
+ case BT_PROPERTY_REMOTE_FRIENDLY_NAME:
+ snprintf(p, property->len + 1, "%s",
+ ((bt_bdname_t *) property->val)->name);
+ break;
+ case BT_PROPERTY_BDADDR:
+ sprintf(p, "%s", bdaddr2str((bt_bdaddr_t *) property->val));
+ break;
+ case BT_PROPERTY_CLASS_OF_DEVICE:
+ sprintf(p, "%06x", *((unsigned int *) property->val));
+ break;
+ case BT_PROPERTY_TYPE_OF_DEVICE:
+ sprintf(p, "%s", bt_device_type_t2str(
+ *((bt_device_type_t *) property->val)));
+ break;
+ case BT_PROPERTY_REMOTE_RSSI:
+ sprintf(p, "%d", *((char *) property->val));
+ break;
+ case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT:
+ sprintf(p, "%d", *((unsigned int *) property->val));
+ break;
+ case BT_PROPERTY_ADAPTER_SCAN_MODE:
+ sprintf(p, "%s",
+ bt_scan_mode_t2str(*((bt_scan_mode_t *) property->val)));
+ break;
+ case BT_PROPERTY_ADAPTER_BONDED_DEVICES:
+ bonded_devices2string(p, property->val, property->len);
+ break;
+ case BT_PROPERTY_UUIDS:
+ uuids2string(p, property->val, property->len);
+ break;
+ case BT_PROPERTY_SERVICE_RECORD:
+ rec = property->val;
+ sprintf(p, "{%s, %d, %s}", btuuid2str(rec->uuid.uu),
+ rec->channel, rec->name);
+ break;
+ case BT_PROPERTY_LOCAL_LE_FEATURES:
+ local_le_feat2string(p, property->val);
+ break;
+ case BT_PROPERTY_REMOTE_VERSION_INFO:
+ case BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP:
+ default:
+ sprintf(p, "%p", property->val);
+ break;
}
return buf;
bt_service_id_t _bt_convert_uuid_string_to_service_id(const char *uuid)
{
- bt_service_id_t service_id = BT_RES_SERVICE_ID;
-
- DBG("+");
-
- if (!strcasecmp(uuid, BT_HAL_HFP_AUDIO_GATEWAY_UUID))
- service_id = BT_HFP_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_HSP_AUDIO_GATEWAY_UUID))
- service_id = BT_HSP_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_A2DP_UUID))
- service_id = BT_A2DP_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_AVRCP_TARGET_UUID))
- service_id = BT_AVRCP_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_AVRCP_REMOTE_UUID))
- service_id = BT_AVRCP_CT_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_OPP_UUID))
- service_id = BT_OPP_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_FTP_UUID))
- service_id = BT_FTP_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_SPP_UUID))
- service_id = BT_SPP_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_PBAP_UUID))
- service_id = BT_PBAP_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_MAP_UUID))
- service_id = BT_MAP_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_NAP_UUID))
- service_id = BT_NAP_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_GN_UUID))
- service_id = BT_GN_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_HID_UUID))
- service_id = BT_HID_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_SAP_UUID_OLD))
- service_id = BT_SAP_SERVICE_ID;
- else if (!strcasecmp(uuid, BT_HAL_SAP_UUID_NEW))
- service_id = BT_SAP_SERVICE_ID;
- else
- ERR("Unknwon Service uuid, return BT_RES_SERVICE_ID");
-
- DBG("service_id = [%d]", service_id);
- DBG("-");
- return service_id;
+ bt_service_id_t service_id = BT_RES_SERVICE_ID;
+
+ DBG("+");
+
+ if (!strcasecmp(uuid, BT_HAL_HFP_AUDIO_GATEWAY_UUID))
+ service_id = BT_HFP_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_HSP_AUDIO_GATEWAY_UUID))
+ service_id = BT_HSP_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_A2DP_UUID))
+ service_id = BT_A2DP_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_AVRCP_TARGET_UUID))
+ service_id = BT_AVRCP_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_AVRCP_REMOTE_UUID))
+ service_id = BT_AVRCP_CT_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_OPP_UUID))
+ service_id = BT_OPP_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_FTP_UUID))
+ service_id = BT_FTP_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_SPP_UUID))
+ service_id = BT_SPP_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_PBAP_UUID))
+ service_id = BT_PBAP_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_MAP_UUID))
+ service_id = BT_MAP_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_NAP_UUID))
+ service_id = BT_NAP_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_GN_UUID))
+ service_id = BT_GN_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_HID_UUID))
+ service_id = BT_HID_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_SAP_UUID_OLD))
+ service_id = BT_SAP_SERVICE_ID;
+ else if (!strcasecmp(uuid, BT_HAL_SAP_UUID_NEW))
+ service_id = BT_SAP_SERVICE_ID;
+ else
+ ERR("Unknwon Service uuid, return BT_RES_SERVICE_ID");
+
+ DBG("service_id = [%d]", service_id);
+ DBG("-");
+ return service_id;
+}
+
+char *_bt_convert_service_id_to_uuid_string(bt_service_id_t service_id)
+{
+ DBG("+");
+
+ switch (service_id) {
+ case BT_HFP_SERVICE_ID:
+ return g_strdup(BT_HAL_HFP_AUDIO_GATEWAY_UUID);
+ case BT_HSP_SERVICE_ID:
+ return g_strdup(BT_HAL_HSP_AUDIO_GATEWAY_UUID);
+ case BT_A2DP_SERVICE_ID:
+ return g_strdup(BT_HAL_A2DP_UUID);
+ case BT_AVRCP_SERVICE_ID:
+ return g_strdup(BT_HAL_AVRCP_TARGET_UUID);
+ case BT_AVRCP_CT_SERVICE_ID:
+ return g_strdup(BT_HAL_AVRCP_REMOTE_UUID);
+ case BT_OPP_SERVICE_ID:
+ return g_strdup(BT_HAL_OPP_UUID);
+ case BT_FTP_SERVICE_ID:
+ return g_strdup(BT_HAL_FTP_UUID);
+ case BT_SPP_SERVICE_ID:
+ return g_strdup(BT_HAL_SPP_UUID);
+ case BT_PBAP_SERVICE_ID:
+ return g_strdup(BT_HAL_PBAP_UUID);
+ case BT_MAP_SERVICE_ID:
+ return g_strdup(BT_HAL_MAP_UUID);
+ case BT_NAP_SERVICE_ID:
+ return g_strdup(BT_HAL_NAP_UUID);
+ case BT_GN_SERVICE_ID:
+ return g_strdup(BT_HAL_GN_UUID);
+ case BT_HID_SERVICE_ID:
+ return g_strdup(BT_HAL_HID_UUID);
+ case BT_SAP_SERVICE_ID:
+ return g_strdup(BT_HAL_SAP_UUID_NEW);
+ /* TODO: Add UUID for following service_ids */
+ case BT_DUN_SERVICE_ID:
+ case BT_A2DP_SRC_SERVICE_ID:
+ case BT_LAP_SERVICE_ID:
+ case BT_ICP_SERVICE_ID:
+ case BT_SYNC_SERVICE_ID:
+ case BT_BPP_SERVICE_ID:
+ case BT_BIP_SERVICE_ID:
+ case BT_PANU_SERVICE_ID:
+ case BT_VDP_SERVICE_ID:
+ case BT_HSP_HS_SERVICE_ID:
+ case BT_HFP_HS_SERVICE_ID:
+ case BT_MN_SERVICE_ID:
+ case BT_HDP_SERVICE_ID:
+ case BT_PCE_SERVICE_ID:
+ default:
+ ERR("Unknwon Service id: %d, return NULL");
+ }
+
+ DBG("-");
+ return NULL;
}