[Keyboard] Doio kb38 (#19650)

This commit is contained in:
Katrina 2023-02-09 13:43:22 -07:00 committed by GitHub
parent f07841cce3
commit e19cbe25f3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 358 additions and 0 deletions

View file

@ -0,0 +1,39 @@
// Copyright 2022 Katrina (@Daggette10)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "config_common.h"
#define RGB_DI_PIN F6
#define RGB_MATRIX_LED_COUNT 44
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR
#define ENABLE_RGB_MATRIX_ALPHAS_MODS
#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
#define ENABLE_RGB_MATRIX_BREATHING
#define ENABLE_RGB_MATRIX_CYCLE_ALL
#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
#define ENCODERS_PAD_A { C7, F7, D6 }
#define ENCODERS_PAD_B { C6, E6, D7 }
#define ENCODER_RESOLUTIONS { 4, 4, 2 }
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT

View file

@ -0,0 +1,135 @@
{
"manufacturer": "Doio",
"keyboard_name": "doio/kb38",
"maintainer": "PepperKats",
"url": "https://www.keebmonkey.com/products/megalodon-doio-triple-knob-38-keyboard-with-oled-screen",
"bootloader": "atmel-dfu",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true,
"rgblight": false
},
"matrix_pins": {
"cols": ["F5", "F4", "F1", "F0", "B7", "B6", "B5", "B4"],
"rows": ["D5", "D4", "D3", "D2", "B3", "B2"]
},
"processor": "atmega32u4",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"rgb_matrix": {
"driver": "WS2812",
"layout": [
{"flags": 4, "matrix": [0, 0], "x":0, "y":0},
{"flags": 4, "matrix": [0, 1], "x":62.2, "y":0},
{"flags": 4, "matrix": [0, 2], "x":99.6, "y":0},
{"flags": 4, "matrix": [0, 3], "x":124.4, "y":0},
{"flags": 4, "matrix": [0, 4], "x":149.3, "y":0},
{"flags": 4, "matrix": [0, 5], "x":174.2, "y":0},
{"flags": 4, "matrix": [0, 6], "x":199.1, "y":0},
{"flags": 4, "matrix": [0, 7], "x":224, "y":0},
{"flags": 4, "matrix": [1, 0], "x":0, "y":12.8},
{"flags": 4, "matrix": [1, 1], "x":24.9, "y":12.8},
{"flags": 4, "matrix": [1, 2], "x":49.8, "y":12.8},
{"flags": 4, "matrix": [1, 3], "x":74.6, "y":12.8},
{"flags": 4, "matrix": [1, 4], "x":99.6, "y":12.8},
{"flags": 4, "matrix": [1, 5], "x":124.4, "y":12.8},
{"flags": 4, "matrix": [1, 6], "x":149.3, "y":12.8},
{"flags": 4, "matrix": [2, 0], "x":0, "y":25.6},
{"flags": 4, "matrix": [2, 1], "x":24.9, "y":25.6},
{"flags": 4, "matrix": [2, 2], "x":49.8, "y":25.6},
{"flags": 4, "matrix": [2, 3], "x":74.6, "y":32},
{"flags": 4, "matrix": [2, 4], "x":90, "y":25.6},
{"flags": 4, "matrix": [2, 5], "x":124.4, "y":25.6},
{"flags": 4, "matrix": [2, 6], "x":149.3, "y":25.6},
{"flags": 4, "matrix": [3, 0], "x":0, "y":38.4},
{"flags": 4, "matrix": [3, 1], "x":24.9, "y":38.4},
{"flags": 4, "matrix": [3, 2], "x":49.8, "y":38.4},
{"flags": 4, "matrix": [3, 3], "x":99.6, "y":38.4},
{"flags": 4, "matrix": [3, 4], "x":124.4, "y":38.4},
{"flags": 4, "matrix": [3, 5], "x":149.3, "y":38.4},
{"flags": 4, "matrix": [4, 0], "x":0, "y":51.2},
{"flags": 4, "matrix": [4, 1], "x":24.9, "y":51.2},
{"flags": 4, "matrix": [4, 2], "x":49.8, "y":51.2},
{"flags": 4, "matrix": [4, 3], "x":74.6, "y":57.6},
{"flags": 4, "matrix": [4, 5], "x":124.4, "y":51.2},
{"flags": 4, "matrix": [5, 0], "x":12.5, "y":64},
{"flags": 4, "matrix": [5, 1], "x":49.8, "y":64},
{"flags": 4, "matrix": [5, 2], "x":99.6, "y":64},
{"flags": 4, "matrix": [5, 3], "x":124.4, "y":64},
{"flags": 4, "matrix": [5, 4], "x":149.3, "y":64},
{"flags": 2, "x":224, "y":64},
{"flags": 2, "x":74.6, "y":64},
{"flags": 2, "x":0, "y":64},
{"flags": 2, "x":0, "y":0},
{"flags": 2, "x":74.6, "y":0},
{"flags": 2, "x":224, "y":0}
]
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "label":"ESC", "x":0, "y":0},
{"matrix": [0, 1], "label":"BSPC", "x":1, "y":0},
{"matrix": [0, 2], "label":"RGB BACK", "x":2, "y":0},
{"matrix": [0, 3], "label":"RGB OFF", "x":3, "y":0},
{"matrix": [0, 4], "label":"RGB FORW", "x":4, "y":0},
{"matrix": [0, 5], "label":"MAKE", "x":5, "y":0},
{"matrix": [0, 6], "label":"REBOOT", "x":6, "y":0},
{"matrix": [0, 7], "label":"BOOTLOAD", "x":7, "y":0},
{"matrix": [1, 0], "label":"NUMLOCK", "x":0, "y":1},
{"matrix": [1, 1], "label":"PSLS", "x":1, "y":1},
{"matrix": [1, 2], "label":"PAST", "x":2, "y":1},
{"matrix": [1, 3], "label":"PMNS", "x":3, "y":1},
{"matrix": [1, 4], "label":"PAUS", "x":3, "y":1},
{"matrix": [1, 5], "label":"SCRL", "x":3, "y":1},
{"matrix": [1, 6], "label":"PSCR", "x":3, "y":1},
{"matrix": [2, 0], "label":"7", "x":0, "y":2},
{"matrix": [2, 1], "label":"8", "x":1, "y":2},
{"matrix": [2, 2], "label":"9", "x":2, "y":2},
{"matrix": [2, 3], "label":"PPLS", "x":3, "y":2},
{"matrix": [2, 4], "label":"INS", "x":3, "y":2},
{"matrix": [2, 5], "label":"HOME", "x":3, "y":2},
{"matrix": [2, 6], "label":"PGUP", "x":3, "y":2},
{"matrix": [3, 0], "label":"4", "x":0, "y":3},
{"matrix": [3, 1], "label":"5", "x":1, "y":3},
{"matrix": [3, 2], "label":"6", "x":2, "y":3},
{"matrix": [3, 3], "label":"END", "x":3, "y":3},
{"matrix": [3, 4], "label":"DEL", "x":3, "y":3},
{"matrix": [3, 5], "label":"PGDN", "x":3, "y":3},
{"matrix": [4, 0], "label":"1", "x":0, "y":4},
{"matrix": [4, 1], "label":"2", "x":1, "y":4},
{"matrix": [4, 2], "label":"3", "x":2, "y":4},
{"matrix": [4, 3], "label":"PENT", "x":3, "y":4},
{"matrix": [4, 5], "label":"UP", "x":3, "y":4},
{"matrix": [5, 0], "label":"0", "x":0, "y":5},
{"matrix": [5, 1], "label":"PDOT", "x":1, "y":5},
{"matrix": [5, 2], "label":"LEFT", "x":2, "y":5},
{"matrix": [5, 3], "label":"DOWN", "x":3, "y":5},
{"matrix": [5, 4], "label":"RIGHT", "x":4, "y":5},
{"matrix": [5, 5], "label":"KNOB_L", "x":3, "y":5},
{"matrix": [5, 6], "label":"KNOB_R", "x":3, "y":5},
{"matrix": [5, 7], "label":"KNOB_D", "x":3, "y":5}
]
}
}
}

