]> git.friedersdorff.com Git - max/tmk_keyboard.git/commitdiff
Small updates.
authorflabbergast <s3+flabbergast@sdfeu.org>
Tue, 8 Sep 2015 18:22:00 +0000 (19:22 +0100)
committerflabbergast <s3+flabbergast@sdfeu.org>
Tue, 8 Sep 2015 18:22:00 +0000 (19:22 +0100)
tmk_core/protocol/chibios/README.md
tmk_core/protocol/chibios/main.c
tmk_core/protocol/chibios/usb_main.c

index 38fd495e2145f5cdc77162d26203b4edd82f6a4d..6fbc7c6eae2325af51893d715846add27b8fe24f 100644 (file)
@@ -8,16 +8,17 @@ Also pay attention to `-O0` (enabled for debugging); for deployment use `-O2`.
 - USB string descriptors are a mess. I did not find a way to cleanly generate the right structures from actual strings, so the definitions in individual keyboards' `config.h` are ugly as heck.
 - There are some random constants left so far, e.g. 5ms sleep between calling `keyboard_task` in `main.c`. There should be no such in `usb_main.c`. Everything is based on timers/interrupts/kernel scheduling (well except `keyboard_task`), so no periodically called things (again, except `keyboard_task`, which is just how TMK is designed).
 - It is easy to add some code for testing (e.g. blink LED, do stuff on button press, etc...) - just create another thread in `main.c`, it will run independently of the keyboard business.
+- Jumping to bootloader works, but it is not entirely pleasant, since it is very much MCU dependent. So, one needs to dig out the right address to jump to, and pass it to the compiler in the `Makefile`. Also, a patch to upstream ChibiOS is needed (supplied), because it `ResetHandler` needs adjusting.
 - The USB stack works pretty completely; however there are bits of other TMK stuff that are not done yet:
 
 ### Immediate todo
 
-- suspend / sleep led
+- suspend
+- sleep led
 
 ### Missing / not working (TMK vs ChibiOS bits)
 
 - eeprom / bootmagic (will be chip dependent)
-- bootloader jump (chip dependent)
 
 ### Tried with
 
index 0d79a91f5c0895bcba5923b6af4a482fc6aaaf2e..6b4ec350a40e5b1b648bd602328489d6bcec8e16 100644 (file)
@@ -76,7 +76,7 @@ int main(void) {
   host_set_driver(&chibios_driver);
 
 #ifdef SLEEP_LED_ENABLE
-    sleep_led_init();
+  sleep_led_init();
 #endif
 
   print("Keyboard start.\n");
index b10e5daaf55a7a8989baa1c270af8529cb5e68e5..f8a31593b039e373dc1fe8a029d6fcbc58f58e08 100644 (file)
 
 #include "usb_main.h"
 
+#include "debug.h"
+#ifdef SLEEP_LED_ENABLE
+#include "sleep_led.h"
+#endif
+
 /* ---------------------------------------------------------
  *       Global interface variables and declarations
  * ---------------------------------------------------------
@@ -752,6 +757,7 @@ static const USBEndpointConfig nkro_ep_config = {
 static void usb_event_cb(USBDriver *usbp, usbevent_t event) {
   switch(event) {
   case USB_EVENT_RESET:
+    //TODO: from ISR! print("[R]");
     return;
 
   case USB_EVENT_ADDRESS:
@@ -778,9 +784,21 @@ static void usb_event_cb(USBDriver *usbp, usbevent_t event) {
     return;
 
   case USB_EVENT_SUSPEND:
+    //TODO: from ISR! print("[S]");
+    //TODO: signal suspend?
+#ifdef SLEEP_LED_ENABLE
+    sleep_led_enable();
+#endif /* SLEEP_LED_ENABLE */
     return;
 
   case USB_EVENT_WAKEUP:
+    //TODO: from ISR! print("[W]");
+    //TODO: suspend_wakeup_init();
+#ifdef SLEEP_LED_ENABLE
+    sleep_led_disable();
+    // NOTE: converters may not accept this
+    led_set(host_keyboard_leds());
+#endif /* SLEEP_LED_ENABLE */
     return;
 
   case USB_EVENT_STALLED: