~ruther/qmk_firmware

7d692c492ca999edd827477b914ae38ce43bf519 — tmk 12 years ago 6ccea74
Fix USB initilaize on LUFA

- Add print messages of USB intialize procesure.
- call out sei() in earlier stage. LUFA API doc of USB_Init() says:
interrupts must be enabled within 500ms ... to ensure that the host does
not time out whilst enumerating the device
- remove matrix_init() from suspend_wakeup_init(). It is not needed in
  fact and if matrix_init() takes long time to initialize it prevents
host emnumerating the device.
3 files changed, 7 insertions(+), 6 deletions(-)

M common/keyboard.c
M common/suspend.c
M protocol/lufa/lufa.c
M common/keyboard.c => common/keyboard.c +0 -3
@@ 54,9 54,6 @@ static bool has_ghost_in_row(uint8_t row)

void keyboard_init(void)
{
    // TODO: configuration of sendchar impl
    print_set_sendchar(sendchar);

    timer_init();
    matrix_init();
#ifdef PS2_MOUSE_ENABLE

M common/suspend.c => common/suspend.c +1 -2
@@ 51,8 51,7 @@ bool suspend_wakeup_condition(void)
// run immediately after wakeup
void suspend_wakeup_init(void)
{
    // clear matrix and keyboard state
    matrix_init();
    // clear keyboard state
    clear_keyboard();
#ifdef BACKLIGHT_ENABLE
    backlight_init();

M protocol/lufa/lufa.c => protocol/lufa/lufa.c +6 -1
@@ 531,19 531,24 @@ static void SetupHardware(void)

    // for Console_Task
    USB_Device_EnableSOFEvents();
    print_set_sendchar(sendchar);
}

int main(void)  __attribute__ ((weak));
int main(void)
{
    SetupHardware();
    sei();
    while (USB_DeviceState != DEVICE_STATE_Configured) ;
    print("USB configured.\n");

    keyboard_init();
    host_set_driver(&lufa_driver);
#ifdef SLEEP_LED_ENABLE
    sleep_led_init();
#endif
    sei();

    print("Keyboard start.\n");
    while (1) {
        while (USB_DeviceState == DEVICE_STATE_Suspended) {
            suspend_power_down();