]> git.friedersdorff.com Git - max/tmk_keyboard.git/blobdiff - tmk_core/protocol/chibios/main.c
Add maple mini code.
[max/tmk_keyboard.git] / tmk_core / protocol / chibios / main.c
index 7aec7e3e107f8ba1e82cf572ebd1557c10018c92..b62cfa9c57e8392131e652be40135b69a41ef376 100644 (file)
@@ -26,6 +26,8 @@
 #include "host_driver.h"
 #include "keyboard.h"
 #include "action.h"
+#include "action_util.h"
+#include "mousekey.h"
 #include "led.h"
 #include "sendchar.h"
 #include "debug.h"
  * -------------------------
  */
 
+/* declarations */
+uint8_t keyboard_leds(void);
+void send_keyboard(report_keyboard_t *report);
+void send_mouse(report_mouse_t *report);
+void send_system(uint16_t data);
+void send_consumer(uint16_t data);
+
+/* host struct */
 host_driver_t chibios_driver = {
   keyboard_leds,
   send_keyboard,
@@ -52,17 +62,18 @@ host_driver_t chibios_driver = {
 /* TESTING
  * Amber LED blinker thread, times are in milliseconds.
  */
-// uint8_t blinkLedState = 0;
-// static THD_WORKING_AREA(waThread1, 128);
-// static THD_FUNCTION(Thread1, arg) {
+/* set this variable to non-zero anywhere to blink once */
+// uint8_t blinkLed = 0;
+// static THD_WORKING_AREA(waBlinkerThread, 128);
+// static THD_FUNCTION(blinkerThread, arg) {
 //   (void)arg;
-//   chRegSetThreadName("blinker1");
+//   chRegSetThreadName("blinkOrange");
 //   while(true) {
-//     if(blinkLedState) {
-//       blinkLedState = 0;
-//       palSetPad(GPIOC, GPIOC_LED_ORANGE);
+//     if(blinkLed) {
+//       blinkLed = 0;
+//       palSetPad(TEENSY_PIN13_IOPORT, TEENSY_PIN13);
 //       chThdSleepMilliseconds(100);
-//       palClearPad(GPIOC, GPIOC_LED_ORANGE);
+//       palClearPad(TEENSY_PIN13_IOPORT, TEENSY_PIN13);
 //     }
 //     chThdSleepMilliseconds(100);
 //   }
@@ -77,12 +88,8 @@ int main(void) {
   halInit();
   chSysInit();
 
-  palSetPad(GPIOC, GPIOC_LED_BLUE);
-  chThdSleepMilliseconds(400);
-  palClearPad(GPIOC, GPIOC_LED_BLUE);
-
   // TESTING
-  // chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
+  // chThdCreateStatic(waBlinkerThread, sizeof(waBlinkerThread), NORMALPRIO, blinkerThread, NULL);
 
   /* Init USB */
   init_usb_driver(&USB_DRIVER);
@@ -108,9 +115,25 @@ int main(void) {
 
   /* Main loop */
   while(true) {
-    /* TODO: check for suspended event */
+
+    if(USB_DRIVER.state == USB_SUSPENDED) {
+      print("[s]");
+      while(USB_DRIVER.state == USB_SUSPENDED) {
+        /* Do this in the suspended state */
+        suspend_power_down(); // on AVR this deep sleeps for 15ms
+        /* Remote wakeup */
+        if((USB_DRIVER.status & 2) && suspend_wakeup_condition()) {
+          send_remote_wakeup(&USB_DRIVER);
+        }
+      }
+      /* Woken up */
+      // variables has been already cleared by the wakeup hook
+      send_keyboard_report();
+#ifdef MOUSEKEY_ENABLE
+      mousekey_send();
+#endif /* MOUSEKEY_ENABLE */
+    }
 
     keyboard_task();
-    chThdSleepMilliseconds(5);
   }
 }