High level Bluetooth Low Energy API and radio abstraction layer

Dependencies:   nRF51822

Dependents:   LinkNode_LIS3DH

Fork of BLE_API by Bluetooth Low Energy

Revision:
23:f19c60478e1b
Parent:
20:c6ceaa206674
--- a/hw/nrf51822.cpp	Tue Jan 07 10:54:02 2014 +0000
+++ b/hw/nrf51822.cpp	Tue Jan 07 19:58:06 2014 +0000
@@ -30,8 +30,9 @@
     /* Add flow control for UART (required by the nRF51822) */
     uart.set_flow_control(RawSerial::RTSCTS, p30, p29);
 
-    /* Reset the service counter */
+    /* Reset the service and characteristic counters */
     serviceCount = 0;
+    characteristicCount = 0;
 }
 
 /**************************************************************************/
@@ -263,8 +264,8 @@
     {
         /* Command ID = 0x0002 */
         uart.printf("10 02 00 0F 01 02 %02X %02X 04 02 %02X %02X 05 02 %02X %02X 03 01 %02X\r\n",
-                    service.characteristics[i].id & 0xFF, 
-                    service.characteristics[i].id >> 8,
+                    service.characteristics[i].uuid & 0xFF, 
+                    service.characteristics[i].uuid >> 8,
                     service.characteristics[i].lenMin & 0xFF,
                     service.characteristics[i].lenMin >> 8,
                     service.characteristics[i].lenMax & 0xFF,
@@ -273,9 +274,13 @@
                     
         /* ToDo: Check response */
         wait(0.1);
-    }    
+        
+        /* Update the characteristic handle */
+        service.characteristics[i].handle = characteristicCount;
+        characteristicCount++;
+    }
 
-    /* Update the service index value */
+    /* Update the service handle */
     service.handle = serviceCount;
     serviceCount++;
     
@@ -287,10 +292,8 @@
     @brief  Reads the value of a characteristic, based on the service
             and characteristic index fields
 
-    @param[in]  service
-                The GattService to read from
-    @param[in]  characteristic
-                The GattCharacteristic to read from
+    @param[in]  charHandle
+                The handle of the GattCharacteristic to read from
     @param[in]  buffer
                 Buffer to hold the the characteristic's value
                 (raw byte array in LSB format)
@@ -309,7 +312,7 @@
     @endcode
 */
 /**************************************************************************/
-ble_error_t nRF51822::readCharacteristic(GattService &service, GattCharacteristic &characteristic, uint8_t buffer[], uint16_t len)
+ble_error_t nRF51822::readCharacteristic(uint8_t charHandle, uint8_t buffer[], uint16_t len)
 {
     /* ToDo */
     
@@ -320,11 +323,9 @@
 /*!
     @brief  Updates the value of a characteristic, based on the service
             and characteristic index fields
-            
-    @param[in]  service
-                The GattService to write to
-    @param[in]  characteristic
-                The GattCharacteristic to write to
+
+    @param[in]  charHandle
+                The handle of the GattCharacteristic to write to
     @param[in]  buffer
                 Data to use when updating the characteristic's value
                 (raw byte array in LSB format)
@@ -343,10 +344,10 @@
     @endcode
 */
 /**************************************************************************/
-ble_error_t nRF51822::writeCharacteristic(GattService &service, GattCharacteristic &characteristic, uint8_t buffer[], uint16_t len)
+ble_error_t nRF51822::writeCharacteristic(uint8_t charHandle, uint8_t buffer[], uint16_t len)
 {
-    /* Command ID = 0x0006, Payload = Service ID, Characteristic ID, Value */
-    uart.printf("10 06 00 %02X %02X %02X", len + 2, characteristic.handle, service.handle);
+    /* Command ID = 0x0006, Payload = Characteristic ID, Value */
+    uart.printf("10 06 00 %02X %02X", len + 1, charHandle);
     for (uint16_t i = 0; i<len; i++)
     {
         uart.printf(" %02X", buffer[i]);
@@ -438,8 +439,9 @@
     /* Command ID = 0x0005, No payload */
     uart.printf("10 05 00 00\r\n");
 
-    /* Reset the service counter */
+    /* Reset the service and characteristic counters */
     serviceCount = 0;
+    characteristicCount = 0;
 
     /* Wait for the radio to come back up */    
     wait(1);