[Bluetooth] Fixed advertise callback issue
authorsangrae.kim <sangrae.kim@samsung.com>
Tue, 12 Apr 2016 01:34:16 +0000 (10:34 +0900)
committersangrae.kim <sangrae.kim@samsung.com>
Tue, 12 Apr 2016 05:42:43 +0000 (14:42 +0900)
[Verification] TCT pass rate:
               Auto: 100% (255/255/0/0/0)
               Manual: 100% (145/145/0/0/0)

Change-Id: Iee8a10e8b25a684b77cd4f2eb8de2a0f14acf943
Signed-off-by: sangrae.kim <sangrae.kim@samsung.com>
src/bluetooth/bluetooth_api.js
src/bluetooth/bluetooth_le_adapter.cc

index d1eaee4a8851b08c00c65b70f57002e8675a58db..06c5fe92d4d31c0f5005a4fa391607ffc9d91da8 100755 (executable)
@@ -1370,6 +1370,9 @@ var _bleAdvertiseListener = _singleListenerBuilder('BluetoothLEAdvertiseCallback
     case 'onstate':
       if (successCallback) {
         successCallback(native.getResultObject(event));
+        if (native.getResultObject(event) == 'STOPPED') {
+          _bleAdvertiseListener.removeListener();
+        }
       }
       return ret;
 
@@ -1481,7 +1484,6 @@ BluetoothLEAdapter.prototype.startAdvertise = function() {
 BluetoothLEAdapter.prototype.stopAdvertise = function() {
   console.log('Entered BluetoothLEAdapter.stopAdvertise()');
 
-  _bleAdvertiseListener.removeListener();
   var result = native.callSync('BluetoothLEAdapter_stopAdvertise', {});
 
   if (native.isFailure(result)) {
index f34abd953eb7d43970ef6c0217cbc6e7904a7732..7447289a46fb59531f333de16a3a1601c36058a9 100755 (executable)
@@ -693,15 +693,6 @@ void BluetoothLEAdapter::StopAdvertise(const picojson::value& data, picojson::ob
       return;
     }
 
-    ret = bt_adapter_le_destroy_advertiser(bt_advertiser_);
-    if (BT_ERROR_NONE != ret && BT_ERROR_NOT_IN_PROGRESS != ret) {
-      LogAndReportError(
-          PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to destroy advertiser"), &out,
-          ("bt_adapter_le_destroy_advertiser() failed with: %d (%s)",
-            ret, get_error_message(ret)));
-      return;
-    }
-
     bt_advertiser_ = nullptr;
   } else {
     LoggerD("Advertising is not in progress");
@@ -790,6 +781,17 @@ void BluetoothLEAdapter::OnAdvertiseResult(
     LoggerD("Advertise state is: %s", state);
     data_obj->insert(std::make_pair(kAction, picojson::value(kOnAdvertiseState)));
     ReportSuccess(picojson::value(state), *data_obj);
+    if (adv_state == BT_ADAPTER_LE_ADVERTISING_STOPPED){
+      LoggerD("Advertiser destroy");
+      int  ret = bt_adapter_le_destroy_advertiser(advertiser);
+      if (BT_ERROR_NONE != ret && BT_ERROR_NOT_IN_PROGRESS != ret) {
+        LogAndReportError(
+            PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to destroy advertiser"), data_obj,
+            ("bt_adapter_le_destroy_advertiser() failed with: %d (%s)",
+              ret, get_error_message(ret)));
+        return;
+      }
+    }
   }
 
   adapter->instance_.FireEvent(kAdvertiseEvent, value);