HID-over-GATT implementation with the BLE API. This library allows to create devices such as mouse, keyboard or joystick, over Bluetooth Low Energy.
Dependents: MtConnect04S_Gesture_HID
Fork of BLE_HID by
Diff: HIDServiceBase.cpp
- Revision:
- 5:dc4e6dbcb79b
- Parent:
- 1:7a6c2e2c9371
diff -r c02f0fe0db5f -r dc4e6dbcb79b HIDServiceBase.cpp --- a/HIDServiceBase.cpp Fri Dec 16 10:26:25 2016 +0000 +++ b/HIDServiceBase.cpp Tue Jan 17 03:48:12 2017 +0000 @@ -72,6 +72,18 @@ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE, featureReportDescriptors(), 1), + bootKeyboardInputReportCharacteristic(GattCharacteristic::UUID_BOOT_KEYBOARD_INPUT_REPORT_CHAR, + (uint8_t *)inputReport, inputReportLength, inputReportLength, + GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ + | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY + | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE), + + bootKeyboardOutputReportCharacteristic(GattCharacteristic::UUID_BOOT_KEYBOARD_OUTPUT_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), + /* * We need to set reportMap content as const, in order to let the compiler put it into flash * instead of RAM. The characteristic is read-only so it won't be written, but @@ -112,6 +124,10 @@ characteristics[charIndex++] = &outputReportCharacteristic; if (featureReportLength) characteristics[charIndex++] = &featureReportCharacteristic; + if (inputReportLength) + characteristics[charIndex++] = &bootKeyboardInputReportCharacteristic; + if (outputReportLength) + characteristics[charIndex++] = &bootKeyboardOutputReportCharacteristic; /* TODO: let children add some more characteristics, namely boot keyboard and mouse (They are * mandatory as per HIDS spec.) Ex: @@ -150,6 +166,8 @@ inputReportCharacteristic.requireSecurity(securityMode); outputReportCharacteristic.requireSecurity(securityMode); featureReportCharacteristic.requireSecurity(securityMode); + bootKeyboardInputReportCharacteristic.requireSecurity(securityMode); + bootKeyboardOutputReportCharacteristic.requireSecurity(securityMode); } void HIDServiceBase::startReportTicker(void) { @@ -206,9 +224,19 @@ } ble_error_t HIDServiceBase::send(const report_t report) { - return ble.gattServer().write(inputReportCharacteristic.getValueHandle(), - report, - inputReportLength); + if (protocolMode == REPORT_PROTOCOL) { + return ble.gattServer().write( + inputReportCharacteristic.getValueHandle(), + report, + inputReportLength + ); + } else { + return ble.gattServer().write( + bootKeyboardInputReportCharacteristic.getValueHandle(), + report, + inputReportLength + ); + } } ble_error_t HIDServiceBase::read(report_t report) {