cKeys Handwire 101 Refactor (#13879)

* update info.json

- use human-friendly formatting
- remove `key_count` key

* rename LAYOUT to LAYOUT_ortho_4x4

* refactor default keymap

- add license header
- qmk cformat pass
- keycode grid alignment

* remove empty config.h file from default keymap

* update Manufacturer and Product strings

* tidy up handwire_101.c

- add license header
- remove boilerplate functions

* tidy up handwire_101.h

- add license header
- remove instructive comment

* minor rules.mk tidy-up

- remove Bootloader selection sample comments

* rewrite SEND_STRING() statements per fauxpark

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

Co-authored-by: Ryan <fauxpark@gmail.com>
This commit is contained in:
James Young 2021-08-04 14:32:27 -07:00 committed by GitHub
parent 4445455c1f
commit f4c55db8dd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 237 additions and 211 deletions

View file

@ -23,8 +23,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0xFEED #define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6060 #define PRODUCT_ID 0x6060
#define DEVICE_VER 0x0001 #define DEVICE_VER 0x0001
#define MANUFACTURER ckeys_handwire #define MANUFACTURER cKeys
#define PRODUCT ckeys_handwire #define PRODUCT Handwire 101
/* key matrix size */ /* key matrix size */
#define MATRIX_ROWS 4 #define MATRIX_ROWS 4

View file

@ -1,28 +1,17 @@
/* Copyright 2019 Branden Byers
*
* 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 "handwire_101.h" #include "handwire_101.h"
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
// Turn status LED on
//DDRD |= (1<<6);
//PORTD |= (1<<6);
matrix_init_user();
}
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
matrix_scan_user();
}
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
// put your per-action keyboard code here
// runs for every action, just before processing by the firmware
return process_record_user(keycode, record);
}
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
led_set_user(usb_led);
}

View file

@ -1,12 +1,24 @@
/* Copyright 2019 Branden Byers
*
* 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 #pragma once
#include "quantum.h" #include "quantum.h"
// This a shortcut to help you visually see your layout. #define LAYOUT_ortho_4x4( \
// The following is an example using the Planck MIT layout
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
#define LAYOUT( \
k00, k01, k02, k03, \ k00, k01, k02, k03, \
k10, k11, k12, k13, \ k10, k11, k12, k13, \
k20, k21, k22, k23, \ k20, k21, k22, k23, \
@ -18,4 +30,3 @@
{ k20, k21, k22, k23 }, \ { k20, k21, k22, k23 }, \
{ k30, k31, k32, k33 } \ { k30, k31, k32, k33 } \
} }

View file

@ -1,13 +1,35 @@
{ {
"keyboard_name": "cKeys Handwire 101", "keyboard_name": "cKeys Handwire 101",
"url": "https://ckeys.org/slides/handwire/", "url": "https://ckeys.org/slides/handwire/",
"maintainer": "brandenbyers", "maintainer": "brandenbyers",
"width": 4, "width": 4,
"height": 4, "height": 4,
"layouts": { "layout_aliases": {
"LAYOUT_ortho_4x4": { "LAYOUT": "LAYOUT_ortho_4x4"
"key_count": 16, },
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}] "layouts": {
"LAYOUT_ortho_4x4": {
"layout": [
{"x":0, "y":0},
{"x":1, "y":0},
{"x":2, "y":0},
{"x":3, "y":0},
{"x":0, "y":1},
{"x":1, "y":1},
{"x":2, "y":1},
{"x":3, "y":1},
{"x":0, "y":2},
{"x":1, "y":2},
{"x":2, "y":2},
{"x":3, "y":2},
{"x":0, "y":3},
{"x":1, "y":3},
{"x":2, "y":3},
{"x":3, "y":3}
]
}
} }
}
} }

View file

@ -1,3 +0,0 @@
#pragma once
// Add overrides here

View file

@ -1,177 +1,191 @@
/* Copyright 2019 Branden Byers
*
* 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 #include QMK_KEYBOARD_H
enum layers { enum layers {
_BASE, // base layer _BASE, // base layer
_LAYERS, // layer of all layers _LAYERS, // layer of all layers
_MUSIC, // music mode _MUSIC, // music mode
_MUSIC_4_LIFE, // music mode until unplugged _MUSIC_4_LIFE, // music mode until unplugged
_MOUSE, // mousekeys _MOUSE, // mousekeys
_TERMINAL, // terminal _TERMINAL, // terminal
_ADMIN // admin duties _ADMIN // admin duties
}; };
enum custom_keycodes { enum custom_keycodes {
TERM_ABOUT = SAFE_RANGE, TERM_ABOUT = SAFE_RANGE,
TERM_PRINT, TERM_PRINT,
TERM_FLUSH, TERM_FLUSH,
TERM_HELP, TERM_HELP,
CKEYS_ABOUT, CKEYS_ABOUT,
}; };
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* BASE (numpad) /* BASE (numpad)
* ,-----------------------. * ,-----------------------.
* | 7 | 8 | 9 | / | <-- Hold for LAYERS * | 7 | 8 | 9 | / | <-- Hold for LAYERS
* |-----+-----+-----+-----| * |-----+-----+-----+-----|
* | 4 | 5 | 6 | * | * | 4 | 5 | 6 | * |
* |-----+-----+-----+-----| * |-----+-----+-----+-----|
* | 1 | 2 | 3 | - | * | 1 | 2 | 3 | - |
* |-----+-----+-----+-----| * |-----+-----+-----+-----|
* | 0 | . | = | + | * | 0 | . | = | + |
* `---------------------- ' * `-----------------------'
*/ */
[_BASE] = LAYOUT( [_BASE] = LAYOUT_ortho_4x4(
KC_KP_7, KC_KP_8, KC_KP_9, LT(MO(_LAYERS), KC_PSLS), \ KC_P7, KC_P8, KC_P9, LT(_LAYERS, KC_PSLS),
KC_KP_4, KC_KP_5, KC_KP_6, KC_PAST, \ KC_P4, KC_P5, KC_P6, KC_PAST,
KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS, \ KC_P1, KC_P2, KC_P3, KC_PMNS,
KC_KP_0, KC_KP_DOT, KC_KP_EQUAL, KC_PPLS \ KC_P0, KC_PDOT, KC_PEQL, KC_PPLS
), ),
/* LAYERS /* LAYERS
* ,---------------------------. * ,---------------------------.
* | MUSIC | | | X | * | MUSIC | | | X |
* |---------+-----+-----+-----| * |---------+-----+-----+-----|
* | MOUSE | | | | * | MOUSE | | | |
* |---------+-----+-----+-----| * |---------+-----+-----+-----|
* |TERMINAL | | | | * |TERMINAL | | | |
* |---------+-----+-----+-----| * |---------+-----+-----+-----|
* | ADMIN | | | | * | ADMIN | | | |
* `---------------------------' * `---------------------------'
*/ */
[_LAYERS] = LAYOUT( [_LAYERS] = LAYOUT_ortho_4x4(
TG(_MUSIC), _______, _______, _______, \ TG(_MUSIC), _______, _______, _______,
TG(_MOUSE), _______, _______, _______, \ TG(_MOUSE), _______, _______, _______,
TG(_TERMINAL), _______, _______, _______, \ TG(_TERMINAL), _______, _______, _______,
TG(_ADMIN), _______, _______, _______\ TG(_ADMIN), _______, _______, _______
), ),
/* MUSIC /* MUSIC
* ,-----------------------. * ,-----------------------.
* | X | | | X | * | X | | | X |
* |-----+-----+-----+-----| * |-----+-----+-----+-----|
* | | | |4EVER| * | | | |4EVER|
* |-----+-----+-----+-----| * |-----+-----+-----+-----|
* | OFF | | | | * | OFF | | | |
* |-----+-----+-----+-----| * |-----+-----+-----+-----|
* | ON | | |MODES| * | ON | | |MODES|
* `---------------------- ' * `-----------------------'
*/ */
// TODO: Make this music layer the one to jump to other music layers (different octaves) // TODO: Make this music layer the one to jump to other music layers (different octaves)
[_MUSIC] = LAYOUT( [_MUSIC] = LAYOUT_ortho_4x4(
_______, _______, _______, _______, \ _______, _______, _______, _______,
_______, _______, _______, TG(_MUSIC_4_LIFE), \ _______, _______, _______, TG(_MUSIC_4_LIFE),
MU_OFF, _______, _______, _______, \ MU_OFF, _______, _______, _______,
MU_ON, _______, _______, MU_MOD \ MU_ON, _______, _______, MU_MOD
), ),
/* MUSIC_4_LIFE /* MUSIC_4_LIFE
* ,-----------------------. * ,-----------------------.
* | | | | | * | | | | |
* |-----+-----+-----+-----| * |-----+-----+-----+-----|
* | | | | | * | | | | |
* |-----+-----+-----+-----| * |-----+-----+-----+-----|
* | | | | | * | | | | |
* |-----+-----+-----+-----| * |-----+-----+-----+-----|
* | | | | | * | | | | |
* `---------------------- ' * `-----------------------'
*/ */
[_MUSIC_4_LIFE] = LAYOUT( [_MUSIC_4_LIFE] = LAYOUT_ortho_4x4(
KC_M, KC_M, KC_M, KC_M, \ KC_M, KC_M, KC_M, KC_M,
KC_M, KC_M, KC_M, KC_M, \ KC_M, KC_M, KC_M, KC_M,
KC_M, KC_M, KC_M, KC_M, \ KC_M, KC_M, KC_M, KC_M,
KC_M, KC_M, KC_M, KC_M \ KC_M, KC_M, KC_M, KC_M
), ),
/* MOUSE /* MOUSE
* ,-------------------------------------------------. * ,-------------------------------------------------.
* | BUTTON 5 | | SCROLL UP | X | * | BUTTON 5 | | SCROLL UP | X |
* |-----------+-----------+------------+------------| * |-----------+-----------+------------+------------|
* | X |LEFT CLICK | UP |RIGHT CLICK | * | X |LEFT CLICK | UP |RIGHT CLICK |
* |-----------+-----------+------------+------------| * |-----------+-----------+------------+------------|
* | BUTTON 4 | LEFT | DOWN | RIGHT | * | BUTTON 4 | LEFT | DOWN | RIGHT |
* |-----------+-----------+------------+------=-----| * |-----------+-----------+------------+------=-----|
* | BUTTON 3 |SCROLL LEFT|SCROLL DOWN |SCROLL RIGHT| * | BUTTON 3 |SCROLL LEFT|SCROLL DOWN |SCROLL RIGHT|
* `-------------------------------------------------' * `-------------------------------------------------'
*/ */
[_MOUSE] = LAYOUT( [_MOUSE] = LAYOUT_ortho_4x4(
KC_MS_BTN5, _______, KC_MS_WH_UP, _______, \ KC_BTN5, _______, KC_WH_U, _______,
_______, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, \ _______, KC_BTN1, KC_MS_U, KC_BTN2,
KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, \ KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R,
KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_RIGHT \ KC_BTN3, KC_WH_L, KC_WH_D, KC_WH_R
), ),
/* TERMINAL /* TERMINAL
* ,---------------------------------------. * ,---------------------------------------.
* | |ABOUT| | X | * | |ABOUT| | X |
* |------------+-----+----------+---------| * |------------+-----+----------+---------|
* |TERMINAL OFF|PRINT| | | * |TERMINAL OFF|PRINT| | |
* |------------+-----+----------+---------| * |------------+-----+----------+---------|
* | X |FLUSH| | | * | X |FLUSH| | |
* |------------+-----+----------+---------| * |------------+-----+----------+---------|
* |TERMINAL ON |HELP | | | * |TERMINAL ON |HELP | | |
* `--------=======------------------------' * `--------=======------------------------'
*/ */
[_TERMINAL] = LAYOUT( [_TERMINAL] = LAYOUT_ortho_4x4(
_______, TERM_ABOUT, _______, _______, \ _______, TERM_ABOUT, _______, _______,
TERM_OFF, TERM_PRINT, _______, _______, \ TERM_OFF, TERM_PRINT, _______, _______,
_______, TERM_FLUSH, _______, _______, \ _______, TERM_FLUSH, _______, _______,
TERM_ON, TERM_HELP , _______, _______\ TERM_ON, TERM_HELP , _______, _______
), ),
/* ADMIN /* ADMIN
* ,-----------------------------------------. * ,-----------------------------------------.
* | RESET | | | X | * | RESET | | | X |
* |------------+-----+-----------+----------| * |------------+-----+-----------+----------|
* |ABOUT CKEYS | | | | * |ABOUT CKEYS | | | |
* |------------+-----+-----------+----------| * |------------+-----+-----------+----------|
* | | |CLICKY UP |CLICKY OFF| * | | |CLICKY UP |CLICKY OFF|
* |------------+-----+-----------+----------| * |------------+-----+-----------+----------|
* | X | |CLICKY DOWN|CLICKY ON | * | X | |CLICKY DOWN|CLICKY ON |
* `-----------------------------------------' * `-----------------------------------------'
*/ */
[_ADMIN] = LAYOUT( [_ADMIN] = LAYOUT_ortho_4x4(
RESET, _______, _______, _______, \ RESET, _______, _______, _______,
CKEYS_ABOUT, _______, _______, _______, \ CKEYS_ABOUT, _______, _______, _______,
_______, _______, _______, CK_OFF, \ _______, _______, _______, CK_OFF,
_______, _______, _______, CK_ON \ _______, _______, _______, CK_ON
), ),
}; };
bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
case TERM_ABOUT: case TERM_ABOUT:
if (record->event.pressed) { if (record->event.pressed) {
// when keycode TERM_ABOUT is pressed // when keycode TERM_ABOUT is pressed
SEND_STRING("about"SS_TAP(X_ENTER)); SEND_STRING("about\n");
} else { }
// when keycode TERM_ABOUT is released break;
} case TERM_PRINT:
break; if (record->event.pressed) {
case TERM_PRINT: SEND_STRING("print\n");
if (record->event.pressed) { }
SEND_STRING("print"SS_TAP(X_ENTER)); break;
} else { } case TERM_FLUSH:
break; if (record->event.pressed) {
case TERM_FLUSH: SEND_STRING("flush\n");
if (record->event.pressed) { }
SEND_STRING("flush"SS_TAP(X_ENTER)); break;
} else { } case TERM_HELP:
break; if (record->event.pressed) {
case TERM_HELP: SEND_STRING("help\n");
if (record->event.pressed) { }
SEND_STRING("help"SS_TAP(X_ENTER)); break;
} else { } case CKEYS_ABOUT:
break; if (record->event.pressed) {
case CKEYS_ABOUT: SEND_STRING("https://cKeys.org\nMaking people smile one keyboard at a time.\ncKeys is a volunteer-run 501(c)(3) nonprofit organization.\n");
if (record->event.pressed) { }
SEND_STRING("https://cKeys.org"SS_TAP(X_ENTER)"Making people smile one keyboard at a time."SS_TAP(X_ENTER)"cKeys is a volunteer-run 501(c)(3) nonprofit organization."SS_TAP(X_ENTER)); break;
} else { } }
break; return true;
}
return true;
}; };

View file

@ -2,13 +2,6 @@
MCU = atmega32u4 MCU = atmega32u4
# Bootloader selection # Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# ATmega32A bootloadHID
# ATmega328P USBasp
BOOTLOADER = caterina BOOTLOADER = caterina
# Build Options # Build Options