]> git.donarmstrong.com Git - tmk_firmware.git/blobdiff - protocol/mbed/HIDKeyboard.cpp
Add LED indicator support in mbed
[tmk_firmware.git] / protocol / mbed / HIDKeyboard.cpp
index f40c2d2f2ab57a6b8ae4324f7f8ec6736b0079e8..947077cd2453c64ad1bbad9ef3beaed33734608d 100644 (file)
@@ -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;
+            }
+        }
+    }
+}