Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dactyl Manuform 4x5 with 5 thumb cluster #17671

Merged
merged 12 commits into from
Aug 13, 2022
29 changes: 29 additions & 0 deletions keyboards/handwired/dactyl_manuform/4x5_5/4x5_5.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// Copyright 2022 Shem Sedrick (@ssedrick)
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#include "quantum.h"

#define XXX KC_NO
#define LAYOUT( \
L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
L31, L32, R32, R33, \
L33, R31, \
L34, L44, R40, R30, \
L42, L43, R41, R42 \
) { \
{ L00, L01, L02, L03, L04 }, \
{ L10, L11, L12, L13, L14 }, \
{ L20, L21, L22, L23, L24 }, \
{ XXX, L31, L32, L33, L34 }, \
{ XXX, XXX, L42, L43, L44 }, \
\
{ R00, R01, R02, R03, R04 }, \
{ R10, R11, R12, R13, R14 }, \
{ R20, R21, R22, R23, R24 }, \
{ R30, R31, R32, R33, XXX }, \
{ R40, R41, R42, XXX, XXX }, \
}
27 changes: 27 additions & 0 deletions keyboards/handwired/dactyl_manuform/4x5_5/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright 2022 Shem Sedrick (@ssedrick)
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#include "config_common.h"


/* USB Device descriptor parameters */
#define PRODUCT_ID 0x3435
#define DEVICE_VER 0x0001

#ifndef MANUFACTURER
#define MANUFACTURER ssedrick
#endif

#define MATRIX_ROWS 10
#define MATRIX_COLUMNS 5

// Wiring pins
#define MATRIX_ROW_PINS { F7, B1, B3, B2, B4 }
#define MATRIX_COL_PINS { D4, C6, D7, E6, F6 }

#define DIODE_DIRECTION COL2ROW

#define EE_HANDS
#define SPLIT_USB_DETECT
64 changes: 64 additions & 0 deletions keyboards/handwired/dactyl_manuform/4x5_5/info.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
{
"keyboard_name": "Dactyl Manuform 4x5 5 thumb keys",
"url": "https://github.com/qmk/qmk_firmware/tree/master/keyboards/handwired/dactyl_manuform/4x5_5",
"maintainer": "ssedrick",
"layouts": {
"LAYOUT": {
"layout": [
{"x": 0, "y": 0},
{"x": 1, "y": 0},
{"x": 2, "y": 0},
{"x": 3, "y": 0},
{"x": 4, "y": 0},

{"x": 10, "y": 0},
{"x": 11, "y": 0},
{"x": 12, "y":0},
{"x": 13, "y": 0},
{"x": 14, "y": 0},

{"x": 0, "y": 1},
{"x": 1, "y": 1},
{"x": 2, "y": 1},
{"x": 3, "y": 1},
{"x": 4, "y": 1},

{"x": 10, "y": 1},
{"x": 11, "y": 1},
{"x": 12, "y": 1},
{"x": 13, "y": 1},
{"x": 14, "y": 1},

{"x": 0, "y": 2},
{"x": 1, "y": 2},
{"x": 2, "y": 2},
{"x": 3, "y": 2},
{"x": 4, "y": 2},

{"x": 10, "y": 2},
{"x": 11, "y": 2},
{"x": 12, "y": 2},
{"x": 13, "y": 2},
{"x": 14, "y": 2},

{"x": 2, "y": 3},
{"x": 3, "y": 3},
{"x": 4, "y": 3},
{"x": 5, "y": 3},

{"x": 10, "y": 3},
{"x": 11, "y": 3},
{"x": 12, "y": 3},
{"x": 13, "y": 3},

{"x": 2, "y": 4},
{"x": 3, "y": 4},
{"x": 4, "y": 4},

{"x": 10, "y": 4},
{"x": 11, "y": 4},
{"x": 12, "y": 4}
]
}
}
}
155 changes: 155 additions & 0 deletions keyboards/handwired/dactyl_manuform/4x5_5/keymaps/default/keymap.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
// Copyright 2022 Shem Sedrick (@ssedrick)
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H
#include "print.h"

enum key_layers {
_BASE,
_COLEMAK,
_RAISE,
_LOWER
};

enum layer_keycodes {
QWERTY = SAFE_RANGE,
COLEMAK,
};

