char *sender;
GSList *filter_list;
gboolean is_scanning;
+ gboolean stop_pending;
} bt_adapter_le_scanner_t;
GSList *scanner_list = NULL;
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;
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;
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;
if (OAL_STATUS_SUCCESS != ret) {
BT_ERR("gattc_start_le_discovery failed");
+ scan_sender->stop_pending = FALSE;
return BLUETOOTH_ERROR_INTERNAL;
}
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;