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:
11:87ddcfa4fa48
Parent:
10:814262eb0746
Child:
12:a5d7db4a1e49
--- a/BlueNRGGap.cpp	Mon Aug 04 08:48:24 2014 +0000
+++ b/BlueNRGGap.cpp	Mon Aug 04 10:33:44 2014 +0000
@@ -75,7 +75,7 @@
         Payload load(advData.getPayload(), advData.getPayloadLen());
         
         for(uint8_t index=0; index<load.getPayloadUnitCount(); index++) {
-            //UnitPayload unitLoad = load.getPayLoadAtIndex(index);
+            pc1.printf("ID=%d\n", load.getIDAtIndex(index));
             switch(load.getIDAtIndex(index)) {
                 case GapAdvertisingData::FLAGS:                              /* ref *Flags */
                 break;
@@ -94,28 +94,25 @@
                 case GapAdvertisingData::SHORTENED_LOCAL_NAME:               /**< Shortened Local Name */
                 break;
                 case GapAdvertisingData::COMPLETE_LOCAL_NAME:                /**< Complete Local Name */
+                    pc1.printf("Advertising type: COMPLETE_LOCAL_NAME\n");
                     const char *device_name = NULL;
                     device_name = (const char*)load.getDataAtIndex(index);  // to be set later when startAdvertising() is called
-                    //const char* local_name = NULL;
-                    if(device_name != NULL) {  
-                        pc1.printf("Advertising type: COMPLETE_LOCAL_NAME\n");
-                        char *namePtr = new char[1+sizeof(device_name)];
+                    pc1.printf("input: device_name= %s...\n", device_name);
+                     pc1.printf("input: device_name length= %d...\n", load.getLengthAtIndex(index)-1);
+                    if(device_name != NULL) {                          
+                        char *namePtr = new char[load.getLengthAtIndex(index)];
                         namePtr[0] = AD_TYPE_COMPLETE_LOCAL_NAME;
-                        pc1.printf("now setting name to: %s...\n", device_name);
-                        
-                        int i=0;
-                        while(device_name[i]!=0) {
-                            namePtr[i+1] = device_name[i];
-                            pc1.printf("%c\n", namePtr[i+1]);
-                            i++;
-                            }
-                        local_name_length = i;
+                        strcpy(namePtr+1, device_name);
+                        local_name_length = load.getLengthAtIndex(index)-1;                        
+                        local_name = (const char*)namePtr;  
+                        pc1.printf("setting name to: %s...\n", namePtr+1);
+                        pc1.printf("name string length: %d...\n", local_name_length+1);    // This includes 'AD_TYPE_COMPLETE_LOCAL_NAME' byte                
                         pc1.printf("device_name length=%d", local_name_length);
-                        //const char* local_name = (const char*)namePtr;  
                     }                
                     break;
                 
                 case GapAdvertisingData::TX_POWER_LEVEL:                     /**< TX Power Level (in dBm) */
+                    aci_hal_set_tx_power_level(0, 0);
                 break;
                 case GapAdvertisingData::DEVICE_ID:                          /**< Device ID */
                 break;
@@ -212,10 +209,10 @@
   /*LINK_LAYER.H DESCRIBES THE ADVERTISING TYPES*/ 
                                 
         
-  ret = aci_gap_set_discoverable(params.getAdvertisingType(), // Advertising_Event_Type
+  ret = aci_gap_set_discoverable(params.getAdvertisingType(), // Advertising_Event_Type                                
+                                0,   // Adv_Interval_Min
                                 params.getInterval(),   // Adv_Interval_Max
-                                0,   // Adv_Interval_Min
-                                PUBLIC_ADDR, // Address_Type
+                                RANDOM_ADDR, // Address_Type <hdd> It seems there is some problem with RANDOM_ADDRESS. <problem_desc> When RANDOM_ADDRESS is selected device name is not being handled properly, i.e. wrong device name is seen by android app </problem_desc>
                                 NO_WHITE_LIST_USE,  // Adv_Filter_Policy
                                 local_name_length, // Local_Name_Length
                                 local_name, // Local_Name