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
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
MASTER ?= left
 | 
			
		||||
ifdef master
 | 
			
		||||
	MASTER = $(master)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# converts things to keyboards/subproject
 | 
			
		||||
ifneq (,$(findstring /,$(KEYBOARD)))
 | 
			
		||||
	TEMP:=$(KEYBOARD)
 | 
			
		||||
| 
						 | 
				
			
			@ -202,6 +208,24 @@ ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
 | 
			
		|||
	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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			@ -174,6 +177,10 @@ MATRIX_LOOP_END:
 | 
			
		|||
    adb_mouse_task();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef SERIAL_LINK_ENABLE
 | 
			
		||||
	serial_link_update();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    // update LED
 | 
			
		||||
    if (led_status != host_keyboard_leds()) {
 | 
			
		||||
        led_status = host_keyboard_leds();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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()) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue