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:
18:6d5f4c638f6a
Parent:
14:baa7a1464517
Child:
58:027c65a54097
diff -r 8aeb0c44869b -r 6d5f4c638f6a utils/inc/Payload.h
--- a/utils/inc/Payload.h	Thu Aug 07 09:33:27 2014 +0000
+++ b/utils/inc/Payload.h	Fri Aug 08 10:45:53 2014 +0000
@@ -23,9 +23,12 @@
 {
     public:
     uint8_t length;
-    uint8_t id;
+    uint8_t id;    
     uint8_t *data;
-        
+    uint8_t *idptr;    
+
+    
+       
     void set_length(uint8_t l) {
         length=l;   
     }
@@ -69,7 +72,114 @@
     uint8_t Payload::getLengthAtIndex(int index);   
     uint8_t* Payload::getDataAtIndex(int index);    
     int8_t getInt8AtIndex(int index);  
-    uint16_t getUint16AtIndex(int index);      
+    uint16_t getUint16AtIndex(int index); 
+    uint8_t* getSerializedAdDataAtIndex(int index);         
 };
 
+
+class PayloadUnit {
+   private:        
+        uint8_t* lenPtr;
+        uint8_t* adTypePtr;
+        uint8_t* dataPtr;
+        
+    public:
+        PayloadUnit() {
+            lenPtr = NULL;
+            adTypePtr = NULL;
+            dataPtr = NULL;
+            }
+            
+        PayloadUnit(uint8_t *len, uint8_t *adType, uint8_t* data) {
+            lenPtr = len;
+            adTypePtr = adType;
+            dataPtr = data;
+            }    
+             
+        void setLenPtr(uint8_t *len)   {
+            lenPtr = len;
+            } 
+            
+        void setAdTypePtr(uint8_t *adType)   {
+            adTypePtr = adType;
+            }  
+            
+        void setDataPtr(uint8_t *data)   {
+            dataPtr = data;
+            }      
+            
+        uint8_t* getLenPtr()   {
+            return lenPtr;
+            } 
+            
+        uint8_t* getAdTypePtr()   {
+            return adTypePtr;
+            }  
+            
+        uint8_t* getDataPtr()   {
+            return dataPtr;
+            }   
+            
+        void printDataAsHex()   {
+            int i = 0;
+            printf("AdData=");
+            for(i=0; i<*lenPtr-1; i++) {
+                printf("0x%x ", dataPtr[i]);
+            }
+            printf("\n");
+        }     
+        
+        void printDataAsString()   {
+            int i = 0;
+            printf("AdData=");
+            for(i=0; i<*lenPtr; i++) {
+                printf("%c", dataPtr[i]);
+            }
+            printf("\n");
+        }                                                   
+            
+    };
+    
+class PayloadPtr {
+private:
+    PayloadUnit *unit;
+    int payloadUnitCount;
+public:    
+    PayloadPtr::PayloadPtr(const uint8_t *tokenString, uint8_t string_ength) {
+        // initialize private data members
+        int stringLength = string_ength;
+        payloadUnitCount = 0;
+        
+        int index = 0;
+        while(index!=stringLength) {
+            int len=tokenString[index];
+            index=index+1+len;
+            payloadUnitCount++;               
+        }
+        
+        // allocate memory to unit
+        unit = new PayloadUnit[payloadUnitCount];
+        int i = 0;
+        int nextUnitOffset = 0;
+        
+        while(i<payloadUnitCount) {           
+            unit[i].setLenPtr((uint8_t *)tokenString+nextUnitOffset);
+            unit[i].setAdTypePtr((uint8_t *)tokenString+nextUnitOffset+1);
+            unit[i].setDataPtr((uint8_t *)tokenString+nextUnitOffset+2);
+           
+            nextUnitOffset += *unit[i].getLenPtr()+1;
+            i++;
+
+        }
+    }
+    
+    PayloadUnit getUnitAtIndex(int index) {
+        return unit[index];
+        }
+    
+    int getPayloadUnitCount() { return payloadUnitCount; }
+        
+    
+};    
+
 #endif // __PAYLOAD_H__
\ No newline at end of file