From 977c316eb1bdca7f0e13026936322cb9a9fcd0d2 Mon Sep 17 00:00:00 2001 From: imchipwood Date: Tue, 20 Aug 2019 22:08:30 -0700 Subject: [PATCH] [Keymap] dumbpad updates, new keymap (#6481) * removed some debug prints * removed unnecessary files, tweaked some things * rotary encoder button now connected into column 0, row 3 * tweaked keymap and moved encoder control into keymap * tweaks * added test keymap * updated some things to make it easier to work with QMK configurator * updates after merging latest master in * fixed a few things * removed test keymap and all related #ifdefs * changed some dumbpad default keys, added KC_LOCK * added image to readme * added link to PCB github repo * moved lock key to the rotary encoder pushbutton * making suggested changes from @fauxpark in https://github.com/qmk/qmk_firmware/pull/6452 * adding bootmagic lite since i'm lazy and haven't soldered on the reset button... * renamed to * using 7 underscores for KC_TRNS * adding my layout (default is for wife) * updated my own layout, tweaked default keymap to use cleaner switch for encoder control * removed commented out import from imchipwood keymap, removed unnecessary comment from default layout * added LED layer control * flash the layer indicator LEDs at startup * change layer_state_set_user to layer_state_set_kb Co-Authored-By: Joel Challis * in layer_state_set_kb, return layer_state_set_user Co-Authored-By: Drashna Jaelre * remove include of upper level config.h, add pragma once Co-Authored-By: Drashna Jaelre * changing default keymap slightly, added config.h for default layout * change _delay_ms to wait_ms * replaced locking numlock with numlock * Update keyboards/dumbpad/dumbpad.c change `keyboard_pre_init_user` to `keyboard_pre_init_kb` Co-Authored-By: Joel Challis * Update keyboards/dumbpad/dumbpad.c adding `keyboard_pre_init_user()` to `keyboard_pre_init_kb()` Co-Authored-By: Joel Challis * fixed some comments about the layer key (MO to TT) and the SUB layer rotary encoder control --- keyboards/dumbpad/config.h | 4 + keyboards/dumbpad/dumbpad.c | 40 ++++- keyboards/dumbpad/keymaps/default/config.h | 2 + keyboards/dumbpad/keymaps/default/keymap.c | 45 +++-- keyboards/dumbpad/keymaps/imchipwood/config.h | 2 + keyboards/dumbpad/keymaps/imchipwood/keymap.c | 163 ++++++++++++++++++ 6 files changed, 237 insertions(+), 19 deletions(-) create mode 100644 keyboards/dumbpad/keymaps/default/config.h create mode 100644 keyboards/dumbpad/keymaps/imchipwood/config.h create mode 100644 keyboards/dumbpad/keymaps/imchipwood/keymap.c diff --git a/keyboards/dumbpad/config.h b/keyboards/dumbpad/config.h index a7d4e7b3c8..3c27a35b28 100644 --- a/keyboards/dumbpad/config.h +++ b/keyboards/dumbpad/config.h @@ -51,6 +51,10 @@ along with this program. If not, see . #define ENCODERS_PAD_A { D0 } #define ENCODERS_PAD_B { D4 } +/* LED layer indicators */ +#define LAYER_INDICATOR_LED_0 B3 +#define LAYER_INDICATOR_LED_1 B1 + /* Bootmagic - hold down rotary encoder pushbutton while plugging in to enter bootloader */ #define BOOTMAGIC_LITE_ROW 3 #define BOOTMAGIC_LITE_COLUMN 0 diff --git a/keyboards/dumbpad/dumbpad.c b/keyboards/dumbpad/dumbpad.c index b53856237c..d9b649c715 100644 --- a/keyboards/dumbpad/dumbpad.c +++ b/keyboards/dumbpad/dumbpad.c @@ -15,15 +15,49 @@ */ #include "dumbpad.h" +void keyboard_pre_init_kb(void) { + // Set the layer LED IO as outputs + setPinOutput(LAYER_INDICATOR_LED_0); + setPinOutput(LAYER_INDICATOR_LED_1); + + keyboard_pre_init_user(); +} + +void shutdown_user() { + // Shutdown the layer LEDs + writePinLow(LAYER_INDICATOR_LED_0); + writePinLow(LAYER_INDICATOR_LED_1); +} + +layer_state_t layer_state_set_kb(layer_state_t state) { + // Layer LEDs act as binary indication of current layer + uint8_t layer = biton32(state); + writePin(LAYER_INDICATOR_LED_0, layer & 0b1); + writePin(LAYER_INDICATOR_LED_1, (layer >> 1) & 0b1); + return layer_state_set_user(state); +} + // Optional override functions below. // You can leave any or all of these undefined. // These are only required if you want to perform custom actions. -/* - void matrix_init_kb(void) { // put your keyboard start-up code here // runs once when the firmware starts up + for (int i = 0; i < 2; i++) { + writePin(LAYER_INDICATOR_LED_0, true); + writePin(LAYER_INDICATOR_LED_1, false); + wait_ms(100); + writePin(LAYER_INDICATOR_LED_0, true); + writePin(LAYER_INDICATOR_LED_1, true); + wait_ms(100); + writePin(LAYER_INDICATOR_LED_0, false); + writePin(LAYER_INDICATOR_LED_1, true); + wait_ms(100); + writePin(LAYER_INDICATOR_LED_0, false); + writePin(LAYER_INDICATOR_LED_1, false); + wait_ms(100); + } matrix_init_user(); } @@ -47,5 +81,3 @@ void led_set_kb(uint8_t usb_led) { led_set_user(usb_led); } - -*/ diff --git a/keyboards/dumbpad/keymaps/default/config.h b/keyboards/dumbpad/keymaps/default/config.h new file mode 100644 index 0000000000..8380885593 --- /dev/null +++ b/keyboards/dumbpad/keymaps/default/config.h @@ -0,0 +1,2 @@ +#pragma once +#define TAPPING_TOGGLE 2 diff --git a/keyboards/dumbpad/keymaps/default/keymap.c b/keyboards/dumbpad/keymaps/default/keymap.c index 061215a61b..c0d4a7c077 100644 --- a/keyboards/dumbpad/keymaps/default/keymap.c +++ b/keyboards/dumbpad/keymaps/default/keymap.c @@ -28,14 +28,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |---------|---------|---------|---------| | | 1 | 2 | 3 | Tab | |-------------|---------|---------|---------|---------| - | Left mouse | MO(SUB) | 0 | . | Enter | + | Left mouse | TT(SUB) | 0 | . | Enter | \-----------------------------------------------------' */ - [_BASE] = LAYOUT( /* Base */ + [_BASE] = LAYOUT( KC_7, KC_8, KC_9, KC_BSPC, KC_4, KC_5, KC_6, KC_ESC, KC_1, KC_2, KC_3, KC_TAB, - KC_BTN1, MO(_SUB), KC_0, KC_DOT, KC_ENTER + KC_BTN1, TT(_SUB), KC_0, KC_DOT, KC_ENTER ), /* SUB LAYER @@ -88,19 +88,34 @@ void led_set_user(uint8_t usb_led) { } void encoder_update_user(uint8_t index, bool clockwise) { + /* Custom encoder control - handles CW/CCW turning of encoder + * Default behavior: + * main layer: + * CW: move mouse right + * CCW: move mouse left + * other layers: + * CW: = (equals/plus - increase slider in Adobe products) + * CCW: - (minus/underscore - decrease slider in adobe products) + */ if (index == 0) { - if (layer_state && 0x1) { - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } else { - if (clockwise) { - tap_code(KC_MS_R); - } else { - tap_code(KC_MS_L); - } + switch (biton32(layer_state)) { + case _BASE: + // main layer - move mouse right (CW) and left (CCW) + if (clockwise) { + tap_code(KC_MS_R); + } else { + tap_code(KC_MS_L); + } + break; + + default: + // other layers - =/+ (quals/plus) (CW) and -/_ (minus/underscore) (CCW) + if (clockwise) { + tap_code(KC_EQL); + } else { + tap_code(KC_MINS); + } + break; } } } diff --git a/keyboards/dumbpad/keymaps/imchipwood/config.h b/keyboards/dumbpad/keymaps/imchipwood/config.h new file mode 100644 index 0000000000..8380885593 --- /dev/null +++ b/keyboards/dumbpad/keymaps/imchipwood/config.h @@ -0,0 +1,2 @@ +#pragma once +#define TAPPING_TOGGLE 2 diff --git a/keyboards/dumbpad/keymaps/imchipwood/keymap.c b/keyboards/dumbpad/keymaps/imchipwood/keymap.c new file mode 100644 index 0000000000..73a8e824ca --- /dev/null +++ b/keyboards/dumbpad/keymaps/imchipwood/keymap.c @@ -0,0 +1,163 @@ +/* Copyright 2019 imchipwood + * + * 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 QMK_KEYBOARD_H + +#define _BASE 0 +#define _SUB 1 +#define _DBG 2 + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + BASE LAYER + /-----------------------------------------------------` + | | 7 | 8 | 9 | Bkspc | + | |---------|---------|---------|---------| + | | 4 | 5 | 6 | + | + | |---------|---------|---------|---------| + | | 1 | 2 | 3 | * | + |-------------|---------|---------|---------|---------| + | Play/Pause | TT(SUB) | 0 | . | Enter | + \-----------------------------------------------------' + */ + [_BASE] = LAYOUT( + KC_P7, KC_P8, KC_P9, KC_BSPC, + KC_P4, KC_P5, KC_P6, KC_KP_PLUS, + KC_P1, KC_P2, KC_P3, KC_KP_ASTERISK, + KC_MPLY, TT(_SUB), KC_P0, KC_PDOT, KC_KP_ENTER + ), + /* + SUB LAYER + /-----------------------------------------------------` + | | | | | Numlock | + | |---------|---------|---------|---------| + | | | | | - | + | |---------|---------|---------|---------| + | | | | | / | + |-------------|---------|---------|---------|---------| + | MO(_DBG) | | | | = | + \-----------------------------------------------------' + */ + [_SUB] = LAYOUT( + _______, _______, _______, KC_NLCK, + _______, _______, _______, KC_KP_MINUS, + _______, _______, _______, KC_KP_SLASH, + MO(_DBG), _______, _______, _______, KC_KP_EQUAL + ), + /* + DEBUG LAYER + /-----------------------------------------------------` + | | | | | Reset | + | |---------|---------|---------|---------| + | | | | | | + | |---------|---------|---------|---------| + | | | | | | + |-------------|---------|---------|---------|---------| + | | | | | | + \-----------------------------------------------------' + */ + [_DBG] = LAYOUT( + _______, _______, _______, RESET, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, _______ + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + // If console is enabled, it will print the matrix position and status of each key pressed +/* +#ifdef CONSOLE_ENABLE + uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed); +#endif +*/ + return true; +} + +void keyboard_post_init_user(void) { + // Customise these values to desired behaviour + //debug_enable = true; + //debug_matrix = true; + //debug_keyboard = true; + //debug_mouse = true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} + + +void encoder_update_user(uint8_t index, bool clockwise) { + /* Custom encoder control - handles CW/CCW turning of encoder + * Cusotom behavior: + * main layer: + * CW: volume up + * CCW: volume down + * sub layer: + * CW: next media track + * CCW: prev media track + * debug layer: + * CW: brightness up + * CCW: brightness down + */ + if (index == 0) { + switch (biton32(layer_state)) { + case _BASE: + // main layer - volume up (CW) and down (CCW) + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + break; + + case _SUB: + // sub layer - next track (CW) and previous track (CCW) + if (clockwise) { + tap_code(KC_MNXT); + } else { + tap_code(KC_MPRV); + } + break; + + case _DBG: + // debug layer - brightness up (CW) and brightness down (CCW) + if (clockwise) { + tap_code(KC_BRIU); + } else { + tap_code(KC_BRID); + } + break; + + default: + // any other layer (shouldn't exist..) - volume up (CW) and down (CCW) + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + break; + } + } +}