Add LED indicator support in mbed
This commit is contained in:
parent
daf232794e
commit
54bb39d592
@ -17,6 +17,10 @@ bool HIDKeyboard::sendReport(report_keyboard_t report) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t HIDKeyboard::leds() {
|
||||||
|
return led_state;
|
||||||
|
}
|
||||||
|
|
||||||
bool HIDKeyboard::USBCallback_setConfiguration(uint8_t configuration) {
|
bool HIDKeyboard::USBCallback_setConfiguration(uint8_t configuration) {
|
||||||
if (configuration != DEFAULT_CONFIGURATION) {
|
if (configuration != DEFAULT_CONFIGURATION) {
|
||||||
return false;
|
return false;
|
||||||
@ -228,29 +232,40 @@ bool HIDKeyboard::USBCallback_request() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Process class-specific requests
|
// Process class-specific requests
|
||||||
/*
|
|
||||||
if (transfer->setup.bmRequestType.Type == CLASS_TYPE)
|
if (transfer->setup.bmRequestType.Type == CLASS_TYPE)
|
||||||
{
|
{
|
||||||
switch (transfer->setup.bRequest)
|
switch (transfer->setup.bRequest) {
|
||||||
{
|
|
||||||
case SET_REPORT:
|
case SET_REPORT:
|
||||||
// First byte will be used for report ID
|
// LED indicator
|
||||||
//outputReport.data[0] = transfer->setup.wValue & 0xff;
|
// TODO: check Interface and Report length?
|
||||||
//outputReport.length = transfer->setup.wLength + 1;
|
// if (transfer->setup.wIndex == INTERFACE_KEYBOAD) { }
|
||||||
outputReport.length = transfer->setup.wLength;
|
// if (transfer->setup.wLength == 1)
|
||||||
|
|
||||||
//transfer->remaining = sizeof(outputReport.data) - 1;
|
transfer->remaining = 1;
|
||||||
//transfer->ptr = &outputReport.data[1];
|
//transfer->ptr = ?? what ptr should be set when OUT(not used?)
|
||||||
transfer->remaining = sizeof(outputReport.data);
|
|
||||||
transfer->ptr = &outputReport.data[0];
|
|
||||||
transfer->direction = HOST_TO_DEVICE;
|
transfer->direction = HOST_TO_DEVICE;
|
||||||
transfer->notify = true;
|
transfer->notify = true; /* notify with USBCallback_requestCompleted */
|
||||||
success = true;
|
success = true;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
return success;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -11,6 +11,7 @@ public:
|
|||||||
HIDKeyboard(uint16_t vendor_id = 0xFEED, uint16_t product_id = 0xabed, uint16_t product_release = 0x0001);
|
HIDKeyboard(uint16_t vendor_id = 0xFEED, uint16_t product_id = 0xabed, uint16_t product_release = 0x0001);
|
||||||
|
|
||||||
bool sendReport(report_keyboard_t report);
|
bool sendReport(report_keyboard_t report);
|
||||||
|
uint8_t leds(void);
|
||||||
protected:
|
protected:
|
||||||
uint16_t reportLength;
|
uint16_t reportLength;
|
||||||
virtual bool USBCallback_setConfiguration(uint8_t configuration);
|
virtual bool USBCallback_setConfiguration(uint8_t configuration);
|
||||||
@ -22,6 +23,9 @@ protected:
|
|||||||
virtual uint8_t * configurationDesc();
|
virtual uint8_t * configurationDesc();
|
||||||
//virtual uint8_t * deviceDesc();
|
//virtual uint8_t * deviceDesc();
|
||||||
virtual bool USBCallback_request();
|
virtual bool USBCallback_request();
|
||||||
|
virtual void USBCallback_requestCompleted(uint8_t * buf, uint32_t length);
|
||||||
|
private:
|
||||||
|
uint8_t led_state;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -24,7 +24,7 @@ host_driver_t mbed_driver = {
|
|||||||
|
|
||||||
static uint8_t keyboard_leds(void)
|
static uint8_t keyboard_leds(void)
|
||||||
{
|
{
|
||||||
return 0;
|
return keyboard.leds();
|
||||||
}
|
}
|
||||||
static void send_keyboard(report_keyboard_t *report)
|
static void send_keyboard(report_keyboard_t *report)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user