~ruther/qmk_firmware

4b45deb652045aac73e5fdd7412a73bcef19c0c8 — Fred Sundvik 9 years ago a7e3e4e
Enable serial_link support for ChibiOS
3 files changed, 37 insertions(+), 6 deletions(-)

M Makefile
M tmk_core/common/keyboard.c
M tmk_core/protocol/chibios/main.c
M Makefile => Makefile +1 -1
@@ 208,7 208,7 @@ ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
	SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c)
	SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
	SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
	OPT_DEFS += -DUSE_SERIAL_LINK
	OPT_DEFS += -DSERIAL_LINK_ENABLE
	VAPTH += $(SERIAL_PATH)
endif


M tmk_core/common/keyboard.c => tmk_core/common/keyboard.c +9 -2
@@ 49,6 49,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#ifdef RGBLIGHT_ENABLE
#   include "rgblight.h"
#endif
#ifdef SERIAL_LINK_ENABLE
#   include "serial_link/system/serial_link.h"
#endif

#ifdef MATRIX_HAS_GHOST
static bool has_ghost_in_row(uint8_t row)


@@ 167,11 170,15 @@ MATRIX_LOOP_END:
#endif

#ifdef SERIAL_MOUSE_ENABLE
        serial_mouse_task();
    serial_mouse_task();
#endif

#ifdef ADB_MOUSE_ENABLE
        adb_mouse_task();
    adb_mouse_task();
#endif

#ifdef SERIAL_LINK_ENABLE
	serial_link_update();
#endif

    // update LED

M tmk_core/protocol/chibios/main.c => tmk_core/protocol/chibios/main.c +27 -3
@@ 35,6 35,9 @@
#ifdef SLEEP_LED_ENABLE
#include "sleep_led.h"
#endif
#ifdef SERIAL_LINK_ENABLE
#include "serial_link/system/serial_link.h"
#endif
#include "suspend.h"




@@ 98,9 101,27 @@ int main(void) {
  /* init printf */
  init_printf(NULL,sendchar_pf);

  /* Wait until the USB is active */
  while(USB_DRIVER.state != USB_ACTIVE)
#ifdef SERIAL_LINK_ENABLE
  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);
  }

  /* Do need to wait here!
   * Otherwise the next print might start a transfer on console EP


@@ 113,7 134,7 @@ int main(void) {

  /* init TMK modules */
  keyboard_init();
  host_set_driver(&chibios_driver);
  host_set_driver(driver);

#ifdef SLEEP_LED_ENABLE
  sleep_led_init();


@@ 128,6 149,9 @@ int main(void) {
      print("[s]");
      while(USB_DRIVER.state == USB_SUSPENDED) {
        /* Do this in the suspended state */
#ifdef SERIAL_LINK_ENABLE
        serial_link_update();
#endif
        suspend_power_down(); // on AVR this deep sleeps for 15ms
        /* Remote wakeup */
        if((USB_DRIVER.status & 2) && suspend_wakeup_condition()) {