[Keyboard] Redox media (#13084)

* adding a new revision 'media' to the redox keyboard

* readme update

* encoder fix

* video link

* drashna change requests

* removing SPLIT_USB_TIMEOUT

* intermediate rename

* lowercase

* drashna comments

* include if defined KEYBOARD_redox_media

* lowercase readme, tmp step

* lowercase readme

* drashna changes

* more drashna comments

* readme update

* readme update

* fauxpark and drashna comments

* fauxpark comments

* Update keyboards/redox/media/readme.md

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: Ryan <fauxpark@gmail.com>
This commit is contained in:
shiftux 2021-09-06 21:44:39 +02:00 committed by GitHub
parent 85a14ac25b
commit 1dbe4e7dd0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 305 additions and 2 deletions

View file

@ -0,0 +1,26 @@
/*
Copyright 2021 Shiftux <shiftux@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
/* Use I2C or Serial, not both */
#define USE_SERIAL
// #define USE_I2C
/* Select hand configuration */
// #define MASTER_LEFT
#define EE_HANDS

View file

@ -0,0 +1,86 @@
/*
Copyright 2021 Shiftux <shiftux@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
enum layers {
_QWERTZ, // standard layer
_SYMB, // symbols layer
};
enum custom_keycodes {
QWERTZ = SAFE_RANGE,
SYMB,
};
// Shortcut to make keymap more readable
#define KC_BKSL KC_BSLASH
#define SYM_L MO(_SYMB)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTZ] = LAYOUT(
// ┌────────┐ ┌────────┬────────┐
KC_MUTE, KC_MPLY, KC_MNXT,
//┌────────┬────────┬────────┬───┼────┬───┼────┬────────┐ ┌──┼─────┬──┼─────┬──┼─────┬────────┬────────┬────────┐
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NUBS, KC_MINS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_EQL, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PGDN, KC_PGUP, KC_HOME, KC_END, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
//├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
KC_LCTL, SYM_L, KC_LALT, KC_GRV, KC_DEL, KC_LGUI, KC_SPC, KC_ENT, KC_SPC, KC_RALT, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT
//└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
),
[_SYMB] = LAYOUT(
// ┌────────┐ ┌────────┬────────┐
KC_MPRV, XXXXXXX, XXXXXXX,
//┌────────┬────────┬────────┬───┼────┬───┼────┬────────┐ ┌──┼─────┬──┼─────┬──┼─────┬────────┬────────┬────────┐
RESET ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5, KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,KC_F12 , XXXXXXX ,XXXXXXX ,XXXXXXX, KC_UP ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
XXXXXXX ,XXXXXXX ,KC_BSLS ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT ,XXXXXXX ,XXXXXXX ,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX, XXXXXXX ,XXXXXXX ,KC_TILD ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
//└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
)
};
bool encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) { /* First encoder */
if (clockwise) {
tap_code(KC_VOLD);
} else {
tap_code(KC_VOLU);
}
} else if (index == 1) { /* Second encoder */
if (clockwise) {
tap_code(KC_WH_D);
} else {
tap_code(KC_WH_U);
}
}
return false;
}

View file

@ -0,0 +1,6 @@
# German keymap for Redox-media
A layout for the Redox MEDIA revision.
The layout acommodates the German umlauts and the punctuation symbols
at their usual positions relative to the other alphabetic characters.
Apart from that it stays close to the default english Redox layout.

View file

@ -0,0 +1,2 @@
RGBLIGHT_ENABLE = no
ENCODER_ENABLE = yes

View file

@ -0,0 +1,60 @@
/*
Copyright 2021 Shiftux <shiftux@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 "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x0000
#define DEVICE_VER 0x0100
#define MANUFACTURER shiftux
#define PRODUCT The Redox Keyboard
/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 12
#define MATRIX_COLS 7
// wiring of each half
#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4, B5 }
#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6, D1 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
// #define BACKLIGHT_LEVELS 3
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* serial.c configuration for split keyboard */
#define SOFT_SERIAL_PIN D0
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#define ENCODERS_PAD_A { F4 }
#define ENCODERS_PAD_B { F5 }
#define ENCODER_RESOLUTION 4

View file

