Full encoder support for Cheapino 2

This commit is contained in:
Thomas Haukland
2024-04-21 10:25:06 +02:00
parent 0d054118c3
commit 29e0e5fdd3
11 changed files with 66 additions and 210 deletions

View File

@@ -30,7 +30,7 @@ uint32_t flash_led(uint32_t next_trigger_time, void *cb_arg) {
void keyboard_post_init_user(void) {
debug_enable=true;
debug_matrix=true;
//debug_keyboard=true;
debug_keyboard=true;
//debug_mouse=true;
// Store user selected rgb hsv:
@@ -72,4 +72,4 @@ layer_state_t layer_state_set_user(layer_state_t state) {
rgblight_sethsv(hue, sat, val);
return state;
}
*/
*/

View File

@@ -3,22 +3,6 @@
#pragma once
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
#define WS2812_PIO_USE_PIO1 // Force the usage of PIO1 peripheral, by default the WS2812 implementation uses the PIO0 peripheral
//#define WS2812_TRST_US 80
@@ -29,7 +13,6 @@
// Pick good defaults for enabling homerow modifiers
#define TAPPING_TERM 230
#define WS2812_DI_PIN GP16 // The pin connected to the data pin of the LEDs
//#define RGBLIGHT_LED_COUNT 1 // The number of LEDs connected
#define RGBLED_NUM 1
@@ -41,3 +24,13 @@
// Unlock combo is two inner thumb keys.
#define VIAL_UNLOCK_COMBO_ROWS { 6, 2 }
#define VIAL_UNLOCK_COMBO_COLS { 11, 5 }
// How many "tents" should you turn per action
#define ENCODER_RESOLUTION 1
// These are just dummy definitions to make qmk compile
// // The actual encoder logic is handled manually in encoder.c
#define ENCODERS_PAD_A { GP12 }
#define ENCODERS_PAD_B { GP13 }
#define ENCODER_MAP_KEY_DELAY 10

View File

@@ -1,5 +1,7 @@
#include "matrix.h"
#include "quantum.h"
#include "rgblight.h"
#include "encoder.h"
#define COL_SHIFTER ((uint16_t)1)
@@ -9,37 +11,26 @@
#define ENC_BUTTON_COL 0
static bool colABPressed = false;
static bool encoderPressed = false;
void clicked(void) {
tap_code(KC_MPLY);
}
static uint16_t turns = 0;
static bool last_turn_clockwise;
void turned(bool clockwise) {
if (IS_LAYER_ON(6)) {
tap_code(clockwise ? KC_VOLU : KC_VOLD);
} else if (IS_LAYER_ON(3)) {
tap_code16(clockwise ? LCTL(KC_TAB) : LCTL(LSFT(KC_TAB)));
} else if (IS_LAYER_ON(5)) {
tap_code16(clockwise ? LGUI(KC_Y) : LGUI(KC_Z));
} else {
tap_code16(clockwise ? KC_PGDN : KC_PGUP);
if (clockwise != last_turn_clockwise) {
// Switched way, reset counter
last_turn_clockwise = clockwise;
turns = 0;
}
turns++;
if (!(turns%ENCODER_RESOLUTION == 0)) {
return;
}
encoder_exec_mapping(0, clockwise);
}
void fix_encoder_action(matrix_row_t current_matrix[]) {
matrix_row_t encoder_row = current_matrix[ENC_ROW];
if (encoder_row & (COL_SHIFTER << ENC_BUTTON_COL)) {
encoderPressed = true;
} else {
// Only trigger click on release
if (encoderPressed) {
encoderPressed = false;
clicked();
}
}
// Check which way the encoder is turned:
bool colA = encoder_row & (COL_SHIFTER << ENC_A_COL);
bool colB = encoder_row & (COL_SHIFTER << ENC_B_COL);
@@ -59,5 +50,4 @@ void fix_encoder_action(matrix_row_t current_matrix[]) {
turned(false);
}
}
current_matrix[ENC_ROW] = 0;
}

View File

@@ -86,7 +86,9 @@
{ "matrix": [0, 5], "x": 6.5, "y": 3.75 },
{ "matrix": [1, 5], "x": 7.5, "y": 3.5 },
{ "matrix": [2, 5], "x": 8.5, "y": 3.25 }
{ "matrix": [2, 5], "x": 8.5, "y": 3.25 },
{ "matrix": [3, 0], "x": 8.5, "y": 3.25 }
]
}
}

View File

