First version of Infinity Ergodox
Mostly just adding the files from the fredizzimo repository. Still needs some fixing until it works
This commit is contained in:
		
							parent
							
								
									94d3159d9d
								
							
						
					
					
						commit
						74847a84f8
					
				
					 12 changed files with 1860 additions and 0 deletions
				
			
		
							
								
								
									
										385
									
								
								keyboards/infinity_ergodox/MEMO.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										385
									
								
								keyboards/infinity_ergodox/MEMO.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,385 @@
 | 
			
		|||
flabbergast's TMK/ChibiOS port
 | 
			
		||||
==============================
 | 
			
		||||
2015/10/16
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Build
 | 
			
		||||
-----
 | 
			
		||||
$ git clone -b chibios https://github.com/flabbergast/tmk_keyboard.git
 | 
			
		||||
 | 
			
		||||
$ cd tmk_keyboard
 | 
			
		||||
$ git submodule add -f -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
 | 
			
		||||
or
 | 
			
		||||
$ cd tmk_keyboard/tmk_core/tool/chibios
 | 
			
		||||
$ git clone -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
 | 
			
		||||
 | 
			
		||||
$ cd tmk_keyboard/keyboard/infinity_chibios
 | 
			
		||||
$ make
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Chibios Configuration
 | 
			
		||||
---------------------
 | 
			
		||||
halconf.h: for HAL configuration
 | 
			
		||||
    placed in project directory
 | 
			
		||||
    read in chibios/os/hal/hal.mk
 | 
			
		||||
    included in chibios/os/hal/include/hal.h
 | 
			
		||||
mcuconf.h: for MCU configuration
 | 
			
		||||
    placed in project directory
 | 
			
		||||
    included in halconf.h
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Chibios Term
 | 
			
		||||
------------
 | 
			
		||||
PAL = Port Abstraction Layer
 | 
			
		||||
    palWritePad
 | 
			
		||||
    palReadPad
 | 
			
		||||
    palSetPad
 | 
			
		||||
    chibios/os/hal/include/pal.h
 | 
			
		||||
 | 
			
		||||
LLD = Low Level Driver
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Makefile
 | 
			
		||||
--------
 | 
			
		||||
    #   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
 | 
			
		||||
    MCU_FAMILY = KINETIS
 | 
			
		||||
    MCU_SERIES = KL2x
 | 
			
		||||
 | 
			
		||||
    # - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
 | 
			
		||||
    #   or <this_dir>/ld/
 | 
			
		||||
    MCU_LDSCRIPT = MKL26Z64
 | 
			
		||||
 | 
			
		||||
    #  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
 | 
			
		||||
    MCU_STARTUP = kl2x
 | 
			
		||||
 | 
			
		||||
    # Board: it should exist either in <chibios>/os/hal/boards/
 | 
			
		||||
    #  or <this_dir>/boards
 | 
			
		||||
    BOARD = PJRC_TEENSY_LC
 | 
			
		||||
 | 
			
		||||
    MCU  = cortex-m0
 | 
			
		||||
 | 
			
		||||
    # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
 | 
			
		||||
    ARMV = 6
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
halconf.h
 | 
			
		||||
---------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
mcuconf.h
 | 
			
		||||
---------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
chconf.h
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ld script
 | 
			
		||||
---------
 | 
			
		||||
--- ../../tmk_core/tool/chibios/chibios/os/common/ports/ARMCMx/compilers/GCC/ld/MKL26Z64.ld     2015-10-15 09:08:58.732904304 +0900
 | 
			
		||||
+++ ld/MKL26Z64.ld      2015-10-15 08:48:06.430215496 +0900
 | 
			
		||||
@@ -27,7 +27,8 @@
 | 
			
		||||
 {
 | 
			
		||||
   flash0   :  org = 0x00000000,  len = 0xc0
 | 
			
		||||
   flashcfg :  org = 0x00000400,  len = 0x10
 | 
			
		||||
-  flash    :  org = 0x00000410,  len = 64k - 0x410
 | 
			
		||||
+  flash    :  org = 0x00000410,  len = 62k - 0x410
 | 
			
		||||
+  eeprom_emu : org = 0x0000F800, len = 2k
 | 
			
		||||
   ram      :  org = 0x1FFFF800,  len = 8k
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
@@ -35,6 +36,10 @@
 | 
			
		||||
 __ram_size__            = LENGTH(ram);
 | 
			
		||||
 __ram_end__             = __ram_start__ + __ram_size__;
 | 
			
		||||
 | 
			
		||||
+__eeprom_workarea_start__ = ORIGIN(eeprom_emu);
 | 
			
		||||
+__eeprom_workarea_size__  = LENGTH(eeprom_emu);
 | 
			
		||||
+__eeprom_workarea_end__   = __eeprom_workarea_start__ + __eeprom_workarea_size__;
 | 
			
		||||
+
 | 
			
		||||
 SECTIONS
 | 
			
		||||
 {
 | 
			
		||||
   . = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Configuration/Startup for Infinity 60%
 | 
			
		||||
--------------------------------------
 | 
			
		||||
Configuration:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Clock:
 | 
			
		||||
Inifinity   
 | 
			
		||||
    FEI(FLL Engaged Internal) mode with core clock:48MHz, bus clock:48MHz, flash clock:24MHz
 | 
			
		||||
    Clock dividor:
 | 
			
		||||
    SIM_CLKDIV1[OUTDIV1] = 0 divide-by-1 for core clock
 | 
			
		||||
    SIM_CLKDIV1[OUTDIV2] = 0 divide-by-1 for bus clock
 | 
			
		||||
    SIM_CLKDIV1[OUTDIV4] = 1 divide-by-2 for flash clock
 | 
			
		||||
    Internal reference clock:
 | 
			
		||||
    MCG_C1[IREFS] = 1 Internal Reference Select for clock source for FLL
 | 
			
		||||
    MCG_C1[IRCLKEN] = 1 Internal Reference Clock Enable
 | 
			
		||||
    FLL multipilication:
 | 
			
		||||
    MCG_C4[DMX32] = 1
 | 
			
		||||
    MCG_C4[DRST_DRS] = 01   FLL factor 1464 * 32.768kHz = 48MHz
 | 
			
		||||
 | 
			
		||||
chibios/os/hal/ports/KINETIS/K20x/hal_lld.c
 | 
			
		||||
    k20x_clock_init(): called in __early_init() defined in board.c
 | 
			
		||||
        disable watchdog and configure clock
 | 
			
		||||
 | 
			
		||||
        configurable macros:
 | 
			
		||||
        KINETIS_NO_INIT: whether init or not
 | 
			
		||||
        KINETIS_MCG_MODE: clock mode   
 | 
			
		||||
            KINETIS_MCG_MODE_FEI
 | 
			
		||||
            KINETIS_MCG_MODE_PEE
 | 
			
		||||
                hal/ports/KINETIS/K20x/hal_lld.h
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.h
 | 
			
		||||
    PALConfig pal_default_config
 | 
			
		||||
    boardInit()
 | 
			
		||||
    __early_init()
 | 
			
		||||
    macro definitions for board infos, freq and mcu type
 | 
			
		||||
 | 
			
		||||
chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.c
 | 
			
		||||
 | 
			
		||||
USB
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Startup
 | 
			
		||||
-------
 | 
			
		||||
    common/ports/ARMCMx/GCC/crt0_v[67]m.s
 | 
			
		||||
        Reset_Handler: startup code
 | 
			
		||||
    common/ports/ARMCMx/GCC/crt1.c
 | 
			
		||||
        __core_init(): weak
 | 
			
		||||
        __early_init(): weak
 | 
			
		||||
        __late_init(): weak
 | 
			
		||||
        __default_exit(): weak
 | 
			
		||||
            called from Reset_Handler of crt0
 | 
			
		||||
    common/ports/ARMCMx/GCC/vector.c
 | 
			
		||||
    common/ports/ARMCMx/GCC/ld/*.ld
 | 
			
		||||
 | 
			
		||||
chibios/os/common/ports/ARMCMx/compilers/GCC/
 | 
			
		||||
├── crt0_v6m.s
 | 
			
		||||
├── crt0_v7m.s
 | 
			
		||||
├── crt1.c
 | 
			
		||||
├── ld
 | 
			
		||||
│   ├── MK20DX128BLDR3.ld
 | 
			
		||||
│   ├── MK20DX128BLDR4.ld
 | 
			
		||||
│   ├── MK20DX128.ld
 | 
			
		||||
│   ├── MK20DX256.ld
 | 
			
		||||
│   ├── MKL25Z128.ld
 | 
			
		||||
│   ├── MKL26Z128.ld
 | 
			
		||||
│   ├── MKL26Z64.ld
 | 
			
		||||
│   └── STM32L476xG.ld
 | 
			
		||||
├── mk
 | 
			
		||||
│   ├── startup_k20x5.mk
 | 
			
		||||
│   ├── startup_k20x7.mk
 | 
			
		||||
│   ├── startup_k20x.mk
 | 
			
		||||
│   ├── startup_kl2x.mk
 | 
			
		||||
│   └── startup_stm32l4xx.mk
 | 
			
		||||
├── rules.ld
 | 
			
		||||
├── rules.mk
 | 
			
		||||
└── vectors.c
 | 
			
		||||
 | 
			
		||||
chibios/os/hal/
 | 
			
		||||
├── boards
 | 
			
		||||
│   ├── FREESCALE_FREEDOM_K20D50M
 | 
			
		||||
│   │   ├── board.c
 | 
			
		||||
│   │   ├── board.h
 | 
			
		||||
│   │   └── board.mk
 | 
			
		||||
│   ├── MCHCK_K20
 | 
			
		||||
│   │   ├── board.c
 | 
			
		||||
│   │   ├── board.h
 | 
			
		||||
│   │   └── board.mk
 | 
			
		||||
│   ├── PJRC_TEENSY_3
 | 
			
		||||
│   │   ├── board.c
 | 
			
		||||
│   │   ├── board.h
 | 
			
		||||
│   │   └── board.mk
 | 
			
		||||
│   ├── PJRC_TEENSY_3_1
 | 
			
		||||
│   │   ├── board.c
 | 
			
		||||
│   │   ├── board.h
 | 
			
		||||
│   │   └── board.mk
 | 
			
		||||
│   ├── PJRC_TEENSY_LC
 | 
			
		||||
│   │   ├── board.c
 | 
			
		||||
│   │   ├── board.h
 | 
			
		||||
│   │   └── board.mk
 | 
			
		||||
│   ├── readme.txt
 | 
			
		||||
│   ├── simulator
 | 
			
		||||
│   │   ├── board.c
 | 
			
		||||
│   │   ├── board.h
 | 
			
		||||
│   │   └── board.mk
 | 
			
		||||
│   ├── ST_NUCLEO_F030R8
 | 
			
		||||
│   │   ├── board.c
 | 
			
		||||
│   │   ├── board.h
 | 
			
		||||
│   │   ├── board.mk
 | 
			
		||||
│   │   └── cfg
 | 
			
		||||
│   │       └── board.chcfg
 | 
			
		||||
├── hal.mk
 | 
			
		||||
├── include
 | 
			
		||||
│   ├── adc.h
 | 
			
		||||
│   ├── can.h
 | 
			
		||||
│   ├── dac.h
 | 
			
		||||
│   ├── ext.h
 | 
			
		||||
│   ├── gpt.h
 | 
			
		||||
│   ├── hal_channels.h
 | 
			
		||||
│   ├── hal_files.h
 | 
			
		||||
│   ├── hal.h
 | 
			
		||||
│   ├── hal_ioblock.h
 | 
			
		||||
│   ├── hal_mmcsd.h
 | 
			
		||||
│   ├── hal_queues.h
 | 
			
		||||
│   ├── hal_streams.h
 | 
			
		||||
│   ├── i2c.h
 | 
			
		||||
│   ├── i2s.h
 | 
			
		||||
│   ├── icu.h
 | 
			
		||||
│   ├── mac.h
 | 
			
		||||
│   ├── mii.h
 | 
			
		||||
│   ├── mmc_spi.h
 | 
			
		||||
│   ├── pal.h
 | 
			
		||||
│   ├── pwm.h
 | 
			
		||||
│   ├── rtc.h
 | 
			
		||||
│   ├── sdc.h
 | 
			
		||||
│   ├── serial.h
 | 
			
		||||
│   ├── serial_usb.h
 | 
			
		||||
│   ├── spi.h
 | 
			
		||||
│   ├── st.h
 | 
			
		||||
│   ├── uart.h
 | 
			
		||||
│   └── usb.h
 | 
			
		||||
├── lib
 | 
			
		||||
│   └── streams
 | 
			
		||||
│       ├── chprintf.c
 | 
			
		||||
│       ├── chprintf.h
 | 
			
		||||
│       ├── memstreams.c
 | 
			
		||||
│       ├── memstreams.h
 | 
			
		||||
│       ├── nullstreams.c
 | 
			
		||||
│       └── nullstreams.h
 | 
			
		||||
├── osal
 | 
			
		||||
│   ├── nil
 | 
			
		||||
│   │   ├── osal.c
 | 
			
		||||
│   │   ├── osal.h
 | 
			
		||||
│   │   └── osal.mk
 | 
			
		||||
│   ├── os-less
 | 
			
		||||
│   │   └── ARMCMx
 | 
			
		||||
│   │       ├── osal.c
 | 
			
		||||
│   │       ├── osal.h
 | 
			
		||||
│   │       └── osal.mk
 | 
			
		||||
│   └── rt
 | 
			
		||||
│       ├── osal.c
 | 
			
		||||
│       ├── osal.h
 | 
			
		||||
│       └── osal.mk
 | 
			
		||||
├── ports
 | 
			
		||||
│   ├── AVR
 | 
			
		||||
│   ├── common
 | 
			
		||||
│   │   └── ARMCMx
 | 
			
		||||
│   │       ├── mpu.h
 | 
			
		||||
│   │       ├── nvic.c
 | 
			
		||||
│   │       └── nvic.h
 | 
			
		||||
│   ├── KINETIS
 | 
			
		||||
│   │   ├── K20x
 | 
			
		||||
│   │   │   ├── hal_lld.c
 | 
			
		||||
│   │   │   ├── hal_lld.h
 | 
			
		||||
│   │   │   ├── kinetis_registry.h
 | 
			
		||||
│   │   │   ├── platform.dox
 | 
			
		||||
│   │   │   ├── platform.mk
 | 
			
		||||
│   │   │   ├── pwm_lld.c
 | 
			
		||||
│   │   │   ├── pwm_lld.h
 | 
			
		||||
│   │   │   ├── spi_lld.c
 | 
			
		||||
│   │   │   └── spi_lld.h
 | 
			
		||||
│   │   ├── KL2x
 | 
			
		||||
│   │   │   ├── hal_lld.c
 | 
			
		||||
│   │   │   ├── hal_lld.h
 | 
			
		||||
│   │   │   ├── kinetis_registry.h
 | 
			
		||||
│   │   │   ├── platform.mk
 | 
			
		||||
│   │   │   ├── pwm_lld.c
 | 
			
		||||
│   │   │   └── pwm_lld.h
 | 
			
		||||
│   │   ├── LLD
 | 
			
		||||
│   │   │   ├── adc_lld.c
 | 
			
		||||
│   │   │   ├── adc_lld.h
 | 
			
		||||
│   │   │   ├── ext_lld.c
 | 
			
		||||
│   │   │   ├── ext_lld.h
 | 
			
		||||
│   │   │   ├── gpt_lld.c
 | 
			
		||||
│   │   │   ├── gpt_lld.h
 | 
			
		||||
│   │   │   ├── i2c_lld.c
 | 
			
		||||
│   │   │   ├── i2c_lld.h
 | 
			
		||||
│   │   │   ├── pal_lld.c
 | 
			
		||||
│   │   │   ├── pal_lld.h
 | 
			
		||||
│   │   │   ├── serial_lld.c
 | 
			
		||||
│   │   │   ├── serial_lld.h
 | 
			
		||||
│   │   │   ├── st_lld.c
 | 
			
		||||
│   │   │   ├── st_lld.h
 | 
			
		||||
│   │   │   ├── usb_lld.c
 | 
			
		||||
│   │   │   └── usb_lld.h
 | 
			
		||||
│   │   └── README.md
 | 
			
		||||
│   ├── LPC
 | 
			
		||||
│   ├── simulator
 | 
			
		||||
│   └── STM32
 | 
			
		||||
├── src
 | 
			
		||||
│   ├── adc.c
 | 
			
		||||
│   ├── can.c
 | 
			
		||||
│   ├── dac.c
 | 
			
		||||
│   ├── ext.c
 | 
			
		||||
│   ├── gpt.c
 | 
			
		||||
│   ├── hal.c
 | 
			
		||||
│   ├── hal_mmcsd.c
 | 
			
		||||
│   ├── hal_queues.c
 | 
			
		||||
│   ├── i2c.c
 | 
			
		||||
│   ├── i2s.c
 | 
			
		||||
│   ├── icu.c
 | 
			
		||||
│   ├── mac.c
 | 
			
		||||
│   ├── mmc_spi.c
 | 
			
		||||
│   ├── pal.c
 | 
			
		||||
│   ├── pwm.c
 | 
			
		||||
│   ├── rtc.c
 | 
			
		||||
│   ├── sdc.c
 | 
			
		||||
│   ├── serial.c
 | 
			
		||||
│   ├── serial_usb.c
 | 
			
		||||
│   ├── spi.c
 | 
			
		||||
│   ├── st.c
 | 
			
		||||
│   ├── uart.c
 | 
			
		||||
│   └── usb.c
 | 
			
		||||
└── templates
 | 
			
		||||
    ├── adc_lld.c
 | 
			
		||||
    ├── adc_lld.h
 | 
			
		||||
    ├── can_lld.c
 | 
			
		||||
    ├── can_lld.h
 | 
			
		||||
    ├── dac_lld.c
 | 
			
		||||
    ├── dac_lld.h
 | 
			
		||||
    ├── ext_lld.c
 | 
			
		||||
    ├── ext_lld.h
 | 
			
		||||
    ├── gpt_lld.c
 | 
			
		||||
    ├── gpt_lld.h
 | 
			
		||||
    ├── halconf.h
 | 
			
		||||
    ├── hal_lld.c
 | 
			
		||||
    ├── hal_lld.h
 | 
			
		||||
    ├── i2c_lld.c
 | 
			
		||||
    ├── i2c_lld.h
 | 
			
		||||
    ├── i2s_lld.c
 | 
			
		||||
    ├── i2s_lld.h
 | 
			
		||||
    ├── icu_lld.c
 | 
			
		||||
    ├── icu_lld.h
 | 
			
		||||
    ├── mac_lld.c
 | 
			
		||||
    ├── mac_lld.h
 | 
			
		||||
    ├── mcuconf.h
 | 
			
		||||
    ├── osal
 | 
			
		||||
    │   ├── osal.c
 | 
			
		||||
    │   ├── osal.h
 | 
			
		||||
    │   └── osal.mk
 | 
			
		||||
    ├── pal_lld.c
 | 
			
		||||
    ├── pal_lld.h
 | 
			
		||||
    ├── platform.mk
 | 
			
		||||
    ├── pwm_lld.c
 | 
			
		||||
    ├── pwm_lld.h
 | 
			
		||||
    ├── rtc_lld.c
 | 
			
		||||
    ├── rtc_lld.h
 | 
			
		||||
    ├── sdc_lld.c
 | 
			
		||||
    ├── sdc_lld.h
 | 
			
		||||
    ├── serial_lld.c
 | 
			
		||||
    ├── serial_lld.h
 | 
			
		||||
    ├── spi_lld.c
 | 
			
		||||
    ├── spi_lld.h
 | 
			
		||||
    ├── st_lld.c
 | 
			
		||||
    ├── st_lld.h
 | 
			
		||||
    ├── uart_lld.c
 | 
			
		||||
    ├── uart_lld.h
 | 
			
		||||
    ├── usb_lld.c
 | 
			
		||||
    └── usb_lld.h
 | 
			
		||||
							
								
								
									
										68
									
								
								keyboards/infinity_ergodox/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								keyboards/infinity_ergodox/Makefile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,68 @@
 | 
			
		|||
## chip/board settings
 | 
			
		||||
# - the next two should match the directories in
 | 
			
		||||
#   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
 | 
			
		||||
# - For Teensies, FAMILY = KINETIS and SERIES is either
 | 
			
		||||
#   KL2x (LC) or K20x (3.0,3.1,3.2).
 | 
			
		||||
# - For Infinity KB, SERIES = K20x
 | 
			
		||||
MCU_FAMILY = KINETIS
 | 
			
		||||
MCU_SERIES = K20x
 | 
			
		||||
 | 
			
		||||
# Linker script to use
 | 
			
		||||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
 | 
			
		||||
#   or <this_dir>/ld/
 | 
			
		||||
# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
 | 
			
		||||
# - LDSCRIPT =
 | 
			
		||||
#   - MKL26Z64 for Teensy LC
 | 
			
		||||
#   - MK20DX128 for Teensy 3.0
 | 
			
		||||
#   - MK20DX256 for Teensy 3.1 and 3.2
 | 
			
		||||
#   - MK20DX128BLDR4 for Infinity 60% with Kiibohd bootloader
 | 
			
		||||
#   - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader
 | 
			
		||||
MCU_LDSCRIPT = MK20DX256BLDR8
 | 
			
		||||
 | 
			
		||||
# Startup code to use
 | 
			
		||||
#  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
 | 
			
		||||
# - STARTUP =
 | 
			
		||||
#   - kl2x for Teensy LC
 | 
			
		||||
#   - k20x5 for Teensy 3.0 and Infinity 60%
 | 
			
		||||
#   - k20x7 for Teensy 3.1, 3.2 and Infinity ErgoDox
 | 
			
		||||
MCU_STARTUP = k20x7
 | 
			
		||||
 | 
			
		||||
# Board: it should exist either in <chibios>/os/hal/boards/
 | 
			
		||||
#  or <this_dir>/boards
 | 
			
		||||
# - BOARD =
 | 
			
		||||
#   - PJRC_TEENSY_LC for Teensy LC
 | 
			
		||||
#   - PJRC_TEENSY_3 for Teensy 3.0
 | 
			
		||||
#   - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
 | 
			
		||||
#   - MCHCK_K20 for Infinity KB
 | 
			
		||||
#BOARD = MCHCK_K20
 | 
			
		||||
BOARD = PJRC_TEENSY_3_1
 | 
			
		||||
 | 
			
		||||
# Cortex version
 | 
			
		||||
# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
 | 
			
		||||
MCU  = cortex-m4
 | 
			
		||||
 | 
			
		||||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
 | 
			
		||||
# I.e. 6 for Teensy LC; 7 for Teensy 3.x
 | 
			
		||||
ARMV = 7
 | 
			
		||||
 | 
			
		||||
# Vector table for application
 | 
			
		||||
# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
 | 
			
		||||
# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
 | 
			
		||||
OPT_DEFS = -DCORTEX_VTOR_INIT=0x00002000
 | 
			
		||||
 | 
			
		||||
# Build Options
 | 
			
		||||
#   comment out to disable the options.
 | 
			
		||||
#
 | 
			
		||||
BOOTMAGIC_ENABLE ?= yes	# Virtual DIP switch configuration
 | 
			
		||||
## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
 | 
			
		||||
MOUSEKEY_ENABLE ?= yes	# Mouse keys
 | 
			
		||||
EXTRAKEY_ENABLE ?= yes	# Audio control and System control
 | 
			
		||||
CONSOLE_ENABLE ?= yes	# Console for debug
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
ifndef QUANTUM_DIR
 | 
			
		||||
	include ../../Makefile
 | 
			
		||||
endif
 | 
			
		||||
							
								
								
									
										1
									
								
								keyboards/infinity_ergodox/bootloader_defs.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								keyboards/infinity_ergodox/bootloader_defs.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
#define KIIBOHD_BOOTLOADER
 | 
			
		||||
							
								
								
									
										524
									
								
								keyboards/infinity_ergodox/chconf.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										524
									
								
								keyboards/infinity_ergodox/chconf.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,524 @@
 | 
			
		|||
/*
 | 
			
		||||
    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
 | 
			
		||||
 | 
			
		||||
    Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
    you may not use this file except in compliance with the License.
 | 
			
		||||
    You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
        http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
    Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
    distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
    See the License for the specific language governing permissions and
 | 
			
		||||
    limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file    templates/chconf.h
 | 
			
		||||
 * @brief   Configuration file template.
 | 
			
		||||
 * @details A copy of this file must be placed in each project directory, it
 | 
			
		||||
 *          contains the application specific kernel settings.
 | 
			
		||||
 *
 | 
			
		||||
 * @addtogroup config
 | 
			
		||||
 * @details Kernel related settings and hooks.
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _CHCONF_H_
 | 
			
		||||
#define _CHCONF_H_
 | 
			
		||||
 | 
			
		||||
#define _CHIBIOS_RT_CONF_
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/**
 | 
			
		||||
 * @name System timers settings
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   System time counter resolution.
 | 
			
		||||
 * @note    Allowed values are 16 or 32 bits.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_ST_RESOLUTION                32
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   System tick frequency.
 | 
			
		||||
 * @details Frequency of the system timer that drives the system ticks. This
 | 
			
		||||
 *          setting also defines the system tick time unit.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_ST_FREQUENCY                 100000
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Time delta constant for the tick-less mode.
 | 
			
		||||
 * @note    If this value is zero then the system uses the classic
 | 
			
		||||
 *          periodic tick. This value represents the minimum number
 | 
			
		||||
 *          of ticks that is safe to specify in a timeout directive.
 | 
			
		||||
 *          The value one is not valid, timeouts are rounded up to
 | 
			
		||||
 *          this value.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_ST_TIMEDELTA                 0
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/**
 | 
			
		||||
 * @name Kernel parameters and options
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Round robin interval.
 | 
			
		||||
 * @details This constant is the number of system ticks allowed for the
 | 
			
		||||
 *          threads before preemption occurs. Setting this value to zero
 | 
			
		||||
 *          disables the preemption for threads with equal priority and the
 | 
			
		||||
 *          round robin becomes cooperative. Note that higher priority
 | 
			
		||||
 *          threads can still preempt, the kernel is always preemptive.
 | 
			
		||||
 * @note    Disabling the round robin preemption makes the kernel more compact
 | 
			
		||||
 *          and generally faster.
 | 
			
		||||
 * @note    The round robin preemption is not supported in tickless mode and
 | 
			
		||||
 *          must be set to zero in that case.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_TIME_QUANTUM                 20
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Managed RAM size.
 | 
			
		||||
 * @details Size of the RAM area to be managed by the OS. If set to zero
 | 
			
		||||
 *          then the whole available RAM is used. The core memory is made
 | 
			
		||||
 *          available to the heap allocator and/or can be used directly through
 | 
			
		||||
 *          the simplified core memory allocator.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    In order to let the OS manage the whole RAM the linker script must
 | 
			
		||||
 *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_MEMCORE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_MEMCORE_SIZE                 0
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Idle thread automatic spawn suppression.
 | 
			
		||||
 * @details When this option is activated the function @p chSysInit()
 | 
			
		||||
 *          does not spawn the idle thread. The application @p main()
 | 
			
		||||
 *          function becomes the idle thread and must implement an
 | 
			
		||||
 *          infinite loop.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_NO_IDLE_THREAD               FALSE
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/**
 | 
			
		||||
 * @name Performance options
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   OS optimization.
 | 
			
		||||
 * @details If enabled then time efficient rather than space efficient code
 | 
			
		||||
 *          is used when two possible implementations exist.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    This is not related to the compiler optimization options.
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_OPTIMIZE_SPEED               TRUE
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/**
 | 
			
		||||
 * @name Subsystem options
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Time Measurement APIs.
 | 
			
		||||
 * @details If enabled then the time measurement APIs are included in
 | 
			
		||||
 *          the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_TM                       FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Threads registry APIs.
 | 
			
		||||
 * @details If enabled then the registry APIs are included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_REGISTRY                 TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Threads synchronization APIs.
 | 
			
		||||
 * @details If enabled then the @p chThdWait() function is included in
 | 
			
		||||
 *          the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_WAITEXIT                 TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Semaphores APIs.
 | 
			
		||||
 * @details If enabled then the Semaphores APIs are included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_SEMAPHORES               TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Semaphores queuing mode.
 | 
			
		||||
 * @details If enabled then the threads are enqueued on semaphores by
 | 
			
		||||
 *          priority rather than in FIFO order.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE. Enable this if you have special
 | 
			
		||||
 *          requirements.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_SEMAPHORES.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_SEMAPHORES_PRIORITY      FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Mutexes APIs.
 | 
			
		||||
 * @details If enabled then the mutexes APIs are included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MUTEXES                  TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables recursive behavior on mutexes.
 | 
			
		||||
 * @note    Recursive mutexes are heavier and have an increased
 | 
			
		||||
 *          memory footprint.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_MUTEXES.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MUTEXES_RECURSIVE        FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Conditional Variables APIs.
 | 
			
		||||
 * @details If enabled then the conditional variables APIs are included
 | 
			
		||||
 *          in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_MUTEXES.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_CONDVARS                 TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Conditional Variables APIs with timeout.
 | 
			
		||||
 * @details If enabled then the conditional variables APIs with timeout
 | 
			
		||||
 *          specification are included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_CONDVARS.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_CONDVARS_TIMEOUT         TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Events Flags APIs.
 | 
			
		||||
 * @details If enabled then the event flags APIs are included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_EVENTS                   TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Events Flags APIs with timeout.
 | 
			
		||||
 * @details If enabled then the events APIs with timeout specification
 | 
			
		||||
 *          are included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_EVENTS.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_EVENTS_TIMEOUT           TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Synchronous Messages APIs.
 | 
			
		||||
 * @details If enabled then the synchronous messages APIs are included
 | 
			
		||||
 *          in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MESSAGES                 TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Synchronous Messages queuing mode.
 | 
			
		||||
 * @details If enabled then messages are served by priority rather than in
 | 
			
		||||
 *          FIFO order.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE. Enable this if you have special
 | 
			
		||||
 *          requirements.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_MESSAGES.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MESSAGES_PRIORITY        FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Mailboxes APIs.
 | 
			
		||||
 * @details If enabled then the asynchronous messages (mailboxes) APIs are
 | 
			
		||||
 *          included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_SEMAPHORES.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MAILBOXES                TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   I/O Queues APIs.
 | 
			
		||||
 * @details If enabled then the I/O queues APIs are included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_QUEUES                   TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Core Memory Manager APIs.
 | 
			
		||||
 * @details If enabled then the core memory manager APIs are included
 | 
			
		||||
 *          in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MEMCORE                  TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Heap Allocator APIs.
 | 
			
		||||
 * @details If enabled then the memory heap allocator APIs are included
 | 
			
		||||
 *          in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
 | 
			
		||||
 *          @p CH_CFG_USE_SEMAPHORES.
 | 
			
		||||
 * @note    Mutexes are recommended.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_HEAP                     TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Memory Pools Allocator APIs.
 | 
			
		||||
 * @details If enabled then the memory pools allocator APIs are included
 | 
			
		||||
 *          in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MEMPOOLS                 TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Dynamic Threads APIs.
 | 
			
		||||
 * @details If enabled then the dynamic threads creation APIs are included
 | 
			
		||||
 *          in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_WAITEXIT.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_DYNAMIC                  TRUE
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/**
 | 
			
		||||
 * @name Debug options
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, kernel statistics.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_STATISTICS                   FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, system state check.
 | 
			
		||||
 * @details If enabled the correct call protocol for system APIs is checked
 | 
			
		||||
 *          at runtime.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_SYSTEM_STATE_CHECK           FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, parameters checks.
 | 
			
		||||
 * @details If enabled then the checks on the API functions input
 | 
			
		||||
 *          parameters are activated.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_ENABLE_CHECKS                FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, consistency checks.
 | 
			
		||||
 * @details If enabled then all the assertions in the kernel code are
 | 
			
		||||
 *          activated. This includes consistency checks inside the kernel,
 | 
			
		||||
 *          runtime anomalies and port-defined checks.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_ENABLE_ASSERTS               FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, trace buffer.
 | 
			
		||||
 * @details If enabled then the context switch circular trace buffer is
 | 
			
		||||
 *          activated.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_ENABLE_TRACE                 FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, stack checks.
 | 
			
		||||
 * @details If enabled then a runtime stack check is performed.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 * @note    The stack check is performed in a architecture/port dependent way.
 | 
			
		||||
 *          It may not be implemented or some ports.
 | 
			
		||||
 * @note    The default failure mode is to halt the system with the global
 | 
			
		||||
 *          @p panic_msg variable set to @p NULL.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_ENABLE_STACK_CHECK           FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, stacks initialization.
 | 
			
		||||
 * @details If enabled then the threads working area is filled with a byte
 | 
			
		||||
 *          value when a thread is created. This can be useful for the
 | 
			
		||||
 *          runtime measurement of the used stack.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_FILL_THREADS                 FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, threads profiling.
 | 
			
		||||
 * @details If enabled then a field is added to the @p thread_t structure that
 | 
			
		||||
 *          counts the system ticks occurred while executing the thread.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 * @note    This debug option is not currently compatible with the
 | 
			
		||||
 *          tickless mode.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_THREADS_PROFILING            FALSE
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/**
 | 
			
		||||
 * @name Kernel hooks
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Threads descriptor structure extension.
 | 
			
		||||
 * @details User fields added to the end of the @p thread_t structure.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_THREAD_EXTRA_FIELDS                                          \
 | 
			
		||||
  /* Add threads custom fields here.*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Threads initialization hook.
 | 
			
		||||
 * @details User initialization code added to the @p chThdInit() API.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    It is invoked from within @p chThdInit() and implicitly from all
 | 
			
		||||
 *          the threads creation APIs.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_THREAD_INIT_HOOK(tp) {                                       \
 | 
			
		||||
  /* Add threads initialization code here.*/                                \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Threads finalization hook.
 | 
			
		||||
 * @details User finalization code added to the @p chThdExit() API.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    It is inserted into lock zone.
 | 
			
		||||
 * @note    It is also invoked when the threads simply return in order to
 | 
			
		||||
 *          terminate.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_THREAD_EXIT_HOOK(tp) {                                       \
 | 
			
		||||
  /* Add threads finalization code here.*/                                  \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Context switch hook.
 | 
			
		||||
 * @details This hook is invoked just before switching between threads.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 | 
			
		||||
  /* Context switch code here.*/                                            \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   ISR enter hook.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_IRQ_PROLOGUE_HOOK() {                                        \
 | 
			
		||||
  /* IRQ prologue code here.*/                                              \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   ISR exit hook.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_IRQ_EPILOGUE_HOOK() {                                        \
 | 
			
		||||
  /* IRQ epilogue code here.*/                                              \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Idle thread enter hook.
 | 
			
		||||
 * @note    This hook is invoked within a critical zone, no OS functions
 | 
			
		||||
 *          should be invoked from here.
 | 
			
		||||
 * @note    This macro can be used to activate a power saving mode.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_IDLE_ENTER_HOOK() {                                          \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Idle thread leave hook.
 | 
			
		||||
 * @note    This hook is invoked within a critical zone, no OS functions
 | 
			
		||||
 *          should be invoked from here.
 | 
			
		||||
 * @note    This macro can be used to deactivate a power saving mode.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_IDLE_LEAVE_HOOK() {                                          \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Idle Loop hook.
 | 
			
		||||
 * @details This hook is continuously invoked by the idle thread loop.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_IDLE_LOOP_HOOK() {                                           \
 | 
			
		||||
  /* Idle loop code here.*/                                                 \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   System tick event hook.
 | 
			
		||||
 * @details This hook is invoked in the system tick handler immediately
 | 
			
		||||
 *          after processing the virtual timers queue.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_SYSTEM_TICK_HOOK() {                                         \
 | 
			
		||||
  /* System tick event code here.*/                                         \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   System halt hook.
 | 
			
		||||
 * @details This hook is invoked in case to a system halting error before
 | 
			
		||||
 *          the system is halted.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_SYSTEM_HALT_HOOK(reason) {                                   \
 | 
			
		||||
  /* System halt code here.*/                                               \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Trace hook.
 | 
			
		||||
 * @details This hook is invoked each time a new record is written in the
 | 
			
		||||
 *          trace buffer.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_TRACE_HOOK(tep) {                                            \
 | 
			
		||||
  /* Trace code here.*/                                                     \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* Port-specific settings (override port settings defaulted in chcore.h).    */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
#endif  /* _CHCONF_H_ */
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
							
								
								
									
										80
									
								
								keyboards/infinity_ergodox/config.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								keyboards/infinity_ergodox/config.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,80 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2015 Jun Wako <wakojun@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_H
 | 
			
		||||
#define CONFIG_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* USB Device descriptor parameter */
 | 
			
		||||
#define VENDOR_ID       0xFEED
 | 
			
		||||
#define PRODUCT_ID      0x6464
 | 
			
		||||
#define DEVICE_VER      0x0001
 | 
			
		||||
/* in python2: list(u"whatever".encode('utf-16-le')) */
 | 
			
		||||
/*   at most 32 characters or the ugly hack in usb_main.c borks */
 | 
			
		||||
#define MANUFACTURER "TMK"
 | 
			
		||||
#define USBSTR_MANUFACTURER    'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00'
 | 
			
		||||
#define PRODUCT "Infinity keyboard/TMK"
 | 
			
		||||
#define USBSTR_PRODUCT         'I', '\x00', 'n', '\x00', 'f', '\x00', 'i', '\x00', 'n', '\x00', 'i', '\x00', 't', '\x00', 'y', '\x00', ' ', '\x00', 'k', '\x00', 'e', '\x00', 'y', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', '/', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00'
 | 
			
		||||
 | 
			
		||||
/* key matrix size */
 | 
			
		||||
#define MATRIX_ROWS 18
 | 
			
		||||
#define MATRIX_COLS 5
 | 
			
		||||
#define LOCAL_MATRIX_ROWS 9
 | 
			
		||||
 | 
			
		||||
/* define if matrix has ghost */
 | 
			
		||||
//#define MATRIX_HAS_GHOST
 | 
			
		||||
 | 
			
		||||
/* Set 0 if debouncing isn't needed */
 | 
			
		||||
#define DEBOUNCE    5
 | 
			
		||||
 | 
			
		||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
 | 
			
		||||
//#define LOCKING_SUPPORT_ENABLE
 | 
			
		||||
/* Locking resynchronize hack */
 | 
			
		||||
//#define LOCKING_RESYNC_ENABLE
 | 
			
		||||
 | 
			
		||||
/* key combination for command */
 | 
			
		||||
#define IS_COMMAND() ( \
 | 
			
		||||
    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/* Keymap for Infiity prototype */
 | 
			
		||||
#define INFINITY_PROTOTYPE
 | 
			
		||||
 | 
			
		||||
#define SERIAL_LINK_BAUD 562500
 | 
			
		||||
#define SERIAL_LINK_THREAD_PRIORITY (NORMALPRIO - 1)
 | 
			
		||||
// The visualizer needs gfx thread priorities
 | 
			
		||||
#define VISUALIZER_THREAD_PRIORITY (NORMAL_PRIORITY - 2)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Feature disable options
 | 
			
		||||
 *  These options are also useful to firmware size reduction.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* disable debug print */
 | 
			
		||||
//#define NO_DEBUG
 | 
			
		||||
 | 
			
		||||
/* disable print */
 | 
			
		||||
//#define NO_PRINT
 | 
			
		||||
 | 
			
		||||
/* disable action features */
 | 
			
		||||
//#define NO_ACTION_LAYER
 | 
			
		||||
//#define NO_ACTION_TAPPING
 | 
			
		||||
//#define NO_ACTION_ONESHOT
 | 
			
		||||
//#define NO_ACTION_MACRO
 | 
			
		||||
//#define NO_ACTION_FUNCTION
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										353
									
								
								keyboards/infinity_ergodox/halconf.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										353
									
								
								keyboards/infinity_ergodox/halconf.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,353 @@
 | 
			
		|||
/*
 | 
			
		||||
    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
 | 
			
		||||
 | 
			
		||||
    Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
    you may not use this file except in compliance with the License.
 | 
			
		||||
    You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
        http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
    Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
    distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
    See the License for the specific language governing permissions and
 | 
			
		||||
    limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file    templates/halconf.h
 | 
			
		||||
 * @brief   HAL configuration header.
 | 
			
		||||
 * @details HAL configuration file, this file allows to enable or disable the
 | 
			
		||||
 *          various device drivers from your application. You may also use
 | 
			
		||||
 *          this file in order to override the device drivers default settings.
 | 
			
		||||
 *
 | 
			
		||||
 * @addtogroup HAL_CONF
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _HALCONF_H_
 | 
			
		||||
#define _HALCONF_H_
 | 
			
		||||
 | 
			
		||||
#include "mcuconf.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the PAL subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_PAL                 TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the ADC subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_ADC                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the CAN subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_CAN                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the DAC subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_DAC                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the EXT subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_EXT                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the GPT subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_GPT                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the I2C subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_I2C                 TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the I2S subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_I2S                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the ICU subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_ICU                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the MAC subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_MAC                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the MMC_SPI subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_MMC_SPI             FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the PWM subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_PWM                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the RTC subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_RTC                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the SDC subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_SDC                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the SERIAL subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_SERIAL              TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the SERIAL over USB subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_SERIAL_USB          TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the SPI subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_SPI                 TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the UART subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_UART                FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the USB subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_USB                 TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the WDG subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_WDG                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* ADC driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables synchronous APIs.
 | 
			
		||||
 * @note    Disabling this option saves both code and data space.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 | 
			
		||||
#define ADC_USE_WAIT                TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 | 
			
		||||
 * @note    Disabling this option saves both code and data space.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 | 
			
		||||
#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* CAN driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Sleep mode related APIs inclusion switch.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 | 
			
		||||
#define CAN_USE_SLEEP_MODE          TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* I2C driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the mutual exclusion APIs on the I2C bus.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 | 
			
		||||
#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* MAC driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables an event sources for incoming packets.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 | 
			
		||||
#define MAC_USE_ZERO_COPY           FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables an event sources for incoming packets.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 | 
			
		||||
#define MAC_USE_EVENTS              TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* MMC_SPI driver related settings.                                          */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Delays insertions.
 | 
			
		||||
 * @details If enabled this options inserts delays into the MMC waiting
 | 
			
		||||
 *          routines releasing some extra CPU time for the threads with
 | 
			
		||||
 *          lower priority, this may slow down the driver a bit however.
 | 
			
		||||
 *          This option is recommended also if the SPI driver does not
 | 
			
		||||
 *          use a DMA channel and heavily loads the CPU.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 | 
			
		||||
#define MMC_NICE_WAITING            TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* SDC driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Number of initialization attempts before rejecting the card.
 | 
			
		||||
 * @note    Attempts are performed at 10mS intervals.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 | 
			
		||||
#define SDC_INIT_RETRY              100
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Include support for MMC cards.
 | 
			
		||||
 * @note    MMC support is not yet implemented so this option must be kept
 | 
			
		||||
 *          at @p FALSE.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 | 
			
		||||
#define SDC_MMC_SUPPORT             FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Delays insertions.
 | 
			
		||||
 * @details If enabled this options inserts delays into the MMC waiting
 | 
			
		||||
 *          routines releasing some extra CPU time for the threads with
 | 
			
		||||
 *          lower priority, this may slow down the driver a bit however.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 | 
			
		||||
#define SDC_NICE_WAITING            TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* SERIAL driver related settings.                                           */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Default bit rate.
 | 
			
		||||
 * @details Configuration parameter, this is the baud rate selected for the
 | 
			
		||||
 *          default configuration.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 | 
			
		||||
#define SERIAL_DEFAULT_BITRATE      38400
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Serial buffers size.
 | 
			
		||||
 * @details Configuration parameter, you can change the depth of the queue
 | 
			
		||||
 *          buffers depending on the requirements of your application.
 | 
			
		||||
 * @note    The default is 64 bytes for both the transmission and receive
 | 
			
		||||
 *          buffers.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 | 
			
		||||
#define SERIAL_BUFFERS_SIZE         128
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* SERIAL_USB driver related setting.                                        */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Serial over USB buffers size.
 | 
			
		||||
 * @details Configuration parameter, the buffer size must be a multiple of
 | 
			
		||||
 *          the USB data endpoint maximum packet size.
 | 
			
		||||
 * @note    The default is 64 bytes for both the transmission and receive
 | 
			
		||||
 *          buffers.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
 | 
			
		||||
#define SERIAL_USB_BUFFERS_SIZE     256
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* SPI driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables synchronous APIs.
 | 
			
		||||
 * @note    Disabling this option saves both code and data space.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 | 
			
		||||
#define SPI_USE_WAIT                TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 | 
			
		||||
 * @note    Disabling this option saves both code and data space.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 | 
			
		||||
#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* USB driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables synchronous APIs.
 | 
			
		||||
 * @note    Disabling this option saves both code and data space.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
 | 
			
		||||
#define USB_USE_WAIT                TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _HALCONF_H_ */
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
							
								
								
									
										1
									
								
								keyboards/infinity_ergodox/infinity_ergodox.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								keyboards/infinity_ergodox/infinity_ergodox.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
#include "infinity_ergodox.h"
 | 
			
		||||
							
								
								
									
										44
									
								
								keyboards/infinity_ergodox/infinity_ergodox.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								keyboards/infinity_ergodox/infinity_ergodox.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
#ifndef KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_
 | 
			
		||||
#define KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_
 | 
			
		||||
 | 
			
		||||
#include "quantum.h"
 | 
			
		||||
 | 
			
		||||
#define KEYMAP( \
 | 
			
		||||
    A80, A70, A60, A50, A40, A30, A20,  \
 | 
			
		||||
    A81, A71, A61, A51, A41, A31, A21,  \
 | 
			
		||||
    A82, A72, A62, A52, A42, A32,       \
 | 
			
		||||
    A83, A73, A63, A53, A43, A33, A23,  \
 | 
			
		||||
    A84, A74, A64, A54, A44,            \
 | 
			
		||||
                                  A13, A03, \
 | 
			
		||||
                                       A04, \
 | 
			
		||||
                             A34, A24, A14, \
 | 
			
		||||
         B20, B30, B40, B50, B60, B70, B80, \
 | 
			
		||||
         B21, B31, B41, B51, B61, B71, B81, \
 | 
			
		||||
              B32, B42, B52, B62, B72, B82, \
 | 
			
		||||
         B23, B33, B43, B53, B63, B73, B83, \
 | 
			
		||||
                   B44, B54, B64, B74, B84, \
 | 
			
		||||
    B03, B13,     \
 | 
			
		||||
    B04,          \
 | 
			
		||||
    B14, B24, B34 \
 | 
			
		||||
) { \
 | 
			
		||||
    { KC_NO,    KC_NO,    KC_NO,    KC_##A03, KC_##A04 }, \
 | 
			
		||||
    { KC_NO,    KC_NO,    KC_NO,    KC_##A13, KC_##A14 }, \
 | 
			
		||||
    { KC_##A20, KC_##A21, KC_NO,    KC_##A23, KC_##A24 }, \
 | 
			
		||||
    { KC_##A30, KC_##A31, KC_##A32, KC_##A33, KC_##A34 }, \
 | 
			
		||||
    { KC_##A40, KC_##A41, KC_##A42, KC_##A43, KC_##A44 }, \
 | 
			
		||||
    { KC_##A50, KC_##A51, KC_##A52, KC_##A53, KC_##A54 }, \
 | 
			
		||||
    { KC_##A60, KC_##A61, KC_##A62, KC_##A63, KC_##A64 }, \
 | 
			
		||||
    { KC_##A70, KC_##A71, KC_##A72, KC_##A73, KC_##A74 }, \
 | 
			
		||||
    { KC_##A80, KC_##A81, KC_##A82, KC_##A83, KC_##A84 }, \
 | 
			
		||||
    { KC_NO,    KC_NO,    KC_NO,    KC_##B03, KC_##B04 }, \
 | 
			
		||||
    { KC_NO,    KC_NO,    KC_NO,    KC_##B13, KC_##B14 }, \
 | 
			
		||||
    { KC_##B20, KC_##B21, KC_NO,    KC_##B23, KC_##B24 }, \
 | 
			
		||||
    { KC_##B30, KC_##B31, KC_##B32, KC_##B33, KC_##B34 }, \
 | 
			
		||||
    { KC_##B40, KC_##B41, KC_##B42, KC_##B43, KC_##B44 }, \
 | 
			
		||||
    { KC_##B50, KC_##B51, KC_##B52, KC_##B53, KC_##B54 }, \
 | 
			
		||||
    { KC_##B60, KC_##B61, KC_##B62, KC_##B63, KC_##B64 }, \
 | 
			
		||||
    { KC_##B70, KC_##B71, KC_##B72, KC_##B73, KC_##B74 }, \
 | 
			
		||||
    { KC_##B80, KC_##B81, KC_##B82, KC_##B83, KC_##B84 }  \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ */
 | 
			
		||||
							
								
								
									
										111
									
								
								keyboards/infinity_ergodox/keymaps/default/keymap.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								keyboards/infinity_ergodox/keymaps/default/keymap.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,111 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
 | 
			
		||||
Jun Wako <wakojun@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "infinity_ergodox.h"
 | 
			
		||||
 | 
			
		||||
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
    KEYMAP(  // layer 0 : default
 | 
			
		||||
        // left hand
 | 
			
		||||
        EQL, 1,   2,   3,   4,   5,   ESC,
 | 
			
		||||
        BSLS,Q,   W,   E,   R,   T,   FN1,
 | 
			
		||||
        TAB, A,   S,   D,   F,   G,
 | 
			
		||||
        LSFT,Z,   X,   C,   V,   B,   FN0,
 | 
			
		||||
        LGUI,GRV, BSLS,LEFT,RGHT,
 | 
			
		||||
                                      LCTL,LALT,
 | 
			
		||||
                                           HOME,
 | 
			
		||||
                                 BSPC,DEL, END,
 | 
			
		||||
        // right hand
 | 
			
		||||
             FN2, 6,   7,   8,   9,   0,   MINS,
 | 
			
		||||
             LBRC,Y,   U,   I,   O,   P,   RBRC,
 | 
			
		||||
                  H,   J,   K,   L,   SCLN,QUOT,
 | 
			
		||||
             FN0, N,   M,   COMM,DOT, SLSH,RSFT,
 | 
			
		||||
                       LEFT,DOWN,UP,  RGHT,RGUI,
 | 
			
		||||
        RALT,RCTL,
 | 
			
		||||
        PGUP,
 | 
			
		||||
        PGDN,ENT, SPC
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
    KEYMAP(  // layer 1 : function and symbol keys
 | 
			
		||||
        // left hand
 | 
			
		||||
        TRNS,F1,  F2,  F3,  F4,  F5,  F11,
 | 
			
		||||
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN3,
 | 
			
		||||
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
        TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
                                      TRNS,TRNS,
 | 
			
		||||
                                           TRNS,
 | 
			
		||||
                                 TRNS,TRNS,TRNS,
 | 
			
		||||
        // right hand
 | 
			
		||||
             F12, F6,  F7,  F8,  F9,  F10, TRNS,
 | 
			
		||||
             TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
                  TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
             TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
                       TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
        TRNS,TRNS,
 | 
			
		||||
        TRNS,
 | 
			
		||||
        TRNS,TRNS,TRNS
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
    KEYMAP(  // layer 2 : keyboard functions
 | 
			
		||||
        // left hand
 | 
			
		||||
        BTLD,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, FN3,
 | 
			
		||||
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
        TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
                                      TRNS,TRNS,
 | 
			
		||||
                                           TRNS,
 | 
			
		||||
                                 TRNS,TRNS,TRNS,
 | 
			
		||||
        // right hand
 | 
			
		||||
             TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
             TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
                  TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
             TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
                       TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
        TRNS,TRNS,
 | 
			
		||||
        TRNS,
 | 
			
		||||
        TRNS,TRNS,TRNS
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
    KEYMAP(  // layer 3: numpad
 | 
			
		||||
        // left hand
 | 
			
		||||
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
        TRNS,TRNS,TRNS,TRNS,TRNS,
 | 
			
		||||
                                      TRNS,TRNS,
 | 
			
		||||
                                           TRNS,
 | 
			
		||||
                                 TRNS,TRNS,TRNS,
 | 
			
		||||
        // right hand
 | 
			
		||||
             TRNS,NLCK,PSLS,PAST,PAST,PMNS,BSPC,
 | 
			
		||||
             TRNS,NO,  P7,  P8,  P9,  PMNS,BSPC,
 | 
			
		||||
                  NO,  P4,  P5,  P6,  PPLS,PENT,
 | 
			
		||||
             TRNS,NO,  P1,  P2,  P3,  PPLS,PENT,
 | 
			
		||||
                       P0,  PDOT,SLSH,PENT,PENT,
 | 
			
		||||
        TRNS,TRNS,
 | 
			
		||||
        TRNS,
 | 
			
		||||
        TRNS,TRNS,TRNS
 | 
			
		||||
    ),
 | 
			
		||||
};
 | 
			
		||||
const uint16_t fn_actions[] = {
 | 
			
		||||
    ACTION_LAYER_MOMENTARY(1),                      // FN0 - switch to Layer1
 | 
			
		||||
    ACTION_LAYER_SET(2, ON_PRESS),                  // FN1 - set Layer2
 | 
			
		||||
    ACTION_LAYER_TOGGLE(3),                         // FN2 - toggle Layer3 aka Numpad layer
 | 
			
		||||
    ACTION_LAYER_SET(0, ON_PRESS),                  // FN3 - set Layer0
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										49
									
								
								keyboards/infinity_ergodox/led.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								keyboards/infinity_ergodox/led.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,49 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "hal.h"
 | 
			
		||||
 | 
			
		||||
#include "led.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void led_set(uint8_t usb_led) {
 | 
			
		||||
// The LCD backlight functionality conflicts with this simple
 | 
			
		||||
// red backlight
 | 
			
		||||
#if !defined(LCD_BACKLIGHT_ENABLE) && defined(STATUS_LED_ENABLE)
 | 
			
		||||
    // PTC1: LCD Backlight Red(0:on/1:off)
 | 
			
		||||
    GPIOC->PDDR |= (1<<1);
 | 
			
		||||
    PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
 | 
			
		||||
    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
 | 
			
		||||
        GPIOC->PCOR |= (1<<1);
 | 
			
		||||
    } else {
 | 
			
		||||
        GPIOC->PSOR |= (1<<1);
 | 
			
		||||
    }
 | 
			
		||||
#elif !defined(LCD_BACKLIGHT_ENABLE)
 | 
			
		||||
    (void)usb_led;
 | 
			
		||||
    GPIOC->PDDR |= (1<<1);
 | 
			
		||||
    PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
 | 
			
		||||
    GPIOC->PSOR |= (1<<1);
 | 
			
		||||
    GPIOC->PDDR |= (1<<2);
 | 
			
		||||
    PORTC->PCR[2] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
 | 
			
		||||
    GPIOC->PSOR |= (1<<2);
 | 
			
		||||
    GPIOC->PDDR |= (1<<3);
 | 
			
		||||
    PORTC->PCR[3] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
 | 
			
		||||
    GPIOC->PSOR |= (1<<3);
 | 
			
		||||
#else
 | 
			
		||||
    (void)usb_led;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										170
									
								
								keyboards/infinity_ergodox/matrix.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								keyboards/infinity_ergodox/matrix.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,170 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
 | 
			
		||||
Jun Wako <wakojun@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "hal.h"
 | 
			
		||||
#include "timer.h"
 | 
			
		||||
#include "wait.h"
 | 
			
		||||
#include "print.h"
 | 
			
		||||
#include "debug.h"
 | 
			
		||||
#include "matrix.h"
 | 
			
		||||
#include "serial_link/system/serial_link.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Infinity ErgoDox Pinusage:
 | 
			
		||||
 * Column pins are input with internal pull-down. Row pins are output and strobe with high.
 | 
			
		||||
 * Key is high or 1 when it turns on.
 | 
			
		||||
 *
 | 
			
		||||
 *     col: { PTD1, PTD4, PTD5, PTD6, PTD7 }
 | 
			
		||||
 *     row: { PTB2, PTB3, PTB18, PTB19, PTC0, PTC9, PTC10, PTC11, PTD0 }
 | 
			
		||||
 */
 | 
			
		||||
/* matrix state(1:on, 0:off) */
 | 
			
		||||
static matrix_row_t matrix[MATRIX_ROWS];
 | 
			
		||||
static matrix_row_t matrix_debouncing[LOCAL_MATRIX_ROWS];
 | 
			
		||||
static bool debouncing = false;
 | 
			
		||||
static uint16_t debouncing_time = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void matrix_init(void)
 | 
			
		||||
{
 | 
			
		||||
    /* Column(sense) */
 | 
			
		||||
    palSetPadMode(GPIOD, 1,  PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
    palSetPadMode(GPIOD, 4,  PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
    palSetPadMode(GPIOD, 5,  PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
    palSetPadMode(GPIOD, 6,  PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
    palSetPadMode(GPIOD, 7,  PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
 | 
			
		||||
    /* Row(strobe) */
 | 
			
		||||
    palSetPadMode(GPIOB, 2,  PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOB, 3,  PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOB, 18, PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOB, 19, PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOC, 0,  PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOC, 9,  PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOC, 10, PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOC, 11, PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOD, 0,  PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
 | 
			
		||||
    memset(matrix, 0, MATRIX_ROWS);
 | 
			
		||||
    memset(matrix_debouncing, 0, LOCAL_MATRIX_ROWS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t matrix_scan(void)
 | 
			
		||||
{
 | 
			
		||||
    for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) {
 | 
			
		||||
        matrix_row_t data = 0;
 | 
			
		||||
 | 
			
		||||
        // strobe row
 | 
			
		||||
        switch (row) {
 | 
			
		||||
            case 0: palSetPad(GPIOB, 2);    break;
 | 
			
		||||
            case 1: palSetPad(GPIOB, 3);    break;
 | 
			
		||||
            case 2: palSetPad(GPIOB, 18);   break;
 | 
			
		||||
            case 3: palSetPad(GPIOB, 19);   break;
 | 
			
		||||
            case 4: palSetPad(GPIOC, 0);    break;
 | 
			
		||||
            case 5: palSetPad(GPIOC, 9);    break;
 | 
			
		||||
            case 6: palSetPad(GPIOC, 10);   break;
 | 
			
		||||
            case 7: palSetPad(GPIOC, 11);   break;
 | 
			
		||||
            case 8: palSetPad(GPIOD, 0);    break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // need wait to settle pin state
 | 
			
		||||
        // if you wait too short, or have a too high update rate
 | 
			
		||||
        // the keyboard might freeze, or there might not be enough
 | 
			
		||||
        // processing power to update the LCD screen properly.
 | 
			
		||||
        // 20us, or two ticks at 100000Hz seems to be OK
 | 
			
		||||
        wait_us(20);
 | 
			
		||||
 | 
			
		||||
        // read col data: { PTD1, PTD4, PTD5, PTD6, PTD7 }
 | 
			
		||||
        data = ((palReadPort(GPIOD) & 0xF0) >> 3) |
 | 
			
		||||
               ((palReadPort(GPIOD) & 0x02) >> 1);
 | 
			
		||||
 | 
			
		||||
        // un-strobe row
 | 
			
		||||
        switch (row) {
 | 
			
		||||
            case 0: palClearPad(GPIOB, 2);  break;
 | 
			
		||||
            case 1: palClearPad(GPIOB, 3);  break;
 | 
			
		||||
            case 2: palClearPad(GPIOB, 18); break;
 | 
			
		||||
            case 3: palClearPad(GPIOB, 19); break;
 | 
			
		||||
            case 4: palClearPad(GPIOC, 0);  break;
 | 
			
		||||
            case 5: palClearPad(GPIOC, 9);  break;
 | 
			
		||||
            case 6: palClearPad(GPIOC, 10); break;
 | 
			
		||||
            case 7: palClearPad(GPIOC, 11); break;
 | 
			
		||||
            case 8: palClearPad(GPIOD, 0);  break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (matrix_debouncing[row] != data) {
 | 
			
		||||
            matrix_debouncing[row] = data;
 | 
			
		||||
            debouncing = true;
 | 
			
		||||
            debouncing_time = timer_read();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    uint8_t offset = 0;
 | 
			
		||||
#ifdef MASTER_IS_ON_RIGHT
 | 
			
		||||
    if (is_serial_link_master()) {
 | 
			
		||||
        offset = MATRIX_ROWS - LOCAL_MATRIX_ROWS;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
 | 
			
		||||
        for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) {
 | 
			
		||||
            matrix[offset + row] = matrix_debouncing[row];
 | 
			
		||||
        }
 | 
			
		||||
        debouncing = false;
 | 
			
		||||
    }
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool matrix_is_on(uint8_t row, uint8_t col)
 | 
			
		||||
{
 | 
			
		||||
    return (matrix[row] & (1<<col));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
matrix_row_t matrix_get_row(uint8_t row)
 | 
			
		||||
{
 | 
			
		||||
    return matrix[row];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_print(void)
 | 
			
		||||
{
 | 
			
		||||
    xprintf("\nr/c 01234567\n");
 | 
			
		||||
    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
 | 
			
		||||
        xprintf("%X0: ", row);
 | 
			
		||||
        matrix_row_t data = matrix_get_row(row);
 | 
			
		||||
        for (int col = 0; col < MATRIX_COLS; col++) {
 | 
			
		||||
            if (data & (1<<col))
 | 
			
		||||
                xprintf("1");
 | 
			
		||||
            else
 | 
			
		||||
                xprintf("0");
 | 
			
		||||
        }
 | 
			
		||||
        xprintf("\n");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_set_remote(matrix_row_t* rows, uint8_t index) {
 | 
			
		||||
    uint8_t offset = 0;
 | 
			
		||||
#ifdef MASTER_IS_ON_RIGHT
 | 
			
		||||
    offset = MATRIX_ROWS - LOCAL_MATRIX_ROWS * (index + 2);
 | 
			
		||||
#else
 | 
			
		||||
    offset = LOCAL_MATRIX_ROWS * (index + 1);
 | 
			
		||||
#endif
 | 
			
		||||
    for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) {
 | 
			
		||||
        matrix[offset + row] = rows[row];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										74
									
								
								keyboards/infinity_ergodox/mcuconf.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								keyboards/infinity_ergodox/mcuconf.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,74 @@
 | 
			
		|||
/*
 | 
			
		||||
    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
 | 
			
		||||
 | 
			
		||||
    Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
    you may not use this file except in compliance with the License.
 | 
			
		||||
    You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
        http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
    Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
    distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
    See the License for the specific language governing permissions and
 | 
			
		||||
    limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef _MCUCONF_H_
 | 
			
		||||
#define _MCUCONF_H_
 | 
			
		||||
 | 
			
		||||
#define K20x_MCUCONF
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * HAL driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define K20x7
 | 
			
		||||
 | 
			
		||||
/* Select the MCU clocking mode below by enabling the appropriate block. */
 | 
			
		||||
 | 
			
		||||
#define KINETIS_NO_INIT             FALSE
 | 
			
		||||
 | 
			
		||||
/* PEE mode - 48MHz system clock driven by external crystal. */
 | 
			
		||||
#define KINETIS_MCG_MODE            KINETIS_MCG_MODE_PEE
 | 
			
		||||
#define KINETIS_PLLCLK_FREQUENCY    72000000UL
 | 
			
		||||
#define KINETIS_SYSCLK_FREQUENCY    72000000UL
 | 
			
		||||
#define KINETIS_BUSCLK_FREQUENCY    36000000UL
 | 
			
		||||
#define KINETIS_FLASHCLK_FREQUENCY  24000000UL
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
/* FEI mode - 48 MHz with internal 32.768 kHz crystal */
 | 
			
		||||
#define KINETIS_MCG_MODE            KINETIS_MCG_MODE_FEI
 | 
			
		||||
#define KINETIS_MCG_FLL_DMX32       1           /* Fine-tune for 32.768 kHz */
 | 
			
		||||
#define KINETIS_MCG_FLL_DRS         1           /* 1464x FLL factor */
 | 
			
		||||
#define KINETIS_SYSCLK_FREQUENCY    47972352UL  /* 32.768 kHz * 1464 (~48 MHz) */
 | 
			
		||||
#define KINETIS_CLKDIV1_OUTDIV1     1
 | 
			
		||||
#define KINETIS_CLKDIV1_OUTDIV2     1
 | 
			
		||||
#define KINETIS_CLKDIV1_OUTDIV4     2
 | 
			
		||||
#define KINETIS_BUSCLK_FREQUENCY    KINETIS_SYSCLK_FREQUENCY
 | 
			
		||||
#define KINETIS_FLASHCLK_FREQUENCY  KINETIS_SYSCLK_FREQUENCY/2
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SERIAL driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define KINETIS_SERIAL_USE_UART0            TRUE
 | 
			
		||||
#define KINETIS_SERIAL_USE_UART1            TRUE
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * USB driver settings
 | 
			
		||||
 */
 | 
			
		||||
#define KINETIS_USB_USE_USB0                TRUE
 | 
			
		||||
/* Need to redefine this, since the default is for K20x */
 | 
			
		||||
/* This is for Teensy LC; you should comment it out (or change to 5)
 | 
			
		||||
 * for Teensy 3.x */
 | 
			
		||||
#define KINETIS_USB_USB0_IRQ_PRIORITY       2
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SPI driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define KINETIS_SPI_USE_SPI0                TRUE
 | 
			
		||||
 | 
			
		||||
#define KINETIS_I2C_USE_I2C0                TRUE
 | 
			
		||||
 | 
			
		||||
#endif /* _MCUCONF_H_ */
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue