summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2016-07-06 15:48:58 +0200
committerGitHub <noreply@github.com>2016-07-06 15:48:58 +0200
commit19f480992c015aec0a15dca43e740bad8b7834e6 (patch)
tree2d1470d076017af6d089a00f4bb317abdb331346
parentc6d671e54c249497b5c01ad9badaa50425f394f9 (diff)
parente5726b017a9de2922ea923818c6e215600f68a85 (diff)
downloadqmk_firmware-19f480992c015aec0a15dca43e740bad8b7834e6.tar.gz
qmk_firmware-19f480992c015aec0a15dca43e740bad8b7834e6.tar.xz
Merge pull request #487 from fredizzimo/serial_link_ergodox
Integrate serial link support for ChibiOS and Infinity Ergodox
-rw-r--r--Makefile26
-rw-r--r--keyboards/infinity_ergodox/Makefile1
-rw-r--r--keyboards/infinity_ergodox/infinity_ergodox.c10
-rw-r--r--tmk_core/common.mk9
-rw-r--r--tmk_core/common/keyboard.c11
-rw-r--r--tmk_core/protocol/chibios/main.c30
6 files changed, 81 insertions, 6 deletions
diff --git a/Makefile b/Makefile
index c285dabad..7c00ce2cc 100644
--- a/Makefile
+++ b/Makefile
@@ -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)
@@ -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
diff --git a/keyboards/infinity_ergodox/Makefile b/keyboards/infinity_ergodox/Makefile
index fb21aae5e..efa32e037 100644
--- a/keyboards/infinity_ergodox/Makefile
+++ b/keyboards/infinity_ergodox/Makefile
@@ -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
diff --git a/keyboards/infinity_ergodox/infinity_ergodox.c b/keyboards/infinity_ergodox/infinity_ergodox.c
index 34aded1a7..85054775e 100644
--- a/keyboards/infinity_ergodox/infinity_ergodox.c
+++ b/keyboards/infinity_ergodox/infinity_ergodox.c
@@ -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);
+}
diff --git a/tmk_core/common.mk b/tmk_core/common.mk
index d71fba9bc..5bae0d762 100644
--- a/tmk_core/common.mk
+++ b/tmk_core/common.mk
@@ -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)
diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c
index 81df8eb73..3a1262a9f 100644
--- a/tmk_core/common/keyboard.c
+++ b/tmk_core/common/keyboard.c
@@ -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
diff --git a/tmk_core/protocol/chibios/main.c b/tmk_core/protocol/chibios/main.c
index 54bb6a8f5..aeb11752f 100644
--- a/tmk_core/protocol/chibios/main.c
+++ b/tmk_core/protocol/chibios/main.c
@@ -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()) {