/*
- * Bluetooth-frwk
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hocheol Seo <hocheol.seo@samsung.com>
- * Girishashok Joshi <girish.joshi@samsung.com>
- * Chanyeol Park <chanyeol.park@samsung.com>
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <aul.h>
#include <dbus/dbus-glib.h>
#include <dbus/dbus.h>
-
#include <bundle.h>
-#if 0
#include <eventsystem.h>
-#endif
#include <bundle_internal.h>
#include "alarm.h"
#include "bt-service-main.h"
#include "bt-service-avrcp.h"
#include "bt-service-device.h"
+#ifdef TIZEN_DPM_ENABLE
+#include "bt-service-dpm.h"
+#endif
typedef struct {
guint event_id;
static guint timer_id = 0;
static guint le_timer_id = 0;
-static int status_reg_id;
+static uint status_reg_id;
#define BT_CORE_NAME "org.projectx.bt_core"
#define BT_CORE_PATH "/org/projectx/bt_core"
result = alarmmgr_add_alarm(ALARM_TYPE_VOLATILE, visible_timer.timeout,
0, NULL, &alarm_id);
- if(result < 0) {
+ if (result < 0) {
BT_ERR("Failed to create alarm error = %d\n", result);
} else {
BT_DBG("Alarm created = %d\n", alarm_id);
visible_timer.timeout = timeout;
- if (timeout <= 0)
- return BLUETOOTH_ERROR_NONE;
-
#ifndef TIZEN_WEARABLE
+#ifdef TIZEN_DPM_ENABLE
+ if (_bt_dpm_get_bluetooth_limited_discoverable_state() != DPM_RESTRICTED) {
+#endif
if (vconf_set_int(BT_FILE_VISIBLE_TIME, timeout) != 0)
BT_ERR("Set vconf failed");
+#ifdef TIZEN_DPM_ENABLE
+ }
+#endif
#endif
+ if (timeout <= 0)
+ return BLUETOOTH_ERROR_NONE;
+
if (!visible_timer.alarm_init) {
/* Set Alarm timer to switch off BT */
result = alarmmgr_init("bt-service");
g_variant_get(result, "(a{sv})", &property_iter);
while (g_variant_iter_loop(property_iter, "{sv}", &key, &value)) {
- if (!g_strcmp0(key,"Paired")) {
+ if (!g_strcmp0(key, "Paired")) {
paired = g_variant_get_boolean(value);
- } else if(!g_strcmp0(key, "Address")) {
+ } else if (!g_strcmp0(key, "Address")) {
address = g_variant_get_string(value, NULL);
} else if (!g_strcmp0(key, "Alias")) {
name = g_variant_get_string(value, NULL);
} else if (!g_strcmp0(key, "ManufacturerData")) {
manufacturer_data = g_byte_array_new();
g_variant_get(value, "ay", &char_value_iter);
- while(g_variant_iter_loop(char_value_iter, "y", &char_value)) {
+
+ while (g_variant_iter_loop(char_value_iter, "y", &char_value))
g_byte_array_append(manufacturer_data, &char_value, 1);
- }
+
+ g_variant_iter_free(char_value_iter);
+
if (manufacturer_data) {
if (manufacturer_data->len > 0) {
memcpy(dev_info->manufacturer_data.data, manufacturer_data->data,
}
}
}
+ g_variant_iter_free(property_iter);
BT_DBG("trust: %d, paired: %d", trust, paired);
if (vconf_get_int(BT_FILE_VISIBLE_TIME, &timeout) != 0)
BT_ERR("Fail to get the timeout value");
+#ifdef TIZEN_DPM_ENABLE
+ if (timeout == -1 ||
+ _bt_dpm_get_bluetooth_limited_discoverable_state() == DPM_RESTRICTED) {
+ if (_bt_set_discoverable_mode(
+ BLUETOOTH_DISCOVERABLE_MODE_GENERAL_DISCOVERABLE,
+ timeout) != BLUETOOTH_ERROR_NONE) {
+ if (vconf_set_int(BT_FILE_VISIBLE_TIME, 0) != 0)
+ BT_ERR("Set vconf failed");
+ }
+ } else {
+ if (_bt_set_discoverable_mode(
+ BLUETOOTH_DISCOVERABLE_MODE_CONNECTABLE,
+ timeout) != BLUETOOTH_ERROR_NONE) {
+ BT_ERR("Set connectable mode failed");
+ }
+ }
+#else
if (timeout == -1) {
if (_bt_set_discoverable_mode(
BLUETOOTH_DISCOVERABLE_MODE_GENERAL_DISCOVERABLE,
if (vconf_set_int(BT_FILE_VISIBLE_TIME, 0) != 0)
BT_ERR("Set vconf failed");
}
+ } else {
+ if (_bt_set_discoverable_mode(
+ BLUETOOTH_DISCOVERABLE_MODE_CONNECTABLE,
+ timeout) != BLUETOOTH_ERROR_NONE) {
+ BT_ERR("Set connectable mode failed");
+ }
}
+#endif
}
#endif
#else
#ifdef TIZEN_TV
if (_bt_set_discoverable_mode(
- BLUETOOTH_DISCOVERABLE_MODE_GENERAL_DISCOVERABLE, 0)!= BLUETOOTH_ERROR_NONE)
+ BLUETOOTH_DISCOVERABLE_MODE_GENERAL_DISCOVERABLE, 0) != BLUETOOTH_ERROR_NONE)
BT_ERR("Fail to set discoverable mode");
#endif
#endif
ret_pm_ignore = vconf_get_int(VCONFKEY_PM_KEY_IGNORE, &pm_ignore_mode);
/* Update the vconf BT status in normal Deactivation case only */
-
-#if 0
if (ret == 0 && power_off_status == VCONFKEY_SYSMAN_POWER_OFF_NONE &&
ret_pm_ignore == 0 && pm_ignore_mode != VCONFKEY_PM_KEY_LOCK) {
-#endif
+
BT_DBG("Update vconf for BT normal Deactivation");
if (result == BLUETOOTH_ERROR_TIMEOUT)
- if (vconf_set_int(BT_OFF_DUE_TO_TIMEOUT, 1) != 0 )
+ if (vconf_set_int(BT_OFF_DUE_TO_TIMEOUT, 1) != 0)
BT_ERR("Set vconf failed");
/* Update Bluetooth Status to notify other modules */
if (vconf_set_int(VCONFKEY_BT_STATUS, VCONFKEY_BT_STATUS_OFF) != 0)
BT_ERR("Set vconf failed");
-#if 0
+
if (_bt_eventsystem_set_value(SYS_EVENT_BT_STATE, EVT_KEY_BT_STATE,
EVT_VAL_BT_OFF) != ES_R_OK)
BT_ERR("Fail to set value");
-#endif
-//
+ }
if (vconf_set_int(VCONFKEY_BT_DEVICE, VCONFKEY_BT_DEVICE_NONE) != 0)
BT_ERR("Set vconf failed\n");
if (vconf_set_int(VCONFKEY_BT_LE_STATUS, VCONFKEY_BT_LE_STATUS_ON) != 0)
BT_ERR("Set vconf failed\n");
-#if 0
if (_bt_eventsystem_set_value(SYS_EVENT_BT_STATE, EVT_KEY_BT_LE_STATE,
EVT_VAL_BT_LE_ON) != ES_R_OK)
BT_ERR("Fail to set value");
-#endif
/* Send enabled event to API */
/*
/* Update Bluetooth Status to notify other modules */
BT_DBG("Update vconf for BT LE normal Deactivation");
-
if (vconf_set_int(VCONFKEY_BT_LE_STATUS, VCONFKEY_BT_LE_STATUS_OFF) != 0)
BT_ERR("Set vconf failed\n");
_bt_adapter_set_le_status(BT_LE_DEACTIVATED);
-#if 0
+
if (_bt_eventsystem_set_value(SYS_EVENT_BT_STATE, EVT_KEY_BT_LE_STATE,
EVT_VAL_BT_LE_OFF) != ES_R_OK)
BT_ERR("Fail to set value");
-#endif
- if (_bt_adapter_get_status() != BT_DEACTIVATED) {
- /* Send disabled event */
- _bt_send_event(BT_LE_ADAPTER_EVENT, BLUETOOTH_EVENT_LE_DISABLED,
- g_variant_new_int32(result));
- }
+ /* Send disabled event */
+ _bt_send_event(BT_LE_ADAPTER_EVENT, BLUETOOTH_EVENT_LE_DISABLED,
+ g_variant_new_int32(result));
}
void *_bt_get_adapter_agent(void)
return BLUETOOTH_ERROR_NONE;
}
-#if defined(TIZEN_BT_FLIGHTMODE_ENABLED) || !defined(TIZEN_WEARABLE)
+#if defined(TIZEN_TELEPHONY_ENABLED) || (!defined(TIZEN_WEARABLE) && defined(ENABLE_TIZEN_2_4))
static void __bt_service_flight_ps_mode_cb(keynode_t *node, void *data)
{
gboolean flight_mode = FALSE;
static void __bt_state_event_handler(const char *event_name, bundle *data, void *user_data)
{
+#ifdef ENABLE_TIZEN_2_4
const char *bt_status = NULL;
const char *bt_le_status = NULL;
- const char *bt_transfering_status = NULL;
BT_DBG("bt state set event(%s) received", event_name);
-#ifdef ENABLE_TIZEN_2_4
bt_status = bundle_get_val(data, EVT_KEY_BT_STATE);
BT_DBG("bt_state: (%s)", bt_status);
if (ret < 0)
BT_ERR("Unable to register key handler");
- if (le_status == BT_LE_ACTIVATING) {
+ if (le_status == BT_LE_ACTIVATING ||
+ status == BT_ACTIVATING) {
__bt_set_le_enabled();
_bt_adapter_set_le_status(BT_LE_ACTIVATED);
}
+
if (status == BT_ACTIVATING) {
__bt_set_enabled();
_bt_adapter_set_status(BT_ACTIVATED);
#endif
_bt_service_register_vconf_handler();
-#if 0
+
/* eventsystem */
if (eventsystem_register_event(SYS_EVENT_BT_STATE, &status_reg_id,
(eventsystem_handler)__bt_state_event_handler, NULL) != ES_R_OK) {
BT_ERR("Fail to register system event");
}
-#endif
}
void _bt_handle_adapter_removed(void)
adapter_agent = NULL;
_bt_reliable_terminate_service(NULL);
-#if 0
+
if (eventsystem_unregister_event(status_reg_id) != ES_R_OK) {
BT_ERR("Fail to unregister system event");
}
-#endif
}
}
g_variant_unref(result);
-
_bt_set_disabled(BLUETOOTH_ERROR_TIMEOUT);
_bt_terminate_service(NULL);
}
g_variant_unref(result);
-
_bt_adapter_set_le_status(BT_LE_DEACTIVATED);
_bt_set_le_disabled(BLUETOOTH_ERROR_TIMEOUT);
return;
}
+#ifdef TIZEN_TV
static gboolean __bt_adapter_enabled_cb(gpointer user_data)
{
BT_DBG("+");
return FALSE;
}
-
+#endif
int _bt_enable_adapter(void)
{
return BLUETOOTH_ERROR_INTERNAL;
}
g_variant_unref(result);
-
if (le_status == BT_LE_ACTIVATED) {
__bt_set_enabled();
} else {
}
g_variant_unref(result);
-
return BLUETOOTH_ERROR_NONE;
}
}
g_variant_unref(result);
-
_bt_set_le_disabled(BLUETOOTH_ERROR_NONE);
BT_DBG("le status : %d", _bt_adapter_get_le_status());
BT_DBG("-");
GError *error = NULL;
int ret = BLUETOOTH_ERROR_NONE;
GVariant *result;
- GVariantIter *iter;
+ GVariant *value;
+ GVariantIter *iter = NULL;
gchar *uuid;
BT_DBG("+");
return BLUETOOTH_ERROR_INTERNAL;
}
- g_variant_get(result, "as", &iter);
+ g_variant_get(result, "(v)", &value);
+ g_variant_get(value, "as", &iter);
+ if (iter == NULL) {
+ BT_ERR("Failed to get UUIDs(%s)", service_uuid);
+ *used = FALSE;
+ g_variant_unref(result);
+ g_variant_unref(value);
+ return ret;
+ }
+
while (g_variant_iter_loop(iter, "s", &uuid)) {
if (strcasecmp(uuid, service_uuid) == 0) {
*used = TRUE;
done:
g_variant_iter_free(iter);
+ g_variant_unref(value);
g_variant_unref(result);
BT_DBG("Service Used? %d", *used);
return ret;
g_clear_error(&error);
} else
BT_ERR("Failed to get Discoverable property");
- return FALSE;
+ return BLUETOOTH_ERROR_INTERNAL;
}
g_variant_get(result, "(v)", &temp);
retv_if(proxy == NULL, BLUETOOTH_ERROR_INTERNAL);
+#ifdef TIZEN_DPM_ENABLE
+ if (discoverable_mode != BLUETOOTH_DISCOVERABLE_MODE_CONNECTABLE &&
+ _bt_dpm_get_bluetooth_limited_discoverable_state() == DPM_RESTRICTED) {
+ _bt_launch_dpm_popup("DPM_POLICY_DISABLE_BT_HANDSFREE");
+ return BLUETOOTH_ERROR_ACCESS_DENIED;
+ }
+ if (discoverable_mode != BLUETOOTH_DISCOVERABLE_MODE_GENERAL_DISCOVERABLE &&
+ _bt_dpm_get_bluetooth_limited_discoverable_state() == DPM_RESTRICTED) {
+ _bt_launch_dpm_popup("DPM_POLICY_DISABLE_BT");
+ return BLUETOOTH_ERROR_ACCESS_DENIED;
+ }
+#endif
+
switch (discoverable_mode) {
case BLUETOOTH_DISCOVERABLE_MODE_CONNECTABLE:
pg_scan = TRUE;
address = g_variant_get_string(value, NULL);
_bt_convert_addr_string_to_type(dev_info->device_address.addr,
address);
- } else if(!g_strcmp0(key, "Class")) {
+ } else if (!g_strcmp0(key, "Class")) {
unsigned int cod;
cod = g_variant_get_uint32(value);
_bt_divide_device_class(&dev_info->device_class, cod);
- } else if(!g_strcmp0(key, "Name")) {
+ } else if (!g_strcmp0(key, "Name")) {
const char *name = NULL;
name = g_variant_get_string(value, NULL);
/* If there is no Alias */
g_strlcpy(dev_info->device_name.name, name,
BLUETOOTH_DEVICE_NAME_LENGTH_MAX+1);
}
- } else if(!g_strcmp0(key, "Alias")) {
+ } else if (!g_strcmp0(key, "Alias")) {
const char *alias = NULL;
alias = g_variant_get_string(value, NULL);
/* Overwrite the name */
} else if (strcasecmp(key, "ManufacturerData") == 0) {
manufacturer_data = g_byte_array_new();
g_variant_get(value, "ay", &char_value_iter);
- while(g_variant_iter_loop(char_value_iter, "y", &char_value)) {
+
+ while (g_variant_iter_loop(char_value_iter, "y", &char_value))
g_byte_array_append(manufacturer_data, &char_value, 1);
- }
+
if (manufacturer_data) {
if (manufacturer_data->len > 0) {
memcpy(dev_info->manufacturer_data.data, manufacturer_data->data, manufacturer_data->len);
return BLUETOOTH_ERROR_NONE;
}
+#ifdef TIZEN_TV
int _bt_get_enable_timer_id(void)
{
return timer_id;
}
+#endif