forked from mirrors/qmk_userspace
Merge branch 'master' of https://github.com/qmk/qmk_firmware
This commit is contained in:
commit
d977daa8dc
1320 changed files with 28827 additions and 13485 deletions
|
|
@ -1,7 +1,3 @@
|
|||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
||||
AUDIO_ENABLE = no
|
||||
MOUSEKEY_ENABLE = yes
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
87
keyboards/handwired/datahand/config.h
Normal file
87
keyboards/handwired/datahand/config.h
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
/* Copyright 2017-2019 Nikolaus Wittenstein <nikolaus.wittenstein@gmail.com>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
/* Taken from the DataHand PS/2-USB adaptor. */
|
||||
#define VENDOR_ID 0x13BA
|
||||
#define PRODUCT_ID 0x0017
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER DataHand
|
||||
#define PRODUCT DataHand
|
||||
#define DESCRIPTION DataHand Teensy++ 2.0 conversion
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 13
|
||||
#define MATRIX_COLS 4
|
||||
|
||||
#define DIODE_DIRECTION CUSTOM_MATRIX
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCING_DELAY 0
|
||||
|
||||
/* 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
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
*/
|
||||
#define FORCE_NKRO
|
||||
|
||||
/*
|
||||
* Magic Key Options
|
||||
*
|
||||
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||
* the keyboard. They are best used in combination with the HID Listen program,
|
||||
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||
*
|
||||
* The options below allow the magic key functionality to be changed. This is
|
||||
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||
*/
|
||||
|
||||
/* key combination for magic key command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
/*
|
||||
* Command/Windows key option
|
||||
*
|
||||
* If you define this, the thumb enter key becomes the Command/Windows key. There's still an enter key on the right
|
||||
* ring finger, so this key is much better utilized as the otherwise nonexistent Command key. I think some newer
|
||||
* DataHands let you remap right ring east as Command, but having it on the thumb is nicer. Comment out this define
|
||||
* to use the original layout.
|
||||
*/
|
||||
#define DATAHAND_THUMB_RETURN_COMMAND
|
||||
133
keyboards/handwired/datahand/datahand.h
Normal file
133
keyboards/handwired/datahand/datahand.h
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
/* Copyright 2017-2019 Nikolaus Wittenstein <nikolaus.wittenstein@gmail.com>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
/* This a shortcut to help you visually see your layout.
|
||||
* The first section contains all of the arguements; the second converts the arguments into a two-dimensional array.
|
||||
*/
|
||||
|
||||
/* Each code is three letters
|
||||
* l or r - left or right hand
|
||||
* p, r, m, i, t - pinky, ring finger, middle finger, index finger, thumb
|
||||
* fingers: n, s, e, w, c - north, south, east, west, and center (manual calls this "well" but we already have "west")
|
||||
* thumb: p, n, c, l, u, k - pad, nail, center, lock (harder center), up, knuckle
|
||||
*/
|
||||
#define LAYOUT( \
|
||||
lpn, lrn, lmn, lin, rin, rmn, rrn, rpn, \
|
||||
lpw, lpc, lpe, lrw, lrc, lre, lmw, lmc, lme, liw, lic, lie, riw, ric, rie, rmw, rmc, rme, rrw, rrc, rre, rpw, rpc, rpe, \
|
||||
lps, lrs, lms, lis, ris, rms, rrs, rps, \
|
||||
ltp, ltn, rtn, rtp, \
|
||||
ltc, rtc, \
|
||||
ltl, rtl, \
|
||||
ltu, ltk, rtk, rtu) \
|
||||
{ \
|
||||
{riw, rin, lpw, lpn},\
|
||||
{ric, rie, lpc, lpe},\
|
||||
{ris, rms, lps, lrs},\
|
||||
{rmw, rmn, lrw, lrn},\
|
||||
{rmc, rme, lrc, lre},\
|
||||
{rrw, rrn, lmw, lmn},\
|
||||
{rrc, rre, lmc, lme},\
|
||||
{rrs, rps, lms, lis},\
|
||||
{rpw, rpn, liw, lin},\
|
||||
{rpc, rpe, lic, lie},\
|
||||
{rtk, rtn, ltk, ltn},\
|
||||
{rtc, rtl, ltc, ltl},\
|
||||
{rtp, rtu, ltp, ltu},\
|
||||
}
|
||||
|
||||
/* Mode LEDs are active-low on Port B on the Teensy. */
|
||||
#define LED_MODE_PORT PORTB
|
||||
#define LED_TENKEY (1<<3)
|
||||
#define LED_FN (1<<4)
|
||||
#define LED_NORMAL (1<<5)
|
||||
#define LED_NAS (1<<6)
|
||||
|
||||
/* Lock LEDs are active-low on Port F on the Teensy. */
|
||||
#define LED_LOCK_PORT PORTF
|
||||
#define LED_CAPS_LOCK (1<<4)
|
||||
#define LED_MOUSE_LOCK (1<<5)
|
||||
#define LED_NUM_LOCK (1<<6)
|
||||
#define LED_SCROLL_LOCK (1<<7)
|
||||
|
||||
|
||||
/* Appendix:
|
||||
* Table based on https://geekhack.org/index.php?topic=12212.msg2059319#msg2059319
|
||||
* Some pin assignments (e.g. for PS/2 I/O) have been fixed.
|
||||
*
|
||||
* Teensy Datahand 8051 pin pin 8051 Datahand Teensy
|
||||
* ------ -------- ---- --- --- ---- -------- ------
|
||||
* GND Mtrx send A P1.0 1 40 VCC VCC VCC
|
||||
* PB7 Mtrx send B P1.1 2 39 P0.0 LED RH NAS PB6
|
||||
* PD0 Mtrx send C P1.2 3 38 P0.1 LED RH NORM PB5
|
||||
* PD1 Mtrx send D P1.3 4 37 P0.2 LED RH FCTN PB4
|
||||
* PD2 RH rcv 0 P1.4 5 36 P0.3 LED RH 10K PB3
|
||||
* PD3 RH rcv 1 P1.5 6 35 P0.4 LED RH unused PB2
|
||||
* PD4 LH rcv 0 P1.6 7 34 P0.5 LED RH unused PE1
|
||||
* PD5 LH rcv 1 P1.7 8 33 P0.6 LED RH unused PE0
|
||||
* PD6 Reset button RST 9 32 P0.7 ? PE7
|
||||
* PD7 ? P3.0 10 31 VPP - PE6
|
||||
* PE0 ? P3.1 11 30 ALE - GND
|
||||
* PE1 kbd data P3.2 12 29 PSEN - AREF
|
||||
* PC0 ? P3.3 13 28 P2.7 ? PF0
|
||||
* PC1 kbd clk P3.4 14 27 P2.6 ? PF1
|
||||
* PC2 ? P3.5 15 26 P2.5 ? PF2
|
||||
* PC3 RAM P3.6 16 25 P2.4 ? PF3
|
||||
* PC4 RAM P3.7 17 24 P2.3 LED D15 LH (CAPLK) PF4
|
||||
* PC5 XTAL2 XTAL2 18 23 P2.2 LED D13 LH (MSELK) PF5
|
||||
* PC6 XTAL1 XTAL1 19 22 P2.1 LED D6 LH (NUMLK) PF6
|
||||
* PC7 GND GND 20 21 P2.0 LED D14 LH (SCRLK) PF7
|
||||
*
|
||||
* JP3 Pinout
|
||||
* 2 - keyboard data
|
||||
* 3 - keyboard clock
|
||||
*
|
||||
* In order to get the Teensy to work, we need to move pin 1 to a different pin. This is
|
||||
* because on the Teensy pin 1 is ground, but we need to write to pin 1 in order to read
|
||||
* the keyboard matrix. An ideal pin to move it to is VPP (pin 31), because this pin tells
|
||||
* the 8051 whether it should read from external or internal memory. The Teensy doesn't
|
||||
* care about that.
|
||||
*
|
||||
* The easiest way to reassign the pin is to use standoffs. You can check out this thread:
|
||||
* https://geekhack.org/index.php?topic=12212.msg235382#msg235382 for a picture of what
|
||||
* this looks like. Note that in the picture the pin has been reassigned to pin 12. We
|
||||
* don't want to do that because we're going to use that pin to send data over PS/2.
|
||||
*
|
||||
* We could if we wanted also reassign the PS/2 pins to Teensy hardware UART pins, but
|
||||
* that's more work. Instead we'll just bit-bang PS/2 because it's an old, slow protocol
|
||||
* (and because there's already a bit-banged PS/2 host implementation in QMK - we just
|
||||
* need to add the device side).
|
||||
*
|
||||
* So overall, we want the following inputs and outputs:
|
||||
* Outputs:
|
||||
* Matrix:
|
||||
* PB7
|
||||
* PD0
|
||||
* PD1
|
||||
* PE6 (moved from pin1, GND)
|
||||
* LEDs:
|
||||
* PB3-6
|
||||
* PF4-7
|
||||
* Inputs:
|
||||
* Matrix:
|
||||
* PD2-5
|
||||
* I/Os (start up as inputs):
|
||||
* PS/2:
|
||||
* PC1
|
||||
* PE1
|
||||
*/
|
||||
313
keyboards/handwired/datahand/keymaps/default/keymap.c
Normal file
313
keyboards/handwired/datahand/keymaps/default/keymap.c
Normal file
|
|
@ -0,0 +1,313 @@
|
|||
/* Copyright 2017-2019 Nikolaus Wittenstein <nikolaus.wittenstein@gmail.com>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
/* Datahand features not supported:
|
||||
* * All online reprogramming (user settings using the reset button).
|
||||
* * Program Selection features.
|
||||
* * Macros.
|
||||
* * Direct substitutions.
|
||||
* * L/R Modf.
|
||||
* * Mouse Click Lock (Function Direct Access + Mouse Button key).
|
||||
* * Different mouse movement speeds with the two pointer fingers, and using both pointer fingers to move even faster.
|
||||
*
|
||||
* As far as I know, everything else works.
|
||||
*/
|
||||
|
||||
enum layer {
|
||||
NORMAL,
|
||||
#ifdef DATAHAND_THUMB_RETURN_COMMAND
|
||||
NORMAL_THUMB_RETURN_COMMAND,
|
||||
#endif
|
||||
FUNCTION_MOUSE,
|
||||
FUNCTION_ARROWS,
|
||||
NAS,
|
||||
NAS_NUMLOCK,
|
||||
NAS_TENKEY,
|
||||
NAS_TENKEY_NUMLOCK,
|
||||
|
||||
NUM_LAYERS
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
N = SAFE_RANGE, /* Normal */
|
||||
NS, /* NAS */
|
||||
NSL, /* NAS Lock */
|
||||
NLK, /* Numlock */
|
||||
FN, /* Function mode - needs to be able to switch to mouse or arrow layer */
|
||||
TK0, /* Ten-key off button */
|
||||
TK1, /* Ten-key on button */
|
||||
AR, /* FN arrow mode */
|
||||
MS, /* FN mouse mode */
|
||||
DZ, /* Double zero button */
|
||||
};
|
||||
|
||||
static bool mouse_enabled = true;
|
||||
static bool tenkey_enabled = false;
|
||||
static bool numlock_enabled = false;
|
||||
static bool nas_locked = false;
|
||||
|
||||
/* Declared weak so that it can easily be overridden. */
|
||||
__attribute__((weak)) const uint16_t PROGMEM keymaps[NUM_LAYERS][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[NORMAL] = LAYOUT(
|
||||
KC_Q, KC_W, KC_E, KC_R, KC_U, KC_I, KC_O, KC_P,
|
||||
KC_DEL, KC_A, KC_LBRC, KC_ESC, KC_S, KC_B, KC_GRV, KC_D, KC_T, KC_DQT, KC_F, KC_G, KC_H, KC_J, KC_QUOT, KC_Y, KC_K, KC_COLN, KC_N, KC_L, KC_ENT, KC_RBRC, KC_SCLN, KC_BSLS,
|
||||
KC_Z, KC_X, KC_C, KC_V, KC_M, KC_COMM, KC_DOT, KC_SLSH,
|
||||
KC_ENT, KC_TAB, KC_BSPC, KC_SPC,
|
||||
KC_LSFT, NS,
|
||||
KC_CAPS, NSL,
|
||||
N, KC_LCTL, KC_LALT, FN),
|
||||
|
||||
#ifdef DATAHAND_THUMB_RETURN_COMMAND
|
||||
[NORMAL_THUMB_RETURN_COMMAND] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||
KC_LCMD, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______, _______,
|
||||
_______, _______, _______, _______),
|
||||
#endif
|
||||
|
||||
[FUNCTION_MOUSE] = LAYOUT(
|
||||
KC_F2, KC_F4, KC_F6, KC_MS_U, KC_MS_U, KC_F8, KC_F10, KC_PGUP,
|
||||
_______, KC_NO, KC_SLCK, _______, KC_BTN3, NLK, KC_BTN1, MS, KC_BTN2, KC_MS_L, KC_BTN1, KC_MS_R, KC_MS_L, KC_BTN2, KC_MS_R, KC_END, AR, KC_LSFT, KC_INS, KC_9, KC_ENT, KC_F11, KC_0, KC_F12,
|
||||
KC_F1, KC_F3, KC_F5, KC_MS_D, KC_MS_D, KC_F7, KC_F9, KC_PGDN,
|
||||
_______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______, _______,
|
||||
_______, _______, _______, _______),
|
||||
[FUNCTION_ARROWS] = LAYOUT(
|
||||
_______, _______, _______, KC_UP, KC_UP, _______, _______, _______,
|
||||
_______, _______, _______, _______, KC_LCTL, _______, _______, _______, _______, KC_LEFT, KC_HOME, KC_RGHT, KC_LEFT, KC_HOME, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, KC_DOWN, KC_DOWN, _______, _______, _______,
|
||||
_______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______, _______,
|
||||
_______, _______, _______, _______),
|
||||
[NAS] = LAYOUT(
|
||||
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
|
||||
_______, KC_1, KC_TILD, _______, KC_2, NLK, KC_LABK, KC_3, KC_RABK, KC_SLSH, KC_4, KC_5, KC_6, KC_7, KC_UNDS, KC_CIRC, KC_8, KC_ENT, KC_SCLN, KC_9, KC_BSLS, TK0, KC_0, TK1,
|
||||
KC_EQL, KC_X, KC_PERC, KC_MINS, KC_PLUS, KC_DOT, KC_SLSH, KC_QUES,
|
||||
_______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______, _______,
|
||||
_______, _______, _______, _______),
|
||||
[NAS_NUMLOCK] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, KC_PAST, _______, _______,
|
||||
_______, KC_KP_1, _______, _______, KC_KP_2, _______, _______, KC_KP_3, _______, KC_PSLS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_7, _______, _______, KC_KP_8, _______, _______, KC_KP_9, KC_PENT, _______, KC_KP_0, _______,
|
||||
KC_PEQL, _______, _______, KC_PMNS, KC_PPLS, _______, KC_PDOT, _______,
|
||||
_______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______, _______,
|
||||
_______, _______, _______, _______),
|
||||
[NAS_TENKEY] = LAYOUT(
|
||||
_______, _______, _______, KC_UP, KC_7, KC_8, KC_9, KC_ASTR,
|
||||
_______, KC_QUOT, _______, _______, KC_DLR, _______, _______, KC_AMPR, _______, KC_LEFT, KC_HOME, KC_RGHT, KC_0, KC_4, DZ, KC_PLUS, KC_5, KC_MINS, KC_EQL, KC_6, KC_ENT, _______, KC_DOT, _______,
|
||||
KC_LPRN, KC_RPRN, _______, KC_DOWN, KC_1, KC_2, KC_3, KC_SLSH,
|
||||
_______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______, _______,
|
||||
_______, _______, _______, _______),
|
||||
[NAS_TENKEY_NUMLOCK] = LAYOUT(
|
||||
_______, _______, _______, _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_PAST,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_KP_0, KC_KP_4, _______, KC_PPLS, KC_KP_5, KC_PMNS, KC_PEQL, KC_KP_6, KC_PENT, _______, KC_PDOT, _______,
|
||||
_______, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PSLS,
|
||||
_______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______, _______,
|
||||
_______, _______, _______, _______),
|
||||
};
|
||||
|
||||
static void lock_led_set(bool on, uint8_t led) {
|
||||
if (on) {
|
||||
LED_LOCK_PORT &= ~led;
|
||||
} else {
|
||||
LED_LOCK_PORT |= led;
|
||||
}
|
||||
}
|
||||
|
||||
static void mode_led_set(uint8_t led) {
|
||||
static const uint8_t ALL_MODE_LEDS = LED_FN | LED_NORMAL | LED_NAS | LED_TENKEY;
|
||||
LED_MODE_PORT |= ALL_MODE_LEDS;
|
||||
LED_MODE_PORT &= ~led;
|
||||
}
|
||||
|
||||
static void layer_set(bool on, uint8_t layer) {
|
||||
if (on) {
|
||||
layer_on(layer);
|
||||
} else {
|
||||
layer_off(layer);
|
||||
}
|
||||
|
||||
if (layer_state_is(NAS) || layer_state_is(NAS_NUMLOCK) || layer_state_is(NAS_TENKEY) || layer_state_is(NAS_TENKEY_NUMLOCK)) {
|
||||
if (tenkey_enabled) {
|
||||
mode_led_set(LED_NAS | LED_TENKEY);
|
||||
} else {
|
||||
mode_led_set(LED_NAS);
|
||||
}
|
||||
} else if (layer_state_is(FUNCTION_MOUSE) || layer_state_is(FUNCTION_ARROWS)) {
|
||||
mode_led_set(LED_FN);
|
||||
} else if (layer_state_is(NORMAL)) {
|
||||
mode_led_set(LED_NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
static void set_normal(void) {
|
||||
layer_move(NORMAL);
|
||||
|
||||
#ifdef DATAHAND_THUMB_RETURN_COMMAND
|
||||
layer_set(true, NORMAL_THUMB_RETURN_COMMAND);
|
||||
#endif
|
||||
|
||||
/* Then call layer_set to update LEDs. */
|
||||
layer_set(true, NORMAL);
|
||||
}
|
||||
|
||||
static void set_nas(bool on) {
|
||||
/* Always turn on the base NAS layer so other layers can fall through. */
|
||||
layer_set(on, NAS);
|
||||
|
||||
layer_set(on && numlock_enabled, NAS_NUMLOCK);
|
||||
layer_set(on && tenkey_enabled, NAS_TENKEY);
|
||||
layer_set(on && tenkey_enabled && numlock_enabled, NAS_TENKEY_NUMLOCK);
|
||||
}
|
||||
|
||||
static void set_tenkey(bool on) {
|
||||
tenkey_enabled = on;
|
||||
|
||||
/* We have to be on the NAS layer in order to be able to toggle TK.
|
||||
* Re-toggle it on so that we move to the right layer (and set the right LED).
|
||||
*/
|
||||
set_nas(true);
|
||||
}
|
||||
|
||||
static void toggle_numlock(void) {
|
||||
numlock_enabled = !numlock_enabled;
|
||||
lock_led_set(numlock_enabled, LED_NUM_LOCK);
|
||||
|
||||
if (layer_state_is(NAS)) {
|
||||
/* If we're already in NAS, re-set it so that we activate the numlock layer. */
|
||||
set_nas(true);
|
||||
}
|
||||
}
|
||||
|
||||
static void set_function(void) {
|
||||
/* Make sure to turn off NAS if we're entering function */
|
||||
set_nas(false);
|
||||
|
||||
/* Always turn on the mouse layer so the arrow layer can fall through. */
|
||||
layer_set(true, FUNCTION_MOUSE);
|
||||
layer_set(!mouse_enabled, FUNCTION_ARROWS);
|
||||
}
|
||||
|
||||
static void set_mouse_enabled(bool on) {
|
||||
mouse_enabled = on;
|
||||
|
||||
/* Re-run set_function to set our layers correctly. */
|
||||
set_function();
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
bool pressed = record->event.pressed;
|
||||
|
||||
switch(keycode) {
|
||||
case N:
|
||||
if (pressed) {
|
||||
set_normal();
|
||||
}
|
||||
break;
|
||||
|
||||
case NS:
|
||||
if (pressed) {
|
||||
nas_locked = false;
|
||||
}
|
||||
set_nas(pressed);
|
||||
break;
|
||||
|
||||
case NSL:
|
||||
if (pressed) {
|
||||
nas_locked = true;
|
||||
set_nas(true);
|
||||
}
|
||||
break;
|
||||
|
||||
case NLK:
|
||||
if (pressed) {
|
||||
toggle_numlock();
|
||||
SEND_STRING(SS_DOWN(X_NUMLOCK));
|
||||
} else {
|
||||
SEND_STRING(SS_UP(X_NUMLOCK));
|
||||
}
|
||||
break;
|
||||
|
||||
case FN:
|
||||
if (pressed) {
|
||||
set_function();
|
||||
}
|
||||
break;
|
||||
|
||||
case TK0:
|
||||
if (pressed) {
|
||||
set_tenkey(false);
|
||||
}
|
||||
break;
|
||||
|
||||
case TK1:
|
||||
if (pressed) {
|
||||
set_tenkey(true);
|
||||
}
|
||||
break;
|
||||
|
||||
case MS:
|
||||
if (pressed) {
|
||||
set_mouse_enabled(true);
|
||||
}
|
||||
break;
|
||||
|
||||
case AR:
|
||||
if (pressed) {
|
||||
set_mouse_enabled(false);
|
||||
}
|
||||
break;
|
||||
|
||||
case DZ:
|
||||
if (pressed) {
|
||||
SEND_STRING(SS_TAP(X_KP_0) SS_TAP(X_KP_0));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
void matrix_init_user(void) {
|
||||
#ifdef DATAHAND_THUMB_RETURN_COMMAND
|
||||
set_normal();
|
||||
#endif
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
lock_led_set(usb_led & (1<<USB_LED_NUM_LOCK), LED_NUM_LOCK);
|
||||
lock_led_set(usb_led & (1<<USB_LED_CAPS_LOCK), LED_CAPS_LOCK);
|
||||
lock_led_set(usb_led & (1<<USB_LED_SCROLL_LOCK), LED_SCROLL_LOCK);
|
||||
}
|
||||
125
keyboards/handwired/datahand/matrix.c
Normal file
125
keyboards/handwired/datahand/matrix.c
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
/* Copyright 2017-2019 Nikolaus Wittenstein <nikolaus.wittenstein@gmail.com>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "datahand.h"
|
||||
|
||||
#include "matrix.h"
|
||||
#include "action.h"
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <avr/io.h>
|
||||
|
||||
static matrix_row_t matrix[MATRIX_ROWS];
|
||||
|
||||
static matrix_row_t read_cols(void);
|
||||
static void select_row(uint8_t row);
|
||||
|
||||
void matrix_init(void) {
|
||||
/* See datahand.h for more detail on pins. */
|
||||
|
||||
/* 7 - matrix scan; 6-3 - mode LEDs */
|
||||
DDRB = 0b11111000;
|
||||
|
||||
/* 1-0 - matrix scan */
|
||||
DDRD = 0b00000011;
|
||||
|
||||
/* 6 - matrix scan */
|
||||
DDRE = 0b01000000;
|
||||
|
||||
/* 7-4 - lock LEDs */
|
||||
DDRF = 0b11110000;
|
||||
|
||||
/* Turn off the non-Normal LEDs (they're active low). */
|
||||
PORTB |= LED_TENKEY | LED_FN | LED_NAS;
|
||||
|
||||
/* Turn off the lock LEDs. */
|
||||
PORTF |= LED_CAPS_LOCK | LED_NUM_LOCK | LED_SCROLL_LOCK | LED_MOUSE_LOCK;
|
||||
|
||||
matrix_init_user();
|
||||
}
|
||||
|
||||
uint8_t matrix_scan(void) {
|
||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||
select_row(row);
|
||||
/* The default hardware works down to at least 100us, but I have a replacement
|
||||
* photodiode that responds a little more slowly. Cranking it up to 1000us fixes
|
||||
* shadowing issues.
|
||||
*/
|
||||
_delay_us(1000);
|
||||
matrix[row] = read_cols();
|
||||
}
|
||||
|
||||
matrix_scan_user();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
matrix_row_t matrix_get_row(uint8_t row) {
|
||||
return matrix[row];
|
||||
}
|
||||
|
||||
void matrix_print(void) {
|
||||
print("\nr/c 01234567\n");
|
||||
|
||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||
phex(row);
|
||||
print(": ");
|
||||
print_bin_reverse8(matrix_get_row(row));
|
||||
print("\n");
|
||||
}
|
||||
}
|
||||
|
||||
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||
return process_record_user(keycode, record);
|
||||
}
|
||||
|
||||
static void select_row(uint8_t row) {
|
||||
/* Original 8051: P1 bits 0-3 (pins 1-4)
|
||||
* Teensy++: PE0, PB7, PD0, PD1
|
||||
*/
|
||||
|
||||
if (row & (1<<0)) {
|
||||
PORTE |= (1<<6);
|
||||
} else {
|
||||
PORTE &= ~(1<<6);
|
||||
}
|
||||
|
||||
if (row & (1<<1)) {
|
||||
PORTB |= (1<<7);
|
||||
} else {
|
||||
PORTB &= ~(1<<7);
|
||||
}
|
||||
|
||||
if (row & (1<<2)) {
|
||||
PORTD |= (1<<0);
|
||||
} else {
|
||||
PORTD &= ~(1<<0);
|
||||
}
|
||||
|
||||
if (row & (1<<3)) {
|
||||
PORTD |= (1<<1);
|
||||
} else {
|
||||
PORTD &= ~(1<<1);
|
||||
}
|
||||
}
|
||||
|
||||
static matrix_row_t read_cols(void) {
|
||||
/* Original 8051: P1 bits 4-7 (pins 5-8)
|
||||
* Teensy++: PD bits 2-5
|
||||
*/
|
||||
|
||||
return (PIND & 0b00111100) >> 2;
|
||||
}
|
||||
15
keyboards/handwired/datahand/readme.md
Normal file
15
keyboards/handwired/datahand/readme.md
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
# DataHand
|
||||
|
||||
A keyboard designed to prevent RSI. See [Wikipedia](https://en.wikipedia.org/wiki/DataHand) and [this website](http://octopup.org/computer/datahand) for more info.
|
||||
|
||||
To use this firmware, you have to replace the stock microcontroller with a Teensy++ 2.0. This is relatively easy and also reversible. See the notes at the bottom of datahand.h for more info.
|
||||
|
||||
Keyboard Maintainer: [Nikolaus Wittenstein](https://github.com/adzenith)
|
||||
Hardware Supported: DataHand Personal or Pro II
|
||||
Hardware Availability: No longer in production
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make handwired/datahand:default
|
||||
|
||||
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).
|
||||
59
keyboards/handwired/datahand/rules.mk
Normal file
59
keyboards/handwired/datahand/rules.mk
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
# Project-specific includes
|
||||
SRC = matrix.c
|
||||
|
||||
# MCU name
|
||||
MCU = at90usb1286
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
BOOTLOADER = halfkay
|
||||
|
||||
# Build Options
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
CUSTOM_MATRIX = yes # We definitely have a nonstandard matrix
|
||||
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
245
keyboards/handwired/downbubble/config.h
Normal file
245
keyboards/handwired/downbubble/config.h
Normal file
|
|
@ -0,0 +1,245 @@
|
|||
/*
|
||||
Copyright 2018 Don Chiou
|
||||
|
||||
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 0x0001
|
||||
#define MANUFACTURER Flehrad
|
||||
#define PRODUCT downbubble
|
||||
#define DESCRIPTION An Ergonomic Centered Numpad Keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 6
|
||||
#define MATRIX_COLS 20
|
||||
|
||||
/*
|
||||
* Keyboard Matrix Assignments
|
||||
*
|
||||
* Change this to how you wired your keyboard
|
||||
* COLS: AVR pins used for columns, left to right
|
||||
* ROWS: AVR pins used for rows, top to bottom
|
||||
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||
*
|
||||
*/
|
||||
#define MATRIX_ROW_PINS { F1, F2, F3, F4, F5, F6 }
|
||||
#define MATRIX_COL_PINS { F7, C7, C6, C5, C4, C3, C2, C1, C0, E1, E0, D7, D6, D5, D4, D3, D2, D1, D0, B7 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/*
|
||||
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
|
||||
*/
|
||||
//#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
|
||||
|
||||
// #define BACKLIGHT_PIN B7
|
||||
// #define BACKLIGHT_BREATHING
|
||||
// #define BACKLIGHT_LEVELS 3
|
||||
|
||||
// #define RGB_DI_PIN E2
|
||||
// #ifdef RGB_DI_PIN
|
||||
// #define RGBLED_NUM 16
|
||||
// #define RGBLIGHT_HUE_STEP 8
|
||||
// #define RGBLIGHT_SAT_STEP 8
|
||||
// #define RGBLIGHT_VAL_STEP 8
|
||||
// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
|
||||
// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
|
||||
// /*== all animations enable ==*/
|
||||
// #define RGBLIGHT_ANIMATIONS
|
||||
// /*== or choose animations ==*/
|
||||
// #define RGBLIGHT_EFFECT_BREATHING
|
||||
// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||
// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||
// #define RGBLIGHT_EFFECT_SNAKE
|
||||
// #define RGBLIGHT_EFFECT_KNIGHT
|
||||
// #define RGBLIGHT_EFFECT_CHRISTMAS
|
||||
// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||
// #define RGBLIGHT_EFFECT_RGB_TEST
|
||||
// #define RGBLIGHT_EFFECT_ALTERNATING
|
||||
// #endif
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCING_DELAY 5
|
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* number of backlight levels */
|
||||
|
||||
/* 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
|
||||
|
||||
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||
*/
|
||||
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
*
|
||||
*/
|
||||
//#define FORCE_NKRO
|
||||
|
||||
/*
|
||||
* Magic Key Options
|
||||
*
|
||||
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||
* the keyboard. They are best used in combination with the HID Listen program,
|
||||
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||
*
|
||||
* The options below allow the magic key functionality to be changed. This is
|
||||
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||
*
|
||||
*/
|
||||
|
||||
/* key combination for magic key command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
/* control how magic key switches layers */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||
|
||||
/* override magic key keymap */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||
//#define MAGIC_KEY_HELP1 H
|
||||
//#define MAGIC_KEY_HELP2 SLASH
|
||||
//#define MAGIC_KEY_DEBUG D
|
||||
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||
//#define MAGIC_KEY_DEBUG_KBD K
|
||||
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||
//#define MAGIC_KEY_VERSION V
|
||||
//#define MAGIC_KEY_STATUS S
|
||||
//#define MAGIC_KEY_CONSOLE C
|
||||
//#define MAGIC_KEY_LAYER0_ALT1 ESC
|
||||
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
|
||||
//#define MAGIC_KEY_LAYER0 0
|
||||
//#define MAGIC_KEY_LAYER1 1
|
||||
//#define MAGIC_KEY_LAYER2 2
|
||||
//#define MAGIC_KEY_LAYER3 3
|
||||
//#define MAGIC_KEY_LAYER4 4
|
||||
//#define MAGIC_KEY_LAYER5 5
|
||||
//#define MAGIC_KEY_LAYER6 6
|
||||
//#define MAGIC_KEY_LAYER7 7
|
||||
//#define MAGIC_KEY_LAYER8 8
|
||||
//#define MAGIC_KEY_LAYER9 9
|
||||
//#define MAGIC_KEY_BOOTLOADER PAUSE
|
||||
//#define MAGIC_KEY_LOCK CAPS
|
||||
//#define MAGIC_KEY_EEPROM E
|
||||
//#define MAGIC_KEY_NKRO N
|
||||
//#define MAGIC_KEY_SLEEP_LED Z
|
||||
|
||||
/*
|
||||
* 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
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/*
|
||||
* MIDI options
|
||||
*/
|
||||
|
||||
/* Prevent use of disabled MIDI features in the keymap */
|
||||
//#define MIDI_ENABLE_STRICT 1
|
||||
|
||||
/* enable basic MIDI features:
|
||||
- MIDI notes can be sent when in Music mode is on
|
||||
*/
|
||||
//#define MIDI_BASIC
|
||||
|
||||
/* enable advanced MIDI features:
|
||||
- MIDI notes can be added to the keymap
|
||||
- Octave shift and transpose
|
||||
- Virtual sustain, portamento, and modulation wheel
|
||||
- etc.
|
||||
*/
|
||||
//#define MIDI_ADVANCED
|
||||
|
||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||
|
||||
/*
|
||||
* HD44780 LCD Display Configuration
|
||||
*/
|
||||
/*
|
||||
#define LCD_LINES 2 //< number of visible lines of the display
|
||||
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
|
||||
|
||||
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
|
||||
|
||||
#if LCD_IO_MODE
|
||||
#define LCD_PORT PORTB //< port for the LCD lines
|
||||
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
|
||||
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
|
||||
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
|
||||
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
|
||||
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
|
||||
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
|
||||
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
|
||||
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
|
||||
#define LCD_RS_PORT LCD_PORT //< port for RS line
|
||||
#define LCD_RS_PIN 3 //< pin for RS line
|
||||
#define LCD_RW_PORT LCD_PORT //< port for RW line
|
||||
#define LCD_RW_PIN 2 //< pin for RW line
|
||||
#define LCD_E_PORT LCD_PORT //< port for Enable line
|
||||
#define LCD_E_PIN 1 //< pin for Enable line
|
||||
#endif
|
||||
*/
|
||||
|
||||
/* Bootmagic Lite key configuration */
|
||||
// #define BOOTMAGIC_LITE_ROW 0
|
||||
// #define BOOTMAGIC_LITE_COLUMN 0
|
||||
16
keyboards/handwired/downbubble/downbubble.c
Normal file
16
keyboards/handwired/downbubble/downbubble.c
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
/* Copyright 2018 REPLACE_WITH_YOUR_NAME
|
||||
*
|
||||
* 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 "downbubble.h"
|
||||
111
keyboards/handwired/downbubble/downbubble.h
Normal file
111
keyboards/handwired/downbubble/downbubble.h
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
/* Copyright 2018 REPLACE_WITH_YOUR_NAME
|
||||
*
|
||||
* 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"
|
||||
|
||||
/* This a shortcut to help you visually see your layout.
|
||||
*
|
||||
* The first section contains all of the arguments representing the physical
|
||||
* layout of the board and position of the keys.
|
||||
*
|
||||
* The second converts the arguments into a two-dimensional array which
|
||||
* represents the switch matrix.
|
||||
*/
|
||||
#define LAYOUT_standard( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K118, K119,\
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
|
||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K29, K310, K311, K312, K313, K314, K315, K317, \
|
||||
K40, K41, K42, K43, K44, K45, K46, K47, K48, K410, K411, K412, K413, K414, K416, K418, \
|
||||
K50, K51, K52, K53, K54, K56, K58, K49, K510, K512, K513, K514, K516, K517, K518, K519 \
|
||||
) \
|
||||
{ \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, KC_NO, K118, K119 }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, KC_NO, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
|
||||
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, KC_NO, K418, KC_NO }, \
|
||||
{ K50, K51, K52, K53, K54, KC_NO, K56, KC_NO, K58, KC_NO, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
|
||||
}
|
||||
|
||||
#define LAYOUT_split_bs( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119,\
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
|
||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K29, K310, K311, K312, K313, K314, K315, K317, \
|
||||
K40, K41, K42, K43, K44, K45, K46, K47, K48, K410, K411, K412, K413, K414, K416, K418, \
|
||||
K50, K51, K52, K53, K54, K56, K58, K49, K510, K512, K513, K514, K516, K517, K518, K519 \
|
||||
) \
|
||||
{ \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119 }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, KC_NO, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
|
||||
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, KC_NO, K418, KC_NO }, \
|
||||
{ K50, K51, K52, K53, K54, KC_NO, K56, KC_NO, K58, KC_NO, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
|
||||
}
|
||||
|
||||
#define LAYOUT_split_rshift( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K118, K119,\
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
|
||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K29, K310, K311, K312, K313, K314, K315, K317, \
|
||||
K40, K41, K42, K43, K44, K45, K46, K47, K48, K410, K411, K412, K413, K414, K416, K417, K418, \
|
||||
K50, K51, K52, K53, K54, K56, K58, K49, K510, K512, K513, K514, K516, K517, K518, K519 \
|
||||
) \
|
||||
{ \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, KC_NO, K118, K119 }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, KC_NO, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
|
||||
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, K417, K418, KC_NO }, \
|
||||
{ K50, K51, K52, K53, K54, KC_NO, K56, KC_NO, K58, KC_NO, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
|
||||
}
|
||||
|
||||
#define LAYOUT_split_numpad( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K118, K119,\
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
|
||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313, K314, K315, K317, \
|
||||
K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, K416, K418, \
|
||||
K50, K51, K52, K53, K54, K56, K57, K58, K59, K510, K512, K513, K514, K516, K517, K518, K519 \
|
||||
) \
|
||||
{ \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, KC_NO, K118, K119 }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
|
||||
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, KC_NO, K418, KC_NO }, \
|
||||
{ K50, K51, K52, K53, K54, KC_NO, K56, K57, K58, K59, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
|
||||
}
|
||||
|
||||
#define LAYOUT_all( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119,\
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
|
||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313, K314, K315, K317, \
|
||||
K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, K416, K417, K418, \
|
||||
K50, K51, K52, K53, K54, K56, K57, K58, K59, K510, K512, K513, K514, K516, K517, K518, K519 \
|
||||
) \
|
||||
{ \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119 }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
|
||||
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, K417, K418, KC_NO }, \
|
||||
{ K50, K51, K52, K53, K54, KC_NO, K56, K57, K58, K59, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
|
||||
}
|
||||
559
keyboards/handwired/downbubble/info.json
Normal file
559
keyboards/handwired/downbubble/info.json
Normal file
|
|
@ -0,0 +1,559 @@
|
|||
{
|
||||
"keyboard_name": "downbubble",
|
||||
"url": "",
|
||||
"maintainer": "flehrad",
|
||||
"width": 22.75,
|
||||
"height": 6,
|
||||
"layouts": {
|
||||
"LAYOUT_standard": {
|
||||
"layout": [
|
||||
{"label":"K00", "x":0, "y":0},
|
||||
{"label":"K01", "x":1, "y":0},
|
||||
{"label":"K02", "x":2, "y":0},
|
||||
{"label":"K03", "x":3, "y":0},
|
||||
{"label":"K04", "x":4, "y":0},
|
||||
{"label":"K05", "x":5, "y":0},
|
||||
{"label":"K06", "x":6, "y":0},
|
||||
{"label":"K010", "x":12.75, "y":0},
|
||||
{"label":"K011", "x":13.75, "y":0},
|
||||
{"label":"K012", "x":14.75, "y":0},
|
||||
{"label":"K013", "x":15.75, "y":0},
|
||||
{"label":"K014", "x":16.75, "y":0},
|
||||
{"label":"K015", "x":17.75, "y":0},
|
||||
{"label":"K016", "x":18.75, "y":0},
|
||||
{"label":"K017", "x":19.75, "y":0},
|
||||
{"label":"K018", "x":20.75, "y":0},
|
||||
{"label":"K019", "x":21.75, "y":0},
|
||||
{"label":"K10", "x":0, "y":1},
|
||||
{"label":"K11", "x":1, "y":1},
|
||||
{"label":"K12", "x":2, "y":1},
|
||||
{"label":"K13", "x":3, "y":1},
|
||||
{"label":"K14", "x":4, "y":1},
|
||||
{"label":"K15", "x":5, "y":1},
|
||||
{"label":"K16", "x":6, "y":1},
|
||||
{"label":"K17", "x":8.75, "y":1},
|
||||
{"label":"K18", "x":9.75, "y":1},
|
||||
{"label":"K19", "x":10.75, "y":1},
|
||||
{"label":"K110", "x":12.75, "y":1},
|
||||
{"label":"K111", "x":13.75, "y":1},
|
||||
{"label":"K112", "x":14.75, "y":1},
|
||||
{"label":"K113", "x":15.75, "y":1},
|
||||
{"label":"K114", "x":16.75, "y":1},
|
||||
{"label":"K115", "x":17.75, "y":1},
|
||||
{"label":"K116", "x":18.75, "y":1, "w":2},
|
||||
{"label":"K118", "x":20.75, "y":1},
|
||||
{"label":"K119", "x":21.75, "y":1},
|
||||
{"label":"K20", "x":0, "y":2, "w":1.5},
|
||||
{"label":"K21", "x":1.5, "y":2},
|
||||
{"label":"K22", "x":2.5, "y":2},
|
||||
{"label":"K23", "x":3.5, "y":2},
|
||||
{"label":"K24", "x":4.5, "y":2},
|
||||
{"label":"K25", "x":5.5, "y":2},
|
||||
{"label":"K26", "x":7.75, "y":2},
|
||||
{"label":"K17", "x":8.75, "y":2},
|
||||
{"label":"K28", "x":9.75, "y":2},
|
||||
{"label":"K210", "x":12.25, "y":2},
|
||||
{"label":"K211", "x":13.25, "y":2},
|
||||
{"label":"K212", "x":14.25, "y":2},
|
||||
{"label":"K213", "x":15.25, "y":2},
|
||||
{"label":"K214", "x":16.25, "y":2},
|
||||
{"label":"K215", "x":17.25, "y":2},
|
||||
{"label":"K216", "x":18.25, "y":2},
|
||||
{"label":"K217", "x":19.25, "y":2, "w":1.5},
|
||||
{"label":"K218", "x":20.75, "y":2},
|
||||
{"label":"K219", "x":21.75, "y":2},
|
||||
{"label":"K30", "x":0, "y":3, "w":1.75},
|
||||
{"label":"K31", "x":1.75, "y":3},
|
||||
{"label":"K32", "x":2.75, "y":3},
|
||||
{"label":"K33", "x":3.75, "y":3},
|
||||
{"label":"K34", "x":4.75, "y":3},
|
||||
{"label":"K35", "x":5.75, "y":3},
|
||||
{"label":"K36", "x":7.75, "y":3},
|
||||
{"label":"K37", "x":8.75, "y":3},
|
||||
{"label":"K38", "x":9.75, "y":3},
|
||||
{"label":"K29", "x":10.75, "y":2, "h":2},
|
||||
{"label":"K310", "x":12.5, "y":3},
|
||||
{"label":"K311", "x":13.5, "y":3},
|
||||
{"label":"K312", "x":14.5, "y":3},
|
||||
{"label":"K313", "x":15.5, "y":3},
|
||||
{"label":"K314", "x":16.5, "y":3},
|
||||
{"label":"K315", "x":17.5, "y":3},
|
||||
{"label":"K317", "x":18.5, "y":3, "w":2.25},
|
||||
{"label":"K40", "x":0, "y":4, "w":2.25},
|
||||
{"label":"K41", "x":2.25, "y":4},
|
||||
{"label":"K42", "x":3.25, "y":4},
|
||||
{"label":"K43", "x":4.25, "y":4},
|
||||
{"label":"K44", "x":5.25, "y":4},
|
||||
{"label":"K45", "x":6.25, "y":4},
|
||||
{"label":"K46", "x":7.75, "y":4},
|
||||
{"label":"K47", "x":8.75, "y":4},
|
||||
{"label":"K48", "x":9.75, "y":4},
|
||||
{"label":"K410", "x":13, "y":4},
|
||||
{"label":"K411", "x":14, "y":4},
|
||||
{"label":"K412", "x":15, "y":4},
|
||||
{"label":"K413", "x":16, "y":4},
|
||||
{"label":"K414", "x":17, "y":4},
|
||||
{"label":"K416", "x":18, "y":4, "w":2.75},
|
||||
{"label":"K418", "x":20.75, "y":4},
|
||||
{"label":"K50", "x":0, "y":5, "w":1.25},
|
||||
{"label":"K51", "x":1.25, "y":5, "w":1.25},
|
||||
{"label":"K52", "x":2.5, "y":5, "w":1.25},
|
||||
{"label":"K53", "x":3.75, "y":5, "w":1.25},
|
||||
{"label":"K54", "x":5, "y":5, "w":2.25},
|
||||
{"label":"K56", "x":7.75, "y":5, "w":2},
|
||||
{"label":"K58", "x":9.75, "y":5},
|
||||
{"label":"K49", "x":10.75, "y":4, "h":2},
|
||||
{"label":"K510", "x":13, "y":5, "w":2},
|
||||
{"label":"K512", "x":15, "y":5, "w":1.25},
|
||||
{"label":"K513", "x":16.25, "y":5, "w":1.25},
|
||||
{"label":"K514", "x":17.5, "y":5, "w":1.25},
|
||||
{"label":"K516", "x":18.75, "y":5},
|
||||
{"label":"K517", "x":19.75, "y":5},
|
||||
{"label":"K518", "x":20.75, "y":5},
|
||||
{"label":"K519", "x":21.75, "y":5}
|
||||
]
|
||||
},
|
||||
"LAYOUT_split_bs": {
|
||||
"layout": [
|
||||
{"label":"K00", "x":0, "y":0},
|
||||
{"label":"K01", "x":1, "y":0},
|
||||
{"label":"K02", "x":2, "y":0},
|
||||
{"label":"K03", "x":3, "y":0},
|
||||
{"label":"K04", "x":4, "y":0},
|
||||
{"label":"K05", "x":5, "y":0},
|
||||
{"label":"K06", "x":6, "y":0},
|
||||
{"label":"K010", "x":12.75, "y":0},
|
||||
{"label":"K011", "x":13.75, "y":0},
|
||||
{"label":"K012", "x":14.75, "y":0},
|
||||
{"label":"K013", "x":15.75, "y":0},
|
||||
{"label":"K014", "x":16.75, "y":0},
|
||||
{"label":"K015", "x":17.75, "y":0},
|
||||
{"label":"K016", "x":18.75, "y":0},
|
||||
{"label":"K017", "x":19.75, "y":0},
|
||||
{"label":"K018", "x":20.75, "y":0},
|
||||
{"label":"K019", "x":21.75, "y":0},
|
||||
{"label":"K10", "x":0, "y":1},
|
||||
{"label":"K11", "x":1, "y":1},
|
||||
{"label":"K12", "x":2, "y":1},
|
||||
{"label":"K13", "x":3, "y":1},
|
||||
{"label":"K14", "x":4, "y":1},
|
||||
{"label":"K15", "x":5, "y":1},
|
||||
{"label":"K16", "x":6, "y":1},
|
||||
{"label":"K17", "x":8.75, "y":1},
|
||||
{"label":"K18", "x":9.75, "y":1},
|
||||
{"label":"K19", "x":10.75, "y":1},
|
||||
{"label":"K110", "x":12.75, "y":1},
|
||||
{"label":"K111", "x":13.75, "y":1},
|
||||
{"label":"K112", "x":14.75, "y":1},
|
||||
{"label":"K113", "x":15.75, "y":1},
|
||||
{"label":"K114", "x":16.75, "y":1},
|
||||
{"label":"K115", "x":17.75, "y":1},
|
||||
{"label":"K116", "x":18.75, "y":1},
|
||||
{"label":"K117", "x":19.75, "y":1},
|
||||
{"label":"K118", "x":20.75, "y":1},
|
||||
{"label":"K119", "x":21.75, "y":1},
|
||||
{"label":"K20", "x":0, "y":2, "w":1.5},
|
||||
{"label":"K21", "x":1.5, "y":2},
|
||||
{"label":"K22", "x":2.5, "y":2},
|
||||
{"label":"K23", "x":3.5, "y":2},
|
||||
{"label":"K24", "x":4.5, "y":2},
|
||||
{"label":"K25", "x":5.5, "y":2},
|
||||
{"label":"K26", "x":7.75, "y":2},
|
||||
{"label":"K17", "x":8.75, "y":2},
|
||||
{"label":"K28", "x":9.75, "y":2},
|
||||
{"label":"K210", "x":12.25, "y":2},
|
||||
{"label":"K211", "x":13.25, "y":2},
|
||||
{"label":"K212", "x":14.25, "y":2},
|
||||
{"label":"K213", "x":15.25, "y":2},
|
||||
{"label":"K214", "x":16.25, "y":2},
|
||||
{"label":"K215", "x":17.25, "y":2},
|
||||
{"label":"K216", "x":18.25, "y":2},
|
||||
{"label":"K217", "x":19.25, "y":2, "w":1.5},
|
||||
{"label":"K218", "x":20.75, "y":2},
|
||||
{"label":"K219", "x":21.75, "y":2},
|
||||
{"label":"K30", "x":0, "y":3, "w":1.75},
|
||||
{"label":"K31", "x":1.75, "y":3},
|
||||
{"label":"K32", "x":2.75, "y":3},
|
||||
{"label":"K33", "x":3.75, "y":3},
|
||||
{"label":"K34", "x":4.75, "y":3},
|
||||
{"label":"K35", "x":5.75, "y":3},
|
||||
{"label":"K36", "x":7.75, "y":3},
|
||||
{"label":"K37", "x":8.75, "y":3},
|
||||
{"label":"K38", "x":9.75, "y":3},
|
||||
{"label":"K29", "x":10.75, "y":2, "h":2},
|
||||
{"label":"K310", "x":12.5, "y":3},
|
||||
{"label":"K311", "x":13.5, "y":3},
|
||||
{"label":"K312", "x":14.5, "y":3},
|
||||
{"label":"K313", "x":15.5, "y":3},
|
||||
{"label":"K314", "x":16.5, "y":3},
|
||||
{"label":"K315", "x":17.5, "y":3},
|
||||
{"label":"K317", "x":18.5, "y":3, "w":2.25},
|
||||
{"label":"K40", "x":0, "y":4, "w":2.25},
|
||||
{"label":"K41", "x":2.25, "y":4},
|
||||
{"label":"K42", "x":3.25, "y":4},
|
||||
{"label":"K43", "x":4.25, "y":4},
|
||||
{"label":"K44", "x":5.25, "y":4},
|
||||
{"label":"K45", "x":6.25, "y":4},
|
||||
{"label":"K46", "x":7.75, "y":4},
|
||||
{"label":"K47", "x":8.75, "y":4},
|
||||
{"label":"K48", "x":9.75, "y":4},
|
||||
{"label":"K410", "x":13, "y":4},
|
||||
{"label":"K411", "x":14, "y":4},
|
||||
{"label":"K412", "x":15, "y":4},
|
||||
{"label":"K413", "x":16, "y":4},
|
||||
{"label":"K414", "x":17, "y":4},
|
||||
{"label":"K416", "x":18, "y":4, "w":2.75},
|
||||
{"label":"K418", "x":20.75, "y":4},
|
||||
{"label":"K50", "x":0, "y":5, "w":1.25},
|
||||
{"label":"K51", "x":1.25, "y":5, "w":1.25},
|
||||
{"label":"K52", "x":2.5, "y":5, "w":1.25},
|
||||
{"label":"K53", "x":3.75, "y":5, "w":1.25},
|
||||
{"label":"K54", "x":5, "y":5, "w":2.25},
|
||||
{"label":"K56", "x":7.75, "y":5, "w":2},
|
||||
{"label":"K58", "x":9.75, "y":5},
|
||||
{"label":"K49", "x":10.75, "y":4, "h":2},
|
||||
{"label":"K510", "x":13, "y":5, "w":2},
|
||||
{"label":"K512", "x":15, "y":5, "w":1.25},
|
||||
{"label":"K513", "x":16.25, "y":5, "w":1.25},
|
||||
{"label":"K514", "x":17.5, "y":5, "w":1.25},
|
||||
{"label":"K516", "x":18.75, "y":5},
|
||||
{"label":"K517", "x":19.75, "y":5},
|
||||
{"label":"K518", "x":20.75, "y":5},
|
||||
{"label":"K519", "x":21.75, "y":5}
|
||||
]
|
||||
},
|
||||
"LAYOUT_split_rshift": {
|
||||
"layout": [
|
||||
{"label":"K00", "x":0, "y":0},
|
||||
{"label":"K01", "x":1, "y":0},
|
||||
{"label":"K02", "x":2, "y":0},
|
||||
{"label":"K03", "x":3, "y":0},
|
||||
{"label":"K04", "x":4, "y":0},
|
||||
{"label":"K05", "x":5, "y":0},
|
||||
{"label":"K06", "x":6, "y":0},
|
||||
{"label":"K010", "x":12.75, "y":0},
|
||||
{"label":"K011", "x":13.75, "y":0},
|
||||
{"label":"K012", "x":14.75, "y":0},
|
||||
{"label":"K013", "x":15.75, "y":0},
|
||||
{"label":"K014", "x":16.75, "y":0},
|
||||
{"label":"K015", "x":17.75, "y":0},
|
||||
{"label":"K016", "x":18.75, "y":0},
|
||||
{"label":"K017", "x":19.75, "y":0},
|
||||
{"label":"K018", "x":20.75, "y":0},
|
||||
{"label":"K019", "x":21.75, "y":0},
|
||||
{"label":"K10", "x":0, "y":1},
|
||||
{"label":"K11", "x":1, "y":1},
|
||||
{"label":"K12", "x":2, "y":1},
|
||||
{"label":"K13", "x":3, "y":1},
|
||||
{"label":"K14", "x":4, "y":1},
|
||||
{"label":"K15", "x":5, "y":1},
|
||||
{"label":"K16", "x":6, "y":1},
|
||||
{"label":"K17", "x":8.75, "y":1},
|
||||
{"label":"K18", "x":9.75, "y":1},
|
||||
{"label":"K19", "x":10.75, "y":1},
|
||||
{"label":"K110", "x":12.75, "y":1},
|
||||
{"label":"K111", "x":13.75, "y":1},
|
||||
{"label":"K112", "x":14.75, "y":1},
|
||||
{"label":"K113", "x":15.75, "y":1},
|
||||
{"label":"K114", "x":16.75, "y":1},
|
||||
{"label":"K115", "x":17.75, "y":1},
|
||||
{"label":"K116", "x":18.75, "y":1, "w":2},
|
||||
{"label":"K118", "x":20.75, "y":1},
|
||||
{"label":"K119", "x":21.75, "y":1},
|
||||
{"label":"K20", "x":0, "y":2, "w":1.5},
|
||||
{"label":"K21", "x":1.5, "y":2},
|
||||
{"label":"K22", "x":2.5, "y":2},
|
||||
{"label":"K23", "x":3.5, "y":2},
|
||||
{"label":"K24", "x":4.5, "y":2},
|
||||
{"label":"K25", "x":5.5, "y":2},
|
||||
{"label":"K26", "x":7.75, "y":2},
|
||||
{"label":"K17", "x":8.75, "y":2},
|
||||
{"label":"K28", "x":9.75, "y":2},
|
||||
{"label":"K210", "x":12.25, "y":2},
|
||||
{"label":"K211", "x":13.25, "y":2},
|
||||
{"label":"K212", "x":14.25, "y":2},
|
||||
{"label":"K213", "x":15.25, "y":2},
|
||||
{"label":"K214", "x":16.25, "y":2},
|
||||
{"label":"K215", "x":17.25, "y":2},
|
||||
{"label":"K216", "x":18.25, "y":2},
|
||||
{"label":"K217", "x":19.25, "y":2, "w":1.5},
|
||||
{"label":"K218", "x":20.75, "y":2},
|
||||
{"label":"K219", "x":21.75, "y":2},
|
||||
{"label":"K30", "x":0, "y":3, "w":1.75},
|
||||
{"label":"K31", "x":1.75, "y":3},
|
||||
{"label":"K32", "x":2.75, "y":3},
|
||||
{"label":"K33", "x":3.75, "y":3},
|
||||
{"label":"K34", "x":4.75, "y":3},
|
||||
{"label":"K35", "x":5.75, "y":3},
|
||||
{"label":"K36", "x":7.75, "y":3},
|
||||
{"label":"K37", "x":8.75, "y":3},
|
||||
{"label":"K38", "x":9.75, "y":3},
|
||||
{"label":"K29", "x":10.75, "y":2, "h":2},
|
||||
{"label":"K310", "x":12.5, "y":3},
|
||||
{"label":"K311", "x":13.5, "y":3},
|
||||
{"label":"K312", "x":14.5, "y":3},
|
||||
{"label":"K313", "x":15.5, "y":3},
|
||||
{"label":"K314", "x":16.5, "y":3},
|
||||
{"label":"K315", "x":17.5, "y":3},
|
||||
{"label":"K317", "x":18.5, "y":3, "w":2.25},
|
||||
{"label":"K40", "x":0, "y":4, "w":2.25},
|
||||
{"label":"K41", "x":2.25, "y":4},
|
||||
{"label":"K42", "x":3.25, "y":4},
|
||||
{"label":"K43", "x":4.25, "y":4},
|
||||
{"label":"K44", "x":5.25, "y":4},
|
||||
{"label":"K45", "x":6.25, "y":4},
|
||||
{"label":"K46", "x":7.75, "y":4},
|
||||
{"label":"K47", "x":8.75, "y":4},
|
||||
{"label":"K48", "x":9.75, "y":4},
|
||||
{"label":"K410", "x":13, "y":4},
|
||||
{"label":"K411", "x":14, "y":4},
|
||||
{"label":"K412", "x":15, "y":4},
|
||||
{"label":"K413", "x":16, "y":4},
|
||||
{"label":"K414", "x":17, "y":4},
|
||||
{"label":"K416", "x":18, "y":4, "w":1.75},
|
||||
{"label":"K417", "x":19.75, "y":4},
|
||||
{"label":"K418", "x":20.75, "y":4},
|
||||
{"label":"K50", "x":0, "y":5, "w":1.25},
|
||||
{"label":"K51", "x":1.25, "y":5, "w":1.25},
|
||||
{"label":"K52", "x":2.5, "y":5, "w":1.25},
|
||||
{"label":"K53", "x":3.75, "y":5, "w":1.25},
|
||||
{"label":"K54", "x":5, "y":5, "w":2.25},
|
||||
{"label":"K56", "x":7.75, "y":5, "w":2},
|
||||
{"label":"K58", "x":9.75, "y":5},
|
||||
{"label":"K49", "x":10.75, "y":4, "h":2},
|
||||
{"label":"K510", "x":13, "y":5, "w":2},
|
||||
{"label":"K512", "x":15, "y":5, "w":1.25},
|
||||
{"label":"K513", "x":16.25, "y":5, "w":1.25},
|
||||
{"label":"K514", "x":17.5, "y":5, "w":1.25},
|
||||
{"label":"K516", "x":18.75, "y":5},
|
||||
{"label":"K517", "x":19.75, "y":5},
|
||||
{"label":"K518", "x":20.75, "y":5},
|
||||
{"label":"K519", "x":21.75, "y":5}
|
||||
]
|
||||
},
|
||||
"LAYOUT_split_numpad": {
|
||||
"layout": [
|
||||
{"label":"K00", "x":0, "y":0},
|
||||
{"label":"K01", "x":1, "y":0},
|
||||
{"label":"K02", "x":2, "y":0},
|
||||
{"label":"K03", "x":3, "y":0},
|
||||
{"label":"K04", "x":4, "y":0},
|
||||
{"label":"K05", "x":5, "y":0},
|
||||
{"label":"K06", "x":6, "y":0},
|
||||
{"label":"K010", "x":12.75, "y":0},
|
||||
{"label":"K011", "x":13.75, "y":0},
|
||||
{"label":"K012", "x":14.75, "y":0},
|
||||
{"label":"K013", "x":15.75, "y":0},
|
||||
{"label":"K014", "x":16.75, "y":0},
|
||||
{"label":"K015", "x":17.75, "y":0},
|
||||
{"label":"K016", "x":18.75, "y":0},
|
||||
{"label":"K017", "x":19.75, "y":0},
|
||||
{"label":"K018", "x":20.75, "y":0},
|
||||
{"label":"K019", "x":21.75, "y":0},
|
||||
{"label":"K10", "x":0, "y":1},
|
||||
{"label":"K11", "x":1, "y":1},
|
||||
{"label":"K12", "x":2, "y":1},
|
||||
{"label":"K13", "x":3, "y":1},
|
||||
{"label":"K14", "x":4, "y":1},
|
||||
{"label":"K15", "x":5, "y":1},
|
||||
{"label":"K16", "x":6, "y":1},
|
||||
{"label":"K17", "x":8.75, "y":1},
|
||||
{"label":"K18", "x":9.75, "y":1},
|
||||
{"label":"K19", "x":10.75, "y":1},
|
||||
{"label":"K110", "x":12.75, "y":1},
|
||||
{"label":"K111", "x":13.75, "y":1},
|
||||
{"label":"K112", "x":14.75, "y":1},
|
||||
{"label":"K113", "x":15.75, "y":1},
|
||||
{"label":"K114", "x":16.75, "y":1},
|
||||
{"label":"K115", "x":17.75, "y":1},
|
||||
{"label":"K116", "x":18.75, "y":1, "w":2},
|
||||
{"label":"K118", "x":20.75, "y":1},
|
||||
{"label":"K119", "x":21.75, "y":1},
|
||||
{"label":"K20", "x":0, "y":2, "w":1.5},
|
||||
{"label":"K21", "x":1.5, "y":2},
|
||||
{"label":"K22", "x":2.5, "y":2},
|
||||
{"label":"K23", "x":3.5, "y":2},
|
||||
{"label":"K24", "x":4.5, "y":2},
|
||||
{"label":"K25", "x":5.5, "y":2},
|
||||
{"label":"K26", "x":7.75, "y":2},
|
||||
{"label":"K17", "x":8.75, "y":2},
|
||||
{"label":"K28", "x":9.75, "y":2},
|
||||
{"label":"K29", "x":10.75, "y":2},
|
||||
{"label":"K210", "x":12.25, "y":2},
|
||||
{"label":"K211", "x":13.25, "y":2},
|
||||
{"label":"K212", "x":14.25, "y":2},
|
||||
{"label":"K213", "x":15.25, "y":2},
|
||||
{"label":"K214", "x":16.25, "y":2},
|
||||
{"label":"K215", "x":17.25, "y":2},
|
||||
{"label":"K216", "x":18.25, "y":2},
|
||||
{"label":"K217", "x":19.25, "y":2, "w":1.5},
|
||||
{"label":"K218", "x":20.75, "y":2},
|
||||
{"label":"K219", "x":21.75, "y":2},
|
||||
{"label":"K30", "x":0, "y":3, "w":1.75},
|
||||
{"label":"K31", "x":1.75, "y":3},
|
||||
{"label":"K32", "x":2.75, "y":3},
|
||||
{"label":"K33", "x":3.75, "y":3},
|
||||
{"label":"K34", "x":4.75, "y":3},
|
||||
{"label":"K35", "x":5.75, "y":3},
|
||||
{"label":"K36", "x":7.75, "y":3},
|
||||
{"label":"K37", "x":8.75, "y":3},
|
||||
{"label":"K38", "x":9.75, "y":3},
|
||||
{"label":"K39", "x":10.75, "y":3},
|
||||
{"label":"K310", "x":12.5, "y":3},
|
||||
{"label":"K311", "x":13.5, "y":3},
|
||||
{"label":"K312", "x":14.5, "y":3},
|
||||
{"label":"K313", "x":15.5, "y":3},
|
||||
{"label":"K314", "x":16.5, "y":3},
|
||||
{"label":"K315", "x":17.5, "y":3},
|
||||
{"label":"K317", "x":18.5, "y":3, "w":2.25},
|
||||
{"label":"K40", "x":0, "y":4, "w":2.25},
|
||||
{"label":"K41", "x":2.25, "y":4},
|
||||
{"label":"K42", "x":3.25, "y":4},
|
||||
{"label":"K43", "x":4.25, "y":4},
|
||||
{"label":"K44", "x":5.25, "y":4},
|
||||
{"label":"K45", "x":6.25, "y":4},
|
||||
{"label":"K46", "x":7.75, "y":4},
|
||||
{"label":"K47", "x":8.75, "y":4},
|
||||
{"label":"K48", "x":9.75, "y":4},
|
||||
{"label":"K49", "x":10.75, "y":4},
|
||||
{"label":"K410", "x":13, "y":4},
|
||||
{"label":"K411", "x":14, "y":4},
|
||||
{"label":"K412", "x":15, "y":4},
|
||||
{"label":"K413", "x":16, "y":4},
|
||||
{"label":"K414", "x":17, "y":4},
|
||||
{"label":"K416", "x":18, "y":4, "w":2.75},
|
||||
{"label":"K418", "x":20.75, "y":4},
|
||||
{"label":"K50", "x":0, "y":5, "w":1.25},
|
||||
{"label":"K51", "x":1.25, "y":5, "w":1.25},
|
||||
{"label":"K52", "x":2.5, "y":5, "w":1.25},
|
||||
{"label":"K53", "x":3.75, "y":5, "w":1.25},
|
||||
{"label":"K54", "x":5, "y":5, "w":2.25},
|
||||
{"label":"K56", "x":7.75, "y":5},
|
||||
{"Label":"K57", "x":8.75, "y":5},
|
||||
{"label":"K58", "x":9.75, "y":5},
|
||||
{"label":"K59", "x":10.75, "y":5},
|
||||
{"label":"K510", "x":13, "y":5, "w":2},
|
||||
{"label":"K512", "x":15, "y":5, "w":1.25},
|
||||
{"label":"K513", "x":16.25, "y":5, "w":1.25},
|
||||
{"label":"K514", "x":17.5, "y":5, "w":1.25},
|
||||
{"label":"K516", "x":18.75, "y":5},
|
||||
{"label":"K517", "x":19.75, "y":5},
|
||||
{"label":"K518", "x":20.75, "y":5},
|
||||
{"label":"K519", "x":21.75, "y":5}
|
||||
]
|
||||
},
|
||||
"LAYOUT_all": {
|
||||
"layout": [
|
||||
{"label":"K00", "x":0, "y":0},
|
||||
{"label":"K01", "x":1, "y":0},
|
||||
{"label":"K02", "x":2, "y":0},
|
||||
{"label":"K03", "x":3, "y":0},
|
||||
{"label":"K04", "x":4, "y":0},
|
||||
{"label":"K05", "x":5, "y":0},
|
||||
{"label":"K06", "x":6, "y":0},
|
||||
{"label":"K010", "x":12.75, "y":0},
|
||||
{"label":"K011", "x":13.75, "y":0},
|
||||
{"label":"K012", "x":14.75, "y":0},
|
||||
{"label":"K013", "x":15.75, "y":0},
|
||||
{"label":"K014", "x":16.75, "y":0},
|
||||
{"label":"K015", "x":17.75, "y":0},
|
||||
{"label":"K016", "x":18.75, "y":0},
|
||||
{"label":"K017", "x":19.75, "y":0},
|
||||
{"label":"K018", "x":20.75, "y":0},
|
||||
{"label":"K019", "x":21.75, "y":0},
|
||||
{"label":"K10", "x":0, "y":1},
|
||||
{"label":"K11", "x":1, "y":1},
|
||||
{"label":"K12", "x":2, "y":1},
|
||||
{"label":"K13", "x":3, "y":1},
|
||||
{"label":"K14", "x":4, "y":1},
|
||||
{"label":"K15", "x":5, "y":1},
|
||||
{"label":"K16", "x":6, "y":1},
|
||||
{"label":"K17", "x":8.75, "y":1},
|
||||
{"label":"K18", "x":9.75, "y":1},
|
||||
{"label":"K19", "x":10.75, "y":1},
|
||||
{"label":"K110", "x":12.75, "y":1},
|
||||
{"label":"K111", "x":13.75, "y":1},
|
||||
{"label":"K112", "x":14.75, "y":1},
|
||||
{"label":"K113", "x":15.75, "y":1},
|
||||
{"label":"K114", "x":16.75, "y":1},
|
||||
{"label":"K115", "x":17.75, "y":1},
|
||||
{"label":"K116", "x":18.75, "y":1},
|
||||
{"label":"K117", "x":19.75, "y":1},
|
||||
{"label":"K118", "x":20.75, "y":1},
|
||||
{"label":"K119", "x":21.75, "y":1},
|
||||
{"label":"K20", "x":0, "y":2, "w":1.5},
|
||||
{"label":"K21", "x":1.5, "y":2},
|
||||
{"label":"K22", "x":2.5, "y":2},
|
||||
{"label":"K23", "x":3.5, "y":2},
|
||||
{"label":"K24", "x":4.5, "y":2},
|
||||
{"label":"K25", "x":5.5, "y":2},
|
||||
{"label":"K26", "x":7.75, "y":2},
|
||||
{"label":"K27", "x":8.75, "y":2},
|
||||
{"label":"K28", "x":9.75, "y":2},
|
||||
{"label":"K29", "x":10.75, "y":2},
|
||||
{"label":"K210", "x":12.25, "y":2},
|
||||
{"label":"K211", "x":13.25, "y":2},
|
||||
{"label":"K212", "x":14.25, "y":2},
|
||||
{"label":"K213", "x":15.25, "y":2},
|
||||
{"label":"K214", "x":16.25, "y":2},
|
||||
{"label":"K215", "x":17.25, "y":2},
|
||||
{"label":"K216", "x":18.25, "y":2},
|
||||
{"label":"K217", "x":19.25, "y":2, "w":1.5},
|
||||
{"label":"K218", "x":20.75, "y":2},
|
||||
{"label":"K219", "x":21.75, "y":2},
|
||||
{"label":"K30", "x":0, "y":3, "w":1.75},
|
||||
{"label":"K31", "x":1.75, "y":3},
|
||||
{"label":"K32", "x":2.75, "y":3},
|
||||
{"label":"K33", "x":3.75, "y":3},
|
||||
{"label":"K34", "x":4.75, "y":3},
|
||||
{"label":"K35", "x":5.75, "y":3},
|
||||
{"label":"K36", "x":7.75, "y":3},
|
||||
{"label":"K37", "x":8.75, "y":3},
|
||||
{"label":"K38", "x":9.75, "y":3},
|
||||
{"label":"K39", "x":10.75, "y":3},
|
||||
{"label":"K310", "x":12.5, "y":3},
|
||||
{"label":"K311", "x":13.5, "y":3},
|
||||
{"label":"K312", "x":14.5, "y":3},
|
||||
{"label":"K313", "x":15.5, "y":3},
|
||||
{"label":"K314", "x":16.5, "y":3},
|
||||
{"label":"K315", "x":17.5, "y":3},
|
||||
{"label":"K317", "x":18.5, "y":3, "w":2.25},
|
||||
{"label":"K40", "x":0, "y":4, "w":2.25},
|
||||
{"label":"K41", "x":2.25, "y":4},
|
||||
{"label":"K42", "x":3.25, "y":4},
|
||||
{"label":"K43", "x":4.25, "y":4},
|
||||
{"label":"K44", "x":5.25, "y":4},
|
||||
{"label":"K45", "x":6.25, "y":4},
|
||||
{"label":"K46", "x":7.75, "y":4},
|
||||
{"label":"K47", "x":8.75, "y":4},
|
||||
{"label":"K48", "x":9.75, "y":4},
|
||||
{"label":"K49", "x":10.75, "y":4},
|
||||
{"label":"K410", "x":13, "y":4},
|
||||
{"label":"K411", "x":14, "y":4},
|
||||
{"label":"K412", "x":15, "y":4},
|
||||
{"label":"K413", "x":16, "y":4},
|
||||
{"label":"K414", "x":17, "y":4},
|
||||
{"label":"K416", "x":18, "y":4, "w":1.75},
|
||||
{"label":"K417", "x":19.75, "y":4},
|
||||
{"label":"K418", "x":20.75, "y":4},
|
||||
{"label":"K50", "x":0, "y":5, "w":1.25},
|
||||
{"label":"K51", "x":1.25, "y":5, "w":1.25},
|
||||
{"label":"K52", "x":2.5, "y":5, "w":1.25},
|
||||
{"label":"K53", "x":3.75, "y":5, "w":1.25},
|
||||
{"label":"K54", "x":5, "y":5, "w":2.25},
|
||||
{"label":"K56", "x":7.75, "y":5},
|
||||
{"label":"K57", "x":8.75, "y":5},
|
||||
{"label":"K58", "x":9.75, "y":5},
|
||||
{"label":"K59", "x":10.75, "y":5},
|
||||
{"label":"K510", "x":13, "y":5, "w":2},
|
||||
{"label":"K512", "x":15, "y":5, "w":1.25},
|
||||
{"label":"K513", "x":16.25, "y":5, "w":1.25},
|
||||
{"label":"K514", "x":17.5, "y":5, "w":1.25},
|
||||
{"label":"K516", "x":18.75, "y":5},
|
||||
{"label":"K517", "x":19.75, "y":5},
|
||||
{"label":"K518", "x":20.75, "y":5},
|
||||
{"label":"K519", "x":21.75, "y":5}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
19
keyboards/handwired/downbubble/keymaps/default/config.h
Normal file
19
keyboards/handwired/downbubble/keymaps/default/config.h
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
/* Copyright 2018 REPLACE_WITH_YOUR_NAME
|
||||
*
|
||||
* 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
|
||||
|
||||
// place overrides here
|
||||
103
keyboards/handwired/downbubble/keymaps/default/keymap.c
Normal file
103
keyboards/handwired/downbubble/keymaps/default/keymap.c
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
/* Copyright 2018 REPLACE_WITH_YOUR_NAME
|
||||
*
|
||||
* 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 the keycodes used by our macros in process_record_user
|
||||
enum custom_keycodes {
|
||||
QMKBEST = SAFE_RANGE,
|
||||
QMKURL
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT_standard(\
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NLCK, KC_HOME, KC_TRNS,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END, KC_PGUP,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_PDOT, KC_PENT, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
LAYOUT_split_bs(\
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NLCK, KC_HOME, KC_TRNS,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, KC_END, KC_PGUP,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_PDOT, KC_PENT, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
LAYOUT_split_rshift(\
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NLCK, KC_HOME, KC_TRNS,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END, KC_PGUP,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_PDOT, KC_PENT, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
LAYOUT_split_numpad(\
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NLCK, KC_HOME, KC_TRNS,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END, KC_PGUP,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_PENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_TRNS, KC_PDOT, KC_TRNS, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
LAYOUT_all(\
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NLCK, KC_HOME, KC_TRNS,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, KC_END, KC_PGUP,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_PENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_TRNS, KC_PDOT, KC_TRNS, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case QMKBEST:
|
||||
if (record->event.pressed) {
|
||||
// when keycode QMKBEST is pressed
|
||||
SEND_STRING("QMK is the best thing ever!");
|
||||
} else {
|
||||
// when keycode QMKBEST is released
|
||||
}
|
||||
break;
|
||||
case QMKURL:
|
||||
if (record->event.pressed) {
|
||||
// when keycode QMKURL is pressed
|
||||
SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
|
||||
} else {
|
||||
// when keycode QMKURL is released
|
||||
}
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
}
|
||||
1
keyboards/handwired/downbubble/keymaps/default/readme.md
Normal file
1
keyboards/handwired/downbubble/keymaps/default/readme.md
Normal file
|
|
@ -0,0 +1 @@
|
|||
# The default keymaps for downbubble
|
||||
201
keyboards/handwired/downbubble/license
Normal file
201
keyboards/handwired/downbubble/license
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
15
keyboards/handwired/downbubble/readme.md
Normal file
15
keyboards/handwired/downbubble/readme.md
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
# downbubble
|
||||
|
||||
Prototype hand-wired version of this keyboard - https://imgur.com/a/0KbX1JH
|
||||
|
||||
This is an ergonomic keyboard with a 5 degree rotation on keyboard halves, and a rotated numpad in the center for RH users.
|
||||
|
||||
Keyboard Maintainer: [Flehrad](https://github.com/flehrad)
|
||||
Hardware Supported: downbubble PCB, AT90USB1286 MCU, MX switches and MiniUSB connector
|
||||
Hardware Availability: The Board Podcast Slack
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make downbubble:default
|
||||
|
||||
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).
|
||||
81
keyboards/handwired/downbubble/rules.mk
Normal file
81
keyboards/handwired/downbubble/rules.mk
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
# MCU name
|
||||
MCU = at90usb1286
|
||||
#MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# atmega32a bootloadHID
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
|
||||
# If you don't know the bootloader type, then you can specify the
|
||||
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
|
||||
# Teensy halfKay 512
|
||||
# Teensy++ halfKay 1024
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE = no # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
|
||||
|
|
@ -176,11 +176,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
|
||||
};
|
||||
|
||||
void hold_shift(void) {
|
||||
shift_count = shift_count + 1;
|
||||
register_code(KC_LSHIFT);
|
||||
|
|
@ -359,10 +354,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -87,6 +87,3 @@ AUDIO_ENABLE = no # Audio output on port C6
|
|||
RGBLIGHT_ENABLE = no
|
||||
API_SYSEX_ENABLE = no
|
||||
|
||||
#ifndef QUANTUM_DIR
|
||||
# include ../../../Makefile
|
||||
#endif
|
||||
|
|
|
|||
60
keyboards/handwired/hexon38/config.h
Normal file
60
keyboards/handwired/hexon38/config.h
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
// see https://github.com/pepaslabs/hexon38
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER pepaslabs
|
||||
#define PRODUCT hexon38
|
||||
#define DESCRIPTION "A handmade non-split ergonomic 38-key keyboard, inspired by the lil38. See https://github.com/pepaslabs/hexon38."
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 12
|
||||
|
||||
/* key matrix pins */
|
||||
#define MATRIX_ROW_PINS { B0, F0, B2, F4 }
|
||||
#define MATRIX_COL_PINS { C6, D3, D2, D1, D0, B7, F6, F7, B6, B5, B4, D7 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION ROW2COL
|
||||
|
||||
/* number of backlight levels */
|
||||
|
||||
#ifdef BACKLIGHT_PIN
|
||||
#define BACKLIGHT_LEVELS 0
|
||||
#endif
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCING_DELAY 5
|
||||
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
#ifdef RGB_DI_PIN
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 0
|
||||
#define RGBLIGHT_HUE_STEP 8
|
||||
#define RGBLIGHT_SAT_STEP 8
|
||||
#define RGBLIGHT_VAL_STEP 8
|
||||
#endif
|
||||
|
||||
|
||||
// Disabled features:
|
||||
|
||||
/* 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
|
||||
|
||||
/* prevent stuck modifiers */
|
||||
//#define PREVENT_STUCK_MODIFIERS
|
||||
3
keyboards/handwired/hexon38/hexon38.c
Normal file
3
keyboards/handwired/hexon38/hexon38.c
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
// see https://github.com/pepaslabs/hexon38
|
||||
|
||||
#include "hexon38.h"
|
||||
17
keyboards/handwired/hexon38/hexon38.h
Normal file
17
keyboards/handwired/hexon38/hexon38.h
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
// see https://github.com/pepaslabs/hexon38
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#define LAYOUT( \
|
||||
K002, K003, K004, K005, K006, K007, K008, K009, \
|
||||
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
|
||||
K200, K201, K202, K203, K204, K207, K208, K209, K210, K211, \
|
||||
K302, K303, K304, K305, K306, K307, K308, K309 \
|
||||
) { \
|
||||
{ KC_NO, KC_NO, K002, K003, K004, K005, K006, K007, K008, K009, KC_NO, KC_NO }, \
|
||||
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \
|
||||
{ K200, K201, K202, K203, K204, KC_NO, KC_NO, K207, K208, K209, K210, K211 }, \
|
||||
{ KC_NO, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, KC_NO, KC_NO } \
|
||||
}
|
||||
407
keyboards/handwired/hexon38/keymaps/default/keymap.c
Normal file
407
keyboards/handwired/hexon38/keymaps/default/keymap.c
Normal file
|
|
@ -0,0 +1,407 @@
|
|||
// see https://github.com/pepaslabs/hexon38
|
||||
|
||||
#include "hexon38.h"
|
||||
|
||||
#define A_ KC_A
|
||||
#define B_ KC_B
|
||||
#define C_ KC_C
|
||||
#define D_ KC_D
|
||||
#define E_ KC_E
|
||||
#define F_ KC_F
|
||||
#define G_ KC_G
|
||||
#define H_ KC_H
|
||||
#define I_ KC_I
|
||||
#define J_ KC_J
|
||||
#define K_ KC_K
|
||||
#define L_ KC_L
|
||||
#define M_ KC_M
|
||||
#define N_ KC_N
|
||||
#define O_ KC_O
|
||||
#define P_ KC_P
|
||||
#define Q_ KC_Q
|
||||
#define R_ KC_R
|
||||
#define S_ KC_S
|
||||
#define T_ KC_T
|
||||
#define U_ KC_U
|
||||
#define V_ KC_V
|
||||
#define W_ KC_W
|
||||
#define X_ KC_X
|
||||
#define Y_ KC_Y
|
||||
#define Z_ KC_Z
|
||||
|
||||
// Dual-role keys: modifier when held, alpha when tapped.
|
||||
#define A_CTL CTL_T(KC_A)
|
||||
#define S_ALT ALT_T(KC_S)
|
||||
#define D_GUI GUI_T(KC_D)
|
||||
#define F_SFT SFT_T(KC_F)
|
||||
#define J_SFT SFT_T(KC_J)
|
||||
#define K_GUI GUI_T(KC_K)
|
||||
#define L_ALT ALT_T(KC_L)
|
||||
#define COLN_CTL CTL_T(KC_SCLN)
|
||||
|
||||
#define ______ KC_TRNS
|
||||
#define LSHIFT KC_LSHIFT
|
||||
#define RSHIFT KC_RSHIFT
|
||||
#define COMMA KC_COMM
|
||||
#define SLASH KC_SLSH
|
||||
#define SPACE KC_SPC
|
||||
#define TAB KC_TAB
|
||||
#define BKSPC KC_BSPC
|
||||
#define ENTER KC_ENT
|
||||
#define PERIOD KC_DOT
|
||||
|
||||
#define BASE_LAYER LAYOUT
|
||||
#define BLANK_LAYER LAYOUT
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
BASE_LAYER(
|
||||
// ,--------+--------+--------+--------. ,--------+--------+--------+--------.
|
||||
W_ , E_ , R_ , T_ , Y_ , U_ , I_ , O_ ,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------.
|
||||
Q_ , A_CTL , S_ALT , D_GUI , F_SFT , G_ , H_ , J_SFT , K_GUI , L_ALT ,COLN_CTL, P_ ,
|
||||
//|--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------|
|
||||
B_ , Z_ , X_ , C_ , V_ , M_ , COMMA , PERIOD , SLASH , N_ ,
|
||||
//`--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------'
|
||||
|
||||
// ,--------+--------+--------+--------. ,--------+--------+--------+--------.
|
||||
LSHIFT , SPACE , TAB , DEBUG , SPACE , BKSPC , ENTER , RSHIFT
|
||||
// `--------+--------+--------+--------' `--------+--------+--------+--------'
|
||||
),
|
||||
|
||||
BLANK_LAYER(
|
||||
// ,--------+--------+--------+--------. ,--------+--------+--------+--------.
|
||||
______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ ,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------.
|
||||
______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ ,
|
||||
//|--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------|
|
||||
______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ ,
|
||||
//`--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------'
|
||||
|
||||
// ,--------+--------+--------+--------. ,--------+--------+--------+--------.
|
||||
______ , ______ , ______ , ______ , ______ , ______ , ______ , ______
|
||||
// `--------+--------+--------+--------' `--------+--------+--------+--------'
|
||||
)
|
||||
|
||||
};
|
||||
|
||||
// a linked list of pending key events (press or release) which we haven't processed yet.
|
||||
struct _pending_key_t {
|
||||
uint16_t keycode;
|
||||
keyrecord_t record;
|
||||
struct _pending_key_t *next;
|
||||
};
|
||||
typedef struct _pending_key_t pending_key_t;
|
||||
|
||||
// worst case is 10 down strokes and 1 up stroke before we can start disambiguating.
|
||||
#define RINGSIZE 11
|
||||
|
||||
// a ring buffer and linked list to store pending key events (presses and releases).
|
||||
// (basically, this is a fixed-allocation linked list.)
|
||||
struct _kring_t {
|
||||
// the actual key events.
|
||||
pending_key_t items[RINGSIZE];
|
||||
// the index of the oldest item, or -1 if no items.
|
||||
int8_t ifirst;
|
||||
// the index of the most recently added item, or -1 if no items.
|
||||
int8_t ilast;
|
||||
// the number of items in the ring.
|
||||
uint8_t count;
|
||||
// the head of the linked list.
|
||||
pending_key_t *head;
|
||||
};
|
||||
typedef struct _kring_t kring_t;
|
||||
|
||||
// safe accessor to the i-th item of the linked list (returns pointer or NULL).
|
||||
pending_key_t* kring_get(kring_t *ring, uint8_t i) {
|
||||
if (i >= ring->count) {
|
||||
return NULL;
|
||||
}
|
||||
uint8_t j = (ring->ifirst + i) % RINGSIZE;
|
||||
return &(ring->items[j]);
|
||||
}
|
||||
|
||||
// return the last key in the list of buffered keys.
|
||||
pending_key_t* kring_last(kring_t *ring) {
|
||||
if (ring->count == 0) {
|
||||
return NULL;
|
||||
}
|
||||
return kring_get(ring, ring->count - 1);
|
||||
}
|
||||
|
||||
// remove the oldest item from the ring (the head of the list).
|
||||
void kring_pop(kring_t *ring) {
|
||||
if (ring->count > 0) {
|
||||
ring->ifirst += 1;
|
||||
ring->ifirst %= RINGSIZE;
|
||||
ring->head = ring->head->next;
|
||||
ring->count -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
// add an item to the ring (append to the list).
|
||||
void kring_append(kring_t *ring, uint16_t keycode, keyrecord_t *record) {
|
||||
if (ring->count >= RINGSIZE) {
|
||||
// uh oh, we overflowed the capacity of our buffer :(
|
||||
return;
|
||||
}
|
||||
|
||||
// if the ring is empty, insert at index 0.
|
||||
if (ring->count == 0) {
|
||||
ring->count += 1;
|
||||
ring->ifirst = 0;
|
||||
ring->ilast = 0;
|
||||
ring->head = &(ring->items[0]);
|
||||
}
|
||||
// else, append it onto the end.
|
||||
else {
|
||||
ring->count += 1;
|
||||
ring->ilast += 1;
|
||||
ring->ilast %= RINGSIZE;
|
||||
}
|
||||
|
||||
// the index at which we should insert this item.
|
||||
int8_t i = ring->ilast;
|
||||
|
||||
// insert the item.
|
||||
ring->items[i].keycode = keycode;
|
||||
ring->items[i].record.event = record->event;
|
||||
#ifndef NO_ACTION_TAPPING
|
||||
ring->items[i].record.tap = record->tap;
|
||||
#endif
|
||||
ring->items[i].next = NULL;
|
||||
|
||||
// update the previous item to point to this item.
|
||||
if (ring->count > 1) {
|
||||
kring_get(ring, ring->count - 2)->next = &(ring->items[i]);
|
||||
}
|
||||
}
|
||||
|
||||
kring_t g_pending;
|
||||
|
||||
void matrix_init_user(void) {
|
||||
g_pending.ifirst = -1;
|
||||
g_pending.ilast = -1;
|
||||
g_pending.count = 0;
|
||||
g_pending.head = NULL;
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {}
|
||||
|
||||
/*
|
||||
a_ a-: emit a
|
||||
a_ b_ b- a-: emit SHIFT+b
|
||||
a_ b_ a- b-: emit a, b
|
||||
dual1down, dual1up -> norm1down, norm1up
|
||||
dual1down, norm2down, norm2up -> mod1down, norm2down, norm2up
|
||||
dual1down, norm2down, dual1up -> norm1down, norm2down, norm1up
|
||||
dual1down, dual2down, norm3down, norm3up -> mod1down, mod2down, norm3down, norm3up
|
||||
so, a dual key can't be disambiguated until the next keyup of a keydown (not including keyups from keys before it).
|
||||
*/
|
||||
|
||||
bool is_ambiguous_kc(uint16_t kc) {
|
||||
// See the MT() define: https://github.com/qmk/qmk_firmware/blob/master/quantum/quantum_keycodes.h#L642
|
||||
// See the QK_MOD_TAP case: https://github.com/qmk/qmk_firmware/blob/master/quantum/keymap_common.c#L134
|
||||
uint8_t mod = mod_config((kc >> 0x8) & 0x1F);
|
||||
return mod != 0;
|
||||
}
|
||||
|
||||
bool is_down(pending_key_t *k) {
|
||||
return k->record.event.pressed;
|
||||
}
|
||||
|
||||
bool is_up(pending_key_t *k) {
|
||||
return !is_down(k);
|
||||
}
|
||||
|
||||
bool keys_match(pending_key_t *a, pending_key_t *b) {
|
||||
return a->record.event.key.col == b->record.event.key.col
|
||||
&& a->record.event.key.row == b->record.event.key.row;
|
||||
}
|
||||
|
||||
// both the down and corresponding upstroke of a keypress.
|
||||
struct _pending_pair_t {
|
||||
pending_key_t *down;
|
||||
pending_key_t *up;
|
||||
};
|
||||
typedef struct _pending_pair_t pending_pair_t;
|
||||
|
||||
// returns true if this keydown event has a corresponding keyup event in the
|
||||
// list of buffered keys. also fills out 'p'.
|
||||
bool is_downup_pair(pending_key_t *k, pending_pair_t *p) {
|
||||
// first, make sure this event is keydown.
|
||||
if (!is_down(k)) {
|
||||
return false;
|
||||
}
|
||||
// now find its matching keyup.
|
||||
pending_key_t *next = k->next;
|
||||
while (next != NULL) {
|
||||
if (keys_match(k, next) && is_up(next)) {
|
||||
// found it.
|
||||
if (p != NULL) {
|
||||
p->down = k;
|
||||
p->up = next;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
next = next->next;
|
||||
}
|
||||
// didn't find it.
|
||||
return false;
|
||||
}
|
||||
|
||||
// given a QK_MOD_TAP keycode, return the KC_* version of the modifier keycode.
|
||||
uint16_t get_mod_kc(uint16_t keycode) {
|
||||
uint8_t mod = mod_config((keycode >> 0x8) & 0x1F);
|
||||
switch (mod) {
|
||||
case MOD_LCTL:
|
||||
return KC_LCTL;
|
||||
case MOD_RCTL:
|
||||
return KC_RCTL;
|
||||
case MOD_LSFT:
|
||||
return KC_LSFT;
|
||||
case MOD_RSFT:
|
||||
return KC_RSFT;
|
||||
case MOD_LALT:
|
||||
return KC_LALT;
|
||||
case MOD_RALT:
|
||||
return KC_RALT;
|
||||
case MOD_LGUI:
|
||||
return KC_LGUI;
|
||||
case MOD_RGUI:
|
||||
return KC_RGUI;
|
||||
default:
|
||||
// shrug? this shouldn't happen.
|
||||
return keycode;
|
||||
}
|
||||
}
|
||||
|
||||
bool is_mod_kc(uint16_t keycode) {
|
||||
switch (keycode) {
|
||||
case QK_MODS ... QK_MODS_MAX:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void interpret_as_mod(pending_pair_t *p) {
|
||||
// see https://github.com/qmk/qmk_firmware/issues/1503
|
||||
pending_key_t *k;
|
||||
k = p->down;
|
||||
if (k != NULL) {
|
||||
k->keycode = get_mod_kc(k->keycode);
|
||||
}
|
||||
k = p->up;
|
||||
if (k != NULL) {
|
||||
k->keycode = get_mod_kc(k->keycode);
|
||||
}
|
||||
}
|
||||
|
||||
void interpret_as_normal(pending_pair_t *p) {
|
||||
pending_key_t *k;
|
||||
k = p->down;
|
||||
if (k != NULL) {
|
||||
k->keycode = k->keycode & 0xFF;
|
||||
}
|
||||
k = p->up;
|
||||
if (k != NULL) {
|
||||
k->keycode = k->keycode & 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
void execute_head_and_pop(kring_t *ring) {
|
||||
pending_key_t *head = kring_get(ring, 0);
|
||||
uint16_t kc = head->keycode;
|
||||
if (is_mod_kc(kc)) {
|
||||
if (is_down(head)) {
|
||||
dprintf(" %s: mod down 0x%04X\n", __func__, kc);
|
||||
set_mods(get_mods() | MOD_BIT(kc));
|
||||
} else {
|
||||
dprintf(" %s: mod up 0x%04X\n", __func__, kc);
|
||||
set_mods(get_mods() & ~MOD_BIT(kc));
|
||||
}
|
||||
} else {
|
||||
if (is_down(head)) {
|
||||
dprintf(" %s: key down 0x%04X\n", __func__, kc);
|
||||
register_code16(kc);
|
||||
} else {
|
||||
dprintf(" %s: key up 0x%04X\n", __func__, kc);
|
||||
unregister_code16(kc);
|
||||
}
|
||||
}
|
||||
kring_pop(ring);
|
||||
}
|
||||
|
||||
// try to figure out what the next pending keypress means.
|
||||
bool parse_next(kring_t *pending) {
|
||||
pending_pair_t p;
|
||||
pending_key_t *first = kring_get(pending, 0);
|
||||
if (!is_ambiguous_kc(first->keycode)) {
|
||||
// this pending key isn't ambiguous, so execute it.
|
||||
dprintf(" %s: found unambiguous key\n", __func__);
|
||||
execute_head_and_pop(pending);
|
||||
return true;
|
||||
} else if (is_ambiguous_kc(first->keycode) && is_up(first)) {
|
||||
dprintf(" %s: interpreting keyup as mod\n", __func__);
|
||||
p.down = NULL;
|
||||
p.up = first;
|
||||
interpret_as_mod(&p);
|
||||
execute_head_and_pop(pending);
|
||||
return true;
|
||||
} else if (is_downup_pair(first, &p)) {
|
||||
// 'first' was released before any other pressed key, so treat this as
|
||||
// a rolling series of normal key taps.
|
||||
dprintf(" %s: found down-up pair, interpreting as normal key\n", __func__);
|
||||
interpret_as_normal(&p);
|
||||
execute_head_and_pop(pending);
|
||||
return true;
|
||||
} else {
|
||||
// if another key was pressed and released while 'first' was held, then we
|
||||
// should treat it like a modifier.
|
||||
pending_key_t *next = first->next;
|
||||
while (next != NULL) {
|
||||
if (is_downup_pair(next, NULL)) {
|
||||
dprintf(" %s: found subsequent downup pair, interpreting head as mod\n", __func__);
|
||||
p.down = first;
|
||||
p.up = NULL;
|
||||
interpret_as_mod(&p);
|
||||
execute_head_and_pop(pending);
|
||||
return true;
|
||||
}
|
||||
next = next->next;
|
||||
}
|
||||
|
||||
// we can't disambiguate 'first' yet. wait for another keypress.
|
||||
dprintf(" %s: can't disambiguate (yet)\n", __func__);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (keycode == DEBUG) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (g_pending.count == 0 && !is_ambiguous_kc(keycode)) {
|
||||
// we have no pending keys and this key isn't ambiguous, so we should
|
||||
// just let QMK take care of it.
|
||||
dprintf("%s: handled by qmk\n", __func__);
|
||||
return true;
|
||||
} else {
|
||||
dprintf("%s: got dual-role key\n", __func__);
|
||||
// append the keypress and then try parsing all pending keypresses.
|
||||
kring_append(&g_pending, keycode, record);
|
||||
while (g_pending.count > 0) {
|
||||
dprintf("%s: looping through %d keys...\n", __func__, g_pending.count);
|
||||
if (!parse_next(&g_pending)) {
|
||||
// one of our keypresses is ambiguous and we can't proceed until
|
||||
// we get further keypresses to disambiguate it.
|
||||
dprintf("%s: %d pending keys are ambiguous\n", __func__, g_pending.count);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
11
keyboards/handwired/hexon38/readme.md
Normal file
11
keyboards/handwired/hexon38/readme.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
# hexon38
|
||||
|
||||
QMK support for the [hexon38](https://github.com/pepaslabs/hexon38).
|
||||
|
||||
## Building
|
||||
|
||||
```
|
||||
$ cd qmk_firmware
|
||||
$ make handwired/hexon38
|
||||
```
|
||||
|
||||
64
keyboards/handwired/hexon38/rules.mk
Normal file
64
keyboards/handwired/hexon38/rules.mk
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
# see https://github.com/pepaslabs/hexon38
|
||||
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# atmega32a bootloadHID
|
||||
BOOTLOADER = halfkay
|
||||
|
||||
|
||||
# Enabled build options:
|
||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
|
||||
# Disabled build options:
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
AUDIO_ENABLE = no
|
||||
RGBLIGHT_ENABLE = no
|
||||
|
|
@ -137,10 +137,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
),*/
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
|
|
|
|||
|
|
@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
|
|||
|
||||
make handwired/ibm122m:default
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ Make example for this keyboard (after setting up your build environment):
|
|||
|
||||
make not_so_minidox/rev1:default
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
|
||||
|
||||
Flashing
|
||||
-------
|
||||
|
|
|
|||
51
keyboards/handwired/numbrero/config.h
Normal file
51
keyboards/handwired/numbrero/config.h
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Flehrad
|
||||
#define PRODUCT Numbrero
|
||||
#define DESCRIPTION Pro Micro-powered Reversible L/H Numpad with Extra Macro Keys
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 5
|
||||
|
||||
/* key matrix pins */
|
||||
#define MATRIX_ROW_PINS { F6, B5, B4, E6, F7 }
|
||||
#define MATRIX_COL_PINS { D1, D0, D4, F5, F4 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* number of backlight levels */
|
||||
|
||||
#ifdef BACKLIGHT_PIN
|
||||
#define BACKLIGHT_LEVELS 3
|
||||
#endif
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCING_DELAY 5
|
||||
|
||||
/* 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
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
#ifdef RGB_DI_PIN
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 5
|
||||
#define RGBLIGHT_HUE_STEP 8
|
||||
#define RGBLIGHT_SAT_STEP 8
|
||||
#define RGBLIGHT_VAL_STEP 8
|
||||
#endif
|
||||
62
keyboards/handwired/numbrero/info.json
Normal file
62
keyboards/handwired/numbrero/info.json
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
{
|
||||
"keyboard_name": "Numbrero",
|
||||
"url": "",
|
||||
"maintainer": "Flehrad",
|
||||
"width": 5,
|
||||
"height": 5,
|
||||
"layouts": {
|
||||
"LAYOUT_numbrero_numpad": {
|
||||
"layout": [
|
||||
{"label":"K00", "x":0, "y":0},
|
||||
{"label":"K01", "x":1, "y":0},
|
||||
{"label":"K02", "x":2, "y":0},
|
||||
{"label":"K03", "x":3, "y":0},
|
||||
{"label":"K04", "x":4, "y":0},
|
||||
{"label":"K10", "x":0, "y":1, "h":1.5},
|
||||
{"label":"K11", "x":1, "y":1},
|
||||
{"label":"K12", "x":2, "y":1},
|
||||
{"label":"K13", "x":3, "y":1},
|
||||
{"label":"K20", "x":0, "y":2.5},
|
||||
{"label":"K21", "x":1, "y":2},
|
||||
{"label":"K22", "x":2, "y":2},
|
||||
{"label":"K23", "x":3, "y":2},
|
||||
{"label":"K14", "x":4, "y":1, "h":2},
|
||||
{"label":"K30", "x":0, "y":3.5, "h":1.5},
|
||||
{"label":"K31", "x":1, "y":3},
|
||||
{"label":"K32", "x":2, "y":3},
|
||||
{"label":"K33", "x":3, "y":3},
|
||||
{"label":"K41", "x":1, "y":4, "w":2},
|
||||
{"label":"K43", "x":3, "y":4},
|
||||
{"label":"K34", "x":4, "y":3, "h":2}
|
||||
]
|
||||
},
|
||||
"LAYOUT_numbrero_ortho": {
|
||||
"layout": [
|
||||
{"label":"K00", "x":0, "y":0},
|
||||
{"label":"K01", "x":1, "y":0},
|
||||
{"label":"K02", "x":2, "y":0},
|
||||
{"label":"K03", "x":3, "y":0},
|
||||
{"label":"K04", "x":4, "y":0},
|
||||
{"label":"K10", "x":0, "y":1, "h":1.5},
|
||||
{"label":"K11", "x":1, "y":1},
|
||||
{"label":"K12", "x":2, "y":1},
|
||||
{"label":"K13", "x":3, "y":1},
|
||||
{"label":"K14", "x":4, "y":1},
|
||||
{"label":"K20", "x":0, "y":2.5},
|
||||
{"label":"K21", "x":1, "y":2},
|
||||
{"label":"K22", "x":2, "y":2},
|
||||
{"label":"K23", "x":3, "y":2},
|
||||
{"label":"K24", "x":4, "y":2},
|
||||
{"label":"K30", "x":0, "y":3.5, "h":1.5},
|
||||
{"label":"K31", "x":1, "y":3},
|
||||
{"label":"K32", "x":2, "y":3},
|
||||
{"label":"K33", "x":3, "y":3},
|
||||
{"label":"K34", "x":4, "y":3},
|
||||
{"label":"K41", "x":1, "y":4},
|
||||
{"label":"K42", "x":2, "y":4},
|
||||
{"label":"K43", "x":3, "y":4},
|
||||
{"label":"K44", "x":4, "y":4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
30
keyboards/handwired/numbrero/keymaps/default/keymap.c
Normal file
30
keyboards/handwired/numbrero/keymaps/default/keymap.c
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
LAYOUT_numbrero_numpad(
|
||||
KC_TRNS, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
|
||||
KC_TRNS, KC_P7, KC_P8, KC_P9,
|
||||
KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PPLS,
|
||||
KC_TRNS, KC_P1, KC_P2, KC_P3,
|
||||
KC_P0, KC_PDOT, KC_PENT),
|
||||
|
||||
LAYOUT_numbrero_ortho(
|
||||
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),
|
||||
|
||||
|
||||
};
|
||||
|
||||
void matrix_init_user(void) {
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return true;
|
||||
}
|
||||
201
keyboards/handwired/numbrero/license
Normal file
201
keyboards/handwired/numbrero/license
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
1
keyboards/handwired/numbrero/numbrero.c
Normal file
1
keyboards/handwired/numbrero/numbrero.c
Normal file
|
|
@ -0,0 +1 @@
|
|||
#include "numbrero.h"
|
||||
30
keyboards/handwired/numbrero/numbrero.h
Normal file
30
keyboards/handwired/numbrero/numbrero.h
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#define LAYOUT_numbrero_numpad( \
|
||||
K00, K01, K02, K03, K04, \
|
||||
K10, K11, K12, K13, \
|
||||
K20, K21, K22, K23, K14, \
|
||||
K30, K31, K32, K33, \
|
||||
K41, K43, K34 \
|
||||
) { \
|
||||
{ K00, K01, K02, K03, K04 }, \
|
||||
{ K10, K11, K12, K13, K14 }, \
|
||||
{ K20, K21, K22, K23, KC_NO }, \
|
||||
{ K30, K31, K32, K33, K34 }, \
|
||||
{ KC_NO, K41, KC_NO, K43, KC_NO } \
|
||||
}
|
||||
#define LAYOUT_numbrero_ortho(\
|
||||
K00, K01, K02, K03, K04, \
|
||||
K10, K11, K12, K13, K14, \
|
||||
K20, K21, K22, K23, K24, \
|
||||
K30, K31, K32, K33, K34, \
|
||||
K41, K42, K43, K44 \
|
||||
){ \
|
||||
{ K00, K01, K02, K03, K04 }, \
|
||||
{ K10, K11, K12, K13, K14 }, \
|
||||
{ K20, K21, K22, K23, K24 }, \
|
||||
{ K30, K31, K32, K33, K34 }, \
|
||||
{ KC_NO, K41, K42, K43, K44 } \
|
||||
}
|
||||
13
keyboards/handwired/numbrero/readme.md
Normal file
13
keyboards/handwired/numbrero/readme.md
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
# Numbrero
|
||||
|
||||
A reversible numpad (left/right-handed) with extra macro keys.
|
||||
|
||||
Keyboard Maintainer: [Flehrad](https://github.com/flehrad)
|
||||
Hardware Supported: Numbrero PCB, Pro Micro
|
||||
Hardware Availability: The Board Podcast Slack
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make handwired/numbrero/numbrero:default
|
||||
|
||||
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).
|
||||
59
keyboards/handwired/numbrero/rules.mk
Normal file
59
keyboards/handwired/numbrero/rules.mk
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
#Bootloder
|
||||
#Pro Micro = caterina
|
||||
BOOTLOADER = caterina
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
#OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
AUDIO_ENABLE = no
|
||||
RGBLIGHT_ENABLE = no
|
||||
|
|
@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
|
|||
|
||||
make handwired/numpad20:default
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
#ifndef ORTHO5X13_H
|
||||
#define ORTHO5X13_H
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
|
|
@ -18,7 +17,7 @@
|
|||
{ k40, k41, k42, k43, k44, k45, KC_NO, k47, k48, k49, k4a, k4b, k4c } \
|
||||
}
|
||||
|
||||
#define LAYOUT_compact( \
|
||||
#define LAYOUT_kc( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
|
||||
|
|
@ -32,5 +31,3 @@
|
|||
{ KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k35, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b, KC_##k3c }, \
|
||||
{ KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45, KC_NO, KC_##k47, KC_##k48, KC_##k49, KC_##k4a, KC_##k4b, KC_##k4c } \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -65,8 +65,71 @@
|
|||
{"label":"Raise", "x":7, "y":4},
|
||||
{"label":"Left", "x":8, "y":4},
|
||||
{"label":"Down", "x":9, "y":4},
|
||||
{"label":"Right", "x":10, "y":4},
|
||||
{"label":"up", "x":11, "y":4}
|
||||
{"label":"Up", "x":10, "y":4},
|
||||
{"label":"Right", "x":11, "y":4}
|
||||
]
|
||||
},
|
||||
"LAYOUT_1x2uC": {
|
||||
"layout": [
|
||||
{"label":"`", "x":0, "y":0},
|
||||
{"label":"1", "x":1, "y":0},
|
||||
{"label":"2", "x":2, "y":0},
|
||||
{"label":"3", "x":3, "y":0},
|
||||
{"label":"4", "x":4, "y":0},
|
||||
{"label":"5", "x":5, "y":0},
|
||||
{"label":"6", "x":6, "y":0},
|
||||
{"label":"7", "x":7, "y":0},
|
||||
{"label":"8", "x":8, "y":0},
|
||||
{"label":"9", "x":9, "y":0},
|
||||
{"label":"0", "x":10, "y":0},
|
||||
{"label":"Backspace", "x":11, "y":0},
|
||||
{"label":"Tab", "x":0, "y":1},
|
||||
{"label":"Q", "x":1, "y":1},
|
||||
{"label":"W", "x":2, "y":1},
|
||||
{"label":"E", "x":3, "y":1},
|
||||
{"label":"R", "x":4, "y":1},
|
||||
{"label":"T", "x":5, "y":1},
|
||||
{"label":"Y", "x":6, "y":1},
|
||||
{"label":"U", "x":7, "y":1},
|
||||
{"label":"I", "x":8, "y":1},
|
||||
{"label":"O", "x":9, "y":1},
|
||||
{"label":"P", "x":10, "y":1},
|
||||
{"label":"Delete", "x":11, "y":1},
|
||||
{"label":"Esc", "x":0, "y":2},
|
||||
{"label":"A", "x":1, "y":2},
|
||||
{"label":"S", "x":2, "y":2},
|
||||
{"label":"D", "x":3, "y":2},
|
||||
{"label":"F", "x":4, "y":2},
|
||||
{"label":"G", "x":5, "y":2},
|
||||
{"label":"H", "x":6, "y":2},
|
||||
{"label":"J", "x":7, "y":2},
|
||||
{"label":"K", "x":8, "y":2},
|
||||
{"label":"L", "x":9, "y":2},
|
||||
{"label":";", "x":10, "y":2},
|
||||
{"label":"'", "x":11, "y":2},
|
||||
{"label":"Shift", "x":0, "y":3},
|
||||
{"label":"Z", "x":1, "y":3},
|
||||
{"label":"X", "x":2, "y":3},
|
||||
{"label":"C", "x":3, "y":3},
|
||||
{"label":"V", "x":4, "y":3},
|
||||
{"label":"B", "x":5, "y":3},
|
||||
{"label":"N", "x":6, "y":3},
|
||||
{"label":"M", "x":7, "y":3},
|
||||
{"label":",", "x":8, "y":3},
|
||||
{"label":".", "x":9, "y":3},
|
||||
{"label":"/", "x":10, "y":3},
|
||||
{"label":"Enter", "x":11, "y":3},
|
||||
{"label":"Fn", "x":0, "y":4},
|
||||
{"label":"Ctrl", "x":1, "y":4},
|
||||
{"label":"Alt", "x":2, "y":4},
|
||||
{"label":"Meta", "x":3, "y":4},
|
||||
{"label":"Lower", "x":4, "y":4},
|
||||
{"label":"Space", "x":5, "y":4, "w":2},
|
||||
{"label":"Raise", "x":7, "y":4},
|
||||
{"label":"Left", "x":8, "y":4},
|
||||
{"label":"Down", "x":9, "y":4},
|
||||
{"label":"Up", "x":10, "y":4},
|
||||
{"label":"Right", "x":11, "y":4}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
# Ortho 60
|
||||
|
||||
Blue Pill STM32F103C8T6 based 12x5 Ortholinear Board
|
||||
A Blue Pill STM32F103C8T6-based 12x5 ortholinear keyboard.
|
||||
|
||||
Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan1)
|
||||
Hardware Supported: Blue Pill STM32F103C8T6
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make handwired/ortho60:default
|
||||
|
||||
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).
|
||||
|
|
|
|||
|
|
@ -52,5 +52,3 @@ NKRO_ENABLE = yes # USB Nkey Rollover
|
|||
BACKLIGHT_ENABLE = yes
|
||||
|
||||
LAYOUTS = ortho_5x12
|
||||
|
||||
DEFAULT_FOLDER = handwired/ortho60
|
||||
|
|
|
|||
|
|
@ -60,7 +60,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
// Fillers to make layering clearer
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
#define G(x) LGUI(x)
|
||||
#define KC_WWWB KC_WWW_BACK
|
||||
#define KC_WWWF KC_WWW_FORWARD
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
// Fillers to make layering clearer
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
#define G(x) LGUI(x)
|
||||
#define KC_WWWB KC_WWW_BACK
|
||||
#define KC_WWWF KC_WWW_FORWARD
|
||||
|
||||
|
|
|
|||
|
|
@ -10,10 +10,8 @@ enum pteron_layers {
|
|||
#define LOWER MO(_LOWER)
|
||||
#define RAISE MO(_RAISE)
|
||||
|
||||
// use S() to produce shifted versions of keys
|
||||
// #define S(kc) LSFT(kc) // defined by default
|
||||
|
||||
// alt gr
|
||||
#undef G
|
||||
#define G(kc) RALT(kc)
|
||||
|
||||
// custom keycodes
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
QC60
|
||||
========
|
||||
# QC60
|
||||
|
||||

|
||||
|
||||
|
|
@ -19,4 +18,4 @@ Example of flashing this keyboard:
|
|||
|
||||
make handwired/qc60/proto:avrdude
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||
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).
|
||||
|
|
|
|||
|
|
@ -1,11 +1,93 @@
|
|||
{
|
||||
"keyboard_name": "QC60",
|
||||
"url": "",
|
||||
"maintainer": "coarse",
|
||||
"width": 15,
|
||||
"height": 5,
|
||||
"keyboard_name": "QC60",
|
||||
"url": "",
|
||||
"maintainer": "coarse",
|
||||
"width": 16,
|
||||
"height": 5,
|
||||
"layouts": {
|
||||
"LAYOUT_ANSI_DEFAULT": {
|
||||
"LAYOUT": {
|
||||
"key_count": 67,
|
||||
"layout": [
|
||||
{"label":"L00", "x":0, "y":0},
|
||||
{"label":"L01", "x":1, "y":0},
|
||||
{"label":"L02", "x":2, "y":0},
|
||||
{"label":"L03", "x":3, "y":0},
|
||||
{"label":"L04", "x":4, "y":0},
|
||||
{"label":"L05", "x":5, "y":0},
|
||||
{"label":"L06", "x":6, "y":0},
|
||||
|
||||
{"label":"R00", "x":8, "y":0},
|
||||
{"label":"R01", "x":9, "y":0},
|
||||
{"label":"R02", "x":10, "y":0},
|
||||
{"label":"R03", "x":11, "y":0},
|
||||
{"label":"R04", "x":12, "y":0},
|
||||
{"label":"R05", "x":13, "y":0},
|
||||
{"label":"R06", "x":14, "y":0},
|
||||
{"label":"R07", "x":15, "y":0},
|
||||
|
||||
{"label":"L10", "x":0, "y":1, "w":1.5},
|
||||
{"label":"L11", "x":1.5, "y":1},
|
||||
{"label":"L12", "x":2.5, "y":1},
|
||||
{"label":"L13", "x":3.5, "y":1},
|
||||
{"label":"L14", "x":4.5, "y":1},
|
||||
{"label":"L15", "x":5.5, "y":1},
|
||||
|
||||
{"label":"R10", "x":7.5, "y":1},
|
||||
{"label":"R11", "x":8.5, "y":1},
|
||||
{"label":"R12", "x":9.5, "y":1},
|
||||
{"label":"R13", "x":10.5, "y":1},
|
||||
{"label":"R14", "x":11.5, "y":1},
|
||||
{"label":"R15", "x":12.5, "y":1},
|
||||
{"label":"R16", "x":13.5, "y":1},
|
||||
{"label":"R17", "x":14.5, "y":1, "w":1.5},
|
||||
|
||||
{"label":"L20", "x":0, "y":2, "w":1.75},
|
||||
{"label":"L21", "x":1.75, "y":2},
|
||||
{"label":"L22", "x":2.75, "y":2},
|
||||
{"label":"L23", "x":3.75, "y":2},
|
||||
{"label":"L24", "x":4.75, "y":2},
|
||||
{"label":"L25", "x":5.75, "y":2},
|
||||
|
||||
{"label":"R21", "x":7.75, "y":2},
|
||||
{"label":"R22", "x":8.75, "y":2},
|
||||
{"label":"R23", "x":9.75, "y":2},
|
||||
{"label":"R24", "x":10.75, "y":2},
|
||||
{"label":"R25", "x":11.75, "y":2},
|
||||
{"label":"R26", "x":12.75, "y":2},
|
||||
{"label":"R27", "x":13.75, "y":2, "w":2.25},
|
||||
|
||||
{"label":"L30", "x":0, "y":3, "w":1.25},
|
||||
{"label":"L31", "x":1.25, "y":3},
|
||||
{"label":"L32", "x":2.25, "y":3},
|
||||
{"label":"L33", "x":3.25, "y":3},
|
||||
{"label":"L34", "x":4.25, "y":3},
|
||||
{"label":"L35", "x":5.25, "y":3},
|
||||
{"label":"L36", "x":6.25, "y":3},
|
||||
|
||||
{"label":"R31", "x":8.25, "y":3},
|
||||
{"label":"R32", "x":9.25, "y":3},
|
||||
{"label":"R33", "x":10.25, "y":3},
|
||||
{"label":"R34", "x":11.25, "y":3},
|
||||
{"label":"R35", "x":12.25, "y":3},
|
||||
{"label":"R36", "x":13.25, "y":3, "w":1.75},
|
||||
{"label":"R37", "x":15, "y":3},
|
||||
|
||||
{"label":"L40", "x":0, "y":4, "w":1.25},
|
||||
{"label":"L41", "x":1.25, "y":4, "w":1.25},
|
||||
{"label":"L42", "x":2.5, "y":4, "w":1.25},
|
||||
{"label":"L43", "x":3.75, "y":4, "w":2.75},
|
||||
{"label":"L44", "x":6.5, "y":4, "w":1.25},
|
||||
|
||||
{"label":"R43", "x":8.75, "y":4, "w":1.25},
|
||||
{"label":"R44", "x":10, "y":4, "w":2},
|
||||
{"label":"R42", "x":12, "y":4},
|
||||
{"label":"R45", "x":13, "y":4},
|
||||
{"label":"R46", "x":14, "y":4},
|
||||
{"label":"R47", "x":15, "y":4}
|
||||
]
|
||||
},
|
||||
|
||||
"LAYOUT_ansi_default": {
|
||||
"key_count": 64,
|
||||
"layout": [
|
||||
{"label":"Esc", "x":0, "y":0},
|
||||
|
|
@ -16,13 +98,13 @@
|
|||
{"label":"5", "x":5, "y":0},
|
||||
{"label":"6", "x":6, "y":0},
|
||||
|
||||
{"label":"7", "x":7, "y":0},
|
||||
{"label":"8", "x":8, "y":0},
|
||||
{"label":"9", "x":9, "y":0},
|
||||
{"label":"0", "x":10, "y":0},
|
||||
{"label":"-", "x":11, "y":0},
|
||||
{"label":"=", "x":12, "y":0},
|
||||
{"label":"Backspace", "x":13, "y":0, "w":2.0},
|
||||
{"label":"7", "x":8, "y":0},
|
||||
{"label":"8", "x":9, "y":0},
|
||||
{"label":"9", "x":10, "y":0},
|
||||
{"label":"0", "x":11, "y":0},
|
||||
{"label":"-", "x":12, "y":0},
|
||||
{"label":"=", "x":13, "y":0},
|
||||
{"label":"Backspace", "x":14, "y":0, "w":2.0},
|
||||
|
||||
{"label":"Tab", "x":0, "y":1, "w":1.5},
|
||||
{"label":"Q", "x":1.5, "y":1},
|
||||
|
|
@ -31,14 +113,14 @@
|
|||
{"label":"R", "x":4.5, "y":1},
|
||||
{"label":"T", "x":5.5, "y":1},
|
||||
|
||||
{"label":"Y", "x":6.5, "y":1},
|
||||
{"label":"U", "x":7.5, "y":1},
|
||||
{"label":"I", "x":8.5, "y":1},
|
||||
{"label":"O", "x":9.5, "y":1},
|
||||
{"label":"P", "x":10.5, "y":1},
|
||||
{"label":"[", "x":11.5, "y":1},
|
||||
{"label":"]", "x":12.5, "y":1},
|
||||
{"label":"\\", "x":13.5, "y":1, "w":1.5},
|
||||
{"label":"Y", "x":7.5, "y":1},
|
||||
{"label":"U", "x":8.5, "y":1},
|
||||
{"label":"I", "x":9.5, "y":1},
|
||||
{"label":"O", "x":10.5, "y":1},
|
||||
{"label":"P", "x":11.5, "y":1},
|
||||
{"label":"[", "x":12.5, "y":1},
|
||||
{"label":"]", "x":13.5, "y":1},
|
||||
{"label":"\\", "x":14.5, "y":1, "w":1.5},
|
||||
|
||||
{"label":"CapsLock", "x":0, "y":2, "w":1.75},
|
||||
{"label":"A", "x":1.75, "y":2},
|
||||
|
|
@ -47,13 +129,13 @@
|
|||
{"label":"F", "x":4.75, "y":2},
|
||||
{"label":"G", "x":5.75, "y":2},
|
||||
|
||||
{"label":"H", "x":6.75, "y":2},
|
||||
{"label":"J", "x":7.75, "y":2},
|
||||
{"label":"K", "x":8.75, "y":2},
|
||||
{"label":"L", "x":9.75, "y":2},
|
||||
{"label":";", "x":10.75, "y":2},
|
||||
{"label":"'", "x":11.75, "y":2},
|
||||
{"label":"Enter", "x":12.75, "y":2, "w":2.25},
|
||||
{"label":"H", "x":7.75, "y":2},
|
||||
{"label":"J", "x":8.75, "y":2},
|
||||
{"label":"K", "x":9.75, "y":2},
|
||||
{"label":"L", "x":10.75, "y":2},
|
||||
{"label":";", "x":11.75, "y":2},
|
||||
{"label":"'", "x":12.75, "y":2},
|
||||
{"label":"Enter", "x":13.75, "y":2, "w":2.25},
|
||||
|
||||
{"label":"Shift", "x":0, "y":3, "w":2.25},
|
||||
{"label":"Z", "x":2.25, "y":3},
|
||||
|
|
@ -62,12 +144,12 @@
|
|||
{"label":"V", "x":5.25, "y":3},
|
||||
{"label":"B", "x":6.25, "y":3},
|
||||
|
||||
{"label":"N", "x":7.25, "y":3},
|
||||
{"label":"M", "x":8.25, "y":3},
|
||||
{"label":",", "x":9.25, "y":3},
|
||||
{"label":".", "x":10.25, "y":3},
|
||||
{"label":"/", "x":11.25, "y":3},
|
||||
{"label":"Shift", "x":12.25, "y":3, "w":2.75},
|
||||
{"label":"N", "x":8.25, "y":3},
|
||||
{"label":"M", "x":9.25, "y":3},
|
||||
{"label":",", "x":10.25, "y":3},
|
||||
{"label":".", "x":11.25, "y":3},
|
||||
{"label":"/", "x":12.25, "y":3},
|
||||
{"label":"Shift", "x":13.25, "y":3, "w":2.75},
|
||||
|
||||
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
|
||||
{"label":"Win", "x":1.25, "y":4, "w":1.25},
|
||||
|
|
@ -75,13 +157,483 @@
|
|||
{"x":3.75, "y":4, "w":2.75},
|
||||
{"x":6.5, "y":4, "w":1.25},
|
||||
|
||||
{"x":7.75, "y":4, "w":1.25},
|
||||
{"x":9, "y":4, "w":2.0},
|
||||
{"label":"Alt", "x":11, "y":4},
|
||||
{"label":"Win", "x":12, "y":4},
|
||||
{"label":"Menu", "x":13, "y":4},
|
||||
{"label":"Ctrl", "x":14, "y":4}
|
||||
{"x":8.75, "y":4, "w":1.25},
|
||||
{"x":10, "y":4, "w":2.0},
|
||||
{"label":"Alt", "x":12, "y":4},
|
||||
{"label":"Win", "x":13, "y":4},
|
||||
{"label":"Menu", "x":14, "y":4},
|
||||
{"label":"Ctrl", "x":15, "y":4}
|
||||
]
|
||||
},
|
||||
|
||||
"LAYOUT_ansi_alt": {
|
||||
"key_count": 63,
|
||||
"layout": [
|
||||
{"label":"L00", "x":0, "y":0},
|
||||
{"label":"L01", "x":1, "y":0},
|
||||
{"label":"L02", "x":2, "y":0},
|
||||
{"label":"L03", "x":3, "y":0},
|
||||
{"label":"L04", "x":4, "y":0},
|
||||
{"label":"L05", "x":5, "y":0},
|
||||
{"label":"L06", "x":6, "y":0},
|
||||
|
||||
{"label":"R00", "x":8, "y":0},
|
||||
{"label":"R01", "x":9, "y":0},
|
||||
{"label":"R02", "x":10, "y":0},
|
||||
{"label":"R03", "x":11, "y":0},
|
||||
{"label":"R04", "x":12, "y":0},
|
||||
{"label":"R05", "x":13, "y":0},
|
||||
{"label":"R07", "x":14, "y":0, "w":2},
|
||||
|
||||
{"label":"L10", "x":0, "y":1, "w":1.5},
|
||||
{"label":"L11", "x":1.5, "y":1},
|
||||
{"label":"L12", "x":2.5, "y":1},
|
||||
{"label":"L13", "x":3.5, "y":1},
|
||||
{"label":"L14", "x":4.5, "y":1},
|
||||
{"label":"L15", "x":5.5, "y":1},
|
||||
|
||||
{"label":"R10", "x":7.5, "y":1},
|
||||
{"label":"R11", "x":8.5, "y":1},
|
||||
{"label":"R12", "x":9.5, "y":1},
|
||||
{"label":"R13", "x":10.5, "y":1},
|
||||
{"label":"R14", "x":11.5, "y":1},
|
||||
{"label":"R15", "x":12.5, "y":1},
|
||||
{"label":"R16", "x":13.5, "y":1},
|
||||
{"label":"R17", "x":14.5, "y":1, "w":1.5},
|
||||
|
||||
{"label":"L20", "x":0, "y":2, "w":1.75},
|
||||
{"label":"L21", "x":1.75, "y":2},
|
||||
{"label":"L22", "x":2.75, "y":2},
|
||||
{"label":"L23", "x":3.75, "y":2},
|
||||
{"label":"L24", "x":4.75, "y":2},
|
||||
{"label":"L25", "x":5.75, "y":2},
|
||||
|
||||
{"label":"R21", "x":7.75, "y":2},
|
||||
{"label":"R22", "x":8.75, "y":2},
|
||||
{"label":"R23", "x":9.75, "y":2},
|
||||
{"label":"R24", "x":10.75, "y":2},
|
||||
{"label":"R25", "x":11.75, "y":2},
|
||||
{"label":"R26", "x":12.75, "y":2},
|
||||
{"label":"R27", "x":13.75, "y":2, "w":2.25},
|
||||
|
||||
{"label":"L31", "x":0, "y":3, "w":2.25},
|
||||
{"label":"L32", "x":2.25, "y":3},
|
||||
{"label":"L33", "x":3.25, "y":3},
|
||||
{"label":"L34", "x":4.25, "y":3},
|
||||
{"label":"L35", "x":5.25, "y":3},
|
||||
{"label":"L36", "x":6.25, "y":3},
|
||||
|
||||
{"label":"R31", "x":8.25, "y":3},
|
||||
{"label":"R32", "x":9.25, "y":3},
|
||||
{"label":"R33", "x":10.25, "y":3},
|
||||
{"label":"R34", "x":11.25, "y":3},
|
||||
{"label":"R35", "x":12.25, "y":3},
|
||||
{"label":"R36", "x":13.25, "y":3, "w":2.75},
|
||||
|
||||
{"label":"L40", "x":0, "y":4, "w":1.5},
|
||||
{"label":"L41", "x":1.5, "y":4},
|
||||
{"label":"L42", "x":2.5, "y":4, "w":1.5},
|
||||
{"label":"L43", "x":4, "y":4, "w":2.75},
|
||||
{"label":"L44", "x":6.75, "y":4},
|
||||
|
||||
{"label":"R43", "x":8.75, "y":4},
|
||||
{"label":"R44", "x":9.75, "y":4, "w":2.25},
|
||||
{"label":"R45", "x":12, "y":4, "w":1.5},
|
||||
{"label":"R46", "x":13.5, "y":4},
|
||||
{"label":"R47", "x":14.5, "y":4, "w":1.5}
|
||||
]
|
||||
},
|
||||
|
||||
"LAYOUT_iso_default": {
|
||||
"key_count": 65,
|
||||
"layout": [
|
||||
{"label":"L00", "x":0, "y":0},
|
||||
{"label":"L01", "x":1, "y":0},
|
||||
{"label":"L02", "x":2, "y":0},
|
||||
{"label":"L03", "x":3, "y":0},
|
||||
{"label":"L04", "x":4, "y":0},
|
||||
{"label":"L05", "x":5, "y":0},
|
||||
{"label":"L06", "x":6, "y":0},
|
||||
|
||||
{"label":"R00", "x":8, "y":0},
|
||||
{"label":"R01", "x":9, "y":0},
|
||||
{"label":"R02", "x":10, "y":0},
|
||||
{"label":"R03", "x":11, "y":0},
|
||||
{"label":"R04", "x":12, "y":0},
|
||||
{"label":"R05", "x":13, "y":0},
|
||||
{"label":"R07", "x":14, "y":0, "w":2},
|
||||
|
||||
{"label":"L10", "x":0, "y":1, "w":1.5},
|
||||
{"label":"L11", "x":1.5, "y":1},
|
||||
{"label":"L12", "x":2.5, "y":1},
|
||||
{"label":"L13", "x":3.5, "y":1},
|
||||
{"label":"L14", "x":4.5, "y":1},
|
||||
{"label":"L15", "x":5.5, "y":1},
|
||||
|
||||
{"label":"R10", "x":7.5, "y":1},
|
||||
{"label":"R11", "x":8.5, "y":1},
|
||||
{"label":"R12", "x":9.5, "y":1},
|
||||
{"label":"R13", "x":10.5, "y":1},
|
||||
{"label":"R14", "x":11.5, "y":1},
|
||||
{"label":"R15", "x":12.5, "y":1},
|
||||
{"label":"R16", "x":13.5, "y":1},
|
||||
|
||||
{"label":"L20", "x":0, "y":2, "w":1.75},
|
||||
{"label":"L21", "x":1.75, "y":2},
|
||||
{"label":"L22", "x":2.75, "y":2},
|
||||
{"label":"L23", "x":3.75, "y":2},
|
||||
{"label":"L24", "x":4.75, "y":2},
|
||||
{"label":"L25", "x":5.75, "y":2},
|
||||
|
||||
{"label":"R21", "x":7.75, "y":2},
|
||||
{"label":"R22", "x":8.75, "y":2},
|
||||
{"label":"R23", "x":9.75, "y":2},
|
||||
{"label":"R24", "x":10.75, "y":2},
|
||||
{"label":"R25", "x":11.75, "y":2},
|
||||
{"label":"R26", "x":12.75, "y":2},
|
||||
{"label":"R17", "x":13.75, "y":2},
|
||||
{"label":"R27", "x":14.75, "y":1, "w":1.25, "h":2},
|
||||
|
||||
{"label":"L30", "x":0, "y":3, "w":1.25},
|
||||
{"label":"L31", "x":1.25, "y":3},
|
||||
{"label":"L32", "x":2.25, "y":3},
|
||||
{"label":"L33", "x":3.25, "y":3},
|
||||
{"label":"L34", "x":4.25, "y":3},
|
||||
{"label":"L35", "x":5.25, "y":3},
|
||||
{"label":"L36", "x":6.25, "y":3},
|
||||
|
||||
{"label":"R31", "x":8.25, "y":3},
|
||||
{"label":"R32", "x":9.25, "y":3},
|
||||
{"label":"R33", "x":10.25, "y":3},
|
||||
{"label":"R34", "x":11.25, "y":3},
|
||||
{"label":"R35", "x":12.25, "y":3},
|
||||
{"label":"R36", "x":13.25, "y":3, "w":2.75},
|
||||
|
||||
{"label":"L40", "x":0, "y":4, "w":1.25},
|
||||
{"label":"L41", "x":1.25, "y":4, "w":1.25},
|
||||
{"label":"L42", "x":2.5, "y":4, "w":1.25},
|
||||
{"label":"L43", "x":3.75, "y":4, "w":2.75},
|
||||
{"label":"L44", "x":6.5, "y":4, "w":1.25},
|
||||
|
||||
{"label":"R43", "x":8.75, "y":4, "w":1.25},
|
||||
{"label":"R44", "x":10, "y":4, "w":2},
|
||||
{"label":"R42", "x":12, "y":4},
|
||||
{"label":"R45", "x":13, "y":4},
|
||||
{"label":"R46", "x":14, "y":4},
|
||||
{"label":"R47", "x":15, "y":4}
|
||||
]
|
||||
},
|
||||
|
||||
"LAYOUT_iso_alt": {
|
||||
"key_count": 64,
|
||||
"layout": [
|
||||
{"label":"L00", "x":0, "y":0},
|
||||
{"label":"L01", "x":1, "y":0},
|
||||
{"label":"L02", "x":2, "y":0},
|
||||
{"label":"L03", "x":3, "y":0},
|
||||
{"label":"L04", "x":4, "y":0},
|
||||
{"label":"L05", "x":5, "y":0},
|
||||
{"label":"L06", "x":6, "y":0},
|
||||
|
||||
{"label":"R00", "x":8, "y":0},
|
||||
{"label":"R01", "x":9, "y":0},
|
||||
{"label":"R02", "x":10, "y":0},
|
||||
{"label":"R03", "x":11, "y":0},
|
||||
{"label":"R04", "x":12, "y":0},
|
||||
{"label":"R05", "x":13, "y":0},
|
||||
{"label":"R07", "x":14, "y":0, "w":2},
|
||||
|
||||
{"label":"L10", "x":0, "y":1, "w":1.5},
|
||||
{"label":"L11", "x":1.5, "y":1},
|
||||
{"label":"L12", "x":2.5, "y":1},
|
||||
{"label":"L13", "x":3.5, "y":1},
|
||||
{"label":"L14", "x":4.5, "y":1},
|
||||
{"label":"L15", "x":5.5, "y":1},
|
||||
|
||||
{"label":"R10", "x":7.5, "y":1},
|
||||
{"label":"R11", "x":8.5, "y":1},
|
||||
{"label":"R12", "x":9.5, "y":1},
|
||||
{"label":"R13", "x":10.5, "y":1},
|
||||
{"label":"R14", "x":11.5, "y":1},
|
||||
{"label":"R15", "x":12.5, "y":1},
|
||||
{"label":"R16", "x":13.5, "y":1},
|
||||
|
||||
{"label":"L20", "x":0, "y":2, "w":1.75},
|
||||
{"label":"L21", "x":1.75, "y":2},
|
||||
{"label":"L22", "x":2.75, "y":2},
|
||||
{"label":"L23", "x":3.75, "y":2},
|
||||
{"label":"L24", "x":4.75, "y":2},
|
||||
{"label":"L25", "x":5.75, "y":2},
|
||||
|
||||
{"label":"R21", "x":7.75, "y":2},
|
||||
{"label":"R22", "x":8.75, "y":2},
|
||||
{"label":"R23", "x":9.75, "y":2},
|
||||
{"label":"R24", "x":10.75, "y":2},
|
||||
{"label":"R25", "x":11.75, "y":2},
|
||||
{"label":"R26", "x":12.75, "y":2},
|
||||
{"label":"R17", "x":13.75, "y":2},
|
||||
{"label":"R27", "x":14.75, "y":1, "w":1.25, "h":2},
|
||||
|
||||
{"label":"L30", "x":0, "y":3, "w":1.25},
|
||||
{"label":"L31", "x":1.25, "y":3},
|
||||
{"label":"L32", "x":2.25, "y":3},
|
||||
{"label":"L33", "x":3.25, "y":3},
|
||||
{"label":"L34", "x":4.25, "y":3},
|
||||
{"label":"L35", "x":5.25, "y":3},
|
||||
{"label":"L36", "x":6.25, "y":3},
|
||||
|
||||
{"label":"R31", "x":8.25, "y":3},
|
||||
{"label":"R32", "x":9.25, "y":3},
|
||||
{"label":"R33", "x":10.25, "y":3},
|
||||
{"label":"R34", "x":11.25, "y":3},
|
||||
{"label":"R35", "x":12.25, "y":3},
|
||||
{"label":"R36", "x":13.25, "y":3, "w":2.75},
|
||||
|
||||
{"label":"L40", "x":0, "y":4, "w":1.5},
|
||||
{"label":"L41", "x":1.5, "y":4},
|
||||
{"label":"L42", "x":2.5, "y":4, "w":1.5},
|
||||
{"label":"L43", "x":4, "y":4, "w":2.75},
|
||||
{"label":"L44", "x":6.75, "y":4},
|
||||
|
||||
{"label":"R43", "x":8.75, "y":4},
|
||||
{"label":"R44", "x":9.75, "y":4, "w":2.25},
|
||||
{"label":"R45", "x":12, "y":4, "w":1.5},
|
||||
{"label":"R46", "x":13.5, "y":4},
|
||||
{"label":"R47", "x":14.5, "y":4, "w":1.5}
|
||||
]
|
||||
},
|
||||
|
||||
"LAYOUT_hhkb_default": {
|
||||
"key_count": 63,
|
||||
"layout": [
|
||||
{"label":"L00", "x":0, "y":0},
|
||||
{"label":"L01", "x":1, "y":0},
|
||||
{"label":"L02", "x":2, "y":0},
|
||||
{"label":"L03", "x":3, "y":0},
|
||||
{"label":"L04", "x":4, "y":0},
|
||||
{"label":"L05", "x":5, "y":0},
|
||||
{"label":"L06", "x":6, "y":0},
|
||||
|
||||
{"label":"R00", "x":8, "y":0},
|
||||
{"label":"R01", "x":9, "y":0},
|
||||
{"label":"R02", "x":10, "y":0},
|
||||
{"label":"R03", "x":11, "y":0},
|
||||
{"label":"R04", "x":12, "y":0},
|
||||
{"label":"R05", "x":13, "y":0},
|
||||
{"label":"R06", "x":14, "y":0},
|
||||
{"label":"R07", "x":15, "y":0},
|
||||
|
||||
{"label":"L10", "x":0, "y":1, "w":1.5},
|
||||
{"label":"L11", "x":1.5, "y":1},
|
||||
{"label":"L12", "x":2.5, "y":1},
|
||||
{"label":"L13", "x":3.5, "y":1},
|
||||
{"label":"L14", "x":4.5, "y":1},
|
||||
{"label":"L15", "x":5.5, "y":1},
|
||||
|
||||
{"label":"R10", "x":7.5, "y":1},
|
||||
{"label":"R11", "x":8.5, "y":1},
|
||||
{"label":"R12", "x":9.5, "y":1},
|
||||
{"label":"R13", "x":10.5, "y":1},
|
||||
{"label":"R14", "x":11.5, "y":1},
|
||||
{"label":"R15", "x":12.5, "y":1},
|
||||
{"label":"R16", "x":13.5, "y":1},
|
||||
{"label":"R17", "x":14.5, "y":1, "w":1.5},
|
||||
|
||||
{"label":"L20", "x":0, "y":2, "w":1.75},
|
||||
{"label":"L21", "x":1.75, "y":2},
|
||||
{"label":"L22", "x":2.75, "y":2},
|
||||
{"label":"L23", "x":3.75, "y":2},
|
||||
{"label":"L24", "x":4.75, "y":2},
|
||||
{"label":"L25", "x":5.75, "y":2},
|
||||
|
||||
{"label":"R21", "x":7.75, "y":2},
|
||||
{"label":"R22", "x":8.75, "y":2},
|
||||
{"label":"R23", "x":9.75, "y":2},
|
||||
{"label":"R24", "x":10.75, "y":2},
|
||||
{"label":"R25", "x":11.75, "y":2},
|
||||
{"label":"R26", "x":12.75, "y":2},
|
||||
{"label":"R27", "x":13.75, "y":2, "w":2.25},
|
||||
|
||||
{"label":"L31", "x":0, "y":3, "w":2.25},
|
||||
{"label":"L32", "x":2.25, "y":3},
|
||||
{"label":"L33", "x":3.25, "y":3},
|
||||
{"label":"L34", "x":4.25, "y":3},
|
||||
{"label":"L35", "x":5.25, "y":3},
|
||||
{"label":"L36", "x":6.25, "y":3},
|
||||
|
||||
{"label":"R31", "x":8.25, "y":3},
|
||||
{"label":"R32", "x":9.25, "y":3},
|
||||
{"label":"R33", "x":10.25, "y":3},
|
||||
{"label":"R34", "x":11.25, "y":3},
|
||||
{"label":"R35", "x":12.25, "y":3},
|
||||
{"label":"R36", "x":13.25, "y":3, "w":1.75},
|
||||
{"label":"R37", "x":15, "y":3},
|
||||
|
||||
{"label":"L41", "x":1.5, "y":4},
|
||||
{"label":"L42", "x":2.5, "y":4, "w":1.5},
|
||||
{"label":"L43", "x":4, "y":4, "w":2.75},
|
||||
{"label":"L44", "x":6.75, "y":4},
|
||||
|
||||
{"label":"R43", "x":8.75, "y":4},
|
||||
{"label":"R44", "x":9.75, "y":4, "w":2.25},
|
||||
{"label":"R45", "x":12, "y":4, "w":1.5},
|
||||
{"label":"R46", "x":13.5, "y":4}
|
||||
]
|
||||
},
|
||||
|
||||
"LAYOUT_hhkb_split_lshift": {
|
||||
"key_count": 64,
|
||||
"layout": [
|
||||
{"label":"L00", "x":0, "y":0},
|
||||
{"label":"L01", "x":1, "y":0},
|
||||
{"label":"L02", "x":2, "y":0},
|
||||
{"label":"L03", "x":3, "y":0},
|
||||
{"label":"L04", "x":4, "y":0},
|
||||
{"label":"L05", "x":5, "y":0},
|
||||
{"label":"L06", "x":6, "y":0},
|
||||
|
||||
{"label":"R00", "x":8, "y":0},
|
||||
{"label":"R01", "x":9, "y":0},
|
||||
{"label":"R02", "x":10, "y":0},
|
||||
{"label":"R03", "x":11, "y":0},
|
||||
{"label":"R04", "x":12, "y":0},
|
||||
{"label":"R05", "x":13, "y":0},
|
||||
{"label":"R06", "x":14, "y":0},
|
||||
{"label":"R07", "x":15, "y":0},
|
||||
|
||||
{"label":"L10", "x":0, "y":1, "w":1.5},
|
||||
{"label":"L11", "x":1.5, "y":1},
|
||||
{"label":"L12", "x":2.5, "y":1},
|
||||
{"label":"L13", "x":3.5, "y":1},
|
||||
{"label":"L14", "x":4.5, "y":1},
|
||||
{"label":"L15", "x":5.5, "y":1},
|
||||
|
||||
{"label":"R10", "x":7.5, "y":1},
|
||||
{"label":"R11", "x":8.5, "y":1},
|
||||
{"label":"R12", "x":9.5, "y":1},
|
||||
{"label":"R13", "x":10.5, "y":1},
|
||||
{"label":"R14", "x":11.5, "y":1},
|
||||
{"label":"R15", "x":12.5, "y":1},
|
||||
{"label":"R16", "x":13.5, "y":1},
|
||||
{"label":"R17", "x":14.5, "y":1, "w":1.5},
|
||||
|
||||
{"label":"L20", "x":0, "y":2, "w":1.75},
|
||||
{"label":"L21", "x":1.75, "y":2},
|
||||
{"label":"L22", "x":2.75, "y":2},
|
||||
{"label":"L23", "x":3.75, "y":2},
|
||||
{"label":"L24", "x":4.75, "y":2},
|
||||
{"label":"L25", "x":5.75, "y":2},
|
||||
|
||||
{"label":"R21", "x":7.75, "y":2},
|
||||
{"label":"R22", "x":8.75, "y":2},
|
||||
{"label":"R23", "x":9.75, "y":2},
|
||||
{"label":"R24", "x":10.75, "y":2},
|
||||
{"label":"R25", "x":11.75, "y":2},
|
||||
{"label":"R26", "x":12.75, "y":2},
|
||||
{"label":"R27", "x":13.75, "y":2, "w":2.25},
|
||||
|
||||
{"label":"L30", "x":0, "y":3, "w":1.25},
|
||||
{"label":"L31", "x":1.25, "y":3},
|
||||
{"label":"L32", "x":2.25, "y":3},
|
||||
{"label":"L33", "x":3.25, "y":3},
|
||||
{"label":"L34", "x":4.25, "y":3},
|
||||
{"label":"L35", "x":5.25, "y":3},
|
||||
{"label":"L36", "x":6.25, "y":3},
|
||||
|
||||
{"label":"R31", "x":8.25, "y":3},
|
||||
{"label":"R32", "x":9.25, "y":3},
|
||||
{"label":"R33", "x":10.25, "y":3},
|
||||
{"label":"R34", "x":11.25, "y":3},
|
||||
{"label":"R35", "x":12.25, "y":3},
|
||||
{"label":"R36", "x":13.25, "y":3, "w":1.75},
|
||||
{"label":"R37", "x":15, "y":3},
|
||||
|
||||
{"label":"L41", "x":1.5, "y":4},
|
||||
{"label":"L42", "x":2.5, "y":4, "w":1.5},
|
||||
{"label":"L43", "x":4, "y":4, "w":2.75},
|
||||
{"label":"L44", "x":6.75, "y":4},
|
||||
|
||||
{"label":"R43", "x":8.75, "y":4},
|
||||
{"label":"R44", "x":9.75, "y":4, "w":2.25},
|
||||
{"label":"R45", "x":12, "y":4, "w":1.5},
|
||||
{"label":"R46", "x":13.5, "y":4}
|
||||
]
|
||||
},
|
||||
|
||||
"LAYOUT_wkl_default": {
|
||||
"key_count": 61,
|
||||
"layout": [
|
||||
{"label":"L00", "x":0, "y":0},
|
||||
{"label":"L01", "x":1, "y":0},
|
||||
{"label":"L02", "x":2, "y":0},
|
||||
{"label":"L03", "x":3, "y":0},
|
||||
{"label":"L04", "x":4, "y":0},
|
||||
{"label":"L05", "x":5, "y":0},
|
||||
{"label":"L06", "x":6, "y":0},
|
||||
|
||||
{"label":"R00", "x":8, "y":0},
|
||||
{"label":"R01", "x":9, "y":0},
|
||||
{"label":"R02", "x":10, "y":0},
|
||||
{"label":"R03", "x":11, "y":0},
|
||||
{"label":"R04", "x":12, "y":0},
|
||||
{"label":"R05", "x":13, "y":0},
|
||||
{"label":"R07", "x":14, "y":0, "w":2},
|
||||
|
||||
{"label":"L10", "x":0, "y":1, "w":1.5},
|
||||
{"label":"L11", "x":1.5, "y":1},
|
||||
{"label":"L12", "x":2.5, "y":1},
|
||||
{"label":"L13", "x":3.5, "y":1},
|
||||
{"label":"L14", "x":4.5, "y":1},
|
||||
{"label":"L15", "x":5.5, "y":1},
|
||||
|
||||
{"label":"R10", "x":7.5, "y":1},
|
||||
{"label":"R11", "x":8.5, "y":1},
|
||||
{"label":"R12", "x":9.5, "y":1},
|
||||
{"label":"R13", "x":10.5, "y":1},
|
||||
{"label":"R14", "x":11.5, "y":1},
|
||||
{"label":"R15", "x":12.5, "y":1},
|
||||
{"label":"R16", "x":13.5, "y":1},
|
||||
{"label":"R17", "x":14.5, "y":1, "w":1.5},
|
||||
|
||||
{"label":"L20", "x":0, "y":2, "w":1.75},
|
||||
{"label":"L21", "x":1.75, "y":2},
|
||||
{"label":"L22", "x":2.75, "y":2},
|
||||
{"label":"L23", "x":3.75, "y":2},
|
||||
{"label":"L24", "x":4.75, "y":2},
|
||||
{"label":"L25", "x":5.75, "y":2},
|
||||
|
||||
{"label":"R21", "x":7.75, "y":2},
|
||||
{"label":"R22", "x":8.75, "y":2},
|
||||
{"label":"R23", "x":9.75, "y":2},
|
||||
{"label":"R24", "x":10.75, "y":2},
|
||||
{"label":"R25", "x":11.75, "y":2},
|
||||
{"label":"R26", "x":12.75, "y":2},
|
||||
{"label":"R27", "x":13.75, "y":2, "w":2.25},
|
||||
|
||||
{"label":"L31", "x":0, "y":3, "w":2.25},
|
||||
{"label":"L32", "x":2.25, "y":3},
|
||||
{"label":"L33", "x":3.25, "y":3},
|
||||
{"label":"L34", "x":4.25, "y":3},
|
||||
{"label":"L35", "x":5.25, "y":3},
|
||||
{"label":"L36", "x":6.25, "y":3},
|
||||
|
||||
{"label":"R31", "x":8.25, "y":3},
|
||||
{"label":"R32", "x":9.25, "y":3},
|
||||
{"label":"R33", "x":10.25, "y":3},
|
||||
{"label":"R34", "x":11.25, "y":3},
|
||||
{"label":"R35", "x":12.25, "y":3},
|
||||
{"label":"R36", "x":13.25, "y":3, "w":2.75},
|
||||
|
||||
{"label":"L40", "x":0, "y":4, "w":1.5},
|
||||
{"label":"L42", "x":2.5, "y":4, "w":1.5},
|
||||
{"label":"L43", "x":4, "y":4, "w":2.75},
|
||||
{"label":"L44", "x":6.75, "y":4},
|
||||
|
||||
{"label":"R43", "x":8.75, "y":4},
|
||||
{"label":"R44", "x":9.75, "y":4, "w":2.25},
|
||||
{"label":"R45", "x":12, "y":4, "w":1.5},
|
||||
{"label":"R47", "x":14.5, "y":4, "w":1.5}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,9 +24,6 @@ extern keymap_config_t keymap_config;
|
|||
// entirely and just use numbers.
|
||||
#define _BASE 0
|
||||
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_BASE] = LAYOUT_ansi_default(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
|
||||
|
|
|
|||
|
|
@ -25,9 +25,6 @@ extern keymap_config_t keymap_config;
|
|||
#define _BASE 0
|
||||
#define _FN 1
|
||||
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
|
||||
#define FN MO(_FN)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef PROTO_H
|
||||
#define PROTO_H
|
||||
#pragma once
|
||||
|
||||
#include "qc60.h"
|
||||
|
||||
|
|
@ -26,10 +25,10 @@
|
|||
|
||||
/* Split Backspace
|
||||
* {R07, XXX, R05, R04, R03, R02, R01, R00}
|
||||
*
|
||||
*
|
||||
* Split Right Shift
|
||||
* {R37, R36, R35, R34, R33, R32, R31, XXX}
|
||||
*
|
||||
*
|
||||
* Split Left Shift
|
||||
* {L30, L31, L32, L33, L34, L35, L36, XXX}
|
||||
*
|
||||
|
|
@ -101,14 +100,14 @@
|
|||
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
|
||||
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, \
|
||||
L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R17, R27, \
|
||||
L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
|
||||
L30, L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
|
||||
L40, L41, L42, L43, L44, R43, R44, R42, R45, R46, R47 \
|
||||
) \
|
||||
{ \
|
||||
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
|
||||
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
|
||||
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
|
||||
{XXX, L31, L32, L33, L34, L35, L36, XXX}, \
|
||||
{L30, L31, L32, L33, L34, L35, L36, XXX}, \
|
||||
{L40, L41, L42, L43, L44, XXX, XXX, XXX}, \
|
||||
{R07, XXX, R05, R04, R03, R02, R01, R00}, \
|
||||
{R17, R16, R15, R14, R13, R12, R11, R10}, \
|
||||
|
|
@ -118,17 +117,17 @@
|
|||
}
|
||||
|
||||
#define LAYOUT_iso_alt( \
|
||||
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
|
||||
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, R17, \
|
||||
L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R27, \
|
||||
L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
|
||||
L40, L41, L42, L43, L44, R43, R44, R45, R46, R47 \
|
||||
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
|
||||
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, \
|
||||
L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R17, R27, \
|
||||
L30, L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
|
||||
L40, L41, L42, L43, L44, R43, R44, R45, R46, R47 \
|
||||
) \
|
||||
{ \
|
||||
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
|
||||
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
|
||||
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
|
||||
{XXX, L31, L32, L33, L34, L35, L36, XXX}, \
|
||||
{L30, L31, L32, L33, L34, L35, L36, XXX}, \
|
||||
{L40, L41, L42, L43, L44, XXX, XXX, XXX}, \
|
||||
{R07, XXX, R05, R04, R03, R02, R01, R00}, \
|
||||
{R17, R16, R15, R14, R13, R12, R11, R10}, \
|
||||
|
|
@ -196,6 +195,3 @@
|
|||
{XXX, R36, R35, R34, R33, R32, R31, XXX}, \
|
||||
{R47, XXX, R45, R44, R43, XXX, XXX, XXX}, \
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
108
keyboards/handwired/reddot/info.json
Normal file
108
keyboards/handwired/reddot/info.json
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"keyboard_name": "handwired/reddot",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 20.5,
|
||||
"height": 5,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"label":"k00 (Esc)", "x":0, "y":0},
|
||||
{"label":"k01 (F1)", "x":1, "y":0},
|
||||
{"label":"k02 (F2)", "x":2, "y":0},
|
||||
{"label":"k03 (F3)", "x":3, "y":0},
|
||||
{"label":"k04 (F4)", "x":4, "y":0},
|
||||
{"label":"k05 (F5)", "x":5, "y":0},
|
||||
{"label":"k06 (Tab)", "x":6, "y":0, "w":2},
|
||||
{"label":"k07 (Caps Lock)", "x":8, "y":0},
|
||||
{"label":"k08 (F6)", "x":9, "y":0},
|
||||
{"label":"k09 (F7)", "x":10, "y":0},
|
||||
{"label":"k0A (F8)", "x":11, "y":0},
|
||||
{"label":"k0B (F9)", "x":12, "y":0},
|
||||
{"label":"k0C (F10)", "x":13, "y":0},
|
||||
{"label":"k0D (F11)", "x":14, "y":0},
|
||||
{"label":"k0E (F12)", "x":15, "y":0},
|
||||
{"label":"k10 (Function)", "x":16.5, "y":0},
|
||||
{"label":"k11 (Keypad /)", "x":17.5, "y":0},
|
||||
{"label":"k12 (Keypad *)", "x":18.5, "y":0},
|
||||
{"label":"k13 (Keypad -)", "x":19.5, "y":0},
|
||||
|
||||
{"label":"k20 (Left Alt)", "x":0, "y":1},
|
||||
{"label":"k21 (1 / FR Ampersand)", "x":1, "y":1},
|
||||
{"label":"k22 (2 / FR É)", "x":2, "y":1},
|
||||
{"label":"k23 (3 / FR Quote)", "x":3, "y":1},
|
||||
{"label":"k24 (4 / FR Apostrophe)", "x":4, "y":1},
|
||||
{"label":"k25 (5 / FR Left Parenthesis)", "x":5, "y":1},
|
||||
{"label":"k26 (Backspace)", "x":6, "y":1, "w":2},
|
||||
{"label":"k27 (Delete)", "x":8, "y":1},
|
||||
{"label":"k28 (6 / FR Minus)", "x":9, "y":1},
|
||||
{"label":"k29 (7 / FR È)", "x":10, "y":1},
|
||||
{"label":"k2A (8 / FR Underscore)", "x":11, "y":1},
|
||||
{"label":"k2B (9 / FR Ç)", "x":12, "y":1},
|
||||
{"label":"k2C (0 / FR À)", "x":13, "y":1},
|
||||
{"label":"k2D (Minus / FR Right Parenthesis)", "x":14, "y":1},
|
||||
{"label":"k2E (Equals / FR Equals)", "x":15, "y":1},
|
||||
{"label":"k30 (Insert)", "x":16.5, "y":1},
|
||||
{"label":"k31 (Home)", "x":17.5, "y":1},
|
||||
{"label":"k32 (Page Up)", "x":18.5, "y":1},
|
||||
|
||||
{"label":"k40 (GUI)", "x":0, "y":2},
|
||||
{"label":"k41 (Q / FR A)", "x":1, "y":2},
|
||||
{"label":"k42 (W / FR Z)", "x":2, "y":2},
|
||||
{"label":"k43 (E)", "x":3, "y":2},
|
||||
{"label":"k44 (R)", "x":4, "y":2},
|
||||
{"label":"k45 (T)", "x":5, "y":2},
|
||||
{"label":"k46 (Shift)", "x":6, "y":2, "h":2},
|
||||
{"label":"k66 (Enter)", "x":7, "y":2, "h":2},
|
||||
{"label":"k47 (Enter)", "x":8, "y":2, "h":2},
|
||||
{"label":"k48 (Y)", "x":9, "y":2},
|
||||
{"label":"k49 (U)", "x":10, "y":2},
|
||||
{"label":"k4A (I)", "x":11, "y":2},
|
||||
{"label":"k4B (O)", "x":12, "y":2},
|
||||
{"label":"k4C (P)", "x":13, "y":2},
|
||||
{"label":"k4D (Left Bracket / FR Circumflex)", "x":14, "y":2},
|
||||
{"label":"k4E (Right Bracket / FR Dollar)", "x":15, "y":2},
|
||||
{"label":"k50 (Delete)", "x":16.5, "y":2},
|
||||
{"label":"k51 (End)", "x":17.5, "y":2},
|
||||
{"label":"k52 (Page Down)", "x":18.5, "y":2},
|
||||
{"label":"k53 (Keypad +)", "x":19.5, "y":1, "h":2},
|
||||
|
||||
{"label":"k60 (Ctrl)", "x":0, "y":3},
|
||||
{"label":"k61 (A / FR Q)", "x":1, "y":3},
|
||||
{"label":"k62 (S)", "x":2, "y":3},
|
||||
{"label":"k63 (D)", "x":3, "y":3},
|
||||
{"label":"k64 (F)", "x":4, "y":3},
|
||||
{"label":"k65 (G)", "x":5, "y":3},
|
||||
{"label":"k68 (H)", "x":9, "y":3},
|
||||
{"label":"k69 (J)", "x":10, "y":3},
|
||||
{"label":"k6A (K)", "x":11, "y":3},
|
||||
{"label":"k6B (L)", "x":12, "y":3},
|
||||
{"label":"k6C (Semicolon / FR M)", "x":13, "y":3},
|
||||
{"label":"k6D (Quote / FR Ù)", "x":14, "y":3},
|
||||
{"label":"k6E (ISO Hash / FR Asterisk)", "x":15, "y":3},
|
||||
{"label":"k70 (Keypad 1)", "x":16.5, "y":3},
|
||||
{"label":"k71 (Up)", "x":17.5, "y":3},
|
||||
{"label":"k72 (Keypad 3)", "x":18.5, "y":3},
|
||||
|
||||
{"label":"k80 (ISO Backslash / FR Less Than)", "x":0, "y":4},
|
||||
{"label":"k81 (Z / FR W)", "x":1, "y":4},
|
||||
{"label":"k82 (X)", "x":2, "y":4},
|
||||
{"label":"k83 (C)", "x":3, "y":4},
|
||||
{"label":"k84 (V)", "x":4, "y":4},
|
||||
{"label":"k85 (B)", "x":5, "y":4},
|
||||
{"label":"k86 (Space)", "x":6, "y":4, "w":2},
|
||||
{"label":"k88 (Space)", "x":8, "y":4, "w":2},
|
||||
{"label":"k89 (N)", "x":10, "y":4},
|
||||
{"label":"k8A (M / FR Comma)", "x":11, "y":4},
|
||||
{"label":"k8B (Comma / FR Semicolon)", "x":12, "y":4},
|
||||
{"label":"k8C (Period / Colon)", "x":13, "y":4},
|
||||
{"label":"k8D (Slash / FR Exclaim)", "x":14, "y":4},
|
||||
{"label":"k8E (Right Alt / FR AltGr)", "x":15, "y":4},
|
||||
{"label":"k90 (Left)", "x":16.5, "y":4},
|
||||
{"label":"k91 (Down)", "x":17.5, "y":4},
|
||||
{"label":"k92 (Right)", "x":18.5, "y":4},
|
||||
{"label":"k93 (Keypad Enter)", "x":19.5, "y":3, "h":2}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
41
keyboards/handwired/reddot/keymaps/default/keymap.c
Executable file → Normal file
41
keyboards/handwired/reddot/keymaps/default/keymap.c
Executable file → Normal file
|
|
@ -1,29 +1,22 @@
|
|||
#include "reddot.h"
|
||||
#include "../../../../../quantum/keymap_extras/keymap_french.h"
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "keymap_french.h"
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[0] = KEYMAP(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_FN0, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,\
|
||||
KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPACE, KC_DELETE, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_INSERT, KC_HOME, KC_PGUP,\
|
||||
KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_DELETE, KC_END, KC_PGDOWN, KC_KP_PLUS,\
|
||||
KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_KP_1, KC_UP, KC_KP_3,\
|
||||
FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
|
||||
[0] = LAYOUT(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, TG(1), KC_PSLS, KC_PAST, KC_PMNS, \
|
||||
KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPC, KC_DEL, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_INS, KC_HOME, KC_PGUP, \
|
||||
KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_DEL, KC_END, KC_PGDN, KC_PPLS, \
|
||||
KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_P1, KC_UP, KC_P3, \
|
||||
FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_SPC, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RGHT, KC_PENT \
|
||||
),
|
||||
|
||||
[1] = LAYOUT(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_PSLS, KC_PAST, KC_PMNS, \
|
||||
KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPC, KC_DEL, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_7, KC_8, KC_9, \
|
||||
KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_4, KC_5, KC_6, KC_PPLS, \
|
||||
KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_1, KC_2, KC_3, \
|
||||
FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_SPC, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RGHT, KC_PENT \
|
||||
),
|
||||
|
||||
[1] = KEYMAP(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_FN0, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,\
|
||||
KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPACE, KC_DELETE, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_7, KC_8, KC_9,\
|
||||
KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_4, KC_5, KC_6, KC_KP_PLUS,\
|
||||
KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_1, KC_2, KC_3,\
|
||||
FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
ACTION_LAYER_TOGGLE(1),
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,24 +1,14 @@
|
|||
## RedDot Specific Info ##
|
||||
# RedDot
|
||||
|
||||
An ortholinear compact fullsize keyboard configured for French AZERTY layout.
|
||||
|
||||
## Quantum MK Firmware
|
||||
- [Layout](http://www.keyboard-layout-editor.com/##@_plate:true%3B&@_sm=cherry&sb=cherry&st=MX1A-L1xx%3B&=Esc&=F1&=F2&=F3&=F4&=F5&_w:2%3B&=Tab&=Caps%20Lock&=F6&=F7&=F8&=F9&=F10&=F11&=F12&_x:0.5%3B&=Fn&=%2F%2F&=*&=-%3B&@=Alt&=1%0A%2F&&=2%0A%C3%A9%0A%0A~&=3%0A%22%0A%0A%23&=4%0A'%0A%0A%7B&=5%0A(%0A%0A%5B&_w:2%3B&=Back&=Del&=6%0A-%0A%0A%7C&=7%0A%C3%A8%0A%0A%60&=8%0A%2F_%0A%0A%5C&=9%0A%C3%A7%0A%0A%5E&=0%0A%C3%A0%0A%0A%2F@&=%C2%B0%0A)%0A%0A%5D&=+%0A%2F=%0A%0A%7D&_x:0.5%3B&=Insert&=Home&=Page%20Up&_h:2%3B&=+%3B&@=Win&=A&=Z&=E&=R&=T&_h:2%3B&=Shift&_h:2%3B&=Enter&_h:2%3B&=Enter&=Y&=U&=I&=O&=P&=%C2%A8%0A%5E&=%C2%A3%0A$&_x:0.5%3B&=Delete&=End&=Page%20Down%3B&@=Ctrl&=Q&=S&=D&=F&=G&_x:3%3B&=H&=J&=K&=L&=M&=%25%0A%C3%B9&=%C2%B5%0A*&_x:0.5%3B&=1%0AEnd&=Up&=3%0APgDn&_h:2%3B&=Enter%3B&@=%3E%0A%3C&=W&=X&=C&=V&=B&_w:2%3B&=Space&_w:2%3B&=Space&=N&=%3F%0A,&=.%0A%2F%3B&=%2F%2F%0A%2F:&=%C2%A7%0A!&=Alt%20Gr&_x:0.5%3B&=Left&=Down&=Right)
|
||||
|
||||
For the full Quantum feature list, see [the parent README.md](/readme.md).
|
||||
Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
|
||||
Hardware Supported: RedDot handwired
|
||||
|
||||
## Building
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
Download or clone the whole firmware and navigate to the keyboard/reddot folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
|
||||
make handwired/reddot:default
|
||||
|
||||
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
||||
|
||||
### Default
|
||||
To build with the default keymap, simply run `make`.
|
||||
|
||||
### Other Keymaps
|
||||
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
|
||||
|
||||
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
|
||||
```
|
||||
$ make KEYMAP=[default|jack|<name>]
|
||||
```
|
||||
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
||||
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).
|
||||
|
|
|
|||
|
|
@ -1,20 +1,17 @@
|
|||
#ifndef REDDOT_H
|
||||
#define REDDOT_H
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#define KEYMAP( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, \
|
||||
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53, \
|
||||
k60, k61, k62, k63, k64, k65, k66, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, \
|
||||
k80, k81, k82, k83, k84, k85, k86, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93\
|
||||
#define LAYOUT( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, \
|
||||
k40, k41, k42, k43, k44, k45, k46, k66, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53, \
|
||||
k60, k61, k62, k63, k64, k65, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, \
|
||||
k80, k81, k82, k83, k84, k85, k86, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93 \
|
||||
) { \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13 }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, KC_NO }, \
|
||||
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53 }, \
|
||||
{ k60, k61, k62, k63, k64, k65, k66, KC_NO, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, KC_NO }, \
|
||||
{ k80, k81, k82, k83, k84, k85, k86, KC_NO, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93 } \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13 }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, KC_NO }, \
|
||||
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53 }, \
|
||||
{ k60, k61, k62, k63, k64, k65, k66, KC_NO, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, KC_NO }, \
|
||||
{ k80, k81, k82, k83, k84, k85, k86, KC_NO, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93 } \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
95
keyboards/handwired/retro_refit/info.json
Normal file
95
keyboards/handwired/retro_refit/info.json
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
{
|
||||
"keyboard_name": "handwired/retro_refit",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 15.5,
|
||||
"height": 6.5,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"key_count": 81,
|
||||
"layout": [
|
||||
{"label":"Esc", "x":0, "y":0},
|
||||
{"label":"F1", "x":1, "y":0},
|
||||
{"label":"F2", "x":2, "y":0},
|
||||
{"label":"F3", "x":3, "y":0},
|
||||
{"label":"F4", "x":4, "y":0},
|
||||
{"label":"F5", "x":5, "y":0},
|
||||
{"label":"F6", "x":6, "y":0},
|
||||
{"label":"F7", "x":7, "y":0},
|
||||
{"label":"F8", "x":8, "y":0},
|
||||
{"label":"F9", "x":9, "y":0},
|
||||
{"label":"F10", "x":10, "y":0},
|
||||
{"label":"Num Lock", "x":11.5, "y":0},
|
||||
{"label":"Scroll Lock", "x":12.5, "y":0},
|
||||
{"label":"Print Screen", "x":13.5, "y":0},
|
||||
{"label":"Pause", "x":14.5, "y":0},
|
||||
{"label":"`", "x":0, "y":1.5},
|
||||
{"label":"1", "x":1, "y":1.5},
|
||||
{"label":"2", "x":2, "y":1.5},
|
||||
{"label":"3", "x":3, "y":1.5},
|
||||
{"label":"4", "x":4, "y":1.5},
|
||||
{"label":"5", "x":5, "y":1.5},
|
||||
{"label":"6", "x":6, "y":1.5},
|
||||
{"label":"7", "x":7, "y":1.5},
|
||||
{"label":"8", "x":8, "y":1.5},
|
||||
{"label":"9", "x":9, "y":1.5},
|
||||
{"label":"0", "x":10, "y":1.5},
|
||||
{"label":"-", "x":11, "y":1.5},
|
||||
{"label":"=", "x":12, "y":1.5},
|
||||
{"label":"Backspace", "x":13, "y":1.5, "w":1.5},
|
||||
{"label":"Home", "x":14.5, "y":1.5},
|
||||
{"label":"Tab", "x":0, "y":2.5, "w":1.5},
|
||||
{"label":"Q", "x":1.5, "y":2.5},
|
||||
{"label":"W", "x":2.5, "y":2.5},
|
||||
{"label":"E", "x":3.5, "y":2.5},
|
||||
{"label":"R", "x":4.5, "y":2.5},
|
||||
{"label":"T", "x":5.5, "y":2.5},
|
||||
{"label":"Y", "x":6.5, "y":2.5},
|
||||
{"label":"U", "x":7.5, "y":2.5},
|
||||
{"label":"I", "x":8.5, "y":2.5},
|
||||
{"label":"O", "x":9.5, "y":2.5},
|
||||
{"label":"P", "x":10.5, "y":2.5},
|
||||
{"label":"[", "x":11.5, "y":2.5},
|
||||
{"label":"]", "x":12.5, "y":2.5},
|
||||
{"label":"Page Up", "x":14.5, "y":2.5},
|
||||
{"label":"Ctrl", "x":0, "y":3.5, "w":1.75},
|
||||
{"label":"A", "x":1.75, "y":3.5},
|
||||
{"label":"S", "x":2.75, "y":3.5},
|
||||
{"label":"D", "x":3.75, "y":3.5},
|
||||
{"label":"F", "x":4.75, "y":3.5},
|
||||
{"label":"G", "x":5.75, "y":3.5},
|
||||
{"label":"H", "x":6.75, "y":3.5},
|
||||
{"label":"J", "x":7.75, "y":3.5},
|
||||
{"label":"K", "x":8.75, "y":3.5},
|
||||
{"label":"L", "x":9.75, "y":3.5},
|
||||
{"label":";", "x":10.75, "y":3.5},
|
||||
{"label":"'", "x":11.75, "y":3.5},
|
||||
{"label":"Enter", "x":12.75, "y":3.5, "w":1.75},
|
||||
{"label":"Page Down", "x":14.5, "y":3.5},
|
||||
{"label":"Shift", "x":0, "y":4.5, "w":2.25},
|
||||
{"label":"Z", "x":2.25, "y":4.5},
|
||||
{"label":"X", "x":3.25, "y":4.5},
|
||||
{"label":"C", "x":4.25, "y":4.5},
|
||||
{"label":"V", "x":5.25, "y":4.5},
|
||||
{"label":"B", "x":6.25, "y":4.5},
|
||||
{"label":"N", "x":7.25, "y":4.5},
|
||||
{"label":"M", "x":8.25, "y":4.5},
|
||||
{"label":",", "x":9.25, "y":4.5},
|
||||
{"label":".", "x":10.25, "y":4.5},
|
||||
{"label":"/", "x":11.25, "y":4.5},
|
||||
{"label":"Shift", "x":12.25, "y":4.5, "w":1.25},
|
||||
{"label":"Up", "x":13.5, "y":4.5},
|
||||
{"label":"End", "x":14.5, "y":4.5},
|
||||
{"label":"Alt", "x":0, "y":5.5, "w":1.25},
|
||||
{"label":"Caps Lock", "x":1.25, "y":5.5, "w":1.25},
|
||||
{"label":"\\", "x":2.5, "y":5.5},
|
||||
{"label":"Space", "x":3.5, "y":5.5, "w":7},
|
||||
{"label":"Insert", "x":10.5, "y":5.5},
|
||||
{"label":"Delete", "x":11.5, "y":5.5},
|
||||
{"label":"Left", "x":12.5, "y":5.5},
|
||||
{"label":"Down", "x":13.5, "y":5.5},
|
||||
{"label":"Right", "x":14.5, "y":5.5}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,31 +1,12 @@
|
|||
|
||||
#include "retro_refit.h"
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] =
|
||||
KEYMAP( ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, NLCK, SLCK, PSCR, PAUS, \
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, HOME, \
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, PGUP, \
|
||||
BSLS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, PGDN, \
|
||||
LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, END, \
|
||||
LCTL, LGUI, LALT, SPC, INS, DEL, LEFT, DOWN, RGHT),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
register_code(KC_RSFT);
|
||||
} else {
|
||||
unregister_code(KC_RSFT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
[0] = LAYOUT( \
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NLCK, KC_SLCK, KC_PSCR, KC_PAUS, \
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, \
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, \
|
||||
KC_BSLS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_INS, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||
),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,60 +1,42 @@
|
|||
retro_refit keyboard firmware
|
||||
======================
|
||||
|
||||
## Keyboard Info
|
||||
# retro_refit
|
||||
|
||||
The retro refit keyboard used a Teensy to replace the original controller on a 386 "laptop".
|
||||
|
||||
http://imgur.com/a/08Fyj
|
||||
[Image Gallery](https://imgur.com/a/08Fyj)
|
||||
|
||||
This keyboard uses a KEYMAP macro that is a great example of using a non-standard row-column matrix. The keyboard in question had 11 rows and 8 columns, but the rows were not all horizontal, and the columns were not all vertical. For example, row 2 contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and"Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B", "Left Alt", "Up Arrow", and "Down Arrow".
|
||||
This keyboard uses a LAYOUT macro that is a great example of using a non-standard row-column matrix. The keyboard in question had 11 rows and 8 columns, but the rows were not all horizontal, and the columns were not all vertical. For example, row 2 contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and"Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B", "Left Alt", "Up Arrow", and "Down Arrow".
|
||||
|
||||
The macro makes programming the keys easier and in a more straight-forward manner because it realigns the keys into a 6x15 sensible keyboard layout instead of the obtuse 11x8 matrix. Each Kxy corrisponds to a key in row x column y.
|
||||
The macro makes programming the keys easier and in a more straight-forward manner because it realigns the keys into a 6x15 sensible keyboard layout instead of the obtuse 11x8 matrix. Each Kxy corresponds to a key in row x column y.
|
||||
|
||||
```
|
||||
#define KEYMAP( \
|
||||
K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
|
||||
K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
|
||||
K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
|
||||
K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
|
||||
K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
|
||||
K10, K06, K25, K07, K86, K85, K95, K90, K93 \
|
||||
#define LAYOUT( \
|
||||
K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
|
||||
K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
|
||||
K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
|
||||
K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
|
||||
K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
|
||||
K10, K06, K25, K07, K86, K85, K95, K90, K93 \
|
||||
) { \
|
||||
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, }, \
|
||||
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, }, \
|
||||
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, }, \
|
||||
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, }, \
|
||||
{ KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, }, \
|
||||
{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, }, \
|
||||
{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, }, \
|
||||
{ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77, }, \
|
||||
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K85, KC_##K86, KC_##K87, }, \
|
||||
{ KC_##K90, KC_##K91, KC_NO, KC_##K93, KC_##K94, KC_##K95, KC_NO, KC_##K97, }, \
|
||||
{ KC_##KA0, KC_##KA1, KC_##KA2, KC_##KA3, KC_##KA4, KC_##KA5, KC_##KA6, KC_##KA7, } \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07 }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17 }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27 }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37 }, \
|
||||
{ K40, K41, K42, K43, K44, K45, K46, K47 }, \
|
||||
{ K50, K51, K52, K53, K54, K55, K56, K57 }, \
|
||||
{ K60, K61, K62, K63, K64, K65, K66, K67 }, \
|
||||
{ K70, K71, K72, K73, K74, K75, K76, K77 }, \
|
||||
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K85, K86, K87 }, \
|
||||
{ K90, K91, KC_NO, K93, K94, K95, KC_NO, K97 }, \
|
||||
{ KA0, KA1, KA2, KA3, KA4, KA5, KA6, KA7 } \
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## Quantum MK Firmware
|
||||
Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
|
||||
Hardware Supported: Leading Edge D3 386 keyboard, Teensy
|
||||
|
||||
For the full Quantum feature list, see [the parent readme.md](/readme.md).
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
## Building
|
||||
make handwired/retro_refit:default
|
||||
|
||||
Download or clone the whole firmware and navigate to the keyboards/retro_refit folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
|
||||
|
||||
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
||||
|
||||
### Default
|
||||
To build with the default keymap, simply run `make default`.
|
||||
|
||||
### Other Keymaps
|
||||
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
|
||||
|
||||
To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
|
||||
|
||||
```
|
||||
$ make [default|jack|<name>]
|
||||
```
|
||||
|
||||
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
||||
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).
|
||||
|
|
|
|||
|
|
@ -1,38 +1,35 @@
|
|||
#ifndef RETRO_REFIT_H
|
||||
#define RETRO_REFIT_H
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
// This macro is an example of using a non-standard row-column matrix. The
|
||||
// keyboard in question had 11 rows and 8 columns, but the rows were not all
|
||||
// horizontal, and the columns were not all vertical. For example, row 2
|
||||
// This macro is an example of using a non-standard row-column matrix. The
|
||||
// keyboard in question had 11 rows and 8 columns, but the rows were not all
|
||||
// horizontal, and the columns were not all vertical. For example, row 2
|
||||
// contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and
|
||||
// "Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B",
|
||||
// "Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B",
|
||||
// "Left Alt", "Up Arrow", and "Down Arrow".
|
||||
//
|
||||
// The macro makes programming the keys easier and in a more straight-forward
|
||||
// manner because it realigns the keys into a 6x15 sensible keyboard layout
|
||||
// manner because it realigns the keys into a 6x15 sensible keyboard layout
|
||||
// instead of the obtuse 11x8 matrix.
|
||||
|
||||
#define KEYMAP( \
|
||||
K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
|
||||
K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
|
||||
K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
|
||||
K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
|
||||
K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
|
||||
K10, K06, K25, K07, K86, K85, K95, K90, K93 \
|
||||
#define LAYOUT( \
|
||||
K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
|
||||
K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
|
||||
K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
|
||||
K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
|
||||
K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
|
||||
K10, K06, K25, K07, K86, K85, K95, K90, K93 \
|
||||
) { \
|
||||
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, }, \
|
||||
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, }, \
|
||||
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, }, \
|
||||
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, }, \
|
||||
{ KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, }, \
|
||||
{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, }, \
|
||||
{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, }, \
|
||||
{ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77, }, \
|
||||
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K85, KC_##K86, KC_##K87, }, \
|
||||
{ KC_##K90, KC_##K91, KC_NO, KC_##K93, KC_##K94, KC_##K95, KC_NO, KC_##K97, }, \
|
||||
{ KC_##KA0, KC_##KA1, KC_##KA2, KC_##KA3, KC_##KA4, KC_##KA5, KC_##KA6, KC_##KA7, } \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07 }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17 }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27 }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37 }, \
|
||||
{ K40, K41, K42, K43, K44, K45, K46, K47 }, \
|
||||
{ K50, K51, K52, K53, K54, K55, K56, K57 }, \
|
||||
{ K60, K61, K62, K63, K64, K65, K66, K67 }, \
|
||||
{ K70, K71, K72, K73, K74, K75, K76, K77 }, \
|
||||
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K85, K86, K87 }, \
|
||||
{ K90, K91, KC_NO, K93, K94, K95, KC_NO, K97 }, \
|
||||
{ KA0, KA1, KA2, KA3, KA4, KA5, KA6, KA7 } \
|
||||
}
|
||||
|
||||
#endif
|
||||
27
keyboards/handwired/rs60/README.md
Normal file
27
keyboards/handwired/rs60/README.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# rs60: Handwired Slim Preonic Clone
|
||||
|
||||
I wanted a preonic layout but with a very low profile. As Jack is still working on the Preonic PCB for Kailh Choc switches, I figured I could try to handwire one myself. It's my first custom keyboard, so I had a lot to learn.
|
||||
|
||||
First I designed the case in fusion 360. I wanted to build it using acrylic, constrained myself to standard acrylic sheet thickness.
|
||||
|
||||

|
||||
|
||||
You can download the model [here](https://a360.co/2OqiKLm).
|
||||
|
||||
To test my design I 3D printed the parts.
|
||||
|
||||

|
||||
|
||||
The result was encouraging, so I decided to build a prototype out of the printed plates using Kailh Choc brown switches. I tried to make the handwiring job as flat as possible so it can fit in my design.
|
||||
|
||||

|
||||

|
||||
|
||||
I designed switch plate and the middle plates so that they would be glued together. The middle plate has inserts to attach the bottom plate using m8 screws.
|
||||
|
||||

|
||||
|
||||
The end result is not too bad, but there is a few things I would do differently. Gluing 3D printed plates wasn't a good idea. The switch layer is so thin, that it bends when all the switches are slotted. As a result, the keyboard is not entirely flat. I will replace the bottom plate by a metal one so I get more weight and rigidity.
|
||||
|
||||
Even with acrylic, I think I will have the same issue. I might switch to screws + bolts that go all the way through.
|
||||
|
||||
47
keyboards/handwired/rs60/config.h
Normal file
47
keyboards/handwired/rs60/config.h
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
Copyright 2018 QMK Contributors
|
||||
|
||||
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
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x4260
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER rs
|
||||
#define PRODUCT rs60
|
||||
#define DESCRIPTION Preonic clone based on pro micro
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 12
|
||||
|
||||
/* key matrix pins */
|
||||
#define MATRIX_ROW_PINS { B5, B6, B4, B2, E6 }
|
||||
#define MATRIX_COL_PINS { C6, D4, D0, D1, D2, D3, F4, F5, F6, F7, B1, B3}
|
||||
#define UNUSED_PINS { }
|
||||
|
||||
#define QMK_ESC_OUTPUT C6
|
||||
#define QMK_ESC_INPUT B4
|
||||
#define QMK_LED B0
|
||||
// #define QMK_SPEAKER C6
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
false \
|
||||
)
|
||||
207
keyboards/handwired/rs60/keymaps/default/keymap.c
Normal file
207
keyboards/handwired/rs60/keymaps/default/keymap.c
Normal file
|
|
@ -0,0 +1,207 @@
|
|||
/* Copyright 2015-2017 Jack Humbert
|
||||
*
|
||||
* 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,
|
||||
_COLEMAK,
|
||||
_DVORAK,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_ADJUST
|
||||
};
|
||||
|
||||
enum keycodes {
|
||||
QWERTY = SAFE_RANGE,
|
||||
COLEMAK,
|
||||
DVORAK,
|
||||
LOWER,
|
||||
RAISE,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* Qwerty
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_QWERTY] = LAYOUT( \
|
||||
KC_GRV, 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_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, \
|
||||
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, 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_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
|
||||
_______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||
),
|
||||
|
||||
/* Colemak
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Esc | A | R | S | T | D | H | N | E | I | O | " |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_COLEMAK] = LAYOUT( \
|
||||
KC_GRV, 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_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL, \
|
||||
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
|
||||
_______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||
),
|
||||
|
||||
/* Dvorak
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Tab | " | , | . | P | Y | F | G | C | R | L | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Esc | A | O | E | U | I | D | H | T | N | S | / |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_DVORAK] = LAYOUT( \
|
||||
KC_GRV, 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_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, \
|
||||
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
|
||||
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT, \
|
||||
_______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||
),
|
||||
|
||||
/* Lower
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_LOWER] = LAYOUT( \
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
|
||||
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||
),
|
||||
|
||||
/* Raise
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_RAISE] = LAYOUT( \
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
|
||||
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||
),
|
||||
|
||||
/* Adjust (Lower + Raise)
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | Reset| | | | | | | | | | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_ADJUST] = LAYOUT( \
|
||||
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
|
||||
_______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL, \
|
||||
_______, _______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
)
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case QWERTY:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_QWERTY);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case COLEMAK:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_COLEMAK);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case DVORAK:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_DVORAK);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case LOWER:
|
||||
if (record->event.pressed) {
|
||||
layer_on(_LOWER);
|
||||
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||
} else {
|
||||
layer_off(_LOWER);
|
||||
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case RAISE:
|
||||
if (record->event.pressed) {
|
||||
layer_on(_RAISE);
|
||||
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||
} else {
|
||||
layer_off(_RAISE);
|
||||
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
1
keyboards/handwired/rs60/keymaps/default/readme.md
Normal file
1
keyboards/handwired/rs60/keymaps/default/readme.md
Normal file
|
|
@ -0,0 +1 @@
|
|||
# The default Preonic layout - largely based on the Planck's
|
||||
18
keyboards/handwired/rs60/rs60.c
Normal file
18
keyboards/handwired/rs60/rs60.c
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
Copyright 2018 QMK Community
|
||||
|
||||
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 "rs60.h"
|
||||
36
keyboards/handwired/rs60/rs60.h
Normal file
36
keyboards/handwired/rs60/rs60.h
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
Copyright 2018 QMK Community
|
||||
|
||||
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( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
|
||||
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
|
||||
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
|
||||
) \
|
||||
{ \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
|
||||
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
|
||||
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
|
||||
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \
|
||||
}
|
||||
|
||||
#define LAYOUT_ortho_5x12 LAYOUT
|
||||
61
keyboards/handwired/rs60/rules.mk
Normal file
61
keyboards/handwired/rs60/rules.mk
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Bootloader
|
||||
BOOTLOADER = qmk-dfu
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
LAYOUTS = ortho_5x12
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
#OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = no # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = no # Custom backlighting code is used, so this should not be enabled
|
||||
AUDIO_ENABLE = no # This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below
|
||||
RGBLIGHT_ENABLE = no # This can be enabled if a ws2812 strip is connected to the expansion port.
|
||||
|
||||
|
|
@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
|
|||
|
||||
make handwired/terminus_mini:default
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
|
||||
|
|
@ -2,14 +2,14 @@
|
|||
"keyboard_name": "Tradestation",
|
||||
"url": "",
|
||||
"maintainer": "Flehrad",
|
||||
"bootloader": "",
|
||||
"width": 4.3,
|
||||
"height": 4.5,
|
||||
"width": 4.375,
|
||||
"height": 4.375,
|
||||
"layouts": {
|
||||
"LAYOUT_tradestation": {
|
||||
"layout": [{"x":0, "y":0}, {"x":1.1, "y":0}, {"x":2.2, "y":0}, {"x":3.3, "y":0}, {"x":0, "y":1.1}, {"x":1.1, "y":1.1}, {"x":2.2, "y":1.1}, {"x":3.3, "y":1.1}, {"x":0, "y":2.25, "w":2}, {"x":2.25, "y":2.25, "w":2}, {"x":0, "y":3.5, "w":2}, {"x":2.25, "y":3.5, "w":2}]
|
||||
"layout": [{"x":0, "y":0},{"x":1.125, "y":0},{"x":2.25, "y":0},{"x":3.375, "y":0},{"x":0, "y":1.1},{"x":1.125, "y":1.1},{"x":2.25, "y":1.1},{"x":3.375, "y":1.1},{"x":0, "y":2.25, "w":2},{"x":2.25, "y":2.25, "w":2},{"x":0, "y":3.5, "w":2},{"x":2.25, "y":3.5, "w":2}]
|
||||
},
|
||||
"LAYOUT_ortho_4x4": {
|
||||
"layout": [{"x":0, "y":0}, {"x":1.1, "y":0}, {"x":2.2, "y":0}, {"x":3.3, "y":0}, {"x":0, "y":1.1}, {"x":1.1, "y":1.1}, {"x":2.2, "y":1.1}, {"x":3.3, "y":1.1}, {"x":0, "y":2.25}, {"x":1, "y":2.25}, {"x":2.25, "y":2.25}, {"x":3.25, "y":2.25}, {"x":0, "y":3.5}, {"x":1, "y":3.5}, {"x":2.25, "y":3.5}, {"x":3.25, "y":3.5}]
|
||||
"LAYOUT_ortho_4x4": {
|
||||
"layout": [{"x":0, "y":0},{"x":1.125, "y":0},{"x":2.25, "y":0},{"x":3.375, "y":0},{"x":0, "y":1.1},{"x":1.125, "y":1.1},{"x":2.25, "y":1.1},{"x":3.375, "y":1.1},{"x":0, "y":2.25},{"x":1.125, "y":2.25},{"x":2.25, "y":2.25},{"x":3.375, "y":2.25},{"x":0, "y":3.5},{"x":1.125, "y":3.5},{"x":2.25, "y":3.5},{"x":3.375, "y":3.5}]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,25 +1,27 @@
|
|||
# Tradestation
|
||||
QMK for Tradestation Macropad
|
||||
|
||||
This macropad was layout designed by Didier Luximon
|
||||
[Image Gallery](https://imgur.com/a/yxQJXMT)
|
||||
|
||||
A 4x4 ortholinear macropad, with options for 2U keys on the bottom half. Can be built as single PCB with custom case, or as two-PCB style with standoffs. Requires a Pro Micro.
|
||||
|
||||
This PCB supports an overall 4x4 matrix with unique spacing.
|
||||
|
||||
* Top two rows are 1U keys with 1/8U spacing
|
||||
* Bottom two rows are available with 4x2 1U as clusters of 2x1U or as 2x2 2U, spaced with 1/4U
|
||||
|
||||
For QMK Configurator, the info.json is utilised.
|
||||
- For 2U keys , the first 1u row/column key assignment is the same as the 2u position.
|
||||
If you like this simple PCB and want to make a donation, you can do so at [paypal.me/theboardpodcast](https://paypal.me/theboardpodcast).
|
||||
|
||||
Build requires a pro micro.
|
||||
- [The Board Podcast on YouTube](https://www.youtube.com/channel/UCg98oJZNffR9nDLJNkorjqw)
|
||||
- [The Board Podcast on Libsyn](http://theboard.libsyn.com/)
|
||||
- [The Board Podcast on Patreon](https://www.patreon.com/theboardpodcast)
|
||||
|
||||
Can be built as single PCB with custom case, or as two PCB style with standoffs.
|
||||
Designed by Didier Luximon.
|
||||
|
||||
If you like this simple PCB and want to make a donation, you can at https://paypal.me/theboardpodcast
|
||||
Keyboard Maintainer: [flehrad](https://github.com/flehrad)
|
||||
Hardware Supported: Tradestation PCB, Pro Micro
|
||||
|
||||
Check out our:
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
YouTube (https://www.youtube.com/channel/UCg98oJZNffR9nDLJNkorjqw)
|
||||
make tradestation:default
|
||||
|
||||
Podcast (www.libsyn.com/theboardpodcast)
|
||||
|
||||
Patreon (www.patreon.com/theboardpodcast)
|
||||
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).
|
||||
|
|
|
|||
|
|
@ -62,4 +62,5 @@ NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https:/
|
|||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
AUDIO_ENABLE = no
|
||||
RGBLIGHT_ENABLE = no
|
||||
LAYOUTS = ortho_4x4
|
||||
|
||||
LAYOUTS = ortho_4x4
|
||||
|
|
|
|||
|
|
@ -3,25 +3,25 @@
|
|||
#include "quantum.h"
|
||||
|
||||
#define LAYOUT_ortho_4x4( \
|
||||
K00, K01, K02, K03, \
|
||||
K10, K11, K12, K13, \
|
||||
K20, K21, K22, K23, \
|
||||
K30, K31, K32, K33 \
|
||||
K00, K01, K02, K03, \
|
||||
K10, K11, K12, K13, \
|
||||
K20, K21, K22, K23, \
|
||||
K30, K31, K32, K33 \
|
||||
) { \
|
||||
{ K00, K01, K02, K03 }, \
|
||||
{ K10, K11, K12, K13 }, \
|
||||
{ K20, K21, K22, K23 }, \
|
||||
{ K30, K31, K32, K33 } \
|
||||
{ K00, K01, K02, K03 }, \
|
||||
{ K10, K11, K12, K13 }, \
|
||||
{ K20, K21, K22, K23 }, \
|
||||
{ K30, K31, K32, K33 } \
|
||||
}
|
||||
|
||||
#define LAYOUT_tradestation( \
|
||||
K00, K01, K02, K03, \
|
||||
K10, K11, K12, K13, \
|
||||
K20, K22, \
|
||||
K30, K32 \
|
||||
K00, K01, K02, K03, \
|
||||
K10, K11, K12, K13, \
|
||||
K20, K22, \
|
||||
K30, K32 \
|
||||
) { \
|
||||
{ K00, K01, K02, K03 }, \
|
||||
{ K10, K11, K12, K13 }, \
|
||||
{ K20, KC_NO, K22, KC_NO }, \
|
||||
{ K30, KC_NO, K32, KC_NO } \
|
||||
{ K00, K01, K02, K03 }, \
|
||||
{ K10, K11, K12, K13 }, \
|
||||
{ K20, KC_NO, K22, KC_NO }, \
|
||||
{ K30, KC_NO, K32, KC_NO } \
|
||||
}
|
||||
|
|
|
|||
|
|
@ -157,11 +157,8 @@ Right hand nav keys work pretty well chorded with the Right hand Hi Key
|
|||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[_QW] = ACTION_LAYER_ON(_QW,ON_RELEASE), // return to QWERTY layer
|
||||
[_LW] = ACTION_LAYER_TAP_TOGGLE(_LW), // Turn on LW when holding, or tap 3 times to switch
|
||||
[_HI] = ACTION_LAYER_TAP_TOGGLE(_HI), // Turn on LW when holding, or tap 3 times to switch
|
||||
[_NAV] = ACTION_LAYER_TOGGLE(_NAV),
|
||||
[_FKEYS] = ACTION_LAYER_TOGGLE(_FKEYS),
|
||||
[_LWOUT] = ACTION_LAYER_OFF(_LW,ON_RELEASE),
|
||||
[_HIOUT] = ACTION_LAYER_OFF(_HI,ON_RELEASE),
|
||||
|
||||
// Functions
|
||||
[RGBLED_TOGGLE] = ACTION_FUNCTION(RGBLED_TOGGLE),
|
||||
|
|
|
|||
|
|
@ -59,10 +59,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
|
||||
};
|
||||
|
||||
void numlock_led_on(void) {
|
||||
PORTF |= (1<<7);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
|||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -8,6 +8,3 @@ MOUSEKEY_ENABLE = no
|
|||
|
||||
EXTRAFLAGS = -flto
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
|
|
|||
63
keyboards/handwired/xealous/debounce.c
Normal file
63
keyboards/handwired/xealous/debounce.c
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
#include <string.h>
|
||||
#include "config.h"
|
||||
#include "matrix.h"
|
||||
#include "timer.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifndef DEBOUNCING_DELAY
|
||||
# define DEBOUNCING_DELAY 5
|
||||
#endif
|
||||
|
||||
//Debouncing counters
|
||||
typedef uint8_t debounce_counter_t;
|
||||
#define DEBOUNCE_COUNTER_MODULO 250
|
||||
#define DEBOUNCE_COUNTER_INACTIVE 251
|
||||
|
||||
static debounce_counter_t *debounce_counters;
|
||||
|
||||
void debounce_init(uint8_t num_rows)
|
||||
{
|
||||
debounce_counters = malloc(num_rows*MATRIX_COLS);
|
||||
memset(debounce_counters, DEBOUNCE_COUNTER_INACTIVE, num_rows*MATRIX_COLS);
|
||||
}
|
||||
|
||||
void update_debounce_counters(uint8_t num_rows, uint8_t current_time)
|
||||
{
|
||||
for (uint8_t row = 0; row < num_rows; row++)
|
||||
{
|
||||
for (uint8_t col = 0; col < MATRIX_COLS; col++)
|
||||
{
|
||||
if (debounce_counters[row*MATRIX_COLS + col] != DEBOUNCE_COUNTER_INACTIVE)
|
||||
{
|
||||
if (TIMER_DIFF(current_time, debounce_counters[row*MATRIX_COLS + col], DEBOUNCE_COUNTER_MODULO) >= DEBOUNCING_DELAY) {
|
||||
debounce_counters[row*MATRIX_COLS + col] = DEBOUNCE_COUNTER_INACTIVE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time)
|
||||
{
|
||||
for (uint8_t row = 0; row < num_rows; row++)
|
||||
{
|
||||
matrix_row_t delta = raw[row] ^ cooked[row];
|
||||
|
||||
for (uint8_t col = 0; col < MATRIX_COLS; col++)
|
||||
{
|
||||
if (debounce_counters[row*MATRIX_COLS + col] == DEBOUNCE_COUNTER_INACTIVE && (delta & (1<<col)))
|
||||
{
|
||||
debounce_counters[row*MATRIX_COLS + col] = current_time;
|
||||
cooked[row] ^= (1 << col);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed)
|
||||
{
|
||||
uint8_t current_time = timer_read() % DEBOUNCE_COUNTER_MODULO;
|
||||
|
||||
update_debounce_counters(num_rows, current_time);
|
||||
transfer_matrix_values(raw, cooked, num_rows, current_time);
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
SRC += matrix_scanrate.c matrix.c
|
||||
#SRC += matrix_scanrate.c matrix.c
|
||||
SRC += debounce.c
|
||||
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
|
@ -37,7 +38,7 @@ F_USB = $(F_CPU)
|
|||
|
||||
# Bootloader
|
||||
# This definition is optional, and if your keyboard supports multiple bootloaders of
|
||||
# different sizes, comment this out, and the correct address will be loaded
|
||||
# different sizes, comment this out, and the correct address will be loaded
|
||||
# automatically (+60). See bootloader.mk for all options.
|
||||
BOOTLOADER = caterina
|
||||
|
||||
|
|
@ -59,14 +60,15 @@ MIDI_ENABLE = no # MIDI controls
|
|||
AUDIO_ENABLE = yes # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
SPLIT_KEYBOARD = yes # Use shared split_common code
|
||||
SUBPROJECT_rev1 = yes
|
||||
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
CUSTOM_MATRIX = yes
|
||||
CUSTOM_MATRIX = no
|
||||
CUSTOM_DEBOUNCE = yes
|
||||
|
||||
LAYOUTS = split60
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue