diff options
author | imchipwood <charles.p.wood@intel.com> | 2021-03-04 20:25:19 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-04 20:25:19 -0800 |
commit | d7aa245c3343542381ae0e9eb1b77eadca74da57 (patch) | |
tree | 30bd44fcc70dc7e2c49ab23adeac81b903cc7121 /keyboards/dumbpad/v0x_dualencoder | |
parent | 2cb0b41ce7e9e9bc743451d7412a3114ec1d01b2 (diff) |
dumbpad refactor - adding support for various PCB revisions (#9259)
* Placeholder commit - Refactored to support different PCB revisions
Individual revision folders still need:
- info.json
- readme.md
all v0x folders support up to two LEDs for layer indication
all v1x folders support up to two LEDs for layer indication
plus one extra LED for numlock indication
v0x - supports single-encoder v0.x PCB revisions
v0x_right - supports reversible, single-encoder v0.x PCB revisions
v0x_dualencoder - supports dual-encoder v0.x PCB revisions
v1x - supports single-encoder v1.x PCB revisiions
v1x_right - supports reversible, single-encoder v1.x PCB revisions
* Added info.json and readme.md files for all dumbpad revisions
* More refactoring, adding shared config.h and rules.mk
Removed config.h from default keymap folders - defining TAPPING_TOGGLE in config.h
* Minor formatting fix
* MATRIX_COL_PINS for v1x_right was not reversed - changed to match v0x_right
* adding support for v1x dual encoder PCB
* adding alt-f2 tapdance routine for personal keymaps
* adding dumbpad build using teensy 2.0 instead of Pro Micro
* matched v1x dumbpad encoder and led pins to latest PCB revisions
* updated readme, removed v1x_teensy until someone requests it
* changed device name to match tmk udev rules, removed unnecessary ifdef
* removed user keymaps and folders
* missed hotdox keymap - removing
* fixing info.json keyboard_names for all versions
* Changed biton32 to get_highest_layer in keyboards/dumbpad/v0x/v0x.c
* keyboards/dumbpad/v0x/v0x.c - remove matrix_scan_kb, process_record_kb
* /dumbpad/v0x/keymaps/default/keymap.c - remove empty functions
* /dumbpad/v0x/keymaps/default/keymap.c - changed biton32 to get_highest_layer
* keyboards/dumbpad/v0x_dualencoder/keymaps/default/keymap.c - remove empty functions
* keyboards/dumbpad/v0x_right/readme.md - smaller board layout image
* keyboards/dumbpad/v1x_dualencoder/readme.md - smaller board image
* keyboards/dumbpad/v1x/readme.md - smaller board image
* keyboards/dumbpad/v1x_right/readme.md - smaller board image
* Update keyboards/dumbpad/rules.mk
* Apply suggestions from code review
Batch applying suggestions from review
* fixed removal of led_set_kb
* Implementing requested changes from old pull request 9259
* removing unused rules
* removed rules.mk from dumbpad base folder
* adding templates for each layout
* testing default keymap json
* Testing applying default keymap for dumbpad
* Layout correction: v1.x are 17 position pcb's
* Update keyboards/dumbpad/v0x/rules.mk
* Update keyboards/dumbpad/v0x/rules.mk
* Update keyboards/dumbpad/v0x_dualencoder/keymaps/default/keymap.c
* Update keyboards/dumbpad/v0x_dualencoder/rules.mk
* Update keyboards/dumbpad/v0x_dualencoder/rules.mk
* Update keyboards/dumbpad/v1x_dualencoder/rules.mk
* Update keyboards/dumbpad/v1x_dualencoder/templates/keymap.c
* Update keyboards/dumbpad/v1x_right/rules.mk
* Update keyboards/dumbpad/v1x_right/rules.mk
* Update keyboards/dumbpad/rules.mk
* Update keyboards/dumbpad/v0x_dualencoder/templates/keymap.c
* Update keyboards/dumbpad/v0x_right/rules.mk
* Update keyboards/dumbpad/v1x/rules.mk
* Update keyboards/dumbpad/v1x/rules.mk
* Update keyboards/dumbpad/v1x_dualencoder/keymaps/default/keymap.c
* Update keyboards/dumbpad/v1x_dualencoder/rules.mk
* Update keyboards/dumbpad/v0x_right/rules.mk
* Removing binary files
Diffstat (limited to 'keyboards/dumbpad/v0x_dualencoder')
-rw-r--r-- | keyboards/dumbpad/v0x_dualencoder/config.h | 40 | ||||
-rw-r--r-- | keyboards/dumbpad/v0x_dualencoder/info.json | 18 | ||||
-rw-r--r-- | keyboards/dumbpad/v0x_dualencoder/keymaps/default/keymap.c | 134 | ||||
-rw-r--r-- | keyboards/dumbpad/v0x_dualencoder/readme.md | 15 | ||||
-rw-r--r-- | keyboards/dumbpad/v0x_dualencoder/rules.mk | 25 | ||||
-rw-r--r-- | keyboards/dumbpad/v0x_dualencoder/templates/keymap.c | 43 | ||||
-rw-r--r-- | keyboards/dumbpad/v0x_dualencoder/v0x_dualencoder.c | 59 | ||||
-rw-r--r-- | keyboards/dumbpad/v0x_dualencoder/v0x_dualencoder.h | 30 |
8 files changed, 364 insertions, 0 deletions
diff --git a/keyboards/dumbpad/v0x_dualencoder/config.h b/keyboards/dumbpad/v0x_dualencoder/config.h new file mode 100644 index 0000000000..586e55056c --- /dev/null +++ b/keyboards/dumbpad/v0x_dualencoder/config.h @@ -0,0 +1,40 @@ +/* +Copyright 2020 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 <http://www.gnu.org/licenses/>. +*/ +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define DEVICE_VER 0x0006 + +/* Column/Row IO definitions - dualencoder version is true 4x4 */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 4 +#define MATRIX_ROW_PINS { F4, F5, F6, F7 } +#define MATRIX_COL_PINS { D7, E6, B4, B5 } + +/* Dual rotary encoders */ +#define ENCODERS_PAD_A { C6, D0 } +#define ENCODERS_PAD_B { D4, D1 } + +/* Onboard LEDs */ +#define LED_00 B3 +#define LED_01 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/v0x_dualencoder/info.json b/keyboards/dumbpad/v0x_dualencoder/info.json new file mode 100644 index 0000000000..09a7d14b95 --- /dev/null +++ b/keyboards/dumbpad/v0x_dualencoder/info.json @@ -0,0 +1,18 @@ +{ + "keyboard_name": "dumbpad/v0x_dualencoder", + "keyboard_folder": "dumbpad/v0x_dualencoder", + "url": "https://www.github.com/imchipwood/dumbpad", + "maintainer": "imchipwood", + "width": 4, + "height": 4, + "layouts": { + "LAYOUT": { + "layout": [ + {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, + {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, + {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, + {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3} + ] + } + } +} diff --git a/keyboards/dumbpad/v0x_dualencoder/keymaps/default/keymap.c b/keyboards/dumbpad/v0x_dualencoder/keymaps/default/keymap.c new file mode 100644 index 0000000000..59f36a1a91 --- /dev/null +++ b/keyboards/dumbpad/v0x_dualencoder/keymaps/default/keymap.c @@ -0,0 +1,134 @@ +/* Copyright 2020 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 <http://www.gnu.org/licenses/>. + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + BASE LAYER + /---------------------------------------` + | 7 | 8 | 9 | Bkspc | + |---------|---------|---------|---------| + | 4 | 5 | 6 | Esc | + |---------|---------|---------|---------| + | 1 | 2 | 3 | Tab | + |---------|---------|---------|---------| + | TT(1) | 0 | . | Enter | + \---------------------------------------' + */ + [0] = 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, + TT(1), KC_0, KC_DOT, KC_ENTER + ), + /* + SUB LAYER + /---------------------------------------` + | | | | Reset | + |---------|---------|---------|---------| + | | | | + | + |---------|---------|---------|---------| + | | | | - | + |---------|---------|---------|---------| + | | | | = | + \---------------------------------------' + */ + [1] = LAYOUT( + _______, _______, _______, RESET, + _______, _______, _______, KC_KP_PLUS, + _______, _______, _______, KC_KP_MINUS, + _______, _______, _______, KC_EQL + ), +}; + +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 encoder_update_user(uint8_t index, bool clockwise) { + /* Custom encoder control - handles CW/CCW turning of encoder + * Default behavior: + * left encoder: + * 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) + * right encoder: + * main layer: + * CW: colume up + * CCW: volume down + * other layers: + * CW: right arrow + * CCW: left arrow + */ + if (index == 0) { + switch (get_highest_layer(layer_state)) { + case 0: + // 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; + } + } else if (index == 1) { + switch (get_highest_layer(layer_state)) { + case 0: + // main layer - volume up (CW) and down (CCW) + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + break; + + default: + // other layers - right (CW) and left (CCW) + if (clockwise) { + tap_code(KC_RIGHT); + } else { + tap_code(KC_LEFT); + } + break; + } + } +} diff --git a/keyboards/dumbpad/v0x_dualencoder/readme.md b/keyboards/dumbpad/v0x_dualencoder/readme.md new file mode 100644 index 0000000000..a4aedb5824 --- /dev/null +++ b/keyboards/dumbpad/v0x_dualencoder/readme.md @@ -0,0 +1,15 @@ +# dumbpad v0.x dual-encoder + +![dumbpad](https://i.imgur.com/OkSRXWTl.jpg) + +A 4x4 numpad/macropad with two rotary encoders + +* Keyboard Maintainer: [imchipwood](https://github.com/imchipwood) +* Hardware repository: [dumbpad on github](https://github.com/imchipwood/dumbpad) +* PCB Revisions Supported: v0.6_dualencoder, v0.6_dualencoder_top + +Make example for this keyboard (after setting up your build environment): + + make dumbpad/v0x_dualencoder:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/dumbpad/v0x_dualencoder/rules.mk b/keyboards/dumbpad/v0x_dualencoder/rules.mk new file mode 100644 index 0000000000..309e3d48c0 --- /dev/null +++ b/keyboards/dumbpad/v0x_dualencoder/rules.mk @@ -0,0 +1,25 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +BOOTLOADER = caterina + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = yes # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +BLUETOOTH_ENABLE = no # Enable Bluetooth +AUDIO_ENABLE = no # Audio output + +ENCODER_ENABLE = yes +KEY_LOCK_ENABLE = yes diff --git a/keyboards/dumbpad/v0x_dualencoder/templates/keymap.c b/keyboards/dumbpad/v0x_dualencoder/templates/keymap.c new file mode 100644 index 0000000000..0c2be0aad4 --- /dev/null +++ b/keyboards/dumbpad/v0x_dualencoder/templates/keymap.c @@ -0,0 +1,43 @@ +#include QMK_KEYBOARD_H +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {__KEYMAP_GOES_HERE__}; + + +void encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { + switch (get_highest_layer(layer_state)) { + case 0: + if (clockwise) { + tap_code(KC_MS_R); + } else { + tap_code(KC_MS_L); + } + break; + + default: + if (clockwise) { + tap_code(KC_EQL); + } else { + tap_code(KC_MINS); + } + break; + } + } else if (index == 1) { + switch (get_highest_layer(layer_state)) { + case 0: + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + break; + + default: + if (clockwise) { + tap_code(KC_RIGHT); + } else { + tap_code(KC_LEFT); + } + break; + } + } +} diff --git a/keyboards/dumbpad/v0x_dualencoder/v0x_dualencoder.c b/keyboards/dumbpad/v0x_dualencoder/v0x_dualencoder.c new file mode 100644 index 0000000000..9b2a2cd241 --- /dev/null +++ b/keyboards/dumbpad/v0x_dualencoder/v0x_dualencoder.c @@ -0,0 +1,59 @@ +/* Copyright 2020 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 <http://www.gnu.org/licenses/>. + */ +#include "v0x_dualencoder.h" + +void keyboard_pre_init_kb(void) { + // Set LED IO as outputs + setPinOutput(LED_00); + setPinOutput(LED_01); + keyboard_pre_init_user(); +} + +void shutdown_user() { + // Shutdown LEDs + writePinLow(LED_00); + writePinLow(LED_01); +} + +layer_state_t layer_state_set_kb(layer_state_t state) { + // Layer LEDs act as binary indication of current layer + uint8_t layer = get_highest_layer(state); + writePin(LED_00, layer & 0b1); + writePin(LED_01, (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 + uint8_t led_delay_ms = 80; + for (int i = 0; i < 2; i++) { + writePinHigh(LED_00); + writePinHigh(LED_01); + wait_ms(led_delay_ms); + writePinLow(LED_00); + writePinLow(LED_01); + if (i < 1) { + wait_ms(led_delay_ms); + } + } + + matrix_init_user(); +} diff --git a/keyboards/dumbpad/v0x_dualencoder/v0x_dualencoder.h b/keyboards/dumbpad/v0x_dualencoder/v0x_dualencoder.h new file mode 100644 index 0000000000..f38d398857 --- /dev/null +++ b/keyboards/dumbpad/v0x_dualencoder/v0x_dualencoder.h @@ -0,0 +1,30 @@ +/* Copyright 2020 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 <http://www.gnu.org/licenses/>. + */ +#pragma once +#include "quantum.h" + +#define LAYOUT( \ + k00, k01, k02, k03, \ + k10, k11, k12, k13, \ + k20, k21, k22, k23, \ + k30, k31, k32, k33 \ +) \ +{ \ + { k00, k01, k02, k03 }, \ + { k10, k11, k12, k13 }, \ + { k20, k21, k22, k23 }, \ + { k30, k31, k32, k33 }, \ +} |