]> git.friedersdorff.com Git - max/tmk_keyboard.git/commitdiff
Add infinity_chibios
authorJun Wako <wakojun@gmail.com>
Fri, 16 Oct 2015 08:44:26 +0000 (17:44 +0900)
committerJun Wako <wakojun@gmail.com>
Fri, 16 Oct 2015 14:36:54 +0000 (23:36 +0900)
keyboard/infinity_chibios/MEMO.txt [new file with mode: 0644]
keyboard/infinity_chibios/Makefile [new file with mode: 0644]
keyboard/infinity_chibios/chconf.h [new file with mode: 0644]
keyboard/infinity_chibios/config.h [new file with mode: 0644]
keyboard/infinity_chibios/halconf.h [new file with mode: 0644]
keyboard/infinity_chibios/keymap_common.c [new file with mode: 0644]
keyboard/infinity_chibios/keymap_common.h [new file with mode: 0644]
keyboard/infinity_chibios/keymap_plain.c [new file with mode: 0644]
keyboard/infinity_chibios/led.c [new file with mode: 0644]
keyboard/infinity_chibios/matrix.c [new file with mode: 0644]
keyboard/infinity_chibios/mcuconf.h [new file with mode: 0644]

diff --git a/keyboard/infinity_chibios/MEMO.txt b/keyboard/infinity_chibios/MEMO.txt
new file mode 100644 (file)
index 0000000..e2886aa
--- /dev/null
@@ -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
diff --git a/keyboard/infinity_chibios/Makefile b/keyboard/infinity_chibios/Makefile
new file mode 100644 (file)
index 0000000..6fca489
--- /dev/null
@@ -0,0 +1,87 @@
+# Target file name (without extension).
+PROJECT = ch
+
+# Directory common source files exist
+TMK_DIR = ../../tmk_core
+
+# Directory keyboard dependent files exist
+TARGET_DIR = .
+
+# project specific files
+SRC =  matrix.c \
+       keymap_common.c \
+       led.c
+
+ifdef KEYMAP
+    SRC := keymap_$(KEYMAP).c $(SRC)
+else
+    SRC := keymap_plain.c $(SRC)
+endif
+
+CONFIG_H = config.h
+
+## 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).
+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
+#MCU_LDSCRIPT = MK20DX128
+MCU_LDSCRIPT = MK20DX128BLDR4
+
+# 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
+#   - k20x7 for Teensy 3.1 and 3.2
+MCU_STARTUP = k20x5
+
+# 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
+BOARD = MCHCK_K20
+
+# 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.*/
+OPT_DEFS = -DCORTEX_VTOR_INIT=0x00001000
+
+
+# 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
+
+include $(TMK_DIR)/tool/chibios/common.mk
+include $(TMK_DIR)/tool/chibios/chibios.mk
+
+program: $(BUILDDIR)/$(PROJECT).bin
+       dfu-util -D $(BUILDDIR)/$(PROJECT).bin
diff --git a/keyboard/infinity_chibios/chconf.h b/keyboard/infinity_chibios/chconf.h
new file mode 100644 (file)
index 0000000..b7a340d
--- /dev/null
@@ -0,0 +1,499 @@
+/*\r
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio\r
+\r
+    Licensed under the Apache License, Version 2.0 (the "License");\r
+    you may not use this file except in compliance with the License.\r
+    You may obtain a copy of the License at\r
+\r
+        http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+    Unless required by applicable law or agreed to in writing, software\r
+    distributed under the License is distributed on an "AS IS" BASIS,\r
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+    See the License for the specific language governing permissions and\r
+    limitations under the License.\r
+*/\r
+\r
+/**\r
+ * @file    templates/chconf.h\r
+ * @brief   Configuration file template.\r
+ * @details A copy of this file must be placed in each project directory, it\r
+ *          contains the application specific kernel settings.\r
+ *\r
+ * @addtogroup config\r
+ * @details Kernel related settings and hooks.\r
+ * @{\r
+ */\r
+\r
+#ifndef _CHCONF_H_\r
+#define _CHCONF_H_\r
+\r
+/*===========================================================================*/\r
+/**\r
+ * @name System timers settings\r
+ * @{\r
+ */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   System time counter resolution.\r
+ * @note    Allowed values are 16 or 32 bits.\r
+ */\r
+#define CH_CFG_ST_RESOLUTION                32\r
+\r
+/**\r
+ * @brief   System tick frequency.\r
+ * @details Frequency of the system timer that drives the system ticks. This\r
+ *          setting also defines the system tick time unit.\r
+ */\r
+#define CH_CFG_ST_FREQUENCY                 1000\r
+\r
+/**\r
+ * @brief   Time delta constant for the tick-less mode.\r
+ * @note    If this value is zero then the system uses the classic\r
+ *          periodic tick. This value represents the minimum number\r
+ *          of ticks that is safe to specify in a timeout directive.\r
+ *          The value one is not valid, timeouts are rounded up to\r
+ *          this value.\r
+ */\r
+#define CH_CFG_ST_TIMEDELTA                 0\r
+\r
+/** @} */\r
+\r
+/*===========================================================================*/\r
+/**\r
+ * @name Kernel parameters and options\r
+ * @{\r
+ */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   Round robin interval.\r
+ * @details This constant is the number of system ticks allowed for the\r
+ *          threads before preemption occurs. Setting this value to zero\r
+ *          disables the preemption for threads with equal priority and the\r
+ *          round robin becomes cooperative. Note that higher priority\r
+ *          threads can still preempt, the kernel is always preemptive.\r
+ * @note    Disabling the round robin preemption makes the kernel more compact\r
+ *          and generally faster.\r
+ * @note    The round robin preemption is not supported in tickless mode and\r
+ *          must be set to zero in that case.\r
+ */\r
+#define CH_CFG_TIME_QUANTUM                 20\r
+\r
+/**\r
+ * @brief   Managed RAM size.\r
+ * @details Size of the RAM area to be managed by the OS. If set to zero\r
+ *          then the whole available RAM is used. The core memory is made\r
+ *          available to the heap allocator and/or can be used directly through\r
+ *          the simplified core memory allocator.\r
+ *\r
+ * @note    In order to let the OS manage the whole RAM the linker script must\r
+ *          provide the @p __heap_base__ and @p __heap_end__ symbols.\r
+ * @note    Requires @p CH_CFG_USE_MEMCORE.\r
+ */\r
+#define CH_CFG_MEMCORE_SIZE                 0\r
+\r
+/**\r
+ * @brief   Idle thread automatic spawn suppression.\r
+ * @details When this option is activated the function @p chSysInit()\r
+ *          does not spawn the idle thread. The application @p main()\r
+ *          function becomes the idle thread and must implement an\r
+ *          infinite loop.\r
+ */\r
+#define CH_CFG_NO_IDLE_THREAD               FALSE\r
+\r
+/** @} */\r
+\r
+/*===========================================================================*/\r
+/**\r
+ * @name Performance options\r
+ * @{\r
+ */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   OS optimization.\r
+ * @details If enabled then time efficient rather than space efficient code\r
+ *          is used when two possible implementations exist.\r
+ *\r
+ * @note    This is not related to the compiler optimization options.\r
+ * @note    The default is @p TRUE.\r
+ */\r
+#define CH_CFG_OPTIMIZE_SPEED               TRUE\r
+\r
+/** @} */\r
+\r
+/*===========================================================================*/\r
+/**\r
+ * @name Subsystem options\r
+ * @{\r
+ */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   Time Measurement APIs.\r
+ * @details If enabled then the time measurement APIs are included in\r
+ *          the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ */\r
+#define CH_CFG_USE_TM                       FALSE\r
+\r
+/**\r
+ * @brief   Threads registry APIs.\r
+ * @details If enabled then the registry APIs are included in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ */\r
+#define CH_CFG_USE_REGISTRY                 TRUE\r
+\r
+/**\r
+ * @brief   Threads synchronization APIs.\r
+ * @details If enabled then the @p chThdWait() function is included in\r
+ *          the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ */\r
+#define CH_CFG_USE_WAITEXIT                 TRUE\r
+\r
+/**\r
+ * @brief   Semaphores APIs.\r
+ * @details If enabled then the Semaphores APIs are included in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ */\r
+#define CH_CFG_USE_SEMAPHORES               TRUE\r
+\r
+/**\r
+ * @brief   Semaphores queuing mode.\r
+ * @details If enabled then the threads are enqueued on semaphores by\r
+ *          priority rather than in FIFO order.\r
+ *\r
+ * @note    The default is @p FALSE. Enable this if you have special\r
+ *          requirements.\r
+ * @note    Requires @p CH_CFG_USE_SEMAPHORES.\r
+ */\r
+#define CH_CFG_USE_SEMAPHORES_PRIORITY      FALSE\r
+\r
+/**\r
+ * @brief   Mutexes APIs.\r
+ * @details If enabled then the mutexes APIs are included in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ */\r
+#define CH_CFG_USE_MUTEXES                  TRUE\r
+\r
+/**\r
+ * @brief   Enables recursive behavior on mutexes.\r
+ * @note    Recursive mutexes are heavier and have an increased\r
+ *          memory footprint.\r
+ *\r
+ * @note    The default is @p FALSE.\r
+ * @note    Requires @p CH_CFG_USE_MUTEXES.\r
+ */\r
+#define CH_CFG_USE_MUTEXES_RECURSIVE        FALSE\r
+\r
+/**\r
+ * @brief   Conditional Variables APIs.\r
+ * @details If enabled then the conditional variables APIs are included\r
+ *          in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ * @note    Requires @p CH_CFG_USE_MUTEXES.\r
+ */\r
+#define CH_CFG_USE_CONDVARS                 TRUE\r
+\r
+/**\r
+ * @brief   Conditional Variables APIs with timeout.\r
+ * @details If enabled then the conditional variables APIs with timeout\r
+ *          specification are included in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ * @note    Requires @p CH_CFG_USE_CONDVARS.\r
+ */\r
+#define CH_CFG_USE_CONDVARS_TIMEOUT         TRUE\r
+\r
+/**\r
+ * @brief   Events Flags APIs.\r
+ * @details If enabled then the event flags APIs are included in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ */\r
+#define CH_CFG_USE_EVENTS                   TRUE\r
+\r
+/**\r
+ * @brief   Events Flags APIs with timeout.\r
+ * @details If enabled then the events APIs with timeout specification\r
+ *          are included in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ * @note    Requires @p CH_CFG_USE_EVENTS.\r
+ */\r
+#define CH_CFG_USE_EVENTS_TIMEOUT           TRUE\r
+\r
+/**\r
+ * @brief   Synchronous Messages APIs.\r
+ * @details If enabled then the synchronous messages APIs are included\r
+ *          in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ */\r
+#define CH_CFG_USE_MESSAGES                 TRUE\r
+\r
+/**\r
+ * @brief   Synchronous Messages queuing mode.\r
+ * @details If enabled then messages are served by priority rather than in\r
+ *          FIFO order.\r
+ *\r
+ * @note    The default is @p FALSE. Enable this if you have special\r
+ *          requirements.\r
+ * @note    Requires @p CH_CFG_USE_MESSAGES.\r
+ */\r
+#define CH_CFG_USE_MESSAGES_PRIORITY        FALSE\r
+\r
+/**\r
+ * @brief   Mailboxes APIs.\r
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are\r
+ *          included in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ * @note    Requires @p CH_CFG_USE_SEMAPHORES.\r
+ */\r
+#define CH_CFG_USE_MAILBOXES                TRUE\r
+\r
+/**\r
+ * @brief   I/O Queues APIs.\r
+ * @details If enabled then the I/O queues APIs are included in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ */\r
+#define CH_CFG_USE_QUEUES                   TRUE\r
+\r
+/**\r
+ * @brief   Core Memory Manager APIs.\r
+ * @details If enabled then the core memory manager APIs are included\r
+ *          in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ */\r
+#define CH_CFG_USE_MEMCORE                  TRUE\r
+\r
+/**\r
+ * @brief   Heap Allocator APIs.\r
+ * @details If enabled then the memory heap allocator APIs are included\r
+ *          in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ * @note    Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or\r
+ *          @p CH_CFG_USE_SEMAPHORES.\r
+ * @note    Mutexes are recommended.\r
+ */\r
+#define CH_CFG_USE_HEAP                     TRUE\r
+\r
+/**\r
+ * @brief   Memory Pools Allocator APIs.\r
+ * @details If enabled then the memory pools allocator APIs are included\r
+ *          in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ */\r
+#define CH_CFG_USE_MEMPOOLS                 TRUE\r
+\r
+/**\r
+ * @brief   Dynamic Threads APIs.\r
+ * @details If enabled then the dynamic threads creation APIs are included\r
+ *          in the kernel.\r
+ *\r
+ * @note    The default is @p TRUE.\r
+ * @note    Requires @p CH_CFG_USE_WAITEXIT.\r
+ * @note    Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.\r
+ */\r
+#define CH_CFG_USE_DYNAMIC                  TRUE\r
+\r
+/** @} */\r
+\r
+/*===========================================================================*/\r
+/**\r
+ * @name Debug options\r
+ * @{\r
+ */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   Debug option, kernel statistics.\r
+ *\r
+ * @note    The default is @p FALSE.\r
+ */\r
+#define CH_DBG_STATISTICS                   FALSE\r
+\r
+/**\r
+ * @brief   Debug option, system state check.\r
+ * @details If enabled the correct call protocol for system APIs is checked\r
+ *          at runtime.\r
+ *\r
+ * @note    The default is @p FALSE.\r
+ */\r
+#define CH_DBG_SYSTEM_STATE_CHECK           FALSE\r
+\r
+/**\r
+ * @brief   Debug option, parameters checks.\r
+ * @details If enabled then the checks on the API functions input\r
+ *          parameters are activated.\r
+ *\r
+ * @note    The default is @p FALSE.\r
+ */\r
+#define CH_DBG_ENABLE_CHECKS                FALSE\r
+\r
+/**\r
+ * @brief   Debug option, consistency checks.\r
+ * @details If enabled then all the assertions in the kernel code are\r
+ *          activated. This includes consistency checks inside the kernel,\r
+ *          runtime anomalies and port-defined checks.\r
+ *\r
+ * @note    The default is @p FALSE.\r
+ */\r
+#define CH_DBG_ENABLE_ASSERTS               FALSE\r
+\r
+/**\r
+ * @brief   Debug option, trace buffer.\r
+ * @details If enabled then the context switch circular trace buffer is\r
+ *          activated.\r
+ *\r
+ * @note    The default is @p FALSE.\r
+ */\r
+#define CH_DBG_ENABLE_TRACE                 FALSE\r
+\r
+/**\r
+ * @brief   Debug option, stack checks.\r
+ * @details If enabled then a runtime stack check is performed.\r
+ *\r
+ * @note    The default is @p FALSE.\r
+ * @note    The stack check is performed in a architecture/port dependent way.\r
+ *          It may not be implemented or some ports.\r
+ * @note    The default failure mode is to halt the system with the global\r
+ *          @p panic_msg variable set to @p NULL.\r
+ */\r
+#define CH_DBG_ENABLE_STACK_CHECK           FALSE\r
+\r
+/**\r
+ * @brief   Debug option, stacks initialization.\r
+ * @details If enabled then the threads working area is filled with a byte\r
+ *          value when a thread is created. This can be useful for the\r
+ *          runtime measurement of the used stack.\r
+ *\r
+ * @note    The default is @p FALSE.\r
+ */\r
+#define CH_DBG_FILL_THREADS                 FALSE\r
+\r
+/**\r
+ * @brief   Debug option, threads profiling.\r
+ * @details If enabled then a field is added to the @p thread_t structure that\r
+ *          counts the system ticks occurred while executing the thread.\r
+ *\r
+ * @note    The default is @p FALSE.\r
+ * @note    This debug option is not currently compatible with the\r
+ *          tickless mode.\r
+ */\r
+#define CH_DBG_THREADS_PROFILING            FALSE\r
+\r
+/** @} */\r
+\r
+/*===========================================================================*/\r
+/**\r
+ * @name Kernel hooks\r
+ * @{\r
+ */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   Threads descriptor structure extension.\r
+ * @details User fields added to the end of the @p thread_t structure.\r
+ */\r
+#define CH_CFG_THREAD_EXTRA_FIELDS                                          \\r
+  /* Add threads custom fields here.*/\r
+\r
+/**\r
+ * @brief   Threads initialization hook.\r
+ * @details User initialization code added to the @p chThdInit() API.\r
+ *\r
+ * @note    It is invoked from within @p chThdInit() and implicitly from all\r
+ *          the threads creation APIs.\r
+ */\r
+#define CH_CFG_THREAD_INIT_HOOK(tp) {                                       \\r
+  /* Add threads initialization code here.*/                                \\r
+}\r
+\r
+/**\r
+ * @brief   Threads finalization hook.\r
+ * @details User finalization code added to the @p chThdExit() API.\r
+ *\r
+ * @note    It is inserted into lock zone.\r
+ * @note    It is also invoked when the threads simply return in order to\r
+ *          terminate.\r
+ */\r
+#define CH_CFG_THREAD_EXIT_HOOK(tp) {                                       \\r
+  /* Add threads finalization code here.*/                                  \\r
+}\r
+\r
+/**\r
+ * @brief   Context switch hook.\r
+ * @details This hook is invoked just before switching between threads.\r
+ */\r
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \\r
+  /* Context switch code here.*/                                            \\r
+}\r
+\r
+/**\r
+ * @brief   Idle thread enter hook.\r
+ * @note    This hook is invoked within a critical zone, no OS functions\r
+ *          should be invoked from here.\r
+ * @note    This macro can be used to activate a power saving mode.\r
+ */\r
+#define CH_CFG_IDLE_ENTER_HOOK() {                                          \\r
+}\r
+\r
+/**\r
+ * @brief   Idle thread leave hook.\r
+ * @note    This hook is invoked within a critical zone, no OS functions\r
+ *          should be invoked from here.\r
+ * @note    This macro can be used to deactivate a power saving mode.\r
+ */\r
+#define CH_CFG_IDLE_LEAVE_HOOK() {                                          \\r
+}\r
+\r
+/**\r
+ * @brief   Idle Loop hook.\r
+ * @details This hook is continuously invoked by the idle thread loop.\r
+ */\r
+#define CH_CFG_IDLE_LOOP_HOOK() {                                           \\r
+  /* Idle loop code here.*/                                                 \\r
+}\r
+\r
+/**\r
+ * @brief   System tick event hook.\r
+ * @details This hook is invoked in the system tick handler immediately\r
+ *          after processing the virtual timers queue.\r
+ */\r
+#define CH_CFG_SYSTEM_TICK_HOOK() {                                         \\r
+  /* System tick event code here.*/                                         \\r
+}\r
+\r
+/**\r
+ * @brief   System halt hook.\r
+ * @details This hook is invoked in case to a system halting error before\r
+ *          the system is halted.\r
+ */\r
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) {                                   \\r
+  /* System halt code here.*/                                               \\r
+}\r
+\r
+/** @} */\r
+\r
+/*===========================================================================*/\r
+/* Port-specific settings (override port settings defaulted in chcore.h).    */\r
+/*===========================================================================*/\r
+\r
+#endif  /* _CHCONF_H_ */\r
+\r
+/** @} */\r
diff --git a/keyboard/infinity_chibios/config.h b/keyboard/infinity_chibios/config.h
new file mode 100644 (file)
index 0000000..b4b7fcd
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+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', '\xc6', '\x00'
+#define PRODUCT "ChibiOS TMK test"
+#define USBSTR_PRODUCT         'C', '\x00', 'h', '\x00', 'i', '\x00', 'b', '\x00', 'i', '\x00', 'O', '\x00', 'S', '\x00', ' ', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', 't', '\x00', 'e', '\x00', 's', '\x00', 't', '\x00'
+#define DESCRIPTION "TMK keyboard firmware over ChibiOS"
+
+/* key matrix size */
+#define MATRIX_ROWS 9
+#define MATRIX_COLS 7
+
+/* 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
+
+
+/*
+ * 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
diff --git a/keyboard/infinity_chibios/halconf.h b/keyboard/infinity_chibios/halconf.h
new file mode 100644 (file)
index 0000000..2472ba7
--- /dev/null
@@ -0,0 +1,334 @@
+/*\r
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio\r
+\r
+    Licensed under the Apache License, Version 2.0 (the "License");\r
+    you may not use this file except in compliance with the License.\r
+    You may obtain a copy of the License at\r
+\r
+        http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+    Unless required by applicable law or agreed to in writing, software\r
+    distributed under the License is distributed on an "AS IS" BASIS,\r
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+    See the License for the specific language governing permissions and\r
+    limitations under the License.\r
+*/\r
+\r
+/**\r
+ * @file    templates/halconf.h\r
+ * @brief   HAL configuration header.\r
+ * @details HAL configuration file, this file allows to enable or disable the\r
+ *          various device drivers from your application. You may also use\r
+ *          this file in order to override the device drivers default settings.\r
+ *\r
+ * @addtogroup HAL_CONF\r
+ * @{\r
+ */\r
+\r
+#ifndef _HALCONF_H_\r
+#define _HALCONF_H_\r
+\r
+#include "mcuconf.h"\r
+\r
+/**\r
+ * @brief   Enables the PAL subsystem.\r
+ */\r
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)\r
+#define HAL_USE_PAL                 TRUE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the ADC subsystem.\r
+ */\r
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)\r
+#define HAL_USE_ADC                 FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the CAN subsystem.\r
+ */\r
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)\r
+#define HAL_USE_CAN                 FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the DAC subsystem.\r
+ */\r
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)\r
+#define HAL_USE_DAC                 FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the EXT subsystem.\r
+ */\r
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)\r
+#define HAL_USE_EXT                 FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the GPT subsystem.\r
+ */\r
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)\r
+#define HAL_USE_GPT                 FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the I2C subsystem.\r
+ */\r
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)\r
+#define HAL_USE_I2C                 FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the I2S subsystem.\r
+ */\r
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)\r
+#define HAL_USE_I2S                 FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the ICU subsystem.\r
+ */\r
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)\r
+#define HAL_USE_ICU                 FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the MAC subsystem.\r
+ */\r
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)\r
+#define HAL_USE_MAC                 FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the MMC_SPI subsystem.\r
+ */\r
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)\r
+#define HAL_USE_MMC_SPI             FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the PWM subsystem.\r
+ */\r
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)\r
+#define HAL_USE_PWM                 FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the RTC subsystem.\r
+ */\r
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)\r
+#define HAL_USE_RTC                 FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the SDC subsystem.\r
+ */\r
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)\r
+#define HAL_USE_SDC                 FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the SERIAL subsystem.\r
+ */\r
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)\r
+#define HAL_USE_SERIAL              FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the SERIAL over USB subsystem.\r
+ */\r
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)\r
+#define HAL_USE_SERIAL_USB          TRUE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the SPI subsystem.\r
+ */\r
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)\r
+#define HAL_USE_SPI                 FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the UART subsystem.\r
+ */\r
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)\r
+#define HAL_USE_UART                FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the USB subsystem.\r
+ */\r
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)\r
+#define HAL_USE_USB                 TRUE\r
+#endif\r
+\r
+/*===========================================================================*/\r
+/* ADC driver related settings.                                              */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   Enables synchronous APIs.\r
+ * @note    Disabling this option saves both code and data space.\r
+ */\r
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)\r
+#define ADC_USE_WAIT                TRUE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.\r
+ * @note    Disabling this option saves both code and data space.\r
+ */\r
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)\r
+#define ADC_USE_MUTUAL_EXCLUSION    TRUE\r
+#endif\r
+\r
+/*===========================================================================*/\r
+/* CAN driver related settings.                                              */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   Sleep mode related APIs inclusion switch.\r
+ */\r
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)\r
+#define CAN_USE_SLEEP_MODE          TRUE\r
+#endif\r
+\r
+/*===========================================================================*/\r
+/* I2C driver related settings.                                              */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   Enables the mutual exclusion APIs on the I2C bus.\r
+ */\r
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)\r
+#define I2C_USE_MUTUAL_EXCLUSION    TRUE\r
+#endif\r
+\r
+/*===========================================================================*/\r
+/* MAC driver related settings.                                              */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   Enables an event sources for incoming packets.\r
+ */\r
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)\r
+#define MAC_USE_ZERO_COPY           FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables an event sources for incoming packets.\r
+ */\r
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)\r
+#define MAC_USE_EVENTS              TRUE\r
+#endif\r
+\r
+/*===========================================================================*/\r
+/* MMC_SPI driver related settings.                                          */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   Delays insertions.\r
+ * @details If enabled this options inserts delays into the MMC waiting\r
+ *          routines releasing some extra CPU time for the threads with\r
+ *          lower priority, this may slow down the driver a bit however.\r
+ *          This option is recommended also if the SPI driver does not\r
+ *          use a DMA channel and heavily loads the CPU.\r
+ */\r
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)\r
+#define MMC_NICE_WAITING            TRUE\r
+#endif\r
+\r
+/*===========================================================================*/\r
+/* SDC driver related settings.                                              */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   Number of initialization attempts before rejecting the card.\r
+ * @note    Attempts are performed at 10mS intervals.\r
+ */\r
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)\r
+#define SDC_INIT_RETRY              100\r
+#endif\r
+\r
+/**\r
+ * @brief   Include support for MMC cards.\r
+ * @note    MMC support is not yet implemented so this option must be kept\r
+ *          at @p FALSE.\r
+ */\r
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)\r
+#define SDC_MMC_SUPPORT             FALSE\r
+#endif\r
+\r
+/**\r
+ * @brief   Delays insertions.\r
+ * @details If enabled this options inserts delays into the MMC waiting\r
+ *          routines releasing some extra CPU time for the threads with\r
+ *          lower priority, this may slow down the driver a bit however.\r
+ */\r
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)\r
+#define SDC_NICE_WAITING            TRUE\r
+#endif\r
+\r
+/*===========================================================================*/\r
+/* SERIAL driver related settings.                                           */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   Default bit rate.\r
+ * @details Configuration parameter, this is the baud rate selected for the\r
+ *          default configuration.\r
+ */\r
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)\r
+#define SERIAL_DEFAULT_BITRATE      38400\r
+#endif\r
+\r
+/**\r
+ * @brief   Serial buffers size.\r
+ * @details Configuration parameter, you can change the depth of the queue\r
+ *          buffers depending on the requirements of your application.\r
+ * @note    The default is 64 bytes for both the transmission and receive\r
+ *          buffers.\r
+ */\r
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)\r
+#define SERIAL_BUFFERS_SIZE         16\r
+#endif\r
+\r
+/*===========================================================================*/\r
+/* SERIAL_USB driver related setting.                                        */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   Serial over USB buffers size.\r
+ * @details Configuration parameter, the buffer size must be a multiple of\r
+ *          the USB data endpoint maximum packet size.\r
+ * @note    The default is 64 bytes for both the transmission and receive\r
+ *          buffers.\r
+ */\r
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)\r
+#define SERIAL_USB_BUFFERS_SIZE     256\r
+#endif\r
+\r
+/*===========================================================================*/\r
+/* SPI driver related settings.                                              */\r
+/*===========================================================================*/\r
+\r
+/**\r
+ * @brief   Enables synchronous APIs.\r
+ * @note    Disabling this option saves both code and data space.\r
+ */\r
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)\r
+#define SPI_USE_WAIT                TRUE\r
+#endif\r
+\r
+/**\r
+ * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.\r
+ * @note    Disabling this option saves both code and data space.\r
+ */\r
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)\r
+#define SPI_USE_MUTUAL_EXCLUSION    TRUE\r
+#endif\r
+\r
+#endif /* _HALCONF_H_ */\r
+\r
+/** @} */\r
diff --git a/keyboard/infinity_chibios/keymap_common.c b/keyboard/infinity_chibios/keymap_common.c
new file mode 100644 (file)
index 0000000..69b170c
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+Copyright 2012,2013 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 "keymap_common.h"
+
+
+/* translates key to keycode */
+uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
+{
+    return keymaps[(layer)][(key.row)][(key.col)];
+}
+
+/* translates Fn keycode to action */
+action_t keymap_fn_to_action(uint8_t keycode)
+{
+    return (action_t){ .code = fn_actions[FN_INDEX(keycode)] };
+}
diff --git a/keyboard/infinity_chibios/keymap_common.h b/keyboard/infinity_chibios/keymap_common.h
new file mode 100644 (file)
index 0000000..b0f765b
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+Copyright 2014 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 KEYMAP_COMMON_H
+#define KEYMAP_COMMON_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "keycode.h"
+#include "action.h"
+#include "action_macro.h"
+#include "report.h"
+#include "host.h"
+#include "print.h"
+#include "debug.h"
+#include "keymap.h"
+
+
+extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
+extern const uint16_t fn_actions[];
+
+
+#ifdef INFINITY_PROTOTYPE
+
+/* Infinity prototype */
+#define KEYMAP( \
+    K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K86, \
+    K51, K61, K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, \
+    K13, K23, K33, K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, \
+    K54, K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, \
+    K06, K16, K26,           K36,                K46, K56, K66, K76 \
+) { \
+    { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06 }, \
+    { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16 }, \
+    { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26 }, \
+    { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36 }, \
+    { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46 }, \
+    { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56 }, \
+    { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66 }, \
+    { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76 }, \
+    { KC_##K80, KC_##K81, KC_##K82, KC_##K83, KC_##K84, KC_##K85, KC_##K86 }  \
+}
+
+#else
+
+/* Infinity production */
+#define KEYMAP( \
+    K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K51, \
+    K61, K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, K13, \
+    K23, K33, K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, K54, \
+    K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, K06, \
+    K16, K26, K36,           K46,                K56, K66, K76, K86 \
+) { \
+    { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06 }, \
+    { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16 }, \
+    { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26 }, \
+    { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36 }, \
+    { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46 }, \
+    { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56 }, \
+    { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66 }, \
+    { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76 }, \
+    { KC_##K80, KC_##K81, KC_##K82, KC_##K83, KC_##K84, KC_##K85, KC_##K86 }  \
+}
+
+#endif
+
+#endif
diff --git a/keyboard/infinity_chibios/keymap_plain.c b/keyboard/infinity_chibios/keymap_plain.c
new file mode 100644 (file)
index 0000000..2673d6a
--- /dev/null
@@ -0,0 +1,48 @@
+#include "keymap_common.h"
+
+const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Layer 0: Default Layer
+     * ,-----------------------------------------------------------.
+     * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  `|BSp|
+     * |-----------------------------------------------------------|
+     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
+     * |-----------------------------------------------------------|
+     * |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|   |     |
+     * `-----------------------------------------------------------'
+     */
+    [0] =
+    KEYMAP(ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSLS, GRV, \
+           TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSPC, \
+           LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,ENT,  \
+           LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,RSFT,FN0, \
+           NO,  LGUI,LALT,          SPC,                RALT,RGUI,NO, NO),
+
+    /* 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|   |     |
+     * `-----------------------------------------------------------'
+     */ 
+    [1] = 
+    KEYMAP(PWR, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL,   \
+           CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP, TRNS, BSPC,      \
+           TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,PENT,            \
+           TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,TRNS,TRNS,            \
+           TRNS,TRNS,TRNS,          TRNS,               TRNS,TRNS,TRNS,TRNS),
+};
+
+const uint16_t fn_actions[] = {
+    [0] = ACTION_LAYER_MOMENTARY(1),
+};
+
diff --git a/keyboard/infinity_chibios/led.c b/keyboard/infinity_chibios/led.c
new file mode 100644 (file)
index 0000000..aed66c7
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+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) {
+}
diff --git a/keyboard/infinity_chibios/matrix.c b/keyboard/infinity_chibios/matrix.c
new file mode 100644 (file)
index 0000000..2c68ea8
--- /dev/null
@@ -0,0 +1,128 @@
+#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.
+ *
+ *     col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 }
+ *     row: { PTB0, PTB1, PTB2, PTB3, PTB16, PTB17, PTC4, PTC5, 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);
+
+    /* 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);
+
+    memset(matrix, 0, MATRIX_ROWS);
+    memset(matrix_debouncing, 0, MATRIX_ROWS);
+}
+
+uint8_t matrix_scan(void)
+{
+    for (int row = 0; row < MATRIX_ROWS; row++) {
+        matrix_row_t data = 0;
+
+        // 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;
+        }
+
+        wait_us(1); // need wait to settle pin state
+
+        // read col data
+        data = (palReadPort(GPIOD)>>1);
+
+        // 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;
+        }
+
+        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;
+    }
+    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");
+    }
+}
diff --git a/keyboard/infinity_chibios/mcuconf.h b/keyboard/infinity_chibios/mcuconf.h
new file mode 100644 (file)
index 0000000..66b6ce2
--- /dev/null
@@ -0,0 +1,55 @@
+/*\r
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio\r
+\r
+    Licensed under the Apache License, Version 2.0 (the "License");\r
+    you may not use this file except in compliance with the License.\r
+    You may obtain a copy of the License at\r
+\r
+        http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+    Unless required by applicable law or agreed to in writing, software\r
+    distributed under the License is distributed on an "AS IS" BASIS,\r
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+    See the License for the specific language governing permissions and\r
+    limitations under the License.\r
+*/\r
+\r
+#ifndef _MCUCONF_H_\r
+#define _MCUCONF_H_\r
+\r
+#define K20x_MCUCONF\r
+\r
+/*\r
+ * HAL driver system settings.\r
+ */\r
+\r
+/* Select the MCU clocking mode below by enabling the appropriate block. */\r
+\r
+#define KINETIS_NO_INIT             FALSE\r
+\r
+/* FEI mode - 48 MHz with internal 32.768 kHz crystal */\r
+#define KINETIS_MCG_MODE            KINETIS_MCG_MODE_FEI\r
+#define KINETIS_MCG_FLL_DMX32       1           /* Fine-tune for 32.768 kHz */\r
+#define KINETIS_MCG_FLL_DRS         1           /* 1464x FLL factor */\r
+#define KINETIS_SYSCLK_FREQUENCY    47972352UL  /* 32.768 kHz * 1464 (~48 MHz) */\r
+#define KINETIS_CLKDIV1_OUTDIV1     1\r
+#define KINETIS_CLKDIV1_OUTDIV2     1\r
+#define KINETIS_CLKDIV1_OUTDIV4     2\r
+#define KINETIS_BUSCLK_FREQUENCY    KINETIS_SYSCLK_FREQUENCY\r
+#define KINETIS_FLASHCLK_FREQUENCY  KINETIS_SYSCLK_FREQUENCY/2\r
+\r
+/*\r
+ * SERIAL driver system settings.\r
+ */\r
+#define KINETIS_SERIAL_USE_UART0            TRUE\r
+\r
+/*\r
+ * USB driver settings\r
+ */\r
+#define KINETIS_USB_USE_USB0                TRUE\r
+/* Need to redefine this, since the default is for K20x */\r
+/* This is for Teensy LC; you should comment it out (or change to 5)\r
+ * for Teensy 3.x */\r
+#define KINETIS_USB_USB0_IRQ_PRIORITY       2\r
+\r
+#endif /* _MCUCONF_H_ */\r