@ -1,385 +0,0 @@ | |||
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 |
@ -1,78 +1,81 @@ | |||
{ | |||
"keyboard_name": "Infinity 60%", | |||
"keyboard_folder": "infinity60", | |||
"url": "https://input.club/devices/infinity-keyboard/", | |||
"maintainer": "qmk", | |||
"width": 15, | |||
"height": 5, | |||
"layouts": { | |||
"LAYOUT_60_ansi_split_bs_rshift": { | |||
"key_count": 63, | |||
"layout": [ | |||
{"label":"Esc", "x":0, "y":0}, | |||
{"label":"1", "x":1, "y":0}, | |||
{"label":"2", "x":2, "y":0}, | |||
{"label":"3", "x":3, "y":0}, | |||
{"label":"4", "x":4, "y":0}, | |||
{"label":"5", "x":5, "y":0}, | |||
{"label":"6", "x":6, "y":0}, | |||
{"label":"7", "x":7, "y":0}, | |||
{"label":"8", "x":8, "y":0}, | |||
{"label":"9", "x":9, "y":0}, | |||
{"label":"0", "x":10, "y":0}, | |||
{"label":"-", "x":11, "y":0}, | |||
{"label":"=", "x":12, "y":0}, | |||
{"label":"\\", "x":13, "y":0}, | |||
{"label":"`", "x":14, "y":0}, | |||
{"label":"Tab", "x":0, "y":1, "w":1.5}, | |||
{"label":"Q", "x":1.5, "y":1}, | |||
{"label":"W", "x":2.5, "y":1}, | |||
{"label":"E", "x":3.5, "y":1}, | |||
{"label":"R", "x":4.5, "y":1}, | |||
{"label":"T", "x":5.5, "y":1}, | |||
{"label":"Y", "x":6.5, "y":1}, | |||
{"label":"U", "x":7.5, "y":1}, | |||
{"label":"I", "x":8.5, "y":1}, | |||
{"label":"O", "x":9.5, "y":1}, | |||
{"label":"P", "x":10.5, "y":1}, | |||
{"label":"[", "x":11.5, "y":1}, | |||
{"label":"]", "x":12.5, "y":1}, | |||
{"label":"Backspace", "x":13.5, "y":1, "w":1.5}, | |||
{"label":"Caps Lock", "x":0, "y":2, "w":1.75}, | |||
{"label":"A", "x":1.75, "y":2}, | |||
{"label":"S", "x":2.75, "y":2}, | |||
{"label":"D", "x":3.75, "y":2}, | |||
{"label":"F", "x":4.75, "y":2}, | |||
{"label":"G", "x":5.75, "y":2}, | |||
{"label":"H", "x":6.75, "y":2}, | |||
{"label":"J", "x":7.75, "y":2}, | |||
{"label":"K", "x":8.75, "y":2}, | |||
{"label":"L", "x":9.75, "y":2}, | |||
{"label":";", "x":10.75, "y":2}, | |||
{"label":"'", "x":11.75, "y":2}, | |||
{"label":"Enter", "x":12.75, "y":2, "w":2.25}, | |||
{"label":"Shift", "x":0, "y":3, "w":2.25}, | |||
{"label":"Z", "x":2.25, "y":3}, | |||
{"label":"X", "x":3.25, "y":3}, | |||
{"label":"C", "x":4.25, "y":3}, | |||
{"label":"V", "x":5.25, "y":3}, | |||
{"label":"B", "x":6.25, "y":3}, | |||
{"label":"N", "x":7.25, "y":3}, | |||
{"label":"M", "x":8.25, "y":3}, | |||
{"label":",", "x":9.25, "y":3}, | |||
{"label":".", "x":10.25, "y":3}, | |||
{"label":"/", "x":11.25, "y":3}, | |||
{"label":"Shift", "x":12.25, "y":3, "w":1.75}, | |||
{"label":"Fn", "x":14, "y":3}, | |||
{"label":"Ctrl", "x":0, "y":4, "w":1.5}, | |||
{"label":"GUI", "x":1.5, "y":4}, | |||
{"label":"Alt", "x":2.5, "y":4, "w":1.5}, | |||
{"label":"Space", "x":4, "y":4, "w":6}, | |||
{"label":"Alt", "x":10, "y":4, "w":1.5}, | |||
{"label":"GUI", "x":11.5, "y":4}, | |||
{"label":"Fn", "x":12.5, "y":4}, | |||
{"label":"Ctrl", "x":13.5, "y":4, "w":1.5} | |||
] | |||
"keyboard_name": "Infinity 60%", | |||
"keyboard_folder": "infinity60", | |||
"url": "https://input.club/devices/infinity-keyboard/", | |||
"maintainer": "qmk", | |||
"width": 15, | |||
"height": 5, | |||
"layouts": { | |||
"LAYOUT_60_ansi_split_bs_rshift": { | |||
"layout": [ | |||
{"x": 0, "y": 0}, | |||
{"x": 1, "y": 0}, | |||
{"x": 2, "y": 0}, | |||
{"x": 3, "y": 0}, | |||
{"x": 4, "y": 0}, | |||
{"x": 5, "y": 0}, | |||
{"x": 6, "y": 0}, | |||
{"x": 7, "y": 0}, | |||
{"x": 8, "y": 0}, | |||
{"x": 9, "y": 0}, | |||
{"x": 10, "y": 0}, | |||
{"x": 11, "y": 0}, | |||
{"x": 12, "y": 0}, | |||
{"x": 13, "y": 0}, | |||
{"x": 14, "y": 0}, | |||
{"x": 0, "y": 1, "w": 1.5}, | |||
{"x": 1.5, "y": 1}, | |||
{"x": 2.5, "y": 1}, | |||
{"x": 3.5, "y": 1}, | |||
{"x": 4.5, "y": 1}, | |||
{"x": 5.5, "y": 1}, | |||
{"x": 6.5, "y": 1}, | |||
{"x": 7.5, "y": 1}, | |||
{"x": 8.5, "y": 1}, | |||
{"x": 9.5, "y": 1}, | |||
{"x": 10.5, "y": 1}, | |||
{"x": 11.5, "y": 1}, | |||
{"x": 12.5, "y": 1}, | |||
{"x": 13.5, "y": 1, "w": 1.5}, | |||
{"x": 0, "y": 2, "w": 1.75}, | |||
{"x": 1.75, "y": 2}, | |||
{"x": 2.75, "y": 2}, | |||
{"x": 3.75, "y": 2}, | |||
{"x": 4.75, "y": 2}, | |||
{"x": 5.75, "y": 2}, | |||
{"x": 6.75, "y": 2}, | |||
{"x": 7.75, "y": 2}, | |||
{"x": 8.75, "y": 2}, | |||
{"x": 9.75, "y": 2}, | |||
{"x": 10.75, "y": 2}, | |||
{"x": 11.75, "y": 2}, | |||
{"x": 12.75, "y": 2, "w": 2.25}, | |||
{"x": 0, "y": 3, "w": 2.25}, | |||
{"x": 2.25, "y": 3}, | |||
{"x": 3.25, "y": 3}, | |||
{"x": 4.25, "y": 3}, | |||
{"x": 5.25, "y": 3}, | |||
{"x": 6.25, "y": 3}, | |||
{"x": 7.25, "y": 3}, | |||
{"x": 8.25, "y": 3}, | |||
{"x": 9.25, "y": 3}, | |||
{"x": 10.25, "y": 3}, | |||
{"x": 11.25, "y": 3}, | |||
{"x": 12.25, "y": 3, "w": 1.75}, | |||
{"x": 14, "y": 3}, | |||
{"x": 0, "y": 4, "w": 1.5}, | |||
{"x": 1.5, "y": 4}, | |||
{"x": 2.5, "y": 4, "w": 1.5}, | |||
{"x": 4, "y": 4, "w": 6}, | |||
{"x": 10, "y": 4, "w": 1.5}, | |||
{"x": 11.5, "y": 4}, | |||
{"x": 12.5, "y": 4}, | |||
{"x": 13.5, "y": 4, "w": 1.5} | |||
] | |||
} | |||
} | |||
} | |||
} |
@ -1,43 +1,45 @@ | |||
#include QMK_KEYBOARD_H | |||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
/* Layer 0: Default Layer | |||
* ,-----------------------------------------------------------. | |||
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| | |||
* |-----------------------------------------------------------| | |||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Bksp| | |||
* |-----------------------------------------------------------| | |||
* |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter | | |||
* |-----------------------------------------------------------| | |||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0| | |||
* |-----------------------------------------------------------' | |||
* | |Gui|Alt | Space |Alt |Gui| | | | |||
* `-----------------------------------------------------------' | |||
/* | |||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ | |||
* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │ | |||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ | |||
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ Bspc│ | |||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ | |||
* │ Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ | |||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ | |||
* │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ Fn│ | |||
* ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴┬───┬─┴───┤ | |||
* │ │GUI│ Alt │ │ Alt │GUI│ │ │ | |||
* └─────┴───┴─────┴───────────────────────┴─────┴───┴───┴─────┘ | |||
*/ | |||
[0] = LAYOUT_60_ansi_split_bs_rshift( | |||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS, KC_GRV, \ | |||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, \ | |||
KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_ENT, \ | |||
KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,MO(1), \ | |||
KC_NO, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_NO, KC_NO), | |||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, | |||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, | |||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, | |||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), | |||
XXXXXXX, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, XXXXXXX, XXXXXXX | |||
), | |||
/* Layer 1: HHKB mode (HHKB Fn) | |||
* ,-----------------------------------------------------------. | |||
* |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| | |||
* |-----------------------------------------------------------| | |||
* |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs| | |||
* |-----------------------------------------------------------| | |||
* | |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter | | |||
* |-----------------------------------------------------------| | |||
* | | | | | | | +| -|End|PgD|Dow| | | | |||
* `-----------------------------------------------------------' | |||
* | |Gui|Alt | Space |Alt |Gui| | | | |||
* `-----------------------------------------------------------' | |||
*/ | |||
/* | |||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ | |||
* │Pwr│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Ins│Del│ | |||
* ├───┴─┬─┴───┴───┴───┴───┴───┴───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴───┘ | |||
* │Caps │ │ │ │ │ │ │ │PSc│Slk│Pse│ ↑ │ │ │ | |||
* └─────┘┌───┬───┬───┐──┴┬──┴┌───┬──┴┬──┴┬──┴┬──┴┬──┴┬────────┐ | |||
* │ │Vl-│Vl+│Mut│ │ │ * │ / │Hom│PgU│ ← │ → │ Enter │ | |||
* ├──────└─┬─┴───┴───┘─┬─┴─┬─└─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┘ | |||
* │ │ │ │ │ │ │ + │ - │End│PgD│ ↓ │ │ │ | |||
* ├─────┬──┴┬──┴──┬┴───┴───┴───└───┴───┴───┴───┴───┘┬───┬─┴───┤ | |||
* │ │ │ │ │ │ │ │ │ | |||
* └─────┴───┴─────┴───────────────────────┴─────┴───┴───┴─────┘ | |||
*/ | |||
[1] = LAYOUT_60_ansi_split_bs_rshift( | |||
KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ | |||
KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ | |||
KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_PENT, \ | |||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_TRNS,KC_TRNS, \ | |||
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS), | |||
KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, | |||
KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, _______, | |||
_______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, | |||
_______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, | |||
_______, _______, _______, _______, _______, _______, _______, _______ | |||
) | |||
}; |
@ -1,198 +0,0 @@ | |||
#include <stdint.h> | |||
#include <stdbool.h> | |||
#include <string.h> | |||
#include <hal.h> | |||
#include "timer.h" | |||
#include "wait.h" | |||
#include "print.h" | |||
#include "matrix.h" | |||
/* | |||
* Infinity 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. | |||
* INFINITY PRODUCTION (NO LED) | |||
* col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 } | |||
* row: { PTB0, PTB1, PTB2, PTB3, PTB16, PTB17, PTC4, PTC5, PTD0 } | |||
* INFINITY PRODUCTION (WITH LED) | |||
* col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 } | |||
* row: { PTC0, PTC1, PTC2, PTC3, PTC4, PTC5, PTC6, PTC7, PTD0 } | |||
*/ | |||
/* matrix state(1:on, 0:off) */ | |||
static matrix_row_t matrix[MATRIX_ROWS]; | |||
static matrix_row_t matrix_debouncing[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, 2, PAL_MODE_INPUT_PULLDOWN); | |||
palSetPadMode(GPIOD, 3, 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); | |||
#ifdef INFINITY_LED | |||
/* Row(strobe) */ | |||
palSetPadMode(GPIOC, 0, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOC, 1, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOC, 2, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOC, 3, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOC, 4, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOC, 5, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOC, 6, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOC, 7, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL); | |||
#else | |||
/* Row(strobe) */ | |||
palSetPadMode(GPIOB, 0, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOB, 1, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOB, 3, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOB, 17, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOC, 4, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOC, 5, PAL_MODE_OUTPUT_PUSHPULL); | |||
palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL); | |||
#endif | |||
memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t)); | |||
memset(matrix_debouncing, 0, MATRIX_ROWS * sizeof(matrix_row_t)); | |||
matrix_init_quantum(); | |||
} | |||
uint8_t matrix_scan(void) | |||
{ | |||
for (int row = 0; row < MATRIX_ROWS; row++) { | |||
matrix_row_t data = 0; | |||
#ifdef INFINITY_LED | |||
// strobe row | |||
switch (row) { | |||
case 0: palSetPad(GPIOC, 0); break; | |||
case 1: palSetPad(GPIOC, 1); break; | |||
case 2: palSetPad(GPIOC, 2); break; | |||
case 3: palSetPad(GPIOC, 3); break; | |||
case 4: palSetPad(GPIOC, 4); break; | |||
case 5: palSetPad(GPIOC, 5); break; | |||
case 6: palSetPad(GPIOC, 6); break; | |||
case 7: palSetPad(GPIOC, 7); break; | |||
case 8: palSetPad(GPIOD, 0); break; | |||
} | |||
#else | |||
// strobe row | |||
switch (row) { | |||
case 0: palSetPad(GPIOB, 0); break; | |||
case 1: palSetPad(GPIOB, 1); break; | |||
case 2: palSetPad(GPIOB, 2); break; | |||
case 3: palSetPad(GPIOB, 3); break; | |||
case 4: palSetPad(GPIOB, 16); break; | |||
case 5: palSetPad(GPIOB, 17); break; | |||
case 6: palSetPad(GPIOC, 4); break; | |||
case 7: palSetPad(GPIOC, 5); break; | |||
case 8: palSetPad(GPIOD, 0); break; | |||
} | |||
#endif | |||
// 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 | |||
data = (palReadPort(GPIOD)>>1); | |||
#ifdef INFINITY_LED | |||
// un-strobe row | |||
switch (row) { | |||
case 0: palClearPad(GPIOC, 0); break; | |||
case 1: palClearPad(GPIOC, 1); break; | |||
case 2: palClearPad(GPIOC, 2); break; | |||
case 3: palClearPad(GPIOC, 3); break; | |||
case 4: palClearPad(GPIOC, 4); break; | |||
case 5: palClearPad(GPIOC, 5); break; | |||
case 6: palClearPad(GPIOC, 6); break; | |||
case 7: palClearPad(GPIOC, 7); break; | |||
case 8: palClearPad(GPIOD, 0); break; | |||
} | |||
#else | |||
// un-strobe row | |||
switch (row) { | |||
case 0: palClearPad(GPIOB, 0); break; | |||
case 1: palClearPad(GPIOB, 1); break; | |||
case 2: palClearPad(GPIOB, 2); break; | |||
case 3: palClearPad(GPIOB, 3); break; | |||
case 4: palClearPad(GPIOB, 16); break; | |||
case 5: palClearPad(GPIOB, 17); break; | |||
case 6: palClearPad(GPIOC, 4); break; | |||
case 7: palClearPad(GPIOC, 5); break; | |||
case 8: palClearPad(GPIOD, 0); break; | |||
} | |||
#endif | |||
if (matrix_debouncing[row] != data) { | |||
matrix_debouncing[row] = data; | |||
debouncing = true; | |||
debouncing_time = timer_read(); | |||
} | |||
} | |||
if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { | |||
for (int row = 0; row < MATRIX_ROWS; row++) { | |||
matrix[row] = matrix_debouncing[row]; | |||
} | |||
debouncing = false; | |||
} | |||
matrix_scan_quantum(); | |||
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("%02X: "); | |||
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"); | |||
} | |||
} | |||
__attribute__ ((weak)) | |||
void matrix_init_kb(void) { | |||
matrix_init_user(); | |||
} | |||
__attribute__ ((weak)) | |||
void matrix_scan_kb(void) { | |||
matrix_scan_user(); | |||
} | |||
__attribute__ ((weak)) | |||
void matrix_init_user(void) { | |||
} | |||
__attribute__ ((weak)) | |||
void matrix_scan_user(void) { | |||
} | |||
@ -1,15 +1,17 @@ | |||
Infinity 60% | |||
============ | |||
# Infinity 60% | |||
A compact community driven keyboard. | |||
Keyboard Maintainer: QMK Community | |||
Hardware Supported: Infinity 60% PCB | |||
Hardware Availability: https://input.club/devices/infinity-keyboard/ | |||
* Keyboard Maintainer: QMK Community | |||
* Hardware Supported: Infinity 60% PCB | |||
* Hardware Availability: https://input.club/devices/infinity-keyboard/ | |||
Make example for this keyboard (after setting up your build environment): | |||
make infinity60:default | |||
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). | |||
Flashing example for this keyboard: | |||
make infinity60:default:flash | |||
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). |