|
|
@@ -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; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |