ble nano hid over gatt

Dependencies:   BLE_API mbed-dev nRF51822

Revision:
55:f01a31103685
Parent:
0:be89b5fdea09
Child:
56:e1d90e2c7402
--- a/DeviceInformationService.h	Tue Aug 30 13:18:00 2016 +0000
+++ b/DeviceInformationService.h	Tue Aug 30 14:05:56 2016 +0000
@@ -19,6 +19,17 @@
 
 #include "ble/BLE.h"
 
+// https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.pnp_id.xml
+#pragma pack(push, 1)
+typedef struct {
+    uint8_t vendorID_source;
+    uint16_t vendorID;
+    uint16_t productID;
+    uint16_t productVersion;
+} PnPID_t;
+#pragma pack(pop)
+
+
 /**
 * @class DeviceInformationService
 * @brief BLE Device Information Service
@@ -52,7 +63,8 @@
                              const char *serialNumber      = NULL,
                              const char *hardwareRevision  = NULL,
                              const char *firmwareRevision  = NULL,
-                             const char *softwareRevision  = NULL) :
+                             const char *softwareRevision  = NULL,
+                             const PnPID_t *pnpID          = NULL) :
         ble(_ble),
         manufacturersNameStringCharacteristic(GattCharacteristic::UUID_MANUFACTURER_NAME_STRING_CHAR,
                                               (uint8_t *)manufacturersName,
@@ -83,7 +95,8 @@
                                              (uint8_t *)softwareRevision,
                                              (softwareRevision != NULL) ? strlen(softwareRevision) : 0, /* Min length */
                                              (softwareRevision != NULL) ? strlen(softwareRevision) : 0, /* Max length */
-                                             GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ)
+                                             GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ),
+        pnpIDCharacteristic(GattCharacteristic::UUID_PNP_ID_CHAR, const_cast<PnPID_t*>(pnpID))
     {
         static bool serviceAdded = false; /* We only add the information service once. */
         if (serviceAdded) {
@@ -91,19 +104,15 @@
         }
         
         // required for OS X bonding
-        SecurityManager::SecurityMode_t securityMode = SecurityManager::SECURITY_MODE_ENCRYPTION_NO_MITM;
-        manufacturersNameStringCharacteristic.requireSecurity(securityMode);
-        modelNumberStringCharacteristic.requireSecurity(securityMode);
-        serialNumberStringCharacteristic.requireSecurity(securityMode);
-        hardwareRevisionStringCharacteristic.requireSecurity(securityMode);
-        firmwareRevisionStringCharacteristic.requireSecurity(securityMode);
+        pnpIDCharacteristic.requireSecurity(SecurityManager::SECURITY_MODE_ENCRYPTION_NO_MITM);
 
         GattCharacteristic *charTable[] = {&manufacturersNameStringCharacteristic,
                                            &modelNumberStringCharacteristic,
                                            &serialNumberStringCharacteristic,
                                            &hardwareRevisionStringCharacteristic,
                                            &firmwareRevisionStringCharacteristic,
-                                           &softwareRevisionStringCharacteristic};
+                                           &softwareRevisionStringCharacteristic,
+                                           &pnpIDCharacteristic};
         GattService         deviceInformationService(GattService::UUID_DEVICE_INFORMATION_SERVICE, charTable,
                                                      sizeof(charTable) / sizeof(GattCharacteristic *));
 
@@ -141,6 +150,7 @@
      * BLE characterising to allow BLE peers access to the software revision string.
      */
     GattCharacteristic  softwareRevisionStringCharacteristic;
+    ReadOnlyGattCharacteristic<PnPID_t>  pnpIDCharacteristic;
 };
 
 #endif /* #ifndef __BLE_DEVICE_INFORMATION_SERVICE_H__*/
\ No newline at end of file