@ -0,0 +1,18 @@
/*
Copyright 2021 Shiftux <shiftux@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 "redox.h"

View file

@ -0,0 +1,46 @@
/*
Copyright 2021 Shiftux <shiftux@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 "redox.h"
#include "quantum.h"
// rows are doubled
#define LAYOUT( \
R5C6, R11C6, R11C5, \
R0C0, R0C1, R0C2, R0C3, R0C4, R0C5, R6C5, R6C4, R6C3, R6C2, R6C1, R6C0, \
R1C0, R1C1, R1C2, R1C3, R1C4, R1C5, R0C6, R6C6, R7C5, R7C4, R7C3, R7C2, R7C1, R7C0, \
R2C0, R2C1, R2C2, R2C3, R2C4, R2C5, R1C6, R7C6, R8C5, R8C4, R8C3, R8C2, R8C1, R8C0, \
R3C0, R3C1, R3C2, R3C3, R3C4, R3C5, R2C6, R3C6, R9C6, R8C6, R9C5, R9C4, R9C3, R9C2, R9C1, R9C0, \
R4C0, R4C1, R4C2, R4C3, R4C4, R4C5, R4C6, R10C6, R10C5, R10C4, R10C3, R10C2, R10C1, R10C0 \
) \
{ \
{ R0C0, R0C1, R0C2, R0C3, R0C4, R0C5, R0C6 }, \
{ R1C0, R1C1, R1C2, R1C3, R1C4, R1C5, R1C6 }, \
{ R2C0, R2C1, R2C2, R2C3, R2C4, R2C5, R2C6 }, \
{ R3C0, R3C1, R3C2, R3C3, R3C4, R3C5, R3C6 }, \
{ R4C0, R4C1, R4C2, R4C3, R4C4, R4C5, R4C6 }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, R5C6 }, \
\
{ R6C0, R6C1, R6C2, R6C3, R6C4, R6C5, R6C6 }, \
{ R7C0, R7C1, R7C2, R7C3, R7C4, R7C5, R7C6 }, \
{ R8C0, R8C1, R8C2, R8C3, R8C4, R8C5, R8C6 }, \
{ R9C0, R9C1, R9C2, R9C3, R9C4, R9C5, R9C6 }, \
{ R10C0, R10C1, R10C2, R10C3, R10C4, R10C5, R10C6 }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, R11C5, R11C6 } \
}

View file

@ -0,0 +1,57 @@
# The Redox Media Keyboard
I've taken the Redox keyboard and modified the SCAD files as well as the QMK layout to include media and scroll features:
- 3 Media buttons
- Play / Pause button
- Next track
- Mute (previous track on secondary layout)
- Volume knob
- Scroll wheel on the keyboard
For an in-depth report see [my page](https://shiftux.org/making_projects/keyboard.html) and a [video](https://youtu.be/Cwkf7HFcUkY) about the build process, design, printing, programing and assembly.
## IMAGE
### The build
I've used 2 [Sparkfun Pro Micros (5V)](https://www.sparkfun.com/products/12640) and a single hand master setup providing power and serial connection via a TRS jack.
### The pro micro and how to flash it
To try out your pro micro and setup your environment to flash such a device I recommend following [this guide](https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/all). It will take you through the install and setup and provides a first easy to flash program so you can test your setup quickly.
Whenever you can't program one of the pro micros or the USB-COM port is not found on your computer, it most probably means that is is not in "bootloader mode". What you want to do is connect the GND and RST pin twice to reset the device and put it into bootloader mode (details [here](https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/troubleshooting-and-faq#ts-serial)).
### Compiling and flashing
Obviously start by [installing QMK](https://docs.qmk.fm/#/getting_started_build_tools?id=set-up-your-environment).
- Before flashing the firmware you should make sure that it compiles. Thus assuring that your QMK setup works fine and the keyboard and keymap files are correct:
```
qmk compile -kb redox/media -km media_ch
```
The generated `.hex` file is output to the QMK root.
Once you are comfortable flashing your Pro Micros and your setup works continue with the following steps:
- I've had the most success with using the `EE_HANDS` setting and flashing the EEPROM to the left and right halves of the keyboard respectively. To do this start with flashing the EEPROM of the 2 pro micros separately by setting the bootloader flag in the flash command (the pro micro uses the avrdude bootloader):
```
qmk flash -kb redox/media -km media_ch -bl avrdude-split-left
qmk flash -kb redox/media -km media_ch -bl avrdude-split-right
```
Note that you need to reset the pro micro to set it to bootloader mode before you can flash it: connect GND to RST twice in quick succession (750ms), then you have 8 seconds to upload the new eep file.
### Adapting the keyboard layout
Copy the `keymaps/media_ch` folder to `keymaps/media_<your-layout>` and adapt the `keymap.c` file in there.
I recommend testing the key codes with the [QMK tester](https://config.qmk.fm/#/test) and then adapting the `keymap.c` file accordingly.
Finally compile your new layout from the QMK root with:
```
qmk compile -kb redox/media -km media_<your-layout>
```
and proceed to flashing it equivalent to the above instructions.
### CAD files and additional resources
See [here](https://shiftux.org/making_projects/keyboard.html) for a detailed build description and video.
You can find the CAD and SCAD files, I created here: https://github.com/shiftux/redox-media-keyboard

View file

View file

@ -16,8 +16,10 @@
#pragma once
#ifdef KEYBOARD_redox_rev1
#if defined(KEYBOARD_redox_rev1)
# include "rev1.h"
#elif defined(KEYBOARD_redox_media)
# include "media.h"
#endif
#include "quantum.h"