Browse Source

Add LED indicator support in mbed

ledmap
tmk 10 years ago
parent
commit
b4a91ecf4e
3 changed files with 35 additions and 16 deletions
  1. 30
    15
      protocol/mbed/HIDKeyboard.cpp
  2. 4
    0
      protocol/mbed/HIDKeyboard.h
  3. 1
    1
      protocol/mbed/mbed_driver.cpp

+ 30
- 15
protocol/mbed/HIDKeyboard.cpp View File

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


// 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)
{
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->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;
}
}
}
}

+ 4
- 0
protocol/mbed/HIDKeyboard.h View File

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);
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

+ 1
- 1
protocol/mbed/mbed_driver.cpp View File



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)
{ {