#define RAISE MO(_RAISE)
#define LOWER MO(_LOWER)
#define SH_ESC SFT_T(KC_ESC)
#define ____ KC_TRANSPARENT

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base (qwerty)
* ,----------------------------------, ,----------------------------------,
* | q | w | e | r | t | | y | u | i | o | p |
* |------+------+------+------+------| |------+------+------+------+------|
* | a | s | d | f | g | | h | j | k | l | ; |
* |------+------+------+------+------| |------+------+------+------+------|
* | z | x | c | v | b | | n | m | , | . | / |
* '------+------+------+-------------' '------+------+------+------+------'
* | [ | ] | | ' | `~ |
* '-------------+------, ,------|-------------'
* | ESC | | BSPC |
* |-------------, ,------+------|
* | GUI | TAB | | SHIFT| SPACE|
* |------+------| |------+------|
* | RAISE| CTRL | | LOWER| ENTER|
* '-------------' '-------------'
*/
[_BASE] = LAYOUT(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_LBRC, KC_RBRC, KC_QUOT, KC_GRV,
SH_ESC, KC_BSPC,
KC_LGUI, KC_TAB, KC_RSFT, KC_SPC,
RAISE, KC_LCTRL, LOWER, KC_ENT
),

/* Colemak
* ,----------------------------------, ,----------------------------------,
* | q | w | f | p | g | | j | l | u | y | ; |
* |------+------+------+------+------| |------+------+------+------+------|
* | a | r | s | t | d | | h | n | e | i | o |
* |------+------+------+------+------| |------+------+------+------+------|
* | z | x | c | v | b | | k | m | , | . | / |
* '------+------+------+-------------' '------+------+------+------+------'
* | [ | ] | | ' | `~ |
* '-------------+------, ,------|-------------'
* | ESC | | BSPC |
* |-------------, ,------+------|
* | GUI | TAB | | SHIFT| SPACE|
* |------+------| |------+------|
* | RAISE| CTRL | | LOWER| ENTER|
* '-------------' '-------------'
*/
[_COLEMAK] = LAYOUT(
KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_LBRC, KC_RBRC, KC_QUOT, KC_GRV,
KC_ESC, KC_BSPC,
KC_LGUI, KC_TAB, KC_RSFT, KC_SPC,
RAISE, KC_LCTRL, LOWER, KC_ENT
),
/* RAISE
* ,----------------------------------, ,----------------------------------,
* | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |
* |------+------+------+------+------| |------+------+------+------+------|
* | ( | ) | { | } | = | | - | 4 | 5 | 6 | ; |
* |------+------+------+------+------| |------+------+------+------+------|
* | RESET| BOOT | [ | ] | | | | 1 | 2 | 3 | |
* |------+------+------+-------------| |------+------+------+------+------,
* | | | | 0 | . |
* '-------------+------, ,------|-------------'
* | ESC | | BSPC |
* |-------------, ,------+------|
* | GUI | TAB | | SHIFT| SPACE|
* |------+------| |------+------|
* | RAISE| CTRL | | LOWER| ENTER|
* '-------------' '-------------'
*/
[_RAISE] = LAYOUT(
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
S(KC_9), S(KC_0), KC_LCBR, KC_RCBR, KC_EQL, KC_MINS, KC_4, KC_5, KC_6, KC_QUOT,
QK_RBT, QK_BOOT, KC_LBRC, KC_RBRC, ____, ____, KC_1, KC_2, KC_3, ____,
____, ____, KC_0, KC_DOT,
____, ____,
____, ____, ____, ____,
____, ____, ____, ____
),

/* LOWER
* ,----------------------------------, ,----------------------------------,
* | ! | @ | # | $ | % | | ^ | & | * | ( | ) |
* |------+------+------+------+------| |------+------+------+------+------|
* | ( | ) | { | } | = | | | - | + | | | |
* |------+------+------+------+------| |------+------+------+------+------|
* | | | | | | | | LEFT | DOWN | UP | RIGHT|
* |------+------+------+-------------| |------+------+------+------+------,
* | | | |QWERTY|COLEMA|
* '-------------+------, ,------|-------------'
* | ESC | | BSPC |
* |-------------, ,------+------|
* | GUI | TAB | | SHIFT| SPACE|
* |------+------| |------+------|
* | RAISE| CTRL | | LOWER| ENTER|
* '-------------' '-------------'
*/
[_LOWER] = LAYOUT(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
S(KC_9), S(KC_0), KC_LBRC, KC_RBRC, KC_EQL, ____, KC_MINS, KC_EQL, KC_PIPE, ____,
____, ____, ____, ____, ____, ____, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
____, ____, QWERTY, COLEMAK,
____, ____,
____, ____, ____, ____,
____, ____, ____, ____
)
};


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: 0x%04X, col: %u, row: %u, pressed: %d, time: %u, interrupt: %d, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
#endif
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
set_single_persistent_default_layer(_BASE);
}
return false;
break;
case COLEMAK:
if (record->event.pressed) {
set_single_persistent_default_layer(_COLEMAK);
}
return false;
break;
}
return true;
}

Loading