#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,
/* 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);
// }
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);
/* 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);
}
}