View file

@ -0,0 +1,69 @@
/* Copyright 2021 Katrina (@PepperKats)
*
* 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 "quantum.h"
//Display
#ifdef OLED_ENABLE
static void render_logo(void) {
static const char PROGMEM qmk_logo[] = {
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
};
oled_write_P(qmk_logo, false);
}
bool oled_task_kb(void) {
if (!oled_task_user()) { return false; }
render_logo();
return true;
}
#endif
//Knobs
#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) {
return false;
}
if (index == 0) {
// Page Up/Down
if (clockwise) {
tap_code(KC_PGDN);
} else {
tap_code(KC_PGUP);
}
} else if (index == 1) {
// Mouse Wheel Up/Down
if (clockwise) {
tap_code(KC_MS_WH_DOWN);
} else {
tap_code(KC_MS_WH_UP);
}
} else if (index == 2) {
// Volume Up/Down
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
}
return true;
}
#endif

View file

@ -0,0 +1,61 @@
/* Copyright 2021 Katrina (@PepperKats)
*
* 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 {
_QWERTY,
_LAYERTWO
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* ┌───┐ ┌───────┐┌───┬───┬───┐┌───┬───┬───┐
* ESC KC_BSPCF1 F2 F3 F4 F5 F6
*
*
* NUM / * - PASSCRPSC
*
* 7 8 9 INSHOMPGU
* +
* 4 5 6 ENDDELPGD
*
* 1 2 3 E UP
* N
* 0 DEL T LFTDWNRHT O O O
*
*/
[_QWERTY] = LAYOUT(
MO(1), KC_BSPC, RGB_RMOD, RGB_TOG, RGB_MOD, KC_F1, KC_F2, KC_F3,
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_PAUS, KC_SCRL, KC_PSCR,
KC_P7, KC_P8, KC_P9, KC_PPLS, KC_INS, KC_HOME, KC_PGUP,
KC_P4, KC_P5, KC_P6, KC_END, KC_DEL, KC_PGDN,
KC_P1, KC_P2, KC_P3, KC_PENT, KC_UP,
KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, KC_B
),
[_LAYERTWO] = LAYOUT(
_______, KC_BSPC, RGB_RMOD, RGB_TOG, RGB_MOD, KC_A, QK_REBOOT, QK_BOOTLOADER,
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_PAUS, KC_SCRL, KC_PSCR,
KC_P7, KC_P8, KC_P9, KC_PPLS, KC_INS, KC_HOME, KC_PGUP,
KC_P4, KC_P5, KC_P6, KC_END, KC_DEL, KC_PGDN,
KC_P1, KC_P2, KC_P3, KC_PENT, KC_UP,
KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, KC_B
)
};
/*NOTE FOR PERSON MODIFYING KEYMAP
The large knob press is mapped as KC_B, despite it not having one.
I'm not quite sure why, but the only reason it can't be clicked is because the potentiometer is different.
If you were to replace it with one that can be clicked, it would work. I shorted it and it does work.*/

