HW layer for the Nucleo board, it only work with old BLE_API

Dependents:   Hello_BLE F446RE-BLE

Fork of X_NUCLEO_IDB0XA1 by ST

Revision:
115:3b47df81a56b
Parent:
113:31c73e9b0108
Child:
116:1aa0d2da72e4
--- a/BlueNRGGap.cpp	Tue Sep 01 13:31:33 2015 +0200
+++ b/BlueNRGGap.cpp	Wed Sep 02 07:50:35 2015 +0200
@@ -360,21 +360,43 @@
         0, // Slave_Conn_Interval_Min
         0);  // Slave_Conn_Interval_Max
 
-    ret = aci_gap_delete_ad_type(AD_TYPE_TX_POWER_LEVEL); 
-    if (ret != BLE_STATUS_SUCCESS){
-        DEBUG("aci_gap_delete_ad_type failed return=%d\n", ret);
-        return BLE_ERROR_PARAM_OUT_OF_RANGE;
+    DEBUG("!!!setting discoverable (servUuidlength=0x%x)\n", servUuidlength);
+    if(BLE_STATUS_SUCCESS!=ret) {
+       DEBUG("error occurred while setting discoverable (ret=0x%x)\n", ret);
+       return BLE_ERROR_PARAM_OUT_OF_RANGE;  // no other suitable error code is available
     }
 
-   ret = aci_gap_update_adv_data(AdvLen, AdvData);
-   if(BLE_STATUS_SUCCESS!=ret) {
-       DEBUG("error occurred while adding adv data (ret=0x%x)\n", ret);
-       return BLE_ERROR_PARAM_OUT_OF_RANGE;  // no other suitable error code is available
-   }
+    // Before updating the ADV data, delete COMPLETE_LOCAL_NAME and TX_POWER_LEVEL fields (if present)
+    if(AdvLen>0) {
+      if(name!=NULL) {
+        DEBUG("!!!calling aci_gap_delete_ad_type AD_TYPE_COMPLETE_LOCAL_NAME!!!\n");
+        ret = aci_gap_delete_ad_type(AD_TYPE_COMPLETE_LOCAL_NAME);
+        if (ret != BLE_STATUS_SUCCESS){
+          DEBUG("aci_gap_delete_ad_type failed return=%d\n", ret);
+          return BLE_ERROR_PARAM_OUT_OF_RANGE;
+        }
+      }
 
-   state.advertising = 1;
+      if(txPowerAdType) {
+        DEBUG("!!!calling aci_gap_delete_ad_type(AD_TYPE_TX_POWER_LEVEL)!!!\n", AdvLen);
+        ret = aci_gap_delete_ad_type(AD_TYPE_TX_POWER_LEVEL);
+        if (ret != BLE_STATUS_SUCCESS){
+          DEBUG("aci_gap_delete_ad_type failed return=%d\n", ret);
+          return BLE_ERROR_PARAM_OUT_OF_RANGE;
+        }
+      }
+   
+      ret = aci_gap_update_adv_data(AdvLen, AdvData);
+      if(BLE_STATUS_SUCCESS!=ret) {
+        DEBUG("error occurred while adding adv data (ret=0x%x)\n", ret);
+        return BLE_ERROR_PARAM_OUT_OF_RANGE;  // no other suitable error code is available
+      }
+      
+    }
 
-   return BLE_ERROR_NONE;
+    state.advertising = 1;
+
+    return BLE_ERROR_NONE;
 }
 
 /**************************************************************************/
@@ -894,13 +916,21 @@
 /**************************************************************************/
 ble_error_t BlueNRGGap::setTxPower(int8_t txPower)
 {
+    tBleStatus ret;
+    
     int8_t enHighPower = 0;
     int8_t paLevel = 0;    
     int8_t dbmActuallySet = getHighPowerAndPALevelValue(txPower, enHighPower, paLevel);
+    
     DEBUG("txPower=%d, dbmActuallySet=%d\n\r", txPower, dbmActuallySet);
     DEBUG("enHighPower=%d, paLevel=%d\n\r", enHighPower, paLevel);                    
-    aci_hal_set_tx_power_level(enHighPower, paLevel);
-    return BLE_ERROR_NONE;    
+    ret = aci_hal_set_tx_power_level(enHighPower, paLevel);
+    if(ret!=BLE_STATUS_SUCCESS) {
+      return BLE_ERROR_UNSPECIFIED;
+    }
+    
+    txPowerAdType = true;
+    return BLE_ERROR_NONE;
 }
 
 /**************************************************************************/