Enhance debug message
[platform/core/connectivity/bluetooth-frwk.git] / bt-service / bt-service-adapter-le.c
index 4a50b1e..7566c48 100644 (file)
@@ -59,6 +59,7 @@ typedef struct {
        char *sender;
        GSList *filter_list;
        gboolean is_scanning;
+       gboolean stop_pending;
 } bt_adapter_le_scanner_t;
 
 static bluetooth_advertising_params_t adv_params = {
@@ -269,10 +270,10 @@ int __bt_get_available_adv_slot_id(const char *sender, int adv_handle, gboolean
                        return i;
        }
 
-       if (le_feature_info.adv_inst_max <= 2)
-               i = 0;
-       else if (le_feature_info.adv_inst_max > 2 && use_reserved_slot == TRUE)
+       if (le_feature_info.adv_inst_max <= 1)
                i = 0;
+       else if (use_reserved_slot == TRUE)
+               i = 1;
        else
                i = 2;
 
@@ -330,6 +331,9 @@ gboolean _bt_is_advertising(void)
        gboolean status = FALSE;
        int i;
 
+       if (le_adv_slot == NULL)
+               return FALSE;
+
        for (i = 0; i < le_feature_info.adv_inst_max; i++) {
                if (le_adv_slot[i].is_advertising == TRUE)
                        status = TRUE;
@@ -411,6 +415,7 @@ int _bt_set_advertising(const char *sender, int adv_handle, gboolean enable, gbo
                                &error);
 
        if (error) {
+               BT_INFO("SetAdvertising %d, slot_id %d", enable, slot_id);
                BT_ERR("SetAdvertising Fail: %s", error->message);
                g_clear_error(&error);
                return BLUETOOTH_ERROR_INTERNAL;
@@ -484,14 +489,18 @@ int _bt_set_custom_advertising(const char *sender, int adv_handle,
                        params->type == BLUETOOTH_ADV_NON_CONNECTABLE)
                return BLUETOOTH_ERROR_NOT_SUPPORT;
 
+       if (params->tx_power_level > 1 ||
+                       params->tx_power_level < -127)
+               return BLUETOOTH_ERROR_INVALID_PARAM;
+
        min = params->interval_min / BT_ADV_INTERVAL_SPLIT;
        max = params->interval_max / BT_ADV_INTERVAL_SPLIT;
 
        ret = g_dbus_proxy_call_sync(proxy, "SetAdvertisingParameters",
-                       g_variant_new("(uuuui)", min, max,
+                       g_variant_new("(uuuuii)", min, max,
                        params->filter_policy, params->type,
-                       slot_id), G_DBUS_CALL_FLAGS_NONE,
-                       -1, NULL, &error);
+                       params->tx_power_level, slot_id),
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
 
        if (error) {
                BT_ERR("SetAdvertisingParameters Fail: %s", error->message);
@@ -503,6 +512,7 @@ int _bt_set_custom_advertising(const char *sender, int adv_handle,
        adv_params.interval_max = params->interval_max;
        adv_params.filter_policy = params->filter_policy;
        adv_params.type = params->type;
+       adv_params.tx_power_level = params->tx_power_level;
 
        if (ret)
                g_variant_unref(ret);
@@ -1368,6 +1378,15 @@ int _bt_unregister_all_scan_filters(const char *sender)
        return BLUETOOTH_ERROR_NONE;
 }
 
+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)
 {
        GDBusProxy *proxy;
@@ -1381,6 +1400,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 == TRUE) {
                BT_ERR("BT is already in LE scanning");
                return BLUETOOTH_ERROR_IN_PROGRESS;
@@ -1398,7 +1423,7 @@ int _bt_start_le_scan(const char *sender)
                                                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
 
                                if (error) {
-                                       BT_ERR("scan_filter_clear Fail: %s", error->message);
+                                       BT_ERR("scan_filter_enable Fail: %s", error->message);
                                        g_clear_error(&error);
                                }
 
@@ -1432,7 +1457,7 @@ int _bt_start_le_scan(const char *sender)
                                        G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
 
                        if (error) {
-                               BT_ERR("scan_filter_clear Fail: %s", error->message);
+                               BT_ERR("scan_filter_enable Fail: %s", error->message);
                                g_clear_error(&error);
                        }
 
@@ -1463,15 +1488,17 @@ int _bt_stop_le_scan(const char *sender)
        GDBusProxy *proxy;
        GError *error = NULL;
        GVariant *ret;
-       bt_adapter_le_scanner_t *scanner = __bt_find_scanner_from_list(sender);
+       bt_adapter_le_scanner_t *scan_sender = __bt_find_scanner_from_list(sender);
+       bt_adapter_le_scanner_t *scanner;
        GSList *l;
        gboolean next_scanning = FALSE;
        gboolean need_scan_filter = TRUE;
 
-       if (scanner == NULL || scanner->is_scanning == FALSE)
+       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;
@@ -1493,7 +1520,7 @@ int _bt_stop_le_scan(const char *sender)
                                        -1, NULL, &error);
 
                        if (error) {
-                               BT_ERR("scan_filter_clear Fail: %s", error->message);
+                               BT_ERR("scan_filter_enable Fail: %s", error->message);
                                g_clear_error(&error);
                        }
 
@@ -1502,6 +1529,8 @@ int _bt_stop_le_scan(const char *sender)
                        BT_INFO("Enable LE Scan Filter");
                        scan_filter_enabled = TRUE;
                }
+               BT_INFO("next_scanning exists. Keep the LE scanning");
+               scan_sender->stop_pending = FALSE;
                return BLUETOOTH_ERROR_NONE;
        } else {
                if (scan_filter_enabled == TRUE) {
@@ -1511,7 +1540,7 @@ int _bt_stop_le_scan(const char *sender)
                                        -1, NULL, &error);
 
                        if (error) {
-                               BT_ERR("scan_filter_clear Fail: %s", error->message);
+                               BT_ERR("scan_filter_enable Fail: %s", error->message);
                                g_clear_error(&error);
                        }
 
@@ -1526,6 +1555,11 @@ int _bt_stop_le_scan(const char *sender)
        ret = g_dbus_proxy_call_sync(proxy, "StopLEDiscovery",
                                NULL, G_DBUS_CALL_FLAGS_NONE,
                                -1, NULL, &error);
+       if (error) {
+               BT_ERR("StopLEDiscovery Fail: %s", error->message);
+               g_clear_error(&error);
+       }
+
        if (ret == NULL) {
                BT_ERR("LE Scan stop failed");
                return BLUETOOTH_ERROR_INTERNAL;
@@ -1546,6 +1580,7 @@ void _bt_disable_all_scanner_status(void)
        for (l = scanner_list; l != NULL; l = g_slist_next(l)) {
                scanner = l->data;
                scanner->is_scanning = FALSE;
+               scanner->stop_pending = FALSE;
        }
 }
 
@@ -1571,6 +1606,7 @@ static void __bt_free_le_scanner(void)
 
 void _bt_set_le_scan_status(gboolean mode)
 {
+       BT_DBG("set is_le_scanning : %d -> %d", is_le_scanning, mode);
        is_le_scanning = mode;
 }