1
0
Fork 0

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
This commit is contained in:
imchipwood 2021-03-04 20:25:19 -08:00 committed by GitHub
parent 2cb0b41ce7
commit d7aa245c33
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
57 changed files with 2106 additions and 665 deletions

View file

@ -0,0 +1,42 @@
/*
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 0x0010
/* Column/Row IO definitions */
#define MATRIX_ROWS 4
#define MATRIX_COLS 5
#define MATRIX_ROW_PINS { F4, F5, F6, F7 }
#define MATRIX_COL_PINS { C6, D7, E6, B4, B5 }
#define UNUSED_PINS
/* Dual rotary encoders */
#define ENCODERS_PAD_A { B2, D0 }
#define ENCODERS_PAD_B { D4, D1 }
/* Onboard LEDs */
#define LED_00 B6
#define LED_01 B1
#define LED_02 B3
/* Bootmagic - hold down rotary encoder pushbutton while plugging in to enter bootloader */
#define BOOTMAGIC_LITE_ROW 3
#define BOOTMAGIC_LITE_COLUMN 0

View file

@ -0,0 +1,18 @@
{
"keyboard_name": "dumbpad/v1x_dualencoder",
"keyboard_folder": "dumbpad/v1x_dualencoder",
"url": "https://www.github.com/imchipwood/dumbpad",
"maintainer": "imchipwood",
"width": 5,
"height": 4,
"layouts": {
"LAYOUT": {
"layout": [
{"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0},
{"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1},
{"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2},
{"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}
]
}
}
}

View file

@ -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 |
|-------------|---------|---------|---------|---------|
| Left mouse | 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,
KC_BTN1, TT(1), KC_0, LSFT_T(KC_DOT), KC_ENTER
),
/*
SUB LAYER
/-----------------------------------------------------`
| | | | | Reset |
| |---------|---------|---------|---------|
| | | | | + |
| |---------|---------|---------|---------|
| | | | | - |
|-------------|---------|---------|---------|---------|
| LOCK | | | | = |
\-----------------------------------------------------'
*/
[1] = LAYOUT(
_______, _______, _______, RESET,
_______, _______, _______, KC_KP_PLUS,
_______, _______, _______, KC_KP_MINUS,
KC_LOCK, _______, _______, _______, 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;
}
}
}

View file

@ -0,0 +1,87 @@
# dumbpad v1.x dual-encoder
![dumbpad](https://i.imgur.com/s69rdfA.png)
## Single- vs Dual-Encoder Support
The combined Cherry MX/encoder sockets allow single- and dual-encoder configurations.
The only rule when using two encoders is that there cannot be two encoders on the left side at once, or two on the right side.
This table shows where the encoders are in the switch grid ("X" for encoder, "s" for switch):
| C0 | C1 | C2 | C3 | C4 |
|:---:|:---:|:---:|:---:|:---:|
| |__X__| s | s |__X__|
| | s | s | s | s |
| | s | s | s | s |
|__X__|__X__| s | s |__X__|
- The three encoders in columns C0 and C1 are connected to each other
- The two encoders in column C4 are connected to each other
So, if doing dual encoders, one must be in column C4 and the other in either C0 or C1. Three or more encoders will not work.
The following sections describe the configurations that the default keymaps in QMK are designed for.
### Single-Encoder (Default Configuration)
In the default configuration, the encoder is in column 0, the bottom left corner below the Pro Micro. All other sockets are filled with switches.
| C0 | C1 | C2 | C3 | C4 |
|:---:|:---:|:---:|:---:|:---:|
| | s | s | s | s |
| | s | s | s | s |
| | s | s | s | s |
|__X__| s | s | s | s |
![single encoder](https://i.imgur.com/8ZPz1gFl.jpg)
### Dual-Encoder Bottom
One dual-encoder configuration has encoders in the bottom two corners of the 4x4 grid, and switches in the rest of the grid. The socket in column 0 is left empty.
| C0 | C1 | C2 | C3 | C4 |
|:---:|:---:|:---:|:---:|:---:|
| | s | s | s | s |
| | s | s | s | s |
| | s | s | s | s |
| |__X__| s | s |__X__|
![dual-encoder bottom](https://i.imgur.com/QCqKDMSl.jpg)
### Dual-Encoder Top
Another dual-encoder configuration has encoders in the top two corners of the 4x4 grid, and switches in the rest of the grid. The socket in column 0 is left empty.
| C0 | C1 | C2 | C3 | C4 |
|:---:|:---:|:---:|:---:|:---:|
| |__X__| s | s |__X__|
| | s | s | s | s |
| | s | s | s | s |
| | s | s | s | s |
![dual-encoder top](https://i.imgur.com/Rq6ox2Ol.jpg)
### No-Encoder
You may also choose not to use any rotary encoders if you like!
### Bill Of Materials
- Cherry-style mechanical switches
- EC11 rotary encoder with pushbutton (7-pin) - one or two depending on your desired configuration
- 1n4148 diodes (thru hole) - one per switch and rotary encoder (if using clickable encoder(s))
- 1x Arduino Pro Micro or pin-compatible ATmega32u4-based MCU
- (optional) 3x 3mm LEDs
- (optional) 3x 330 ohm resistors (for limiting current in LEDs)
- (optional) 6mm SPST switch for resetting MCU
* Keyboard Maintainer: [imchipwood](https://github.com/imchipwood)
* Hardware repository: [dumbpad on github](https://github.com/imchipwood/dumbpad)
* PCB Revisions Supported: v1.0_dual
Make example for this keyboard (after setting up your build environment):
make dumbpad/v1x_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).

View file

@ -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

View file

@ -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;
}
}
}

View file

@ -0,0 +1,69 @@
/* 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 "v1x_dualencoder.h"
void keyboard_pre_init_kb(void) {
// Set LED IO as outputs
setPinOutput(LED_00);
setPinOutput(LED_01);
setPinOutput(LED_02);
keyboard_pre_init_user();
}
void shutdown_user() {
// Shutdown LEDs
writePinLow(LED_00);
writePinLow(LED_01);
writePinLow(LED_02);
}
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);
writePinHigh(LED_02);
wait_ms(led_delay_ms);
writePinLow(LED_00);
writePinLow(LED_01);
writePinLow(LED_02);
if (i < 1) {
wait_ms(led_delay_ms);
}
}
matrix_init_user();
}
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
writePin(LED_02, !IS_LED_ON(usb_led, USB_LED_NUM_LOCK));
led_set_user(usb_led);
}

View file

@ -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( \
k01, k02, k03, k04, \
k11, k12, k13, k14, \
k21, k22, k23, k24, \
k30, k31, k32, k33, k34 \
) \
{ \
{ KC_NO, k01, k02, k03, k04 }, \
{ KC_NO, k11, k12, k13, k14 }, \
{ KC_NO, k21, k22, k23, k24 }, \
{ k30, k31, k32, k33, k34 }, \
}