@@ -0,0 +1,28 @@
#include QMK_KEYBOARD_H
/* THIS FILE WAS GENERATED!
*
* This file was generated by qmk json2c. You may or may not want to
* edit it directly.
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_split_3x5_3(KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LGUI, KC_SPC, MO(1), MO(2), KC_ENT, KC_RALT, KC_MPLY),
[1] = LAYOUT_split_3x5_3(KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LGUI, KC_SPC, KC_TRNS, MO(3), KC_ENT, KC_RALT, KC_MPLY),
[2] = LAYOUT_split_3x5_3(KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_LGUI, KC_SPC, MO(3), KC_TRNS, KC_ENT, KC_RALT, KC_MPLY),
[3] = LAYOUT_split_3x5_3(KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LGUI, KC_SPC, KC_TRNS, KC_TRNS, KC_ENT, KC_RALT, KC_MPLY)
};
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN)},
[1] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI) },
[2] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
[3] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) }
// Encoder 1 Encoder 2
};

View File

@@ -1,163 +0,0 @@
{
"version": 1,
"notes": "Cheapino default keymap",
"documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
"keyboard": "bastardkb/skeletyl/blackpill",
"keymap": "via",
"layout": "LAYOUT_split_3x5_3",
"layers": [
[
"KC_Q",
"KC_W",
"KC_E",
"KC_R",
"KC_T",
"KC_Y",
"KC_U",
"KC_I",
"KC_O",
"KC_P",
"LGUI_T(KC_A)",
"LALT_T(KC_S)",
"LCTL_T(KC_D)",
"LSFT_T(KC_F)",
"KC_G",
"KC_H",
"RSFT_T(KC_J)",
"LCTL_T(KC_K)",
"LALT_T(KC_L)",
"LGUI_T(KC_SCLN)",
"KC_Z",
"KC_X",
"KC_C",
"KC_V",
"KC_B",
"LT(1,KC_N)",
"KC_M",
"KC_COMM",
"KC_DOT",
"KC_SLSH",
"KC_ESC",
"LT(3,KC_SPC)",
"KC_TAB",
"LT(1,KC_DEL)",
"LT(2,KC_BSPC)",
"KC_ENT"
],
[
"KC_VOLU",
"KC_WH_L",
"KC_MS_U",
"KC_WH_U",
"KC_WH_R",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"ANY(QK_RBT)",
"KC_MS_L",
"KC_BTN2",
"KC_BTN1",
"KC_MS_R",
"KC_MUTE",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_VOLD",
"KC_MNXT",
"KC_MS_D",
"KC_WH_D",
"KC_MPLY",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_NO",
"KC_NO",
"KC_NO"
],
[
"KC_NO",
"KC_HOME",
"KC_DEL",
"KC_PGUP",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_LEFT",
"KC_UP",
"KC_RGHT",
"KC_NO",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_NO",
"KC_END",
"KC_DOWN",
"KC_PGDN",
"KC_NO",
"KC_NO",
"KC_BTN1",
"KC_BTN2",
"KC_BTN3",
"KC_BTN4",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_NO",
"KC_NO",
"KC_NO"
],
[
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_WH_U",
"KC_AT",
"KC_UNDS",
"KC_PIPE",
"KC_GRV",
"KC_PERC",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"RGB_TOG",
"KC_HASH",
"KC_TAB",
"KC_EXLM",
"KC_DQUO",
"KC_DLR",
"KC_BTN4",
"KC_BTN3",
"KC_BTN2",
"KC_BTN1",
"KC_WH_D",
"KC_TILD",
"KC_QUOT",
"KC_BSLS",
"KC_SLSH",
"KC_AMPR",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_TRNS",
"KC_TRNS",
"KC_NO"
]
],
"author": "thomas.haukland@gmail.com"
}

View File

@@ -0,0 +1 @@
ENCODER_MAP_ENABLE = yes

View File

@@ -25,7 +25,10 @@
[{"r":18,"rx":5.4,"ry":5,"y":-1,"x":2},"4,11"],
[{"r": 0,"rx":9.3,"ry":5.4,"y":-1,"x":2},"2,5"],
[{"r": -9,"rx":9.3,"ry":5.7,"y":-1,"x":1},"1,5"],
[{"r": -18,"rx":9.3,"ry":5.9,"y":-1,"x":0},"0,5"]
[{"r": -18,"rx":9.3,"ry":5.9,"y":-1,"x":0},"0,5"],
[{"r":0,"y":-4.2,"x":-0.5},"0,0\n\n\n\n\n\n\n\n\ne"],
[{"r":0,"y":-1,"x":0.5},"0,1\n\n\n\n\n\n\n\n\ne"],
[{"r":0,"y":0,"x":0},"3,0"]
]
}
}

View File

@@ -5,6 +5,7 @@ RGBLIGHT_ENABLE = yes
DEFERRED_EXEC_ENABLE = yes
VIA_ENABLE = yes
VIAL_ENABLE = yes
VIAL_INSECURE = yet
VIAL_INSECURE = yes
ENCODER_ENABLE = yes
SRC += encoder.c
SRC += matrix.c

View File

@@ -172,7 +172,7 @@ void encoder_init(void) {
}
#ifdef ENCODER_MAP_ENABLE
static void encoder_exec_mapping(uint8_t index, bool clockwise) {
__attribute__((weak)) void encoder_exec_mapping(uint8_t index, bool clockwise) {
// The delays below cater for Windows and its wonderful requirements.
action_exec(clockwise ? MAKE_ENCODER_CW_EVENT(index, true) : MAKE_ENCODER_CCW_EVENT(index, true));
# if ENCODER_MAP_KEY_DELAY > 0

View File

@@ -27,6 +27,7 @@ bool encoder_read(void);
bool encoder_update_kb(uint8_t index, bool clockwise);
bool encoder_update_user(uint8_t index, bool clockwise);
void encoder_exec_mapping(uint8_t index, bool clockwise);
#ifdef SPLIT_KEYBOARD