Fix le scan start issue after stop 68/215568/3
authorWootak Jung <wootak.jung@samsung.com>
Fri, 11 Oct 2019 01:08:18 +0000 (10:08 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Fri, 11 Oct 2019 01:18:51 +0000 (10:18 +0900)
le scan is not started after stop because stop_pending is set TRUE.
stop_pending will be set FALSE if le discovery is finished.

Change-Id: Id8d9d759e1afcbf1080c98239a14b1affb40a3b6

bt-oal/bluez_hal/inc/bt-hal-msg.h
bt-oal/bluez_hal/src/bt-hal-event-receiver.c
bt-oal/hardware/bluetooth.h
bt-oal/include/oal-event.h
bt-oal/oal-adapter-mgr.c
bt-service-adaptation/services/adapter/bt-service-core-adapter-le.c
bt-service-adaptation/services/bt-service-event-receiver.c

index e87c1fa..d9d249d 100644 (file)
@@ -77,6 +77,7 @@ struct hal_prop_device_service_rec {
 #define HAL_PROP_DEVICE_BLE_ADV_DATA            0x17
 #define HAL_PROP_ADAPTER_LOCAL_LE_FEAT          0x18
 #define HAL_PROP_DEVICE_IS_ALIAS_SET           0x19
+#define HAL_PROP_ADAPTER_LE_DISCOVERY_FINISHED  0x1a
 
 struct hal_prop_device_info {
        uint8_t version;
index 9247eb8..63dafc1 100644 (file)
@@ -400,7 +400,7 @@ static void __bt_hal_adapter_property_changed_event(GVariant *msg)
                        }
 
                } else if (!g_strcmp0(key, "LEDiscovering")) {
-                       GVariant *result;
+//                     GVariant *result;
 
                        is_le_discovering = g_variant_get_boolean(value);
                        DBG("##LE Discovering = [%d]", is_le_discovering);
@@ -408,6 +408,7 @@ static void __bt_hal_adapter_property_changed_event(GVariant *msg)
                        if (is_le_discovering)
                                continue;
 
+#if 0 /* No need to stop le discovery in case LEDiscovering is false */
                        adapter_proxy = _bt_hal_get_adapter_proxy();
                        if (adapter_proxy == NULL) {
                                ERR("adapter_proxy == NULL");
@@ -427,6 +428,11 @@ static void __bt_hal_adapter_property_changed_event(GVariant *msg)
                                continue;
                        }
                        g_variant_unref(result);
+#endif
+
+                       size += __bt_insert_hal_properties(buf + size,
+                               HAL_PROP_ADAPTER_LE_DISCOVERY_FINISHED, sizeof(gboolean), &is_le_discovering);
+                       ev->num_props++;
                } else if (!g_strcmp0(key, "Modalias")) {
                        char *modalias = NULL;
                        g_variant_get(value, "s", &modalias);
index 1d978ee..5e2eda9 100644 (file)
@@ -358,6 +358,12 @@ typedef enum {
         */
        BT_PROPERTY_REMOTE_IS_ALIAS_SET,
 
+       /**
+        * Description - Bluetooth Adapter LE Discovery finished
+        * Data type   - gboolean
+        */
+       BT_PROPERTY_ADAPTER_LE_DISCOVERY_FINISHED,
+
        BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP = 0xFF,
 } bt_property_type_t;
 
index d7264cf..96d6f38 100644 (file)
@@ -136,6 +136,7 @@ extern "C" {
        EVENT(OAL_EVENT_BLE_MULTI_ADVERTISING_UPDATE)           /* NULL*/\
        EVENT(OAL_EVENT_BLE_DISCOVERY_STARTED)                          /* NULL */\
        EVENT(OAL_EVENT_BLE_DISCOVERY_STOPPED)                          /* NULL */\
+       EVENT(OAL_EVENT_BLE_DISCOVERY_FINISHED)                          /* NULL */\
        EVENT(OAL_EVENT_BLE_REMOTE_DEVICE_FOUND)                /* event_ble_scan_result_info */\
        EVENT(OAL_EVENT_BLE_LOCAL_FEATURES)                     /* adapter le features */\
        EVENT(OAL_EVENT_GATTS_SERVICE_ADDED)                /* gatts Service Added */\
index 6426439..3355180 100644 (file)
@@ -935,6 +935,14 @@ static void cb_adapter_properties(bt_status_t status,
                                        sizeof(event_adapter_le_features_t));
                        break;
                }
+               case BT_PROPERTY_ADAPTER_LE_DISCOVERY_FINISHED: {
+                       gboolean le_discovering = *(gboolean *)properties[i].val;
+                       if (le_discovering == FALSE) {
+                               BT_INFO("LE Discovery finished");
+                               send_event(OAL_EVENT_BLE_DISCOVERY_FINISHED, NULL, 0);
+                       }
+                       break;
+               }
                default:
                         BT_WARN("Unhandled property: %d", properties[i].type);
                         break;
index 97583eb..5408846 100644 (file)
@@ -102,6 +102,7 @@ static gboolean is_le_scanning = FALSE;
 static bluetooth_le_scan_params_t le_scan_params = { BT_LE_ACTIVE_SCAN, 0, 0 };
 
 static int g_gatt_client_id = 0;
+static void _bt_disable_all_scanner_status(void);
 
 /******************************************* LE Scan *********************************************/
 
@@ -725,6 +726,10 @@ static void __bt_le_event_handler(int event_type, gpointer event_data)
 
                break;
        }
+       case OAL_EVENT_BLE_DISCOVERY_FINISHED: {
+               _bt_disable_all_scanner_status();
+               break;
+       }
        default:
                break;
        }
@@ -1643,7 +1648,7 @@ int _bt_stop_le_scan(const char *sender)
        return BLUETOOTH_ERROR_NONE;
 }
 
-void _bt_disable_all_scanner_status(void)
+static void _bt_disable_all_scanner_status(void)
 {
        GSList *l;
        bt_adapter_le_scanner_t *scanner;
index 8b82971..f915b37 100644 (file)
@@ -363,6 +363,7 @@ static gboolean __bt_handle_oal_events(gpointer data)
 #endif
        case OAL_EVENT_BLE_DISCOVERY_STARTED:
        case OAL_EVENT_BLE_DISCOVERY_STOPPED:
+       case OAL_EVENT_BLE_DISCOVERY_FINISHED:
        case OAL_EVENT_BLE_REMOTE_DEVICE_FOUND:
        case OAL_EVENT_BLE_LOCAL_FEATURES:
                if (adapter_le_cb)