ble nano hid over gatt
Dependencies: BLE_API mbed-dev nRF51822
Diff: KeyboardService.h
- Revision:
- 9:d1daefbf1fbd
- Parent:
- 7:b9270a37345b
- Child:
- 21:d801c32231b0
--- a/KeyboardService.h Thu Jul 21 08:45:27 2016 +0900 +++ b/KeyboardService.h Thu Jul 21 21:33:56 2016 +0900 @@ -68,6 +68,7 @@ } data; }; + InputReportData inputReportDataPublished; InputReportData inputReportData; union { @@ -87,18 +88,13 @@ static const uint8_t MODIFIER_RIGHT_ALT = 1<<6; static const uint8_t MODIFIER_RIGHT_GUI = 1<<7; - void queueCurrentReportData() { - inputReportBuffer.push(inputReportData); - startReportTicker(); - } - public: KeyboardService(BLE& _ble) : HIDServiceBase( _ble, KEYBOARD_REPORT_MAP, sizeof(KEYBOARD_REPORT_MAP), - inputReport = inputReportData.raw, + inputReport = inputReportDataPublished.raw, outputReport = outputReportData.raw, featureReport = NULL, inputReportLength = sizeof(inputReportData), @@ -120,7 +116,6 @@ uint8_t modifier = toModifierBit(keycode); if (modifier) { inputReportData.data.modifier |= modifier; - queueCurrentReportData(); return; } @@ -128,7 +123,6 @@ for (int i = 0; i < 6; i++) { if (inputReportData.data.keycode[i] == 0) { inputReportData.data.keycode[i] = keycode; - queueCurrentReportData(); return; } } @@ -140,19 +134,22 @@ uint8_t modifier = toModifierBit(keycode); if (modifier) { inputReportData.data.modifier &= ~modifier; - queueCurrentReportData(); return; } for (int i = 0; i < 6; i++) { if (inputReportData.data.keycode[i] == keycode) { inputReportData.data.keycode[i] = 0; - queueCurrentReportData(); return; } } } + void queueCurrentReportData() { + inputReportBuffer.push(inputReportData); + startReportTicker(); + } + uint8_t toModifierBit(uint8_t keycode) const { switch (keycode) { case KEY_LeftControl: return MODIFIER_LEFT_CONTROL; @@ -179,13 +176,10 @@ virtual void sendCallback(void) { // do not call printf in this function... it cause BLE_STACK_BUSY - InputReportData data; - if (isSending) { - data = inputReportDataSending; - } else { - if (!inputReportBuffer.pop(data)) { + if (!isSending) { + if (!inputReportBuffer.pop(inputReportDataSending)) { if (isKeyPressed()) { - data = inputReportData; + inputReportDataSending = inputReportData; } else { stopReportTicker(); return; @@ -195,14 +189,13 @@ static uint8_t busyCount = 0; isSending = true; - ble_error_t error = HIDServiceBase::send(data.raw); + ble_error_t error = HIDServiceBase::send(inputReportDataSending.raw); if (error == BLE_STACK_BUSY) { if (busyCount++ > 10) { busyCount = 0; printf("BLE_STACK_BUSY is over 10-times stop\r\n"); stopReportTicker(); } - inputReportDataSending = data; // retry after return; }