*/
#include <stdio.h>
-#include <dbus/dbus.h>
#include <gio/gio.h>
#include <glib.h>
#include <dlog.h>
#include <string.h>
#include <vconf.h>
#include <syspopup_caller.h>
-#include <aul.h>
#include "bt-internal-types.h"
#include "bt-service-common.h"
static gboolean scan_filter_enabled = FALSE;
static bt_le_scan_type_t le_scan_type = BT_LE_PASSIVE_SCAN;
-static GSList *gatt_client_senders = NULL;
-
-
-gboolean _bt_is_set_scan_parameter(void)
-{
- return is_le_set_scan_parameter;
-}
-
-void _bt_init_gatt_client_senders(void)
-{
- _bt_clear_request_list();
-}
-
-int _bt_insert_gatt_client_sender(char *sender)
-{
- char *info;
-
- retv_if(sender == NULL, BLUETOOTH_ERROR_INVALID_PARAM);
-
- info = g_strdup(sender);
- retv_if(info == NULL, BLUETOOTH_ERROR_MEMORY_ALLOCATION);
-
- gatt_client_senders = g_slist_append(gatt_client_senders, info);
-
- BT_DBG("insert sender: %s", sender);
-
- return BLUETOOTH_ERROR_NONE;
-}
-
-int _bt_delete_gatt_client_sender(char *sender)
-{
- GSList *l;
- char *info;
-
- BT_DBG("remove sender: %s", sender);
-
- for (l = gatt_client_senders; l != NULL; l = g_slist_next(l)) {
- info = l->data;
- if (info == NULL)
- continue;
-
- if (g_strcmp0(info, sender) == 0) {
- BT_DBG("remove info");
- gatt_client_senders = g_slist_remove(gatt_client_senders, info);
- g_free(info);
- return BLUETOOTH_ERROR_NONE;
- }
- }
-
- return BLUETOOTH_ERROR_NOT_FOUND;
-}
-
-void _bt_clear_gatt_client_senders(void)
-{
- if (gatt_client_senders) {
- g_slist_foreach(gatt_client_senders, (GFunc)g_free, NULL);
- g_slist_free(gatt_client_senders);
- gatt_client_senders = NULL;
- }
-}
-#if 0
-static void __bt_send_foreach_event(gpointer data, gpointer user_data)
-{
- char *sender = data;
- GVariant *param = user_data;
-
- _bt_send_event_to_dest(sender, BT_DEVICE_EVENT, BLUETOOTH_EVENT_GATT_CHAR_VAL_CHANGED,
- param);
-}
-#endif
-void _bt_send_char_value_changed_event(void *param)
-{
-#if 0
- g_slist_foreach(gatt_client_senders, __bt_send_foreach_event,
- (gpointer)param);
-#else
- _bt_send_event(BT_DEVICE_EVENT, BLUETOOTH_EVENT_GATT_CHAR_VAL_CHANGED, param);
-#endif
-}
-
-void __bt_free_le_adv_slot(void)
+static void __bt_free_le_adv_slot(void)
{
int i;
static void __bt_register_adv_slot_owner(const char *sender, int adv_handle, int slot_id)
{
+ if (le_adv_slot == NULL)
+ return;
+
if (le_adv_slot[slot_id].sender == NULL) {
le_adv_slot[slot_id].sender = strdup(sender);
le_adv_slot[slot_id].adv_handle = adv_handle;
void _bt_unregister_adv_slot_owner(int slot_id)
{
+ if (le_adv_slot == NULL)
+ return;
+
g_free(le_adv_slot[slot_id].sender);
le_adv_slot[slot_id].sender = NULL;
le_adv_slot[slot_id].adv_handle = 0;
void _bt_set_advertising_status(int slot_id, gboolean mode)
{
+ if (le_adv_slot == NULL)
+ return;
+
le_adv_slot[slot_id].is_advertising = mode;
}
return status;
}
+gboolean _bt_is_multi_adv_supported(void)
+{
+ return (le_feature_info.adv_inst_max > 1) ? TRUE : FALSE;
+}
+
void _bt_stop_advertising_by_terminated_process(const char* terminated_name)
{
int i;
return -1;
}
slot_check_list = g_malloc0(sizeof(gboolean) * le_feature_info.max_filter);
- if (slot_check_list == NULL) {
- BT_ERR("Fail to allocate memory");
- return -1;
- }
for (l = scanner_list; l != NULL; l = g_slist_next(l)) {
scanner = l->data;
scanner = __bt_find_scanner_from_list(sender);
if (scanner == NULL) {
scanner = g_malloc0(sizeof(bt_adapter_le_scanner_t));
- if (scanner) {
- scanner->sender = strdup(sender);
- scanner_list = g_slist_append(scanner_list, scanner);
- }
+ scanner->sender = strdup(sender);
+ scanner_list = g_slist_append(scanner_list, scanner);
}
filter_data = g_malloc0(sizeof(bluetooth_le_scan_filter_t));
- if (filter_data) {
- memcpy(filter_data, filter, sizeof(bluetooth_le_scan_filter_t));
- filter_data->slot_id = *slot_id;
+ memcpy(filter_data, filter, sizeof(bluetooth_le_scan_filter_t));
+ filter_data->slot_id = *slot_id;
- if (scanner)
- scanner->filter_list = g_slist_append(scanner->filter_list, filter_data);
- }
+ if (scanner)
+ scanner->filter_list = g_slist_append(scanner->filter_list, filter_data);
if (ret)
g_variant_unref(ret);
if (scanner == NULL) {
scanner = g_malloc0(sizeof(bt_adapter_le_scanner_t));
- retv_if(scanner == NULL, BLUETOOTH_ERROR_INTERNAL);
-
scanner->sender = strdup(sender);
scanner_list = g_slist_append(scanner_list, scanner);
}
scan_data_len,
scan_data_param);
-#if 0
_bt_send_event_to_dest(scanner->sender, BT_LE_ADAPTER_EVENT,
BLUETOOTH_EVENT_REMOTE_LE_DEVICE_FOUND, param);
-#else
- _bt_send_event(BT_LE_ADAPTER_EVENT, BLUETOOTH_EVENT_REMOTE_LE_DEVICE_FOUND, param);
-#endif
- }
-}
-
-void _bt_send_ibeacon_scan_result_event(const bt_remote_ibeacon_dev_info_t *ibeacon_dev_info)
-{
- int result = BLUETOOTH_ERROR_NONE;
- GSList *l;
- GVariant *param;
- bt_adapter_le_scanner_t *scanner = NULL;
-
- ret_if(ibeacon_dev_info == NULL);
- BT_DBG("_bt_send_ibeacon_scan_result_event");
-
- for (l = scanner_list; l != NULL; l = g_slist_next(l)) {
- scanner = l->data;
- if (scanner->is_scanning == FALSE)
- continue;
-
- param = g_variant_new("(isnnnsnnn)",
- result,
- ibeacon_dev_info->address,
- ibeacon_dev_info->addr_type,
- ibeacon_dev_info->company_id,
- ibeacon_dev_info->ibeacon_type,
- ibeacon_dev_info->uuid,
- ibeacon_dev_info->major_id,
- ibeacon_dev_info->minor_id,
- ibeacon_dev_info->measured_power);
-
- _bt_send_event(BT_LE_ADAPTER_EVENT, BLUETOOTH_EVENT_REMOTE_IBEACON_DEVICE_FOUND, param);
}
}