mirror of
https://github.com/qmk/qmk_firmware
synced 2024-11-19 03:36:28 +00:00
Merge pull request #487 from fredizzimo/serial_link_ergodox
Integrate serial link support for ChibiOS and Infinity Ergodox
This commit is contained in:
commit
19f480992c
6 changed files with 81 additions and 6 deletions
24
Makefile
24
Makefile
|
@ -59,6 +59,12 @@ ifndef KEYBOARD
|
||||||
KEYBOARD=planck
|
KEYBOARD=planck
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
MASTER ?= left
|
||||||
|
ifdef master
|
||||||
|
MASTER = $(master)
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
# converts things to keyboards/subproject
|
# converts things to keyboards/subproject
|
||||||
ifneq (,$(findstring /,$(KEYBOARD)))
|
ifneq (,$(findstring /,$(KEYBOARD)))
|
||||||
TEMP:=$(KEYBOARD)
|
TEMP:=$(KEYBOARD)
|
||||||
|
@ -202,6 +208,24 @@ ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
|
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
|
||||||
|
SERIAL_DIR = $(QUANTUM_DIR)/serial_link
|
||||||
|
SERIAL_PATH = $(QUANTUM_PATH)/serial_link
|
||||||
|
SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c)
|
||||||
|
SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
|
||||||
|
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
|
||||||
|
OPT_DEFS += -DSERIAL_LINK_ENABLE
|
||||||
|
VAPTH += $(SERIAL_PATH)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(MASTER),right)
|
||||||
|
OPT_DEFS += -DMASTER_IS_ON_RIGHT
|
||||||
|
else
|
||||||
|
ifneq ($(MASTER),left)
|
||||||
|
$(error MASTER does not have a valid value(left/right))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
# Optimize size but this may cause error "relocation truncated to fit"
|
# Optimize size but this may cause error "relocation truncated to fit"
|
||||||
#EXTRALDFLAGS = -Wl,--relax
|
#EXTRALDFLAGS = -Wl,--relax
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,7 @@ COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
||||||
CUSTOM_MATRIX ?= yes # Custom matrix file
|
CUSTOM_MATRIX ?= yes # Custom matrix file
|
||||||
|
SERIAL_LINK_ENABLE = yes
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
|
|
|
@ -1 +1,11 @@
|
||||||
#include "infinity_ergodox.h"
|
#include "infinity_ergodox.h"
|
||||||
|
#include "ch.h"
|
||||||
|
#include "hal.h"
|
||||||
|
#include "serial_link/system/serial_link.h"
|
||||||
|
|
||||||
|
void init_serial_link_hal(void) {
|
||||||
|
PORTA->PCR[1] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(2);
|
||||||
|
PORTA->PCR[2] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(2);
|
||||||
|
PORTE->PCR[0] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(3);
|
||||||
|
PORTE->PCR[1] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(3);
|
||||||
|
}
|
||||||
|
|
|
@ -97,6 +97,15 @@ ifeq ($(strip $(KEYMAP_SECTION_ENABLE)), yes)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(MASTER),right)
|
||||||
|
OPT_DEFS += -DMASTER_IS_ON_RIGHT
|
||||||
|
else
|
||||||
|
ifneq ($(MASTER),left)
|
||||||
|
$(error MASTER does not have a valid value(left/right))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
# Version string
|
# Version string
|
||||||
OPT_DEFS += -DVERSION=$(shell (git describe --always --dirty || echo 'unknown') 2> /dev/null)
|
OPT_DEFS += -DVERSION=$(shell (git describe --always --dirty || echo 'unknown') 2> /dev/null)
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
Loading…
Reference in a new issue