]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - tmk_core/protocol/chibios/main.c
STM32 EEPROM Emulation (#3741)
[qmk_firmware.git] / tmk_core / protocol / chibios / main.c
index b0eb9aef81cc06e4e3f2c0127f7dc85c5a00e9c8..568c1edb28772f576c0480743770a5dd0b30bea0 100644 (file)
 #ifdef VISUALIZER_ENABLE
 #include "visualizer/visualizer.h"
 #endif
+#ifdef MIDI_ENABLE
+#include "qmk_midi.h"
+#endif
+#ifdef STM32F303xC
+#include "eeprom_stm32.h"
+#endif
 #include "suspend.h"
-
+#include "wait.h"
 
 /* -------------------------
  *   TMK host driver defs
@@ -65,24 +71,35 @@ host_driver_t chibios_driver = {
   send_consumer
 };
 
+#ifdef VIRTSER_ENABLE
+void virtser_task(void);
+#endif
+
+#ifdef RAW_HID_ENABLE
+void raw_hid_task(void);
+#endif
+
+#ifdef CONSOLE_ENABLE
+void console_task(void);
+#endif
 
 /* TESTING
  * Amber LED blinker thread, times are in milliseconds.
  */
 /* 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) {
+// static THD_WORKING_AREA(waThread1, 128);
+// static THD_FUNCTION(Thread1, arg) {
+
 //   (void)arg;
-//   chRegSetThreadName("blinkOrange");
-//   while(true) {
-//     if(blinkLed) {
-//       blinkLed = 0;
-//       palSetPad(TEENSY_PIN13_IOPORT, TEENSY_PIN13);
-//       chThdSleepMilliseconds(100);
-//       palClearPad(TEENSY_PIN13_IOPORT, TEENSY_PIN13);
-//     }
-//     chThdSleepMilliseconds(100);
+//   chRegSetThreadName("blinker");
+//   while (true) {
+//     systime_t time;
+
+//     time = USB_DRIVER.state == USB_ACTIVE ? 250 : 500;
+//     palClearLine(LINE_CAPS_LOCK);
+//     chSysPolledDelayX(MS2RTC(STM32_HCLK, time));
+//     palSetLine(LINE_CAPS_LOCK);
+//     chSysPolledDelayX(MS2RTC(STM32_HCLK, time));
 //   }
 // }
 
@@ -95,8 +112,12 @@ int main(void) {
   halInit();
   chSysInit();
 
+#ifdef STM32F303xC
+  EEPROM_init();
+#endif
+
   // TESTING
-  // chThdCreateStatic(waBlinkerThread, sizeof(waBlinkerThread), NORMALPRIO, blinkerThread, NULL);
+  // chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
 
   /* Init USB */
   init_usb_driver(&USB_DRIVER);
@@ -104,6 +125,10 @@ int main(void) {
   /* init printf */
   init_printf(NULL,sendchar_pf);
 
+#ifdef MIDI_ENABLE
+  setup_midi();
+#endif
+
 #ifdef SERIAL_LINK_ENABLE
   init_serial_link();
 #endif
@@ -128,7 +153,7 @@ int main(void) {
     }
     serial_link_update();
 #endif
-    chThdSleepMilliseconds(50);
+    wait_ms(50);
   }
 
   /* Do need to wait here!
@@ -136,7 +161,7 @@ int main(void) {
    * before the USB is completely ready, which sometimes causes
    * HardFaults.
    */
-  chThdSleepMilliseconds(50);
+  wait_ms(50);
 
   print("USB configured.\n");
 
@@ -165,8 +190,8 @@ int main(void) {
 #endif
         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);
+        if(suspend_wakeup_condition()) {
+          usbWakeupHost(&USB_DRIVER);
         }
       }
       /* Woken up */
@@ -182,5 +207,14 @@ int main(void) {
     }
 
     keyboard_task();
+#ifdef CONSOLE_ENABLE
+    console_task();
+#endif
+#ifdef VIRTSER_ENABLE
+    virtser_task();
+#endif
+#ifdef RAW_HID_ENABLE
+    raw_hid_task();
+#endif
   }
 }