1
0
Fork 0

Enable serial_link support for ChibiOS

This commit is contained in:
Fred Sundvik 2016-07-06 15:22:34 +03:00
parent a7e3e4e652
commit 4b45deb652
3 changed files with 37 additions and 6 deletions

View file

@ -208,7 +208,7 @@ ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c) SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c)
SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c) SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC)) SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
OPT_DEFS += -DUSE_SERIAL_LINK OPT_DEFS += -DSERIAL_LINK_ENABLE
VAPTH += $(SERIAL_PATH) VAPTH += $(SERIAL_PATH)
endif endif

View file

@ -49,6 +49,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
# include "rgblight.h" # include "rgblight.h"
#endif #endif
#ifdef SERIAL_LINK_ENABLE
# include "serial_link/system/serial_link.h"
#endif
#ifdef MATRIX_HAS_GHOST #ifdef MATRIX_HAS_GHOST
static bool has_ghost_in_row(uint8_t row) static bool has_ghost_in_row(uint8_t row)
@ -174,6 +177,10 @@ MATRIX_LOOP_END:
adb_mouse_task(); adb_mouse_task();
#endif #endif
#ifdef SERIAL_LINK_ENABLE
serial_link_update();
#endif
// update LED // update LED
if (led_status != host_keyboard_leds()) { if (led_status != host_keyboard_leds()) {
led_status = host_keyboard_leds(); led_status = host_keyboard_leds();

View file

@ -35,6 +35,9 @@
#ifdef SLEEP_LED_ENABLE #ifdef SLEEP_LED_ENABLE
#include "sleep_led.h" #include "sleep_led.h"
#endif #endif
#ifdef SERIAL_LINK_ENABLE
#include "serial_link/system/serial_link.h"
#endif
#include "suspend.h" #include "suspend.h"
@ -98,9 +101,27 @@ int main(void) {
/* init printf */ /* init printf */
init_printf(NULL,sendchar_pf); init_printf(NULL,sendchar_pf);
/* Wait until the USB is active */ #ifdef SERIAL_LINK_ENABLE
while(USB_DRIVER.state != USB_ACTIVE) init_serial_link();
#endif
host_driver_t* driver = NULL;
/* Wait until the USB or serial link is active */
while (true) {
if(USB_DRIVER.state == USB_ACTIVE) {
driver = &chibios_driver;
break;
}
#ifdef SERIAL_LINK_ENABLE
if(is_serial_link_connected()) {
driver = get_serial_link_driver();
break;
}
serial_link_update();
#endif
chThdSleepMilliseconds(50); chThdSleepMilliseconds(50);
}
/* Do need to wait here! /* Do need to wait here!
* Otherwise the next print might start a transfer on console EP * Otherwise the next print might start a transfer on console EP
@ -113,7 +134,7 @@ int main(void) {
/* init TMK modules */ /* init TMK modules */
keyboard_init(); keyboard_init();
host_set_driver(&chibios_driver); host_set_driver(driver);
#ifdef SLEEP_LED_ENABLE #ifdef SLEEP_LED_ENABLE
sleep_led_init(); sleep_led_init();
@ -128,6 +149,9 @@ int main(void) {
print("[s]"); print("[s]");
while(USB_DRIVER.state == USB_SUSPENDED) { while(USB_DRIVER.state == USB_SUSPENDED) {
/* Do this in the suspended state */ /* Do this in the suspended state */
#ifdef SERIAL_LINK_ENABLE
serial_link_update();
#endif
suspend_power_down(); // on AVR this deep sleeps for 15ms suspend_power_down(); // on AVR this deep sleeps for 15ms
/* Remote wakeup */ /* Remote wakeup */
if((USB_DRIVER.status & 2) && suspend_wakeup_condition()) { if((USB_DRIVER.status & 2) && suspend_wakeup_condition()) {