View file

@ -0,0 +1,24 @@
# doio/kb38
QMK for Megalodon DOIO Triple Knob 38% with OLED Screen.
* Keyboard Maintainer: [Katrina](https://github.com/PepperKats)
* Hardware Supported: Megalodon DOIO Triple Knob 38%
* Hardware Availability: https://www.keebmonkey.com/products/megalodon-doio-triple-knob-38-keyboard-with-oled-screen
Make example for this keyboard (after setting up your build environment):
make doio/kb38:default
Flashing example for this keyboard:
make doio/kb38: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:
* **Physical reset button**: Briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View file

@ -0,0 +1,27 @@
RGB_MATRIX_EFFECT(trans)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
static bool trans(effect_params_t* params) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
for (int i = 0; i < 8; i++) {
rgb_matrix_set_color(i, 0x00, 0x00, 0xFF);
}
for (int i = 8; i < 15; i++) {
rgb_matrix_set_color(i, 0xFF, 0x00, 0x92);
}
for (int i = 15; i < 28; i++) {
rgb_matrix_set_color(i, 0xFF, 0xFF, 0xFF);
}
for (int i = 28; i < 33; i++) {
rgb_matrix_set_color(i, 0xFF, 0x00, 0x92);
}
for (int i = 33; i < 38; i++) {
rgb_matrix_set_color(i, 0x00, 0x00, 0xFF);
}
for (int i = 38; i < 44; i++) {
rgb_matrix_set_color(i, 0x00, 0x00, 0xFF);
}
return rgb_matrix_check_finished_leds(led_max);
}
#endif

View file

@ -0,0 +1,3 @@
OLED_ENABLE = yes
ENCODER_ENABLE = yes
RGB_MATRIX_CUSTOM_KB = yes