My fork of X_NUCLEO_IDB0XA1

Fork of X_NUCLEO_IDB0XA1 by ST

Branch:
sync_with_github
Revision:
253:9665a6f8bbdb
Parent:
252:0c2cb16a7166
Child:
254:f4d217cadbde
--- a/source/BlueNRGGap.cpp	Mon Jun 27 15:51:20 2016 +0200
+++ b/source/BlueNRGGap.cpp	Thu Sep 15 10:49:39 2016 +0100
@@ -39,7 +39,7 @@
  */
 
 #include "BlueNRGDevice.h"
-#include "mbed.h"
+#include "mbed-drivers/mbed.h"
 #include "Payload.h"
 #include "Utils.h"
 #include "debug.h"
@@ -102,6 +102,9 @@
         PRINTF("Exceeded the advertising payload length\n\r");
         return BLE_ERROR_BUFFER_OVERFLOW;
     }
+    // Reset the length of the ADV payload each time
+    // since we get fields of argument 'advData' iteratively
+    AdvLen = 0;
 
     /* Make sure we have a payload! */
     if (advData.getPayloadLen() == 0) {
@@ -110,10 +113,15 @@
         local_name_length = 0;
         txPowLevSet = 0;
         servUuidlength = 0;
-        AdvLen = 0;
     } else {
         PayloadPtr loadPtr(advData.getPayload(), advData.getPayloadLen());
 
+        /* Align the GAP Service Appearance Char value coherently
+           This setting is duplicate (see below GapAdvertisingData::APPEARANCE)
+           since BLE API has an overloaded function for appearance
+        */
+        STORE_LE_16(deviceAppearance, advData.getAppearance());
+        setAppearance((GapAdvertisingData::Appearance)(deviceAppearance[1]<<8|deviceAppearance[0]));
         for(uint8_t index=0; index<loadPtr.getPayloadUnitCount(); index++) {                  
             loadPtr.getUnitAtIndex(index);
 
@@ -182,7 +190,6 @@
                 {
                 PRINTF("Advertising type: COMPLETE_LOCAL_NAME\n\r");
                 loadPtr.getUnitAtIndex(index).printDataAsString();
-                loadPtr.getUnitAtIndex(index).printDataAsHex();
                 local_name_length = *loadPtr.getUnitAtIndex(index).getLenPtr()-1;
                 // The total length should include the Data Type Value
                 if(local_name_length>ADV_DATA_MAX_SIZE-1) {
@@ -248,6 +255,20 @@
                 break;
                 }
 
+            case GapAdvertisingData::APPEARANCE:			/**< Appearance */
+                {
+                PRINTF("Advertising type: APPEARANCE\n\r");
+
+                GapAdvertisingData::Appearance appearanceP;
+                memcpy(deviceAppearance, loadPtr.getUnitAtIndex(index).getDataPtr(), 2);
+
+                PRINTF("input: deviceAppearance= 0x%x 0x%x\n\r", deviceAppearance[1], deviceAppearance[0]);
+
+                appearanceP = (GapAdvertisingData::Appearance)(deviceAppearance[1]<<8|deviceAppearance[0]);
+                /* Align the GAP Service Appearance Char value coherently */
+                setAppearance(appearanceP);
+                break;
+                }
             case GapAdvertisingData::ADVERTISING_INTERVAL:               /**< Advertising Interval */
                 {
                 printf("Advertising type: ADVERTISING_INTERVAL\n\r");
@@ -292,10 +313,6 @@
           scan_rsp_length = scanResponse.getPayloadLen();
         }
 
-        /* Align the GAP Service Appearance Char value coherently */
-        STORE_LE_16(deviceAppearance, advData.getAppearance());
-        setAppearance((GapAdvertisingData::Appearance)(deviceAppearance[1]<<8|deviceAppearance[0]));
-
         // Update the ADV data if we are already in ADV mode
         if(AdvLen > 0 && state.advertising == 1) {
  
@@ -823,6 +840,11 @@
     uint8_t bdaddr[BDADDR_SIZE];
     uint8_t data_len_out;
 
+    if (type == BLEProtocol::AddressType::RANDOM_PRIVATE_NON_RESOLVABLE ||
+        type == BLEProtocol::AddressType::RANDOM_PRIVATE_RESOLVABLE) {
+        return BLE_ERROR_OPERATION_NOT_PERMITTED;
+    }
+
     if(typeP != NULL) {
         *typeP = addr_type;
     }
@@ -1018,7 +1040,7 @@
     uint8_t deviceAppearance[2];
 
     STORE_LE_16(deviceAppearance, appearance);                 
-    PRINTF("input: incoming = %d deviceAppearance= 0x%x 0x%x\n\r", appearance, deviceAppearance[1], deviceAppearance[0]);
+    PRINTF("setAppearance= 0x%x 0x%x\n\r", deviceAppearance[1], deviceAppearance[0]);
     
     ret = aci_gatt_update_char_value(g_gap_service_handle,
                                      g_appearance_char_handle,