~ruther/qmk_firmware

a5d4a1f3e1f09a79ad949e7e90199548992f0e37 — tmk 11 years ago c690268
Return when ready check loop is timeouted(Fix #115)
2 files changed, 27 insertions(+), 13 deletions(-)

M protocol/lufa/descriptor.c
M protocol/lufa/lufa.c
M protocol/lufa/descriptor.c => protocol/lufa/descriptor.c +2 -2
@@ 347,7 347,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
            .EndpointAddress        = (ENDPOINT_DIR_IN | MOUSE_IN_EPNUM),
            .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
            .EndpointSize           = MOUSE_EPSIZE,
            .PollingIntervalMS      = 0x01
            .PollingIntervalMS      = 0x0A
        },
#endif



@@ 389,7 389,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
            .EndpointAddress        = (ENDPOINT_DIR_IN | EXTRAKEY_IN_EPNUM),
            .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
            .EndpointSize           = EXTRAKEY_EPSIZE,
            .PollingIntervalMS      = 0x01
            .PollingIntervalMS      = 0x0A
        },
#endif


M protocol/lufa/lufa.c => protocol/lufa/lufa.c +25 -11
@@ 351,7 351,7 @@ static uint8_t keyboard_leds(void)

static void send_keyboard(report_keyboard_t *report)
{
    uint8_t timeout = 0;
    uint8_t timeout = 255;

    if (USB_DeviceState != DEVICE_STATE_Configured)
        return;


@@ 360,15 360,20 @@ static void send_keyboard(report_keyboard_t *report)
#ifdef NKRO_ENABLE
    if (keyboard_nkro) {
        Endpoint_SelectEndpoint(NKRO_IN_EPNUM);

        /* Check if write ready for a polling interval around 1ms */
        while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(4);
        if (!Endpoint_IsReadWriteAllowed()) return;
    }
    else
#endif
    {
        Endpoint_SelectEndpoint(KEYBOARD_IN_EPNUM);
    }

    /* Check if Keyboard Endpoint Ready for Read/Write */
    while (--timeout && !Endpoint_IsReadWriteAllowed()) ;
        /* Check if write ready for a polling interval around 10ms */
        while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
        if (!Endpoint_IsReadWriteAllowed()) return;
    }

    /* Write Keyboard Report Data */
#ifdef NKRO_ENABLE


@@ 391,7 396,7 @@ static void send_keyboard(report_keyboard_t *report)
static void send_mouse(report_mouse_t *report)
{
#ifdef MOUSE_ENABLE
    uint8_t timeout = 0;
    uint8_t timeout = 255;

    if (USB_DeviceState != DEVICE_STATE_Configured)
        return;


@@ 399,8 404,9 @@ static void send_mouse(report_mouse_t *report)
    /* Select the Mouse Report Endpoint */
    Endpoint_SelectEndpoint(MOUSE_IN_EPNUM);

    /* Check if Mouse Endpoint Ready for Read/Write */
    while (--timeout && !Endpoint_IsReadWriteAllowed()) ;
    /* Check if write ready for a polling interval around 10ms */
    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
    if (!Endpoint_IsReadWriteAllowed()) return;

    /* Write Mouse Report Data */
    Endpoint_Write_Stream_LE(report, sizeof(report_mouse_t), NULL);


@@ 412,7 418,7 @@ static void send_mouse(report_mouse_t *report)

static void send_system(uint16_t data)
{
    uint8_t timeout = 0;
    uint8_t timeout = 255;

    if (USB_DeviceState != DEVICE_STATE_Configured)
        return;


@@ 422,14 428,18 @@ static void send_system(uint16_t data)
        .usage = data
    };
    Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM);
    while (--timeout && !Endpoint_IsReadWriteAllowed()) ;

    /* Check if write ready for a polling interval around 10ms */
    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
    if (!Endpoint_IsReadWriteAllowed()) return;

    Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
    Endpoint_ClearIN();
}

static void send_consumer(uint16_t data)
{
    uint8_t timeout = 0;
    uint8_t timeout = 255;

    if (USB_DeviceState != DEVICE_STATE_Configured)
        return;


@@ 439,7 449,11 @@ static void send_consumer(uint16_t data)
        .usage = data
    };
    Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM);
    while (--timeout && !Endpoint_IsReadWriteAllowed()) ;

    /* Check if write ready for a polling interval around 10ms */
    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
    if (!Endpoint_IsReadWriteAllowed()) return;

    Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
    Endpoint_ClearIN();
}