X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bt-service-adaptation%2Fservices%2Fadapter%2Fbt-service-core-adapter-le.c;h=66ecf4a773c0df679d5dbf911d9c2e13e8c1df08;hb=85e3d9d4c69b2891af1523b19da2d9d9704334d6;hp=5818f2d8b9ffb023984001fd3a6d805012df2c77;hpb=7e250d2c9e5b24c7ff06e15fb5bcd4c76ddb4803;p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git diff --git a/bt-service-adaptation/services/adapter/bt-service-core-adapter-le.c b/bt-service-adaptation/services/adapter/bt-service-core-adapter-le.c index 5818f2d..66ecf4a 100644 --- a/bt-service-adaptation/services/adapter/bt-service-core-adapter-le.c +++ b/bt-service-adaptation/services/adapter/bt-service-core-adapter-le.c @@ -91,6 +91,7 @@ typedef struct { char *sender; GSList *filter_list; gboolean is_scanning; + gboolean stop_pending; } bt_adapter_le_scanner_t; GSList *scanner_list = NULL; @@ -1483,6 +1484,14 @@ gboolean __send_le_scan_reply(gpointer data) return FALSE; } +static gboolean __start_le_scan_timeout(gpointer user_data) +{ + char *sender = (char *)user_data; + _bt_start_le_scan(sender); + + return FALSE; +} + int _bt_start_le_scan(const char *sender) { bt_adapter_le_scanner_t *scanner; @@ -1497,6 +1506,12 @@ int _bt_start_le_scan(const char *sender) scanner_list = g_slist_append(scanner_list, scanner); } + if (scanner->stop_pending == TRUE) { + BT_DBG("Waiting LEDiscoveryFinished"); + g_timeout_add(500, (GSourceFunc)__start_le_scan_timeout, scanner->sender); + return BLUETOOTH_ERROR_NONE; + } + if (scanner->is_scanning) { BT_ERR("BT is already in LE scanning"); return BLUETOOTH_ERROR_IN_PROGRESS; @@ -1535,16 +1550,18 @@ done: int _bt_stop_le_scan(const char *sender) { + bt_adapter_le_scanner_t *scan_sender; bt_adapter_le_scanner_t *scanner; gboolean next_scanning = FALSE; GSList *l; int ret; - scanner = __bt_find_scanner_from_list(sender); - if (scanner == NULL || scanner->is_scanning == FALSE) + scan_sender = __bt_find_scanner_from_list(sender); + if (scan_sender == NULL || scan_sender->is_scanning == FALSE) return BLUETOOTH_ERROR_NOT_IN_OPERATION; - scanner->is_scanning = FALSE; + scan_sender->is_scanning = FALSE; + scan_sender->stop_pending = TRUE; for (l = scanner_list; l != NULL; l = g_slist_next(l)) { scanner = l->data; @@ -1565,6 +1582,7 @@ int _bt_stop_le_scan(const char *sender) if (OAL_STATUS_SUCCESS != ret) { BT_ERR("gattc_start_le_discovery failed"); + scan_sender->stop_pending = FALSE; return BLUETOOTH_ERROR_INTERNAL; } @@ -1572,6 +1590,18 @@ int _bt_stop_le_scan(const char *sender) return BLUETOOTH_ERROR_NONE; } +void _bt_disable_all_scanner_status(void) +{ + GSList *l; + bt_adapter_le_scanner_t *scanner; + + for (l = scanner_list; l != NULL; l = g_slist_next(l)) { + scanner = l->data; + scanner->is_scanning = FALSE; + scanner->stop_pending = FALSE; + } +} + void _bt_check_le_scanner_app_termination(const char *sender) { bt_adapter_le_scanner_t *scanner;