Co-authored-by: jack <0x6a73@protonmail.com>pull/19880/head
@ -0,0 +1,28 @@ | |||
/* | |||
Copyright 2023 ThePanduuh <thepanduuh.kb@gmail.com> | |||
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 | |||
// ROWS: Top to bottom, COLS: Left to right | |||
#define MATRIX_ROW_PINS { D5, D6, D7, B4, B5, B6 } | |||
#define MATRIX_COL_PINS { F4, F5, B1, D3 } | |||
#define ENCODERS_PAD_A { F1 } | |||
#define ENCODERS_PAD_B { F0 } | |||
/* COL2ROW or ROW2COL */ | |||
#define DIODE_DIRECTION COL2ROW |
@ -0,0 +1,31 @@ | |||
/* | |||
Copyright 2023 ThePanduuh <thepanduuh.kb@gmail.com> | |||
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 "degenpad.h" | |||
#ifdef ENCODER_ENABLE | |||
bool encoder_update_kb(uint8_t index, bool clockwise) { | |||
if (!encoder_update_user(index, clockwise)) { return false; } | |||
if (index == 0) { | |||
if (clockwise) { | |||
tap_code_delay(KC_VOLU, 10); | |||
} else { | |||
tap_code_delay(KC_VOLD, 10); | |||
} | |||
} | |||
return true; | |||
} | |||
#endif |
@ -0,0 +1,136 @@ | |||
/* | |||
Copyright 2023 ThePanduuh <thepanduuh.kb@gmail.com> | |||
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_ortho_6x4( \ | |||
k00, k01, k02, k03, \ | |||
k10, k11, k12, k13, \ | |||
k20, k21, k22, k23, \ | |||
k30, k31, k32, k33, \ | |||
k40, k41, k42, k43, \ | |||
k50, k51, k52, k53 \ | |||
) { \ | |||
{k00, k01, k02, k03}, \ | |||
{k10, k11, k12, k13}, \ | |||
{k20, k21, k22, k23}, \ | |||
{k30, k31, k32, k33}, \ | |||
{k40, k41, k42, k43}, \ | |||
{k50, k51, k52, k53} \ | |||
} | |||
#define LAYOUT_numpad_6x4( \ | |||
k00, k01, k02, k03, \ | |||
k10, k11, k12, k13, \ | |||
k20, k21, k22, \ | |||
k30, k31, k32, k33, \ | |||
k40, k41, k42, \ | |||
k51, k52, k53 \ | |||
) \ | |||
{ \ | |||
{k00, k01, k02, k03}, \ | |||
{k10, k11, k12, k13}, \ | |||
{k20, k21, k22, KC_NO}, \ | |||
{k30, k31, k32, k33}, \ | |||
{k40, k41, k42, KC_NO}, \ | |||
{KC_NO, k51, k52, k53} \ | |||
} | |||
#define LAYOUT_split_plus( \ | |||
k00, k01, k02, k03, \ | |||
k10, k11, k12, k13, \ | |||
k20, k21, k22, k23, \ | |||
k30, k31, k32, k33, \ | |||
k40, k41, k42, \ | |||
k51, k52, k53 \ | |||
) \ | |||
{ \ | |||
{k00, k01, k02, k03}, \ | |||
{k10, k11, k12, k13}, \ | |||
{k20, k21, k22, k23}, \ | |||
{k30, k31, k32, k33}, \ | |||
{k40, k41, k42, KC_NO}, \ | |||
{KC_NO, k51, k52, k53} \ | |||
} | |||
#define LAYOUT_split_zero( \ | |||
k00, k01, k02, k03, \ | |||
k10, k11, k12, k13, \ | |||
k20, k21, k22, \ | |||
k30, k31, k32, k33, \ | |||
k40, k41, k42, \ | |||
k50, k51, k52, k53 \ | |||
) \ | |||
{ \ | |||
{k00, k01, k02, k03}, \ | |||
{k10, k11, k12, k13}, \ | |||
{k20, k21, k22, KC_NO}, \ | |||
{k30, k31, k32, k33}, \ | |||
{k40, k41, k42, KC_NO}, \ | |||
{k50, k51, k52, k53} \ | |||
} | |||
#define LAYOUT_split_enter( \ | |||
k00, k01, k02, k03, \ | |||
k10, k11, k12, k13, \ | |||
k20, k21, k22, \ | |||
k30, k31, k32, k33, \ | |||
k40, k41, k42, k43, \ | |||
k51, k52, k53 \ | |||
) \ | |||
{ \ | |||
{k00, k01, k02, k03}, \ | |||
{k10, k11, k12, k13}, \ | |||
{k20, k21, k22, KC_NO}, \ | |||
{k30, k31, k32, k33}, \ | |||
{k40, k41, k42, k43}, \ | |||
{KC_NO, k51, k52, k53} \ | |||
} | |||
#define LAYOUT_split_enter_plus( \ | |||
k00, k01, k02, k03, \ | |||
k10, k11, k12, k13, \ | |||
k20, k21, k22, k23, \ | |||
k30, k31, k32, k33, \ | |||
k40, k41, k42, k43, \ | |||
k51, k52, k53 \ | |||
) \ | |||
{ \ | |||
{k00, k01, k02, k03}, \ | |||
{k10, k11, k12, k13}, \ | |||
{k20, k21, k22, k23}, \ | |||
{k30, k31, k32, k33}, \ | |||
{k40, k41, k42, k43}, \ | |||
{KC_NO, k51, k52, k53} \ | |||
} | |||
#define LAYOUT_split_zero_plus( \ | |||
k00, k01, k02, k03, \ | |||
k10, k11, k12, k13, \ | |||
k20, k21, k22, k23, \ | |||
k30, k31, k32, k33, \ | |||
k40, k41, k42, \ | |||
k50, k51, k52, k53 \ | |||
) \ | |||
{ \ | |||
{k00, k01, k02, k03}, \ | |||
{k10, k11, k12, k13}, \ | |||
{k20, k21, k22, k23}, \ | |||
{k30, k31, k32, k33}, \ | |||
{k40, k41, k42, KC_NO}, \ | |||
{k50, k51, k52, k53} \ | |||
} |
@ -0,0 +1,235 @@ | |||
{ | |||
"keyboard_name": "Degenpad", | |||
"manufacturer": "ThePanduuh", | |||
"url": "https://github.com/ThePanduuh", | |||
"maintainer": "ThePanduuh", | |||
"usb": { | |||
"vid": "0x4A44", | |||
"pid": "0x4447", | |||
"device_version": "1.0.0" | |||
}, | |||
"processor": "atmega32u4", | |||
"bootloader": "atmel-dfu", | |||
"layouts": { | |||
"LAYOUT_ortho_6x4": { | |||
"layout": [ | |||
{"x": 0, "y": 0}, | |||
{"x": 1, "y": 0}, | |||
{"x": 2, "y": 0}, | |||
{"x": 3, "y": 0}, | |||
{"x": 0, "y": 1.25}, | |||
{"x": 1, "y": 1.25}, | |||
{"x": 2, "y": 1.25}, | |||
{"x": 3, "y": 1.25}, | |||
{"x": 0, "y": 2.25}, | |||
{"x": 1, "y": 2.25}, | |||
{"x": 2, "y": 2.25}, | |||
{"x": 3, "y": 2.25}, | |||
{"x": 0, "y": 3.25}, | |||
{"x": 1, "y": 3.25}, | |||
{"x": 2, "y": 3.25}, | |||
{"x": 3, "y": 3.25}, | |||
{"x": 0, "y": 4.25}, | |||
{"x": 1, "y": 4.25}, | |||
{"x": 2, "y": 4.25}, | |||
{"x": 3, "y": 4.25}, | |||
{"x": 0, "y": 5.25}, | |||
{"x": 1, "y": 5.25}, | |||
{"x": 2, "y": 5.25}, | |||
{"x": 3, "y": 5.25} | |||
] | |||
}, | |||
"LAYOUT_numpad_6x4": { | |||
"layout": [ | |||
{"x": 0, "y": 0}, | |||
{"x": 1, "y": 0}, | |||
{"x": 2, "y": 0}, | |||
{"x": 3, "y": 0}, | |||
{"x": 0, "y": 1.25}, | |||
{"x": 1, "y": 1.25}, | |||
{"x": 2, "y": 1.25}, | |||
{"x": 3, "y": 1.25}, | |||
{"x": 0, "y": 2.25}, | |||
{"x": 1, "y": 2.25}, | |||
{"x": 2, "y": 2.25}, | |||
{"x": 0, "y": 3.25}, | |||
{"x": 1, "y": 3.25}, | |||
{"x": 2, "y": 3.25}, | |||
{"x": 3, "y": 2.25, "h": 2}, | |||
{"x": 0, "y": 4.25}, | |||
{"x": 1, "y": 4.25}, | |||
{"x": 2, "y": 4.25}, | |||
{"x": 0, "y": 5.25, "w": 2}, | |||
{"x": 2, "y": 5.25}, | |||
{"x": 3, "y": 4.25, "h": 2} | |||
] | |||
}, | |||
"LAYOUT_split_plus": { | |||
"layout": [ | |||
{"x": 0, "y": 0}, | |||
{"x": 1, "y": 0}, | |||
{"x": 2, "y": 0}, | |||
{"x": 3, "y": 0}, | |||
{"x": 0, "y": 1.25}, | |||
{"x": 1, "y": 1.25}, | |||
{"x": 2, "y": 1.25}, | |||
{"x": 3, "y": 1.25}, | |||
{"x": 0, "y": 2.25}, | |||
{"x": 1, "y": 2.25}, | |||
{"x": 2, "y": 2.25}, | |||
{"x": 3, "y": 2.25}, | |||
{"x": 0, "y": 3.25}, | |||
{"x": 1, "y": 3.25}, | |||
{"x": 2, "y": 3.25}, | |||
{"x": 3, "y": 3.25}, | |||
{"x": 0, "y": 4.25}, | |||
{"x": 1, "y": 4.25}, | |||
{"x": 2, "y": 4.25}, | |||
{"x": 0, "y": 5.25, "w": 2}, | |||
{"x": 2, "y": 5.25}, | |||
{"x": 3, "y": 4.25, "h": 2} | |||
] | |||
}, | |||
"LAYOUT_split_zero": { | |||
"layout": [ | |||
{"x": 0, "y": 0}, | |||
{"x": 1, "y": 0}, | |||
{"x": 2, "y": 0}, | |||
{"x": 3, "y": 0}, | |||
{"x": 0, "y": 1.25}, | |||
{"x": 1, "y": 1.25}, | |||
{"x": 2, "y": 1.25}, | |||
{"x": 3, "y": 1.25}, | |||
{"x": 0, "y": 2.25}, | |||
{"x": 1, "y": 2.25}, | |||
{"x": 2, "y": 2.25}, | |||
{"x": 0, "y": 3.25}, | |||
{"x": 1, "y": 3.25}, | |||
{"x": 2, "y": 3.25}, | |||
{"x": 3, "y": 2.25, "h": 2}, | |||
{"x": 0, "y": 4.25}, | |||
{"x": 1, "y": 4.25}, | |||
{"x": 2, "y": 4.25}, | |||
{"x": 0, "y": 5.25}, | |||
{"x": 1, "y": 5.25}, | |||
{"x": 2, "y": 5.25}, | |||
{"x": 3, "y": 4.25, "h": 2} | |||
] | |||
}, | |||
"LAYOUT_split_enter": { | |||
"layout": [ | |||
{"x": 0, "y": 0}, | |||
{"x": 1, "y": 0}, | |||
{"x": 2, "y": 0}, | |||
{"x": 3, "y": 0}, | |||
{"x": 0, "y": 1.25}, | |||
{"x": 1, "y": 1.25}, | |||
{"x": 2, "y": 1.25}, | |||
{"x": 3, "y": 1.25}, | |||
{"x": 0, "y": 2.25}, | |||
{"x": 1, "y": 2.25}, | |||
{"x": 2, "y": 2.25}, | |||
{"x": 0, "y": 3.25}, | |||
{"x": 1, "y": 3.25}, | |||
{"x": 2, "y": 3.25}, | |||
{"x": 3, "y": 2.25, "h": 2}, | |||
{"x": 0, "y": 4.25}, | |||
{"x": 1, "y": 4.25}, | |||
{"x": 2, "y": 4.25}, | |||
{"x": 3, "y": 4.25}, | |||
{"x": 0, "y": 5.25, "w": 2}, | |||
{"x": 2, "y": 5.25}, | |||
{"x": 3, "y": 5.25} | |||
] | |||
}, | |||
"LAYOUT_split_enter_plus": { | |||
"layout": [ | |||
{"x": 0, "y": 0}, | |||
{"x": 1, "y": 0}, | |||
{"x": 2, "y": 0}, | |||
{"x": 3, "y": 0}, | |||
{"x": 0, "y": 1.25}, | |||
{"x": 1, "y": 1.25}, | |||
{"x": 2, "y": 1.25}, | |||
{"x": 3, "y": 1.25}, | |||
{"x": 0, "y": 2.25}, | |||
{"x": 1, "y": 2.25}, | |||
{"x": 2, "y": 2.25}, | |||
{"x": 3, "y": 2.25}, | |||
{"x": 0, "y": 3.25}, | |||
{"x": 1, "y": 3.25}, | |||
{"x": 2, "y": 3.25}, | |||
{"x": 3, "y": 3.25}, | |||
{"x": 0, "y": 4.25}, | |||
{"x": 1, "y": 4.25}, | |||
{"x": 2, "y": 4.25}, | |||
{"x": 3, "y": 4.25}, | |||
{"x": 0, "y": 5.25, "w": 2}, | |||
{"x": 2, "y": 5.25}, | |||
{"x": 3, "y": 5.25} | |||
] | |||
}, | |||
"LAYOUT_split_zero_plus": { | |||
"layout": [ | |||
{"x": 0, "y": 0}, | |||
{"x": 1, "y": 0}, | |||
{"x": 2, "y": 0}, | |||
{"x": 3, "y": 0}, | |||
{"x": 0, "y": 1.25}, | |||
{"x": 1, "y": 1.25}, | |||
{"x": 2, "y": 1.25}, | |||
{"x": 3, "y": 1.25}, | |||
{"x": 0, "y": 2.25}, | |||
{"x": 1, "y": 2.25}, | |||
{"x": 2, "y": 2.25}, | |||
{"x": 3, "y": 2.25}, | |||
{"x": 0, "y": 3.25}, | |||
{"x": 1, "y": 3.25}, | |||
{"x": 2, "y": 3.25}, | |||
{"x": 3, "y": 3.25}, | |||
{"x": 0, "y": 4.25}, | |||
{"x": 1, "y": 4.25}, | |||
{"x": 2, "y": 4.25}, | |||
{"x": 0, "y": 5.25}, | |||
{"x": 1, "y": 5.25}, | |||
{"x": 2, "y": 5.25}, | |||
{"x": 3, "y": 4.25, "h": 2} | |||
] | |||
} | |||
} | |||
} |
@ -0,0 +1,47 @@ | |||
/* | |||
Copyright 2023 ThePanduuh <thepanduuh.kb@gmail.com> | |||
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 | |||
// Defines names for use in layer keycodes and the keymap | |||
enum layer_names { | |||
_BASE, | |||
_FN | |||
}; | |||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
[_BASE] = LAYOUT_ortho_6x4( | |||
KC_ESC , KC_EQL , KC_BSPC, MO(1) , | |||
KC_NUM , KC_PSLS, KC_PAST, KC_PMNS, | |||
KC_P7 , KC_P8 , KC_P9 , KC_PPLS, | |||
KC_P4 , KC_P5 , KC_P6 , KC_PPLS, | |||
KC_P1 , KC_P2 , KC_P3 , KC_PENT, | |||
KC_P0 , KC_P0 , KC_PDOT, KC_PENT | |||
), | |||
[_FN] = LAYOUT_ortho_6x4( | |||
KC_TRNS, KC_TRNS, KC_DEL , KC_TRNS, | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |||
KC_HOME, KC_UP , KC_PGUP, KC_TRNS, | |||
KC_LEFT, KC_TRNS, KC_RGHT, KC_TRNS, | |||
KC_END , KC_DOWN, KC_PGDN, QK_BOOT, | |||
KC_INS , KC_INS , KC_DEL , QK_BOOT | |||
) | |||
}; | |||
@ -0,0 +1,63 @@ | |||
/* | |||
Copyright 2023 ThePanduuh <thepanduuh.kb@gmail.com> | |||
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*/ | |||
[0] = LAYOUT_ortho_6x4( | |||
KC_ESC , KC_EQL , KC_BSPC, MO(1) , | |||
KC_NUM , KC_PSLS, KC_PAST, KC_PMNS, | |||
KC_P7 , KC_P8 , KC_P9 , KC_PPLS, | |||
KC_P4 , KC_P5 , KC_P6 , KC_PPLS, | |||
KC_P1 , KC_P2 , KC_P3 , KC_PENT, | |||
KC_P0 , KC_P0 , KC_PDOT, KC_PENT | |||
), | |||
[1] = LAYOUT_ortho_6x4( | |||
KC_TRNS, KC_TRNS, KC_DEL , KC_TRNS, | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |||
KC_HOME, KC_UP , KC_PGUP, KC_TRNS, | |||
KC_LEFT, KC_TRNS, KC_RGHT, KC_TRNS, | |||
KC_END , KC_DOWN, KC_PGDN, QK_BOOT, | |||
KC_INS , KC_INS , KC_DEL , QK_BOOT | |||
), | |||
[2] = LAYOUT_ortho_6x4( | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS | |||
), | |||
[3] = LAYOUT_ortho_6x4( | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS | |||
), | |||
}; | |||
#if defined(ENCODER_MAP_ENABLE) | |||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { | |||
[0] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, | |||
[1] = {ENCODER_CCW_CW(KC_NO, KC_NO)}, | |||
[2] = {ENCODER_CCW_CW(KC_NO, KC_NO)}, | |||
[3] = {ENCODER_CCW_CW(KC_NO, KC_NO)}, | |||
}; | |||
#endif |
@ -0,0 +1,3 @@ | |||
VIA_ENABLE = yes #Enable VIA | |||
ENCODER_MAP_ENABLE = yes #Encoder Mapping | |||
LTO_ENABLE = yes #Firmware Size Reduction |
@ -0,0 +1,24 @@ | |||
# Degenpad | |||
![Degenpad](https://i.imgur.com/lrlEDMfh.jpg) | |||
Numberpad created for degenerates with the option for 1 encoder. | |||
* Keyboard maintainer: [ThePanduuh](https://github.com/thepanduuh) | |||
* Hardware Supported: Degenpad | |||
* Hardware Availability: private buy | |||
Make example for this keyboard (after setting up your build environment): | |||
make thepanduuh/degenpad:default | |||
Flashing example for this keyboard: | |||
make thepanduuh/degenpad:default:flash | |||
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). | |||
## Bootloader | |||
Enter the bootloader in 3 ways: | |||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard. | |||
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead. | |||
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available. |
@ -0,0 +1,13 @@ | |||
# Build Options | |||
# change yes to no to disable | |||
# | |||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite | |||
MOUSEKEY_ENABLE = no # Mouse keys | |||
EXTRAKEY_ENABLE = yes # Audio control and System control | |||
CONSOLE_ENABLE = no # Console for debug | |||
COMMAND_ENABLE = no # Commands for debug and configuration | |||
NKRO_ENABLE = no # Enable N-Key Rollover | |||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | |||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow | |||
AUDIO_ENABLE = no # Audio output | |||
ENCODER_ENABLE = yes # Rotary Encoder support |