ble nano hid over gatt

Dependencies:   BLE_API mbed-dev nRF51822

Revision:
66:a7c6fbe45cf5
Parent:
59:2d6c0bff2151
Child:
75:351d7ffe81d1
--- a/HIDServiceBase.cpp	Fri Sep 02 03:24:36 2016 +0900
+++ b/HIDServiceBase.cpp	Thu Sep 01 19:09:47 2016 +0000
@@ -17,27 +17,6 @@
 #include "mbed.h"
 #include "HIDServiceBase.h"
 
-static const report_reference_t inputReportReferenceData = { 0, INPUT_REPORT };
-static const GattAttribute inputReportReferenceDescriptor(BLE_UUID_DESCRIPTOR_REPORT_REFERENCE, (uint8_t *)&inputReportReferenceData, 2, 2, false);
-static const GattAttribute * inputReportDescriptors[] = {
-    &inputReportReferenceDescriptor,
-};
-
-static const report_reference_t outputReportReferenceData = { 0, OUTPUT_REPORT };
-static const GattAttribute outputReportReferenceDescriptor(BLE_UUID_DESCRIPTOR_REPORT_REFERENCE, (uint8_t *)&outputReportReferenceData, 2, 2, false);
-static const GattAttribute * outputReportDescriptors[] = {
-    &outputReportReferenceDescriptor,
-};
-
-    
-static const report_reference_t featureReportReferenceData = { 0, FEATURE_REPORT };
-static const GattAttribute featureReportReferenceDescriptor(BLE_UUID_DESCRIPTOR_REPORT_REFERENCE, (uint8_t *)&featureReportReferenceData, 2, 2, false);
-static const GattAttribute * featureReportDescriptors[] = {
-    &featureReportReferenceDescriptor,
-};
-
-static const HID_information_t HID_information = {HID_VERSION_1_11, 0x00, 0x03};
-
 HIDServiceBase::HIDServiceBase(BLE          &_ble,
                                report_map_t reportMap,
                                uint8_t      reportMapSize,
@@ -62,6 +41,13 @@
 
     protocolMode(REPORT_PROTOCOL),
 
+    inputReportReferenceDescriptor(BLE_UUID_DESCRIPTOR_REPORT_REFERENCE,
+            (uint8_t *)&inputReportReferenceData, 2, 2),
+    outputReportReferenceDescriptor(BLE_UUID_DESCRIPTOR_REPORT_REFERENCE,
+            (uint8_t *)&outputReportReferenceData, 2, 2),
+    featureReportReferenceDescriptor(BLE_UUID_DESCRIPTOR_REPORT_REFERENCE,
+            (uint8_t *)&featureReportReferenceData, 2, 2),
+
     protocolModeCharacteristic(GattCharacteristic::UUID_PROTOCOL_MODE_CHAR, &protocolMode, 1, 1,
               GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ
             | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE),
@@ -71,20 +57,20 @@
               GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ
             | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY
             | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE,
-            const_cast<GattAttribute**>(inputReportDescriptors), 1),
+            inputReportDescriptors(), 1),
 
     outputReportCharacteristic(GattCharacteristic::UUID_REPORT_CHAR,
             (uint8_t *)outputReport, outputReportLength, outputReportLength,
               GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ
             | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE
             | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE,
-            const_cast<GattAttribute**>(outputReportDescriptors), 1),
+            outputReportDescriptors(), 1),
 
     featureReportCharacteristic(GattCharacteristic::UUID_REPORT_CHAR,
             (uint8_t *)featureReport, featureReportLength, featureReportLength,
               GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ
             | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE,
-            const_cast<GattAttribute**>(featureReportDescriptors), 1),
+            featureReportDescriptors(), 1),
 
     /*
      * We need to set reportMap content as const, in order to let the compiler put it into flash
@@ -96,7 +82,7 @@
             GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ,
             NULL, 0),
 
-    HIDInformationCharacteristic(GattCharacteristic::UUID_HID_INFORMATION_CHAR, const_cast<HID_information_t*>(&HID_information)),
+    HIDInformationCharacteristic(GattCharacteristic::UUID_HID_INFORMATION_CHAR, HIDInformation()),
     HIDControlPointCharacteristic(GattCharacteristic::UUID_HID_CONTROL_POINT_CHAR,
             &controlPointCommand, 1, 1,
             GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE),
@@ -183,6 +169,41 @@
     startReportTicker();
 }
 
+GattAttribute** HIDServiceBase::inputReportDescriptors() {
+    inputReportReferenceData.ID = 0;
+    inputReportReferenceData.type = INPUT_REPORT;
+
+    static GattAttribute * descs[] = {
+        &inputReportReferenceDescriptor,
+    };
+    return descs;
+}
+
+GattAttribute** HIDServiceBase::outputReportDescriptors() {
+    outputReportReferenceData.ID = 0;
+    outputReportReferenceData.type = OUTPUT_REPORT;
+
+    static GattAttribute * descs[] = {
+        &outputReportReferenceDescriptor,
+    };
+    return descs;
+}
+
+GattAttribute** HIDServiceBase::featureReportDescriptors() {
+    featureReportReferenceData.ID = 0;
+    featureReportReferenceData.type = FEATURE_REPORT;
+
+    static GattAttribute * descs[] = {
+        &featureReportReferenceDescriptor,
+    };
+    return descs;
+}
+
+HID_information_t* HIDServiceBase::HIDInformation() {
+    static HID_information_t info = {HID_VERSION_1_11, 0x00, 0x03};
+
+    return &info;
+}
 
 ble_error_t HIDServiceBase::send(const report_t report) {
     return ble.gattServer().write(inputReportCharacteristic.getValueHandle(),
@@ -203,4 +224,4 @@
 void HIDServiceBase::onDisconnection(const Gap::DisconnectionCallbackParams_t *params)
 {
     this->connected = false;
-}
+}
\ No newline at end of file