diff --git a/.gitignore b/.gitignore index 800a4e2c095..3e235668e40 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,7 @@ compile_commands.json .clangd/ .cache/ + +# GCC +avr_toolchain/ +avr_toolchain_build/ diff --git a/README.md b/README.md index db51aa5ba4f..f6b50607277 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,27 @@ # My QMK keyboard layout -Based on Miryoku Layout +This is a QWERTY Miryoku-inspired layout optimized for ergonomics. + +It's a Split 3x6_3 with the outer columns dedicated to Window management shortcuts. + +It features: + +- Predictive Tap Hold: Faster tap/hold decisions +- Home row mods +- Layer-tap keys: Hold thumb keys to access layers, tap for the base key +- Raw HID: Layer state communication to a companion app + +Remember: - Don’t connect or disconnect the TRRS cable when the keyboard is powered. Always disconnect the USB cable first. -- Flash the firmware on both Raspberry Pi Picos. -- Enter the bootloader mode by holding down the BOOTSEL button while reconnecting the board into USB port. +- Flash the firmware on both sides. -https://github.com/beekeeb/piantor +![Base Layout](./data/layers/miryoku-kle-base.png) -https://github.com/qmk/qmk_firmware/tree/master/keyboards/beekeeb/piantor +## Keyboards + +- [ Piantor ](./keyboards/beekeeb/piantor/readme.md) +- [ Corne ](./keyboards/crkbd/rev1/readme.md) ## Keyboard Layers App companion @@ -16,49 +29,80 @@ Display the selected keyboard layer layout on screen to assist your to memorize It allows you to display the layout in a remote screen, so you can use a tablet or similar to save space on your main screen. -Details here: https://github.com/maatthc/miryoku_qmk_app +Details here: https://github.com/maatthc/keyboard_layers_app_companion ## Compile and Flash ### Install and setup - Install QMK: -`python3 -m pip install qmk` +``` +python3 -m pip install qmk +``` - Initialize the sub-modules: -`git submodule update --init --recursive` +``` +git submodule update --init --recursive +``` - Set this folder as an userspace: -`qmk config user.overlay_dir="$(realpath qmk_userspace)"` +``` +qmk config user.overlay_dir="$(realpath qmk_userspace)" +``` - Set up QMK: -`cd ..; qmk setup` +``` +cd ..; qmk setup +``` + +#### Piantor +``` +export KEYBOARD="beekeeb/piantor" +``` +#### Corne -### Install old GCC 8.3.0 -Reduces size considerably (~1.5k): +``` +export KEYBOARD="crkbd/rev1" +``` -`./install_avr_8.3.0.sh` -export PATH=${HOME}/avr_toolchain/bin:$PATH +##### Compile with GCC v8.3.0 +Generates a firmware considerably smaller (~1.5k): + +``` +./install_avr_8.3.0.sh +export PATH=${PWD}/avr_toolchain/bin:$PATH +``` ### Compile -`qmk compile -kb beekeeb/piantor -km maat` +``` +qmk compile -kb $KEYBOARD -km maat +``` ### Flash -`qmk flash -kb beekeeb/piantor -km maat` +``` +qmk flash -kb $KEYBOARD -km maat +``` -### Generates the clang compile_commands.json -`qmk compile --compiledb -kb crkbd/rev1 -km maat` +### Generates the Clang compile_commands.json +``` +qmk compile --compiledb -kb $KEYBOARD -km maat +``` ### Check debug logs -`qmk console` +``` +qmk console +``` ### info -`qmk info -kb beekeeb/piantor -km maat` +``` +qmk info -kb $KEYBOARD -km maat +``` ## Configuration -- users/maat/ -- keyboards/beekeeb/piantor/keymaps/maat/ +- ./users/maat/ +- ./keyboards/beekeeb/piantor/keymaps/maat/ +- ./keyboards/crkbd/rev1/keymaps/maat/ ### Typing Test @@ -67,21 +111,23 @@ https://config.qmk.fm/#/test ### Symbols that correspond to keycodes available in QMK. https://docs.qmk.fm/keycodes -## Generated Layout/Layers images +## All Layers + +Definitions (.json) files at: ./data/layers/ -Json files and images at: ./data/layers/ +Images generated with [KLE NG](https://editor.keyboard-tools.xyz/) -- ![Base](./data/layers/miryoku-kle-base.png) +![Base](./data/layers/miryoku-kle-base.png) -- ![Media](./data/layers/miryoku-kle-media.png) +![Media](./data/layers/miryoku-kle-media.png) -- ![Nav](./data/layers/miryoku-kle-nav.png) +![Nav](./data/layers/miryoku-kle-nav.png) -- ![Mouse](./data/layers/miryoku-kle-mouse.png) +![Mouse](./data/layers/miryoku-kle-mouse.png) -- ![Symbols](./data/layers/miryoku-kle-sym.png) +![Symbols](./data/layers/miryoku-kle-sym.png) -- ![Numbers](./data/layers/miryoku-kle-num.png) +![Numbers](./data/layers/miryoku-kle-num.png) -- ![Fun](./data/layers/miryoku-kle-fun.png) +![Functions](./data/layers/miryoku-kle-fun.png) diff --git a/install_avr_8.3.0.sh b/install_avr_8.3.0.sh new file mode 100755 index 00000000000..02baeef3af5 --- /dev/null +++ b/install_avr_8.3.0.sh @@ -0,0 +1,327 @@ +#!/bin/bash +# Install AVR GCC 8.3.0 toolchain + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PREFIX="${SCRIPT_DIR}/avr_toolchain" +BUILD_DIR="${SCRIPT_DIR}/avr_toolchain_build" +BINUTILS_VERSION="2.32" +GCC_VERSION="8.3.0" +AVR_LIBC_VERSION="2.0.0" + +BINUTILS_URL="https://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.bz2" +GCC_URL="https://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.gz" +AVR_LIBC_URL="https://download.savannah.gnu.org/releases/avr-libc/avr-libc-${AVR_LIBC_VERSION}.tar.bz2" + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +log_info() { + echo -e "${GREEN}[INFO]${NC} $*" +} + +log_warn() { + echo -e "${YELLOW}[WARN]${NC} $*" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $*" >&2 +} + +command_exists() { + command -v "$1" >/dev/null 2>&1 +} + +check_dependencies() { + log_info "Checking dependencies..." + local missing_deps=() + + for dep in wget tar make gcc g++ bzip2; do + if ! command_exists "$dep"; then + missing_deps+=("$dep") + fi + done + + if [ ${#missing_deps[@]} -ne 0 ]; then + log_error "Missing required dependencies: ${missing_deps[*]}" + log_error "Please install them using your package manager." + exit 1 + fi + + log_info "All dependencies found." +} + +check_installed() { + if [ -f "${PREFIX}/bin/avr-gcc" ] && command_exists "${PREFIX}/bin/avr-gcc"; then + local version + version=$("${PREFIX}/bin/avr-gcc" -dumpversion 2>/dev/null || echo "") + if [ "$version" = "$GCC_VERSION" ]; then + log_info "AVR GCC ${GCC_VERSION} is already installed at ${PREFIX}" + log_info "To reinstall, remove ${PREFIX} and ${BUILD_DIR} directories" + exit 0 + fi + fi +} + +cleanup() { + local exit_code=$? + if [ $exit_code -ne 0 ]; then + log_error "Script failed. Build artifacts remain in ${BUILD_DIR}" + log_warn "To retry, remove ${BUILD_DIR} and run again" + log_warn "The downloaded files will be preserved" + else + if [ -d "$BUILD_DIR" ]; then + log_info "Cleaning up build directory ${BUILD_DIR}..." + rm -rf "$BUILD_DIR" + log_info "Build directory cleaned up successfully." + fi + fi +} +trap cleanup EXIT + +download_and_extract() { + local url=$1 + local output_file=$2 + local extract_cmd=$3 + + log_info "Downloading $(basename "$url")..." + if [ -f "$output_file" ]; then + log_warn "File already exists: $output_file (skipping download)" + else + wget --progress=bar:force:noscroll -O "$output_file" "$url" || { + log_error "Failed to download $url" + exit 1 + } + fi + + log_info "Extracting $(basename "$output_file")..." + $extract_cmd "$output_file" || { + log_error "Failed to extract $output_file" + exit 1 + } +} + +build_binutils() { + log_info "Building binutils ${BINUTILS_VERSION}..." + cd "${BUILD_DIR}/binutils-${BINUTILS_VERSION}" + + mkdir -p obj-avr + cd obj-avr + + log_info "Configuring binutils..." + ../configure --prefix="$PREFIX" --target=avr --disable-nls || { + log_error "binutils configure failed" + exit 1 + } + + log_info "Building binutils (this may take a while)..." + make -j"$(nproc)" || { + log_error "binutils build failed" + exit 1 + } + + log_info "Installing binutils..." + make install || { + log_error "binutils install failed" + exit 1 + } + + cd "${BUILD_DIR}" +} + +download_gcc_prerequisites() { + log_info "Downloading GCC prerequisites..." + cd "${BUILD_DIR}/gcc-${GCC_VERSION}" + + # GCC 8.3.0 prerequisites (using HTTPS instead of FTP) + local gmp_version="6.1.0" + local mpfr_version="3.1.4" + local mpc_version="1.0.3" + local isl_version="0.18" + + # URLs using HTTPS mirrors (avoiding FTP) + local gmp_url="https://gmplib.org/download/gmp/gmp-${gmp_version}.tar.bz2" + local mpfr_url="https://www.mpfr.org/mpfr-${mpfr_version}/mpfr-${mpfr_version}.tar.bz2" + local mpc_url="https://ftp.gnu.org/gnu/mpc/mpc-${mpc_version}.tar.gz" + # ISL from GNU mirror (infrastructure directory is available via HTTPS) + local isl_url="https://gcc.gnu.org/pub/gcc/infrastructure/isl-${isl_version}.tar.bz2" + + # Alternative URLs if primary fails + local gmp_alt="https://ftp.gnu.org/gnu/gmp/gmp-${gmp_version}.tar.bz2" + local mpfr_alt="https://ftp.gnu.org/gnu/mpfr/mpfr-${mpfr_version}.tar.bz2" + local isl_alt="https://libisl.sourceforge.io/isl-${isl_version}.tar.bz2" + + download_prereq() { + local url=$1 + local alt_url=$2 + local filename=$3 + local linkname=$4 + + if [ -e "$linkname" ]; then + log_warn "Prerequisite $linkname already exists, skipping..." + return 0 + fi + + log_info "Downloading $filename..." + if ! wget --progress=bar:force:noscroll -O "$filename" "$url" 2>/dev/null; then + if [ -n "$alt_url" ]; then + log_warn "Primary URL failed, trying alternative..." + if ! wget --progress=bar:force:noscroll -O "$filename" "$alt_url" 2>/dev/null; then + log_error "Failed to download $filename" + return 1 + fi + else + log_error "Failed to download $filename" + return 1 + fi + fi + + log_info "Extracting $filename..." + local extract_cmd + case "$filename" in + *.tar.bz2) extract_cmd="tar xjf" ;; + *.tar.gz) extract_cmd="tar xzf" ;; + *) log_error "Unknown archive format: $filename"; return 1 ;; + esac + + if ! $extract_cmd "$filename"; then + log_error "Failed to extract $filename" + return 1 + fi + + local package="${filename%.tar*}" + log_info "Creating symlink $linkname -> $package" + ln -sf "$package" "$linkname" || { + log_error "Failed to create symlink $linkname" + return 1 + } + } + + # Download and link prerequisites + download_prereq "$gmp_url" "$gmp_alt" "gmp-${gmp_version}.tar.bz2" "gmp" || exit 1 + download_prereq "$mpfr_url" "$mpfr_alt" "mpfr-${mpfr_version}.tar.bz2" "mpfr" || exit 1 + download_prereq "$mpc_url" "" "mpc-${mpc_version}.tar.gz" "mpc" || exit 1 + download_prereq "$isl_url" "$isl_alt" "isl-${isl_version}.tar.bz2" "isl" || exit 1 + + log_info "All GCC prerequisites downloaded successfully." +} + +build_gcc() { + log_info "Building GCC ${GCC_VERSION}..." + cd "${BUILD_DIR}/gcc-${GCC_VERSION}" + + download_gcc_prerequisites + + mkdir -p obj-avr + cd obj-avr + + log_info "Configuring GCC..." + ../configure \ + --prefix="$PREFIX" \ + --target=avr \ + --enable-languages=c,c++,lto \ + --disable-nls \ + --disable-libssp \ + --with-dwarf2 || { + log_error "GCC configure failed" + exit 1 + } + + log_info "Building GCC (this will take a very long time)..." + make -j"$(nproc)" || { + log_error "GCC build failed" + exit 1 + } + + log_info "Installing GCC..." + make install || { + log_error "GCC install failed" + exit 1 + } + + cd "${BUILD_DIR}" +} + +build_avr_libc() { + log_info "Building avr-libc ${AVR_LIBC_VERSION}..." + cd "${BUILD_DIR}/avr-libc-${AVR_LIBC_VERSION}" + + mkdir -p obj-avr + cd obj-avr + + log_info "Configuring avr-libc..." + ../configure \ + --prefix="$PREFIX" \ + --build="$(../config.guess)" \ + --host=avr \ + --enable-debug-info=dwarf-2 || { + log_error "avr-libc configure failed" + exit 1 + } + + log_info "Building avr-libc..." + make -j"$(nproc)" || { + log_error "avr-libc build failed" + exit 1 + } + + log_info "Installing avr-libc..." + make install || { + log_error "avr-libc install failed" + exit 1 + } + + cd "${BUILD_DIR}" +} + +verify_installation() { + log_info "Verifying installation..." + export PATH="${PREFIX}/bin:${PATH}" + + if ! command_exists "${PREFIX}/bin/avr-gcc"; then + log_error "avr-gcc not found in ${PREFIX}/bin" + exit 1 + fi + + local version + version=$("${PREFIX}/bin/avr-gcc" -dumpversion 2>/dev/null || echo "") + if [ "$version" != "$GCC_VERSION" ]; then + log_error "Version mismatch: expected ${GCC_VERSION}, got ${version}" + exit 1 + fi + + log_info "AVR GCC version: $version" + "${PREFIX}/bin/avr-gcc" -v + + log_info "" + log_info "${GREEN}Installation completed successfully!${NC}" + log_info "Toolchain installed to: ${PREFIX}" + log_info "Add to your PATH: export PATH=\"${PREFIX}/bin:\$PATH\"" +} + +main() { + log_info "AVR GCC ${GCC_VERSION} Toolchain Installer" + log_info "==========================================" + + check_dependencies + check_installed + + mkdir -p "$PREFIX" + mkdir -p "$BUILD_DIR" + cd "$BUILD_DIR" + + download_and_extract "$BINUTILS_URL" "binutils-${BINUTILS_VERSION}.tar.bz2" "tar xjf" + download_and_extract "$GCC_URL" "gcc-${GCC_VERSION}.tar.gz" "tar xzf" + download_and_extract "$AVR_LIBC_URL" "avr-libc-${AVR_LIBC_VERSION}.tar.bz2" "tar xjf" + + build_binutils + build_gcc + build_avr_libc + + verify_installation +} + +main "$@" diff --git a/keyboards/crkbd/crkbd.c b/keyboards/crkbd/crkbd.c new file mode 100644 index 00000000000..857f8c02aa8 --- /dev/null +++ b/keyboards/crkbd/crkbd.c @@ -0,0 +1,158 @@ +/* +Copyright 2019 @foostan +Copyright 2020 Drashna Jaelre <@drashna> + +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 . +*/ + +#include "quantum.h" + +#ifdef SWAP_HANDS_ENABLE +__attribute__((weak)) const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + // Left + {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}}, + {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}}, + {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}}, + {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}, + // Right + {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}}, + {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}}, + {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}}, + {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}}}; +#endif + +#ifdef OLED_ENABLE + +oled_rotation_t oled_init_kb(oled_rotation_t rotation) { + if (!is_keyboard_master()) { + return OLED_ROTATION_180; // flips the display 180 degrees if offhand + } + return rotation; +} + +static void oled_render_layer_state(void) { + oled_write_P(PSTR("Layer: "), false); + switch (get_highest_layer(layer_state)) { + case 0: + oled_write_ln_P(PSTR("Base"), false); + break; + case 1: + oled_write_ln_P(PSTR("Navigation"), false); + break; + case 2: + oled_write_ln_P(PSTR("Mouse"), false); + break; + case 3: + oled_write_ln_P(PSTR("Media"), false); + break; + case 4: + oled_write_ln_P(PSTR("Number"), false); + break; + case 5: + oled_write_ln_P(PSTR("Symbol"), false); + break; + case 6: + oled_write_ln_P(PSTR("Functions"), false); + break; + default: + oled_write_ln_P(PSTR("Undef"), false); + break; + } +} + +char key_name = ' '; +uint16_t last_keycode; +uint8_t last_row; +uint8_t last_col; + +static const char PROGMEM code_to_name[60] = {' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\', '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '}; + +static void set_keylog(uint16_t keycode, keyrecord_t *record) { + // save the row and column (useful even if we can't find a keycode to show) + last_row = record->event.key.row; + last_col = record->event.key.col; + + key_name = ' '; + last_keycode = keycode; + if (IS_QK_MOD_TAP(keycode)) { + if (record->tap.count) { + keycode = QK_MOD_TAP_GET_TAP_KEYCODE(keycode); + } else { + keycode = 0xE0 + biton(QK_MOD_TAP_GET_MODS(keycode) & 0xF) + biton(QK_MOD_TAP_GET_MODS(keycode) & 0x10); + } + } else if (IS_QK_LAYER_TAP(keycode) && record->tap.count) { + keycode = QK_LAYER_TAP_GET_TAP_KEYCODE(keycode); + } else if (IS_QK_MODS(keycode)) { + keycode = QK_MODS_GET_BASIC_KEYCODE(keycode); + } else if (IS_QK_ONE_SHOT_MOD(keycode)) { + keycode = 0xE0 + biton(QK_ONE_SHOT_MOD_GET_MODS(keycode) & 0xF) + biton(QK_ONE_SHOT_MOD_GET_MODS(keycode) & 0x10); + } + if (keycode > ARRAY_SIZE(code_to_name)) { + return; + } + + // update keylog + key_name = pgm_read_byte(&code_to_name[keycode]); +} + +static const char *depad_str(const char *depad_str, char depad_char) { + while (*depad_str == depad_char) + ++depad_str; + return depad_str; +} + +static void oled_render_keylog(void) { + oled_write_char('0' + last_row, false); + oled_write_P(PSTR("x"), false); + oled_write_char('0' + last_col, false); + oled_write_P(PSTR(", k"), false); + const char *last_keycode_str = get_u16_str(last_keycode, ' '); + oled_write(depad_str(last_keycode_str, ' '), false); + oled_write_P(PSTR(":"), false); + oled_write_char(key_name, false); + oled_advance_page(true); +} + +__attribute__((weak)) void oled_render_logo(void) { + // clang-format off + static const char PROGMEM crkbd_logo[] = { + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, + 0}; + // clang-format on + oled_clear(); + oled_write_P(crkbd_logo, false); +} + +bool oled_task_kb(void) { + if (!oled_task_user()) { + return false; + } + if (is_keyboard_master()) { + oled_render_layer_state(); + oled_render_keylog(); + } else { + oled_render_logo(); + } + return false; +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + set_keylog(keycode, record); + } + return process_record_user(keycode, record); +} +#endif // OLED_ENABLE diff --git a/keyboards/crkbd/info.json b/keyboards/crkbd/info.json new file mode 100644 index 00000000000..31ee98e269e --- /dev/null +++ b/keyboards/crkbd/info.json @@ -0,0 +1,138 @@ +{ + "manufacturer": "foostan", + "url": "https://github.com/foostan/crkbd", + "maintainer": "qmk", + "usb": { + "vid": "0x4653" + }, + "features": { + "bootmagic": true, + "extrakey": true, + "nkro": true, + "oled": true, + "rgblight": false, + "rgb_matrix": true + }, + "bootmagic": { + "matrix": [0, 1] + }, + "split": { + "enabled": true, + "bootmagic": { + "matrix": [4, 1] + } + }, + "layout_aliases": { + "LAYOUT": "LAYOUT_split_3x6_3" + }, + "community_layouts": [ "split_3x5_3", "split_3x6_3" ], + "layouts": { + "LAYOUT_split_3x5_3": { + "layout": [ + {"matrix": [0, 1], "x": 0, "y": 0.3}, + {"matrix": [0, 2], "x": 1, "y": 0.1}, + {"matrix": [0, 3], "x": 2, "y": 0}, + {"matrix": [0, 4], "x": 3, "y": 0.1}, + {"matrix": [0, 5], "x": 4, "y": 0.2}, + + {"matrix": [4, 5], "x": 8, "y": 0.2}, + {"matrix": [4, 4], "x": 9, "y": 0.1}, + {"matrix": [4, 3], "x": 10, "y": 0}, + {"matrix": [4, 2], "x": 11, "y": 0.1}, + {"matrix": [4, 1], "x": 12, "y": 0.3}, + + {"matrix": [1, 1], "x": 0, "y": 1.3}, + {"matrix": [1, 2], "x": 1, "y": 1.1}, + {"matrix": [1, 3], "x": 2, "y": 1}, + {"matrix": [1, 4], "x": 3, "y": 1.1}, + {"matrix": [1, 5], "x": 4, "y": 1.2}, + + {"matrix": [5, 5], "x": 8, "y": 1.2}, + {"matrix": [5, 4], "x": 9, "y": 1.1}, + {"matrix": [5, 3], "x": 10, "y": 1}, + {"matrix": [5, 2], "x": 11, "y": 1.1}, + {"matrix": [5, 1], "x": 12, "y": 1.3}, + + {"matrix": [2, 1], "x": 0, "y": 2.3}, + {"matrix": [2, 2], "x": 1, "y": 2.1}, + {"matrix": [2, 3], "x": 2, "y": 2}, + {"matrix": [2, 4], "x": 3, "y": 2.1}, + {"matrix": [2, 5], "x": 4, "y": 2.2}, + + {"matrix": [6, 5], "x": 8, "y": 2.2}, + {"matrix": [6, 4], "x": 9, "y": 2.1}, + {"matrix": [6, 3], "x": 10, "y": 2}, + {"matrix": [6, 2], "x": 11, "y": 2.1}, + {"matrix": [6, 1], "x": 12, "y": 2.3}, + + {"matrix": [3, 3], "x": 3, "y": 3.7}, + {"matrix": [3, 4], "x": 4, "y": 3.7}, + {"matrix": [3, 5], "x": 5, "y": 3.2, "h": 1.5}, + + {"matrix": [7, 5], "x": 7, "y": 3.2, "h": 1.5}, + {"matrix": [7, 4], "x": 8, "y": 3.7}, + {"matrix": [7, 3], "x": 9, "y": 3.7} + ] + }, + "LAYOUT_split_3x6_3": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0.3}, + {"matrix": [0, 1], "x": 1, "y": 0.3}, + {"matrix": [0, 2], "x": 2, "y": 0.1}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0.1}, + {"matrix": [0, 5], "x": 5, "y": 0.2}, + + {"matrix": [4, 5], "x": 9, "y": 0.2}, + {"matrix": [4, 4], "x": 10, "y": 0.1}, + {"matrix": [4, 3], "x": 11, "y": 0}, + {"matrix": [4, 2], "x": 12, "y": 0.1}, + {"matrix": [4, 1], "x": 13, "y": 0.3}, + {"matrix": [4, 0], "x": 14, "y": 0.3}, + + {"matrix": [1, 0], "x": 0, "y": 1.3}, + {"matrix": [1, 1], "x": 1, "y": 1.3}, + {"matrix": [1, 2], "x": 2, "y": 1.1}, + {"matrix": [1, 3], "x": 3, "y": 1}, + {"matrix": [1, 4], "x": 4, "y": 1.1}, + {"matrix": [1, 5], "x": 5, "y": 1.2}, + + {"matrix": [5, 5], "x": 9, "y": 1.2}, + {"matrix": [5, 4], "x": 10, "y": 1.1}, + {"matrix": [5, 3], "x": 11, "y": 1}, + {"matrix": [5, 2], "x": 12, "y": 1.1}, + {"matrix": [5, 1], "x": 13, "y": 1.3}, + {"matrix": [5, 0], "x": 14, "y": 1.3}, + + {"matrix": [2, 0], "x": 0, "y": 2.3}, + {"matrix": [2, 1], "x": 1, "y": 2.3}, + {"matrix": [2, 2], "x": 2, "y": 2.1}, + {"matrix": [2, 3], "x": 3, "y": 2}, + {"matrix": [2, 4], "x": 4, "y": 2.1}, + {"matrix": [2, 5], "x": 5, "y": 2.2}, + + {"matrix": [6, 5], "x": 9, "y": 2.2}, + {"matrix": [6, 4], "x": 10, "y": 2.1}, + {"matrix": [6, 3], "x": 11, "y": 2}, + {"matrix": [6, 2], "x": 12, "y": 2.1}, + {"matrix": [6, 1], "x": 13, "y": 2.3}, + {"matrix": [6, 0], "x": 14, "y": 2.3}, + + {"matrix": [3, 3], "x": 4, "y": 3.7}, + {"matrix": [3, 4], "x": 5, "y": 3.7}, + {"matrix": [3, 5], "x": 6, "y": 3.2, "h": 1.5}, + + {"matrix": [7, 5], "x": 8, "y": 3.2, "h": 1.5}, + {"matrix": [7, 4], "x": 9, "y": 3.7}, + {"matrix": [7, 3], "x": 10, "y": 3.7} + ] + } + }, + "rgb_matrix": { + "driver": "ws2812", + "max_brightness": 120 + }, + "rgblight": { + "max_brightness": 120 + } +} diff --git a/keyboards/crkbd/lib/glcdfont.c b/keyboards/crkbd/lib/glcdfont.c new file mode 100644 index 00000000000..6de94ebc5a5 --- /dev/null +++ b/keyboards/crkbd/lib/glcdfont.c @@ -0,0 +1,232 @@ +// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. +// See gfxfont.h for newer custom bitmap font info. + +#include "progmem.h" + +// Standard ASCII 5x7 font +const unsigned char font[] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, + 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, + 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, + 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, + 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, + 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, + 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, + 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, + 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, + 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, + 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, + 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, + 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, + 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, + 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, + 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, + 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, + 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, + 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, + 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, + 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, + 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, + 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, + 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, + 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, + 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, + 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, + 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, + 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, + 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, + 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, + 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, + 0x72, 0x49, 0x49, 0x49, 0x46, 0x00, + 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, + 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, + 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, + 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, + 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, + 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, + 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, + 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, + 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, + 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, + 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, + 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, + 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, + 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, + 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, + 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, + 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, + 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, + 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, + 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, + 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, + 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, + 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, + 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, + 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, + 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, + 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, + 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, + 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, + 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, + 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, + 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, + 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, + 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, + 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, + 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, + 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, + 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, + 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, + 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x00, 0x03, 0x07, 0x08, 0x00, 0x00, + 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, + 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x28, 0x00, + 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, + 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, + 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, + 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, + 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, + 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, + 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, + 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, + 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, + 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, + 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, + 0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, + 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, + 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, + 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, + 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, + 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, + 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, + 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, + 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, + 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, + 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, + 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, + 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, + 0xC0, 0xC0, 0x40, 0x60, 0x60, 0xE0, + 0xE0, 0x60, 0x60, 0x60, 0x60, 0x00, + 0x00, 0xFF, 0xFF, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xC0, 0x40, 0xA0, 0xA0, + 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x40, 0x20, 0x20, + 0xF0, 0x30, 0x10, 0x10, 0x30, 0xF0, + 0xE0, 0x40, 0x40, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xC0, 0x80, 0x00, 0x80, 0x40, 0x40, + 0xE0, 0x80, 0x00, 0x00, 0x80, 0x40, + 0x40, 0x80, 0x80, 0x80, 0x80, 0xE0, + 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC, + 0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, + 0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, + 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, + 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, + 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, + 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, + 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x38, 0x78, 0xD8, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x0C, 0x1E, 0x36, 0x63, 0xC3, 0x83, + 0xFF, 0xFF, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x07, 0x0C, 0x18, 0x70, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xB4, 0xB5, 0xB5, + 0x84, 0xCD, 0x7D, 0xFF, 0x00, 0x00, + 0x00, 0x7E, 0xF9, 0x78, 0xFC, 0x86, + 0x03, 0x03, 0x02, 0x86, 0xFF, 0xFF, + 0x24, 0x24, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x3C, 0xC2, 0x02, 0x1F, + 0x7F, 0xC1, 0x8B, 0x8B, 0xC0, 0x90, + 0x3C, 0x0F, 0x82, 0xFC, 0xE6, 0x13, + 0x09, 0x09, 0x16, 0xE6, 0xFF, 0xFF, + 0xFF, 0xEE, 0xC4, 0x24, 0xE3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, + 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, + 0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, + 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, + 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, + 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, + 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, + 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x3C, 0x3C, 0x37, 0x33, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x07, 0x04, 0x0C, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x02, 0x06, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0F, 0x19, 0x11, 0x19, 0x09, + 0x09, 0x39, 0x20, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x04, 0x05, + 0x0F, 0x0F, 0x0B, 0x09, 0x09, 0x0B, + 0x07, 0x02, 0x02, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, + 0x04, 0x04, 0x0F, 0x09, 0x09, 0x08, + 0x04, 0x03, 0x07, 0x08, 0x09, 0x11, + 0x12, 0x12, 0x19, 0x0F, 0x0F, 0x07, + 0x0B, 0x0B, 0x09, 0x04, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; diff --git a/keyboards/crkbd/post_config.h b/keyboards/crkbd/post_config.h new file mode 100644 index 00000000000..dcc194479b5 --- /dev/null +++ b/keyboards/crkbd/post_config.h @@ -0,0 +1,21 @@ +/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * 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 . + */ + +#pragma once + +#ifndef OLED_FONT_H +# define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c" +#endif diff --git a/keyboards/crkbd/rev1/keyboard.json b/keyboards/crkbd/rev1/keyboard.json new file mode 100644 index 00000000000..2b32a5c8f63 --- /dev/null +++ b/keyboards/crkbd/rev1/keyboard.json @@ -0,0 +1,95 @@ +{ + "keyboard_name": "Corne", + "usb": { + "pid": "0x0001", + "device_version": "0.0.1" + }, + "features": { + "rgblight": true + }, + "build": { + "lto": true + }, + "matrix_pins": { + "cols": [ "F4", "F5", "F6", "F7", "B1", "B3" ], + "rows": [ "D4", "C6", "D7", "E6" ] + }, + "diode_direction": "COL2ROW", + "split": { + "serial": { + "pin": "D2" + }, + "transport": { + "sync": { + "matrix_state": true + } + } + }, + "rgblight": { + "led_count": 54, + "split_count": [27, 27] + }, + "ws2812": { + "pin": "D3" + }, + "rgb_matrix": { + "split_count": [27, 27], + "layout": [ + {"x": 85, "y": 16, "flags": 2}, + {"x": 50, "y": 13, "flags": 2}, + {"x": 16, "y": 20, "flags": 2}, + {"x": 16, "y": 38, "flags": 2}, + {"x": 50, "y": 48, "flags": 2}, + {"x": 85, "y": 52, "flags": 2}, + {"matrix": [3, 5], "x": 95, "y": 63, "flags": 1}, + {"matrix": [2, 5], "x": 85, "y": 39, "flags": 4}, + {"matrix": [1, 5], "x": 85, "y": 21, "flags": 4}, + {"matrix": [0, 5], "x": 85, "y": 4, "flags": 4}, + {"matrix": [0, 4], "x": 68, "y": 2, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 19, "flags": 4}, + {"matrix": [2, 4], "x": 68, "y": 37, "flags": 4}, + {"matrix": [3, 4], "x": 80, "y": 58, "flags": 1}, + {"matrix": [3, 3], "x": 60, "y": 55, "flags": 1}, + {"matrix": [2, 3], "x": 50, "y": 35, "flags": 4}, + {"matrix": [1, 3], "x": 50, "y": 13, "flags": 4}, + {"matrix": [0, 3], "x": 50, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 33, "y": 3, "flags": 4}, + {"matrix": [1, 2], "x": 33, "y": 20, "flags": 4}, + {"matrix": [2, 2], "x": 33, "y": 37, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 42, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 24, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 7, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 7, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 24, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 41, "flags": 1}, + {"x": 139, "y": 16, "flags": 2}, + {"x": 174, "y": 13, "flags": 2}, + {"x": 208, "y": 20, "flags": 2}, + {"x": 208, "y": 38, "flags": 2}, + {"x": 174, "y": 48, "flags": 2}, + {"x": 139, "y": 52, "flags": 2}, + {"matrix": [7, 5], "x": 129, "y": 63, "flags": 1}, + {"matrix": [6, 5], "x": 139, "y": 39, "flags": 4}, + {"matrix": [5, 5], "x": 139, "y": 21, "flags": 4}, + {"matrix": [4, 5], "x": 139, "y": 4, "flags": 4}, + {"matrix": [4, 4], "x": 156, "y": 2, "flags": 4}, + {"matrix": [5, 4], "x": 156, "y": 19, "flags": 4}, + {"matrix": [6, 4], "x": 156, "y": 37, "flags": 4}, + {"matrix": [7, 4], "x": 144, "y": 58, "flags": 1}, + {"matrix": [7, 3], "x": 164, "y": 55, "flags": 1}, + {"matrix": [6, 3], "x": 174, "y": 35, "flags": 4}, + {"matrix": [5, 3], "x": 174, "y": 13, "flags": 4}, + {"matrix": [4, 3], "x": 174, "y": 0, "flags": 4}, + {"matrix": [4, 2], "x": 191, "y": 3, "flags": 4}, + {"matrix": [5, 2], "x": 191, "y": 20, "flags": 4}, + {"matrix": [6, 2], "x": 191, "y": 37, "flags": 4}, + {"matrix": [6, 1], "x": 208, "y": 42, "flags": 4}, + {"matrix": [5, 1], "x": 208, "y": 24, "flags": 4}, + {"matrix": [4, 1], "x": 208, "y": 7, "flags": 4}, + {"matrix": [4, 0], "x": 224, "y": 7, "flags": 1}, + {"matrix": [5, 0], "x": 224, "y": 24, "flags": 1}, + {"matrix": [6, 0], "x": 224, "y": 41, "flags": 1} + ] + }, + "development_board": "promicro" +} diff --git a/keyboards/crkbd/rev1/keymaps/maat/config.h b/keyboards/crkbd/rev1/keymaps/maat/config.h new file mode 100644 index 00000000000..10b23222d6d --- /dev/null +++ b/keyboards/crkbd/rev1/keymaps/maat/config.h @@ -0,0 +1,31 @@ +#pragma once + +#include "rgb_matrix.h" + +// -- To reduce memory use +#define LAYER_STATE_8BIT +#define NO_MUSIC_MODE +#undef LOCKING_SUPPORT_ENABLE +#undef LOCKING_RESYNC_ENABLE +#define NO_ACTION_ONESHOT + +// -- To reduce memory use END + +// -- PTH +// https://github.com/jgandert/qmk_modules/blob/main/predictive_tap_hold/README.md +// #define PTH_DISABLED +#define TAPPING_TERM 0 +#define PTH_FAST_STREAK_TAP_ENABLE +// #define PTH_DEBUG +#define PTH_DONT_HOLD_INSTANTLY +// -- PTH end + +// -- App Companion +// https://docs.qmk.fm/features/rawhid#usage +// https://github.com/maatthc/qmk_layers_app_companion +#define RAW_EPSIZE 32 +#define PAYLOAD_MARK 0x90 +#define PAYLOAD_BEGIN 24 +#define RAW_USAGE_PAGE 0xFF60 +#define RAW_USAGE 0x61 +// -- App Companion end diff --git a/keyboards/crkbd/rev1/keymaps/maat/keymap.c b/keyboards/crkbd/rev1/keymaps/maat/keymap.c new file mode 100644 index 00000000000..7f3f5b73352 --- /dev/null +++ b/keyboards/crkbd/rev1/keymaps/maat/keymap.c @@ -0,0 +1,44 @@ +// clang-format off +#include QMK_KEYBOARD_H +#include "raw_hid.h" +#include "keymap.h" + +// Notifies the host of the layer change using raw HID +// https://docs.qmk.fm/features/rawhid#usage +// +#ifdef RAW_ENABLE + layer_state_t layer_state_set_user(layer_state_t state) { + uint8_t hi_layer = get_highest_layer(state); + #ifdef CONSOLE_ENABLE + #include "print.h" + uprintf("LAYER: Selected Layer: %d\n", hi_layer); + #endif + uint8_t response[RAW_EPSIZE]; + memset(response, 0x00, RAW_EPSIZE); + response[PAYLOAD_BEGIN] = PAYLOAD_MARK; + response[PAYLOAD_BEGIN + 1] = hi_layer; + raw_hid_send(response, RAW_EPSIZE); + return state; + } +#endif /* ifdef RAW_ENABLE */ + +// Predictive tap hold: https://github.com/jgandert/qmk_modules/tree/main/predictive_tap_hold +const uint8_t pth_side_layout[MATRIX_ROWS][MATRIX_COLS] PROGMEM = LAYOUT_split_3x6_3( + PTH_L, PTH_L, PTH_L, PTH_L, PTH_L,PTH_L, PTH_R, PTH_R, PTH_R, PTH_R, PTH_R, PTH_R, + PTH_L, PTH_L, PTH_L, PTH_L, PTH_L,PTH_L, PTH_R, PTH_R, PTH_R, PTH_R, PTH_R, PTH_R, + PTH_L, PTH_L, PTH_L, PTH_L, PTH_L,PTH_L, PTH_R, PTH_R, PTH_R, PTH_R, PTH_R, PTH_R, + PTH_L, PTH_L, PTH_L, PTH_R, PTH_R, PTH_R +); + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[L_BASE]=LAYER(LAYER_BASE), +[L_MEDIA]=LAYER(LAYER_MEDIA), +[L_NAV]=LAYER(LAYER_NAV), +[L_NUM]=LAYER(LAYER_NUM), +[L_SYM]=LAYER(LAYER_SYM), +[L_FUN]=LAYER(LAYER_FUN), +}; + +#ifdef OLED_ENABLE + #include "oled.c" +#endif diff --git a/keyboards/crkbd/rev1/keymaps/maat/keymap.json b/keyboards/crkbd/rev1/keymaps/maat/keymap.json new file mode 100644 index 00000000000..9111cf15497 --- /dev/null +++ b/keyboards/crkbd/rev1/keymaps/maat/keymap.json @@ -0,0 +1,3 @@ +{ + "modules": ["jgandert/predictive_tap_hold"] +} diff --git a/keyboards/crkbd/rev1/keymaps/maat/oled.c b/keyboards/crkbd/rev1/keymaps/maat/oled.c new file mode 100644 index 00000000000..63135d728e4 --- /dev/null +++ b/keyboards/crkbd/rev1/keymaps/maat/oled.c @@ -0,0 +1,78 @@ +#include "quantum.h" + +static void oled_render_layer_state(void) { + oled_write_P(PSTR("Layer: "), false); + switch (get_highest_layer(layer_state)) { + case 0: + oled_write_ln_P(PSTR("Base"), false); + break; + case 1: + oled_write_ln_P(PSTR("Navigation"), false); + break; + case 2: + oled_write_ln_P(PSTR("Mouse"), false); + break; + case 3: + oled_write_ln_P(PSTR("Media"), false); + break; + case 4: + oled_write_ln_P(PSTR("Number"), false); + break; + case 5: + oled_write_ln_P(PSTR("Symbol"), false); + break; + case 6: + oled_write_ln_P(PSTR("Functions"), false); + break; + default: + oled_write_ln_P(PSTR("Undef"), false); + break; + } +} + +static char key_name = ' '; +uint16_t last_keycode; +uint8_t last_row; +uint8_t last_col; + +static const char PROGMEM code_to_name[60] = {' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\', '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '}; + +static const char *depad_str(const char *depad_str, char depad_char) { + while (*depad_str == depad_char) + ++depad_str; + return depad_str; +} + +static void oled_render_keylog(void) { + oled_write_char('0' + last_row, false); + oled_write_P(PSTR("x"), false); + oled_write_char('0' + last_col, false); + oled_write_P(PSTR(", k"), false); + const char *last_keycode_str = get_u16_str(last_keycode, ' '); + oled_write(depad_str(last_keycode_str, ' '), false); + oled_write_P(PSTR(":"), false); + oled_write_char(key_name, false); + oled_advance_page(true); +} + +void oled_render_logo(void) { + // clang-format off + static const char PROGMEM crkbd_logo[] = { + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, + 0}; + // clang-format on + // oled_clear(); + oled_write_P(crkbd_logo, false); +} + +bool oled_task_user(void) { + if (is_keyboard_master()) { + oled_render_layer_state(); + oled_render_keylog(); + } else { + oled_render_logo(); + } + return false; +} diff --git a/keyboards/crkbd/rev1/keymaps/maat/rgb_matrix.h b/keyboards/crkbd/rev1/keymaps/maat/rgb_matrix.h new file mode 100644 index 00000000000..79dfeddb6b2 --- /dev/null +++ b/keyboards/crkbd/rev1/keymaps/maat/rgb_matrix.h @@ -0,0 +1,194 @@ +#pragma once + +#ifdef RGB_MATRIX_ENABLE +# define RGB_MATRIX_KEYPRESSES // reacts to keypresses +// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) +# define RGB_MATRIX_SLEEP // turn off effects when suspended +# define RGB_MATRIX_FRAMEBUFFER_EFFECTS +// # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) +// # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) +# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. +# define RGB_MATRIX_HUE_STEP 8 +# define RGB_MATRIX_SAT_STEP 8 +# define RGB_MATRIX_VAL_STEP 8 +# define RGB_MATRIX_SPD_STEP 10 + +/* Enable the animations you want/need. You may need to enable only a small number of these because * + * they take up a lot of space. Enable and confirm that you can still successfully compile your firmware. */ +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +# define ENABLE_RGB_MATRIX_ALPHAS_MODS +# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_BREATHING +# define ENABLE_RGB_MATRIX_BAND_SAT +# define ENABLE_RGB_MATRIX_BAND_VAL +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +# define ENABLE_RGB_MATRIX_CYCLE_ALL +# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +# define ENABLE_RGB_MATRIX_DUAL_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +# define ENABLE_RGB_MATRIX_RAINDROPS +# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +# define ENABLE_RGB_MATRIX_HUE_BREATHING +# define ENABLE_RGB_MATRIX_HUE_PENDULUM +# define ENABLE_RGB_MATRIX_HUE_WAVE +# define ENABLE_RGB_MATRIX_PIXEL_RAIN +# define ENABLE_RGB_MATRIX_PIXEL_FLOW +# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +# define ENABLE_RGB_MATRIX_TYPING_HEATMAP +# define ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +# define ENABLE_RGB_MATRIX_SPLASH +# define ENABLE_RGB_MATRIX_MULTISPLASH +# define ENABLE_RGB_MATRIX_SOLID_SPLASH +# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +#endif +#ifdef RGB_MATRIX_ENABLE +# define RGB_MATRIX_KEYPRESSES // reacts to keypresses +// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) +# define RGB_MATRIX_SLEEP // turn off effects when suspended +# define RGB_MATRIX_FRAMEBUFFER_EFFECTS +// # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) +// # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) +# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. +# define RGB_MATRIX_HUE_STEP 8 +# define RGB_MATRIX_SAT_STEP 8 +# define RGB_MATRIX_VAL_STEP 8 +# define RGB_MATRIX_SPD_STEP 10 + +/* Enable the animations you want/need. You may need to enable only a small number of these because * + * they take up a lot of space. Enable and confirm that you can still successfully compile your firmware. */ +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +# define ENABLE_RGB_MATRIX_ALPHAS_MODS +# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_BREATHING +# define ENABLE_RGB_MATRIX_BAND_SAT +# define ENABLE_RGB_MATRIX_BAND_VAL +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +# define ENABLE_RGB_MATRIX_CYCLE_ALL +# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +# define ENABLE_RGB_MATRIX_DUAL_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +# define ENABLE_RGB_MATRIX_RAINDROPS +# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +# define ENABLE_RGB_MATRIX_HUE_BREATHING +# define ENABLE_RGB_MATRIX_HUE_PENDULUM +# define ENABLE_RGB_MATRIX_HUE_WAVE +# define ENABLE_RGB_MATRIX_PIXEL_RAIN +# define ENABLE_RGB_MATRIX_PIXEL_FLOW +# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +# define ENABLE_RGB_MATRIX_TYPING_HEATMAP +# define ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +# define ENABLE_RGB_MATRIX_SPLASH +# define ENABLE_RGB_MATRIX_MULTISPLASH +# define ENABLE_RGB_MATRIX_SOLID_SPLASH +# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +#endif +#ifdef RGB_MATRIX_ENABLE +# define RGB_MATRIX_KEYPRESSES // reacts to keypresses +// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) +# define RGB_MATRIX_SLEEP // turn off effects when suspended +# define RGB_MATRIX_FRAMEBUFFER_EFFECTS +// # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) +// # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) +# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. +# define RGB_MATRIX_HUE_STEP 8 +# define RGB_MATRIX_SAT_STEP 8 +# define RGB_MATRIX_VAL_STEP 8 +# define RGB_MATRIX_SPD_STEP 10 + +/* Enable the animations you want/need. You may need to enable only a small number of these because * + * they take up a lot of space. Enable and confirm that you can still successfully compile your firmware. */ +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +# define ENABLE_RGB_MATRIX_ALPHAS_MODS +# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_BREATHING +# define ENABLE_RGB_MATRIX_BAND_SAT +# define ENABLE_RGB_MATRIX_BAND_VAL +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +# define ENABLE_RGB_MATRIX_CYCLE_ALL +# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +# define ENABLE_RGB_MATRIX_DUAL_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +# define ENABLE_RGB_MATRIX_RAINDROPS +# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +# define ENABLE_RGB_MATRIX_HUE_BREATHING +# define ENABLE_RGB_MATRIX_HUE_PENDULUM +# define ENABLE_RGB_MATRIX_HUE_WAVE +# define ENABLE_RGB_MATRIX_PIXEL_RAIN +# define ENABLE_RGB_MATRIX_PIXEL_FLOW +# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +# define ENABLE_RGB_MATRIX_TYPING_HEATMAP +# define ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +# define ENABLE_RGB_MATRIX_SPLASH +# define ENABLE_RGB_MATRIX_MULTISPLASH +# define ENABLE_RGB_MATRIX_SOLID_SPLASH +# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +#endif diff --git a/keyboards/crkbd/rev1/keymaps/maat/rules.mk b/keyboards/crkbd/rev1/keymaps/maat/rules.mk new file mode 100644 index 00000000000..59fb2493cb5 --- /dev/null +++ b/keyboards/crkbd/rev1/keymaps/maat/rules.mk @@ -0,0 +1,32 @@ +BOOTLOADER = atmel-dfu + +#To reduce memory use +LTO_ENABLE = yes + +COMMAND_ENABLE = no +SPACE_CADET_ENABLE = no +GRAVE_ESC_ENABLE = no +MAGIC_ENABLE = no +BOOTMAGIC_ENABLE = no +AVR_USE_MINIMAL_PRINTF = yes + +MUSIC_ENABLE = no +AUDIO_ENABLE = no + +MOUSEKEY_ENABLE = no +NKRO_ENABLE = no +#To reduce memory use END + +OLED_ENABLE = yes +RGBLIGHT_ENABLE = yes +RGB_MATRIX_ENABLE = no + +EXTRAKEY_ENABLE = yes # Audio control and System control +AUTO_SHIFT_ENABLE = no +CAPS_WORD_ENABLE = yes + +# CONSOLE_ENABLE = yes +# KEYCODE_STRING_ENABLE = yes + +RAW_ENABLE = yes +WPM_ENABLE = yes diff --git a/keyboards/crkbd/rev1/readme.md b/keyboards/crkbd/rev1/readme.md new file mode 100644 index 00000000000..940d23e19be --- /dev/null +++ b/keyboards/crkbd/rev1/readme.md @@ -0,0 +1,11 @@ +# Corne GLP (Gateron Low Profile) + +![Corne GLP Keyboard](https://github.com/beekeeb/crkbd-glp/raw/main/docs/banner.jpg) + + +The Corne GLP (Gateron Low Profile) is a variant of the Corne v3 keyboard, originally created by [foostan](https://github.com/foostan/crkbd "foostan"). It supports Gateron low-profile key switches (KS-27 and KS-33). The original Corne firmware can be used with this keyboard. + +* Keyboard Maintainer: [beekeeb](https://github.com/beekeeb/crkbd-glp/) +* Hardware Supported: Pro Micro or equivalent +* Hardware Availability: https://shop.beekeeb.com +