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
				
			
		
							
								
								
									
										26
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										26
									
								
								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)
 | 
				
			||||||
| 
						 | 
					@ -198,10 +204,28 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
 | 
					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
 | 
						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)
 | 
				
			||||||
| 
						 | 
					@ -167,11 +170,15 @@ MATRIX_LOOP_END:
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef SERIAL_MOUSE_ENABLE
 | 
					#ifdef SERIAL_MOUSE_ENABLE
 | 
				
			||||||
        serial_mouse_task();
 | 
					    serial_mouse_task();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef ADB_MOUSE_ENABLE
 | 
					#ifdef ADB_MOUSE_ENABLE
 | 
				
			||||||
        adb_mouse_task();
 | 
					    adb_mouse_task();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef SERIAL_LINK_ENABLE
 | 
				
			||||||
 | 
						serial_link_update();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // update LED
 | 
					    // update LED
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue