X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=protocol%2Fmbed%2FHIDKeyboard.cpp;h=947077cd2453c64ad1bbad9ef3beaed33734608d;hb=b4a91ecf4e46ee533563fd759e26dd249bf6b4de;hp=f40c2d2f2ab57a6b8ae4324f7f8ec6736b0079e8;hpb=4c8e0fd0bd1712421f957ec5e0ca16fc6bbb3856;p=tmk_firmware.git diff --git a/protocol/mbed/HIDKeyboard.cpp b/protocol/mbed/HIDKeyboard.cpp index f40c2d2..947077c 100644 --- a/protocol/mbed/HIDKeyboard.cpp +++ b/protocol/mbed/HIDKeyboard.cpp @@ -17,6 +17,10 @@ bool HIDKeyboard::sendReport(report_keyboard_t report) { return true; } +uint8_t HIDKeyboard::leds() { + return led_state; +} + bool HIDKeyboard::USBCallback_setConfiguration(uint8_t configuration) { if (configuration != DEFAULT_CONFIGURATION) { return false; @@ -228,29 +232,40 @@ bool HIDKeyboard::USBCallback_request() { } // Process class-specific requests -/* if (transfer->setup.bmRequestType.Type == CLASS_TYPE) { - switch (transfer->setup.bRequest) - { - case SET_REPORT: - // First byte will be used for report ID - //outputReport.data[0] = transfer->setup.wValue & 0xff; - //outputReport.length = transfer->setup.wLength + 1; - outputReport.length = transfer->setup.wLength; - - //transfer->remaining = sizeof(outputReport.data) - 1; - //transfer->ptr = &outputReport.data[1]; - transfer->remaining = sizeof(outputReport.data); - transfer->ptr = &outputReport.data[0]; + switch (transfer->setup.bRequest) { + case SET_REPORT: + // LED indicator + // TODO: check Interface and Report length? + // if (transfer->setup.wIndex == INTERFACE_KEYBOAD) { } + // if (transfer->setup.wLength == 1) + + transfer->remaining = 1; + //transfer->ptr = ?? what ptr should be set when OUT(not used?) transfer->direction = HOST_TO_DEVICE; - transfer->notify = true; + transfer->notify = true; /* notify with USBCallback_requestCompleted */ success = true; default: break; } } -*/ return success; } + +void HIDKeyboard::USBCallback_requestCompleted(uint8_t * buf, uint32_t length) +{ + if (length > 0) { + CONTROL_TRANSFER *transfer = getTransferPtr(); + if (transfer->setup.bmRequestType.Type == CLASS_TYPE) { + switch (transfer->setup.bRequest) { + case SET_REPORT: + led_state = buf[0]; + break; + default: + break; + } + } + } +}