From ed648ba4f55ae3cf6adc7fa427f584cd9ff6facf Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome.berclaz@a3.epfl.ch> Date: Fri, 28 Apr 2023 21:46:48 -0700 Subject: [PATCH 01/16] added modelh keyboard --- keyboards/modelh/bootloader_defs.h | 10 + keyboards/modelh/chconf.h | 817 +++++++++++++++ keyboards/modelh/config.h | 150 +++ keyboards/modelh/halconf.h | 553 ++++++++++ keyboards/modelh/info.json | 1066 ++++++++++++++++++++ keyboards/modelh/keymaps/default/keymap.c | 31 + keyboards/modelh/keymaps/default/readme.md | 1 + keyboards/modelh/mcuconf.h | 209 ++++ keyboards/modelh/modelh.c | 48 + keyboards/modelh/modelh.h | 70 ++ keyboards/modelh/readme.md | 19 + keyboards/modelh/rules.mk | 22 + 12 files changed, 2996 insertions(+) create mode 100644 keyboards/modelh/bootloader_defs.h create mode 100644 keyboards/modelh/chconf.h create mode 100644 keyboards/modelh/config.h create mode 100644 keyboards/modelh/halconf.h create mode 100644 keyboards/modelh/info.json create mode 100644 keyboards/modelh/keymaps/default/keymap.c create mode 100644 keyboards/modelh/keymaps/default/readme.md create mode 100644 keyboards/modelh/mcuconf.h create mode 100644 keyboards/modelh/modelh.c create mode 100644 keyboards/modelh/modelh.h create mode 100644 keyboards/modelh/readme.md create mode 100644 keyboards/modelh/rules.mk diff --git a/keyboards/modelh/bootloader_defs.h b/keyboards/modelh/bootloader_defs.h new file mode 100644 index 000000000000..6b8fa9f727c9 --- /dev/null +++ b/keyboards/modelh/bootloader_defs.h @@ -0,0 +1,10 @@ +/* Address for jumping to bootloader on STM32 chips. */ +/* It is chip dependent, the correct number can be looked up here (page 175): + * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf + * This also requires a patch to chibios: + * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch + */ + +// STM32F103* does NOT have an USB bootloader in ROM (only serial), +// so setting anything here does not make much sense +#define STM32_BOOTLOADER_ADDRESS 0x80000000 diff --git a/keyboards/modelh/chconf.h b/keyboards/modelh/chconf.h new file mode 100644 index 000000000000..047468758083 --- /dev/null +++ b/keyboards/modelh/chconf.h @@ -0,0 +1,817 @@ +/* + ChibiOS - Copyright (C) 2006..2020 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 rt/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_ +#define _CHIBIOS_RT_CONF_VER_7_0_ + +/*===========================================================================*/ +/** + * @name System settings + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Handling of instances. + * @note If enabled then threads assigned to various instances can + * interact each other using the same synchronization objects. + * If disabled then each OS instance is a separate world, no + * direct interactions are handled by the OS. + */ +#if !defined(CH_CFG_SMP_MODE) +#define CH_CFG_SMP_MODE FALSE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name System timers settings + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System time counter resolution. + * @note Allowed values are 16, 32 or 64 bits. + */ +#if !defined(CH_CFG_ST_RESOLUTION) +#define CH_CFG_ST_RESOLUTION 32 +#endif + +/** + * @brief System tick frequency. + * @details Frequency of the system timer that drives the system ticks. This + * setting also defines the system tick time unit. + */ +#if !defined(CH_CFG_ST_FREQUENCY) +#define CH_CFG_ST_FREQUENCY 100000 +#endif + +/** + * @brief Time intervals data size. + * @note Allowed values are 16, 32 or 64 bits. + */ +#if !defined(CH_CFG_INTERVALS_SIZE) +#define CH_CFG_INTERVALS_SIZE 32 +#endif + +/** + * @brief Time types data size. + * @note Allowed values are 16 or 32 bits. + */ +#if !defined(CH_CFG_TIME_TYPES_SIZE) +#define CH_CFG_TIME_TYPES_SIZE 32 +#endif + +/** + * @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. + */ +#if !defined(CH_CFG_ST_TIMEDELTA) +#define CH_CFG_ST_TIMEDELTA 0 +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @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. + */ +#if !defined(CH_CFG_TIME_QUANTUM) +#define CH_CFG_TIME_QUANTUM 0 +#endif + +/** + * @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. + */ +#if !defined(CH_CFG_NO_IDLE_THREAD) +#define CH_CFG_NO_IDLE_THREAD FALSE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @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. + */ +#if !defined(CH_CFG_OPTIMIZE_SPEED) +#define CH_CFG_OPTIMIZE_SPEED TRUE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @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. + */ +#if !defined(CH_CFG_USE_TM) +#define CH_CFG_USE_TM TRUE +#endif + +/** + * @brief Time Stamps APIs. + * @details If enabled then the time stamps APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_TIMESTAMP) +#define CH_CFG_USE_TIMESTAMP TRUE +#endif + +/** + * @brief Threads registry APIs. + * @details If enabled then the registry APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_REGISTRY) +#define CH_CFG_USE_REGISTRY TRUE +#endif + +/** + * @brief Threads synchronization APIs. + * @details If enabled then the @p chThdWait() function is included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_WAITEXIT) +#define CH_CFG_USE_WAITEXIT TRUE +#endif + +/** + * @brief Semaphores APIs. + * @details If enabled then the Semaphores APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_SEMAPHORES) +#define CH_CFG_USE_SEMAPHORES TRUE +#endif + +/** + * @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. + */ +#if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY) +#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE +#endif + +/** + * @brief Mutexes APIs. + * @details If enabled then the mutexes APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MUTEXES) +#define CH_CFG_USE_MUTEXES TRUE +#endif + +/** + * @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. + */ +#if !defined(CH_CFG_USE_MUTEXES_RECURSIVE) +#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE +#endif + +/** + * @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. + */ +#if !defined(CH_CFG_USE_CONDVARS) +#define CH_CFG_USE_CONDVARS TRUE +#endif + +/** + * @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. + */ +#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT) +#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE +#endif + +/** + * @brief Events Flags APIs. + * @details If enabled then the event flags APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_EVENTS) +#define CH_CFG_USE_EVENTS TRUE +#endif + +/** + * @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. + */ +#if !defined(CH_CFG_USE_EVENTS_TIMEOUT) +#define CH_CFG_USE_EVENTS_TIMEOUT TRUE +#endif + +/** + * @brief Synchronous Messages APIs. + * @details If enabled then the synchronous messages APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MESSAGES) +#define CH_CFG_USE_MESSAGES TRUE +#endif + +/** + * @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. + */ +#if !defined(CH_CFG_USE_MESSAGES_PRIORITY) +#define CH_CFG_USE_MESSAGES_PRIORITY FALSE +#endif + +/** + * @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. + */ +#if !defined(CH_CFG_USE_DYNAMIC) +#define CH_CFG_USE_DYNAMIC FALSE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name OSLIB options + * @{ + */ +/*===========================================================================*/ + +/** + * @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. + */ +#if !defined(CH_CFG_USE_MAILBOXES) +#define CH_CFG_USE_MAILBOXES TRUE +#endif + +/** + * @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. + */ +#if !defined(CH_CFG_USE_MEMCORE) +#define CH_CFG_USE_MEMCORE TRUE +#endif + +/** + * @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. + */ +#if !defined(CH_CFG_MEMCORE_SIZE) +#define CH_CFG_MEMCORE_SIZE 0 +#endif + +/** + * @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. + */ +#if !defined(CH_CFG_USE_HEAP) +#define CH_CFG_USE_HEAP TRUE +#endif + +/** + * @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. + */ +#if !defined(CH_CFG_USE_MEMPOOLS) +#define CH_CFG_USE_MEMPOOLS FALSE +#endif + +/** + * @brief Objects FIFOs APIs. + * @details If enabled then the objects FIFOs APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_OBJ_FIFOS) +#define CH_CFG_USE_OBJ_FIFOS FALSE +#endif + +/** + * @brief Pipes APIs. + * @details If enabled then the pipes APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_PIPES) +#define CH_CFG_USE_PIPES FALSE +#endif + +/** + * @brief Objects Caches APIs. + * @details If enabled then the objects caches APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_OBJ_CACHES) +#define CH_CFG_USE_OBJ_CACHES TRUE +#endif + +/** + * @brief Delegate threads APIs. + * @details If enabled then the delegate threads APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_DELEGATES) +#define CH_CFG_USE_DELEGATES TRUE +#endif + +/** + * @brief Jobs Queues APIs. + * @details If enabled then the jobs queues APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_JOBS) +#define CH_CFG_USE_JOBS FALSE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Objects factory options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Objects Factory APIs. + * @details If enabled then the objects factory APIs are included in the + * kernel. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_CFG_USE_FACTORY) +#define CH_CFG_USE_FACTORY FALSE +#endif + +/** + * @brief Maximum length for object names. + * @details If the specified length is zero then the name is stored by + * pointer but this could have unintended side effects. + */ +#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH) +#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8 +#endif + +/** + * @brief Enables the registry of generic objects. + */ +#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY) +#define CH_CFG_FACTORY_OBJECTS_REGISTRY FALSE +#endif + +/** + * @brief Enables factory for generic buffers. + */ +#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS) +#define CH_CFG_FACTORY_GENERIC_BUFFERS FALSE +#endif + +/** + * @brief Enables factory for semaphores. + */ +#if !defined(CH_CFG_FACTORY_SEMAPHORES) +#define CH_CFG_FACTORY_SEMAPHORES FALSE +#endif + +/** + * @brief Enables factory for mailboxes. + */ +#if !defined(CH_CFG_FACTORY_MAILBOXES) +#define CH_CFG_FACTORY_MAILBOXES FALSE +#endif + +/** + * @brief Enables factory for objects FIFOs. + */ +#if !defined(CH_CFG_FACTORY_OBJ_FIFOS) +#define CH_CFG_FACTORY_OBJ_FIFOS FALSE +#endif + +/** + * @brief Enables factory for Pipes. + */ +#if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__) +#define CH_CFG_FACTORY_PIPES FALSE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Debug options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Debug option, kernel statistics. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_STATISTICS) +#define CH_DBG_STATISTICS FALSE +#endif + +/** + * @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. + */ +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) +#define CH_DBG_SYSTEM_STATE_CHECK FALSE +#endif + +/** + * @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. + */ +#if !defined(CH_DBG_ENABLE_CHECKS) +#define CH_DBG_ENABLE_CHECKS FALSE +#endif + +/** + * @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. + */ +#if !defined(CH_DBG_ENABLE_ASSERTS) +#define CH_DBG_ENABLE_ASSERTS FALSE +#endif + +/** + * @brief Debug option, trace buffer. + * @details If enabled then the trace buffer is activated. + * + * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. + */ +#if !defined(CH_DBG_TRACE_MASK) +#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED +#endif + +/** + * @brief Trace buffer entries. + * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is + * different from @p CH_DBG_TRACE_MASK_DISABLED. + */ +#if !defined(CH_DBG_TRACE_BUFFER_SIZE) +#define CH_DBG_TRACE_BUFFER_SIZE 128 +#endif + +/** + * @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. + */ +#if !defined(CH_DBG_ENABLE_STACK_CHECK) +#define CH_DBG_ENABLE_STACK_CHECK FALSE +#endif + +/** + * @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. + */ +#if !defined(CH_DBG_FILL_THREADS) +#define CH_DBG_FILL_THREADS FALSE +#endif + +/** + * @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. + */ +#if !defined(CH_DBG_THREADS_PROFILING) +#define CH_DBG_THREADS_PROFILING FALSE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel hooks + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System structure extension. + * @details User fields added to the end of the @p ch_system_t structure. + */ +#define CH_CFG_SYSTEM_EXTRA_FIELDS \ + /* Add system custom fields here.*/ + +/** + * @brief System initialization hook. + * @details User initialization code added to the @p chSysInit() function + * just before interrupts are enabled globally. + */ +#define CH_CFG_SYSTEM_INIT_HOOK() { \ + /* Add system initialization code here.*/ \ +} + +/** + * @brief OS instance structure extension. + * @details User fields added to the end of the @p os_instance_t structure. + */ +#define CH_CFG_OS_INSTANCE_EXTRA_FIELDS \ + /* Add OS instance custom fields here.*/ + +/** + * @brief OS instance initialization hook. + * + * @param[in] oip pointer to the @p os_instance_t structure + */ +#define CH_CFG_OS_INSTANCE_INIT_HOOK(oip) { \ + /* Add OS instance initialization code here.*/ \ +} + +/** + * @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 _thread_init() function. + * + * @note It is invoked from within @p _thread_init() and implicitly from all + * the threads creation APIs. + * + * @param[in] tp pointer to the @p thread_t structure + */ +#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. + * + * @param[in] tp pointer to the @p thread_t structure + */ +#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. + * + * @param[in] ntp thread being switched in + * @param[in] otp thread being switched out + */ +#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() { \ + /* Idle-enter code here.*/ \ +} + +/** + * @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() { \ + /* Idle-leave code here.*/ \ +} + +/** + * @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.*/ \ +} + +/** + * @brief Runtime Faults Collection Unit hook. + * @details This hook is invoked each time new faults are collected and stored. + */ +#define CH_CFG_RUNTIME_FAULTS_HOOK(mask) { \ + /* Faults handling code here.*/ \ +} + +/** @} */ + +/*===========================================================================*/ +/* Port-specific settings (override port settings defaulted in chcore.h). */ +/*===========================================================================*/ + +#endif /* CHCONF_H */ + +/** @} */ diff --git a/keyboards/modelh/config.h b/keyboards/modelh/config.h new file mode 100644 index 000000000000..7e8b76c20303 --- /dev/null +++ b/keyboards/modelh/config.h @@ -0,0 +1,150 @@ +/* +Copyright 2020 John Hawthorn + +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/>. +*/ + +#pragma once + +//#include "config_common.h" + +/* Model H customizations */ +#define MODELH_LED_PINS { B9, B8, B7 } + +#define MODELH_STATUS_LED C13 + + +/* key matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 16 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * + */ +#define MATRIX_ROW_PINS { B6, B5, B4, A15, B3, A0, A2, A1 } +#define MATRIX_COL_PINS { A10, A9, A8, B15, B14, B13, B12, B11, B10, B1, B0, A7, A6, A5, A4, A3 } +//#define UNUSED_PINS + +/* COL2ROW, ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* + * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN. + */ +//#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6 + +//#define BACKLIGHT_PIN B7 +//#define BACKLIGHT_LEVELS 3 +//#define BACKLIGHT_BREATHING + +// Model H should use absolute maximum 80mA when all LEDs are on and it is in +// use. Only requesting 100mA should allow it to work with devices only +// supporting USB 1.0 power levels like some iPads. +#define USB_MAX_POWER_CONSUMPTION 100 + +//#define RGB_DI_PIN E2 +//#ifdef RGB_DI_PIN +//# define RGBLED_NUM 16 +//# define RGBLIGHT_HUE_STEP 8 +//# define RGBLIGHT_SAT_STEP 8 +//# define RGBLIGHT_VAL_STEP 8 +//# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ +//# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ +/*== all animations enable ==*/ +//# define RGBLIGHT_ANIMATIONS +/*== or choose animations ==*/ +//# define RGBLIGHT_EFFECT_BREATHING +//# define RGBLIGHT_EFFECT_RAINBOW_MOOD +//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL +//# define RGBLIGHT_EFFECT_SNAKE +//# define RGBLIGHT_EFFECT_KNIGHT +//# define RGBLIGHT_EFFECT_CHRISTMAS +//# define RGBLIGHT_EFFECT_STATIC_GRADIENT +//# define RGBLIGHT_EFFECT_RGB_TEST +//# define RGBLIGHT_EFFECT_ALTERNATING +/*== customize breathing effect ==*/ +/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/ +//# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64 +/*==== use exp() and sin() ====*/ +//# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7 +//# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255 +//#endif + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCE 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +#define MATRIX_HAS_GHOST + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is useful for the Windows task manager shortcut (ctrl+shift+esc). + */ +//#define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * 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 + +/* disable these deprecated features by default */ +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* Bootmagic Lite key configuration */ +//#define BOOTMAGIC_LITE_ROW 0 +//#define BOOTMAGIC_LITE_COLUMN 0 diff --git a/keyboards/modelh/halconf.h b/keyboards/modelh/halconf.h new file mode 100644 index 000000000000..80abf9688d05 --- /dev/null +++ b/keyboards/modelh/halconf.h @@ -0,0 +1,553 @@ +/* + ChibiOS - Copyright (C) 2006..2020 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 + +#define _CHIBIOS_HAL_CONF_ +#define _CHIBIOS_HAL_CONF_VER_8_4_ + +#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 cryptographic subsystem. + */ +#if !defined(HAL_USE_CRY) || defined(__DOXYGEN__) +#define HAL_USE_CRY FALSE +#endif + +/** + * @brief Enables the DAC subsystem. + */ +#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) +#define HAL_USE_DAC FALSE +#endif + +/** + * @brief Enables the EFlash subsystem. + */ +#if !defined(HAL_USE_EFL) || defined(__DOXYGEN__) +#define HAL_USE_EFL 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 FALSE +#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 TRUE +#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 FALSE +#endif + +/** + * @brief Enables the SERIAL over USB subsystem. + */ +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL_USB FALSE +#endif + +/** + * @brief Enables the SIO subsystem. + */ +#if !defined(HAL_USE_SIO) || defined(__DOXYGEN__) +#define HAL_USE_SIO FALSE +#endif + +/** + * @brief Enables the SPI subsystem. + */ +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) +#define HAL_USE_SPI FALSE +#endif + +/** + * @brief Enables the TRNG subsystem. + */ +#if !defined(HAL_USE_TRNG) || defined(__DOXYGEN__) +#define HAL_USE_TRNG FALSE +#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 + +/** + * @brief Enables the WSPI subsystem. + */ +#if !defined(HAL_USE_WSPI) || defined(__DOXYGEN__) +#define HAL_USE_WSPI FALSE +#endif + +/*===========================================================================*/ +/* PAL driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(PAL_USE_CALLBACKS) || defined(__DOXYGEN__) +#define PAL_USE_CALLBACKS FALSE +#endif + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(PAL_USE_WAIT) || defined(__DOXYGEN__) +#define PAL_USE_WAIT 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 + +/** + * @brief Enforces the driver to use direct callbacks rather than OSAL events. + */ +#if !defined(CAN_ENFORCE_USE_CALLBACKS) || defined(__DOXYGEN__) +#define CAN_ENFORCE_USE_CALLBACKS FALSE +#endif + +/*===========================================================================*/ +/* CRY driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the SW fall-back of the cryptographic driver. + * @details When enabled, this option, activates a fall-back software + * implementation for algorithms not supported by the underlying + * hardware. + * @note Fall-back implementations may not be present for all algorithms. + */ +#if !defined(HAL_CRY_USE_FALLBACK) || defined(__DOXYGEN__) +#define HAL_CRY_USE_FALLBACK FALSE +#endif + +/** + * @brief Makes the driver forcibly use the fall-back implementations. + */ +#if !defined(HAL_CRY_ENFORCE_FALLBACK) || defined(__DOXYGEN__) +#define HAL_CRY_ENFORCE_FALLBACK FALSE +#endif + +/*===========================================================================*/ +/* DAC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(DAC_USE_WAIT) || defined(__DOXYGEN__) +#define DAC_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p dacAcquireBus() and @p dacReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(DAC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define DAC_USE_MUTUAL_EXCLUSION 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 the zero-copy API. + */ +#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 Timeout before assuming a failure while waiting for card idle. + * @note Time is in milliseconds. + */ +#if !defined(MMC_IDLE_TIMEOUT_MS) || defined(__DOXYGEN__) +#define MMC_IDLE_TIMEOUT_MS 1000 +#endif + +/** + * @brief Mutual exclusion on the SPI bus. + */ +#if !defined(MMC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define MMC_USE_MUTUAL_EXCLUSION 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 + +/** + * @brief OCR initialization constant for V20 cards. + */ +#if !defined(SDC_INIT_OCR_V20) || defined(__DOXYGEN__) +#define SDC_INIT_OCR_V20 0x50FF8000U +#endif + +/** + * @brief OCR initialization constant for non-V20 cards. + */ +#if !defined(SDC_INIT_OCR) || defined(__DOXYGEN__) +#define SDC_INIT_OCR 0x80100000U +#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 16 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_BUFFERS_SIZE 16 +#endif + +/*===========================================================================*/ +/* SIO driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Default bit rate. + * @details Configuration parameter, this is the baud rate selected for the + * default configuration. + */ +#if !defined(SIO_DEFAULT_BITRATE) || defined(__DOXYGEN__) +#define SIO_DEFAULT_BITRATE 38400 +#endif + +/** + * @brief Support for thread synchronization API. + */ +#if !defined(SIO_USE_SYNCHRONIZATION) || defined(__DOXYGEN__) +#define SIO_USE_SYNCHRONIZATION TRUE +#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 256 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_USB_BUFFERS_SIZE 1 +#endif + +/** + * @brief Serial over USB number of buffers. + * @note The default is 2 buffers. + */ +#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__) +#define SERIAL_USB_BUFFERS_NUMBER 2 +#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 Inserts an assertion on function errors before returning. + */ +#if !defined(SPI_USE_ASSERT_ON_ERROR) || defined(__DOXYGEN__) +#define SPI_USE_ASSERT_ON_ERROR 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 + +/** + * @brief Handling method for SPI CS line. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_SELECT_MODE) || defined(__DOXYGEN__) +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD +#endif + +/*===========================================================================*/ +/* UART driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__) +#define UART_USE_WAIT FALSE +#endif + +/** + * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define UART_USE_MUTUAL_EXCLUSION FALSE +#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 + +/*===========================================================================*/ +/* WSPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(WSPI_USE_WAIT) || defined(__DOXYGEN__) +#define WSPI_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p wspiAcquireBus() and @p wspiReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(WSPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define WSPI_USE_MUTUAL_EXCLUSION TRUE +#endif + +#endif /* HALCONF_H */ + +/** @} */ diff --git a/keyboards/modelh/info.json b/keyboards/modelh/info.json new file mode 100644 index 000000000000..a0349ecf2885 --- /dev/null +++ b/keyboards/modelh/info.json @@ -0,0 +1,1066 @@ +{ + "keyboard_name": "IBM Model M", + "url": "modelh.club", + "maintainer": "John Hawthorn", + "usb": { + "vid": "0xFEED", + "pid": "0xB155", + "device_version": "1.0.0" + }, + "manufacturer": "IBM", + "processor": "STM32F103", + "bootloader": "stm32-dfu", + "layouts": { + "LAYOUT_fullsize_iso_wkl": { + "layout": [ + { + "label": "Esc", + "x": 0, + "y": 0 + }, + { + "label": "F1", + "x": 2, + "y": 0 + }, + { + "label": "F2", + "x": 3, + "y": 0 + }, + { + "label": "F3", + "x": 4, + "y": 0 + }, + { + "label": "F4", + "x": 5, + "y": 0 + }, + { + "label": "F5", + "x": 6.5, + "y": 0 + }, + { + "label": "F6", + "x": 7.5, + "y": 0 + }, + { + "label": "F7", + "x": 8.5, + "y": 0 + }, + { + "label": "F8", + "x": 9.5, + "y": 0 + }, + { + "label": "F9", + "x": 11, + "y": 0 + }, + { + "label": "F10", + "x": 12, + "y": 0 + }, + { + "label": "F11", + "x": 13, + "y": 0 + }, + { + "label": "F12", + "x": 14, + "y": 0 + }, + { + "label": "PrtSc", + "x": 15.25, + "y": 0 + }, + { + "label": "Scroll Lock", + "x": 16.25, + "y": 0 + }, + { + "label": "Pause", + "x": 17.25, + "y": 0 + }, + { + "label": "~", + "x": 0, + "y": 1.5 + }, + { + "label": "!", + "x": 1, + "y": 1.5 + }, + { + "label": "@", + "x": 2, + "y": 1.5 + }, + { + "label": "#", + "x": 3, + "y": 1.5 + }, + { + "label": "$", + "x": 4, + "y": 1.5 + }, + { + "label": "%", + "x": 5, + "y": 1.5 + }, + { + "label": "^", + "x": 6, + "y": 1.5 + }, + { + "label": "&", + "x": 7, + "y": 1.5 + }, + { + "label": "*", + "x": 8, + "y": 1.5 + }, + { + "label": "(", + "x": 9, + "y": 1.5 + }, + { + "label": ")", + "x": 10, + "y": 1.5 + }, + { + "label": "_", + "x": 11, + "y": 1.5 + }, + { + "label": "+", + "x": 12, + "y": 1.5 + }, + { + "label": "Backspace", + "x": 13, + "y": 1.5, + "w": 2 + }, + { + "label": "Insert", + "x": 15.25, + "y": 1.5 + }, + { + "label": "Home", + "x": 16.25, + "y": 1.5 + }, + { + "label": "PgUp", + "x": 17.25, + "y": 1.5 + }, + { + "label": "Num Lock", + "x": 18.5, + "y": 1.5 + }, + { + "label": "/", + "x": 19.5, + "y": 1.5 + }, + { + "label": "*", + "x": 20.5, + "y": 1.5 + }, + { + "label": "-", + "x": 21.5, + "y": 1.5 + }, + { + "label": "Tab", + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "label": "Q", + "x": 1.5, + "y": 2.5 + }, + { + "label": "W", + "x": 2.5, + "y": 2.5 + }, + { + "label": "E", + "x": 3.5, + "y": 2.5 + }, + { + "label": "R", + "x": 4.5, + "y": 2.5 + }, + { + "label": "T", + "x": 5.5, + "y": 2.5 + }, + { + "label": "Y", + "x": 6.5, + "y": 2.5 + }, + { + "label": "U", + "x": 7.5, + "y": 2.5 + }, + { + "label": "I", + "x": 8.5, + "y": 2.5 + }, + { + "label": "O", + "x": 9.5, + "y": 2.5 + }, + { + "label": "P", + "x": 10.5, + "y": 2.5 + }, + { + "label": "{", + "x": 11.5, + "y": 2.5 + }, + { + "label": "}", + "x": 12.5, + "y": 2.5 + }, + { + "label": "Delete", + "x": 15.25, + "y": 2.5 + }, + { + "label": "End", + "x": 16.25, + "y": 2.5 + }, + { + "label": "PgDn", + "x": 17.25, + "y": 2.5 + }, + { + "label": "7", + "x": 18.5, + "y": 2.5 + }, + { + "label": "8", + "x": 19.5, + "y": 2.5 + }, + { + "label": "9", + "x": 20.5, + "y": 2.5 + }, + { + "label": "+", + "x": 21.5, + "y": 2.5, + "h": 2 + }, + { + "label": "Caps Lock", + "x": 0, + "y": 3.5, + "w": 1.5 + }, + { + "label": "A", + "x": 1.75, + "y": 3.5 + }, + { + "label": "S", + "x": 2.75, + "y": 3.5 + }, + { + "label": "D", + "x": 3.75, + "y": 3.5 + }, + { + "label": "F", + "x": 4.75, + "y": 3.5 + }, + { + "label": "G", + "x": 5.75, + "y": 3.5 + }, + { + "label": "H", + "x": 6.75, + "y": 3.5 + }, + { + "label": "J", + "x": 7.75, + "y": 3.5 + }, + { + "label": "K", + "x": 8.75, + "y": 3.5 + }, + { + "label": "L", + "x": 9.75, + "y": 3.5 + }, + { + "label": ":", + "x": 10.75, + "y": 3.5 + }, + { + "label": "\"", + "x": 11.75, + "y": 3.5 + }, + { + "label": "~", + "x": 12.75, + "y": 3.5 + }, + { + "label": "Enter", + "x": 13.75, + "y": 2.5, + "w": 1.25, + "h": 2 + }, + { + "label": "4", + "x": 18.5, + "y": 3.5 + }, + { + "label": "5", + "x": 19.5, + "y": 3.5 + }, + { + "label": "6", + "x": 20.5, + "y": 3.5 + }, + { + "label": "Shift", + "x": 0, + "y": 4.5, + "w": 1.25 + }, + { + "label": "|", + "x": 1.25, + "y": 4.5 + }, + { + "label": "Z", + "x": 2.25, + "y": 4.5 + }, + { + "label": "X", + "x": 3.25, + "y": 4.5 + }, + { + "label": "C", + "x": 4.25, + "y": 4.5 + }, + { + "label": "V", + "x": 5.25, + "y": 4.5 + }, + { + "label": "B", + "x": 6.25, + "y": 4.5 + }, + { + "label": "N", + "x": 7.25, + "y": 4.5 + }, + { + "label": "M", + "x": 8.25, + "y": 4.5 + }, + { + "label": "<", + "x": 9.25, + "y": 4.5 + }, + { + "label": ">", + "x": 10.25, + "y": 4.5 + }, + { + "label": "?", + "x": 11.25, + "y": 4.5 + }, + { + "label": "Shift", + "x": 12.25, + "y": 4.5, + "w": 2.75 + }, + { + "label": "↑", + "x": 16.25, + "y": 4.5 + }, + { + "label": "1", + "x": 18.5, + "y": 4.5 + }, + { + "label": "2", + "x": 19.5, + "y": 4.5 + }, + { + "label": "3", + "x": 20.5, + "y": 4.5 + }, + { + "label": "Enter", + "x": 21.5, + "y": 4.5, + "h": 2 + }, + { + "label": "Ctrl", + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "label": "Alt", + "x": 2.5, + "y": 5.5, + "w": 1.5 + }, + { + "x": 4, + "y": 5.5, + "w": 7 + }, + { + "label": "Alt", + "x": 11, + "y": 5.5, + "w": 1.5 + }, + { + "label": "Ctrl", + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "label": "←", + "x": 15.25, + "y": 5.5 + }, + { + "label": "↓", + "x": 16.25, + "y": 5.5 + }, + { + "label": "→", + "x": 17.25, + "y": 5.5 + }, + { + "label": "0", + "x": 18.5, + "y": 5.5, + "w": 2 + }, + { + "label": ".", + "x": 20.5, + "y": 5.5 + } + ] + }, + "LAYOUT_fullsize_ansi_wkl": { + "layout": [ + { + "label": "Esc", + "x": 0, + "y": 0 + }, + { + "label": "F1", + "x": 2, + "y": 0 + }, + { + "label": "F2", + "x": 3, + "y": 0 + }, + { + "label": "F3", + "x": 4, + "y": 0 + }, + { + "label": "F4", + "x": 5, + "y": 0 + }, + { + "label": "F5", + "x": 6.5, + "y": 0 + }, + { + "label": "F6", + "x": 7.5, + "y": 0 + }, + { + "label": "F7", + "x": 8.5, + "y": 0 + }, + { + "label": "F8", + "x": 9.5, + "y": 0 + }, + { + "label": "F9", + "x": 11, + "y": 0 + }, + { + "label": "F10", + "x": 12, + "y": 0 + }, + { + "label": "F11", + "x": 13, + "y": 0 + }, + { + "label": "F12", + "x": 14, + "y": 0 + }, + { + "label": "PrtSc", + "x": 15.25, + "y": 0 + }, + { + "label": "Scroll Lock", + "x": 16.25, + "y": 0 + }, + { + "label": "Pause", + "x": 17.25, + "y": 0 + }, + { + "label": "~", + "x": 0, + "y": 1.5 + }, + { + "label": "!", + "x": 1, + "y": 1.5 + }, + { + "label": "@", + "x": 2, + "y": 1.5 + }, + { + "label": "#", + "x": 3, + "y": 1.5 + }, + { + "label": "$", + "x": 4, + "y": 1.5 + }, + { + "label": "%", + "x": 5, + "y": 1.5 + }, + { + "label": "^", + "x": 6, + "y": 1.5 + }, + { + "label": "&", + "x": 7, + "y": 1.5 + }, + { + "label": "*", + "x": 8, + "y": 1.5 + }, + { + "label": "(", + "x": 9, + "y": 1.5 + }, + { + "label": ")", + "x": 10, + "y": 1.5 + }, + { + "label": "_", + "x": 11, + "y": 1.5 + }, + { + "label": "+", + "x": 12, + "y": 1.5 + }, + { + "label": "Backspace", + "x": 13, + "y": 1.5, + "w": 2 + }, + { + "label": "Insert", + "x": 15.25, + "y": 1.5 + }, + { + "label": "Home", + "x": 16.25, + "y": 1.5 + }, + { + "label": "PgUp", + "x": 17.25, + "y": 1.5 + }, + { + "label": "Num Lock", + "x": 18.5, + "y": 1.5 + }, + { + "label": "/", + "x": 19.5, + "y": 1.5 + }, + { + "label": "*", + "x": 20.5, + "y": 1.5 + }, + { + "label": "-", + "x": 21.5, + "y": 1.5 + }, + { + "label": "Tab", + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "label": "Q", + "x": 1.5, + "y": 2.5 + }, + { + "label": "W", + "x": 2.5, + "y": 2.5 + }, + { + "label": "E", + "x": 3.5, + "y": 2.5 + }, + { + "label": "R", + "x": 4.5, + "y": 2.5 + }, + { + "label": "T", + "x": 5.5, + "y": 2.5 + }, + { + "label": "Y", + "x": 6.5, + "y": 2.5 + }, + { + "label": "U", + "x": 7.5, + "y": 2.5 + }, + { + "label": "I", + "x": 8.5, + "y": 2.5 + }, + { + "label": "O", + "x": 9.5, + "y": 2.5 + }, + { + "label": "P", + "x": 10.5, + "y": 2.5 + }, + { + "label": "{", + "x": 11.5, + "y": 2.5 + }, + { + "label": "}", + "x": 12.5, + "y": 2.5 + }, + { + "label": "|", + "x": 13.5, + "y": 2.5, + "w": 1.5 + }, + { + "label": "Delete", + "x": 15.25, + "y": 2.5 + }, + { + "label": "End", + "x": 16.25, + "y": 2.5 + }, + { + "label": "PgDn", + "x": 17.25, + "y": 2.5 + }, + { + "label": "7", + "x": 18.5, + "y": 2.5 + }, + { + "label": "8", + "x": 19.5, + "y": 2.5 + }, + { + "label": "9", + "x": 20.5, + "y": 2.5 + }, + { + "label": "+", + "x": 21.5, + "y": 2.5, + "h": 2 + }, + { + "label": "Caps Lock", + "x": 0, + "y": 3.5, + "w": 1.5 + }, + { + "label": "A", + "x": 1.75, + "y": 3.5 + }, + { + "label": "S", + "x": 2.75, + "y": 3.5 + }, + { + "label": "D", + "x": 3.75, + "y": 3.5 + }, + { + "label": "F", + "x": 4.75, + "y": 3.5 + }, + { + "label": "G", + "x": 5.75, + "y": 3.5 + }, + { + "label": "H", + "x": 6.75, + "y": 3.5 + }, + { + "label": "J", + "x": 7.75, + "y": 3.5 + }, + { + "label": "K", + "x": 8.75, + "y": 3.5 + }, + { + "label": "L", + "x": 9.75, + "y": 3.5 + }, + { + "label": ":", + "x": 10.75, + "y": 3.5 + }, + { + "label": "\"", + "x": 11.75, + "y": 3.5 + }, + { + "label": "Enter", + "x": 12.75, + "y": 3.5, + "w": 2.25 + }, + { + "label": "4", + "x": 18.5, + "y": 3.5 + }, + { + "label": "5", + "x": 19.5, + "y": 3.5 + }, + { + "label": "6", + "x": 20.5, + "y": 3.5 + }, + { + "label": "Shift", + "x": 0, + "y": 4.5, + "w": 2.25 + }, + { + "label": "Z", + "x": 2.25, + "y": 4.5 + }, + { + "label": "X", + "x": 3.25, + "y": 4.5 + }, + { + "label": "C", + "x": 4.25, + "y": 4.5 + }, + { + "label": "V", + "x": 5.25, + "y": 4.5 + }, + { + "label": "B", + "x": 6.25, + "y": 4.5 + }, + { + "label": "N", + "x": 7.25, + "y": 4.5 + }, + { + "label": "M", + "x": 8.25, + "y": 4.5 + }, + { + "label": "<", + "x": 9.25, + "y": 4.5 + }, + { + "label": ">", + "x": 10.25, + "y": 4.5 + }, + { + "label": "?", + "x": 11.25, + "y": 4.5 + }, + { + "label": "Shift", + "x": 12.25, + "y": 4.5, + "w": 2.75 + }, + { + "label": "↑", + "x": 16.25, + "y": 4.5 + }, + { + "label": "1", + "x": 18.5, + "y": 4.5 + }, + { + "label": "2", + "x": 19.5, + "y": 4.5 + }, + { + "label": "3", + "x": 20.5, + "y": 4.5 + }, + { + "label": "Enter", + "x": 21.5, + "y": 4.5, + "h": 2 + }, + { + "label": "Ctrl", + "x": 0, + "y": 5.5, + "w": 1.5 + }, + { + "label": "Alt", + "x": 2.5, + "y": 5.5, + "w": 1.5 + }, + { + "x": 4, + "y": 5.5, + "w": 7 + }, + { + "label": "Alt", + "x": 11, + "y": 5.5, + "w": 1.5 + }, + { + "label": "Ctrl", + "x": 13.5, + "y": 5.5, + "w": 1.5 + }, + { + "label": "←", + "x": 15.25, + "y": 5.5 + }, + { + "label": "↓", + "x": 16.25, + "y": 5.5 + }, + { + "label": "→", + "x": 17.25, + "y": 5.5 + }, + { + "label": "0", + "x": 18.5, + "y": 5.5, + "w": 2 + }, + { + "label": ".", + "x": 20.5, + "y": 5.5 + } + ] + } + } +} diff --git a/keyboards/modelh/keymaps/default/keymap.c b/keyboards/modelh/keymaps/default/keymap.c new file mode 100644 index 000000000000..89f899faad40 --- /dev/null +++ b/keyboards/modelh/keymaps/default/keymap.c @@ -0,0 +1,31 @@ +/* Copyright 2020 John Hawthorn + * + * 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 QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_fullsize_ansi_wkl( /* Base layer */ + KC_ESC, 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_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, 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_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_CAPS, 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_P4, KC_P5, KC_P6, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} diff --git a/keyboards/modelh/keymaps/default/readme.md b/keyboards/modelh/keymaps/default/readme.md new file mode 100644 index 000000000000..5540d213c784 --- /dev/null +++ b/keyboards/modelh/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for modelh diff --git a/keyboards/modelh/mcuconf.h b/keyboards/modelh/mcuconf.h new file mode 100644 index 000000000000..a645d3c5d5cf --- /dev/null +++ b/keyboards/modelh/mcuconf.h @@ -0,0 +1,209 @@ +/* + 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 STM32F103_MCUCONF + +/* + * STM32F103 drivers configuration. + * The following settings override the default settings present in + * the various device driver implementation headers. + * Note that the settings for each driver only have effect if the whole + * driver is enabled in halconf.h. + * + * IRQ priorities: + * 15...0 Lowest...Highest. + * + * DMA priorities: + * 0...3 Lowest...Highest. + */ + +/* + * HAL driver system settings. + */ +#define STM32_NO_INIT FALSE +#define STM32_HSI_ENABLED TRUE +#define STM32_LSI_ENABLED FALSE +#define STM32_HSE_ENABLED TRUE +#define STM32_LSE_ENABLED FALSE +#define STM32_SW STM32_SW_PLL +#define STM32_PLLSRC STM32_PLLSRC_HSE +#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1 +#define STM32_PLLMUL_VALUE 9 +#define STM32_HPRE STM32_HPRE_DIV1 +#define STM32_PPRE1 STM32_PPRE1_DIV2 +#define STM32_PPRE2 STM32_PPRE2_DIV2 +#define STM32_ADCPRE STM32_ADCPRE_DIV4 +#define STM32_USB_CLOCK_REQUIRED TRUE +#define STM32_USBPRE STM32_USBPRE_DIV1P5 +#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK +#define STM32_RTCSEL STM32_RTCSEL_HSEDIV +#define STM32_PVD_ENABLE FALSE +#define STM32_PLS STM32_PLS_LEV0 + +/* + * ADC driver system settings. + */ +#define STM32_ADC_USE_ADC1 FALSE +#define STM32_ADC_ADC1_DMA_PRIORITY 2 +#define STM32_ADC_ADC1_IRQ_PRIORITY 6 + +/* + * CAN driver system settings. + */ +#define STM32_CAN_USE_CAN1 FALSE +#define STM32_CAN_CAN1_IRQ_PRIORITY 11 + +/* + * EXT driver system settings. + */ +#define STM32_EXT_EXTI0_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI1_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI2_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI3_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI4_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI16_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI17_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI18_IRQ_PRIORITY 6 +#define STM32_EXT_EXTI19_IRQ_PRIORITY 6 + +/* + * GPT driver system settings. + */ +#define STM32_GPT_USE_TIM1 FALSE +#define STM32_GPT_USE_TIM2 FALSE +#define STM32_GPT_USE_TIM3 FALSE +#define STM32_GPT_USE_TIM4 FALSE +#define STM32_GPT_USE_TIM5 FALSE +#define STM32_GPT_USE_TIM8 FALSE +#define STM32_GPT_TIM1_IRQ_PRIORITY 7 +#define STM32_GPT_TIM2_IRQ_PRIORITY 7 +#define STM32_GPT_TIM3_IRQ_PRIORITY 7 +#define STM32_GPT_TIM4_IRQ_PRIORITY 7 +#define STM32_GPT_TIM5_IRQ_PRIORITY 7 +#define STM32_GPT_TIM8_IRQ_PRIORITY 7 + +/* + * I2C driver system settings. + */ +#define STM32_I2C_USE_I2C1 FALSE +#define STM32_I2C_USE_I2C2 FALSE +#define STM32_I2C_BUSY_TIMEOUT 50 +#define STM32_I2C_I2C1_IRQ_PRIORITY 5 +#define STM32_I2C_I2C2_IRQ_PRIORITY 5 +#define STM32_I2C_I2C1_DMA_PRIORITY 3 +#define STM32_I2C_I2C2_DMA_PRIORITY 3 +#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") + +/* + * ICU driver system settings. + */ +#define STM32_ICU_USE_TIM1 FALSE +#define STM32_ICU_USE_TIM2 FALSE +#define STM32_ICU_USE_TIM3 FALSE +#define STM32_ICU_USE_TIM4 FALSE +#define STM32_ICU_USE_TIM5 FALSE +#define STM32_ICU_USE_TIM8 FALSE +#define STM32_ICU_TIM1_IRQ_PRIORITY 7 +#define STM32_ICU_TIM2_IRQ_PRIORITY 7 +#define STM32_ICU_TIM3_IRQ_PRIORITY 7 +#define STM32_ICU_TIM4_IRQ_PRIORITY 7 +#define STM32_ICU_TIM5_IRQ_PRIORITY 7 +#define STM32_ICU_TIM8_IRQ_PRIORITY 7 + +/* + * PWM driver system settings. + */ +#define STM32_PWM_USE_ADVANCED FALSE +#define STM32_PWM_USE_TIM1 FALSE +#define STM32_PWM_USE_TIM2 TRUE +#define STM32_PWM_USE_TIM3 FALSE +#define STM32_PWM_USE_TIM4 FALSE +#define STM32_PWM_USE_TIM5 FALSE +#define STM32_PWM_USE_TIM8 FALSE +#define STM32_PWM_TIM1_IRQ_PRIORITY 7 +#define STM32_PWM_TIM2_IRQ_PRIORITY 7 +#define STM32_PWM_TIM3_IRQ_PRIORITY 7 +#define STM32_PWM_TIM4_IRQ_PRIORITY 7 +#define STM32_PWM_TIM5_IRQ_PRIORITY 7 +#define STM32_PWM_TIM8_IRQ_PRIORITY 7 + +/* + * RTC driver system settings. + */ +#define STM32_RTC_IRQ_PRIORITY 15 + +/* + * SERIAL driver system settings. + */ +#define STM32_SERIAL_USE_USART1 FALSE +#define STM32_SERIAL_USE_USART2 FALSE +#define STM32_SERIAL_USE_USART3 FALSE +#define STM32_SERIAL_USE_UART4 FALSE +#define STM32_SERIAL_USE_UART5 FALSE +#define STM32_SERIAL_USART1_PRIORITY 12 +#define STM32_SERIAL_USART2_PRIORITY 12 +#define STM32_SERIAL_USART3_PRIORITY 12 +#define STM32_SERIAL_UART4_PRIORITY 12 +#define STM32_SERIAL_UART5_PRIORITY 12 + +/* + * SPI driver system settings. + */ +#define STM32_SPI_USE_SPI1 FALSE +#define STM32_SPI_USE_SPI2 FALSE +#define STM32_SPI_USE_SPI3 FALSE +#define STM32_SPI_SPI1_DMA_PRIORITY 1 +#define STM32_SPI_SPI2_DMA_PRIORITY 1 +#define STM32_SPI_SPI3_DMA_PRIORITY 1 +#define STM32_SPI_SPI1_IRQ_PRIORITY 10 +#define STM32_SPI_SPI2_IRQ_PRIORITY 10 +#define STM32_SPI_SPI3_IRQ_PRIORITY 10 +#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure") + +/* + * ST driver system settings. + */ +#define STM32_ST_IRQ_PRIORITY 8 +#define STM32_ST_USE_TIMER 2 + +/* + * UART driver system settings. + */ +#define STM32_UART_USE_USART1 FALSE +#define STM32_UART_USE_USART2 FALSE +#define STM32_UART_USE_USART3 FALSE +#define STM32_UART_USART1_IRQ_PRIORITY 12 +#define STM32_UART_USART2_IRQ_PRIORITY 12 +#define STM32_UART_USART3_IRQ_PRIORITY 12 +#define STM32_UART_USART1_DMA_PRIORITY 0 +#define STM32_UART_USART2_DMA_PRIORITY 0 +#define STM32_UART_USART3_DMA_PRIORITY 0 +#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure") + +/* + * USB driver system settings. + */ +#define STM32_USB_USE_USB1 TRUE +#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE +#define STM32_USB_USB1_HP_IRQ_PRIORITY 13 +#define STM32_USB_USB1_LP_IRQ_PRIORITY 14 + +#endif /* _MCUCONF_H_ */ diff --git a/keyboards/modelh/modelh.c b/keyboards/modelh/modelh.c new file mode 100644 index 000000000000..4c278a5e7ca4 --- /dev/null +++ b/keyboards/modelh/modelh.c @@ -0,0 +1,48 @@ +/* Copyright 2020 John Hawthorn + * + * 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 "modelh.h" + +#ifdef MODELH_LED_PINS +static const pin_t led_pins[3] = MODELH_LED_PINS; + +bool led_update_kb(led_t led_state) { + bool res = led_update_user(led_state); + if(res) { + writePin(led_pins[0], !led_state.num_lock); + writePin(led_pins[1], !led_state.caps_lock); + writePin(led_pins[2], !led_state.scroll_lock); + } + return res; +} + +void led_init_ports() { + setPinOutput(led_pins[0]); + setPinOutput(led_pins[1]); + setPinOutput(led_pins[2]); +} + +#else +void led_init_ports() { } +#endif + +void keyboard_pre_init_kb(void) { + setPinOutput(MODELH_STATUS_LED); + writePin(MODELH_STATUS_LED, 0); + + led_init_ports(); + keyboard_pre_init_user(); +} diff --git a/keyboards/modelh/modelh.h b/keyboards/modelh/modelh.h new file mode 100644 index 000000000000..d8dc4edfc8e4 --- /dev/null +++ b/keyboards/modelh/modelh.h @@ -0,0 +1,70 @@ +/* Copyright 2020 John Hawthorn + * + * 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/>. + */ + +#pragma once + +#include "quantum.h" + +/* This is a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ + +#define LAYOUT_fullsize_ansi_wkl( \ + K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, \ + \ + K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, K4Q, K4R, K4S, K4T, K4U, \ + K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3O, K3P, K3Q, K3R, K3S, K3T, K3U, \ + K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2N, K2O, K2P, K2Q, \ + K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, K1O, K1P, K1Q, K1R, \ + K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, K0I, K0J \ +) \ +{ \ +/* 00 */ { KC_NO, KC_NO, K5A, KC_NO, K5E, K2F, K5F, K2G, K5G, KC_NO, K2L, KC_NO, K0I, K0J, K1N, K0B }, \ +/* 01 */ { KC_NO, K1A, K3A, K2A, K5D, K3F, K4N, K3G, K3M, K5H, K3L, K2O, K2P, K2Q, KC_NO, KC_NO }, \ +/* 02 */ { K0A, KC_NO, K4A, K5B, K5C, K4F, K5J, K4G, K4M, K5I, K4L, K3O, K4O, K4Q, K4P, KC_NO }, \ +/* 03 */ { KC_NO, KC_NO, K4B, K4C, K4D, K4E, K5K, K4H, K4I, K4J, K4K, K5L, K5M, K3Q, K3P, K5N }, \ +/* 04 */ { KC_NO, KC_NO, K3B, K3C, K3D, K3E, KC_NO, K3H, K3I, K3J, K3K, K3R, K3S, K3T, K3U, K5O }, \ +/* 05 */ { KC_NO, KC_NO, K2B, K2C, K2D, K2E, K3N, K2H, K2I, K2J, K2K, K1O, K1P, K1Q, K1R, KC_NO }, \ +/* 06 */ { K0E, K1M, K1C, K1D, K1E, K1F, K2N, K1I, K1J, K1K, KC_NO, K4R, K4S, K4T, K5P, KC_NO }, \ +/* 07 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K1G, K0C, K1H, KC_NO, KC_NO, K1L, K0G, K0H, K4U, K0F, K0D }, \ +} +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ + + +#define LAYOUT_fullsize_iso_wkl( \ + K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, \ + \ + K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, K4Q, K4R, K4S, K4T, K4U, \ + K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, K3P, K3Q, K3R, K3S, K3T, K3U, \ + K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2N, K2O, K2P, K2Q, \ + K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, K1O, K1P, K1Q, K1R, \ + K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, K0I, K0J \ +) \ +{ \ + { KC_NO, KC_NO, K5A, K1B, K5E, K2F, K5F, K2G, K5G, KC_NO, K2L, KC_NO, K0I, K0J, K1N, K0B }, \ + { KC_NO, K1A, K3A, K2A, K5D, K3F, K4N, K3G, K3M, K5H, K3L, K2O, K2P, K2Q, KC_NO, KC_NO }, \ + { K0A, KC_NO, K4A, K5B, K5C, K4F, K5J, K4G, K4M, K5I, K4L, K3O, K4O, K4Q, K4P, KC_NO }, \ + { KC_NO, KC_NO, K4B, K4C, K4D, K4E, K5K, K4H, K4I, K4J, K4K, K5L, K5M, K3Q, K3P, K5N }, \ + { KC_NO, KC_NO, K3B, K3C, K3D, K3E, KC_NO, K3H, K3I, K3J, K3K, K3R, K3S, K3T, K3U, K5O }, \ + { KC_NO, KC_NO, K2B, K2C, K2D, K2E, KC_NO, K2H, K2I, K2J, K2K, K1O, K1P, K1Q, K1R, KC_NO }, \ + { K0E, K1M, K1C, K1D, K1E, K1F, K2N, K1I, K1J, K1K, K2M, K4R, K4S, K4T, K5P, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K1G, K0C, K1H, KC_NO, KC_NO, K1L, K0G, K0H, K4U, K0F, K0D } \ +} diff --git a/keyboards/modelh/readme.md b/keyboards/modelh/readme.md new file mode 100644 index 000000000000..7ae9df4d01b4 --- /dev/null +++ b/keyboards/modelh/readme.md @@ -0,0 +1,19 @@ +# Model H - A USB capable PCB for the IBM Model M keyboard + + + +This conversion kit allows you to replace your IBM Model M's original internal controller board with a modern USB board. This aims to match the footprint of the original controller and plugs into the original keyboard matrix, but exposes a USB port through the original SDL connector. + +* Keyboard Maintainer: [John Hawthorn](https://github.com/jhawthorn) +* Hardware Supported: IBM Model M +* Hardware Availability: [www.modelh.club](www.modelh.club) + +Make example for this keyboard (after setting up your build environment): + + make modelh:default + +Flashing example for this keyboard: + + make modelh: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). diff --git a/keyboards/modelh/rules.mk b/keyboards/modelh/rules.mk new file mode 100644 index 000000000000..ddf76f52bb70 --- /dev/null +++ b/keyboards/modelh/rules.mk @@ -0,0 +1,22 @@ +# MCU name +MCU = STM32F103 + +# GENERIC STM32F103C8T6 board - stm32duino bootloader +OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000 +MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader +BOARD = STM32_F103_STM32DUINO + +DFU_ARGS = -d 1eaf:0003 -a2 -R +DFU_SUFFIX_ARGS = -v 1eaf -p 0003 + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration +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 = no # USB Nkey Rollover +CUSTOM_MATRIX = no # Custom matrix file +MOUSEKEY_ENABLE = no From 4d2456f8e0982f7c9edb6a87bb6f343b4fead7dd Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome.berclaz@a3.epfl.ch> Date: Fri, 28 Apr 2023 21:54:14 -0700 Subject: [PATCH 02/16] cleanup --- keyboards/modelh/config.h | 1 - 1 file changed, 1 deletion(-) diff --git a/keyboards/modelh/config.h b/keyboards/modelh/config.h index 7e8b76c20303..af32eaa592ec 100644 --- a/keyboards/modelh/config.h +++ b/keyboards/modelh/config.h @@ -17,7 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #pragma once -//#include "config_common.h" /* Model H customizations */ #define MODELH_LED_PINS { B9, B8, B7 } From ed07e9ede63abe040ce51964c37ed43e0a24f6e4 Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome.berclaz@a3.epfl.ch> Date: Sat, 29 Apr 2023 07:58:23 -0700 Subject: [PATCH 03/16] cleanup --- keyboards/modelh/config.h | 84 -------------------------------------- keyboards/modelh/info.json | 43 +++++++++++++++++-- keyboards/modelh/modelh.c | 28 ++++++------- keyboards/modelh/rules.mk | 6 +-- 4 files changed, 57 insertions(+), 104 deletions(-) diff --git a/keyboards/modelh/config.h b/keyboards/modelh/config.h index af32eaa592ec..d5004a13d6ad 100644 --- a/keyboards/modelh/config.h +++ b/keyboards/modelh/config.h @@ -28,67 +28,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define MATRIX_ROWS 8 #define MATRIX_COLS 16 -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * - */ -#define MATRIX_ROW_PINS { B6, B5, B4, A15, B3, A0, A2, A1 } -#define MATRIX_COL_PINS { A10, A9, A8, B15, B14, B13, B12, B11, B10, B1, B0, A7, A6, A5, A4, A3 } -//#define UNUSED_PINS - -/* COL2ROW, ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* - * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN. - */ -//#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6 - -//#define BACKLIGHT_PIN B7 -//#define BACKLIGHT_LEVELS 3 -//#define BACKLIGHT_BREATHING // Model H should use absolute maximum 80mA when all LEDs are on and it is in // use. Only requesting 100mA should allow it to work with devices only // supporting USB 1.0 power levels like some iPads. #define USB_MAX_POWER_CONSUMPTION 100 -//#define RGB_DI_PIN E2 -//#ifdef RGB_DI_PIN -//# define RGBLED_NUM 16 -//# define RGBLIGHT_HUE_STEP 8 -//# define RGBLIGHT_SAT_STEP 8 -//# define RGBLIGHT_VAL_STEP 8 -//# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ -//# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ -/*== all animations enable ==*/ -//# define RGBLIGHT_ANIMATIONS -/*== or choose animations ==*/ -//# define RGBLIGHT_EFFECT_BREATHING -//# define RGBLIGHT_EFFECT_RAINBOW_MOOD -//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL -//# define RGBLIGHT_EFFECT_SNAKE -//# define RGBLIGHT_EFFECT_KNIGHT -//# define RGBLIGHT_EFFECT_CHRISTMAS -//# define RGBLIGHT_EFFECT_STATIC_GRADIENT -//# define RGBLIGHT_EFFECT_RGB_TEST -//# define RGBLIGHT_EFFECT_ALTERNATING -/*== customize breathing effect ==*/ -/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/ -//# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64 -/*==== use exp() and sin() ====*/ -//# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7 -//# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255 -//#endif - -/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCE 5 /* define if matrix has ghost (lacks anti-ghosting diodes) */ #define MATRIX_HAS_GHOST @@ -98,31 +43,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE -/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. - * This is useful for the Windows task manager shortcut (ctrl+shift+esc). - */ -//#define GRAVE_ESC_CTRL_OVERRIDE - -/* - * Force NKRO - * - * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved - * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the - * makefile for this to work.) - * - * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) - * until the next keyboard reset. - * - * NKRO may prevent your keystrokes from being detected in the BIOS, but it is - * fully operational during normal computer usage. - * - * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) - * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by - * bootmagic, NKRO mode will always be enabled until it is toggled again during a - * power-up. - * - */ -//#define FORCE_NKRO /* * Feature disable options @@ -143,7 +63,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. /* disable these deprecated features by default */ //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION - -/* Bootmagic Lite key configuration */ -//#define BOOTMAGIC_LITE_ROW 0 -//#define BOOTMAGIC_LITE_COLUMN 0 diff --git a/keyboards/modelh/info.json b/keyboards/modelh/info.json index a0349ecf2885..d53b352524da 100644 --- a/keyboards/modelh/info.json +++ b/keyboards/modelh/info.json @@ -1,13 +1,50 @@ { - "keyboard_name": "IBM Model M", + "keyboard_name": "Model M", + "manufacturer": "IBM", "url": "modelh.club", - "maintainer": "John Hawthorn", + "maintainer": "jhawthorn", "usb": { "vid": "0xFEED", "pid": "0xB155", "device_version": "1.0.0" }, - "manufacturer": "IBM", + "debounce": 5, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": [ + "A10", + "A9", + "A8", + "B15", + "B14", + "B13", + "B12", + "B11", + "B10", + "B1", + "B0", + "A7", + "A6", + "A5", + "A4", + "A3" + ], + "rows": [ + "B6", + "B5", + "B4", + "A15", + "B3", + "A0", + "A2", + "A1" + ] + }, + "indicators": { + "num_lock": "B9", + "caps_lock": "B8", + "scroll_lock": "B7" + }, "processor": "STM32F103", "bootloader": "stm32-dfu", "layouts": { diff --git a/keyboards/modelh/modelh.c b/keyboards/modelh/modelh.c index 4c278a5e7ca4..3254b975b2cd 100644 --- a/keyboards/modelh/modelh.c +++ b/keyboards/modelh/modelh.c @@ -20,19 +20,19 @@ static const pin_t led_pins[3] = MODELH_LED_PINS; bool led_update_kb(led_t led_state) { - bool res = led_update_user(led_state); - if(res) { - writePin(led_pins[0], !led_state.num_lock); - writePin(led_pins[1], !led_state.caps_lock); - writePin(led_pins[2], !led_state.scroll_lock); - } - return res; + bool res = led_update_user(led_state); + if(res) { + writePin(led_pins[0], !led_state.num_lock); + writePin(led_pins[1], !led_state.caps_lock); + writePin(led_pins[2], !led_state.scroll_lock); + } + return res; } void led_init_ports() { - setPinOutput(led_pins[0]); - setPinOutput(led_pins[1]); - setPinOutput(led_pins[2]); + setPinOutput(led_pins[0]); + setPinOutput(led_pins[1]); + setPinOutput(led_pins[2]); } #else @@ -40,9 +40,9 @@ void led_init_ports() { } #endif void keyboard_pre_init_kb(void) { - setPinOutput(MODELH_STATUS_LED); - writePin(MODELH_STATUS_LED, 0); + setPinOutput(MODELH_STATUS_LED); + writePin(MODELH_STATUS_LED, 0); - led_init_ports(); - keyboard_pre_init_user(); + led_init_ports(); + keyboard_pre_init_user(); } diff --git a/keyboards/modelh/rules.mk b/keyboards/modelh/rules.mk index ddf76f52bb70..4a34c3a3adff 100644 --- a/keyboards/modelh/rules.mk +++ b/keyboards/modelh/rules.mk @@ -12,10 +12,10 @@ DFU_SUFFIX_ARGS = -v 1eaf -p 0003 # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE -#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration EXTRAKEY_ENABLE = yes # Audio control and System control -CONSOLE_ENABLE = yes # Console for debug -COMMAND_ENABLE = yes # Commands for debug and configuration +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend NKRO_ENABLE = no # USB Nkey Rollover CUSTOM_MATRIX = no # Custom matrix file From 99d37e56e48ce37bfca3bcc2bf7db6e66875a121 Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome.berclaz@a3.epfl.ch> Date: Sat, 29 Apr 2023 08:15:53 -0700 Subject: [PATCH 04/16] cleanup --- keyboards/modelh/bootloader_defs.h | 17 +++++++++++++++++ keyboards/modelh/modelh.c | 28 ++++++++++++++-------------- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/keyboards/modelh/bootloader_defs.h b/keyboards/modelh/bootloader_defs.h index 6b8fa9f727c9..5d11fe4784bd 100644 --- a/keyboards/modelh/bootloader_defs.h +++ b/keyboards/modelh/bootloader_defs.h @@ -1,3 +1,20 @@ +/* +Copyright 2020 John Hawthorn + +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/>. +*/ + /* Address for jumping to bootloader on STM32 chips. */ /* It is chip dependent, the correct number can be looked up here (page 175): * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf diff --git a/keyboards/modelh/modelh.c b/keyboards/modelh/modelh.c index 3254b975b2cd..3e8e7b0e03de 100644 --- a/keyboards/modelh/modelh.c +++ b/keyboards/modelh/modelh.c @@ -20,19 +20,19 @@ static const pin_t led_pins[3] = MODELH_LED_PINS; bool led_update_kb(led_t led_state) { - bool res = led_update_user(led_state); - if(res) { - writePin(led_pins[0], !led_state.num_lock); - writePin(led_pins[1], !led_state.caps_lock); - writePin(led_pins[2], !led_state.scroll_lock); - } - return res; + bool res = led_update_user(led_state); + if(res) { + writePin(led_pins[0], !led_state.num_lock); + writePin(led_pins[1], !led_state.caps_lock); + writePin(led_pins[2], !led_state.scroll_lock); + } + return res; } void led_init_ports() { - setPinOutput(led_pins[0]); - setPinOutput(led_pins[1]); - setPinOutput(led_pins[2]); + setPinOutput(led_pins[0]); + setPinOutput(led_pins[1]); + setPinOutput(led_pins[2]); } #else @@ -40,9 +40,9 @@ void led_init_ports() { } #endif void keyboard_pre_init_kb(void) { - setPinOutput(MODELH_STATUS_LED); - writePin(MODELH_STATUS_LED, 0); + setPinOutput(MODELH_STATUS_LED); + writePin(MODELH_STATUS_LED, 0); - led_init_ports(); - keyboard_pre_init_user(); + led_init_ports(); + keyboard_pre_init_user(); } From 890da33efded05968c077ac693fbaf70b1e4a341 Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome@percipient.ai> Date: Tue, 2 May 2023 18:30:29 -0700 Subject: [PATCH 05/16] Update keyboards/modelh/rules.mk Co-authored-by: Drashna Jaelre <drashna@live.com> --- keyboards/modelh/rules.mk | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/keyboards/modelh/rules.mk b/keyboards/modelh/rules.mk index 4a34c3a3adff..9a4c49510b32 100644 --- a/keyboards/modelh/rules.mk +++ b/keyboards/modelh/rules.mk @@ -1,13 +1,7 @@ # MCU name MCU = STM32F103 -# GENERIC STM32F103C8T6 board - stm32duino bootloader -OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000 -MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader -BOARD = STM32_F103_STM32DUINO - -DFU_ARGS = -d 1eaf:0003 -a2 -R -DFU_SUFFIX_ARGS = -v 1eaf -p 0003 +BOOTLOADER = stm32duino # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE From 509b44819cdd2117727481c0cdca92b49c9933bf Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome.berclaz@a3.epfl.ch> Date: Tue, 2 May 2023 19:56:52 -0700 Subject: [PATCH 06/16] Addressed reviewer's comments --- keyboards/modelh/bootloader_defs.h | 27 - keyboards/modelh/chconf.h | 816 +----------- keyboards/modelh/config.h | 12 - keyboards/modelh/halconf.h | 560 +-------- keyboards/modelh/info.json | 1366 ++++----------------- keyboards/modelh/keymaps/default/keymap.c | 4 - keyboards/modelh/mcuconf.h | 216 +--- keyboards/modelh/modelh.c | 23 - keyboards/modelh/modelh.h | 51 - keyboards/modelh/rules.mk | 7 - 10 files changed, 314 insertions(+), 2768 deletions(-) delete mode 100644 keyboards/modelh/bootloader_defs.h diff --git a/keyboards/modelh/bootloader_defs.h b/keyboards/modelh/bootloader_defs.h deleted file mode 100644 index 5d11fe4784bd..000000000000 --- a/keyboards/modelh/bootloader_defs.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -Copyright 2020 John Hawthorn - -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/>. -*/ - -/* Address for jumping to bootloader on STM32 chips. */ -/* It is chip dependent, the correct number can be looked up here (page 175): - * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf - * This also requires a patch to chibios: - * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch - */ - -// STM32F103* does NOT have an USB bootloader in ROM (only serial), -// so setting anything here does not make much sense -#define STM32_BOOTLOADER_ADDRESS 0x80000000 diff --git a/keyboards/modelh/chconf.h b/keyboards/modelh/chconf.h index 047468758083..413fb8d69cfd 100644 --- a/keyboards/modelh/chconf.h +++ b/keyboards/modelh/chconf.h @@ -1,817 +1,31 @@ -/* - ChibiOS - Copyright (C) 2006..2020 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 rt/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. +/* Copyright 2020 QMK * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef CHCONF_H -#define CHCONF_H - -#define _CHIBIOS_RT_CONF_ -#define _CHIBIOS_RT_CONF_VER_7_0_ - -/*===========================================================================*/ -/** - * @name System settings - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Handling of instances. - * @note If enabled then threads assigned to various instances can - * interact each other using the same synchronization objects. - * If disabled then each OS instance is a separate world, no - * direct interactions are handled by the OS. - */ -#if !defined(CH_CFG_SMP_MODE) -#define CH_CFG_SMP_MODE FALSE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name System timers settings - * @{ - */ -/*===========================================================================*/ - -/** - * @brief System time counter resolution. - * @note Allowed values are 16, 32 or 64 bits. - */ -#if !defined(CH_CFG_ST_RESOLUTION) -#define CH_CFG_ST_RESOLUTION 32 -#endif - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_CFG_ST_FREQUENCY) -#define CH_CFG_ST_FREQUENCY 100000 -#endif - -/** - * @brief Time intervals data size. - * @note Allowed values are 16, 32 or 64 bits. - */ -#if !defined(CH_CFG_INTERVALS_SIZE) -#define CH_CFG_INTERVALS_SIZE 32 -#endif - -/** - * @brief Time types data size. - * @note Allowed values are 16 or 32 bits. - */ -#if !defined(CH_CFG_TIME_TYPES_SIZE) -#define CH_CFG_TIME_TYPES_SIZE 32 -#endif - -/** - * @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. - */ -#if !defined(CH_CFG_ST_TIMEDELTA) -#define CH_CFG_ST_TIMEDELTA 0 -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @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. - */ -#if !defined(CH_CFG_TIME_QUANTUM) -#define CH_CFG_TIME_QUANTUM 0 -#endif - -/** - * @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. - */ -#if !defined(CH_CFG_NO_IDLE_THREAD) -#define CH_CFG_NO_IDLE_THREAD FALSE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name Performance options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. + * 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. * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_OPTIMIZE_SPEED) -#define CH_CFG_OPTIMIZE_SPEED TRUE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name Subsystem options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Time Measurement APIs. - * @details If enabled then the time measurement APIs are included in - * the kernel. + * 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. * - * @note The default is @p TRUE. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#if !defined(CH_CFG_USE_TM) -#define CH_CFG_USE_TM TRUE -#endif -/** - * @brief Time Stamps APIs. - * @details If enabled then the time stamps APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_TIMESTAMP) -#define CH_CFG_USE_TIMESTAMP TRUE -#endif +#pragma once -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_REGISTRY) +#define CH_CFG_ST_TIMEDELTA 0 +#define CH_CFG_USE_TM TRUE #define CH_CFG_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_WAITEXIT) #define CH_CFG_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_SEMAPHORES) -#define CH_CFG_USE_SEMAPHORES TRUE -#endif - -/** - * @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. - */ -#if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY) -#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_MUTEXES) -#define CH_CFG_USE_MUTEXES TRUE -#endif - -/** - * @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. - */ -#if !defined(CH_CFG_USE_MUTEXES_RECURSIVE) -#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE -#endif - -/** - * @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. - */ -#if !defined(CH_CFG_USE_CONDVARS) #define CH_CFG_USE_CONDVARS TRUE -#endif - -/** - * @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. - */ -#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT) #define CH_CFG_USE_CONDVARS_TIMEOUT FALSE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_EVENTS) -#define CH_CFG_USE_EVENTS TRUE -#endif - -/** - * @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. - */ -#if !defined(CH_CFG_USE_EVENTS_TIMEOUT) -#define CH_CFG_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_MESSAGES) #define CH_CFG_USE_MESSAGES TRUE -#endif - -/** - * @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. - */ -#if !defined(CH_CFG_USE_MESSAGES_PRIORITY) -#define CH_CFG_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @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. - */ -#if !defined(CH_CFG_USE_DYNAMIC) -#define CH_CFG_USE_DYNAMIC FALSE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name OSLIB options - * @{ - */ -/*===========================================================================*/ - -/** - * @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. - */ -#if !defined(CH_CFG_USE_MAILBOXES) #define CH_CFG_USE_MAILBOXES TRUE -#endif - -/** - * @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. - */ -#if !defined(CH_CFG_USE_MEMCORE) -#define CH_CFG_USE_MEMCORE TRUE -#endif - -/** - * @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. - */ -#if !defined(CH_CFG_MEMCORE_SIZE) -#define CH_CFG_MEMCORE_SIZE 0 -#endif - -/** - * @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. - */ -#if !defined(CH_CFG_USE_HEAP) #define CH_CFG_USE_HEAP TRUE -#endif - -/** - * @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. - */ -#if !defined(CH_CFG_USE_MEMPOOLS) -#define CH_CFG_USE_MEMPOOLS FALSE -#endif - -/** - * @brief Objects FIFOs APIs. - * @details If enabled then the objects FIFOs APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_OBJ_FIFOS) -#define CH_CFG_USE_OBJ_FIFOS FALSE -#endif - -/** - * @brief Pipes APIs. - * @details If enabled then the pipes APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_PIPES) -#define CH_CFG_USE_PIPES FALSE -#endif - -/** - * @brief Objects Caches APIs. - * @details If enabled then the objects caches APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_OBJ_CACHES) #define CH_CFG_USE_OBJ_CACHES TRUE -#endif - -/** - * @brief Delegate threads APIs. - * @details If enabled then the delegate threads APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_DELEGATES) #define CH_CFG_USE_DELEGATES TRUE -#endif - -/** - * @brief Jobs Queues APIs. - * @details If enabled then the jobs queues APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_JOBS) -#define CH_CFG_USE_JOBS FALSE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name Objects factory options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Objects Factory APIs. - * @details If enabled then the objects factory APIs are included in the - * kernel. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_CFG_USE_FACTORY) -#define CH_CFG_USE_FACTORY FALSE -#endif - -/** - * @brief Maximum length for object names. - * @details If the specified length is zero then the name is stored by - * pointer but this could have unintended side effects. - */ -#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH) -#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8 -#endif - -/** - * @brief Enables the registry of generic objects. - */ -#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY) -#define CH_CFG_FACTORY_OBJECTS_REGISTRY FALSE -#endif - -/** - * @brief Enables factory for generic buffers. - */ -#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS) -#define CH_CFG_FACTORY_GENERIC_BUFFERS FALSE -#endif - -/** - * @brief Enables factory for semaphores. - */ -#if !defined(CH_CFG_FACTORY_SEMAPHORES) -#define CH_CFG_FACTORY_SEMAPHORES FALSE -#endif - -/** - * @brief Enables factory for mailboxes. - */ -#if !defined(CH_CFG_FACTORY_MAILBOXES) -#define CH_CFG_FACTORY_MAILBOXES FALSE -#endif - -/** - * @brief Enables factory for objects FIFOs. - */ -#if !defined(CH_CFG_FACTORY_OBJ_FIFOS) -#define CH_CFG_FACTORY_OBJ_FIFOS FALSE -#endif - -/** - * @brief Enables factory for Pipes. - */ -#if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__) -#define CH_CFG_FACTORY_PIPES FALSE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name Debug options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Debug option, kernel statistics. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_STATISTICS) -#define CH_DBG_STATISTICS FALSE -#endif - -/** - * @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. - */ -#if !defined(CH_DBG_SYSTEM_STATE_CHECK) -#define CH_DBG_SYSTEM_STATE_CHECK FALSE -#endif - -/** - * @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. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @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. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the trace buffer is activated. - * - * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. - */ -#if !defined(CH_DBG_TRACE_MASK) -#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED -#endif - -/** - * @brief Trace buffer entries. - * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is - * different from @p CH_DBG_TRACE_MASK_DISABLED. - */ -#if !defined(CH_DBG_TRACE_BUFFER_SIZE) -#define CH_DBG_TRACE_BUFFER_SIZE 128 -#endif - -/** - * @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. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @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. - */ -#if !defined(CH_DBG_FILL_THREADS) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @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. - */ -#if !defined(CH_DBG_THREADS_PROFILING) -#define CH_DBG_THREADS_PROFILING FALSE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name Kernel hooks - * @{ - */ -/*===========================================================================*/ - -/** - * @brief System structure extension. - * @details User fields added to the end of the @p ch_system_t structure. - */ -#define CH_CFG_SYSTEM_EXTRA_FIELDS \ - /* Add system custom fields here.*/ - -/** - * @brief System initialization hook. - * @details User initialization code added to the @p chSysInit() function - * just before interrupts are enabled globally. - */ -#define CH_CFG_SYSTEM_INIT_HOOK() { \ - /* Add system initialization code here.*/ \ -} - -/** - * @brief OS instance structure extension. - * @details User fields added to the end of the @p os_instance_t structure. - */ -#define CH_CFG_OS_INSTANCE_EXTRA_FIELDS \ - /* Add OS instance custom fields here.*/ - -/** - * @brief OS instance initialization hook. - * - * @param[in] oip pointer to the @p os_instance_t structure - */ -#define CH_CFG_OS_INSTANCE_INIT_HOOK(oip) { \ - /* Add OS instance initialization code here.*/ \ -} - -/** - * @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 _thread_init() function. - * - * @note It is invoked from within @p _thread_init() and implicitly from all - * the threads creation APIs. - * - * @param[in] tp pointer to the @p thread_t structure - */ -#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. - * - * @param[in] tp pointer to the @p thread_t structure - */ -#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. - * - * @param[in] ntp thread being switched in - * @param[in] otp thread being switched out - */ -#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() { \ - /* Idle-enter code here.*/ \ -} - -/** - * @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() { \ - /* Idle-leave code here.*/ \ -} - -/** - * @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.*/ \ -} - -/** - * @brief Runtime Faults Collection Unit hook. - * @details This hook is invoked each time new faults are collected and stored. - */ -#define CH_CFG_RUNTIME_FAULTS_HOOK(mask) { \ - /* Faults handling code here.*/ \ -} - -/** @} */ - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* CHCONF_H */ -/** @} */ +#include_next <chconf.h> diff --git a/keyboards/modelh/config.h b/keyboards/modelh/config.h index d5004a13d6ad..20d8461c4ee8 100644 --- a/keyboards/modelh/config.h +++ b/keyboards/modelh/config.h @@ -19,22 +19,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. /* Model H customizations */ -#define MODELH_LED_PINS { B9, B8, B7 } #define MODELH_STATUS_LED C13 -/* key matrix size */ -#define MATRIX_ROWS 8 -#define MATRIX_COLS 16 - - -// Model H should use absolute maximum 80mA when all LEDs are on and it is in -// use. Only requesting 100mA should allow it to work with devices only -// supporting USB 1.0 power levels like some iPads. -#define USB_MAX_POWER_CONSUMPTION 100 - - /* define if matrix has ghost (lacks anti-ghosting diodes) */ #define MATRIX_HAS_GHOST diff --git a/keyboards/modelh/halconf.h b/keyboards/modelh/halconf.h index 80abf9688d05..8e3ad48ffc6f 100644 --- a/keyboards/modelh/halconf.h +++ b/keyboards/modelh/halconf.h @@ -1,553 +1,23 @@ -/* - ChibiOS - Copyright (C) 2006..2020 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. +/* Copyright 2020 QMK * - * @addtogroup HAL_CONF - * @{ - */ - -#ifndef HALCONF_H -#define HALCONF_H - -#define _CHIBIOS_HAL_CONF_ -#define _CHIBIOS_HAL_CONF_VER_8_4_ - -#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 cryptographic subsystem. - */ -#if !defined(HAL_USE_CRY) || defined(__DOXYGEN__) -#define HAL_USE_CRY FALSE -#endif - -/** - * @brief Enables the DAC subsystem. - */ -#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) -#define HAL_USE_DAC FALSE -#endif - -/** - * @brief Enables the EFlash subsystem. - */ -#if !defined(HAL_USE_EFL) || defined(__DOXYGEN__) -#define HAL_USE_EFL 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 FALSE -#endif - -/** - * @brief Enables the I2S subsystem. - */ -#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) -#define HAL_USE_I2S FALSE -#endif - -/** - * @brief Enables the ICU subsystem. + * 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/>. */ -#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 +#pragma once -/** - * @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 TRUE -#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 FALSE -#endif - -/** - * @brief Enables the SERIAL over USB subsystem. - */ -#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL_USB FALSE -#endif - -/** - * @brief Enables the SIO subsystem. - */ -#if !defined(HAL_USE_SIO) || defined(__DOXYGEN__) -#define HAL_USE_SIO FALSE -#endif - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) -#define HAL_USE_SPI FALSE -#endif - -/** - * @brief Enables the TRNG subsystem. - */ -#if !defined(HAL_USE_TRNG) || defined(__DOXYGEN__) -#define HAL_USE_TRNG FALSE -#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 - -/** - * @brief Enables the WSPI subsystem. - */ -#if !defined(HAL_USE_WSPI) || defined(__DOXYGEN__) -#define HAL_USE_WSPI FALSE -#endif - -/*===========================================================================*/ -/* PAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(PAL_USE_CALLBACKS) || defined(__DOXYGEN__) -#define PAL_USE_CALLBACKS FALSE -#endif - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(PAL_USE_WAIT) || defined(__DOXYGEN__) -#define PAL_USE_WAIT 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 - -/** - * @brief Enforces the driver to use direct callbacks rather than OSAL events. - */ -#if !defined(CAN_ENFORCE_USE_CALLBACKS) || defined(__DOXYGEN__) -#define CAN_ENFORCE_USE_CALLBACKS FALSE -#endif - -/*===========================================================================*/ -/* CRY driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the SW fall-back of the cryptographic driver. - * @details When enabled, this option, activates a fall-back software - * implementation for algorithms not supported by the underlying - * hardware. - * @note Fall-back implementations may not be present for all algorithms. - */ -#if !defined(HAL_CRY_USE_FALLBACK) || defined(__DOXYGEN__) -#define HAL_CRY_USE_FALLBACK FALSE -#endif - -/** - * @brief Makes the driver forcibly use the fall-back implementations. - */ -#if !defined(HAL_CRY_ENFORCE_FALLBACK) || defined(__DOXYGEN__) -#define HAL_CRY_ENFORCE_FALLBACK FALSE -#endif - -/*===========================================================================*/ -/* DAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(DAC_USE_WAIT) || defined(__DOXYGEN__) -#define DAC_USE_WAIT TRUE -#endif - -/** - * @brief Enables the @p dacAcquireBus() and @p dacReleaseBus() APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(DAC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define DAC_USE_MUTUAL_EXCLUSION 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 the zero-copy API. - */ -#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 Timeout before assuming a failure while waiting for card idle. - * @note Time is in milliseconds. - */ -#if !defined(MMC_IDLE_TIMEOUT_MS) || defined(__DOXYGEN__) -#define MMC_IDLE_TIMEOUT_MS 1000 -#endif - -/** - * @brief Mutual exclusion on the SPI bus. - */ -#if !defined(MMC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define MMC_USE_MUTUAL_EXCLUSION 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 - -/** - * @brief OCR initialization constant for V20 cards. - */ -#if !defined(SDC_INIT_OCR_V20) || defined(__DOXYGEN__) -#define SDC_INIT_OCR_V20 0x50FF8000U -#endif - -/** - * @brief OCR initialization constant for non-V20 cards. - */ -#if !defined(SDC_INIT_OCR) || defined(__DOXYGEN__) -#define SDC_INIT_OCR 0x80100000U -#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 16 bytes for both the transmission and receive - * buffers. - */ -#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) #define SERIAL_BUFFERS_SIZE 16 -#endif - -/*===========================================================================*/ -/* SIO driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Default bit rate. - * @details Configuration parameter, this is the baud rate selected for the - * default configuration. - */ -#if !defined(SIO_DEFAULT_BITRATE) || defined(__DOXYGEN__) -#define SIO_DEFAULT_BITRATE 38400 -#endif - -/** - * @brief Support for thread synchronization API. - */ -#if !defined(SIO_USE_SYNCHRONIZATION) || defined(__DOXYGEN__) -#define SIO_USE_SYNCHRONIZATION TRUE -#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 256 bytes for both the transmission and receive - * buffers. - */ -#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define SERIAL_USB_BUFFERS_SIZE 1 -#endif - -/** - * @brief Serial over USB number of buffers. - * @note The default is 2 buffers. - */ -#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__) -#define SERIAL_USB_BUFFERS_NUMBER 2 -#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 Inserts an assertion on function errors before returning. - */ -#if !defined(SPI_USE_ASSERT_ON_ERROR) || defined(__DOXYGEN__) -#define SPI_USE_ASSERT_ON_ERROR 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 - -/** - * @brief Handling method for SPI CS line. - * @note Disabling this option saves both code and data space. - */ -#if !defined(SPI_SELECT_MODE) || defined(__DOXYGEN__) -#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD -#endif - -/*===========================================================================*/ -/* UART driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__) -#define UART_USE_WAIT FALSE -#endif - -/** - * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define UART_USE_MUTUAL_EXCLUSION FALSE -#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 - -/*===========================================================================*/ -/* WSPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(WSPI_USE_WAIT) || defined(__DOXYGEN__) -#define WSPI_USE_WAIT TRUE -#endif - -/** - * @brief Enables the @p wspiAcquireBus() and @p wspiReleaseBus() APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(WSPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define WSPI_USE_MUTUAL_EXCLUSION TRUE -#endif - -#endif /* HALCONF_H */ -/** @} */ +#include_next <halconf.h> diff --git a/keyboards/modelh/info.json b/keyboards/modelh/info.json index d53b352524da..86e8bea4188c 100644 --- a/keyboards/modelh/info.json +++ b/keyboards/modelh/info.json @@ -1,1103 +1,273 @@ { - "keyboard_name": "Model M", - "manufacturer": "IBM", - "url": "modelh.club", - "maintainer": "jhawthorn", - "usb": { - "vid": "0xFEED", - "pid": "0xB155", - "device_version": "1.0.0" - }, - "debounce": 5, - "diode_direction": "COL2ROW", - "matrix_pins": { - "cols": [ - "A10", - "A9", - "A8", - "B15", - "B14", - "B13", - "B12", - "B11", - "B10", - "B1", - "B0", - "A7", - "A6", - "A5", - "A4", - "A3" - ], - "rows": [ - "B6", - "B5", - "B4", - "A15", - "B3", - "A0", - "A2", - "A1" - ] - }, - "indicators": { - "num_lock": "B9", - "caps_lock": "B8", - "scroll_lock": "B7" - }, - "processor": "STM32F103", - "bootloader": "stm32-dfu", - "layouts": { - "LAYOUT_fullsize_iso_wkl": { - "layout": [ - { - "label": "Esc", - "x": 0, - "y": 0 - }, - { - "label": "F1", - "x": 2, - "y": 0 - }, - { - "label": "F2", - "x": 3, - "y": 0 - }, - { - "label": "F3", - "x": 4, - "y": 0 - }, - { - "label": "F4", - "x": 5, - "y": 0 - }, - { - "label": "F5", - "x": 6.5, - "y": 0 - }, - { - "label": "F6", - "x": 7.5, - "y": 0 - }, - { - "label": "F7", - "x": 8.5, - "y": 0 - }, - { - "label": "F8", - "x": 9.5, - "y": 0 - }, - { - "label": "F9", - "x": 11, - "y": 0 - }, - { - "label": "F10", - "x": 12, - "y": 0 - }, - { - "label": "F11", - "x": 13, - "y": 0 - }, - { - "label": "F12", - "x": 14, - "y": 0 - }, - { - "label": "PrtSc", - "x": 15.25, - "y": 0 - }, - { - "label": "Scroll Lock", - "x": 16.25, - "y": 0 - }, - { - "label": "Pause", - "x": 17.25, - "y": 0 - }, - { - "label": "~", - "x": 0, - "y": 1.5 - }, - { - "label": "!", - "x": 1, - "y": 1.5 - }, - { - "label": "@", - "x": 2, - "y": 1.5 - }, - { - "label": "#", - "x": 3, - "y": 1.5 - }, - { - "label": "$", - "x": 4, - "y": 1.5 - }, - { - "label": "%", - "x": 5, - "y": 1.5 - }, - { - "label": "^", - "x": 6, - "y": 1.5 - }, - { - "label": "&", - "x": 7, - "y": 1.5 - }, - { - "label": "*", - "x": 8, - "y": 1.5 - }, - { - "label": "(", - "x": 9, - "y": 1.5 - }, - { - "label": ")", - "x": 10, - "y": 1.5 - }, - { - "label": "_", - "x": 11, - "y": 1.5 - }, - { - "label": "+", - "x": 12, - "y": 1.5 - }, - { - "label": "Backspace", - "x": 13, - "y": 1.5, - "w": 2 - }, - { - "label": "Insert", - "x": 15.25, - "y": 1.5 - }, - { - "label": "Home", - "x": 16.25, - "y": 1.5 - }, - { - "label": "PgUp", - "x": 17.25, - "y": 1.5 - }, - { - "label": "Num Lock", - "x": 18.5, - "y": 1.5 - }, - { - "label": "/", - "x": 19.5, - "y": 1.5 - }, - { - "label": "*", - "x": 20.5, - "y": 1.5 - }, - { - "label": "-", - "x": 21.5, - "y": 1.5 - }, - { - "label": "Tab", - "x": 0, - "y": 2.5, - "w": 1.5 - }, - { - "label": "Q", - "x": 1.5, - "y": 2.5 - }, - { - "label": "W", - "x": 2.5, - "y": 2.5 - }, - { - "label": "E", - "x": 3.5, - "y": 2.5 - }, - { - "label": "R", - "x": 4.5, - "y": 2.5 - }, - { - "label": "T", - "x": 5.5, - "y": 2.5 - }, - { - "label": "Y", - "x": 6.5, - "y": 2.5 - }, - { - "label": "U", - "x": 7.5, - "y": 2.5 - }, - { - "label": "I", - "x": 8.5, - "y": 2.5 - }, - { - "label": "O", - "x": 9.5, - "y": 2.5 - }, - { - "label": "P", - "x": 10.5, - "y": 2.5 - }, - { - "label": "{", - "x": 11.5, - "y": 2.5 - }, - { - "label": "}", - "x": 12.5, - "y": 2.5 - }, - { - "label": "Delete", - "x": 15.25, - "y": 2.5 - }, - { - "label": "End", - "x": 16.25, - "y": 2.5 - }, - { - "label": "PgDn", - "x": 17.25, - "y": 2.5 - }, - { - "label": "7", - "x": 18.5, - "y": 2.5 - }, - { - "label": "8", - "x": 19.5, - "y": 2.5 - }, - { - "label": "9", - "x": 20.5, - "y": 2.5 - }, - { - "label": "+", - "x": 21.5, - "y": 2.5, - "h": 2 - }, - { - "label": "Caps Lock", - "x": 0, - "y": 3.5, - "w": 1.5 - }, - { - "label": "A", - "x": 1.75, - "y": 3.5 - }, - { - "label": "S", - "x": 2.75, - "y": 3.5 - }, - { - "label": "D", - "x": 3.75, - "y": 3.5 - }, - { - "label": "F", - "x": 4.75, - "y": 3.5 - }, - { - "label": "G", - "x": 5.75, - "y": 3.5 - }, - { - "label": "H", - "x": 6.75, - "y": 3.5 - }, - { - "label": "J", - "x": 7.75, - "y": 3.5 - }, - { - "label": "K", - "x": 8.75, - "y": 3.5 - }, - { - "label": "L", - "x": 9.75, - "y": 3.5 - }, - { - "label": ":", - "x": 10.75, - "y": 3.5 - }, - { - "label": "\"", - "x": 11.75, - "y": 3.5 - }, - { - "label": "~", - "x": 12.75, - "y": 3.5 - }, - { - "label": "Enter", - "x": 13.75, - "y": 2.5, - "w": 1.25, - "h": 2 - }, - { - "label": "4", - "x": 18.5, - "y": 3.5 - }, - { - "label": "5", - "x": 19.5, - "y": 3.5 - }, - { - "label": "6", - "x": 20.5, - "y": 3.5 - }, - { - "label": "Shift", - "x": 0, - "y": 4.5, - "w": 1.25 - }, - { - "label": "|", - "x": 1.25, - "y": 4.5 - }, - { - "label": "Z", - "x": 2.25, - "y": 4.5 - }, - { - "label": "X", - "x": 3.25, - "y": 4.5 - }, - { - "label": "C", - "x": 4.25, - "y": 4.5 - }, - { - "label": "V", - "x": 5.25, - "y": 4.5 - }, - { - "label": "B", - "x": 6.25, - "y": 4.5 - }, - { - "label": "N", - "x": 7.25, - "y": 4.5 - }, - { - "label": "M", - "x": 8.25, - "y": 4.5 - }, - { - "label": "<", - "x": 9.25, - "y": 4.5 - }, - { - "label": ">", - "x": 10.25, - "y": 4.5 - }, - { - "label": "?", - "x": 11.25, - "y": 4.5 - }, - { - "label": "Shift", - "x": 12.25, - "y": 4.5, - "w": 2.75 - }, - { - "label": "↑", - "x": 16.25, - "y": 4.5 - }, - { - "label": "1", - "x": 18.5, - "y": 4.5 - }, - { - "label": "2", - "x": 19.5, - "y": 4.5 - }, - { - "label": "3", - "x": 20.5, - "y": 4.5 - }, - { - "label": "Enter", - "x": 21.5, - "y": 4.5, - "h": 2 - }, - { - "label": "Ctrl", - "x": 0, - "y": 5.5, - "w": 1.5 - }, - { - "label": "Alt", - "x": 2.5, - "y": 5.5, - "w": 1.5 - }, - { - "x": 4, - "y": 5.5, - "w": 7 - }, - { - "label": "Alt", - "x": 11, - "y": 5.5, - "w": 1.5 - }, - { - "label": "Ctrl", - "x": 13.5, - "y": 5.5, - "w": 1.5 - }, - { - "label": "←", - "x": 15.25, - "y": 5.5 - }, - { - "label": "↓", - "x": 16.25, - "y": 5.5 - }, - { - "label": "→", - "x": 17.25, - "y": 5.5 - }, - { - "label": "0", - "x": 18.5, - "y": 5.5, - "w": 2 - }, - { - "label": ".", - "x": 20.5, - "y": 5.5 - } - ] + "manufacturer": "IBM", + "keyboard_name": "Model M", + "maintainer": "jhawthorn", + "board": "STM32_F103_STM32DUINO", + "bootloader": "stm32duino", + "bootmagic": { + "enabled": false }, - "LAYOUT_fullsize_ansi_wkl": { - "layout": [ - { - "label": "Esc", - "x": 0, - "y": 0 - }, - { - "label": "F1", - "x": 2, - "y": 0 - }, - { - "label": "F2", - "x": 3, - "y": 0 - }, - { - "label": "F3", - "x": 4, - "y": 0 - }, - { - "label": "F4", - "x": 5, - "y": 0 - }, - { - "label": "F5", - "x": 6.5, - "y": 0 - }, - { - "label": "F6", - "x": 7.5, - "y": 0 - }, - { - "label": "F7", - "x": 8.5, - "y": 0 - }, - { - "label": "F8", - "x": 9.5, - "y": 0 - }, - { - "label": "F9", - "x": 11, - "y": 0 - }, - { - "label": "F10", - "x": 12, - "y": 0 - }, - { - "label": "F11", - "x": 13, - "y": 0 - }, - { - "label": "F12", - "x": 14, - "y": 0 - }, - { - "label": "PrtSc", - "x": 15.25, - "y": 0 - }, - { - "label": "Scroll Lock", - "x": 16.25, - "y": 0 - }, - { - "label": "Pause", - "x": 17.25, - "y": 0 - }, - { - "label": "~", - "x": 0, - "y": 1.5 - }, - { - "label": "!", - "x": 1, - "y": 1.5 - }, - { - "label": "@", - "x": 2, - "y": 1.5 - }, - { - "label": "#", - "x": 3, - "y": 1.5 - }, - { - "label": "$", - "x": 4, - "y": 1.5 - }, - { - "label": "%", - "x": 5, - "y": 1.5 - }, - { - "label": "^", - "x": 6, - "y": 1.5 - }, - { - "label": "&", - "x": 7, - "y": 1.5 - }, - { - "label": "*", - "x": 8, - "y": 1.5 - }, - { - "label": "(", - "x": 9, - "y": 1.5 - }, - { - "label": ")", - "x": 10, - "y": 1.5 - }, - { - "label": "_", - "x": 11, - "y": 1.5 - }, - { - "label": "+", - "x": 12, - "y": 1.5 - }, - { - "label": "Backspace", - "x": 13, - "y": 1.5, - "w": 2 - }, - { - "label": "Insert", - "x": 15.25, - "y": 1.5 - }, - { - "label": "Home", - "x": 16.25, - "y": 1.5 - }, - { - "label": "PgUp", - "x": 17.25, - "y": 1.5 - }, - { - "label": "Num Lock", - "x": 18.5, - "y": 1.5 - }, - { - "label": "/", - "x": 19.5, - "y": 1.5 - }, - { - "label": "*", - "x": 20.5, - "y": 1.5 - }, - { - "label": "-", - "x": 21.5, - "y": 1.5 - }, - { - "label": "Tab", - "x": 0, - "y": 2.5, - "w": 1.5 - }, - { - "label": "Q", - "x": 1.5, - "y": 2.5 - }, - { - "label": "W", - "x": 2.5, - "y": 2.5 - }, - { - "label": "E", - "x": 3.5, - "y": 2.5 - }, - { - "label": "R", - "x": 4.5, - "y": 2.5 - }, - { - "label": "T", - "x": 5.5, - "y": 2.5 - }, - { - "label": "Y", - "x": 6.5, - "y": 2.5 - }, - { - "label": "U", - "x": 7.5, - "y": 2.5 - }, - { - "label": "I", - "x": 8.5, - "y": 2.5 - }, - { - "label": "O", - "x": 9.5, - "y": 2.5 - }, - { - "label": "P", - "x": 10.5, - "y": 2.5 - }, - { - "label": "{", - "x": 11.5, - "y": 2.5 - }, - { - "label": "}", - "x": 12.5, - "y": 2.5 - }, - { - "label": "|", - "x": 13.5, - "y": 2.5, - "w": 1.5 - }, - { - "label": "Delete", - "x": 15.25, - "y": 2.5 - }, - { - "label": "End", - "x": 16.25, - "y": 2.5 - }, - { - "label": "PgDn", - "x": 17.25, - "y": 2.5 - }, - { - "label": "7", - "x": 18.5, - "y": 2.5 - }, - { - "label": "8", - "x": 19.5, - "y": 2.5 - }, - { - "label": "9", - "x": 20.5, - "y": 2.5 - }, - { - "label": "+", - "x": 21.5, - "y": 2.5, - "h": 2 - }, - { - "label": "Caps Lock", - "x": 0, - "y": 3.5, - "w": 1.5 - }, - { - "label": "A", - "x": 1.75, - "y": 3.5 - }, - { - "label": "S", - "x": 2.75, - "y": 3.5 - }, - { - "label": "D", - "x": 3.75, - "y": 3.5 - }, - { - "label": "F", - "x": 4.75, - "y": 3.5 - }, - { - "label": "G", - "x": 5.75, - "y": 3.5 - }, - { - "label": "H", - "x": 6.75, - "y": 3.5 - }, - { - "label": "J", - "x": 7.75, - "y": 3.5 - }, - { - "label": "K", - "x": 8.75, - "y": 3.5 - }, - { - "label": "L", - "x": 9.75, - "y": 3.5 - }, - { - "label": ":", - "x": 10.75, - "y": 3.5 - }, - { - "label": "\"", - "x": 11.75, - "y": 3.5 - }, - { - "label": "Enter", - "x": 12.75, - "y": 3.5, - "w": 2.25 - }, - { - "label": "4", - "x": 18.5, - "y": 3.5 - }, - { - "label": "5", - "x": 19.5, - "y": 3.5 - }, - { - "label": "6", - "x": 20.5, - "y": 3.5 - }, - { - "label": "Shift", - "x": 0, - "y": 4.5, - "w": 2.25 - }, - { - "label": "Z", - "x": 2.25, - "y": 4.5 - }, - { - "label": "X", - "x": 3.25, - "y": 4.5 - }, - { - "label": "C", - "x": 4.25, - "y": 4.5 - }, - { - "label": "V", - "x": 5.25, - "y": 4.5 - }, - { - "label": "B", - "x": 6.25, - "y": 4.5 - }, - { - "label": "N", - "x": 7.25, - "y": 4.5 - }, - { - "label": "M", - "x": 8.25, - "y": 4.5 - }, - { - "label": "<", - "x": 9.25, - "y": 4.5 - }, - { - "label": ">", - "x": 10.25, - "y": 4.5 - }, - { - "label": "?", - "x": 11.25, - "y": 4.5 - }, - { - "label": "Shift", - "x": 12.25, - "y": 4.5, - "w": 2.75 - }, - { - "label": "↑", - "x": 16.25, - "y": 4.5 - }, - { - "label": "1", - "x": 18.5, - "y": 4.5 - }, - { - "label": "2", - "x": 19.5, - "y": 4.5 - }, - { - "label": "3", - "x": 20.5, - "y": 4.5 - }, - { - "label": "Enter", - "x": 21.5, - "y": 4.5, - "h": 2 - }, - { - "label": "Ctrl", - "x": 0, - "y": 5.5, - "w": 1.5 - }, - { - "label": "Alt", - "x": 2.5, - "y": 5.5, - "w": 1.5 - }, - { - "x": 4, - "y": 5.5, - "w": 7 - }, - { - "label": "Alt", - "x": 11, - "y": 5.5, - "w": 1.5 - }, - { - "label": "Ctrl", - "x": 13.5, - "y": 5.5, - "w": 1.5 - }, - { - "label": "←", - "x": 15.25, - "y": 5.5 - }, - { - "label": "↓", - "x": 16.25, - "y": 5.5 - }, - { - "label": "→", - "x": 17.25, - "y": 5.5 - }, - { - "label": "0", - "x": 18.5, - "y": 5.5, - "w": 2 - }, - { - "label": ".", - "x": 20.5, - "y": 5.5 + "debounce": 5, + "diode_direction": "COL2ROW", + "features": { + "bootmagic": false, + "command": false, + "console": false, + "extrakey": true, + "mousekey": false, + "nkro": false, + "sleep_led": true + }, + "indicators": { + "caps_lock": "B8", + "num_lock": "B9", + "scroll_lock": "B7" + }, + "keyboard_folder": "modelh", + "keymaps": {}, + "matrix_pins": { + "cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B1", "B0", "A7", "A6", "A5", "A4", "A3"], + "ghost": false, + "rows": ["B6", "B5", "B4", "A15", "B3", "A0", "A2", "A1"] + }, + "matrix_size": { + "cols": 16, + "rows": 8 + }, + "mouse_key": { + "enabled": false + }, + "parse_errors": [], + "parse_warnings": [], + "platform": "STM32", + "platform_key": "chibios", + "processor": "STM32F103", + "processor_type": "arm", + "protocol": "ChibiOS", + "url": "modelh.club", + "usb": { + "device_version": "1.0.0", + "max_power": 100, + "pid": "0xB155", + "vid": "0xFEED" + }, + "layouts": { + "LAYOUT_fullsize_ansi_wkl": { + "c_macro": true, + "filename": "keyboards/modelh/modelh.h", + "json_layout": true, + "layout": [ + { "label": "Esc", "matrix": [0, 2], "w": 1, "x": 0, "y": 0 }, + { "label": "F1", "matrix": [2, 3], "w": 1, "x": 2, "y": 0 }, + { "label": "F2", "matrix": [2, 4], "w": 1, "x": 3, "y": 0 }, + { "label": "F3", "matrix": [1, 4], "w": 1, "x": 4, "y": 0 }, + { "label": "F4", "matrix": [0, 4], "w": 1, "x": 5, "y": 0 }, + { "label": "F5", "matrix": [0, 6], "w": 1, "x": 6.5, "y": 0 }, + { "label": "F6", "matrix": [0, 8], "w": 1, "x": 7.5, "y": 0 }, + { "label": "F7", "matrix": [1, 9], "w": 1, "x": 8.5, "y": 0 }, + { "label": "F8", "matrix": [2, 9], "w": 1, "x": 9.5, "y": 0 }, + { "label": "F9", "matrix": [2, 6], "w": 1, "x": 11, "y": 0 }, + { "label": "F10", "matrix": [3, 6], "w": 1, "x": 12, "y": 0 }, + { "label": "F11", "matrix": [3, 11], "w": 1, "x": 13, "y": 0 }, + { "label": "F12", "matrix": [3, 12], "w": 1, "x": 14, "y": 0 }, + { "label": "PrtSc", "matrix": [3, 15], "w": 1, "x": 15.25, "y": 0 }, + { "label": "Scroll Lock", "matrix": [4, 15], "w": 1, "x": 16.25, "y": 0 }, + { "label": "Pause", "matrix": [6, 14], "w": 1, "x": 17.25, "y": 0 }, + { "label": "~", "matrix": [2, 2], "w": 1, "x": 0, "y": 1.5 }, + { "label": "!", "matrix": [3, 2], "w": 1, "x": 1, "y": 1.5 }, + { "label": "@", "matrix": [3, 3], "w": 1, "x": 2, "y": 1.5 }, + { "label": "#", "matrix": [3, 4], "w": 1, "x": 3, "y": 1.5 }, + { "label": "$", "matrix": [3, 5], "w": 1, "x": 4, "y": 1.5 }, + { "label": "%", "matrix": [2, 5], "w": 1, "x": 5, "y": 1.5 }, + { "label": "^", "matrix": [2, 7], "w": 1, "x": 6, "y": 1.5 }, + { "label": "&", "matrix": [3, 7], "w": 1, "x": 7, "y": 1.5 }, + { "label": "*", "matrix": [3, 8], "w": 1, "x": 8, "y": 1.5 }, + { "label": "(", "matrix": [3, 9], "w": 1, "x": 9, "y": 1.5 }, + { "label": ")", "matrix": [3, 10], "w": 1, "x": 10, "y": 1.5 }, + { "label": "_", "matrix": [2, 10], "w": 1, "x": 11, "y": 1.5 }, + { "label": "+", "matrix": [2, 8], "w": 1, "x": 12, "y": 1.5 }, + { "label": "Backspace", "matrix": [1, 6], "w": 2, "x": 13, "y": 1.5 }, + { "label": "Insert", "matrix": [2, 12], "w": 1, "x": 15.25, "y": 1.5 }, + { "label": "Home", "matrix": [2, 14], "w": 1, "x": 16.25, "y": 1.5 }, + { "label": "PgUp", "matrix": [2, 13], "w": 1, "x": 17.25, "y": 1.5 }, + { "label": "Num Lock", "matrix": [6, 11], "w": 1, "x": 18.5, "y": 1.5 }, + { "label": "/", "matrix": [6, 12], "w": 1, "x": 19.5, "y": 1.5 }, + { "label": "*", "matrix": [6, 13], "w": 1, "x": 20.5, "y": 1.5 }, + { "label": "-", "matrix": [7, 13], "w": 1, "x": 21.5, "y": 1.5 }, + { "label": "Tab", "matrix": [1, 2], "w": 1.5, "x": 0, "y": 2.5 }, + { "label": "Q", "matrix": [4, 2], "w": 1, "x": 1.5, "y": 2.5 }, + { "label": "W", "matrix": [4, 3], "w": 1, "x": 2.5, "y": 2.5 }, + { "label": "E", "matrix": [4, 4], "w": 1, "x": 3.5, "y": 2.5 }, + { "label": "R", "matrix": [4, 5], "w": 1, "x": 4.5, "y": 2.5 }, + { "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 2.5 }, + { "label": "Y", "matrix": [1, 7], "w": 1, "x": 6.5, "y": 2.5 }, + { "label": "U", "matrix": [4, 7], "w": 1, "x": 7.5, "y": 2.5 }, + { "label": "I", "matrix": [4, 8], "w": 1, "x": 8.5, "y": 2.5 }, + { "label": "O", "matrix": [4, 9], "w": 1, "x": 9.5, "y": 2.5 }, + { "label": "P", "matrix": [4, 10], "w": 1, "x": 10.5, "y": 2.5 }, + { "label": "{", "matrix": [1, 10], "w": 1, "x": 11.5, "y": 2.5 }, + { "label": "}", "matrix": [1, 8], "w": 1, "x": 12.5, "y": 2.5 }, + { "label": "|", "matrix": [5, 6], "w": 1.5, "x": 13.5, "y": 2.5 }, + { "label": "Delete", "matrix": [2, 11], "w": 1, "x": 15.25, "y": 2.5 }, + { "label": "End", "matrix": [3, 14], "w": 1, "x": 16.25, "y": 2.5 }, + { "label": "PgDn", "matrix": [3, 13], "w": 1, "x": 17.25, "y": 2.5 }, + { "label": "7", "matrix": [4, 11], "w": 1, "x": 18.5, "y": 2.5 }, + { "label": "8", "matrix": [4, 12], "w": 1, "x": 19.5, "y": 2.5 }, + { "label": "9", "matrix": [4, 13], "w": 1, "x": 20.5, "y": 2.5 }, + { "h": 2, "label": "+", "matrix": [4, 14], "w": 1, "x": 21.5, "y": 2.5 }, + { "label": "Caps Lock", "matrix": [1, 3], "w": 1.5, "x": 0, "y": 3.5 }, + { "label": "A", "matrix": [5, 2], "w": 1, "x": 1.75, "y": 3.5 }, + { "label": "S", "matrix": [5, 3], "w": 1, "x": 2.75, "y": 3.5 }, + { "label": "D", "matrix": [5, 4], "w": 1, "x": 3.75, "y": 3.5 }, + { "label": "F", "matrix": [5, 5], "w": 1, "x": 4.75, "y": 3.5 }, + { "label": "G", "matrix": [0, 5], "w": 1, "x": 5.75, "y": 3.5 }, + { "label": "H", "matrix": [0, 7], "w": 1, "x": 6.75, "y": 3.5 }, + { "label": "J", "matrix": [5, 7], "w": 1, "x": 7.75, "y": 3.5 }, + { "label": "K", "matrix": [5, 8], "w": 1, "x": 8.75, "y": 3.5 }, + { "label": "L", "matrix": [5, 9], "w": 1, "x": 9.75, "y": 3.5 }, + { "label": ":", "matrix": [5, 10], "w": 1, "x": 10.75, "y": 3.5 }, + { "label": "\"", "matrix": [0, 10], "w": 1, "x": 11.75, "y": 3.5 }, + { "label": "Enter", "matrix": [6, 6], "w": 2.25, "x": 12.75, "y": 3.5 }, + { "label": "4", "matrix": [1, 11], "w": 1, "x": 18.5, "y": 3.5 }, + { "label": "5", "matrix": [1, 12], "w": 1, "x": 19.5, "y": 3.5 }, + { "label": "6", "matrix": [1, 13], "w": 1, "x": 20.5, "y": 3.5 }, + { "label": "Shift", "matrix": [1, 1], "w": 2.25, "x": 0, "y": 4.5 }, + { "label": "Z", "matrix": [6, 2], "w": 1, "x": 2.25, "y": 4.5 }, + { "label": "X", "matrix": [6, 3], "w": 1, "x": 3.25, "y": 4.5 }, + { "label": "C", "matrix": [6, 4], "w": 1, "x": 4.25, "y": 4.5 }, + { "label": "V", "matrix": [6, 5], "w": 1, "x": 5.25, "y": 4.5 }, + { "label": "B", "matrix": [7, 5], "w": 1, "x": 6.25, "y": 4.5 }, + { "label": "N", "matrix": [7, 7], "w": 1, "x": 7.25, "y": 4.5 }, + { "label": "M", "matrix": [6, 7], "w": 1, "x": 8.25, "y": 4.5 }, + { "label": "<", "matrix": [6, 8], "w": 1, "x": 9.25, "y": 4.5 }, + { "label": ">", "matrix": [6, 9], "w": 1, "x": 10.25, "y": 4.5 }, + { "label": "?", "matrix": [7, 10], "w": 1, "x": 11.25, "y": 4.5 }, + { "label": "Shift", "matrix": [6, 1], "w": 2.75, "x": 12.25, "y": 4.5 }, + { "label": "\u2191", "matrix": [0, 14], "w": 1, "x": 16.25, "y": 4.5 }, + { "label": "1", "matrix": [5, 11], "w": 1, "x": 18.5, "y": 4.5 }, + { "label": "2", "matrix": [5, 12], "w": 1, "x": 19.5, "y": 4.5 }, + { "label": "3", "matrix": [5, 13], "w": 1, "x": 20.5, "y": 4.5 }, + { "h": 2, "label": "Enter", "matrix": [5, 14], "w": 1, "x": 21.5, "y": 4.5 }, + { "label": "Ctrl", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 5.5 }, + { "label": "Alt", "matrix": [0, 15], "w": 1.5, "x": 2.5, "y": 5.5 }, + { "label": "K0C", "matrix": [7, 6], "w": 7, "x": 4, "y": 5.5 }, + { "label": "Alt", "matrix": [7, 15], "w": 1.5, "x": 11, "y": 5.5 }, + { "label": "Ctrl", "matrix": [6, 0], "w": 1.5, "x": 13.5, "y": 5.5 }, + { "label": "\u2190", "matrix": [7, 14], "w": 1, "x": 15.25, "y": 5.5 }, + { "label": "\u2193", "matrix": [7, 11], "w": 1, "x": 16.25, "y": 5.5 }, + { "label": "\u2192", "matrix": [7, 12], "w": 1, "x": 17.25, "y": 5.5 }, + { "label": "0", "matrix": [0, 12], "w": 2, "x": 18.5, "y": 5.5 }, + { "label": ".", "matrix": [0, 13], "w": 1, "x": 20.5, "y": 5.5 } + ] + }, + "LAYOUT_fullsize_iso_wkl": { + "c_macro": true, + "filename": "keyboards/modelh/modelh.h", + "json_layout": true, + "layout": [ + { "label": "Esc", "matrix": [0, 2], "w": 1, "x": 0, "y": 0 }, + { "label": "F1", "matrix": [2, 3], "w": 1, "x": 2, "y": 0 }, + { "label": "F2", "matrix": [2, 4], "w": 1, "x": 3, "y": 0 }, + { "label": "F3", "matrix": [1, 4], "w": 1, "x": 4, "y": 0 }, + { "label": "F4", "matrix": [0, 4], "w": 1, "x": 5, "y": 0 }, + { "label": "F5", "matrix": [0, 6], "w": 1, "x": 6.5, "y": 0 }, + { "label": "F6", "matrix": [0, 8], "w": 1, "x": 7.5, "y": 0 }, + { "label": "F7", "matrix": [1, 9], "w": 1, "x": 8.5, "y": 0 }, + { "label": "F8", "matrix": [2, 9], "w": 1, "x": 9.5, "y": 0 }, + { "label": "F9", "matrix": [2, 6], "w": 1, "x": 11, "y": 0 }, + { "label": "F10", "matrix": [3, 6], "w": 1, "x": 12, "y": 0 }, + { "label": "F11", "matrix": [3, 11], "w": 1, "x": 13, "y": 0 }, + { "label": "F12", "matrix": [3, 12], "w": 1, "x": 14, "y": 0 }, + { "label": "PrtSc", "matrix": [3, 15], "w": 1, "x": 15.25, "y": 0 }, + { "label": "Scroll Lock", "matrix": [4, 15], "w": 1, "x": 16.25, "y": 0 }, + { "label": "Pause", "matrix": [6, 14], "w": 1, "x": 17.25, "y": 0 }, + { "label": "~", "matrix": [2, 2], "w": 1, "x": 0, "y": 1.5 }, + { "label": "!", "matrix": [3, 2], "w": 1, "x": 1, "y": 1.5 }, + { "label": "@", "matrix": [3, 3], "w": 1, "x": 2, "y": 1.5 }, + { "label": "#", "matrix": [3, 4], "w": 1, "x": 3, "y": 1.5 }, + { "label": "$", "matrix": [3, 5], "w": 1, "x": 4, "y": 1.5 }, + { "label": "%", "matrix": [2, 5], "w": 1, "x": 5, "y": 1.5 }, + { "label": "^", "matrix": [2, 7], "w": 1, "x": 6, "y": 1.5 }, + { "label": "&", "matrix": [3, 7], "w": 1, "x": 7, "y": 1.5 }, + { "label": "*", "matrix": [3, 8], "w": 1, "x": 8, "y": 1.5 }, + { "label": "(", "matrix": [3, 9], "w": 1, "x": 9, "y": 1.5 }, + { "label": ")", "matrix": [3, 10], "w": 1, "x": 10, "y": 1.5 }, + { "label": "_", "matrix": [2, 10], "w": 1, "x": 11, "y": 1.5 }, + { "label": "+", "matrix": [2, 8], "w": 1, "x": 12, "y": 1.5 }, + { "label": "Backspace", "matrix": [1, 6], "w": 2, "x": 13, "y": 1.5 }, + { "label": "Insert", "matrix": [2, 12], "w": 1, "x": 15.25, "y": 1.5 }, + { "label": "Home", "matrix": [2, 14], "w": 1, "x": 16.25, "y": 1.5 }, + { "label": "PgUp", "matrix": [2, 13], "w": 1, "x": 17.25, "y": 1.5 }, + { "label": "Num Lock", "matrix": [6, 11], "w": 1, "x": 18.5, "y": 1.5 }, + { "label": "/", "matrix": [6, 12], "w": 1, "x": 19.5, "y": 1.5 }, + { "label": "*", "matrix": [6, 13], "w": 1, "x": 20.5, "y": 1.5 }, + { "label": "-", "matrix": [7, 13], "w": 1, "x": 21.5, "y": 1.5 }, + { "label": "Tab", "matrix": [1, 2], "w": 1.5, "x": 0, "y": 2.5 }, + { "label": "Q", "matrix": [4, 2], "w": 1, "x": 1.5, "y": 2.5 }, + { "label": "W", "matrix": [4, 3], "w": 1, "x": 2.5, "y": 2.5 }, + { "label": "E", "matrix": [4, 4], "w": 1, "x": 3.5, "y": 2.5 }, + { "label": "R", "matrix": [4, 5], "w": 1, "x": 4.5, "y": 2.5 }, + { "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 2.5 }, + { "label": "Y", "matrix": [1, 7], "w": 1, "x": 6.5, "y": 2.5 }, + { "label": "U", "matrix": [4, 7], "w": 1, "x": 7.5, "y": 2.5 }, + { "label": "I", "matrix": [4, 8], "w": 1, "x": 8.5, "y": 2.5 }, + { "label": "O", "matrix": [4, 9], "w": 1, "x": 9.5, "y": 2.5 }, + { "label": "P", "matrix": [4, 10], "w": 1, "x": 10.5, "y": 2.5 }, + { "label": "{", "matrix": [1, 10], "w": 1, "x": 11.5, "y": 2.5 }, + { "label": "}", "matrix": [1, 8], "w": 1, "x": 12.5, "y": 2.5 }, + { "label": "Delete", "matrix": [2, 11], "w": 1, "x": 15.25, "y": 2.5 }, + { "label": "End", "matrix": [3, 14], "w": 1, "x": 16.25, "y": 2.5 }, + { "label": "PgDn", "matrix": [3, 13], "w": 1, "x": 17.25, "y": 2.5 }, + { "label": "7", "matrix": [4, 11], "w": 1, "x": 18.5, "y": 2.5 }, + { "label": "8", "matrix": [4, 12], "w": 1, "x": 19.5, "y": 2.5 }, + { "label": "9", "matrix": [4, 13], "w": 1, "x": 20.5, "y": 2.5 }, + { "h": 2, "label": "+", "matrix": [4, 14], "w": 1, "x": 21.5, "y": 2.5 }, + { "label": "Caps Lock", "matrix": [1, 3], "w": 1.5, "x": 0, "y": 3.5 }, + { "label": "A", "matrix": [5, 2], "w": 1, "x": 1.75, "y": 3.5 }, + { "label": "S", "matrix": [5, 3], "w": 1, "x": 2.75, "y": 3.5 }, + { "label": "D", "matrix": [5, 4], "w": 1, "x": 3.75, "y": 3.5 }, + { "label": "F", "matrix": [5, 5], "w": 1, "x": 4.75, "y": 3.5 }, + { "label": "G", "matrix": [0, 5], "w": 1, "x": 5.75, "y": 3.5 }, + { "label": "H", "matrix": [0, 7], "w": 1, "x": 6.75, "y": 3.5 }, + { "label": "J", "matrix": [5, 7], "w": 1, "x": 7.75, "y": 3.5 }, + { "label": "K", "matrix": [5, 8], "w": 1, "x": 8.75, "y": 3.5 }, + { "label": "L", "matrix": [5, 9], "w": 1, "x": 9.75, "y": 3.5 }, + { "label": ":", "matrix": [5, 10], "w": 1, "x": 10.75, "y": 3.5 }, + { "label": "\"", "matrix": [0, 10], "w": 1, "x": 11.75, "y": 3.5 }, + { "label": "~", "matrix": [6, 10], "w": 1, "x": 12.75, "y": 3.5 }, + { "h": 2, "label": "Enter", "matrix": [6, 6], "w": 1.25, "x": 13.75, "y": 2.5 }, + { "label": "4", "matrix": [1, 11], "w": 1, "x": 18.5, "y": 3.5 }, + { "label": "5", "matrix": [1, 12], "w": 1, "x": 19.5, "y": 3.5 }, + { "label": "6", "matrix": [1, 13], "w": 1, "x": 20.5, "y": 3.5 }, + { "label": "Shift", "matrix": [1, 1], "w": 1.25, "x": 0, "y": 4.5 }, + { "label": "|", "matrix": [0, 3], "w": 1, "x": 1.25, "y": 4.5 }, + { "label": "Z", "matrix": [6, 2], "w": 1, "x": 2.25, "y": 4.5 }, + { "label": "X", "matrix": [6, 3], "w": 1, "x": 3.25, "y": 4.5 }, + { "label": "C", "matrix": [6, 4], "w": 1, "x": 4.25, "y": 4.5 }, + { "label": "V", "matrix": [6, 5], "w": 1, "x": 5.25, "y": 4.5 }, + { "label": "B", "matrix": [7, 5], "w": 1, "x": 6.25, "y": 4.5 }, + { "label": "N", "matrix": [7, 7], "w": 1, "x": 7.25, "y": 4.5 }, + { "label": "M", "matrix": [6, 7], "w": 1, "x": 8.25, "y": 4.5 }, + { "label": "<", "matrix": [6, 8], "w": 1, "x": 9.25, "y": 4.5 }, + { "label": ">", "matrix": [6, 9], "w": 1, "x": 10.25, "y": 4.5 }, + { "label": "?", "matrix": [7, 10], "w": 1, "x": 11.25, "y": 4.5 }, + { "label": "Shift", "matrix": [6, 1], "w": 2.75, "x": 12.25, "y": 4.5 }, + { "label": "\u2191", "matrix": [0, 14], "w": 1, "x": 16.25, "y": 4.5 }, + { "label": "1", "matrix": [5, 11], "w": 1, "x": 18.5, "y": 4.5 }, + { "label": "2", "matrix": [5, 12], "w": 1, "x": 19.5, "y": 4.5 }, + { "label": "3", "matrix": [5, 13], "w": 1, "x": 20.5, "y": 4.5 }, + { "h": 2, "label": "Enter", "matrix": [5, 14], "w": 1, "x": 21.5, "y": 4.5 }, + { "label": "Ctrl", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 5.5 }, + { "label": "Alt", "matrix": [0, 15], "w": 1.5, "x": 2.5, "y": 5.5 }, + { "label": "K0C", "matrix": [7, 6], "w": 7, "x": 4, "y": 5.5 }, + { "label": "Alt", "matrix": [7, 15], "w": 1.5, "x": 11, "y": 5.5 }, + { "label": "Ctrl", "matrix": [6, 0], "w": 1.5, "x": 13.5, "y": 5.5 }, + { "label": "\u2190", "matrix": [7, 14], "w": 1, "x": 15.25, "y": 5.5 }, + { "label": "\u2193", "matrix": [7, 11], "w": 1, "x": 16.25, "y": 5.5 }, + { "label": "\u2192", "matrix": [7, 12], "w": 1, "x": 17.25, "y": 5.5 }, + { "label": "0", "matrix": [0, 12], "w": 2, "x": 18.5, "y": 5.5 }, + { "label": ".", "matrix": [0, 13], "w": 1, "x": 20.5, "y": 5.5 } + ] } - ] } - } } diff --git a/keyboards/modelh/keymaps/default/keymap.c b/keyboards/modelh/keymaps/default/keymap.c index 89f899faad40..9098b869b302 100644 --- a/keyboards/modelh/keymaps/default/keymap.c +++ b/keyboards/modelh/keymaps/default/keymap.c @@ -25,7 +25,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ), }; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} diff --git a/keyboards/modelh/mcuconf.h b/keyboards/modelh/mcuconf.h index a645d3c5d5cf..7d3d6e143a44 100644 --- a/keyboards/modelh/mcuconf.h +++ b/keyboards/modelh/mcuconf.h @@ -1,209 +1,25 @@ -/* - 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 STM32F103_MCUCONF - -/* - * STM32F103 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the whole - * driver is enabled in halconf.h. +/* Copyright 2020 QMK * - * IRQ priorities: - * 15...0 Lowest...Highest. + * 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. * - * DMA priorities: - * 0...3 Lowest...Highest. - */ - -/* - * HAL driver system settings. - */ -#define STM32_NO_INIT FALSE -#define STM32_HSI_ENABLED TRUE -#define STM32_LSI_ENABLED FALSE -#define STM32_HSE_ENABLED TRUE -#define STM32_LSE_ENABLED FALSE -#define STM32_SW STM32_SW_PLL -#define STM32_PLLSRC STM32_PLLSRC_HSE -#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1 -#define STM32_PLLMUL_VALUE 9 -#define STM32_HPRE STM32_HPRE_DIV1 -#define STM32_PPRE1 STM32_PPRE1_DIV2 -#define STM32_PPRE2 STM32_PPRE2_DIV2 -#define STM32_ADCPRE STM32_ADCPRE_DIV4 -#define STM32_USB_CLOCK_REQUIRED TRUE -#define STM32_USBPRE STM32_USBPRE_DIV1P5 -#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK -#define STM32_RTCSEL STM32_RTCSEL_HSEDIV -#define STM32_PVD_ENABLE FALSE -#define STM32_PLS STM32_PLS_LEV0 - -/* - * ADC driver system settings. - */ -#define STM32_ADC_USE_ADC1 FALSE -#define STM32_ADC_ADC1_DMA_PRIORITY 2 -#define STM32_ADC_ADC1_IRQ_PRIORITY 6 - -/* - * CAN driver system settings. - */ -#define STM32_CAN_USE_CAN1 FALSE -#define STM32_CAN_CAN1_IRQ_PRIORITY 11 - -/* - * EXT driver system settings. + * 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/>. */ -#define STM32_EXT_EXTI0_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI1_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI2_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI3_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI4_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI16_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI17_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI18_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI19_IRQ_PRIORITY 6 -/* - * GPT driver system settings. - */ -#define STM32_GPT_USE_TIM1 FALSE -#define STM32_GPT_USE_TIM2 FALSE -#define STM32_GPT_USE_TIM3 FALSE -#define STM32_GPT_USE_TIM4 FALSE -#define STM32_GPT_USE_TIM5 FALSE -#define STM32_GPT_USE_TIM8 FALSE -#define STM32_GPT_TIM1_IRQ_PRIORITY 7 -#define STM32_GPT_TIM2_IRQ_PRIORITY 7 -#define STM32_GPT_TIM3_IRQ_PRIORITY 7 -#define STM32_GPT_TIM4_IRQ_PRIORITY 7 -#define STM32_GPT_TIM5_IRQ_PRIORITY 7 -#define STM32_GPT_TIM8_IRQ_PRIORITY 7 +#pragma once -/* - * I2C driver system settings. - */ -#define STM32_I2C_USE_I2C1 FALSE -#define STM32_I2C_USE_I2C2 FALSE -#define STM32_I2C_BUSY_TIMEOUT 50 -#define STM32_I2C_I2C1_IRQ_PRIORITY 5 -#define STM32_I2C_I2C2_IRQ_PRIORITY 5 -#define STM32_I2C_I2C1_DMA_PRIORITY 3 -#define STM32_I2C_I2C2_DMA_PRIORITY 3 -#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") +#include_next <mcuconf.h> -/* - * ICU driver system settings. - */ -#define STM32_ICU_USE_TIM1 FALSE -#define STM32_ICU_USE_TIM2 FALSE -#define STM32_ICU_USE_TIM3 FALSE -#define STM32_ICU_USE_TIM4 FALSE -#define STM32_ICU_USE_TIM5 FALSE -#define STM32_ICU_USE_TIM8 FALSE -#define STM32_ICU_TIM1_IRQ_PRIORITY 7 -#define STM32_ICU_TIM2_IRQ_PRIORITY 7 -#define STM32_ICU_TIM3_IRQ_PRIORITY 7 -#define STM32_ICU_TIM4_IRQ_PRIORITY 7 -#define STM32_ICU_TIM5_IRQ_PRIORITY 7 -#define STM32_ICU_TIM8_IRQ_PRIORITY 7 +#undef STM32_PWM_USE_TIM2 +#undef STM32_SPI_USE_SPI2 -/* - * PWM driver system settings. - */ -#define STM32_PWM_USE_ADVANCED FALSE -#define STM32_PWM_USE_TIM1 FALSE #define STM32_PWM_USE_TIM2 TRUE -#define STM32_PWM_USE_TIM3 FALSE -#define STM32_PWM_USE_TIM4 FALSE -#define STM32_PWM_USE_TIM5 FALSE -#define STM32_PWM_USE_TIM8 FALSE -#define STM32_PWM_TIM1_IRQ_PRIORITY 7 -#define STM32_PWM_TIM2_IRQ_PRIORITY 7 -#define STM32_PWM_TIM3_IRQ_PRIORITY 7 -#define STM32_PWM_TIM4_IRQ_PRIORITY 7 -#define STM32_PWM_TIM5_IRQ_PRIORITY 7 -#define STM32_PWM_TIM8_IRQ_PRIORITY 7 - -/* - * RTC driver system settings. - */ -#define STM32_RTC_IRQ_PRIORITY 15 - -/* - * SERIAL driver system settings. - */ -#define STM32_SERIAL_USE_USART1 FALSE -#define STM32_SERIAL_USE_USART2 FALSE -#define STM32_SERIAL_USE_USART3 FALSE -#define STM32_SERIAL_USE_UART4 FALSE -#define STM32_SERIAL_USE_UART5 FALSE -#define STM32_SERIAL_USART1_PRIORITY 12 -#define STM32_SERIAL_USART2_PRIORITY 12 -#define STM32_SERIAL_USART3_PRIORITY 12 -#define STM32_SERIAL_UART4_PRIORITY 12 -#define STM32_SERIAL_UART5_PRIORITY 12 - -/* - * SPI driver system settings. - */ -#define STM32_SPI_USE_SPI1 FALSE #define STM32_SPI_USE_SPI2 FALSE -#define STM32_SPI_USE_SPI3 FALSE -#define STM32_SPI_SPI1_DMA_PRIORITY 1 -#define STM32_SPI_SPI2_DMA_PRIORITY 1 -#define STM32_SPI_SPI3_DMA_PRIORITY 1 -#define STM32_SPI_SPI1_IRQ_PRIORITY 10 -#define STM32_SPI_SPI2_IRQ_PRIORITY 10 -#define STM32_SPI_SPI3_IRQ_PRIORITY 10 -#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure") - -/* - * ST driver system settings. - */ -#define STM32_ST_IRQ_PRIORITY 8 -#define STM32_ST_USE_TIMER 2 - -/* - * UART driver system settings. - */ -#define STM32_UART_USE_USART1 FALSE -#define STM32_UART_USE_USART2 FALSE -#define STM32_UART_USE_USART3 FALSE -#define STM32_UART_USART1_IRQ_PRIORITY 12 -#define STM32_UART_USART2_IRQ_PRIORITY 12 -#define STM32_UART_USART3_IRQ_PRIORITY 12 -#define STM32_UART_USART1_DMA_PRIORITY 0 -#define STM32_UART_USART2_DMA_PRIORITY 0 -#define STM32_UART_USART3_DMA_PRIORITY 0 -#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure") - -/* - * USB driver system settings. - */ -#define STM32_USB_USE_USB1 TRUE -#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE -#define STM32_USB_USB1_HP_IRQ_PRIORITY 13 -#define STM32_USB_USB1_LP_IRQ_PRIORITY 14 - -#endif /* _MCUCONF_H_ */ diff --git a/keyboards/modelh/modelh.c b/keyboards/modelh/modelh.c index 3e8e7b0e03de..4b909c5f0c3e 100644 --- a/keyboards/modelh/modelh.c +++ b/keyboards/modelh/modelh.c @@ -16,33 +16,10 @@ #include "modelh.h" -#ifdef MODELH_LED_PINS -static const pin_t led_pins[3] = MODELH_LED_PINS; - -bool led_update_kb(led_t led_state) { - bool res = led_update_user(led_state); - if(res) { - writePin(led_pins[0], !led_state.num_lock); - writePin(led_pins[1], !led_state.caps_lock); - writePin(led_pins[2], !led_state.scroll_lock); - } - return res; -} - -void led_init_ports() { - setPinOutput(led_pins[0]); - setPinOutput(led_pins[1]); - setPinOutput(led_pins[2]); -} - -#else -void led_init_ports() { } -#endif void keyboard_pre_init_kb(void) { setPinOutput(MODELH_STATUS_LED); writePin(MODELH_STATUS_LED, 0); - led_init_ports(); keyboard_pre_init_user(); } diff --git a/keyboards/modelh/modelh.h b/keyboards/modelh/modelh.h index d8dc4edfc8e4..4a72074c0ed5 100644 --- a/keyboards/modelh/modelh.h +++ b/keyboards/modelh/modelh.h @@ -17,54 +17,3 @@ #pragma once #include "quantum.h" - -/* This is a shortcut to help you visually see your layout. - * - * The first section contains all of the arguments representing the physical - * layout of the board and position of the keys. - * - * The second converts the arguments into a two-dimensional array which - * represents the switch matrix. - */ - -#define LAYOUT_fullsize_ansi_wkl( \ - K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, \ - \ - K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, K4Q, K4R, K4S, K4T, K4U, \ - K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3O, K3P, K3Q, K3R, K3S, K3T, K3U, \ - K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2N, K2O, K2P, K2Q, \ - K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, K1O, K1P, K1Q, K1R, \ - K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, K0I, K0J \ -) \ -{ \ -/* 00 */ { KC_NO, KC_NO, K5A, KC_NO, K5E, K2F, K5F, K2G, K5G, KC_NO, K2L, KC_NO, K0I, K0J, K1N, K0B }, \ -/* 01 */ { KC_NO, K1A, K3A, K2A, K5D, K3F, K4N, K3G, K3M, K5H, K3L, K2O, K2P, K2Q, KC_NO, KC_NO }, \ -/* 02 */ { K0A, KC_NO, K4A, K5B, K5C, K4F, K5J, K4G, K4M, K5I, K4L, K3O, K4O, K4Q, K4P, KC_NO }, \ -/* 03 */ { KC_NO, KC_NO, K4B, K4C, K4D, K4E, K5K, K4H, K4I, K4J, K4K, K5L, K5M, K3Q, K3P, K5N }, \ -/* 04 */ { KC_NO, KC_NO, K3B, K3C, K3D, K3E, KC_NO, K3H, K3I, K3J, K3K, K3R, K3S, K3T, K3U, K5O }, \ -/* 05 */ { KC_NO, KC_NO, K2B, K2C, K2D, K2E, K3N, K2H, K2I, K2J, K2K, K1O, K1P, K1Q, K1R, KC_NO }, \ -/* 06 */ { K0E, K1M, K1C, K1D, K1E, K1F, K2N, K1I, K1J, K1K, KC_NO, K4R, K4S, K4T, K5P, KC_NO }, \ -/* 07 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K1G, K0C, K1H, KC_NO, KC_NO, K1L, K0G, K0H, K4U, K0F, K0D }, \ -} -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ - - -#define LAYOUT_fullsize_iso_wkl( \ - K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, \ - \ - K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, K4Q, K4R, K4S, K4T, K4U, \ - K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, K3P, K3Q, K3R, K3S, K3T, K3U, \ - K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2N, K2O, K2P, K2Q, \ - K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, K1O, K1P, K1Q, K1R, \ - K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, K0I, K0J \ -) \ -{ \ - { KC_NO, KC_NO, K5A, K1B, K5E, K2F, K5F, K2G, K5G, KC_NO, K2L, KC_NO, K0I, K0J, K1N, K0B }, \ - { KC_NO, K1A, K3A, K2A, K5D, K3F, K4N, K3G, K3M, K5H, K3L, K2O, K2P, K2Q, KC_NO, KC_NO }, \ - { K0A, KC_NO, K4A, K5B, K5C, K4F, K5J, K4G, K4M, K5I, K4L, K3O, K4O, K4Q, K4P, KC_NO }, \ - { KC_NO, KC_NO, K4B, K4C, K4D, K4E, K5K, K4H, K4I, K4J, K4K, K5L, K5M, K3Q, K3P, K5N }, \ - { KC_NO, KC_NO, K3B, K3C, K3D, K3E, KC_NO, K3H, K3I, K3J, K3K, K3R, K3S, K3T, K3U, K5O }, \ - { KC_NO, KC_NO, K2B, K2C, K2D, K2E, KC_NO, K2H, K2I, K2J, K2K, K1O, K1P, K1Q, K1R, KC_NO }, \ - { K0E, K1M, K1C, K1D, K1E, K1F, K2N, K1I, K1J, K1K, K2M, K4R, K4S, K4T, K5P, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K1G, K0C, K1H, KC_NO, KC_NO, K1L, K0G, K0H, K4U, K0F, K0D } \ -} diff --git a/keyboards/modelh/rules.mk b/keyboards/modelh/rules.mk index 9a4c49510b32..f18e83e076f7 100644 --- a/keyboards/modelh/rules.mk +++ b/keyboards/modelh/rules.mk @@ -6,11 +6,4 @@ BOOTLOADER = stm32duino # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration -EXTRAKEY_ENABLE = yes # Audio control and System control -CONSOLE_ENABLE = no # Console for debug -COMMAND_ENABLE = no # Commands for debug and configuration -SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend -NKRO_ENABLE = no # USB Nkey Rollover CUSTOM_MATRIX = no # Custom matrix file -MOUSEKEY_ENABLE = no From de8fddc2ed31c17bd0f1d8d3726e7733ab32427d Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome.berclaz@a3.epfl.ch> Date: Thu, 4 May 2023 07:44:11 -0700 Subject: [PATCH 07/16] Additional reviewer's comments --- keyboards/modelh/config.h | 8 ------- keyboards/modelh/info.json | 26 ---------------------- keyboards/modelh/keymaps/default/readme.md | 1 - keyboards/modelh/modelh.c | 2 +- keyboards/modelh/modelh.h | 19 ---------------- keyboards/modelh/rules.mk | 7 ------ 6 files changed, 1 insertion(+), 62 deletions(-) delete mode 100644 keyboards/modelh/keymaps/default/readme.md delete mode 100644 keyboards/modelh/modelh.h diff --git a/keyboards/modelh/config.h b/keyboards/modelh/config.h index 20d8461c4ee8..ac95ccfe662f 100644 --- a/keyboards/modelh/config.h +++ b/keyboards/modelh/config.h @@ -22,10 +22,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define MODELH_STATUS_LED C13 - -/* define if matrix has ghost (lacks anti-ghosting diodes) */ -#define MATRIX_HAS_GHOST - /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE /* Locking resynchronize hack */ @@ -47,7 +43,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. //#define NO_ACTION_LAYER //#define NO_ACTION_TAPPING //#define NO_ACTION_ONESHOT - -/* disable these deprecated features by default */ -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION diff --git a/keyboards/modelh/info.json b/keyboards/modelh/info.json index 86e8bea4188c..225d9c35c91c 100644 --- a/keyboards/modelh/info.json +++ b/keyboards/modelh/info.json @@ -2,12 +2,7 @@ "manufacturer": "IBM", "keyboard_name": "Model M", "maintainer": "jhawthorn", - "board": "STM32_F103_STM32DUINO", "bootloader": "stm32duino", - "bootmagic": { - "enabled": false - }, - "debounce": 5, "diode_direction": "COL2ROW", "features": { "bootmagic": false, @@ -23,27 +18,12 @@ "num_lock": "B9", "scroll_lock": "B7" }, - "keyboard_folder": "modelh", - "keymaps": {}, "matrix_pins": { "cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B1", "B0", "A7", "A6", "A5", "A4", "A3"], "ghost": false, "rows": ["B6", "B5", "B4", "A15", "B3", "A0", "A2", "A1"] }, - "matrix_size": { - "cols": 16, - "rows": 8 - }, - "mouse_key": { - "enabled": false - }, - "parse_errors": [], - "parse_warnings": [], - "platform": "STM32", - "platform_key": "chibios", "processor": "STM32F103", - "processor_type": "arm", - "protocol": "ChibiOS", "url": "modelh.club", "usb": { "device_version": "1.0.0", @@ -53,9 +33,6 @@ }, "layouts": { "LAYOUT_fullsize_ansi_wkl": { - "c_macro": true, - "filename": "keyboards/modelh/modelh.h", - "json_layout": true, "layout": [ { "label": "Esc", "matrix": [0, 2], "w": 1, "x": 0, "y": 0 }, { "label": "F1", "matrix": [2, 3], "w": 1, "x": 2, "y": 0 }, @@ -161,9 +138,6 @@ ] }, "LAYOUT_fullsize_iso_wkl": { - "c_macro": true, - "filename": "keyboards/modelh/modelh.h", - "json_layout": true, "layout": [ { "label": "Esc", "matrix": [0, 2], "w": 1, "x": 0, "y": 0 }, { "label": "F1", "matrix": [2, 3], "w": 1, "x": 2, "y": 0 }, diff --git a/keyboards/modelh/keymaps/default/readme.md b/keyboards/modelh/keymaps/default/readme.md deleted file mode 100644 index 5540d213c784..000000000000 --- a/keyboards/modelh/keymaps/default/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default keymap for modelh diff --git a/keyboards/modelh/modelh.c b/keyboards/modelh/modelh.c index 4b909c5f0c3e..5384b3733854 100644 --- a/keyboards/modelh/modelh.c +++ b/keyboards/modelh/modelh.c @@ -14,7 +14,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "modelh.h" +#include "quantum.h" void keyboard_pre_init_kb(void) { diff --git a/keyboards/modelh/modelh.h b/keyboards/modelh/modelh.h deleted file mode 100644 index 4a72074c0ed5..000000000000 --- a/keyboards/modelh/modelh.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright 2020 John Hawthorn - * - * 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/>. - */ - -#pragma once - -#include "quantum.h" diff --git a/keyboards/modelh/rules.mk b/keyboards/modelh/rules.mk index f18e83e076f7..a92b0993283e 100644 --- a/keyboards/modelh/rules.mk +++ b/keyboards/modelh/rules.mk @@ -1,9 +1,2 @@ -# MCU name -MCU = STM32F103 - -BOOTLOADER = stm32duino - # Enter lower-power sleep mode when on the ChibiOS idle thread OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE - -CUSTOM_MATRIX = no # Custom matrix file From 2405ca48474de0b43c5e1aaee6a2d9fe465cad8b Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome@percipient.ai> Date: Thu, 4 May 2023 18:35:54 -0700 Subject: [PATCH 08/16] Update keyboards/modelh/info.json Co-authored-by: Ryan <fauxpark@gmail.com> --- keyboards/modelh/info.json | 442 ++++++++++++++++++++----------------- 1 file changed, 239 insertions(+), 203 deletions(-) diff --git a/keyboards/modelh/info.json b/keyboards/modelh/info.json index 225d9c35c91c..9089c7b9bd07 100644 --- a/keyboards/modelh/info.json +++ b/keyboards/modelh/info.json @@ -34,213 +34,249 @@ "layouts": { "LAYOUT_fullsize_ansi_wkl": { "layout": [ - { "label": "Esc", "matrix": [0, 2], "w": 1, "x": 0, "y": 0 }, - { "label": "F1", "matrix": [2, 3], "w": 1, "x": 2, "y": 0 }, - { "label": "F2", "matrix": [2, 4], "w": 1, "x": 3, "y": 0 }, - { "label": "F3", "matrix": [1, 4], "w": 1, "x": 4, "y": 0 }, - { "label": "F4", "matrix": [0, 4], "w": 1, "x": 5, "y": 0 }, - { "label": "F5", "matrix": [0, 6], "w": 1, "x": 6.5, "y": 0 }, - { "label": "F6", "matrix": [0, 8], "w": 1, "x": 7.5, "y": 0 }, - { "label": "F7", "matrix": [1, 9], "w": 1, "x": 8.5, "y": 0 }, - { "label": "F8", "matrix": [2, 9], "w": 1, "x": 9.5, "y": 0 }, - { "label": "F9", "matrix": [2, 6], "w": 1, "x": 11, "y": 0 }, - { "label": "F10", "matrix": [3, 6], "w": 1, "x": 12, "y": 0 }, - { "label": "F11", "matrix": [3, 11], "w": 1, "x": 13, "y": 0 }, - { "label": "F12", "matrix": [3, 12], "w": 1, "x": 14, "y": 0 }, - { "label": "PrtSc", "matrix": [3, 15], "w": 1, "x": 15.25, "y": 0 }, - { "label": "Scroll Lock", "matrix": [4, 15], "w": 1, "x": 16.25, "y": 0 }, - { "label": "Pause", "matrix": [6, 14], "w": 1, "x": 17.25, "y": 0 }, - { "label": "~", "matrix": [2, 2], "w": 1, "x": 0, "y": 1.5 }, - { "label": "!", "matrix": [3, 2], "w": 1, "x": 1, "y": 1.5 }, - { "label": "@", "matrix": [3, 3], "w": 1, "x": 2, "y": 1.5 }, - { "label": "#", "matrix": [3, 4], "w": 1, "x": 3, "y": 1.5 }, - { "label": "$", "matrix": [3, 5], "w": 1, "x": 4, "y": 1.5 }, - { "label": "%", "matrix": [2, 5], "w": 1, "x": 5, "y": 1.5 }, - { "label": "^", "matrix": [2, 7], "w": 1, "x": 6, "y": 1.5 }, - { "label": "&", "matrix": [3, 7], "w": 1, "x": 7, "y": 1.5 }, - { "label": "*", "matrix": [3, 8], "w": 1, "x": 8, "y": 1.5 }, - { "label": "(", "matrix": [3, 9], "w": 1, "x": 9, "y": 1.5 }, - { "label": ")", "matrix": [3, 10], "w": 1, "x": 10, "y": 1.5 }, - { "label": "_", "matrix": [2, 10], "w": 1, "x": 11, "y": 1.5 }, - { "label": "+", "matrix": [2, 8], "w": 1, "x": 12, "y": 1.5 }, - { "label": "Backspace", "matrix": [1, 6], "w": 2, "x": 13, "y": 1.5 }, - { "label": "Insert", "matrix": [2, 12], "w": 1, "x": 15.25, "y": 1.5 }, - { "label": "Home", "matrix": [2, 14], "w": 1, "x": 16.25, "y": 1.5 }, - { "label": "PgUp", "matrix": [2, 13], "w": 1, "x": 17.25, "y": 1.5 }, - { "label": "Num Lock", "matrix": [6, 11], "w": 1, "x": 18.5, "y": 1.5 }, - { "label": "/", "matrix": [6, 12], "w": 1, "x": 19.5, "y": 1.5 }, - { "label": "*", "matrix": [6, 13], "w": 1, "x": 20.5, "y": 1.5 }, - { "label": "-", "matrix": [7, 13], "w": 1, "x": 21.5, "y": 1.5 }, - { "label": "Tab", "matrix": [1, 2], "w": 1.5, "x": 0, "y": 2.5 }, - { "label": "Q", "matrix": [4, 2], "w": 1, "x": 1.5, "y": 2.5 }, - { "label": "W", "matrix": [4, 3], "w": 1, "x": 2.5, "y": 2.5 }, - { "label": "E", "matrix": [4, 4], "w": 1, "x": 3.5, "y": 2.5 }, - { "label": "R", "matrix": [4, 5], "w": 1, "x": 4.5, "y": 2.5 }, - { "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 2.5 }, - { "label": "Y", "matrix": [1, 7], "w": 1, "x": 6.5, "y": 2.5 }, - { "label": "U", "matrix": [4, 7], "w": 1, "x": 7.5, "y": 2.5 }, - { "label": "I", "matrix": [4, 8], "w": 1, "x": 8.5, "y": 2.5 }, - { "label": "O", "matrix": [4, 9], "w": 1, "x": 9.5, "y": 2.5 }, - { "label": "P", "matrix": [4, 10], "w": 1, "x": 10.5, "y": 2.5 }, - { "label": "{", "matrix": [1, 10], "w": 1, "x": 11.5, "y": 2.5 }, - { "label": "}", "matrix": [1, 8], "w": 1, "x": 12.5, "y": 2.5 }, - { "label": "|", "matrix": [5, 6], "w": 1.5, "x": 13.5, "y": 2.5 }, - { "label": "Delete", "matrix": [2, 11], "w": 1, "x": 15.25, "y": 2.5 }, - { "label": "End", "matrix": [3, 14], "w": 1, "x": 16.25, "y": 2.5 }, - { "label": "PgDn", "matrix": [3, 13], "w": 1, "x": 17.25, "y": 2.5 }, - { "label": "7", "matrix": [4, 11], "w": 1, "x": 18.5, "y": 2.5 }, - { "label": "8", "matrix": [4, 12], "w": 1, "x": 19.5, "y": 2.5 }, - { "label": "9", "matrix": [4, 13], "w": 1, "x": 20.5, "y": 2.5 }, - { "h": 2, "label": "+", "matrix": [4, 14], "w": 1, "x": 21.5, "y": 2.5 }, - { "label": "Caps Lock", "matrix": [1, 3], "w": 1.5, "x": 0, "y": 3.5 }, - { "label": "A", "matrix": [5, 2], "w": 1, "x": 1.75, "y": 3.5 }, - { "label": "S", "matrix": [5, 3], "w": 1, "x": 2.75, "y": 3.5 }, - { "label": "D", "matrix": [5, 4], "w": 1, "x": 3.75, "y": 3.5 }, - { "label": "F", "matrix": [5, 5], "w": 1, "x": 4.75, "y": 3.5 }, - { "label": "G", "matrix": [0, 5], "w": 1, "x": 5.75, "y": 3.5 }, - { "label": "H", "matrix": [0, 7], "w": 1, "x": 6.75, "y": 3.5 }, - { "label": "J", "matrix": [5, 7], "w": 1, "x": 7.75, "y": 3.5 }, - { "label": "K", "matrix": [5, 8], "w": 1, "x": 8.75, "y": 3.5 }, - { "label": "L", "matrix": [5, 9], "w": 1, "x": 9.75, "y": 3.5 }, - { "label": ":", "matrix": [5, 10], "w": 1, "x": 10.75, "y": 3.5 }, - { "label": "\"", "matrix": [0, 10], "w": 1, "x": 11.75, "y": 3.5 }, - { "label": "Enter", "matrix": [6, 6], "w": 2.25, "x": 12.75, "y": 3.5 }, - { "label": "4", "matrix": [1, 11], "w": 1, "x": 18.5, "y": 3.5 }, - { "label": "5", "matrix": [1, 12], "w": 1, "x": 19.5, "y": 3.5 }, - { "label": "6", "matrix": [1, 13], "w": 1, "x": 20.5, "y": 3.5 }, - { "label": "Shift", "matrix": [1, 1], "w": 2.25, "x": 0, "y": 4.5 }, - { "label": "Z", "matrix": [6, 2], "w": 1, "x": 2.25, "y": 4.5 }, - { "label": "X", "matrix": [6, 3], "w": 1, "x": 3.25, "y": 4.5 }, - { "label": "C", "matrix": [6, 4], "w": 1, "x": 4.25, "y": 4.5 }, - { "label": "V", "matrix": [6, 5], "w": 1, "x": 5.25, "y": 4.5 }, - { "label": "B", "matrix": [7, 5], "w": 1, "x": 6.25, "y": 4.5 }, - { "label": "N", "matrix": [7, 7], "w": 1, "x": 7.25, "y": 4.5 }, - { "label": "M", "matrix": [6, 7], "w": 1, "x": 8.25, "y": 4.5 }, - { "label": "<", "matrix": [6, 8], "w": 1, "x": 9.25, "y": 4.5 }, - { "label": ">", "matrix": [6, 9], "w": 1, "x": 10.25, "y": 4.5 }, - { "label": "?", "matrix": [7, 10], "w": 1, "x": 11.25, "y": 4.5 }, - { "label": "Shift", "matrix": [6, 1], "w": 2.75, "x": 12.25, "y": 4.5 }, - { "label": "\u2191", "matrix": [0, 14], "w": 1, "x": 16.25, "y": 4.5 }, - { "label": "1", "matrix": [5, 11], "w": 1, "x": 18.5, "y": 4.5 }, - { "label": "2", "matrix": [5, 12], "w": 1, "x": 19.5, "y": 4.5 }, - { "label": "3", "matrix": [5, 13], "w": 1, "x": 20.5, "y": 4.5 }, - { "h": 2, "label": "Enter", "matrix": [5, 14], "w": 1, "x": 21.5, "y": 4.5 }, - { "label": "Ctrl", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 5.5 }, - { "label": "Alt", "matrix": [0, 15], "w": 1.5, "x": 2.5, "y": 5.5 }, - { "label": "K0C", "matrix": [7, 6], "w": 7, "x": 4, "y": 5.5 }, - { "label": "Alt", "matrix": [7, 15], "w": 1.5, "x": 11, "y": 5.5 }, - { "label": "Ctrl", "matrix": [6, 0], "w": 1.5, "x": 13.5, "y": 5.5 }, - { "label": "\u2190", "matrix": [7, 14], "w": 1, "x": 15.25, "y": 5.5 }, - { "label": "\u2193", "matrix": [7, 11], "w": 1, "x": 16.25, "y": 5.5 }, - { "label": "\u2192", "matrix": [7, 12], "w": 1, "x": 17.25, "y": 5.5 }, - { "label": "0", "matrix": [0, 12], "w": 2, "x": 18.5, "y": 5.5 }, - { "label": ".", "matrix": [0, 13], "w": 1, "x": 20.5, "y": 5.5 } + {"matrix": [0, 2], "x": 0, "y": 0}, + + {"matrix": [2, 3], "x": 2, "y": 0}, + {"matrix": [2, 4], "x": 3, "y": 0}, + {"matrix": [1, 4], "x": 4, "y": 0}, + {"matrix": [0, 4], "x": 5, "y": 0}, + + {"matrix": [0, 6], "x": 6.5, "y": 0}, + {"matrix": [0, 8], "x": 7.5, "y": 0}, + {"matrix": [1, 9], "x": 8.5, "y": 0}, + {"matrix": [2, 9], "x": 9.5, "y": 0}, + + {"matrix": [2, 6], "x": 11, "y": 0}, + {"matrix": [3, 6], "x": 12, "y": 0}, + {"matrix": [3, 11], "x": 13, "y": 0}, + {"matrix": [3, 12], "x": 14, "y": 0}, + + {"matrix": [3, 15], "x": 15.25, "y": 0}, + {"matrix": [4, 15], "x": 16.25, "y": 0}, + {"matrix": [6, 14], "x": 17.25, "y": 0}, + + {"matrix": [2, 2], "x": 0, "y": 1.5}, + {"matrix": [3, 2], "x": 1, "y": 1.5}, + {"matrix": [3, 3], "x": 2, "y": 1.5}, + {"matrix": [3, 4], "x": 3, "y": 1.5}, + {"matrix": [3, 5], "x": 4, "y": 1.5}, + {"matrix": [2, 5], "x": 5, "y": 1.5}, + {"matrix": [2, 7], "x": 6, "y": 1.5}, + {"matrix": [3, 7], "x": 7, "y": 1.5}, + {"matrix": [3, 8], "x": 8, "y": 1.5}, + {"matrix": [3, 9], "x": 9, "y": 1.5}, + {"matrix": [3, 10], "x": 10, "y": 1.5}, + {"matrix": [2, 10], "x": 11, "y": 1.5}, + {"matrix": [2, 8], "x": 12, "y": 1.5}, + {"matrix": [1, 6], "x": 13, "y": 1.5, "w": 2}, + + {"matrix": [2, 12], "x": 15.25, "y": 1.5}, + {"matrix": [2, 14], "x": 16.25, "y": 1.5}, + {"matrix": [2, 13], "x": 17.25, "y": 1.5}, + + {"matrix": [6, 11], "x": 18.5, "y": 1.5}, + {"matrix": [6, 12], "x": 19.5, "y": 1.5}, + {"matrix": [6, 13], "x": 20.5, "y": 1.5}, + {"matrix": [7, 13], "x": 21.5, "y": 1.5}, + + {"matrix": [1, 2], "x": 0, "y": 2.5, "w": 1.5}, + {"matrix": [4, 2], "x": 1.5, "y": 2.5}, + {"matrix": [4, 3], "x": 2.5, "y": 2.5}, + {"matrix": [4, 4], "x": 3.5, "y": 2.5}, + {"matrix": [4, 5], "x": 4.5, "y": 2.5}, + {"matrix": [1, 5], "x": 5.5, "y": 2.5}, + {"matrix": [1, 7], "x": 6.5, "y": 2.5}, + {"matrix": [4, 7], "x": 7.5, "y": 2.5}, + {"matrix": [4, 8], "x": 8.5, "y": 2.5}, + {"matrix": [4, 9], "x": 9.5, "y": 2.5}, + {"matrix": [4, 10], "x": 10.5, "y": 2.5}, + {"matrix": [1, 10], "x": 11.5, "y": 2.5}, + {"matrix": [1, 8], "x": 12.5, "y": 2.5}, + {"matrix": [5, 6], "x": 13.5, "y": 2.5, "w": 1.5}, + + {"matrix": [2, 11], "x": 15.25, "y": 2.5}, + {"matrix": [3, 14], "x": 16.25, "y": 2.5}, + {"matrix": [3, 13], "x": 17.25, "y": 2.5}, + + {"matrix": [4, 11], "x": 18.5, "y": 2.5}, + {"matrix": [4, 12], "x": 19.5, "y": 2.5}, + {"matrix": [4, 13], "x": 20.5, "y": 2.5}, + {"matrix": [4, 14], "x": 21.5, "y": 2.5, "h": 2}, + + {"matrix": [1, 3], "x": 0, "y": 3.5, "w": 1.5}, + {"matrix": [5, 2], "x": 1.75, "y": 3.5}, + {"matrix": [5, 3], "x": 2.75, "y": 3.5}, + {"matrix": [5, 4], "x": 3.75, "y": 3.5}, + {"matrix": [5, 5], "x": 4.75, "y": 3.5}, + {"matrix": [0, 5], "x": 5.75, "y": 3.5}, + {"matrix": [0, 7], "x": 6.75, "y": 3.5}, + {"matrix": [5, 7], "x": 7.75, "y": 3.5}, + {"matrix": [5, 8], "x": 8.75, "y": 3.5}, + {"matrix": [5, 9], "x": 9.75, "y": 3.5}, + {"matrix": [5, 10], "x": 10.75, "y": 3.5}, + {"matrix": [0, 10], "x": 11.75, "y": 3.5}, + {"matrix": [6, 6], "x": 12.75, "y": 3.5, "w": 2.25}, + + {"matrix": [1, 11], "x": 18.5, "y": 3.5}, + {"matrix": [1, 12], "x": 19.5, "y": 3.5}, + {"matrix": [1, 13], "x": 20.5, "y": 3.5}, + + {"matrix": [1, 1], "x": 0, "y": 4.5, "w": 2.25}, + {"matrix": [6, 2], "x": 2.25, "y": 4.5}, + {"matrix": [6, 3], "x": 3.25, "y": 4.5}, + {"matrix": [6, 4], "x": 4.25, "y": 4.5}, + {"matrix": [6, 5], "x": 5.25, "y": 4.5}, + {"matrix": [7, 5], "x": 6.25, "y": 4.5}, + {"matrix": [7, 7], "x": 7.25, "y": 4.5}, + {"matrix": [6, 7], "x": 8.25, "y": 4.5}, + {"matrix": [6, 8], "x": 9.25, "y": 4.5}, + {"matrix": [6, 9], "x": 10.25, "y": 4.5}, + {"matrix": [7, 10], "x": 11.25, "y": 4.5}, + {"matrix": [6, 1], "x": 12.25, "y": 4.5, "w": 2.75}, + + {"matrix": [0, 14], "x": 16.25, "y": 4.5}, + + {"matrix": [5, 11], "x": 18.5, "y": 4.5}, + {"matrix": [5, 12], "x": 19.5, "y": 4.5}, + {"matrix": [5, 13], "x": 20.5, "y": 4.5}, + {"matrix": [5, 14], "x": 21.5, "y": 4.5, "h": 2}, + + {"matrix": [2, 0], "x": 0, "y": 5.5, "w": 1.5}, + {"matrix": [0, 15], "x": 2.5, "y": 5.5, "w": 1.5}, + {"matrix": [7, 6], "x": 4, "y": 5.5, "w": 7}, + {"matrix": [7, 15], "x": 11, "y": 5.5, "w": 1.5}, + {"matrix": [6, 0], "x": 13.5, "y": 5.5, "w": 1.5}, + + {"matrix": [7, 14], "x": 15.25, "y": 5.5}, + {"matrix": [7, 11], "x": 16.25, "y": 5.5}, + {"matrix": [7, 12], "x": 17.25, "y": 5.5}, + + {"matrix": [0, 12], "x": 18.5, "y": 5.5, "w": 2}, + {"matrix": [0, 13], "x": 20.5, "y": 5.5} ] }, "LAYOUT_fullsize_iso_wkl": { "layout": [ - { "label": "Esc", "matrix": [0, 2], "w": 1, "x": 0, "y": 0 }, - { "label": "F1", "matrix": [2, 3], "w": 1, "x": 2, "y": 0 }, - { "label": "F2", "matrix": [2, 4], "w": 1, "x": 3, "y": 0 }, - { "label": "F3", "matrix": [1, 4], "w": 1, "x": 4, "y": 0 }, - { "label": "F4", "matrix": [0, 4], "w": 1, "x": 5, "y": 0 }, - { "label": "F5", "matrix": [0, 6], "w": 1, "x": 6.5, "y": 0 }, - { "label": "F6", "matrix": [0, 8], "w": 1, "x": 7.5, "y": 0 }, - { "label": "F7", "matrix": [1, 9], "w": 1, "x": 8.5, "y": 0 }, - { "label": "F8", "matrix": [2, 9], "w": 1, "x": 9.5, "y": 0 }, - { "label": "F9", "matrix": [2, 6], "w": 1, "x": 11, "y": 0 }, - { "label": "F10", "matrix": [3, 6], "w": 1, "x": 12, "y": 0 }, - { "label": "F11", "matrix": [3, 11], "w": 1, "x": 13, "y": 0 }, - { "label": "F12", "matrix": [3, 12], "w": 1, "x": 14, "y": 0 }, - { "label": "PrtSc", "matrix": [3, 15], "w": 1, "x": 15.25, "y": 0 }, - { "label": "Scroll Lock", "matrix": [4, 15], "w": 1, "x": 16.25, "y": 0 }, - { "label": "Pause", "matrix": [6, 14], "w": 1, "x": 17.25, "y": 0 }, - { "label": "~", "matrix": [2, 2], "w": 1, "x": 0, "y": 1.5 }, - { "label": "!", "matrix": [3, 2], "w": 1, "x": 1, "y": 1.5 }, - { "label": "@", "matrix": [3, 3], "w": 1, "x": 2, "y": 1.5 }, - { "label": "#", "matrix": [3, 4], "w": 1, "x": 3, "y": 1.5 }, - { "label": "$", "matrix": [3, 5], "w": 1, "x": 4, "y": 1.5 }, - { "label": "%", "matrix": [2, 5], "w": 1, "x": 5, "y": 1.5 }, - { "label": "^", "matrix": [2, 7], "w": 1, "x": 6, "y": 1.5 }, - { "label": "&", "matrix": [3, 7], "w": 1, "x": 7, "y": 1.5 }, - { "label": "*", "matrix": [3, 8], "w": 1, "x": 8, "y": 1.5 }, - { "label": "(", "matrix": [3, 9], "w": 1, "x": 9, "y": 1.5 }, - { "label": ")", "matrix": [3, 10], "w": 1, "x": 10, "y": 1.5 }, - { "label": "_", "matrix": [2, 10], "w": 1, "x": 11, "y": 1.5 }, - { "label": "+", "matrix": [2, 8], "w": 1, "x": 12, "y": 1.5 }, - { "label": "Backspace", "matrix": [1, 6], "w": 2, "x": 13, "y": 1.5 }, - { "label": "Insert", "matrix": [2, 12], "w": 1, "x": 15.25, "y": 1.5 }, - { "label": "Home", "matrix": [2, 14], "w": 1, "x": 16.25, "y": 1.5 }, - { "label": "PgUp", "matrix": [2, 13], "w": 1, "x": 17.25, "y": 1.5 }, - { "label": "Num Lock", "matrix": [6, 11], "w": 1, "x": 18.5, "y": 1.5 }, - { "label": "/", "matrix": [6, 12], "w": 1, "x": 19.5, "y": 1.5 }, - { "label": "*", "matrix": [6, 13], "w": 1, "x": 20.5, "y": 1.5 }, - { "label": "-", "matrix": [7, 13], "w": 1, "x": 21.5, "y": 1.5 }, - { "label": "Tab", "matrix": [1, 2], "w": 1.5, "x": 0, "y": 2.5 }, - { "label": "Q", "matrix": [4, 2], "w": 1, "x": 1.5, "y": 2.5 }, - { "label": "W", "matrix": [4, 3], "w": 1, "x": 2.5, "y": 2.5 }, - { "label": "E", "matrix": [4, 4], "w": 1, "x": 3.5, "y": 2.5 }, - { "label": "R", "matrix": [4, 5], "w": 1, "x": 4.5, "y": 2.5 }, - { "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 2.5 }, - { "label": "Y", "matrix": [1, 7], "w": 1, "x": 6.5, "y": 2.5 }, - { "label": "U", "matrix": [4, 7], "w": 1, "x": 7.5, "y": 2.5 }, - { "label": "I", "matrix": [4, 8], "w": 1, "x": 8.5, "y": 2.5 }, - { "label": "O", "matrix": [4, 9], "w": 1, "x": 9.5, "y": 2.5 }, - { "label": "P", "matrix": [4, 10], "w": 1, "x": 10.5, "y": 2.5 }, - { "label": "{", "matrix": [1, 10], "w": 1, "x": 11.5, "y": 2.5 }, - { "label": "}", "matrix": [1, 8], "w": 1, "x": 12.5, "y": 2.5 }, - { "label": "Delete", "matrix": [2, 11], "w": 1, "x": 15.25, "y": 2.5 }, - { "label": "End", "matrix": [3, 14], "w": 1, "x": 16.25, "y": 2.5 }, - { "label": "PgDn", "matrix": [3, 13], "w": 1, "x": 17.25, "y": 2.5 }, - { "label": "7", "matrix": [4, 11], "w": 1, "x": 18.5, "y": 2.5 }, - { "label": "8", "matrix": [4, 12], "w": 1, "x": 19.5, "y": 2.5 }, - { "label": "9", "matrix": [4, 13], "w": 1, "x": 20.5, "y": 2.5 }, - { "h": 2, "label": "+", "matrix": [4, 14], "w": 1, "x": 21.5, "y": 2.5 }, - { "label": "Caps Lock", "matrix": [1, 3], "w": 1.5, "x": 0, "y": 3.5 }, - { "label": "A", "matrix": [5, 2], "w": 1, "x": 1.75, "y": 3.5 }, - { "label": "S", "matrix": [5, 3], "w": 1, "x": 2.75, "y": 3.5 }, - { "label": "D", "matrix": [5, 4], "w": 1, "x": 3.75, "y": 3.5 }, - { "label": "F", "matrix": [5, 5], "w": 1, "x": 4.75, "y": 3.5 }, - { "label": "G", "matrix": [0, 5], "w": 1, "x": 5.75, "y": 3.5 }, - { "label": "H", "matrix": [0, 7], "w": 1, "x": 6.75, "y": 3.5 }, - { "label": "J", "matrix": [5, 7], "w": 1, "x": 7.75, "y": 3.5 }, - { "label": "K", "matrix": [5, 8], "w": 1, "x": 8.75, "y": 3.5 }, - { "label": "L", "matrix": [5, 9], "w": 1, "x": 9.75, "y": 3.5 }, - { "label": ":", "matrix": [5, 10], "w": 1, "x": 10.75, "y": 3.5 }, - { "label": "\"", "matrix": [0, 10], "w": 1, "x": 11.75, "y": 3.5 }, - { "label": "~", "matrix": [6, 10], "w": 1, "x": 12.75, "y": 3.5 }, - { "h": 2, "label": "Enter", "matrix": [6, 6], "w": 1.25, "x": 13.75, "y": 2.5 }, - { "label": "4", "matrix": [1, 11], "w": 1, "x": 18.5, "y": 3.5 }, - { "label": "5", "matrix": [1, 12], "w": 1, "x": 19.5, "y": 3.5 }, - { "label": "6", "matrix": [1, 13], "w": 1, "x": 20.5, "y": 3.5 }, - { "label": "Shift", "matrix": [1, 1], "w": 1.25, "x": 0, "y": 4.5 }, - { "label": "|", "matrix": [0, 3], "w": 1, "x": 1.25, "y": 4.5 }, - { "label": "Z", "matrix": [6, 2], "w": 1, "x": 2.25, "y": 4.5 }, - { "label": "X", "matrix": [6, 3], "w": 1, "x": 3.25, "y": 4.5 }, - { "label": "C", "matrix": [6, 4], "w": 1, "x": 4.25, "y": 4.5 }, - { "label": "V", "matrix": [6, 5], "w": 1, "x": 5.25, "y": 4.5 }, - { "label": "B", "matrix": [7, 5], "w": 1, "x": 6.25, "y": 4.5 }, - { "label": "N", "matrix": [7, 7], "w": 1, "x": 7.25, "y": 4.5 }, - { "label": "M", "matrix": [6, 7], "w": 1, "x": 8.25, "y": 4.5 }, - { "label": "<", "matrix": [6, 8], "w": 1, "x": 9.25, "y": 4.5 }, - { "label": ">", "matrix": [6, 9], "w": 1, "x": 10.25, "y": 4.5 }, - { "label": "?", "matrix": [7, 10], "w": 1, "x": 11.25, "y": 4.5 }, - { "label": "Shift", "matrix": [6, 1], "w": 2.75, "x": 12.25, "y": 4.5 }, - { "label": "\u2191", "matrix": [0, 14], "w": 1, "x": 16.25, "y": 4.5 }, - { "label": "1", "matrix": [5, 11], "w": 1, "x": 18.5, "y": 4.5 }, - { "label": "2", "matrix": [5, 12], "w": 1, "x": 19.5, "y": 4.5 }, - { "label": "3", "matrix": [5, 13], "w": 1, "x": 20.5, "y": 4.5 }, - { "h": 2, "label": "Enter", "matrix": [5, 14], "w": 1, "x": 21.5, "y": 4.5 }, - { "label": "Ctrl", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 5.5 }, - { "label": "Alt", "matrix": [0, 15], "w": 1.5, "x": 2.5, "y": 5.5 }, - { "label": "K0C", "matrix": [7, 6], "w": 7, "x": 4, "y": 5.5 }, - { "label": "Alt", "matrix": [7, 15], "w": 1.5, "x": 11, "y": 5.5 }, - { "label": "Ctrl", "matrix": [6, 0], "w": 1.5, "x": 13.5, "y": 5.5 }, - { "label": "\u2190", "matrix": [7, 14], "w": 1, "x": 15.25, "y": 5.5 }, - { "label": "\u2193", "matrix": [7, 11], "w": 1, "x": 16.25, "y": 5.5 }, - { "label": "\u2192", "matrix": [7, 12], "w": 1, "x": 17.25, "y": 5.5 }, - { "label": "0", "matrix": [0, 12], "w": 2, "x": 18.5, "y": 5.5 }, - { "label": ".", "matrix": [0, 13], "w": 1, "x": 20.5, "y": 5.5 } + {"matrix": [0, 2], "x": 0, "y": 0}, + + {"matrix": [2, 3], "x": 2, "y": 0}, + {"matrix": [2, 4], "x": 3, "y": 0}, + {"matrix": [1, 4], "x": 4, "y": 0}, + {"matrix": [0, 4], "x": 5, "y": 0}, + + {"matrix": [0, 6], "x": 6.5, "y": 0}, + {"matrix": [0, 8], "x": 7.5, "y": 0}, + {"matrix": [1, 9], "x": 8.5, "y": 0}, + {"matrix": [2, 9], "x": 9.5, "y": 0}, + + {"matrix": [2, 6], "x": 11, "y": 0}, + {"matrix": [3, 6], "x": 12, "y": 0}, + {"matrix": [3, 11], "x": 13, "y": 0}, + {"matrix": [3, 12], "x": 14, "y": 0}, + + {"matrix": [3, 15], "x": 15.25, "y": 0}, + {"matrix": [4, 15], "x": 16.25, "y": 0}, + {"matrix": [6, 14], "x": 17.25, "y": 0}, + + {"matrix": [2, 2], "x": 0, "y": 1.5}, + {"matrix": [3, 2], "x": 1, "y": 1.5}, + {"matrix": [3, 3], "x": 2, "y": 1.5}, + {"matrix": [3, 4], "x": 3, "y": 1.5}, + {"matrix": [3, 5], "x": 4, "y": 1.5}, + {"matrix": [2, 5], "x": 5, "y": 1.5}, + {"matrix": [2, 7], "x": 6, "y": 1.5}, + {"matrix": [3, 7], "x": 7, "y": 1.5}, + {"matrix": [3, 8], "x": 8, "y": 1.5}, + {"matrix": [3, 9], "x": 9, "y": 1.5}, + {"matrix": [3, 10], "x": 10, "y": 1.5}, + {"matrix": [2, 10], "x": 11, "y": 1.5}, + {"matrix": [2, 8], "x": 12, "y": 1.5}, + {"matrix": [1, 6], "x": 13, "y": 1.5, "w": 2}, + + {"matrix": [2, 12], "x": 15.25, "y": 1.5}, + {"matrix": [2, 14], "x": 16.25, "y": 1.5}, + {"matrix": [2, 13], "x": 17.25, "y": 1.5}, + + {"matrix": [6, 11], "x": 18.5, "y": 1.5}, + {"matrix": [6, 12], "x": 19.5, "y": 1.5}, + {"matrix": [6, 13], "x": 20.5, "y": 1.5}, + {"matrix": [7, 13], "x": 21.5, "y": 1.5}, + + {"matrix": [1, 2], "x": 0, "y": 2.5, "w": 1.5}, + {"matrix": [4, 2], "x": 1.5, "y": 2.5}, + {"matrix": [4, 3], "x": 2.5, "y": 2.5}, + {"matrix": [4, 4], "x": 3.5, "y": 2.5}, + {"matrix": [4, 5], "x": 4.5, "y": 2.5}, + {"matrix": [1, 5], "x": 5.5, "y": 2.5}, + {"matrix": [1, 7], "x": 6.5, "y": 2.5}, + {"matrix": [4, 7], "x": 7.5, "y": 2.5}, + {"matrix": [4, 8], "x": 8.5, "y": 2.5}, + {"matrix": [4, 9], "x": 9.5, "y": 2.5}, + {"matrix": [4, 10], "x": 10.5, "y": 2.5}, + {"matrix": [1, 10], "x": 11.5, "y": 2.5}, + {"matrix": [1, 8], "x": 12.5, "y": 2.5}, + + {"matrix": [2, 11], "x": 15.25, "y": 2.5}, + {"matrix": [3, 14], "x": 16.25, "y": 2.5}, + {"matrix": [3, 13], "x": 17.25, "y": 2.5}, + + {"matrix": [4, 11], "x": 18.5, "y": 2.5}, + {"matrix": [4, 12], "x": 19.5, "y": 2.5}, + {"matrix": [4, 13], "x": 20.5, "y": 2.5}, + {"matrix": [4, 14], "x": 21.5, "y": 2.5, "h": 2}, + + {"matrix": [1, 3], "x": 0, "y": 3.5, "w": 1.5}, + {"matrix": [5, 2], "x": 1.75, "y": 3.5}, + {"matrix": [5, 3], "x": 2.75, "y": 3.5}, + {"matrix": [5, 4], "x": 3.75, "y": 3.5}, + {"matrix": [5, 5], "x": 4.75, "y": 3.5}, + {"matrix": [0, 5], "x": 5.75, "y": 3.5}, + {"matrix": [0, 7], "x": 6.75, "y": 3.5}, + {"matrix": [5, 7], "x": 7.75, "y": 3.5}, + {"matrix": [5, 8], "x": 8.75, "y": 3.5}, + {"matrix": [5, 9], "x": 9.75, "y": 3.5}, + {"matrix": [5, 10], "x": 10.75, "y": 3.5}, + {"matrix": [0, 10], "x": 11.75, "y": 3.5}, + {"matrix": [6, 10], "x": 12.75, "y": 3.5}, + {"matrix": [6, 6], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2}, + + {"matrix": [1, 11], "x": 18.5, "y": 3.5}, + {"matrix": [1, 12], "x": 19.5, "y": 3.5}, + {"matrix": [1, 13], "x": 20.5, "y": 3.5}, + + {"matrix": [1, 1], "x": 0, "y": 4.5, "w": 1.25}, + {"matrix": [0, 3], "x": 1.25, "y": 4.5}, + {"matrix": [6, 2], "x": 2.25, "y": 4.5}, + {"matrix": [6, 3], "x": 3.25, "y": 4.5}, + {"matrix": [6, 4], "x": 4.25, "y": 4.5}, + {"matrix": [6, 5], "x": 5.25, "y": 4.5}, + {"matrix": [7, 5], "x": 6.25, "y": 4.5}, + {"matrix": [7, 7], "x": 7.25, "y": 4.5}, + {"matrix": [6, 7], "x": 8.25, "y": 4.5}, + {"matrix": [6, 8], "x": 9.25, "y": 4.5}, + {"matrix": [6, 9], "x": 10.25, "y": 4.5}, + {"matrix": [7, 10], "x": 11.25, "y": 4.5}, + {"matrix": [6, 1], "x": 12.25, "y": 4.5, "w": 2.75}, + + {"matrix": [0, 14], "x": 16.25, "y": 4.5}, + + {"matrix": [5, 11], "x": 18.5, "y": 4.5}, + {"matrix": [5, 12], "x": 19.5, "y": 4.5}, + {"matrix": [5, 13], "x": 20.5, "y": 4.5}, + {"matrix": [5, 14], "x": 21.5, "y": 4.5, "h": 2}, + + {"matrix": [2, 0], "x": 0, "y": 5.5, "w": 1.5}, + {"matrix": [0, 15], "x": 2.5, "y": 5.5, "w": 1.5}, + {"matrix": [7, 6], "x": 4, "y": 5.5, "w": 7}, + {"matrix": [7, 15], "x": 11, "y": 5.5, "w": 1.5}, + {"matrix": [6, 0], "x": 13.5, "y": 5.5, "w": 1.5}, + + {"matrix": [7, 14], "x": 15.25, "y": 5.5}, + {"matrix": [7, 11], "x": 16.25, "y": 5.5}, + {"matrix": [7, 12], "x": 17.25, "y": 5.5}, + + {"matrix": [0, 12], "x": 18.5, "y": 5.5, "w": 2}, + {"matrix": [0, 13], "x": 20.5, "y": 5.5} ] } } From 9770828cc0983f00f6a0344bfe66e70c144424f4 Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome@percipient.ai> Date: Thu, 4 May 2023 18:39:38 -0700 Subject: [PATCH 09/16] Update keyboards/modelh/info.json Co-authored-by: Ryan <fauxpark@gmail.com> --- keyboards/modelh/info.json | 1 - 1 file changed, 1 deletion(-) diff --git a/keyboards/modelh/info.json b/keyboards/modelh/info.json index 9089c7b9bd07..4f18a0211dfa 100644 --- a/keyboards/modelh/info.json +++ b/keyboards/modelh/info.json @@ -20,7 +20,6 @@ }, "matrix_pins": { "cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B1", "B0", "A7", "A6", "A5", "A4", "A3"], - "ghost": false, "rows": ["B6", "B5", "B4", "A15", "B3", "A0", "A2", "A1"] }, "processor": "STM32F103", From 7785f035a2ba8d09345b49183c01e68de869b792 Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome.berclaz@a3.epfl.ch> Date: Sat, 24 Jun 2023 19:32:33 -0700 Subject: [PATCH 10/16] fixed lock lights behavior --- keyboards/modelh/info.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/keyboards/modelh/info.json b/keyboards/modelh/info.json index 4f18a0211dfa..cceb12a31ccd 100644 --- a/keyboards/modelh/info.json +++ b/keyboards/modelh/info.json @@ -11,12 +11,13 @@ "extrakey": true, "mousekey": false, "nkro": false, - "sleep_led": true + "sleep_led": false }, "indicators": { "caps_lock": "B8", - "num_lock": "B9", - "scroll_lock": "B7" + "num_lock": "B7", + "scroll_lock": "B9", + "on_state": 0 }, "matrix_pins": { "cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B1", "B0", "A7", "A6", "A5", "A4", "A3"], From b4ecc706586feafde1cdddad433cd836b6ee82bd Mon Sep 17 00:00:00 2001 From: hcbille <32437363+hcbille@users.noreply.github.com> Date: Tue, 4 Jul 2023 19:15:17 +0200 Subject: [PATCH 11/16] Changed the hosting to imgur --- keyboards/modelh/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/modelh/readme.md b/keyboards/modelh/readme.md index 7ae9df4d01b4..8cd68c111a8b 100644 --- a/keyboards/modelh/readme.md +++ b/keyboards/modelh/readme.md @@ -1,6 +1,6 @@ # Model H - A USB capable PCB for the IBM Model M keyboard - + This conversion kit allows you to replace your IBM Model M's original internal controller board with a modern USB board. This aims to match the footprint of the original controller and plugs into the original keyboard matrix, but exposes a USB port through the original SDL connector. From 095c73a80c5132129b59e7a1dbefde205aa02e46 Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome.berclaz@a3.epfl.ch> Date: Wed, 5 Jul 2023 20:12:16 -0700 Subject: [PATCH 12/16] addressed reviewer's comments --- keyboards/modelh/info.json | 3 +-- keyboards/modelh/mcuconf.h | 25 ------------------------- 2 files changed, 1 insertion(+), 27 deletions(-) delete mode 100644 keyboards/modelh/mcuconf.h diff --git a/keyboards/modelh/info.json b/keyboards/modelh/info.json index cceb12a31ccd..6d55d5c6bdda 100644 --- a/keyboards/modelh/info.json +++ b/keyboards/modelh/info.json @@ -10,8 +10,7 @@ "console": false, "extrakey": true, "mousekey": false, - "nkro": false, - "sleep_led": false + "nkro": false }, "indicators": { "caps_lock": "B8", diff --git a/keyboards/modelh/mcuconf.h b/keyboards/modelh/mcuconf.h deleted file mode 100644 index 7d3d6e143a44..000000000000 --- a/keyboards/modelh/mcuconf.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright 2020 QMK - * - * 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/>. - */ - -#pragma once - -#include_next <mcuconf.h> - -#undef STM32_PWM_USE_TIM2 -#undef STM32_SPI_USE_SPI2 - -#define STM32_PWM_USE_TIM2 TRUE -#define STM32_SPI_USE_SPI2 FALSE From 388637d6706ee36133482c589b1d5e1029d0f424 Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome.berclaz@a3.epfl.ch> Date: Wed, 5 Jul 2023 20:17:39 -0700 Subject: [PATCH 13/16] adding back mcuconf.h --- keyboards/modelh/mcuconf.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 keyboards/modelh/mcuconf.h diff --git a/keyboards/modelh/mcuconf.h b/keyboards/modelh/mcuconf.h new file mode 100644 index 000000000000..7d3d6e143a44 --- /dev/null +++ b/keyboards/modelh/mcuconf.h @@ -0,0 +1,25 @@ +/* Copyright 2020 QMK + * + * 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/>. + */ + +#pragma once + +#include_next <mcuconf.h> + +#undef STM32_PWM_USE_TIM2 +#undef STM32_SPI_USE_SPI2 + +#define STM32_PWM_USE_TIM2 TRUE +#define STM32_SPI_USE_SPI2 FALSE From b7a40579b4a5725aadd9413e0106ec721dadc54d Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome.berclaz@a3.epfl.ch> Date: Wed, 5 Jul 2023 20:20:33 -0700 Subject: [PATCH 14/16] removed entry from rules.mk --- keyboards/modelh/rules.mk | 2 -- 1 file changed, 2 deletions(-) diff --git a/keyboards/modelh/rules.mk b/keyboards/modelh/rules.mk index a92b0993283e..e69de29bb2d1 100644 --- a/keyboards/modelh/rules.mk +++ b/keyboards/modelh/rules.mk @@ -1,2 +0,0 @@ -# Enter lower-power sleep mode when on the ChibiOS idle thread -OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE From 5705bb42653c1f076712db48779f2a696ec403e3 Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome.berclaz@a3.epfl.ch> Date: Wed, 5 Jul 2023 20:27:28 -0700 Subject: [PATCH 15/16] removed mcuconf.h --- keyboards/modelh/halconf.h | 1 - keyboards/modelh/mcuconf.h | 25 ------------------------- 2 files changed, 26 deletions(-) delete mode 100644 keyboards/modelh/mcuconf.h diff --git a/keyboards/modelh/halconf.h b/keyboards/modelh/halconf.h index 8e3ad48ffc6f..ba5217ea6fca 100644 --- a/keyboards/modelh/halconf.h +++ b/keyboards/modelh/halconf.h @@ -17,7 +17,6 @@ #pragma once -#define HAL_USE_PWM TRUE #define SERIAL_BUFFERS_SIZE 16 #include_next <halconf.h> diff --git a/keyboards/modelh/mcuconf.h b/keyboards/modelh/mcuconf.h deleted file mode 100644 index 7d3d6e143a44..000000000000 --- a/keyboards/modelh/mcuconf.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright 2020 QMK - * - * 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/>. - */ - -#pragma once - -#include_next <mcuconf.h> - -#undef STM32_PWM_USE_TIM2 -#undef STM32_SPI_USE_SPI2 - -#define STM32_PWM_USE_TIM2 TRUE -#define STM32_SPI_USE_SPI2 FALSE From 0705f9aad00b2d4208485739ef7877c86cc55273 Mon Sep 17 00:00:00 2001 From: Jerome Berclaz <jerome.berclaz@a3.epfl.ch> Date: Wed, 5 Jul 2023 20:33:06 -0700 Subject: [PATCH 16/16] removed chibios config files --- keyboards/modelh/chconf.h | 31 ------------------------------- keyboards/modelh/halconf.h | 22 ---------------------- 2 files changed, 53 deletions(-) delete mode 100644 keyboards/modelh/chconf.h delete mode 100644 keyboards/modelh/halconf.h diff --git a/keyboards/modelh/chconf.h b/keyboards/modelh/chconf.h deleted file mode 100644 index 413fb8d69cfd..000000000000 --- a/keyboards/modelh/chconf.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright 2020 QMK - * - * 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/>. - */ - -#pragma once - -#define CH_CFG_ST_TIMEDELTA 0 -#define CH_CFG_USE_TM TRUE -#define CH_CFG_USE_REGISTRY TRUE -#define CH_CFG_USE_WAITEXIT TRUE -#define CH_CFG_USE_CONDVARS TRUE -#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE -#define CH_CFG_USE_MESSAGES TRUE -#define CH_CFG_USE_MAILBOXES TRUE -#define CH_CFG_USE_HEAP TRUE -#define CH_CFG_USE_OBJ_CACHES TRUE -#define CH_CFG_USE_DELEGATES TRUE - -#include_next <chconf.h> diff --git a/keyboards/modelh/halconf.h b/keyboards/modelh/halconf.h deleted file mode 100644 index ba5217ea6fca..000000000000 --- a/keyboards/modelh/halconf.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2020 QMK - * - * 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/>. - */ - -#pragma once - - -#define SERIAL_BUFFERS_SIZE 16 - -#include_next <halconf.h>