~ruther/qmk_firmware

b4a91ecf4e46ee533563fd759e26dd249bf6b4de — tmk 11 years ago 4c8e0fd
Add LED indicator support in mbed
3 files changed, 35 insertions(+), 16 deletions(-)

M protocol/mbed/HIDKeyboard.cpp
M protocol/mbed/HIDKeyboard.h
M protocol/mbed/mbed_driver.cpp
M protocol/mbed/HIDKeyboard.cpp => protocol/mbed/HIDKeyboard.cpp +30 -15
@@ 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;
            }
        }
    }
}

M protocol/mbed/HIDKeyboard.h => protocol/mbed/HIDKeyboard.h +4 -0
@@ 11,6 11,7 @@ public:
    HIDKeyboard(uint16_t vendor_id = 0xFEED, uint16_t product_id = 0xabed, uint16_t product_release = 0x0001);

    bool sendReport(report_keyboard_t report);
    uint8_t leds(void);
protected:
    uint16_t reportLength;
    virtual bool USBCallback_setConfiguration(uint8_t configuration);


@@ 22,6 23,9 @@ protected:
    virtual uint8_t * configurationDesc();
    //virtual uint8_t * deviceDesc();
    virtual bool USBCallback_request();
    virtual void USBCallback_requestCompleted(uint8_t * buf, uint32_t length);
private:
    uint8_t led_state;
};

#endif

M protocol/mbed/mbed_driver.cpp => protocol/mbed/mbed_driver.cpp +1 -1
@@ 24,7 24,7 @@ host_driver_t mbed_driver = {

static uint8_t keyboard_leds(void)
{
    return 0;
    return keyboard.leds();
}
static void send_keyboard(report_keyboard_t *report)
{