50a12c06b9
* bastardkb: restructure folder hierarchy ahead of supporting other adapters/mcus Upcoming support for the following (adapter, mcu) pairs will be submitted in follow-up PRs: - `v2/elitec` - `v2/stemcell` - `blackpill` This PR contains the following changes: - Move previous implementation to an inner `v1/elitec` folder - Move keyboard USB IDs and strings to data driven - Update headers to update maintainers list - Run `qmk format-c` * bastardkb/charybdis: remove broken acceleration implementation * bastardkb/charybdis: fix debug output * bastardkb: add support for BastardKb the `v2/elitec` (adapter, mcu) pair * bastardkb: add Blackpill support * bastardkb/charybdis/3x5: add `bstiq` keymap * bastardkb/charybdis: add fake LEDs to the configuration For the Charybdis 3x5 (respectively 4x6), the LED config now simulates 36 (respectively 58) LEDs instead of the actual 35 (respectively 56) to prevent confusion when testing LEDs during assembly when handedness is not set correctly. Those fake LEDs are bound to the physical bottom-left corner. * bastardkbk/charybdis/readme.md: update build commands Merge pull request #5 from Nathancooke7/update_charybdis_readme_v2_shield. * bastardkb/charybdis: fix Via keymap with blackpill * bastardkb/charybdis: add 3x6 configuration * bastardkb/charybdis: remove unnecessary files * bastardkb/charybdis: remove obsolete code * bastardkb/charybdis/3x6: add Via keymap * bastardkb: add support for Splinky (RP2040) board * bastardkb: initial configuration for the Splinky (SPI not working yet) * bastardkb/charybdis/3x5/v2/splinky: tentative change to enable trackball * bastardkb/charybdis/3x5/v2/splinky: fix SCK, MISO, MOSI pins * bastardkb/charybdis/3x5/v2/splinky: fix SCK, MISO, MOSI pins * bastardkb/charybdis/4x6/v2/splinky: add SPI configuration and enable trackball * bastardkb/charybdis/3x6: add splinky config * bastardkb/*/v2/splinky: update drivers to `vendor` * bastardkb/dilemma: add new board * bastardkb/charybdis: fix infinite loop in `layer_state_set_user(…)` in the `via` keymaps * bastardkb/dilemma: add `bstiq` keymap * bastardkb: specify blackpill boards * bastardkb/charybdis: fix blackpill-specific define syntax * bastardkb: remove `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION` which are no longer valid options * bastardkb: fix `QK_BOOT` keycodes * bastardkb/dilemma: fix mouse direction on X axis * bastardkb/charybdis/3x6: adjust CS * bastardkb/dilemma: adjust trackpad configuration * charybdis: fix `PWM33XX_CS_PIN` defines This is a follow-up of https://github.com/qmk/qmk_firmware/pull/17613. * bastardkb: remove Vial mentions from `bstiq` keymaps * Cleanup unnecessary comments Co-authored-by: Nathan <nathan.cooke@compass.com> Co-authored-by: Charly Delay <0xcharly@codesink.dev>
171 lines
14 KiB
C
171 lines
14 KiB
C
/**
|
|
* Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
|
|
*
|
|
* 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
|
|
|
|
#ifdef CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
|
|
# include "timer.h"
|
|
#endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
|
|
|
|
enum charybdis_keymap_layers {
|
|
LAYER_BASE = 0,
|
|
LAYER_LOWER,
|
|
LAYER_RAISE,
|
|
LAYER_POINTER,
|
|
};
|
|
|
|
/** \brief Automatically enable sniping-mode on the pointer layer. */
|
|
#define CHARYBDIS_AUTO_SNIPING_ON_LAYER LAYER_POINTER
|
|
|
|
#ifdef CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
|
|
static uint16_t auto_pointer_layer_timer = 0;
|
|
|
|
# ifndef CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS
|
|
# define CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS 1000
|
|
# endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS
|
|
|
|
# ifndef CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD
|
|
# define CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD 8
|
|
# endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD
|
|
#endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
|
|
|
|
#define LOWER MO(LAYER_LOWER)
|
|
#define RAISE MO(LAYER_RAISE)
|
|
#define PT_Z LT(LAYER_POINTER, KC_Z)
|
|
#define PT_SLSH LT(LAYER_POINTER, KC_SLSH)
|
|
|
|
#ifndef POINTING_DEVICE_ENABLE
|
|
# define DRGSCRL KC_NO
|
|
# define DPI_MOD KC_NO
|
|
# define S_D_MOD KC_NO
|
|
# define SNIPING KC_NO
|
|
#endif // !POINTING_DEVICE_ENABLE
|
|
|
|
// clang-format off
|
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
[LAYER_BASE] = LAYOUT_charybdis_4x6(
|
|
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
|
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
|
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
|
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
|
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
|
|
KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
|
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
|
|
KC_LCTL, PT_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, PT_SLSH, KC_LALT,
|
|
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
|
|
KC_LGUI, KC_SPC, LOWER, RAISE, KC_ENT,
|
|
KC_LALT, KC_BSPC, KC_DEL
|
|
// ╰───────────────────────────╯ ╰──────────────────╯
|
|
),
|
|
|
|
[LAYER_LOWER] = LAYOUT_charybdis_4x6(
|
|
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
|
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS,
|
|
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
|
|
RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_P7, KC_P8, KC_P9, KC_RBRC, XXXXXXX,
|
|
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
|
|
RGB_TOG, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PEQL,
|
|
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
|
|
RGB_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAST, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_PDOT,
|
|
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
|
|
XXXXXXX, XXXXXXX, _______, XXXXXXX, _______,
|
|
XXXXXXX, XXXXXXX, KC_P0
|
|
// ╰───────────────────────────╯ ╰──────────────────╯
|
|
),
|
|
|
|
[LAYER_RAISE] = LAYOUT_charybdis_4x6(
|
|
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
|
|
KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
|
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
|
|
KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU,
|
|
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
|
|
KC_MPLY, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, KC_MUTE,
|
|
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
|
|
KC_MPRV, KC_HOME, KC_PGUP, KC_PGDN, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD,
|
|
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
|
|
_______, _______, XXXXXXX, _______, XXXXXXX,
|
|
_______, _______, XXXXXXX
|
|
// ╰───────────────────────────╯ ╰──────────────────╯
|
|
),
|
|
|
|
[LAYER_POINTER] = LAYOUT_charybdis_4x6(
|
|
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
|
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
|
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DPI_MOD, S_D_MOD, S_D_MOD, DPI_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
|
|
XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, XXXXXXX,
|
|
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
|
|
XXXXXXX, _______, DRGSCRL, SNIPING, EEP_RST, QK_BOOT, QK_BOOT, EEP_RST, SNIPING, DRGSCRL, _______, XXXXXXX,
|
|
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
|
|
KC_BTN2, KC_BTN1, KC_BTN3, KC_BTN3, KC_BTN1,
|
|
XXXXXXX, KC_BTN2, KC_BTN2
|
|
// ╰───────────────────────────╯ ╰──────────────────╯
|
|
),
|
|
};
|
|
// clang-format on
|
|
|
|
#ifdef POINTING_DEVICE_ENABLE
|
|
# ifdef CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
|
|
report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
|
|
if (abs(mouse_report.x) > CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD || abs(mouse_report.y) > CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD) {
|
|
if (auto_pointer_layer_timer == 0) {
|
|
layer_on(LAYER_POINTER);
|
|
# ifdef RGB_MATRIX_ENABLE
|
|
rgb_matrix_mode_noeeprom(RGB_MATRIX_NONE);
|
|
rgb_matrix_sethsv_noeeprom(HSV_GREEN);
|
|
# endif // RGB_MATRIX_ENABLE
|
|
}
|
|
auto_pointer_layer_timer = timer_read();
|
|
}
|
|
return mouse_report;
|
|
}
|
|
|
|
void matrix_scan_user(void) {
|
|
if (auto_pointer_layer_timer != 0 && TIMER_DIFF_16(timer_read(), auto_pointer_layer_timer) >= CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS) {
|
|
auto_pointer_layer_timer = 0;
|
|
layer_off(LAYER_POINTER);
|
|
# ifdef RGB_MATRIX_ENABLE
|
|
rgb_matrix_mode_noeeprom(RGB_MATRIX_STARTUP_MODE);
|
|
# endif // RGB_MATRIX_ENABLE
|
|
}
|
|
}
|
|
# endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
|
|
|
|
# ifdef CHARYBDIS_AUTO_SNIPING_ON_LAYER
|
|
layer_state_t layer_state_set_user(layer_state_t state) {
|
|
charybdis_set_pointer_sniping_enabled(layer_state_cmp(state, CHARYBDIS_AUTO_SNIPING_ON_LAYER));
|
|
return state;
|
|
}
|
|
# endif // CHARYBDIS_AUTO_SNIPING_ON_LAYER
|
|
#endif // POINTING_DEVICE_ENABLE
|
|
|
|
#ifdef RGB_MATRIX_ENABLE
|
|
// Forward-declare this helper function since it is defined in rgb_matrix.c.
|
|
void rgb_matrix_update_pwm_buffers(void);
|
|
#endif
|
|
|
|
void shutdown_user(void) {
|
|
#ifdef RGBLIGHT_ENABLE
|
|
rgblight_enable_noeeprom();
|
|
rgblight_mode_noeeprom(1);
|
|
rgblight_setrgb_red();
|
|
#endif // RGBLIGHT_ENABLE
|
|
#ifdef RGB_MATRIX_ENABLE
|
|
rgb_matrix_set_color_all(RGB_RED);
|
|
rgb_matrix_update_pwm_buffers();
|
|
#endif // RGB_MATRIX_ENABLE
|
|
}
|