]> git.friedersdorff.com Git - max/tmk_keyboard.git/blobdiff - tmk_core/protocol/lufa/lufa.c
ibmpc_usb: Add prebuilt firmware files
[max/tmk_keyboard.git] / tmk_core / protocol / lufa / lufa.c
index 991c2719da016d91ebe1fbe11f24eef56010d74b..32bc698109b577537ca14f1c144b99232ee2ccef 100644 (file)
@@ -642,7 +642,7 @@ int main(void)
     print_set_sendchar(sendchar);
     host_set_driver(&lufa_driver);
 
-    print("\n\nKeyboard init.\n");
+    print("\n\nTMK:" STR(TMK_VERSION) "/LUFA\n\n");
     hook_early_init();
     keyboard_setup();
     setup_usb();
@@ -654,6 +654,7 @@ int main(void)
 
     keyboard_init();
 
+#ifndef NO_USB_STARTUP_WAIT_LOOP
     /* wait for USB startup */
     while (USB_DeviceState != DEVICE_STATE_Configured) {
 #if defined(INTERRUPT_CONTROL_ENDPOINT)
@@ -661,17 +662,20 @@ int main(void)
 #else
         USB_USBTask();
 #endif
-        matrix_scan();
+        hook_usb_startup_wait_loop();
     }
     print("\nUSB configured.\n");
+#endif
 
     hook_late_init();
 
     print("\nKeyboard start.\n");
     while (1) {
+#ifndef NO_USB_SUSPEND_LOOP
         while (USB_DeviceState == DEVICE_STATE_Suspended) {
             hook_usb_suspend_loop();
         }
+#endif
 
         keyboard_task();
 
@@ -697,12 +701,12 @@ static uint8_t _led_stats = 0;
  __attribute__((weak))
 void hook_usb_suspend_entry(void)
 {
-    // Turn LED off to save power
-    // Set 0 with putting aside status before suspend and restore
-    // it after wakeup, then LED is updated at keyboard_task() in main loop
+    // Turn off LED to save power and keep its status to resotre it later.
+    // LED status will be updated by keyboard_task() in main loop hopefully.
     _led_stats = keyboard_led_stats;
     keyboard_led_stats = 0;
-    led_set(keyboard_led_stats);
+
+    // Calling long task here can prevent USB state transition
 
     matrix_clear();
     clear_keyboard();
@@ -731,10 +735,11 @@ void hook_usb_wakeup(void)
     sleep_led_disable();
 #endif
 
-    // Restore LED status
-    // BIOS/grub won't recognize/enumerate if led_set() takes long(around 40ms?)
-    // Converters fall into the case and miss wakeup event(timeout to reply?) in the end.
-    //led_set(host_keyboard_leds());
-    // Instead, restore stats and update at keyboard_task() in main loop
+    // Restore LED status and update at keyboard_task() in main loop
     keyboard_led_stats = _led_stats;
+
+    // Calling long task here can prevent USB state transition
 }
+
+__attribute__((weak))
+void hook_usb_startup_wait_loop(void) {}