Skip to content

Commit

Permalink
Merge pull request qmk#487 from fredizzimo/serial_link_ergodox
Browse files Browse the repository at this point in the history
Integrate serial link support for ChibiOS and Infinity Ergodox
  • Loading branch information
jackhumbert authored Jul 6, 2016
2 parents c6d671e + e5726b0 commit 19f4809
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 6 deletions.
26 changes: 25 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,12 @@ ifndef KEYBOARD
KEYBOARD=planck
endif

MASTER ?= left
ifdef master
MASTER = $(master)
endif


# converts things to keyboards/subproject
ifneq (,$(findstring /,$(KEYBOARD)))
TEMP:=$(KEYBOARD)
Expand Down Expand Up @@ -198,10 +204,28 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
endif

ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
OPT_DEFS += -DTAP_DANCE_ENABLE
OPT_DEFS += -DTAP_DANCE_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
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"
#EXTRALDFLAGS = -Wl,--relax

Expand Down
1 change: 1 addition & 0 deletions keyboards/infinity_ergodox/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ COMMAND_ENABLE ?= yes # Commands for debug and configuration
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
NKRO_ENABLE ?= yes # USB Nkey Rollover
CUSTOM_MATRIX ?= yes # Custom matrix file
SERIAL_LINK_ENABLE = yes

ifndef QUANTUM_DIR
include ../../Makefile
Expand Down
10 changes: 10 additions & 0 deletions keyboards/infinity_ergodox/infinity_ergodox.c
Original file line number Diff line number Diff line change
@@ -1 +1,11 @@
#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);
}
9 changes: 9 additions & 0 deletions tmk_core/common.mk
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,15 @@ ifeq ($(strip $(KEYMAP_SECTION_ENABLE)), yes)
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
OPT_DEFS += -DVERSION=$(shell (git describe --always --dirty || echo 'unknown') 2> /dev/null)

Expand Down
11 changes: 9 additions & 2 deletions tmk_core/common/keyboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -167,11 +170,15 @@ void keyboard_task(void)
#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
Expand Down
30 changes: 27 additions & 3 deletions tmk_core/protocol/chibios/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"


Expand Down Expand Up @@ -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
Expand All @@ -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();
Expand All @@ -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()) {
Expand Down

0 comments on commit 19f4809

Please sign in to comment.