commit 56848df0019d8d344d72b65ce7ed72cdf95e0be4 Author: Andreas Tsouchlos Date: Thu Mar 12 09:53:44 2026 +0100 Add qmk_firmware submodule and own config diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..8ad46ee --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "qmk_firmware"] + path = qmk_firmware + url = https://github.com/qmk/qmk_firmware.git diff --git a/README.md b/README.md new file mode 100644 index 0000000..ace08ec --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# Keyboard Firmware + +This repository contains the firmware for the `keyboardeeroy_jenkins` keyboard. + +## Build and flash + +1. Init submodules and build firmware + ```bash + $ git submodule update --init + $ ./build.sh + ``` +2. Back up current firmware (optional) + ```bash + $ picotool save --all left.bin # Left half + $ picotool save --all right.bin # Right half + ``` +3. Flash both keyboard halves + ```bash + $ picotool load qmk_firmware/keyboardeeroy_jenkins_default.uf2 # Both halves + ``` diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..a2f84c6 --- /dev/null +++ b/build.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -e +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +KB_NAME="keyboardeeroy_jenkins" + +ln -sfn "$SCRIPT_DIR/keyboards/$KB_NAME" \ + "$SCRIPT_DIR/qmk_firmware/keyboards/$KB_NAME" + +make -C "$SCRIPT_DIR/qmk_firmware" "$KB_NAME:default" diff --git a/keyboards/keyboardeeroy_jenkins/keyboard.json b/keyboards/keyboardeeroy_jenkins/keyboard.json new file mode 100644 index 0000000..36e0f09 --- /dev/null +++ b/keyboards/keyboardeeroy_jenkins/keyboard.json @@ -0,0 +1,108 @@ +{ + "manufacturer": "Andreas Tsouchlos", + "keyboard_name": "keyboardeeroy_jenkins", + "maintainer": "Andreas Tsouchlos", + "bootloader": "rp2040", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "matrix_pins": { + "cols": ["GP28", "GP12", "GP4", "GP5", "GP6", "GP7"], + "rows": ["GP27", "GP26", "GP8", "GP3", "GP2"] + }, + "processor": "RP2040", + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0000", + "vid": "0xFEED" + }, + "split": { + "enabled": true, + "serial": { + "pin": "GP14" + } + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + + {"matrix": [9, 5], "x": 6, "y": 0}, + {"matrix": [9, 4], "x": 7, "y": 0}, + {"matrix": [9, 3], "x": 8, "y": 0}, + {"matrix": [9, 2], "x": 9, "y": 0}, + {"matrix": [9, 1], "x": 10, "y": 0}, + {"matrix": [9, 0], "x": 11, "y": 0}, + + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 1], "x": 1, "y": 1}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1}, + {"matrix": [1, 4], "x": 4, "y": 1}, + {"matrix": [1, 5], "x": 5, "y": 1}, + + {"matrix": [8, 5], "x": 6, "y": 1}, + {"matrix": [8, 4], "x": 7, "y": 1}, + {"matrix": [8, 3], "x": 8, "y": 1}, + {"matrix": [8, 2], "x": 9, "y": 1}, + {"matrix": [8, 1], "x": 10, "y": 1}, + {"matrix": [8, 0], "x": 11, "y": 1}, + + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 1], "x": 1, "y": 2}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2}, + {"matrix": [2, 4], "x": 4, "y": 2}, + {"matrix": [2, 5], "x": 5, "y": 2}, + + {"matrix": [7, 5], "x": 6, "y": 2}, + {"matrix": [7, 4], "x": 7, "y": 2}, + {"matrix": [7, 3], "x": 8, "y": 2}, + {"matrix": [7, 2], "x": 9, "y": 2}, + {"matrix": [7, 1], "x": 10, "y": 2}, + {"matrix": [7, 0], "x": 11, "y": 2}, + + {"matrix": [3, 0], "x": 0, "y": 3}, + {"matrix": [3, 1], "x": 1, "y": 3}, + {"matrix": [3, 2], "x": 2, "y": 3}, + {"matrix": [3, 3], "x": 3, "y": 3}, + {"matrix": [3, 4], "x": 4, "y": 3}, + {"matrix": [3, 5], "x": 5, "y": 3}, + + {"matrix": [6, 5], "x": 6, "y": 3}, + {"matrix": [6, 4], "x": 7, "y": 3}, + {"matrix": [6, 3], "x": 8, "y": 3}, + {"matrix": [6, 2], "x": 9, "y": 3}, + {"matrix": [6, 1], "x": 10, "y": 3}, + {"matrix": [6, 0], "x": 11, "y": 3}, + + {"matrix": [4, 0], "x": 0, "y": 4}, + {"matrix": [4, 1], "x": 1, "y": 4}, + {"matrix": [4, 2], "x": 2, "y": 4}, + {"matrix": [4, 3], "x": 3, "y": 4}, + {"matrix": [4, 4], "x": 4, "y": 4}, + {"matrix": [4, 5], "x": 5, "y": 4}, + + {"matrix": [5, 5], "x": 6, "y": 4}, + {"matrix": [5, 4], "x": 7, "y": 4}, + {"matrix": [5, 3], "x": 8, "y": 4}, + {"matrix": [5, 2], "x": 9, "y": 4}, + {"matrix": [5, 1], "x": 10, "y": 4}, + {"matrix": [5, 0], "x": 11, "y": 4}, + + ] + } + } +} diff --git a/keyboards/keyboardeeroy_jenkins/keymaps/default/keymap.c b/keyboards/keyboardeeroy_jenkins/keymaps/default/keymap.c new file mode 100644 index 0000000..3e780a9 --- /dev/null +++ b/keyboards/keyboardeeroy_jenkins/keymaps/default/keymap.c @@ -0,0 +1,270 @@ +#include "keymap_german.h" +#include QMK_KEYBOARD_H + +enum layer_names { + _BL, + _LOWER, + _RAISE, + _FUNC +}; + + +#define BL PDF(_BL) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | GUI | Alt |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_BL] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, + KC_LCTL, KC_LGUI, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | Pg Up| Pg Dn| | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | Ü | I | Ö | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | Ä | ß | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | GUI | Alt |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_FUNC] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, DE_UDIA, KC_I, DE_ODIA, KC_P, KC_BSPC, + KC_ESC, DE_ADIA, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, + KC_LCTL, KC_LGUI, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Reset| Debug| | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | |Aud cy|Aud on|AudOff|AGnorm|AGswap|Qwerty|Qwerty|Qwerty| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +// [_ADJUST] = LAYOUT( +// KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, +// _______, QK_BOOT, DB_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, +// _______, _______, MU_NEXT, AU_ON, AU_OFF, AG_NORM, AG_SWAP, BL, BL, BL, _______, _______, +// _______, AU_PREV, AU_NEXT, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, +// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +// ) + + +}; + +// bool process_record_user(uint16_t keycode, keyrecord_t *record) { +// switch (keycode) { +// case LOWER: +// if (record->event.pressed) { +// layer_on(_LOWER); +// update_tri_layer(_LOWER, _RAISE, _ADJUST); +// } else { +// layer_off(_LOWER); +// update_tri_layer(_LOWER, _RAISE, _ADJUST); +// } +// return false; +// break; +// case RAISE: +// if (record->event.pressed) { +// layer_on(_RAISE); +// update_tri_layer(_LOWER, _RAISE, _ADJUST); +// } else { +// layer_off(_RAISE); +// update_tri_layer(_LOWER, _RAISE, _ADJUST); +// } +// return false; +// break; +// case BACKLIT: +// if (record->event.pressed) { +// register_code(KC_RSFT); +// #ifdef BACKLIGHT_ENABLE +// backlight_step(); +// #endif +// #ifdef RGBLIGHT_ENABLE +// rgblight_step(); +// #endif +// #ifdef __AVR__ +// gpio_write_pin_low(E6); +// #endif +// } else { +// unregister_code(KC_RSFT); +// #ifdef __AVR__ +// gpio_write_pin_high(E6); +// #endif +// } +// return false; +// break; +// } +// return true; +// }; +// +// bool muse_mode = false; +// uint8_t last_muse_note = 0; +// uint16_t muse_counter = 0; +// uint8_t muse_offset = 70; +// uint16_t muse_tempo = 50; +// +// bool encoder_update_user(uint8_t index, bool clockwise) { +// if (muse_mode) { +// if (IS_LAYER_ON(_RAISE)) { +// if (clockwise) { +// muse_offset++; +// } else { +// muse_offset--; +// } +// } else { +// if (clockwise) { +// muse_tempo+=1; +// } else { +// muse_tempo-=1; +// } +// } +// } else { +// if (clockwise) { +// register_code(KC_PGDN); +// unregister_code(KC_PGDN); +// } else { +// register_code(KC_PGUP); +// unregister_code(KC_PGUP); +// } +// } +// return true; +// } +// +// bool dip_switch_update_user(uint8_t index, bool active) { +// switch (index) { +// case 0: +// if (active) { +// layer_on(_ADJUST); +// } else { +// layer_off(_ADJUST); +// } +// break; +// case 1: +// if (active) { +// muse_mode = true; +// } else { +// muse_mode = false; +// } +// } +// return true; +// } +// +// +// void matrix_scan_user(void) { +// #ifdef AUDIO_ENABLE +// if (muse_mode) { +// if (muse_counter == 0) { +// uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()]; +// if (muse_note != last_muse_note) { +// stop_note(compute_freq_for_midi_note(last_muse_note)); +// play_note(compute_freq_for_midi_note(muse_note), 0xF); +// last_muse_note = muse_note; +// } +// } +// muse_counter = (muse_counter + 1) % muse_tempo; +// } else { +// if (muse_counter) { +// stop_all_notes(); +// muse_counter = 0; +// } +// } +// #endif +// } +// +// bool music_mask_user(uint16_t keycode) { +// switch (keycode) { +// case RAISE: +// case LOWER: +// return false; +// default: +// return true; +// } +// } + + + + +// // Copyright 2023 QMK +// // SPDX-License-Identifier: GPL-2.0-or-later +// +// #include QMK_KEYBOARD_H +// +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +// [0] = LAYOUT( +// KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, +// KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, +// KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, +// KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, +// KC_LCTL, KC_LGUI, KC_LGUI, KC_LALT, KC_ENT, KC_SPC, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +// ) +// }; diff --git a/keyboards/keyboardeeroy_jenkins/rules.mk b/keyboards/keyboardeeroy_jenkins/rules.mk new file mode 100644 index 0000000..161ec22 --- /dev/null +++ b/keyboards/keyboardeeroy_jenkins/rules.mk @@ -0,0 +1 @@ +SERIAL_DRIVER = vendor diff --git a/qmk.json b/qmk.json new file mode 100644 index 0000000..14602c0 --- /dev/null +++ b/qmk.json @@ -0,0 +1,6 @@ +{ + "userspace_version": "1.0", + "build_targets": [ + ["keboardeeroy_jenkins", "default"] + ] +} diff --git a/qmk_firmware b/qmk_firmware new file mode 160000 index 0000000..7fe0c9c --- /dev/null +++ b/qmk_firmware @@ -0,0 +1 @@ +Subproject commit 7fe0c9c746e632b8ff114e777ac69814c05801b6