@ -0,0 +1,28 @@ |
||||
FROM debian:jessie |
||||
MAINTAINER Erik Dasque <erik@frenchguys.com> |
||||
|
||||
RUN apt-get update |
||||
RUN apt-get install --no-install-recommends -y build-essential \ |
||||
gcc \ |
||||
unzip \ |
||||
wget \ |
||||
zip \ |
||||
gcc-avr \ |
||||
binutils-avr \ |
||||
avr-libc \ |
||||
dfu-programmer \ |
||||
dfu-util \ |
||||
gcc-arm-none-eabi \ |
||||
binutils-arm-none-eabi \ |
||||
libnewlib-arm-none-eabi \ |
||||
git |
||||
|
||||
RUN apt-get clean |
||||
RUN rm -rf /var/lib/apt/lists/* |
||||
|
||||
ENV keyboard=ergodox_ez |
||||
ENV keymap=default |
||||
|
||||
VOLUME /qmk |
||||
WORKDIR /qmk |
||||
CMD make clean ; make keyboard=${keyboard} keymap=${keymap} |
@ -0,0 +1,4 @@ |
||||
Alps64 keyboard firmware |
||||
====================== |
||||
|
||||
TODO: to be updated. |
@ -0,0 +1,4 @@ |
||||
Clueboard keyboard firmware |
||||
====================== |
||||
|
||||
TODO: to be updated. |
@ -0,0 +1,4 @@ |
||||
Cluepad number pad firmware |
||||
====================== |
||||
|
||||
TODO: to be updated. |
After Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 103 KiB |
After Width: | Height: | Size: 135 KiB |
@ -0,0 +1,533 @@ |
||||
[ |
||||
{ |
||||
"backcolor": "#ffffff", |
||||
"name": "ErgoDox - algernon's layout: Heatmap", |
||||
"author": "Gergely Nagy <kbd@gergo.csillger.hu>", |
||||
"notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.", |
||||
"switchMount": "cherry", |
||||
"switchBrand": "gateron", |
||||
"switchType": "KS-3-Tea", |
||||
"pcb": true, |
||||
"css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }" |
||||
}, |
||||
[ |
||||
{ |
||||
"x": 3.5, |
||||
"c": "#a7d0db", |
||||
"fa": [ |
||||
0, |
||||
0, |
||||
2 |
||||
] |
||||
}, |
||||
"#\n3\nF3", |
||||
{ |
||||
"x": 10.5, |
||||
"c": "#a7d0db", |
||||
"t": "#000000", |
||||
"a": 4, |
||||
"fa": [ |
||||
0, |
||||
0, |
||||
2 |
||||
] |
||||
}, |
||||
"*\n8\nF8" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5, |
||||
"c": "#bfbad1", |
||||
"t": "#0d0d0b" |
||||
}, |
||||
"@\n2\nF2", |
||||
{ |
||||
"x": 1, |
||||
"c": "#7adabd", |
||||
"t": "#000000" |
||||
}, |
||||
"$\n4\nF4", |
||||
{ |
||||
"x": 8.5 |
||||
}, |
||||
"&\n7\nF7", |
||||
{ |
||||
"x": 1, |
||||
"c": "#bfbad1", |
||||
"t": "#0d0d0b" |
||||
}, |
||||
"(\n9\nF9" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5, |
||||
"c": "#7adabd", |
||||
"t": "#000000" |
||||
}, |
||||
"%\n5\nF5", |
||||
{ |
||||
"c": "#f9cd31", |
||||
"a": 7, |
||||
"f": 2 |
||||
}, |
||||
"STENO", |
||||
{ |
||||
"x": 4.5, |
||||
"f": 6 |
||||
}, |
||||
"<i class='mss mss-Unicode-Option-3'></i>", |
||||
{ |
||||
"c": "#7adabd", |
||||
"a": 4, |
||||
"f": 3, |
||||
"fa": [ |
||||
0, |
||||
0, |
||||
2 |
||||
] |
||||
}, |
||||
"^\n6\nF6" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"c": "#ffb2d2", |
||||
"f": 3, |
||||
"w": 1.5 |
||||
}, |
||||
"\n\n~\n`", |
||||
{ |
||||
"t": "#0d0d0b" |
||||
}, |
||||
"!\n1\nF1", |
||||
{ |
||||
"x": 14.5 |
||||
}, |
||||
")\n0\nF10", |
||||
{ |
||||
"a": 7, |
||||
"w": 1.5 |
||||
}, |
||||
"F11" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.375, |
||||
"x": 3.5, |
||||
"c": "#a7d0db", |
||||
"t": "#000000", |
||||
"a": 4 |
||||
}, |
||||
">\n.", |
||||
{ |
||||
"x": 10.5, |
||||
"a": 6 |
||||
}, |
||||
"C" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5, |
||||
"c": "#bfbad1", |
||||
"t": "#0d0d0b", |
||||
"a": 4 |
||||
}, |
||||
"<\n,", |
||||
{ |
||||
"x": 1, |
||||
"c": "#7adabd", |
||||
"t": "#000000", |
||||
"a": 6 |
||||
}, |
||||
"P", |
||||
{ |
||||
"x": 8.5 |
||||
}, |
||||
"G", |
||||
{ |
||||
"x": 1, |
||||
"c": "#bfbad1", |
||||
"t": "#0d0d0b" |
||||
}, |
||||
"R" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5, |
||||
"c": "#7adabd", |
||||
"t": "#000000" |
||||
}, |
||||
"Y", |
||||
{ |
||||
"c": "#93c9b7", |
||||
"a": 4, |
||||
"h": 1.5 |
||||
}, |
||||
"{\n[", |
||||
{ |
||||
"x": 4.5, |
||||
"h": 1.5 |
||||
}, |
||||
"}\n]", |
||||
{ |
||||
"c": "#7adabd", |
||||
"a": 6 |
||||
}, |
||||
"F" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"c": "#ffb07b", |
||||
"t": "#0d0d0b", |
||||
"f": 6, |
||||
"w": 1.5 |
||||
}, |
||||
"<i class='fa fa-fast-backward'></i>\n\n<i class='fa fa-fast-forward'></i>", |
||||
{ |
||||
"c": "#ffb2d2", |
||||
"a": 4, |
||||
"f": 3 |
||||
}, |
||||
"\"\n'", |
||||
{ |
||||
"x": 14.5, |
||||
"a": 6 |
||||
}, |
||||
"L", |
||||
{ |
||||
"a": 4, |
||||
"w": 1.5 |
||||
}, |
||||
"|\n\\" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.375, |
||||
"x": 3.5, |
||||
"c": "#a7d0db", |
||||
"t": "#000000", |
||||
"a": 6 |
||||
}, |
||||
"E", |
||||
{ |
||||
"x": 10.5 |
||||
}, |
||||
"T" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5, |
||||
"c": "#bfbad1", |
||||
"t": "#0d0d0b" |
||||
}, |
||||
"O", |
||||
{ |
||||
"x": 1, |
||||
"c": "#7adabd", |
||||
"t": "#000000", |
||||
"n": true |
||||
}, |
||||
"U", |
||||
{ |
||||
"x": 8.5, |
||||
"n": true |
||||
}, |
||||
"H", |
||||
{ |
||||
"x": 1, |
||||
"c": "#bfbad1", |
||||
"t": "#0d0d0b" |
||||
}, |
||||
"N" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5, |
||||
"c": "#7adabd", |
||||
"t": "#000000" |
||||
}, |
||||
"I", |
||||
{ |
||||
"x": 6.5 |
||||
}, |
||||
"D" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"c": "#ffb2d2", |
||||
"t": "#0d0d0b", |
||||
"fa": [ |
||||
6 |
||||
], |
||||
"w": 1.5 |
||||
}, |
||||
"<i class='fa fa-arrows'></i>\n\nTab", |
||||
{ |
||||
"f": 3 |
||||
}, |
||||
"A", |
||||
{ |
||||
"x": 14.5, |
||||
"f": 3 |
||||
}, |
||||
"S", |
||||
{ |
||||
"a": 4, |
||||
"fa": [ |
||||
0, |
||||
0, |
||||
0, |
||||
0, |
||||
0, |
||||
0, |
||||
0, |
||||
6 |
||||
], |
||||
"w": 1.5 |
||||
}, |
||||
"+\n=" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.625, |
||||
"x": 6.5, |
||||
"c": "#93c9b7", |
||||
"t": "#000000", |
||||
"a": 7, |
||||
"h": 1.5 |
||||
}, |
||||
"(", |
||||
{ |
||||
"x": 4.5, |
||||
"h": 1.5 |
||||
}, |
||||
")" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.75, |
||||
"x": 3.5, |
||||
"c": "#a7d0db", |
||||
"a": 6 |
||||
}, |
||||
"J", |
||||
{ |
||||
"x": 10.5 |
||||
}, |
||||
"W" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5, |
||||
"c": "#bfbad1", |
||||
"t": "#0d0d0b" |
||||
}, |
||||
"Q", |
||||
{ |
||||
"x": 1, |
||||
"c": "#7adabd", |
||||
"t": "#000000" |
||||
}, |
||||
"K", |
||||
{ |
||||
"x": 8.5 |
||||
}, |
||||
"M", |
||||
{ |
||||
"x": 1, |
||||
"c": "#bfbad1", |
||||
"t": "#0d0d0b" |
||||
}, |
||||
"V" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5, |
||||
"c": "#7adabd", |
||||
"t": "#000000" |
||||
}, |
||||
"X", |
||||
{ |
||||
"x": 6.5 |
||||
}, |
||||
"B" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"c": "#ffb07b", |
||||
"f": 9, |
||||
"w": 1.5 |
||||
}, |
||||
"\n\n<i class='kb kb-Multimedia-Play-Pause'></i>", |
||||
{ |
||||
"c": "#ffb2d2", |
||||
"t": "#0d0d0b", |
||||
"a": 4, |
||||
"f": 3 |
||||
}, |
||||
"?\n/", |
||||
{ |
||||
"x": 14.5, |
||||
"a": 6 |
||||
}, |
||||
"Z", |
||||
{ |
||||
"c": "#ffb07b", |
||||
"t": "#000000", |
||||
"f": 9, |
||||
"w": 1.5 |
||||
}, |
||||
"<i class='kb kb-Multimedia-Stop'></i>" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.375, |
||||
"x": 3.5, |
||||
"c": "#d9dae0", |
||||
"g": true, |
||||
"a": 7, |
||||
"f": 3 |
||||
}, |
||||
"", |
||||
{ |
||||
"x": 10.5 |
||||
}, |
||||
"" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5 |
||||
}, |
||||
"", |
||||
{ |
||||
"x": 1, |
||||
"c": "#d4872a", |
||||
"g": false, |
||||
"a": 5 |
||||
}, |
||||
";\n:", |
||||
{ |
||||
"x": 8.5 |
||||
}, |
||||
"_\n-", |
||||
{ |
||||
"x": 1, |
||||
"c": "#d9dae0", |
||||
"g": true, |
||||
"a": 7 |
||||
}, |
||||
"" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.75, |
||||
"x": 0.5 |
||||
}, |
||||
"", |
||||
{}, |
||||
"", |
||||
{ |
||||
"x": 14.5 |
||||
}, |
||||
"", |
||||
{}, |
||||
"" |
||||
], |
||||
[ |
||||
{ |
||||
"r": 30, |
||||
"rx": 6.5, |
||||
"ry": 4.25, |
||||
"y": -1, |
||||
"x": 1, |
||||
"c": "#f9cd31", |
||||
"g": false |
||||
}, |
||||
"Alt", |
||||
{ |
||||
"a": 4, |
||||
"fa": [ |
||||
0, |
||||
0, |
||||
0, |
||||
9 |
||||
] |
||||
}, |
||||
"\n\n\n<i class='kb kb-logo-linux-debian fa-large'></i>" |
||||
], |
||||
[ |
||||
{ |
||||
"c": "#d4872a", |
||||
"a": 7, |
||||
"f": 9, |
||||
"h": 2 |
||||
}, |
||||
"<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>", |
||||
{ |
||||
"h": 2 |
||||
}, |
||||
"<i class='fa fa-angle-double-up'></i>", |
||||
{ |
||||
"c": "#f9cd31", |
||||
"f": 3 |
||||
}, |
||||
"Ctrl" |
||||
], |
||||
[ |
||||
{ |
||||
"x": 2, |
||||
"c": "#e26757" |
||||
}, |
||||
"ESC" |
||||
], |
||||
[ |
||||
{ |
||||
"r": -30, |
||||
"rx": 13, |
||||
"y": -1, |
||||
"x": -3, |
||||
"c": "#f9cd31", |
||||
"f": 2 |
||||
}, |
||||
"MEDIA", |
||||
{}, |
||||
"1HAND" |
||||
], |
||||
[ |
||||
{ |
||||
"x": -3 |
||||
}, |
||||
"LEAD", |
||||
{ |
||||
"c": "#d4872a", |
||||
"f": 9, |
||||
"h": 2 |
||||
}, |
||||
"<i class='kb kb-Return-2'></i>", |
||||
{ |
||||
"f": 3, |
||||
"h": 2 |
||||
}, |
||||
"SPC" |
||||
], |
||||
[ |
||||
{ |
||||
"x": -3, |
||||
"c": "#f9cd31", |
||||
"f": 2 |
||||
}, |
||||
"HUN" |
||||
] |
||||
] |
@ -0,0 +1,145 @@ |
||||
#! /usr/bin/env python |
||||
import json |
||||
import os |
||||
import sys |
||||
import re |
||||
|
||||
from math import floor |
||||
|
||||
cr_coord_map = [ |
||||
[ |
||||
# Row 0 |
||||
[ 4, 0], [ 4, 2], [ 2, 0], [ 1, 0], [ 2, 2], [ 3, 0], [ 3, 2], |
||||
[ 3, 4], [ 3, 6], [ 2, 4], [ 1, 2], [ 2, 6], [ 4, 4], [ 4, 6], |
||||
], |
||||
[ |
||||
# Row 1 |
||||
[ 8, 0], [ 8, 2], [ 6, 0], [ 5, 0], [ 6, 2], [ 7, 0], [ 7, 2], |
||||
[ 7, 4], [ 7, 6], [ 6, 4], [ 5, 2], [ 6, 6], [ 8, 4], [ 8, 6], |
||||
], |
||||
[ |
||||
# Row 2 |
||||
[12, 0], [12, 2], [10, 0], [ 9, 0], [10, 2], [11, 0], [ ], |
||||
[ ], [11, 2], [10, 4], [ 9, 2], [10, 6], [12, 4], [12, 6], |
||||
], |
||||
[ |
||||
# Row 3 |
||||
[17, 0], [17, 2], [15, 0], [14, 0], [15, 2], [16, 0], [13, 0], |
||||
[13, 2], [16, 2], [15, 4], [14, 2], [15, 6], [17, 4], [17, 6], |
||||
], |
||||
[ |
||||
# Row 4 |
||||
[20, 0], [20, 2], [19, 0], [18, 0], [19, 2], [], [], [], [], |
||||
[19, 4], [18, 2], [19, 6], [20, 4], [20, 6], |
||||
], |
||||
[ |
||||
# Row 5 |
||||
[ ], [23, 0], [22, 2], [22, 0], [22, 4], [21, 0], [21, 2], |
||||
[24, 0], [24, 2], [25, 0], [25, 4], [25, 2], [26, 0], [ ], |
||||
], |
||||
] |
||||
|
||||
def set_attr_at(j, b, n, attr, fn, val): |
||||
blk = j[b][n] |
||||
if attr in blk: |
||||
blk[attr] = fn(blk[attr], val) |
||||
else: |
||||
blk[attr] = fn(None, val) |
||||
|
||||
def coord(col, row): |
||||
return cr_coord_map[row][col] |
||||
|
||||
def set_attr(orig, new): |
||||
return new |
||||
|
||||
def set_bg(j, (b, n), color): |
||||
set_attr_at(j, b, n, "c", set_attr, color) |
||||
#set_attr_at(j, b, n, "g", set_attr, False) |
||||
|
||||
def _set_tap_info(o, count, cap): |
||||
ns = 4 - o.count ("\n") |
||||
return o + "\n" * ns + "%.02f%%" % (float(count) / float(cap) * 100) |
||||
|
||||
def set_tap_info(j, (b, n), count, cap): |
||||
j[b][n + 1] = _set_tap_info (j[b][n + 1], count, cap) |
||||
|
||||
def heatmap_color (v): |
||||
colors = [ [0.3, 0.3, 1], [0.3, 1, 0.3], [1, 1, 0.3], [1, 0.3, 0.3]] |
||||
fb = 0 |
||||
if v <= 0: |
||||
idx1, idx2 = 0, 0 |
||||
elif v >= 1: |
||||
idx1, idx2 = len(colors) - 1, len(colors) - 1 |
||||
else: |
||||
val = v * (len(colors) - 1) |
||||
idx1 = int(floor(val)) |
||||
idx2 = idx1 + 1 |
||||
fb = val - float(idx1) |
||||
|
||||
r = (colors[idx2][0] - colors[idx1][0]) * fb + colors[idx1][0] |
||||
g = (colors[idx2][1] - colors[idx1][1]) * fb + colors[idx1][1] |
||||
b = (colors[idx2][2] - colors[idx1][2]) * fb + colors[idx1][2] |
||||
|
||||
r, g, b = [x * 255 for x in r, g, b] |
||||
return "#%02x%02x%02x" % (r, g, b) |
||||
|
||||
# Load the keylog |
||||
def load_keylog(fname, restrict_row): |
||||
keylog = {} |
||||
total = 0 |
||||
with open(fname, "r") as f: |
||||
lines = f.readlines() |
||||
for line in lines: |
||||
m = re.search ('KL: col=(\d+), row=(\d+)', line) |
||||
if not m: |
||||
continue |
||||
(c, r) = (int(m.group (2)), int(m.group (1))) |
||||
if restrict_row != None and r != int(restrict_row): |
||||
continue |
||||
if (c, r) in keylog: |
||||
keylog[(c, r)] = keylog[(c, r)] + 1 |
||||
else: |
||||
keylog[(c, r)] = 1 |
||||
total = total + 1 |
||||
return total / 2, keylog |
||||
|
||||
def l_flat(s): |
||||
f = s.split("\n") |
||||
return ", ".join (f) |
||||
|
||||
def main(base_fn, log_fn, restrict_row = None): |
||||
|
||||
with open(base_fn, "r") as f: |
||||
layout = json.load (f) |
||||
|
||||
## Reset colors |
||||
for row in cr_coord_map: |
||||
for col in row: |
||||
if col != []: |
||||
set_bg (layout, col, "#d9dae0") |
||||
#set_attr_at (layout, col[0], col[1], "g", set_attr, True) |
||||
|
||||
total, log = load_keylog (log_fn, restrict_row) |
||||
max_cnt = 0 |
||||
for (c, r) in log: |
||||
max_cnt = max(max_cnt, log[(c, r)]) |
||||
|
||||
# Create the heatmap |
||||
for (c, r) in log: |
||||
coords = coord(c, r) |
||||
b, n = coords |
||||
cap = max_cnt |
||||
v = float(log[(c, r)]) / cap |
||||
print >> sys.stderr, "%s => %d/%d => %f = %s" % (l_flat(layout[b][n+1]), log[(c,r)], cap, v, heatmap_color(v)) |
||||
set_bg (layout, coord(c, r), heatmap_color (v)) |
||||
set_tap_info (layout, coord (c, r), log[(c, r)], total) |
||||
|
||||
print json.dumps(layout) |
||||
|
||||
if __name__ == "__main__": |
||||
if len(sys.argv) < 3: |
||||
print """Log to Heatmap -- creates a heatmap out of keyboard logs |
||||
|
||||
Usage: log-to-heatmap.py base-layout.json logfile [row] >layout.json""" |
||||
sys.exit (1) |
||||
main(*sys.argv[1:]) |
@ -0,0 +1,455 @@ |
||||
#include "ergodox_ez.h" |
||||
#include "led.h" |
||||
#include "debug.h" |
||||
#include "action_layer.h" |
||||
#include "action_util.h" |
||||
#include "mousekey.h" |
||||
|
||||
#define BASE 0 // default layer
|
||||
#define SYMB 1 // symbols layer
|
||||
#define MDIA 2 // media layer
|
||||
#define SPEC 3 // special layer
|
||||
|
||||
#define LCaps 10 // left caps-shift key
|
||||
#define LSymb 11 // left symbol-shift key
|
||||
#define LMdia 12 // left media-shift key
|
||||
#define LSpec 13 // left special-shift key
|
||||
#define RCaps 14 // right caps-shift key
|
||||
#define RSymb 15 // right symbol-shift key
|
||||
#define RMdia 16 // right media-shift key
|
||||
#define RSpec 17 // right special-shift key
|
||||
|
||||
#define MUL 20 // mouse up left
|
||||
#define MUR 21 // mouse up right
|
||||
#define MDL 22 // mouse down left
|
||||
#define MDR 23 // mouse down right
|
||||
|
||||
/*
|
||||
* teckinesis layout for ErgoDox (EZ) |
||||
*
|
||||
* Modifications from The Ordinary Layout v4 by Will Wolff-Myren willwm@gmail.com |
||||
* Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com |
||||
* |
||||
* No rights reserved. This software is in the public domain. |
||||
* Credit me if you are friendly but if you're a jerk don't bother. |
||||
*
|
||||
* Details: readme.md |
||||
* https://github.com/willwm/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/teckinesis
|
||||
*/ |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
|
||||
/******* Base Layer ********************************************************************************************************
|
||||
* |
||||
* ,------------------------------------------------------. ,------------------------------------------------------. |
||||
* | Special =+ | 1 | 2 | 3 | 4 | 5 | ESC | | ` | 6 | 7 | 8 | 9 | 0 | -_ Special | |
||||
* |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| |
||||
* | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media | |
||||
* |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| |
||||
* | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol | |
||||
* |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------| |
||||
* | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals | |
||||
* `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' |
||||
* | LCtrl |Meh/\ |Hypr//| LAlt | LGui | | RGui | RAlt |Hypr/[|Meh/] | RCtrl |
|
||||
* `-----------------------------------' `-----------------------------------' |
||||
* ,-------------. ,-------------. |
||||
* | Home | End | | Left | Right| |
||||
* ,------|------|------| |------+------+------. |
||||
* | | | PgUp | | Up | | | |
||||
* |Backsp| Del |------| |------| Enter| Space| |
||||
* | | | PgDn | | Down | | | |
||||
* `--------------------' `--------------------' |
||||
*/ |
||||
[BASE] = KEYMAP( |
||||
// left hand
|
||||
F(LSpec),KC_1,KC_2,KC_3 ,KC_4 ,KC_5 ,KC_ESC |
||||
,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC |
||||
,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G |
||||
,M(LCaps) ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) |
||||
,KC_LCTL,MEH_T(KC_BSLS),ALL_T(KC_SLSH),KC_LALT,KC_LGUI |
||||
,KC_HOME,KC_END |
||||
,KC_PGUP |
||||
,KC_BSPC,KC_DEL ,KC_PGDN |
||||
// right hand
|
||||
,KC_GRV ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) |
||||
,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) |
||||
,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) |
||||
,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps) |
||||
,KC_RGUI,KC_RALT,ALL_T(KC_LBRC),MEH_T(KC_RBRC),KC_RCTL |
||||
,KC_LEFT ,KC_RGHT |
||||
,KC_UP |
||||
,KC_DOWN ,KC_ENT ,KC_SPC |
||||
), |
||||
|
||||
/******* Symbols Layer *****************************************************************************************************
|
||||
* |
||||
* ,-----------------------------------------------------. ,-----------------------------------------------------. |
||||
* | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | | |
||||
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| |
||||
* | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | | |
||||
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| |
||||
* | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | | |
||||
* |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------| |
||||
* | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | | |
||||
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' |
||||
* | LCtrl | Meh |Hyper | LAlt | LGui | |RGui/0|RAlt/.|Hypr/=|Meh/+ |RCtrl/Ent| |
||||
* `-----------------------------------' `-------------------------------------' |
||||
* ,-------------. ,-------------. |
||||
* | Left | Right| | Home | End | |
||||
* ,------|------|------| |------+------+------. |
||||
* | | | Up | | PgUp | | | |
||||
* |Space |Enter |------| |------|BackSp| Del | |
||||
* | | | Down | | PgDn | | | |
||||
* `--------------------' `--------------------' |
||||
*/ |
||||
[SYMB] = KEYMAP( |
||||
// left hand
|
||||
KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC |
||||
,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) |
||||
,KC_TRNS ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
|
||||
,KC_TRNS ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB |
||||
,KC_LCTL ,KC_MEH ,KC_HYPR ,KC_LALT ,KC_LGUI |
||||
,KC_LEFT ,KC_RGHT |
||||
,KC_UP |
||||
,KC_SPC ,KC_ENT ,KC_DOWN |
||||
// right hand
|
||||
,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS |
||||
,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS |
||||
,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS |
||||
,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS |
||||
,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT) |
||||
,KC_HOME ,KC_END |
||||
,KC_PGUP |
||||
,KC_PGDN ,KC_BSPC ,KC_DEL |
||||
), |
||||
|
||||
/******* Media Layer *******************************************************************************************************
|
||||
* |
||||
* ,---------------------------------------------------------------. ,---------------------------------------------------------------. |
||||
* | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | | |
||||
* |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------| |
||||
* | | |MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | | | |
||||
* |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------| |
||||
* | | |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | | | |
||||
* |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------| |
||||
* | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | | |
||||
* `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------' |
||||
* |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl| |
||||
* `---------------------------------------------' `---------------------------------------------' |
||||
* ,-------------. ,-------------. |
||||
* | Stop |Refrsh| | Prev | Next | |
||||
* ,------|------|------| |------+------+------. |
||||
* |Brwser|Brwser|Search| |VolUp | | | |
||||
* |Back | Fwd |------| |------| Stop | Play-| |
||||
* | | | Home | |VolDn | | Pause| |
||||
* `--------------------' `--------------------' |
||||
*/ |
||||
[MDIA] = KEYMAP( |
||||
// left hand
|
||||
KC_TRNS ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_ESC |
||||
,KC_TRNS ,KC_NO ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U |
||||
,KC_TRNS ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD |
||||
,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D |
||||
,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2 |
||||
,KC_WSTP ,KC_WREF |
||||
,KC_WSCH |
||||
,KC_WBAK ,KC_NO ,KC_WHOM |
||||
// right hand
|
||||
,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_TRNS |
||||
,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_TRNS |
||||
,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO ,KC_TRNS |
||||
,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS |
||||
,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH ,KC_RCTL |
||||
,KC_MPRV ,KC_MNXT |
||||
,KC_VOLU |
||||
,KC_VOLD ,KC_MSTP ,KC_MPLY |
||||
), |
||||
|
||||
/******* Special Layer *****************************************************************************************************
|
||||
* |
||||
* ,-----------------------------------------------------. ,-----------------------------------------------------. |
||||
* | | Esc | | | | | | | | | | | | Bspc | | |
||||
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| |
||||
* | | | | | | | | | | | | | | | | |
||||
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| |
||||
* | | | | | | |------| |------| | | | | | | |
||||
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| |
||||
* | | | | | | | | | | | | | | | RShift | |
||||
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' |
||||
* | | | | | | | | | | | | |
||||
* `----------------------------------' `----------------------------------' |
||||
* ,-------------. ,-------------. |
||||
* | | | | | | |
||||
* ,------|------|------| |------+------+------. |
||||
* | | | | | | | | |
||||
* | | |------| |------| | | |
||||
* | | | | | | | | |
||||
* `--------------------' `--------------------' |
||||
*/ |
||||
[SPEC] = KEYMAP( |
||||
// left hand
|
||||
KC_TRNS ,KC_ESC ,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 ,KC_TRNS |
||||
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS |
||||
|
||||
,KC_TRNS ,KC_TRNS |
||||
,KC_TRNS |
||||
,KC_TRNS,KC_TRNS ,KC_TRNS |
||||
// right hand
|
||||
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,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_RSFT |
||||
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS |
||||
|
||||
,KC_TRNS ,KC_TRNS |
||||
,KC_TRNS |
||||
,KC_TRNS ,KC_TRNS ,KC_TRNS |
||||
) |
||||
}; |
||||
|
||||
const uint16_t PROGMEM fn_actions[] = { |
||||
// the faux shift keys are implemented as macro taps
|
||||
[LCaps] = ACTION_MACRO_TAP(LCaps) |
||||
,[LSymb] = ACTION_MACRO_TAP(LSymb) |
||||
,[LMdia] = ACTION_MACRO_TAP(LMdia) |
||||
,[LSpec] = ACTION_MACRO_TAP(LSpec) |
||||
,[RCaps] = ACTION_MACRO_TAP(RCaps) |
||||
,[RSymb] = ACTION_MACRO_TAP(RSymb) |
||||
,[RMdia] = ACTION_MACRO_TAP(RMdia) |
||||
,[RSpec] = ACTION_MACRO_TAP(RSpec) |
||||
}; |
||||
|
||||
uint16_t caps_shift = 0; |
||||
uint16_t symb_shift = 0; |
||||
uint16_t mdia_shift = 0; |
||||
|
||||
bool symb_lock = false; |
||||
bool mdia_lock = false; |
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) |
||||
{ |
||||
switch(id) { |
||||
// There are two shift keys for each layer so we increment a layer_shift var when one
|
||||
// is pressed and decrement when one is released. If both are pressed at the same time
|
||||
// then the layer is locked (or unlocked). The shift counts are bound between 0 and 2
|
||||
// only because sometimes rapid pressing led to irregular events; this way the states
|
||||
// are self healing during use.
|
||||
|
||||
case LCaps: // both caps-shift keys trigger Left Shift
|
||||
case RCaps: // so they don't interfere with the magic combo
|
||||
if (record->event.pressed && !record->tap.count) { |
||||
if(++caps_shift > 2) caps_shift = 2; |
||||
if(caps_shift == 2) { |
||||
register_code(KC_CAPS); |
||||
unregister_code(KC_CAPS); |
||||
} else if(caps_shift == 1) { |
||||
register_code(KC_LSFT); |
||||
} |
||||
} else { |
||||
if(--caps_shift < 0) caps_shift = 0; |
||||
if(caps_shift == 0) unregister_code(KC_LSFT); |
||||
} |
||||
break; |
||||
|
||||
case LSymb: |
||||
if (record->event.pressed) { |
||||
if(++symb_shift > 2) symb_shift = 2; |
||||
if(symb_shift == 2) { |
||||
symb_lock = !symb_lock; |
||||
} else if(symb_shift == 1) { |
||||
layer_on(SYMB); |
||||
} |
||||
} else { |
||||
if(--symb_shift < 0) symb_shift = 0; |
||||
if((symb_shift == 0) && (!symb_lock)) layer_off(SYMB); |
||||
} |
||||
break; |
||||
|
||||
case LMdia: |
||||
if (record->event.pressed) { |
||||
if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { |
||||
register_code(KC_TAB); |
||||
} else { |
||||
if(++mdia_shift > 2) mdia_shift = 2; |
||||
if(mdia_shift == 2) { |
||||
mdia_lock = !mdia_lock; |
||||
} else if(mdia_shift == 1) { |
||||
layer_on(MDIA); |
||||
} |
||||
} |
||||
} else { |
||||
if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { |
||||
unregister_code(KC_TAB); |
||||
} else { |
||||
if(--mdia_shift < 0) mdia_shift = 0; |
||||
if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); |
||||
} |
||||
} |
||||
break; |
||||
|
||||
case LSpec: |
||||
if (record->event.pressed) { |
||||
if (record->tap.count && !record->tap.interrupted) { |
||||
register_code(KC_EQL); |
||||
} else { |
||||
layer_on(SPEC); |
||||
} |
||||
} else { |
||||
if(record->tap.count && !record->tap.interrupted) { |
||||
unregister_code(KC_EQL); |
||||
} else { |
||||
layer_off(SPEC); |
||||
} |
||||
} |
||||
break; |
||||
|
||||
case RSymb: |
||||
if (record->event.pressed) { |
||||
if (record->tap.count && (!symb_shift) && (!symb_lock)) { |
||||
register_code(KC_QUOT); |
||||
} else { |
||||
if(++symb_shift > 2) symb_shift = 2; |
||||
if(symb_shift == 2) { |
||||
symb_lock = !symb_lock; |
||||
} else if(symb_shift == 1) { |
||||
layer_on(SYMB); |
||||
} |
||||
} |
||||
} else { |
||||
if(record->tap.count && symb_shift == 0) { |
||||
unregister_code(KC_QUOT); |
||||
} else { |
||||
if(--symb_shift < 0) symb_shift = 0; |
||||
if((!symb_shift) && (!symb_lock)) layer_off(SYMB); |
||||
} |
||||
} |
||||
break; |
||||
|
||||
case RMdia: |
||||
if (record->event.pressed) { |
||||
if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { |
||||
register_code(KC_BSLS); |
||||
} else { |
||||
if(++mdia_shift > 2) mdia_shift = 2; |
||||
if(mdia_shift == 2) { |
||||
mdia_lock = !mdia_lock; |
||||
} else if(mdia_shift == 1) { |
||||
layer_on(MDIA); |
||||
} |
||||
} |
||||
} else { |
||||
if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { |
||||
unregister_code(KC_BSLS); |
||||
} else { |
||||
if(--mdia_shift < 0) mdia_shift = 0; |
||||
if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); |
||||
} |
||||
} |
||||
break; |
||||
|
||||
case RSpec: |
||||
if (record->event.pressed) { |
||||
if (record->tap.count && !record->tap.interrupted) { |
||||
register_code(KC_MINS); |
||||
} else { |
||||
layer_on(SPEC); |
||||
} |
||||
} else { |
||||
if(record->tap.count && !record->tap.interrupted) { |
||||
unregister_code(KC_MINS); |
||||
} else { |
||||
layer_off(SPEC); |
||||
} |
||||
} |
||||
break; |
||||
|
||||
// mouse diagonals
|
||||
|
||||
case MUL: // mouse up left
|
||||
if (record->event.pressed) { |
||||
mousekey_on(KC_MS_UP); |
||||
mousekey_on(KC_MS_LEFT); |
||||
mousekey_send(); |
||||
} else { |
||||
mousekey_off(KC_MS_UP); |
||||
mousekey_off(KC_MS_LEFT); |
||||
mousekey_send(); |
||||
} |
||||
break; |
||||
|
||||
case MUR: // mouse up right
|
||||
if (record->event.pressed) { |
||||
mousekey_on(KC_MS_UP); |
||||
mousekey_on(KC_MS_RIGHT); |
||||
mousekey_send(); |
||||
} else { |
||||
mousekey_off(KC_MS_UP); |
||||
mousekey_off(KC_MS_RIGHT); |
||||
mousekey_send(); |
||||
} |
||||
break; |
||||
|
||||
case MDL: // mouse down left
|
||||
if (record->event.pressed) { |
||||
mousekey_on(KC_MS_DOWN); |
||||
mousekey_on(KC_MS_LEFT); |
||||
mousekey_send(); |
||||
} else { |
||||
mousekey_off(KC_MS_DOWN); |
||||
mousekey_off(KC_MS_LEFT); |
||||
mousekey_send(); |
||||
} |
||||
break; |
||||
|
||||
case MDR: // mouse down right
|
||||
if (record->event.pressed) { |
||||
mousekey_on(KC_MS_DOWN); |
||||
mousekey_on(KC_MS_RIGHT); |
||||
mousekey_send(); |
||||
} else { |
||||
mousekey_off(KC_MS_DOWN); |
||||
mousekey_off(KC_MS_RIGHT); |
||||
mousekey_send(); |
||||
} |
||||
break; |
||||
|
||||
default: |
||||
// none
|
||||
break; |
||||
} |
||||
|
||||
return MACRO_NONE; |
||||
}; |
||||
|
||||
// Runs just one time when the keyboard initializes.
|
||||
void matrix_init_user(void) { |
||||
|
||||
}; |
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) { |
||||
// shift or caps lock turns on red light
|
||||
if(caps_shift || (keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) { |
||||
ergodox_right_led_1_on(); |
||||
} else { |
||||
ergodox_right_led_1_off(); |
||||
} |
||||
|
||||
// Symbol layer turns on green light
|
||||
if(layer_state & (1UL<<SYMB)) { |
||||
ergodox_right_led_2_on(); |
||||
} else { |
||||
ergodox_right_led_2_off(); |
||||
} |
||||
|
||||
// Media layer turns on blue light
|
||||
if(layer_state & (1UL<<MDIA)) { |
||||
ergodox_right_led_3_on(); |
||||
} else { |
||||
ergodox_right_led_3_off(); |
||||
} |
||||
}; |
||||
|
After Width: | Height: | Size: 62 KiB |
@ -0,0 +1,27 @@ |
||||
[{x:3.5,a:7},"",{x:10.5},""], |
||||
[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], |
||||
[{y:-0.875,x:5.5},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""], |
||||
[{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#54d6de"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], |
||||
[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""], |
||||
[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], |
||||
[{y:-0.875,x:5.5},"",{h:1.5},"",{x:4.5,h:1.5},"",""], |
||||
[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""], |
||||
[{y:-0.375,x:3.5},"",{x:10.5},""], |
||||
[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], |
||||
[{y:-0.875,x:5.5},"",{x:6.5},""], |
||||
[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""], |
||||
[{y:-0.625,x:6.5,h:1.5},"",{x:4.5,h:1.5},""], |
||||
[{y:-0.75,x:3.5},"",{x:10.5},""], |
||||
[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], |
||||
[{y:-0.875,x:5.5},"",{x:6.5},""], |
||||
[{y:-0.875,w:1.5},"","",{x:14.5},"",{c:"#2277ff",w:1.5},"RShift"], |
||||
[{y:-0.375,x:3.5,c:"#cccccc"},"",{x:10.5},""], |
||||
[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], |
||||
[{y:-0.75,x:0.5},"","",{x:14.5},"",""], |
||||
[{r:30,rx:6.5,ry:4.25,y:-1,x:1},"",""], |
||||
[{h:2},"",{h:2},"",""], |
||||
[{x:2},""], |
||||
[{r:-30,rx:13,y:-1,x:-3},"",""], |
||||
[{x:-3},"",{h:2},"",{h:2},""], |
||||
[{x:-3},""] |
||||
|
@ -0,0 +1,45 @@ |
||||
# teckinesis Layout |
||||
|
||||
*A blend of TECK and Kinesis layouts, based on ["The Ordinary Layout" by Nicholas Keene](http://qmk.fm/keyboards/ergodox_ez/keymaps/ordinary/#the-ordinary-layout-a-familiar-and-powerful-layout)* |
||||
|
||||
I love "The Ordinary Layout", but I still use a [TECK](https://www.trulyergonomic.com/store/index.php) |
||||
at the office, and I found the transition back and forth to be a bit more difficult than I expected. |
||||
|
||||
This layout consists of only slight changes to "The Ordinary Layout" based on the layouts of the |
||||
[(original) TECK Model 209](https://www.trulyergonomic.com/store/layout-designer--configurator--reprogrammable--truly-ergonomic-mechanical-keyboard/#KTo7PD0+P0BBQkNERUw5394rNR4fICEi4yMkJSYnLS4xOBQaCBUXTBwYDBITLzDhBBYHCQorCw0ODzPl4B0bBhkFKhEQNjc05OPiSktOTSwoLFBSUU/mZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX2BhAFZXAAAAAAAAAAAAXF1eVAAAAAAAAAAAAABZWltVAAAAAAAAAAAAYgBjAAAAAAAAAAAAWFcAAAAAAACTAQAMAiMBAAwBigEADAIhAQAMAZQBAAwBkgEADAGDAQAMALYBAAwAzQEADAC1AQAMAOIBAAwA6gEADADpAQAMALhJAEYAAAAAAEitR64AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACk6Ozw9Pj9AQUJDREVMOd/eKzUeHyAhIuMjJCUmJy0uMTgUGggVF0wcGAwSEy8w4QQWBwkKKwsNDg8z5eMdGwYZBSoREDY3NOfg4kpLTk0sKCxQUlFP5uQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9gYQBWVwAAAAAAAAAAAFxdXlQAAAAAAAAAAAAAWVpbVQAAAAAAAAAAAGIAYwAAAAAAAAAAAFhXAAAAAAAAkwEADAIjAQAMAYoBAAwCIQEADAGUAQAMAZIBAAwBgwEADAC2AQAMAM0BAAwAtQEADADiAQAMAOoBAAwA6QEADAC4SQBGAAAAAABIrUeuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) and |
||||
the [Kinesis Advantage](http://www.kinesis-ergo.com/wp-content/uploads/2013/06/advantage_layout_win.pdf) |
||||
|
||||
## The Base Layout ## |
||||
|
||||
[teckinesis (Base Layer)](http://www.keyboard-layout-editor.com/#/gists/befd4c5800d92114aa9e50d4f7c0dfb0) |
||||
 |
||||
|
||||
### Changes from The Ordinary Layout ### |
||||
|
||||
* Moved KC_MINS from the key left of the 6 to the RSpec key. |
||||
* Moved KC_EQL from RSpec to LSpec. |
||||
* Moved KC_GRV from LSpec to the key left of the 6. |
||||
* Mdded KC_BSLS to the left Meh key. |
||||
* Added KC_SLSH to the left Hyper key. |
||||
* Added KC_LBRC to the right Hyper key. |
||||
* Added KC_RBRC to the right Meh key. |
||||
|
||||
## The Symbols Layer ## |
||||
|
||||
[teckinesis (Symbols Layer)](http://www.keyboard-layout-editor.com/#/gists/e6ddc4e9e0d194b3e52ac0616238ab61) |
||||
 |
||||
|
||||
### Changes from The Ordinary Layout ### |
||||
|
||||
* None. |
||||
|
||||
## The Media Layer ## |
||||
|
||||
[teckinesis (Media Layer)](http://www.keyboard-layout-editor.com/#/gists/41ff65e6a7c490211fd6702fb34d9908) |
||||
 |
||||
|
||||
### Changes from The Ordinary Layout ### |
||||
|
||||
* Removed Power, Sleep, Mail, My Computer keys. |
||||
(I kept hitting these while using the mouse/cursor. =P) |
||||
|
@ -0,0 +1,434 @@ |
||||
[ |
||||
{ |
||||
"name": "teckinesis (Base Layer)", |
||||
"author": "Will Wolff-Myren", |
||||
"notes": "# teckinesis Layout # \r\n\r\n*A blend of TECK and Kinesis layouts, based on [\"The Ordinary Layout\" by Nicholas Keene](http://qmk.fm/keyboards/ergodox_ez/keymaps/ordinary/#the-ordinary-layout-a-familiar-and-powerful-layout)*\r\n\r\n## The Base Layout ##\r\n\r\n\r\n\r\n## The Symbols Layer ##\r\n\r\n\r\n\r\n## The Media Layer ##\r\n\r\n(placeholder)\r\n", |
||||
"switchMount": "cherry", |
||||
"switchBrand": "gateron", |
||||
"switchType": "KS-3-Tea" |
||||
}, |
||||
[ |
||||
{ |
||||
"x": 3.5 |
||||
}, |
||||
"#\n3", |
||||
{ |
||||
"x": 10.5 |
||||
}, |
||||
"*\n8" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5 |
||||
}, |
||||
"@\n2", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"$\n4", |
||||
{ |
||||
"x": 8.5 |
||||
}, |
||||
"&\n7", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"(\n9" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5 |
||||
}, |
||||
"%\n5", |
||||
{ |
||||
"c": "#ff4444" |
||||
}, |
||||
"Esc", |
||||
{ |
||||
"x": 4.5, |
||||
"c": "#cccccc" |
||||
}, |
||||
"~\n`", |
||||
"^\n6" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"c": "#2277ff", |
||||
"w": 1.5 |
||||
}, |
||||
"Special\n\n+\n\n\n\nShift\n=", |
||||
{ |
||||
"c": "#cccccc" |
||||
}, |
||||
"!\n1", |
||||
{ |
||||
"x": 14.5 |
||||
}, |
||||
")\n0", |
||||
{ |
||||
"c": "#2277ff", |
||||
"w": 1.5 |
||||
}, |
||||
"_\n\nSpecial\n\n\n\n-\nShift" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.375, |
||||
"x": 3.5, |
||||
"c": "#cccccc" |
||||
}, |
||||
"E", |
||||
{ |
||||
"x": 10.5 |
||||
}, |
||||
"I" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5 |
||||
}, |
||||
"W", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"R", |
||||
{ |
||||
"x": 8.5 |
||||
}, |
||||
"U", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"O" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5 |
||||
}, |
||||
"T", |
||||
{ |
||||
"h": 1.5 |
||||
}, |
||||
"{\n\n\n\n\n\n[", |
||||
{ |
||||
"x": 4.5, |
||||
"h": 1.5 |
||||
}, |
||||
"}\n\n\n\n\n\n]", |
||||
"Y" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"c": "#2277ff", |
||||
"fa": [ |
||||
0, |
||||
0, |
||||
4 |
||||
], |
||||
"w": 1.5 |
||||
}, |
||||
"Media\n\n<i class='kb kb-Line-Start-End'></i>\n\n\n\nShift", |
||||
{ |
||||
"c": "#cccccc" |
||||
}, |
||||
"Q", |
||||
{ |
||||
"x": 14.5 |
||||
}, |
||||
"P", |
||||
{ |
||||
"c": "#2277ff", |
||||
"f": 3, |
||||
"w": 1.5 |
||||
}, |
||||
"|\n\\\nMedia\n\n\n\n\nShift" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.375, |
||||
"x": 3.5, |
||||
"c": "#cccccc" |
||||
}, |
||||
"D", |
||||
{ |
||||
"x": 10.5 |
||||
}, |
||||
"K" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5 |
||||
}, |
||||
"S", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"F", |
||||
{ |
||||
"x": 8.5 |
||||
}, |
||||
"J", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"L" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5 |
||||
}, |
||||
"G", |
||||
{ |
||||
"x": 6.5 |
||||
}, |
||||
"H" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"c": "#2277ff", |
||||
"w": 1.5 |
||||
}, |
||||
"Symbols\n\n\n\n\n\nShift", |
||||
{ |
||||
"c": "#cccccc" |
||||
}, |
||||
"A", |
||||
{ |
||||
"x": 14.5 |
||||
}, |
||||
":\n;", |
||||
{ |
||||
"c": "#2277ff", |
||||
"f": 3, |
||||
"w": 1.5 |
||||
}, |
||||
"\"\n'\nSymbols\n\n\n\n\nShift" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.625, |
||||
"x": 6.5, |
||||
"c": "#54d6de", |
||||
"fa": [ |
||||
0, |
||||
0, |
||||
4, |
||||
1 |
||||
], |
||||
"h": 1.5 |
||||
}, |
||||
"< Tab\n\n\nShift Tab", |
||||
{ |
||||
"x": 4.5, |
||||
"h": 1.5 |
||||
}, |
||||
"Tab >\n\n\nTab" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.75, |
||||
"x": 3.5, |
||||
"c": "#cccccc" |
||||
}, |
||||
"C", |
||||
{ |
||||
"x": 10.5 |
||||
}, |
||||
"<\n," |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5 |
||||
}, |
||||
"X", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"V", |
||||
{ |
||||
"x": 8.5 |
||||
}, |
||||
"M", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
">\n." |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5 |
||||
}, |
||||
"B", |
||||
{ |
||||
"x": 6.5 |
||||
}, |
||||
"N" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"c": "#2277ff", |
||||
"w": 1.5 |
||||
}, |
||||
"Capitals\n\n\n\n\n\nShift", |
||||
{ |
||||
"c": "#cccccc" |
||||
}, |
||||
"Z", |
||||
{ |
||||
"x": 14.5 |
||||
}, |
||||
"?\n/", |
||||
{ |
||||
"c": "#2277ff", |
||||
"f": 3, |
||||
"w": 1.5 |
||||
}, |
||||
"\n\nCapitals\n\n\n\n\nShift" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.375, |
||||
"x": 3.5, |
||||
"c": "#77aaff", |
||||
"fa": [ |
||||
5, |
||||
0, |
||||
4, |
||||
1 |
||||
] |
||||
}, |
||||
"<i class='mss mss-Unicode-Option-3'></i>\n\n\nLAlt", |
||||
{ |
||||
"x": 10.5 |
||||
}, |
||||
"<i class='mss mss-Unicode-Option-3'></i>\n\n\nRAlt" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5, |
||||
"fa": [ |
||||
5, |
||||
1 |
||||
] |
||||
}, |
||||
"\nHyper\n?\n/", |
||||
{ |
||||
"x": 1, |
||||
"fa": [ |
||||
5, |
||||
1, |
||||
0, |
||||
1 |
||||
] |
||||
}, |
||||
"<i class='mss mss-Unicode-Command-3'></i>\n\n\nSuper", |
||||
{ |
||||
"x": 8.5 |
||||
}, |
||||
"<i class='mss mss-Unicode-Command-3'></i>\n\n\nSuper", |
||||
{ |
||||
"x": 1, |
||||
"fa": [ |
||||
0, |
||||
0, |
||||
0, |
||||
1 |
||||
] |
||||
}, |
||||
"{\n[\n\nHyper" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.75, |
||||
"x": 0.5 |
||||
}, |
||||
"Ctrl\n\n\nLCtrl", |
||||
{ |
||||
"f2": 1 |
||||
}, |
||||
"\nMeh\n|\n\\", |
||||
{ |
||||
"x": 14.5, |
||||
"fa": [ |
||||
0, |
||||
0, |
||||
1, |
||||
1 |
||||
] |
||||
}, |
||||
"}\n]\n\nMeh", |
||||
"Ctrl\n\n\nRCtrl" |
||||
], |
||||
[ |
||||
{ |
||||
"r": 30, |
||||
"rx": 6.5, |
||||
"ry": 4.25, |
||||
"y": -1, |
||||
"x": 1, |
||||
"c": "#54d6de" |
||||
}, |
||||
"Home", |
||||
"End" |
||||
], |
||||
[ |
||||
{ |
||||
"h": 2 |
||||
}, |
||||
"< Del\n\n\nBackspace", |
||||
{ |
||||
"h": 2 |
||||
}, |
||||
"Del >\n\n\nDelete", |
||||
"Page\n\n\n\n\n\nUp" |
||||
], |
||||
[ |
||||
{ |
||||
"x": 2 |
||||
}, |
||||
"Page\n\n\n\n\n\nDown" |
||||
], |
||||
[ |
||||
{ |
||||
"r": -30, |
||||
"rx": 13, |
||||
"y": -1, |
||||
"x": -3 |
||||
}, |
||||
"Left", |
||||
"Right" |
||||
], |
||||
[ |
||||
{ |
||||
"x": -3 |
||||
}, |
||||
"Up", |
||||
{ |
||||
"h": 2 |
||||
}, |
||||
"Enter", |
||||
{ |
||||
"h": 2 |
||||
}, |
||||
"Space" |
||||
], |
||||
[ |
||||
{ |
||||
"x": -3 |
||||
}, |
||||
"Down" |
||||
] |
||||
] |
After Width: | Height: | Size: 92 KiB |
@ -0,0 +1,436 @@ |
||||
[ |
||||
{ |
||||
"name": "teckinesis (MediaLayer)", |
||||
"author": "Will Wolff-Myren", |
||||
"switchMount": "cherry", |
||||
"switchBrand": "gateron", |
||||
"switchType": "KS-3-Tea" |
||||
}, |
||||
[ |
||||
{ |
||||
"x": 3.5, |
||||
"c": "#99de2a" |
||||
}, |
||||
"F13", |
||||
{ |
||||
"x": 10.5 |
||||
}, |
||||
"F18" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5 |
||||
}, |
||||
"F12", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"F14", |
||||
{ |
||||
"x": 8.5 |
||||
}, |
||||
"F17", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"F19" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5 |
||||
}, |
||||
"F15", |
||||
{ |
||||
"c": "#ff4444" |
||||
}, |
||||
"Esc", |
||||
{ |
||||
"x": 4.5 |
||||
}, |
||||
"Esc", |
||||
{ |
||||
"c": "#99de2a" |
||||
}, |
||||
"F16" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 1.5 |
||||
}, |
||||
"F11", |
||||
{ |
||||
"x": 14.5 |
||||
}, |
||||
"F20" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.995, |
||||
"c": "#000000", |
||||
"t": "#ff0000", |
||||
"w": 1.5 |
||||
}, |
||||
"Media\n\n\n\n\n\nShift", |
||||
{ |
||||
"x": 16.5, |
||||
"w": 1.5 |
||||
}, |
||||
"\n\nMedia\n\n\n\n\nShift" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.3799999999999999, |
||||
"x": 3.5, |
||||
"c": "#ff8500", |
||||
"t": "#000000" |
||||
}, |
||||
"Mouse\n\n\n\n\n\nUp", |
||||
{ |
||||
"x": 10.5 |
||||
}, |
||||
"Cursor\n\n\n\n\n\nUp" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5 |
||||
}, |
||||
"Mouse\n\n\n\n\n\nUpLeft", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"Mouse\n\n\n\n\n\nUpRgt", |
||||
{ |
||||
"x": 8.5, |
||||
"c": "#ffb063" |
||||
}, |
||||
"Home", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"Page\n\n\n\n\n\nUp" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5, |
||||
"c": "#e6e067" |
||||
}, |
||||
"Vol\n\n\n\n\n\nUp", |
||||
{ |
||||
"c": "#ffb063", |
||||
"h": 1.5 |
||||
}, |
||||
"Scroll\n\n\n\n\n\nUp", |
||||
{ |
||||
"x": 4.5, |
||||
"h": 1.5 |
||||
}, |
||||
"Scroll\n\n\n\n\n\nUp", |
||||
{ |
||||
"c": "#e6e067" |
||||
}, |
||||
"Print\n\n\n\n\n\nScreen" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 1.5, |
||||
"c": "#737373", |
||||
"a": 7 |
||||
}, |
||||
"", |
||||
{ |
||||
"x": 14.5 |
||||
}, |
||||
"" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.9950000000000001, |
||||
"c": "#2277ff", |
||||
"a": 4, |
||||
"w": 1.5 |
||||
}, |
||||
"Symbols\n\n\n\n\n\nShift", |
||||
{ |
||||
"x": 16.5, |
||||
"w": 1.5 |
||||
}, |
||||
"\n\nSymbols\n\n\n\n\nShift" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.3799999999999999, |
||||
"x": 3.5, |
||||
"c": "#ff8500" |
||||
}, |
||||
"Mouse\n\n\n\n\n\nDown", |
||||
{ |
||||
"x": 10.5 |
||||
}, |
||||
"Cursor\n\n\n\n\n\nDown" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5 |
||||
}, |
||||
"Mouse\n\n\n\n\n\nLeft", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"Mouse\n\n\n\n\n\nRight", |
||||
{ |
||||
"x": 8.5 |
||||
}, |
||||
"Cursor\n\n\n\n\n\nLeft", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"Cursor\n\n\n\n\n\nRight" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5, |
||||
"c": "#e6e067" |
||||
}, |
||||
"Vol\n\n\n\n\n\nDown", |
||||
{ |
||||
"x": 6.5 |
||||
}, |
||||
"Num\n\n\n\n\n\nLock" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 1.5, |
||||
"c": "#737373", |
||||
"a": 7 |
||||
}, |
||||
"", |
||||
{ |
||||
"x": 14.5 |
||||
}, |
||||
"" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.9950000000000001, |
||||
"c": "#2277ff", |
||||
"a": 4, |
||||
"w": 1.5 |
||||
}, |
||||
"Capitals\n\n\n\n\n\nShift", |
||||
{ |
||||
"x": 16.5, |
||||
"w": 1.5 |
||||
}, |
||||
"\n\nCapitals\n\n\n\n\nShift" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.6299999999999999, |
||||
"x": 6.5, |
||||
"c": "#ffb063", |
||||
"h": 1.5 |
||||
}, |
||||
"Scroll\n\n\n\n\n\nDown", |
||||
{ |
||||
"x": 4.5, |
||||
"h": 1.5 |
||||
}, |
||||
"Scroll\n\n\n\n\n\nDown" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.75, |
||||
"x": 3.5, |
||||
"c": "#ff8500" |
||||
}, |
||||
"Mouse\n\n\n\n\n\nDown", |
||||
{ |
||||
"x": 10.5 |
||||
}, |
||||
"Cursor\n\n\n\n\n\nDown" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5 |
||||
}, |
||||
"Mouse\n\n\n\n\n\nDnLeft", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"Mouse\n\n\n\n\n\nDnRgt", |
||||
{ |
||||
"x": 8.5, |
||||
"c": "#ffb063" |
||||
}, |
||||
"End", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"Page\n\n\n\n\n\nDown" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5, |
||||
"c": "#e6e067" |
||||
}, |
||||
"Mute", |
||||
{ |
||||
"x": 6.5, |
||||
"c": "#737373", |
||||
"a": 7 |
||||
}, |
||||
"" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 1.5 |
||||
}, |
||||
"", |
||||
{ |
||||
"x": 14.5 |
||||
}, |
||||
"" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.9950000000000001, |
||||
"c": "#2277ff", |
||||
"a": 4, |
||||
"w": 1.5 |
||||
}, |
||||
"Ctrl", |
||||
{ |
||||
"x": 16.5, |
||||
"w": 1.5 |
||||
}, |
||||
"Ctrl" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.3799999999999999, |
||||
"x": 3.5, |
||||
"c": "#ff8500" |
||||
}, |
||||
"Middle\n\n\n\n\n\nClick", |
||||
{ |
||||
"x": 10.5, |
||||
"c": "#ffb063", |
||||
"fa": [ |
||||
0, |
||||
0, |
||||
0, |
||||
1 |
||||
] |
||||
}, |
||||
"Delete\n\n\nOption" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5, |
||||
"c": "#ff8500" |
||||
}, |
||||
"Left\n\n\n\n\n\nClick", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"Right\n\n\n\n\n\nClick", |
||||
{ |
||||
"x": 8.5, |
||||
"c": "#ffb063" |
||||
}, |
||||
"Insert\n\n\nCmd", |
||||
{ |
||||
"x": 1, |
||||
"c": "#77aaff" |
||||
}, |
||||
"Hyper" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.75, |
||||
"x": 0.5 |
||||
}, |
||||
"Alt\n\n\nLAlt", |
||||
"Meh", |
||||
{ |
||||
"x": 14.5 |
||||
}, |
||||
"Meh", |
||||
"Alt\n\n\nRAlt" |
||||
], |
||||
[ |
||||
{ |
||||
"r": 30, |
||||
"rx": 6.5, |
||||
"ry": 4.25, |
||||
"y": -1, |
||||
"x": 1, |
||||
"c": "#ccbb00" |
||||
}, |
||||
"Stop\n\n\nBrowser", |
||||
"Reload\n\n\nBrowser" |
||||
], |
||||
[ |
||||
{ |
||||
"h": 2 |
||||
}, |
||||
"< Web\n\n\nBrowser", |
||||
{ |
||||
"h": 2 |
||||
}, |
||||
"Web >\n\n\nBrowser", |
||||
"Search\n\n\nBrowser" |
||||
], |
||||
[ |
||||
{ |
||||
"x": 2 |
||||
}, |
||||
"Home\n\n\nBrowser" |
||||
], |
||||
[ |
||||
{ |
||||
"r": -30, |
||||
"rx": 13, |
||||
"y": -1, |
||||
"x": -3 |
||||
}, |
||||
"Prev\n\n\nAudio\n\n\nTrack", |
||||
"Next\n\n\nAudio\n\n\nTrack" |
||||
], |
||||
[ |
||||
{ |
||||
"x": -3, |
||||
"c": "#e6e067" |
||||
}, |
||||
"Vol\n\n\n\n\n\nUp", |
||||
{ |
||||
"c": "#ccbb00", |
||||
"h": 2 |
||||
}, |
||||
"Stop\n\n\nAudio", |
||||
{ |
||||
"h": 2 |
||||
}, |
||||
"Play\n\n\nAudio\n\n\nPause" |
||||
], |
||||
[ |
||||
{ |
||||
"x": -3, |
||||
"c": "#e6e067" |
||||
}, |
||||
"Vol\n\n\n\n\n\nDown" |
||||
] |
||||
] |
After Width: | Height: | Size: 110 KiB |
@ -0,0 +1,422 @@ |
||||
[ |
||||
{ |
||||
"name": "teckinesis (Symbol Layer)", |
||||
"author": "Will Wolff-Myren", |
||||
"switchMount": "cherry", |
||||
"switchBrand": "gateron", |
||||
"switchType": "KS-3-Tea" |
||||
}, |
||||
[ |
||||
{ |
||||
"x": 3.5, |
||||
"c": "#99de2a" |
||||
}, |
||||
"F3", |
||||
{ |
||||
"x": 10.5 |
||||
}, |
||||
"F8" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5 |
||||
}, |
||||
"F2", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"F4", |
||||
{ |
||||
"x": 8.5 |
||||
}, |
||||
"F7", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"F9" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5 |
||||
}, |
||||
"F5", |
||||
{ |
||||
"c": "#ff4444" |
||||
}, |
||||
"Esc", |
||||
{ |
||||
"x": 4.5, |
||||
"c": "#bbddbb" |
||||
}, |
||||
"_\n\n\n\n\n\n-", |
||||
{ |
||||
"c": "#99de2a" |
||||
}, |
||||
"F6" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"c": "#2277ff", |
||||
"w": 1.5 |
||||
}, |
||||
"Special\n\n\n\n\n\nShift", |
||||
{ |
||||
"c": "#99de2a" |
||||
}, |
||||
"F1", |
||||
{ |
||||
"x": 14.5 |
||||
}, |
||||
"F10", |
||||
{ |
||||
"c": "#2277ff", |
||||
"w": 1.5 |
||||
}, |
||||
"\n\nSpecial\n\n\n\n\nShift" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.375, |
||||
"x": 3.5, |
||||
"c": "#bbddbb" |
||||
}, |
||||
"{", |
||||
{ |
||||
"x": 10.5, |
||||
"c": "#89b087" |
||||
}, |
||||
"8" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5, |
||||
"c": "#bbddbb" |
||||
}, |
||||
"@", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"}", |
||||
{ |
||||
"x": 8.5, |
||||
"c": "#89b087" |
||||
}, |
||||
"7", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"9" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5, |
||||
"c": "#bbddbb" |
||||
}, |
||||
"&", |
||||
{ |
||||
"h": 1.5 |
||||
}, |
||||
"<", |
||||
{ |
||||
"x": 4.5, |
||||
"h": 1.5 |
||||
}, |
||||
">", |
||||
"|" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"c": "#2277ff", |
||||
"w": 1.5 |
||||
}, |
||||
"Media\n\n\n\n\n\nShift", |
||||
{ |
||||
"c": "#bbddbb" |
||||
}, |
||||
"!", |
||||
{ |
||||
"x": 14.5, |
||||
"c": "#89b087" |
||||
}, |
||||
"/", |
||||
{ |
||||
"c": "#2277ff", |
||||
"w": 1.5 |
||||
}, |
||||
"\n\nMedia\n\n\n\n\nShift" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.375, |
||||
"x": 3.5, |
||||
"c": "#bbddbb" |
||||
}, |
||||
"(", |
||||
{ |
||||
"x": 10.5, |
||||
"c": "#89b087" |
||||
}, |
||||
"5" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5, |
||||
"c": "#bbddbb" |
||||
}, |
||||
"$", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
")", |
||||
{ |
||||
"x": 8.5, |
||||
"c": "#89b087" |
||||
}, |
||||
"4", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"6" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5, |
||||
"c": "#bbddbb" |
||||
}, |
||||
"`", |
||||
{ |
||||
"x": 6.5 |
||||
}, |
||||
"/" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"c": "#000000", |
||||
"t": "#ff0000", |
||||
"w": 1.5 |
||||
}, |
||||
"Symbols\n\n\n\n\n\nShift", |
||||
{ |
||||
"c": "#bbddbb", |
||||
"t": "#000000" |
||||
}, |
||||
"#", |
||||
{ |
||||
"x": 14.5, |
||||
"c": "#89b087" |
||||
}, |
||||
"*", |
||||
{ |
||||
"c": "#000000", |
||||
"t": "#ff0000", |
||||
"w": 1.5 |
||||
}, |
||||
"\n\nSymbols\n\n\n\n\nShift" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.625, |
||||
"x": 6.5, |
||||
"c": "#54d6de", |
||||
"t": "#000000", |
||||
"fa": [ |
||||
0, |
||||
0, |
||||
0, |
||||
1 |
||||
], |
||||
"h": 1.5 |
||||
}, |
||||
"Tab >\n\n\nTab", |
||||
{ |
||||
"x": 4.5, |
||||
"h": 1.5 |
||||
}, |
||||
"< Tab\n\n\nShift Tab" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.75, |
||||
"x": 3.5, |
||||
"c": "#bbddbb" |
||||
}, |
||||
"[", |
||||
{ |
||||
"x": 10.5, |
||||
"c": "#89b087" |
||||
}, |
||||
"2" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5, |
||||
"c": "#bbddbb" |
||||
}, |
||||
"^", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"]", |
||||
{ |
||||
"x": 8.5, |
||||
"c": "#89b087" |
||||
}, |
||||
"1", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"3" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 5.5, |
||||
"c": "#bbddbb" |
||||
}, |
||||
"~", |
||||
{ |
||||
"x": 6.5 |
||||
}, |
||||
"\\" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"c": "#2277ff", |
||||
"w": 1.5 |
||||
}, |
||||
"Capitals\n\n\n\n\n\nShift", |
||||
{ |
||||
"c": "#bbddbb" |
||||
}, |
||||
"%", |
||||
{ |
||||
"x": 14.5, |
||||
"c": "#89b087" |
||||
}, |
||||
"-", |
||||
{ |
||||
"c": "#2277ff", |
||||
"w": 1.5 |
||||
}, |
||||
"\n\nCapitals\n\n\n\n\nShift" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.375, |
||||
"x": 3.5, |
||||
"c": "#77aaff" |
||||
}, |
||||
"<i class='mss mss-Unicode-Option-3'></i>\n\n\nLAlt", |
||||
{ |
||||
"x": 10.5, |
||||
"c": "#89b087" |
||||
}, |
||||
".\n\n\nOption" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.875, |
||||
"x": 2.5, |
||||
"c": "#77aaff" |
||||
}, |
||||
"Hyper", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"<i class='mss mss-Unicode-Command-3'></i>\n\n\nSuper", |
||||
{ |
||||
"x": 8.5, |
||||
"c": "#89b087" |
||||
}, |
||||
"0\n\n\nCmd", |
||||
{ |
||||
"x": 1 |
||||
}, |
||||
"=\n\n\nHyper" |
||||
], |
||||
[ |
||||
{ |
||||
"y": -0.75, |
||||
"x": 0.5, |
||||
"c": "#77aaff" |
||||
}, |
||||
"Ctrl\n\n\nLCtrl", |
||||
"Meh", |
||||
{ |
||||
"x": 14.5, |
||||
"c": "#89b087" |
||||
}, |
||||
"+\n\n\nMeh", |
||||
"Enter\n\n\nCtrl" |
||||
], |
||||
[ |
||||
{ |
||||
"r": 30, |
||||
"rx": 6.5, |
||||
"ry": 4.25, |
||||
"y": -1, |
||||
"x": 1, |
||||
"c": "#54d6de" |
||||
}, |
||||
"Left", |
||||
"Right" |
||||
], |
||||
[ |
||||
{ |
||||
"h": 2 |
||||
}, |
||||
"Space", |
||||
{ |
||||
"h": 2 |
||||
}, |
||||
"Enter", |
||||
"Up" |
||||
], |
||||
[ |
||||
{ |
||||
"x": 2 |
||||
}, |
||||
"Down" |
||||
], |
||||
[ |
||||
{ |
||||
"r": -30, |
||||
"rx": 13, |
||||
"y": -1, |
||||
"x": -3 |
||||
}, |
||||
"Home", |
||||
"End" |
||||
], |
||||
[ |
||||
{ |
||||
"x": -3 |
||||
}, |
||||
"Page\n\n\n\n\n\nUp", |
||||
{ |
||||
"h": 2 |
||||
}, |
||||
"< Del\n\n\nBackspace", |
||||
{ |
||||
"h": 2 |
||||
}, |
||||
"Del >\n\n\nDelete" |
||||
], |
||||
[ |
||||
{ |
||||
"x": -3 |
||||
}, |
||||
"Page\n\n\n\n\n\nDown" |
||||
] |
||||
] |
After Width: | Height: | Size: 95 KiB |
@ -0,0 +1,8 @@ |
||||
#include "CMD60.h" |
||||
|
||||
void matrix_init_kb(void) { |
||||
// put your keyboard start-up code here
|
||||
// runs once when the firmware starts up
|
||||
|
||||
matrix_init_user(); |
||||
} |
@ -0,0 +1,20 @@ |
||||
#ifndef CMD60_H |
||||
#define CMD60_H |
||||
|
||||
#include "quantum.h" |
||||
|
||||
#define KEYMAP( \ |
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
|
||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||
K40, K41, K42, K45, K4A, K4B, K4C, K4D \
|
||||
) { \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
|
||||
{ K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO,K4A, K4B, K4C, K4D } \
|
||||
} |
||||
|
||||
#endif |
@ -0,0 +1,73 @@ |
||||
|
||||
# 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
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Teensy++ halfKay 1024
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||
|
||||
|
||||
# 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
|
||||
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
|
||||
|
||||
ifndef QUANTUM_DIR |
||||
include ../../../Makefile
|
||||
endif |
||||
|
||||
|
@ -0,0 +1,35 @@ |
||||
CMD60 keyboard firmware |
||||
====================== |
||||
|
||||
##CMD60 |
||||
|
||||
This layout has been designed to optimize use of the left-hand, and it focussed specifically on programmers who work |
||||
with text editors like SublimeText and Atom. It utilizes the power of Space_fn, and features a caps lock swap for Fn2 |
||||
and enter key on tap. These features allow you to keep your right hand on the mouse more and should enable you to |
||||
achieve a higher level of productivity if you take the time to learn its function layers. |
||||
|
||||
## Quantum MK Firmware |
||||
|
||||
For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). |
||||
|
||||
## Building |
||||
|
||||
Download or clone the whole firmware and navigate to the keyboards/handwired/CMD60 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`. |
||||
|
||||
### Other Keymaps |
||||
|
||||
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 **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` |
@ -0,0 +1,162 @@ |
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#ifndef CONFIG_H |
||||
#define CONFIG_H |
||||
|
||||
#include "config_common.h" |
||||
|
||||
/* USB Device descriptor parameter */ |
||||
#define VENDOR_ID 0xFEED |
||||
#define PRODUCT_ID 0x6060 |
||||
#define DEVICE_VER 0x0001 |
||||
#define MANUFACTURER cmd |
||||
#define PRODUCT CMD60 |
||||
#define DESCRIPTION Advanced Programming Keeb Layout |
||||
|
||||
/* key matrix size */ |
||||
#define MATRIX_ROWS 5 |
||||
#define MATRIX_COLS 14 |
||||
|
||||
/*
|
||||
* 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 { F0, F4, F5, F6, F7 } |
||||
#define MATRIX_COL_PINS { B0, B1, B2, B3, B7, D0, D1, D2, D3, C6, D7, B4, B5, B6 } |
||||
#define UNUSED_PINS |
||||
|
||||
/* COL2ROW or ROW2COL */ |
||||
#define DIODE_DIRECTION COL2ROW |
||||
|
||||
// #define BACKLIGHT_PIN B7
|
||||
// #define BACKLIGHT_BREATHING
|
||||
// #define BACKLIGHT_LEVELS 3
|
||||
|
||||
|
||||
/* 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 |
||||
|
||||
/*
|
||||
* 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
|
||||
|
||||
#endif |
@ -0,0 +1,66 @@ |
||||
#include "CMD60.h" |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
[0] = KEYMAP( /* CMD60 - QWERTY */ |
||||
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, \
|
||||
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_BSLS, \
|
||||
LT(3, KC_ENT), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_NO, KC_RSFT, \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, LT(2, KC_SPC), MO(3), MO(4), MO(5), TG(1) \
|
||||
), |
||||
[1] = KEYMAP( /* CMD60 - GameMode */ |
||||
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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
|
||||
KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_RSFT, \
|
||||
KC_TRNS, KC_NO, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
||||
), |
||||
[2] = KEYMAP( /* CMD60 - Arrows */ |
||||
KC_GRV, 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_DEL, \
|
||||
KC_TRNS, KC_BSPC, KC_UP, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_UP, KC_DEL, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \
|
||||
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, \
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
||||
), |
||||
[3] = KEYMAP( /* CMD60 - Functions */ |
||||
KC_GRV, 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_DEL, \
|
||||
KC_AUDIO_MUTE, KC_BSPC, KC_PGUP, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_PAUSE, KC_SLCK, KC_PSCREEN, \
|
||||
KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_INSERT, KC_NO, KC_TRNS, \
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, \
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
||||
), |
||||
[4] = KEYMAP( /* CMD60 - Mouse */ |
||||
KC_SYSTEM_SLEEP, 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_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRNS, KC_NO, KC_TRNS, \
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_WH_UP, KC_MS_BTN3, KC_MS_WH_DOWN, KC_NO, KC_NO, KC_TRNS, \
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
||||
), |
||||
[5] = KEYMAP( /* CMD60 - Media */ |
||||
KC_SYSTEM_WAKE, 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, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_AUDIO_MUTE, \
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_MEDIA_PLAY_PAUSE, \
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WWW_BACK, KC_WWW_FORWARD, KC_NO, KC_NO, KC_WWW_REFRESH, \
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
||||
), |
||||
}; |
||||
|
||||
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,0 +1,89 @@ |
||||
|
||||
#MCU = at90usb1287
|
||||
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
|
||||
|
||||
# for avr upload
|
||||
USB ?= /dev/cu.usbmodem1421
|
||||
#
|
||||
# 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)
|
||||
|
||||
|
||||
ifdef TEENSY2 |
||||
OPT_DEFS += -DATREUS_TEENSY2
|
||||
ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
|
||||
else |
||||
OPT_DEFS += -DATREUS_ASTAR
|
||||
OPT_DEFS += -DCATERINA_BOOTLOADER
|
||||
ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
|
||||
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
|
||||
endif |
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# MCU name
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# 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 ?= no # Console for debug(+400)
|
||||
COMMAND_ENABLE ?= no # 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
|
||||
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
|
||||
RGBLIGHT_ENABLE = yes
|
||||
|
||||
ifndef QUANTUM_DIR |
||||
include ../../../Makefile
|
||||
endif |
||||
|
||||
upload: build |
||||
$(ATREUS_UPLOAD_COMMAND)
|
||||
|
@ -0,0 +1,173 @@ |
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#ifndef CONFIG_H |
||||
#define CONFIG_H |
||||
|
||||
#include "config_common.h" |
||||
|
||||
/* USB Device descriptor parameter */ |
||||
#define VENDOR_ID 0xFEED |
||||
#define PRODUCT_ID 0x6060 |
||||
#define DEVICE_VER 0x0001 |
||||
#define MANUFACTURER You |
||||
#define PRODUCT traveller |
||||
#define DESCRIPTION A custom keyboard |
||||
|
||||
/* key matrix size */ |
||||
#define MATRIX_ROWS 4 |
||||
#define MATRIX_COLS 13 |
||||
|
||||
/*
|
||||
* 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 { D0, D1, D3, D2 } |
||||
// no I can't say why this order seemed like a good idea
|
||||
#define MATRIX_COL_PINS { B5, D6, B7, B6, F6, B1, B3, F7, B4, E6, D7, C6, D4 } |
||||
#define UNUSED_PINS |
||||
|
||||
// LED stuff
|
||||
#define RGB_DI_PIN B2 |
||||
//#define RBLIGHT_TIMER
|
||||
#define RGBLED_NUM 1 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10 |
||||
#define RGBLIGHT_SAT_STEP 17 |
||||
#define RGBLIGHT_VAL_STEP 17 |
||||
|
||||
|
||||
/* COL2ROW or ROW2COL */ |
||||
#define DIODE_DIRECTION COL2ROW |
||||
|
||||
// #define BACKLIGHT_PIN B7
|
||||
// #define BACKLIGHT_BREATHING
|
||||
// #define BACKLIGHT_LEVELS 3
|
||||
|
||||
|
||||
/* 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 */ |
||||
#define BACKLIGHT_LEVELS 3 |
||||
|
||||
/* 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)) \
|
||||
) |
||||
|
||||
/* 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
|
||||
|
||||
#endif |
@ -0,0 +1,305 @@ |
||||
#include "traveller.h" |
||||
#include "mousekey.h" |
||||
#include "action_layer.h" |
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
#define _QW 0 |
||||
#define _LW 1 |
||||
#define _HI 2 |
||||
#define _NAV 4 |
||||
#define _CUR 5 |
||||
#define _FKEYS 6 |
||||
#define _TRNS 8 |
||||
|
||||
// We do the same trick for functions
|
||||
#define RGBLED_TOGGLE 10 |
||||
#define _HIOUT 15 |
||||
#define _LWOUT 16 |
||||
// Macros
|
||||
#define MDL 4 |
||||
#define MDR 5 |
||||
#define MUR 6 |
||||
#define MUL 3 |
||||
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
/* Qwerty
|
||||
* ,-----------------------------------------. .-----------------------------------------. |
||||
* | NAV | ` ~ | W | E | R | T | | Y | U | I | O | - | = | |
||||
* |------+------+------+------+------+------| |------+------+------+------+------+------| |
||||
* | Tab | Q | S | D | F | G | | H | J | K | L | P | \ | |
||||
* |------+------+------+------+------+------|------+------+------+------+------+------+------| |
||||
*|ctrl/esc| A | X | C | V | B |Ctrl /| N | M | , | . | ; | ' | |
||||
* |------+------+------+------+------+------+ // +------+------+------+------+------+------|
|
||||
* | Shift| Z | Del | GUI | Low | Bspc |/Enter| Spc | Hi | GUI | Alt | / |Shift | |
||||
* `------------------------------------------------------------------------------------------' |
||||
*
|
||||
*/ |
||||
[_QW] = KEYMAP(
|
||||
F(_NAV), KC_GRV, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_MINS, KC_EQL, |
||||
KC_TAB, KC_Q, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_P, KC_BSLS, |
||||
CTL_T(KC_ESC), KC_A, KC_X, KC_C, KC_V, KC_B, KC_RCTL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SCLN, KC_QUOT, |
||||
KC_LSFT, KC_Z, KC_DEL, KC_LGUI, MO(_LW), KC_BSPC, KC_ENTER, KC_SPC, MO(_HI), KC_RGUI, KC_RALT, KC_SLSH, KC_RSFT |
||||
), |
||||
|
||||
/* LOW - numbers, missing or awkward programming keys
|
||||
Doubled 1 key allows lazy reach with ring finger.
|
||||
* ,-----------------------------------------. .-----------------------------------------. |
||||
* | FKeys| 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |Ctrl-alt-del| |
||||
* |------+------+------+------+------+------| +------+------+------+------+------+------| |
||||
* | Tab | 1 | ] | ( | ) | | | * | ( | ) | [ | | | |
||||
* |------+------+------+------+------+------|------+------+------+------+------+------+------| |
||||
* | Caps | [ | | { | } | ` | /| # | { | } | | ] | | |
||||
* |------+------+------+------+------+------+ // +------+------+------+------+------+------|
|
||||
* | Shift| | | | Low | |/ | | Hi | | | |Shift | |
||||
* `------------------------------------------------------------------------------------------' |
||||
*
|
||||
*/ |
||||
|
||||
[_LW] = KEYMAP(
|
||||
F(_FKEYS), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, LCTL(LALT(KC_DEL)) , |
||||
KC_TRNS, KC_1, KC_RBRC, KC_LPRN, KC_RPRN, KC_NO, KC_ASTR, KC_LPRN, KC_RPRN, KC_LBRC, KC_NO, KC_NO, |
||||
KC_CAPS, KC_LBRC, KC_NO, KC_LCBR, KC_RCBR, KC_TILD, KC_TRNS, KC_HASH, KC_LCBR, KC_RCBR, KC_NO, KC_RBRC, KC_NO, |
||||
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 |
||||
), |
||||
|
||||
/* HI - Punctuation, shell and
|
||||
url ://@.com row on bottom, && is opposite || ^$ are in regex order: ^.*$
|
||||
Right hand nav keys work pretty well chorded with the Right hand Hi Key |
||||
* ,-----------------------------------------. .-----------------------------------------. |
||||
* |FKEYS | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + | |
||||
* |------+------+------+------+------+------| |------+------+------+------+------+------| |
||||
* | | ! | & | "|" | $ | % | | Vol+| Mute| | | | | |
||||
* |------+------+------+------+------+------|------+------+------+------+------+------+------| |
||||
* | CAPS | ^ | : | . | * | - | /| Vol-| Play | PgUp | Home | Up | End | |
||||
* |------+------+------+------+------+------+ // +------+------+------+------+------+------|
|
||||
* | | / | | | Low | |/ | | Hi | PgDn | Left| Down | Right | |
||||
* `------------------------------------------------------------------------------------------' |
||||
*
|
||||
*/ |
||||
|
||||
[_HI] = KEYMAP(
|
||||
F(_FKEYS), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS, |
||||
KC_TRNS, KC_EXLM, KC_AMPR, KC_PIPE, KC_DLR, KC_PERC, KC_VOLU, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_CAPS, KC_CIRC, KC_COLN, KC_DOT, KC_ASTR, KC_MINS, KC_TRNS, KC_VOLD, KC_PPLS, KC_PGUP, KC_HOME, KC_UP, KC_END, |
||||
KC_TRNS, KC_SLSH, KC_TRNS, KC_TRNS, F(_LW), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
),
|
||||
|
||||
/* NAV - mouse & navigation
|
||||
//gui left and right are line home/end, or fore & back in browser
|
||||
// Mouse buttons are reversed for comfort - bigger stretch is to the right button.
|
||||
|
||||
* ,-----------------------------------------. .-----------------------------------------. |
||||
* | NAV | | | Up | |Gui-> | | MwU | MS_UL| MS_U |MS_UR | |Ms Norm| |
||||
* |------+------+------+------+------+------| |------+------+------+------+------+--------| |
||||
* | |Gui<- | Left | Down |Right | C^E | | BTN3 | MS_L |MS Up | MS_R | |Ms Fast | |
||||
* |------+------+------+------+------+------|------|------+------+------+------+------+--------| |
||||
* | | C^A | GUI X| GUI C| GUI_V| |Enter/| MWD | M_DL |MS Dwn|MS_DR | Up |Ms Slow | |
||||
* |------+------+------+------+------+------+ // +------+------+------+------+------+------|
|
||||
* | | GuiZ | | | Low | |/ButnR|ButnL | Hi | | Left | Down | Right | |
||||
* `------------------------------------------------------------------------------------------' |
||||
*/ |
||||
|
||||
[_NAV] = KEYMAP(
|
||||
F(_NAV), KC_NO, KC_NO, KC_UP, KC_NO, RGUI(KC_RIGHT), KC_WH_U, M(MUL), KC_MS_U, M(MUR), KC_NO, KC_ACL2, |
||||
KC_TRNS, RGUI(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_E), KC_BTN3, KC_MS_L, KC_MS_U, KC_MS_R, KC_NO, KC_ACL1, |
||||
KC_TRNS, LCTL(KC_A), LGUI(KC_X),RGUI(KC_C), RGUI(KC_V),KC_NO, KC_ENTER, KC_WH_D, M(MDL), KC_MS_D, M(MDR), KC_UP, KC_ACL0, |
||||
KC_TRNS, RGUI(KC_Z), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT |
||||
), |
||||
|
||||
/* FKEYS - Funtion keys & mac stuff
|
||||
* ,-----------------------------------------. .-----------------------------------------. |
||||
* | FKEYS| F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | Ctrl |
|
||||
* |------+------+------+------+------+------| |------+------+------+------+------+------| |
||||
* | | | | | | | | F11 | F12 | F13 | F14 | F15 | Alt | |
||||
* |------+------+------+------+------+------|------+------+------+------+------+------+------| |
||||
* |Qwerty| | | | | | /| | | | | | Del | |
||||
* |------+------+------+------+------+------+ // +------+------+------+------+------+------|
|
||||
* | . |RGBTog| . | | LO | Bspc |/ | | HI | | | | | |
||||
* `------------------------------------------------------------------------------------------' |
||||
* |
||||
*/
|
||||
|
||||
[_FKEYS] = KEYMAP(
|
||||
F(_FKEYS), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_RCTL, |
||||
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_LALT , |
||||
F(_QW), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL, |
||||
KC_TRNS, F(RGBLED_TOGGLE), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS |
||||
), |
||||
|
||||
|
||||
/* TRNS - skeleton for laters
|
||||
* ,-----------------------------------------. .-----------------------------------------. |
||||
* | . | . | . | . | . | . | | ^ | & | * | ( | ) | | |
||||
* |------+------+------+------+------+------| |------+------+------+------+------+------| |
||||
* | . | . | . | . | . | . | | 6 | 7 | 8 | 9 | 0 | | |
||||
* |------+------+------+------+------+------|------+------+------+------+------+------+------| |
||||
* | . | . | . | . | . | . | /| | | | . | ; | " | |
||||
* |------+------+------+------+------+------+ // +------+------+------+------+------+------|
|
||||
* | . | . | . | GUI | LO | . |/ | Spc | HI | GUI | M0 | / |LSFT | |
||||
* `------------------------------------------------------------------------------------------' |
||||
*
|
||||
*/ |
||||
|
||||
[_TRNS] = { |
||||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, 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_NO, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} |
||||
} |
||||
|
||||
|
||||
}; |
||||
|
||||
|
||||
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), |
||||
|
||||
}; |
||||
|
||||
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); |
||||
#ifdef BACKLIGHT_ENABLE |
||||
backlight_step(); |
||||
#endif |
||||
} else { |
||||
unregister_code(KC_RSFT); |
||||
} |
||||
break; |
||||
|
||||
// from algernon's ErgoDox EZ layout,
|
||||
case MUL: |
||||
if (record->event.pressed) { |
||||
mousekey_on(KC_MS_UP); |
||||
mousekey_on(KC_MS_LEFT); |
||||
} else { |
||||
mousekey_off(KC_MS_UP); |
||||
mousekey_off(KC_MS_LEFT); |
||||
} |
||||
mousekey_send(); |
||||
break; |
||||
|
||||
case MUR: |
||||
if (record->event.pressed) { |
||||
mousekey_on(KC_MS_UP); |
||||
mousekey_on(KC_MS_RIGHT); |
||||
} else { |
||||
mousekey_off(KC_MS_UP); |
||||
mousekey_off(KC_MS_RIGHT); |
||||
} |
||||
mousekey_send(); |
||||
break; |
||||
|
||||
case MDL: |
||||
if (record->event.pressed) { |
||||
mousekey_on(KC_MS_DOWN); |
||||
mousekey_on(KC_MS_LEFT); |
||||
} else { |
||||
mousekey_off(KC_MS_DOWN); |
||||
mousekey_off(KC_MS_LEFT); |
||||
} |
||||
mousekey_send(); |
||||
break; |
||||
|
||||
case MDR: |
||||
if (record->event.pressed) { |
||||
mousekey_on(KC_MS_DOWN); |
||||
mousekey_on(KC_MS_RIGHT); |
||||
} else { |
||||
mousekey_off(KC_MS_DOWN); |
||||
mousekey_off(KC_MS_RIGHT); |
||||
} |
||||
mousekey_send(); |
||||
break; |
||||
|
||||
|
||||
} |
||||
return MACRO_NONE; |
||||
}; |
||||
|
||||
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { |
||||
switch (id) { |
||||
case RGBLED_TOGGLE: |
||||
//led operations
|
||||
if (record->event.pressed) { |
||||
rgblight_toggle(); |
||||
} |
||||
break; |
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
void LayerLEDSet(uint8_t layr) { |
||||
|
||||
switch (layr) { |
||||
case _QW: |
||||
rgblight_setrgb(0,20, 0); // dim green
|
||||
break; |
||||
case _LW: |
||||
// deep purple
|
||||
rgblight_setrgb(20,0,35);
|
||||
break;
|
||||
case _HI: |
||||
// light blue
|
||||
rgblight_setrgb(0,20,20);
|
||||
break;
|
||||
case _NAV: |
||||
// Yellowy orange
|
||||
rgblight_setrgb(25,20,0); // brighter
|
||||
break; |
||||
case _FKEYS: |
||||
// RED
|
||||
rgblight_setrgb(20,0,0); // brighter
|
||||
break;
|
||||
default: |
||||
rgblight_setrgb(20,2,20);//error
|
||||
break; |
||||
} |
||||
|
||||
return; |
||||
|
||||
} |
||||
|
||||
void matrix_init_user(void) { |
||||
} |
||||
|
||||
// Bleah globals need to be initialized.
|
||||
uint8_t old_layer=_QW; |
||||
|
||||
void matrix_scan_user(void) { |
||||
uint8_t layer = biton32(layer_state); |
||||
if (old_layer != layer) { |
||||
LayerLEDSet(layer); |
||||
old_layer=layer; |
||||
} |
||||
} |
||||
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
||||
return true; |
||||
} |
||||
|
||||
void led_set_user(uint8_t usb_led) { |
||||
|
||||
} |
||||
|
||||
|
@ -0,0 +1,2 @@ |
||||
# The default keymap for handwired/traveller |
||||
this is a kitchen sink build |
@ -0,0 +1,35 @@ |
||||
traveler keyboard firmware |
||||
====================== |
||||
|
||||
## Traveller Specific Info ## |
||||
The traveller is a varient on the atreus keyboard. |
||||
Like the Atreus, it is designed to be a good compromise between size and ergonomics. |
||||
|
||||
key differences are |
||||
- an additional column for each pinky |
||||
- an RGB LED in the center to show the current layer |
||||
- more finger stagger, splay angle and contoured keycaps (F2 profile for space key). |
||||
|
||||
You can make your own traveller keyboard by using the openscad tools from the atreus repository, and adding a hole for the LED to shine through. |
||||
|
||||
## Quantum MK Firmware |
||||
|
||||
For the full Quantum feature list, see [the parent README.md](/README.md). |
||||
|
||||
## Building |
||||
|
||||
Download or clone the whole firmware and navigate to the keyboard/traveler 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`. |
||||
|
||||
### 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. |
@ -0,0 +1,61 @@ |
||||
#include "traveller.h" |
||||
|
||||
__attribute__ ((weak)) |
||||
void matrix_init_user(void) { |
||||
// leave this function blank - it can be defined in a keymap file
|
||||
}; |
||||
|
||||
__attribute__ ((weak)) |
||||
void matrix_scan_user(void) { |
||||
// leave this function blank - it can be defined in a keymap file
|
||||
} |
||||
|
||||
__attribute__ ((weak)) |
||||
void process_action_user(keyrecord_t *record) { |
||||
// leave this function blank - it can be defined in a keymap file
|
||||
} |
||||
|
||||
__attribute__ ((weak)) |
||||
void led_set_user(uint8_t usb_led) { |
||||
// leave this function blank - it can be defined in a keymap file
|
||||
} |
||||
|
||||
void matrix_init_kb(void) { |
||||
// put your keyboard start-up code here
|
||||
// runs once when the firmware starts up
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE |
||||
rgblight_init(); |
||||
rgblight_mode(1); // solid, no timer
|
||||
rgblight_setrgb(0,20,0);// dim green, happens to be same as _QW
|
||||
#endif |
||||
|
||||
// Turn status LED on
|
||||
DDRC |= (1<<7); |
||||
PORTC |= (1<<7); |
||||
|
||||
matrix_init_user(); |
||||
} |
||||
|
||||
|
||||
void matrix_scan_kb(void) { |
||||
// put your looping keyboard code here
|
||||
// runs every cycle (a lot)
|
||||
|
||||
matrix_scan_user(); |
||||
} |
||||
|
||||
bool process_record_kb(uint16_t keycode, keyrecord_t *record) { |
||||
// put your per-action keyboard code here
|
||||
// runs for every action, just before processing by the firmware
|
||||
|
||||
return process_record_user(keycode, record); |
||||
} |
||||
|
||||
void led_set_kb(uint8_t usb_led) { |
||||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||
|
||||
led_set_user(usb_led); |
||||
} |
||||
|
||||
|
@ -0,0 +1,32 @@ |
||||
#ifndef TRAVELLER_H |
||||
#define TRAVELLER_H |
||||
|
||||
#include "quantum.h" |
||||
#include "led.h" |
||||
|
||||
#ifdef RGBLIGHT_ENABLE |
||||
#include "rgblight.h" |
||||
#endif |
||||
#ifdef BACKLIGHT_ENABLE |
||||
#include "backlight.h" |
||||
#endif |
||||
|
||||
|
||||
|
||||
// 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
|
||||
#define KEYMAP( \ |
||||
k00, k01, k02, k03, k04, k05, k07, k08, k09, k0a, k0b, k0c, \
|
||||
k10, k11, k12, k13, k14, k15, k17, k18, k19, k1a, k1b, k1c, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
|
||||
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c \
|
||||
) \
|
||||
{ \
|
||||
{ k00, k01, k02, k03, k04, k05, KC_NO, k07, k08, k09, k0a, k0b, k0c }, \
|
||||
{ k10, k11, k12, k13, k14, k15, KC_NO, k17, k18, k19, k1a, k1b, k1c }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c }, \
|
||||
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c } \
|
||||
} |
||||
|
||||
#endif |
@ -0,0 +1,4 @@ |
||||
JD45 keyboard firmware |
||||
====================== |
||||
|
||||
TODO: to be updated. |
@ -0,0 +1,79 @@ |
||||
|
||||
## Project specific files
|
||||
|
||||
SRC= matrix.c
|
||||
|
||||
# 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
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Teensy++ halfKay 1024
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=1024
|
||||
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
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
|
||||
# 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
|
||||
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 should be port E6, current quantum library hardcodes C6, which we use for programming
|
||||
CUSTOM_MATRIX=yes # need to do our own thing with the matrix
|
||||
|
||||
ifndef QUANTUM_DIR |
||||
include ../../Makefile
|
||||
endif |
||||
|
||||
|
@ -0,0 +1,174 @@ |
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#ifndef CONFIG_H |
||||
#define CONFIG_H |
||||
|
||||
#include "config_common.h" |
||||
|
||||
/* USB Device descriptor parameter */ |
||||
#define VENDOR_ID 0xFEED |
||||
#define PRODUCT_ID 0x6060 |
||||
#define DEVICE_VER 0x0001 |
||||
#define MANUFACTURER You |
||||
#define PRODUCT kinesis-advantage |
||||
#define DESCRIPTION A custom keyboard |
||||
|
||||
// Mouse
|
||||
#define MOUSEKEY_DELAY 20 |
||||
#define MOUSEKEY_INTERVAL 20 |
||||
#define MOUSEKEY_MAX_SPEED 4 |
||||
#define MOUSEKEY_TIME_TO_MAX 20 |
||||
#define MOUSEKEY_WHEEL_MAX_SPEED 1 |
||||
#define MOUSEKEY_WHEEL_DELTA 1 |
||||
#define MOUSEKEY_WHEEL_TIME_TO_MAX 1 |
||||
|
||||
/* key matrix size */ |
||||
#define MATRIX_ROWS 16 |
||||
#define MATRIX_COLS 8 |
||||
|
||||
/*
|
||||
* 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) |
||||
* |
||||
*/ |
||||
//Passed through the port multipler, so 4 pins =16
|
||||
#define MATRIX_ROW_PINS { F0,F1, F2, F3 } |
||||
|
||||
// May be upside down.
|
||||
#define MATRIX_COL_PINS { B0,B1, B2, B3, B4, B5, B6, B7 } |
||||
#define UNUSED_PINS |
||||
|
||||
/* COL2ROW or ROW2COL */ |
||||
#define DIODE_DIRECTION COL2ROW |
||||
|
||||
// #define BACKLIGHT_PIN B7
|
||||
// #define BACKLIGHT_BREATHING
|
||||
// #define BACKLIGHT_LEVELS 3
|
||||
|
||||
|
||||
/* 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 |
||||
|
||||
/*
|
||||
* 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
|
||||
|
||||
#endif |
@ -0,0 +1,232 @@ |
||||
EESchema-LIBRARY Version 2.3 Date: Wednesday, November 12, 2014 'pmt' 10:15:19 pm |
||||
#encoding utf-8 |
||||
# |
||||
# AT90S4414-P |
||||
# |
||||
DEF AT90S4414-P IC 0 40 Y Y 1 F N |
||||
F0 "IC" -850 1880 40 H V L BNN |
||||
F1 "AT90S4414-P" 450 -1950 40 H V L BNN |
||||
F2 "DIL40" 0 0 30 H V C CIN |
||||
F3 "~" 0 0 60 H V C CNN |
||||
ALIAS AT90S8515-P |
||||
$FPLIST |
||||
40DIP-ELL600 |
||||
40dip600 |
||||
$ENDFPLIST |
||||
DRAW |
||||
S -850 1850 850 -1850 0 1 10 f |
||||
X (T0)PB0 1 1000 700 150 L 40 40 1 1 B |
||||
X (T1)PB1 2 1000 600 150 L 40 40 1 1 B |
||||
X (AIN0)PB2 3 1000 500 150 L 40 40 1 1 B |
||||
X (AIN1)PB3 4 1000 400 150 L 40 40 1 1 B |
||||
X (~SS~)PB4 5 1000 300 150 L 40 40 1 1 B |
||||
X (MOSI)PB5 6 1000 200 150 L 40 40 1 1 B |
||||
X (MISO)PB6 7 1000 100 150 L 40 40 1 1 B |
||||
X (SCK)PB7 8 1000 0 150 L 40 40 1 1 B |
||||
X ~RESET 9 -1000 1700 150 R 40 40 1 1 I |
||||
X (RXD)PD0 10 1000 -1000 150 L 40 40 1 1 B |
||||
X GND 20 0 -2000 150 U 40 40 1 1 W |
||||
X ALE 30 1000 850 150 L 40 40 1 1 O |
||||
X VCC 40 0 2000 150 D 40 40 1 1 W |
||||
X (TXD)PD1 11 1000 -1100 150 L 40 40 1 1 B |
||||
X (A8)PC0 21 1000 -150 150 L 40 40 1 1 B |
||||
X ICP 31 -1000 -1400 150 R 40 40 1 1 I |
||||
X (INT0)PD2 12 1000 -1200 150 L 40 40 1 1 B |
||||
X (A9)PC1 22 1000 -250 150 L 40 40 1 1 B |
||||
X (AD7)PA7 32 1000 1000 150 L 40 40 1 1 B |
||||
X (INT1)PD3 13 1000 -1300 150 L 40 40 1 1 B |
||||
X (A10)PC2 23 1000 -350 150 L 40 40 1 1 B |
||||
X (AD6)PA6 33 1000 1100 150 L 40 40 1 1 B |
||||
X PD4 14 1000 -1400 150 L 40 40 1 1 B |
||||
X (A11)PC3 24 1000 -450 150 L 40 40 1 1 B |
||||
X (AD5)PA5 34 1000 1200 150 L 40 40 1 1 B |
||||
X (OC1A)PD5 15 1000 -1500 150 L 40 40 1 1 B |
||||
X (A12)PC4 25 1000 -550 150 L 40 40 1 1 B |
||||
X (AD4)PA4 35 1000 1300 150 L 40 40 1 1 B |
||||
X (~WR~)PD6 16 1000 -1600 150 L 40 40 1 1 B |
||||
X (A13)PC5 26 1000 -650 150 L 40 40 1 1 B |
||||
X (AD3)PA3 36 1000 1400 150 L 40 40 1 1 B |
||||
X (~RD~)PD7 17 1000 -1700 150 L 40 40 1 1 B |
||||
X (A14)PC6 27 1000 -750 150 L 40 40 1 1 B |
||||
X (AD2)PA2 37 1000 1500 150 L 40 40 1 1 B |
||||
X XTAL2 18 -1000 1200 150 R 40 40 1 1 B |
||||
X (A15)PC7 28 1000 -850 150 L 40 40 1 1 B |
||||
X (AD1)PA1 38 1000 1600 150 L 40 40 1 1 B |
||||
X XTAL1 19 -1000 800 150 R 40 40 1 1 B |
||||
X OC1B 29 -1000 -1500 150 R 40 40 1 1 W |
||||
X (AD0)PA0 39 1000 1700 150 L 40 40 1 1 B |
||||
ENDDRAW |
||||
ENDDEF |
||||
# |
||||
# ATMEGA16U4-A |
||||
# |
||||
DEF ATMEGA16U4-A U 0 40 Y Y 1 F N |
||||
F0 "U" -950 1700 40 H V C CNN |
||||
F1 "ATMEGA16U4-A" 700 -1500 40 H V C CNN |
||||
F2 "TQFP44" 0 0 35 H V C CIN |
||||
F3 "~" 1100 1100 60 H V C CNN |
||||
ALIAS ATMEGA16U4RC-A ATMEGA32U4-A ATMEGA32U4RC-A |
||||
$FPLIST |
||||
TQFP44 |
||||
$ENDFPLIST |
||||
DRAW |
||||
S -1000 1650 950 -1450 0 1 10 f |
||||
X (INT6/AIN0)PE6 1 1100 -650 150 L 40 40 1 1 B |
||||
X UVCC 2 -450 1800 150 D 40 40 1 1 W |
||||
X D- 3 -1150 100 150 R 40 40 1 1 B |
||||
X D+ 4 -1150 200 150 R 40 40 1 1 B |
||||
X UGND 5 -400 -1600 150 U 40 40 1 1 P |
||||
X UCAP 6 -1150 -50 150 R 40 40 1 1 P |
||||
X VBUS 7 -1150 350 150 R 40 40 1 1 P |
||||
X (SS/PCINT0)PB0 8 1100 1550 150 L 40 40 1 1 B |
||||
X (SCLK/PCINT1)PB1 9 1100 1450 150 L 40 40 1 1 B |
||||
X (PDI/MOSI/PCINT2)PB2 10 1100 1350 150 L 40 40 1 1 B |
||||
X (RXD/INT2)PD2 20 1100 150 150 L 40 40 1 1 B |
||||
X (ADC13/OC1B/OC4B/PCINT13)PB6 30 1100 950 150 L 40 40 1 1 B |
||||
X (ADC1)PF1 40 1100 -950 150 L 40 40 1 1 B |
||||
X (PDO/MISO/PCINT3)PB3 11 1100 1250 150 L 40 40 1 1 B |
||||
X (TXD/INT3)PD3 21 1100 50 150 L 40 40 1 1 B |
||||
X (OC3A/~OC4A~)PC6 31 1100 650 150 L 40 40 1 1 B |
||||
X (ADC0)PF0 41 1100 -850 150 L 40 40 1 1 B |
||||
X (OC0A/OC1C/~RTS~/PCINT7)PB7 12 1100 850 150 L 40 40 1 1 B |
||||
X (XCK1/~CTS~)PD5 22 1100 -150 150 L 40 40 1 1 B |
||||
X (ICP3/CLK0/OC4A)PC7 32 1100 550 150 L 40 40 1 1 B |
||||
X AREF 42 -1150 -850 150 R 40 40 1 1 P |
||||
X ~RESET~ 13 -1150 1550 150 R 40 40 1 1 I |
||||
X GND 23 -50 -1600 150 U 40 40 1 1 W |
||||
X (~HWB~)PE2 33 1100 -550 150 L 40 40 1 1 B |
||||
X GND 43 150 -1600 150 U 40 40 1 1 W |
||||
X VCC 14 -200 1800 150 D 40 40 1 1 W |
||||
X AVCC 24 150 1800 150 D 40 40 1 1 W |
||||
X VCC 34 -100 1800 150 D 40 40 1 1 W |
||||
X AVCC 44 250 1800 150 D 40 40 1 1 W |
||||
X GND 15 -150 -1600 150 U 40 40 1 1 W |
||||
X (ICP2/ADC8)PD4 25 1100 -50 150 L 40 40 1 1 B |
||||
X GND 35 50 -1600 150 U 40 40 1 1 W |
||||
X XTAL2 16 -1150 950 150 R 40 40 1 1 O |
||||
X (T1/~OC4D~/ADC9)PD6 26 1100 -250 150 L 40 40 1 1 B |
||||
X (ADC7/TDI)PF7 36 1100 -1350 150 L 40 40 1 1 B |
||||
X XTAL1 17 -1150 1150 150 R 40 40 1 1 I |
||||
X (T0/OC4D/ADC10)PD7 27 1100 -350 150 L 40 40 1 1 B |
||||
X (ADC6/TDO)PF6 37 1100 -1250 150 L 40 40 1 1 B |
||||
X (OC0B/SCL/INT0)PD0 18 1100 350 150 L 40 40 1 1 B |
||||
X (ADC11/PCINT4)PB4 28 1100 1150 150 L 40 40 1 1 B |
||||
X (ADC5/TMS)PF5 38 1100 -1150 150 L 40 40 1 1 B |
||||
X (SDA/INT1)PD1 19 1100 250 150 L 40 40 1 1 B |
||||
X (ADC12/OC1A/~OC4B~/PCINT12)PB5 29 1100 1050 150 L 40 40 1 1 B |
||||
X (ADC4/TCK)PF4 39 1100 -1050 150 L 40 40 1 1 B |
||||
ENDDRAW |
||||
ENDDEF |
||||
# |
||||
# C |
||||
# |
||||
DEF C C 0 10 N Y 1 F N |
||||
F0 "C" 0 100 40 H V L CNN |
||||
F1 "C" 6 -85 40 H V L CNN |
||||
F2 "~" 38 -150 30 H V C CNN |
||||
F3 "~" 0 0 60 H V C CNN |
||||
$FPLIST |
||||
SM* |
||||
C? |
||||
C1-1 |
||||
$ENDFPLIST |
||||
DRAW |
||||
P 2 0 1 20 -80 -30 80 -30 N |
||||
P 2 0 1 20 -80 30 80 30 N |
||||
X ~ 1 0 200 170 D 40 40 1 1 P |
||||
X ~ 2 0 -200 170 U 40 40 1 1 P |
||||
ENDDRAW |
||||
ENDDEF |
||||
# |
||||
# CONN_7 |
||||
# |
||||
DEF CONN_7 P 0 40 Y N 1 F N |
||||
F0 "P" -30 0 60 V V C CNN |
||||
F1 "CONN_7" 70 0 60 V V C CNN |
||||
F2 "~" 0 0 60 H V C CNN |
||||
F3 "~" 0 0 60 H V C CNN |
||||
DRAW |
||||
S -100 350 150 -350 0 1 0 N |
||||
X P1 1 -350 300 250 R 50 50 1 1 P I |
||||
X P2 2 -350 200 250 R 50 50 1 1 P I |
||||
X P3 3 -350 100 250 R 50 50 1 1 P I |
||||
X P4 4 -350 0 250 R 50 50 1 1 P I |
||||
X P5 5 -350 -100 250 R 50 50 1 1 P I |
||||
X P6 6 -350 -200 250 R 50 50 1 1 P I |
||||
X P7 7 -350 -300 250 R 50 50 1 1 P I |
||||
ENDDRAW |
||||
ENDDEF |
||||
# |
||||
# GND |
||||
# |
||||
DEF ~GND #PWR 0 0 Y Y 1 F P |
||||
F0 "#PWR" 0 0 30 H I C CNN |
||||
F1 "GND" 0 -70 30 H I C CNN |
||||
F2 "~" 0 0 60 H V C CNN |
||||
F3 "~" 0 0 60 H V C CNN |
||||
DRAW |
||||
P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N |
||||
X GND 1 0 0 0 U 30 30 1 1 W N |
||||
ENDDRAW |
||||
ENDDEF |
||||
# |
||||
# R |
||||
# |
||||
DEF R R 0 0 N Y 1 F N |
||||
F0 "R" 80 0 40 V V C CNN |
||||
F1 "R" 7 1 40 V V C CNN |
||||
F2 "~" -70 0 30 V V C CNN |
||||
F3 "~" 0 0 30 H V C CNN |
||||
$FPLIST |
||||
R? |
||||
SM0603 |
||||
SM0805 |
||||
R?-* |
||||
SM1206 |
||||
$ENDFPLIST |
||||
DRAW |
||||
S -40 150 40 -150 0 1 12 N |
||||
X ~ 1 0 250 100 D 60 60 1 1 P |
||||
X ~ 2 0 -250 100 U 60 60 1 1 P |
||||
ENDDRAW |
||||
ENDDEF |
||||
# |
||||
# USB-MINI-B |
||||
# |
||||
DEF USB-MINI-B CON 0 40 Y Y 1 F N |
||||
F0 "CON" -250 450 60 H V C CNN |
||||
F1 "USB-MINI-B" -50 -500 60 H V C CNN |
||||
F2 "~" 0 0 60 H V C CNN |
||||
F3 "~" 0 0 60 H V C CNN |
||||
$FPLIST |
||||
USB-Mini-B-Jack |
||||
$ENDFPLIST |
||||
DRAW |
||||
S -350 400 350 -400 0 1 0 N |
||||
X VBUS 1 -550 300 200 R 50 50 1 1 W |
||||
X D- 2 -550 150 200 R 50 50 1 1 B |
||||
X D+ 3 -550 0 200 R 50 50 1 1 B |
||||
X ID 4 -550 -150 200 R 50 50 1 1 B |
||||
X GND 5 -550 -300 200 R 50 50 1 1 W |
||||
X SHELL1 6 550 300 200 L 50 50 1 1 B |
||||
X SHELL2 7 550 150 200 L 50 50 1 1 B |
||||
X SHELL3 8 550 -150 200 L 50 50 1 1 B |
||||
X SHELL4 9 550 -300 200 L 50 50 1 1 B |
||||
ENDDRAW |
||||
ENDDEF |
||||
# |
||||
# VCC |
||||
# |
||||
DEF VCC #PWR 0 0 Y Y 1 F P |
||||
F0 "#PWR" 0 100 30 H I C CNN |
||||
F1 "VCC" 0 100 30 H V C CNN |
||||
F2 "~" 0 0 60 H V C CNN |
||||
F3 "~" 0 0 60 H V C CNN |
||||
DRAW |
||||
X VCC 1 0 0 0 U 20 20 0 0 W N |
||||
C 0 50 20 0 1 0 N |
||||
P 3 0 1 0 0 0 0 30 0 30 N |
||||
ENDDRAW |
||||
ENDDEF |
||||
# |
||||
#End Library |
@ -0,0 +1,83 @@ |
||||
update=Wednesday, November 05, 2014 'pmt' 12:08:47 pm |
||||
version=1 |
||||
last_client=pcbnew |
||||
[cvpcb] |
||||
version=1 |
||||
NetIExt=net |
||||
[cvpcb/libraries] |
||||
EquName1=devcms |
||||
[general] |
||||
version=1 |
||||
[eeschema] |
||||
version=1 |
||||
PageLayoutDescrFile= |
||||
SubpartIdSeparator=0 |
||||
SubpartFirstId=65 |
||||
LibDir=../../../lib/kicad/library |
||||
NetFmtName= |
||||
RptD_X=0 |
||||
RptD_Y=100 |
||||
RptLab=1 |
||||
LabSize=60 |
||||
[eeschema/libraries] |
||||
LibName1=power |
||||
LibName2=device |
||||
LibName3=transistors |
||||
LibName4=conn |
||||
LibName5=linear |
||||
LibName6=regul |
||||
LibName7=74xx |
||||
LibName8=cmos4000 |
||||
LibName9=adc-dac |
||||
LibName10=memory |
||||
LibName11=xilinx |
||||
LibName12=special |
||||
LibName13=microcontrollers |
||||
LibName14=dsp |
||||
LibName15=microchip |
||||
LibName16=analog_switches |
||||
LibName17=motorola |
||||
LibName18=texas |
||||
LibName19=intel |
||||
LibName20=audio |
||||
LibName21=interface |
||||
LibName22=digital-audio |
||||
LibName23=philips |
||||
LibName24=display |
||||
LibName25=cypress |
||||
LibName26=siliconi |
||||
LibName27=opto |
||||
LibName28=atmel |
||||
LibName29=contrib |
||||
LibName30=valves |
||||
LibName31=custom |
||||
[pcbnew] |
||||
version=1 |
||||
LastNetListRead= |
||||
UseCmpFile=1 |
||||
PadDrill=1.016000000000 |
||||
PadDrillOvalY=1.016000000000 |
||||
PadSizeH=1.524000000000 |
||||
PadSizeV=1.524000000000 |
||||
PcbTextSizeV=1.500000000000 |
||||
PcbTextSizeH=1.500000000000 |
||||
PcbTextThickness=0.300000000000 |
||||
ModuleTextSizeV=1.000000000000 |
||||
ModuleTextSizeH=1.000000000000 |
||||
ModuleTextSizeThickness=0.150000000000 |
||||
SolderMaskClearance=0.000000000000 |
||||
SolderMaskMinWidth=0.000000000000 |
||||
DrawSegmentWidth=0.200000000000 |
||||
BoardOutlineThickness=0.100000000000 |
||||
ModuleOutlineThickness=0.150000000000 |
||||
[pcbnew/libraries] |
||||
LibDir=../../../lib/kicad/modules |
||||
LibName1=custom |
||||
LibName2=Sockets |
||||
LibName3=Connect |
||||
LibName4=Discret |
||||
LibName5=Divers |
||||
LibName6=Display |
||||
LibName7=LEDs |
||||
LibName8=SMD_Packages |
||||
LibName9=Sockets_DIP |
@ -0,0 +1,634 @@ |
||||
EESchema Schematic File Version 2 |
||||
LIBS:power |
||||
LIBS:device |
||||
LIBS:transistors |
||||
LIBS:conn |
||||
LIBS:linear |
||||
LIBS:regul |
||||
LIBS:74xx |
||||
LIBS:cmos4000 |
||||
LIBS:adc-dac |
||||
LIBS:memory |
||||
LIBS:xilinx |
||||
LIBS:special |
||||
LIBS:microcontrollers |
||||
LIBS:dsp |
||||
LIBS:microchip |
||||
LIBS:analog_switches |
||||
LIBS:motorola |
||||
LIBS:texas |
||||
LIBS:intel |
||||
LIBS:audio |
||||
LIBS:interface |
||||
LIBS:digital-audio |
||||
LIBS:philips |
||||
LIBS:display |
||||
LIBS:cypress |
||||
LIBS:siliconi |
||||
LIBS:opto |
||||
LIBS:atmel |
||||
LIBS:contrib |
||||
LIBS:valves |
||||
LIBS:custom |
||||
LIBS:kinesis-cache |
||||
EELAYER 27 0 |
||||
EELAYER END |
||||
$Descr A4 11693 8268 |
||||
encoding utf-8 |
||||
Sheet 1 1 |
||||
Title "" |
||||
Date "13 nov 2014" |
||||
Rev "" |
||||
Comp "" |
||||
Comment1 "" |
||||
Comment2 "" |
||||
Comment3 "" |
||||
Comment4 "" |
||||
$EndDescr |
||||
$Comp |
||||
L C C4 |
||||
U 1 1 545804FB |
||||
P 2850 4250 |
||||
F 0 "C4" H 2850 4350 40 0000 L CNN |
||||
F 1 "1uF" H 2856 4165 40 0000 L CNN |
||||
F 2 "~" H 2888 4100 30 0000 C CNN |
||||
F 3 "~" H 2850 4250 60 0000 C CNN |
||||
1 2850 4250 |
||||
-1 0 0 1 |
||||
$EndComp |
||||
$Comp |
||||
L R R3 |
||||
U 1 1 545805E8 |
||||
P 2500 4000 |
||||
F 0 "R3" V 2580 4000 40 0000 C CNN |
||||
F 1 "22" V 2507 4001 40 0000 C CNN |
||||
F 2 "~" V 2430 4000 30 0000 C CNN |
||||
F 3 "~" H 2500 4000 30 0000 C CNN |
||||
1 2500 4000 |
||||
0 -1 -1 0 |
||||
$EndComp |
||||
$Comp |
||||
L R R2 |
||||
U 1 1 545805FA |
||||
P 2500 3800 |
||||
F 0 "R2" V 2580 3800 40 0000 C CNN |
||||
F 1 "22" V 2507 3801 40 0000 C CNN |
||||
F 2 "~" V 2430 3800 30 0000 C CNN |
||||
F 3 "~" H 2500 3800 30 0000 C CNN |
||||
1 2500 3800 |
||||
0 -1 -1 0 |
||||
$EndComp |
||||
Entry Wire Line |
||||
6450 2450 6550 2550 |
||||
Entry Wire Line |
||||
6450 2550 6550 2650 |
||||
Entry Wire Line |
||||
6450 2650 6550 2750 |
||||
Entry Wire Line |
||||
6450 2750 6550 2850 |
||||
Entry Wire Line |
||||
6450 2950 6550 3050 |
||||
Entry Wire Line |
||||
6450 3050 6550 3150 |
||||
Entry Wire Line |
||||
6450 2850 6550 2950 |
||||
Entry Wire Line |
||||
6450 3150 6550 3250 |
||||
Wire Wire Line |
||||
10250 1800 10750 1800 |
||||
Entry Wire Line |
||||
10750 1800 10850 1900 |
||||
Entry Wire Line |
||||
10750 1900 10850 2000 |
||||
Entry Wire Line |
||||
10750 2000 10850 2100 |
||||
Entry Wire Line |
||||
10750 2800 10850 2900 |
||||
Entry Wire Line |
||||
10750 2900 10850 3000 |
||||
Entry Wire Line |
||||
10750 3000 10850 3100 |
||||
Entry Wire Line |
||||
10750 3100 10850 3200 |
||||
Entry Wire Line |
||||
10750 3200 10850 3300 |
||||
Entry Wire Line |
||||
10750 3300 10850 3400 |
||||
$Comp |
||||
L AT90S8515-P IC2 |
||||
U 1 1 545A62EA |
||||
P 9250 3500 |
||||
F 0 "IC2" H 8400 5380 40 0000 L BNN |
||||
F 1 "AT90S8515-P" H 9700 1550 40 0000 L BNN |
||||
F 2 "DIL40" H 9250 3500 30 0000 C CIN |
||||
F 3 "" H 9250 3500 60 0000 C CNN |
||||
1 9250 3500 |
||||
1 0 0 -1 |
||||
$EndComp |
||||
NoConn ~ 10250 2650 |
||||
Entry Wire Line |
||||
10750 3650 10850 3750 |
||||
Entry Wire Line |
||||
10750 3750 10850 3850 |
||||
Entry Wire Line |
||||
10750 3850 10850 3950 |
||||
Entry Wire Line |
||||
10750 3950 10850 4050 |
||||
Entry Wire Line |
||||
10750 4050 10850 4150 |
||||
Entry Wire Line |
||||
10750 4150 10850 4250 |
||||
Entry Wire Line |
||||
10750 4350 10850 4450 |
||||
Entry Wire Line |
||||
10750 4250 10850 4350 |
||||
NoConn ~ 8250 4900 |
||||
NoConn ~ 8250 5000 |
||||
NoConn ~ 8250 1800 |
||||
Wire Wire Line |
||||
10250 1900 10750 1900 |
||||
Wire Wire Line |
||||
10250 2000 10750 2000 |
||||
Wire Wire Line |
||||
10250 2100 10750 2100 |
||||
Wire Wire Line |
||||
10250 2200 10750 2200 |
||||
Wire Wire Line |
||||
10250 2300 10750 2300 |
||||
Wire Wire Line |
||||
10250 2400 10750 2400 |
||||
Wire Wire Line |
||||
10250 2500 10750 2500 |
||||
Text Label 10350 1800 0 60 ~ 0 |
||||
A |
||||
Text Label 10350 1900 0 60 ~ 0 |
||||
B |
||||
Text Label 10350 2000 0 60 ~ 0 |
||||
C |
||||
Text Label 10350 2100 0 60 ~ 0 |
||||
G |
||||
Wire Wire Line |
||||
10250 2800 10750 2800 |
||||
Wire Wire Line |
||||
10250 2900 10750 2900 |
||||
Wire Wire Line |
||||
10250 3000 10750 3000 |
||||
Wire Wire Line |
||||
10250 3100 10750 3100 |
||||
Wire Wire Line |
||||
10250 3200 10750 3200 |
||||
Wire Wire Line |
||||
10250 3300 10750 3300 |
||||
Wire Wire Line |
||||
10250 3400 10750 3400 |
||||
Wire Wire Line |
||||
10250 3500 10750 3500 |
||||
Text Label 10350 2800 0 60 ~ 0 |
||||
DL2 |
||||
Text Label 10350 2900 0 60 ~ 0 |
||||
DR1 |
||||
Text Label 10350 3000 0 60 ~ 0 |
||||
DR2 |
||||
Text Label 10350 3100 0 60 ~ 0 |
||||
DL1 |
||||
Text Label 10350 3400 0 60 ~ 0 |
||||
SCL |
||||
Text Label 10350 3500 0 60 ~ 0 |
||||
SDA |
||||
Wire Wire Line |
||||
10250 3650 10750 3650 |
||||
Wire Wire Line |
||||
10250 3750 10750 3750 |
||||
Wire Wire Line |
||||
10250 3850 10750 3850 |
||||
Wire Wire Line |
||||
10250 3950 10750 3950 |
||||
Wire Wire Line |
||||
10250 4050 10750 4050 |
||||
Wire Wire Line |
||||
10250 4150 10750 4150 |
||||
Wire Wire Line |
||||
10250 4250 10750 4250 |
||||
Wire Wire Line |
||||
10250 4350 10750 4350 |
||||
Text Label 10350 3650 0 60 ~ 0 |
||||
R1 |
||||
Text Label 10350 3750 0 60 ~ 0 |
||||
R2 |
||||
Text Label 10350 3850 0 60 ~ 0 |
||||
R3 |
||||
Text Label 10350 3950 0 60 ~ 0 |
||||
R4 |
||||
Text Label 10350 4050 0 60 ~ 0 |
||||
R5 |
||||
Text Label 10350 4150 0 60 ~ 0 |
||||
R6 |
||||
Text Label 10350 4250 0 60 ~ 0 |
||||
R7 |
||||
Text Label 10350 4350 0 60 ~ 0 |
||||
R8 |
||||
Wire Wire Line |
||||
10250 4500 10750 4500 |
||||
Wire Wire Line |
||||
10250 4600 10750 4600 |
||||
Wire Wire Line |
||||
10250 4700 10750 4700 |
||||
Wire Wire Line |
||||
10250 4800 10750 4800 |
||||
Wire Wire Line |
||||
10250 4900 10750 4900 |
||||
Wire Wire Line |
||||
10250 5000 10750 5000 |
||||
Wire Wire Line |
||||
10250 5100 10750 5100 |
||||
Wire Wire Line |
||||
10250 5200 10750 5200 |
||||
Text Label 10350 4600 0 60 ~ 0 |
||||
FS1 |
||||
Text Label 10350 5000 0 60 ~ 0 |
||||
FS3 |
||||
Text Label 10350 5200 0 60 ~ 0 |
||||
FS2 |
||||
$Comp |
||||
L GND #PWR01 |
||||
U 1 1 545A7377 |
||||
P 9250 5600 |
||||
F 0 "#PWR01" H 9250 5600 30 0001 C CNN |
||||
F 1 "GND" H 9250 5530 30 0001 C CNN |
||||
F 2 "" H 9250 5600 60 0000 C CNN |
||||
F 3 "" H 9250 5600 60 0000 C CNN |
||||
1 9250 5600 |
||||
1 0 0 -1 |
||||
$EndComp |
||||
Wire Wire Line |
||||
9250 5500 9250 5600 |
||||
Text Label 10350 4700 0 60 ~ 0 |
||||
CLOCK |
||||
Text Label 10350 4800 0 60 ~ 0 |
||||
DATA |
||||
NoConn ~ 10750 4700 |
||||
NoConn ~ 10750 4800 |
||||
Text Label 10350 3200 0 60 ~ 0 |
||||
KP |
||||
Text Label 10350 3300 0 60 ~ 0 |
||||
PGM |
||||
Text Label 10350 2500 0 60 ~ 0 |
||||
BUZZ |
||||
NoConn ~ 8250 2300 |
||||
NoConn ~ 8250 2700 |
||||
$Comp |
||||
L GND #PWR02 |
||||
U 1 1 545A7565 |
||||
P 4750 5700 |
||||
F 0 "#PWR02" H 4750 5700 30 0001 C CNN |
||||
F 1 "GND" H 4750 5630 30 0001 C CNN |
||||
F 2 "" H 4750 5700 60 0000 C CNN |
||||
F 3 "" H 4750 5700 60 0000 C CNN |
||||
1 4750 5700 |
||||
1 0 0 -1 |
||||
$EndComp |
||||
Entry Wire Line |
||||
6450 3650 6550 3750 |
||||
Entry Wire Line |
||||
6450 3750 6550 3850 |
||||
Entry Wire Line |
||||
6450 4150 6550 4250 |
||||
Entry Wire Line |
||||
6450 4250 6550 4350 |
||||
Entry Wire Line |
||||
6450 4050 6550 4150 |
||||
Entry Wire Line |
||||
6450 4350 6550 4450 |
||||
NoConn ~ 3750 2850 |
||||
Wire Wire Line |
||||
1200 2000 6450 2000 |
||||
NoConn ~ 3750 3050 |
||||
Wire Wire Line |
||||
2750 3800 3750 3800 |
||||
Wire Wire Line |
||||
2750 3900 3750 3900 |
||||
Wire Wire Line |
||||
2750 3900 2750 4000 |
||||
Wire Bus Line |
||||
6550 2100 6550 6050 |
||||
Wire Bus Line |
||||
10850 1600 10850 6050 |
||||
Text Label 6050 4350 0 60 ~ 0 |
||||
DL1 |
||||
Text Label 6050 4250 0 60 ~ 0 |
||||
DR2 |
||||
Text Label 6050 4150 0 60 ~ 0 |
||||
DR1 |
||||
Text Label 6050 4050 0 60 ~ 0 |
||||
DL2 |
||||
Text Label 6050 2450 0 60 ~ 0 |
||||
R1 |
||||
Text Label 6050 2550 0 60 ~ 0 |
||||
R2 |
||||
Text Label 6050 2650 0 60 ~ 0 |
||||
R3 |
||||
Text Label 6050 2750 0 60 ~ 0 |
||||
R4 |
||||
Text Label 6050 2850 0 60 ~ 0 |
||||
R5 |
||||
Text Label 6050 2950 0 60 ~ 0 |
||||
R6 |
||||
Text Label 6050 3050 0 60 ~ 0 |
||||
R7 |
||||
Text Label 6050 3150 0 60 ~ 0 |
||||
R8 |
||||
Text Label 6050 5050 0 60 ~ 0 |
||||
A |
||||
Text Label 6050 5150 0 60 ~ 0 |
||||
B |
||||
Text Label 6050 5250 0 60 ~ 0 |
||||
C |
||||
Text Label 6050 5350 0 60 ~ 0 |
||||
G |
||||
Text Label 1300 3800 0 60 ~ 0 |
||||
D+ |
||||
Text Label 1300 4000 0 60 ~ 0 |
||||
D- |
||||
NoConn ~ 10750 2200 |
||||
NoConn ~ 10750 2300 |
||||
NoConn ~ 10750 2400 |
||||
Text Label 10350 4500 0 60 ~ 0 |
||||
GND |
||||
NoConn ~ 10750 4900 |
||||
NoConn ~ 10750 5100 |
||||
Text Label 6050 3450 0 60 ~ 0 |
||||
KP |
||||
Text Label 6050 3350 0 60 ~ 0 |
||||
PGM |
||||
$Comp |
||||
L ATMEGA32U4-A U1 |
||||
U 1 1 5462E0B1 |
||||
P 4900 4000 |
||||
F 0 "U1" H 3950 5700 40 0000 C CNN |
||||
F 1 "ATMEGA32U4-A" H 5600 2500 40 0000 C CNN |
||||
F 2 "TQFP44" H 4900 4000 35 0000 C CIN |
||||
F 3 "" H 6000 5100 60 0000 C CNN |
||||
1 4900 4000 |
||||
1 0 0 -1 |
||||
$EndComp |
||||
Wire Wire Line |
||||
3750 4850 3750 5600 |
||||
Wire Wire Line |
||||
4450 2200 5150 2200 |
||||
Connection ~ 4700 2200 |
||||
Connection ~ 4800 2200 |
||||
Connection ~ 5050 2200 |
||||
Connection ~ 4800 2000 |
||||
Wire Wire Line |
||||
6000 2450 6450 2450 |
||||
Wire Wire Line |
||||
6000 2550 6450 2550 |
||||
Wire Wire Line |
||||
6000 2650 6450 2650 |
||||
Wire Wire Line |
||||
6000 2750 6450 2750 |
||||
Wire Wire Line |
||||
6000 2850 6450 2850 |
||||
Wire Wire Line |
||||
6000 2950 6450 2950 |
||||
Wire Wire Line |
||||
6000 3050 6450 3050 |
||||
Wire Wire Line |
||||
6000 3150 6450 3150 |
||||
Wire Wire Line |
||||
6000 5050 6450 5050 |
||||
Wire Wire Line |
||||
6000 5150 6450 5150 |
||||
Wire Wire Line |
||||
6000 5250 6450 5250 |
||||
Wire Wire Line |
||||
6000 4050 6450 4050 |
||||
Wire Wire Line |
||||
6000 4150 6450 4150 |
||||
Wire Wire Line |
||||
6000 4250 6450 4250 |
||||
Wire Wire Line |
||||
6000 4350 6450 4350 |
||||
Wire Wire Line |
||||
6000 4550 6450 4550 |
||||
Entry Wire Line |
||||
6450 3350 6550 3450 |
||||
Entry Wire Line |
||||
6450 3450 6550 3550 |
||||
Entry Wire Line |
||||
6450 5050 6550 5150 |
||||
Entry Wire Line |
||||
6450 5150 6550 5250 |
||||
Entry Wire Line |
||||
6450 5250 6550 5350 |
||||
Entry Wire Line |
||||
6450 5350 6550 5450 |
||||
Entry Wire Line |
||||
6450 4650 6550 4750 |
||||
Wire Wire Line |
||||
6000 3350 6450 3350 |
||||
Wire Wire Line |
||||
6000 3450 6450 3450 |
||||
Wire Wire Line |
||||
1200 5600 6450 5600 |
||||
Connection ~ 4950 5600 |
||||
Connection ~ 4850 5600 |
||||
Wire Wire Line |
||||
4750 5600 4750 5700 |
||||
Connection ~ 4750 5600 |
||||
Connection ~ 4500 5600 |
||||
Text Label 6050 4550 0 60 ~ 0 |
||||
HWB |
||||
Wire Wire Line |
||||
6000 5350 6450 5350 |
||||
Wire Wire Line |
||||
6000 3650 6450 3650 |
||||
Wire Wire Line |
||||
6000 3750 6450 3750 |
||||
Text Label 6050 3650 0 60 ~ 0 |
||||
SCL |
||||
Text Label 6050 3750 0 60 ~ 0 |
||||
SDA |
||||
Wire Wire Line |
||||
6000 3850 6450 3850 |
||||
Wire Wire Line |
||||
6000 3950 6450 3950 |
||||
Wire Wire Line |
||||
6000 4650 6450 4650 |
||||
Text Label 6050 4650 0 60 ~ 0 |
||||
BUZZ |
||||
NoConn ~ 10750 4600 |
||||
NoConn ~ 10750 5000 |
||||
NoConn ~ 10750 5200 |
||||
Entry Wire Line |
||||
10750 3400 10850 3500 |
||||
Entry Wire Line |
||||
10750 3500 10850 3600 |
||||
Entry Wire Line |
||||
10750 4500 10850 4600 |
||||
Wire Wire Line |
||||
2850 4050 3750 4050 |
||||
Text Label 2950 4050 0 60 ~ 0 |
||||
UCAP |
||||
Wire Wire Line |
||||
6000 4850 6450 4850 |
||||
Wire Wire Line |
||||
6000 4950 6450 4950 |
||||
NoConn ~ 6450 4850 |
||||
NoConn ~ 6450 4950 |
||||
NoConn ~ 6450 4550 |
||||
$Comp |
||||
L USB-MINI-B CON1 |
||||
U 1 1 546431C1 |
||||
P 2100 5050 |
||||
F 0 "CON1" H 1850 5500 60 0000 C CNN |
||||
F 1 "USB-MINI-B" H 2050 4550 60 0000 C CNN |
||||
F 2 "" H 2100 5050 60 0000 C CNN |
||||
F 3 "" H 2100 5050 60 0000 C CNN |
||||
1 2100 5050 |
||||
0 1 1 0 |
||||
$EndComp |
||||
$Comp |
||||
L VCC #PWR03 |
||||
U 1 1 54643698 |
||||
P 2400 4400 |
||||
F 0 "#PWR03" H 2400 4500 30 0001 C CNN |
||||
F 1 "VCC" H 2400 4500 30 0000 C CNN |
||||
F 2 "" H 2400 4400 60 0000 C CNN |
||||
F 3 "" H 2400 4400 60 0000 C CNN |
||||
1 2400 4400 |
||||
1 0 0 -1 |
||||
$EndComp |
||||
Text Notes 2600 2750 0 60 ~ 0 |
||||
Teensy 2.0\n(not fully drawn) |
||||
$Comp |
||||
L CONN_7 B7K-PH-K-S1 |
||||
U 1 1 54643939 |
||||
P 1950 6900 |
||||
F 0 "B7K-PH-K-S1" V 1920 6900 60 0000 C CNN |
||||
F 1 "CONN_7" V 2020 6900 60 0000 C CNN |
||||
F 2 "" H 1950 6900 60 0000 C CNN |
||||
F 3 "" H 1950 6900 60 0000 C CNN |
||||
1 1950 6900 |
||||
1 0 0 -1 |
||||
$EndComp |
||||
Connection ~ 3750 5600 |
||||
Connection ~ 2400 5600 |
||||
Connection ~ 2250 5600 |
||||
Connection ~ 1950 5600 |
||||
Wire Wire Line |
||||
2400 4400 2400 4500 |
||||
Wire Wire Line |
||||
2250 4000 2250 4500 |
||||
Wire Wire Line |
||||
1200 3800 2250 3800 |
||||
Wire Wire Line |
||||
2100 3800 2100 4500 |
||||
Wire Wire Line |
||||
2850 4450 2850 5600 |
||||
Connection ~ 2850 5600 |
||||
Entry Wire Line |
||||
1100 6800 1200 6900 |
||||
Entry Wire Line |
||||
1100 6900 1200 7000 |
||||
Entry Wire Line |
||||
1100 7000 1200 7100 |
||||
Entry Wire Line |
||||
1100 6700 1200 6800 |
||||
Wire Wire Line |
||||
1200 6600 1600 6600 |
||||
Wire Wire Line |
||||
1200 6700 1600 6700 |
||||
Wire Wire Line |
||||
1200 6800 1600 6800 |
||||
Wire Wire Line |
||||
1200 6900 1600 6900 |
||||
Wire Wire Line |
||||
1200 7000 1600 7000 |
||||
Wire Wire Line |
||||
1200 7100 1600 7100 |
||||
Wire Wire Line |
||||
1200 7200 1600 7200 |
||||
Text Label 1300 6600 0 60 ~ 0 |
||||
FS2 |
||||
Text Label 1300 6700 0 60 ~ 0 |
||||
FS1 |
||||
Text Label 1300 6800 0 60 ~ 0 |
||||
VCC |
||||
Text Label 1300 6900 0 60 ~ 0 |
||||
D- |
||||
Text Label 1300 7000 0 60 ~ 0 |
||||
D+ |
||||
Text Label 1300 7100 0 60 ~ 0 |
||||
GND |
||||
Text Label 1300 7200 0 60 ~ 0 |
||||
FS3 |
||||
NoConn ~ 3750 2450 |
||||
Wire Wire Line |
||||
3600 2000 3600 3650 |
||||
Wire Wire Line |
||||
3600 3650 3750 3650 |
||||
NoConn ~ 1950 4500 |
||||
Wire Bus Line |
||||
1100 1900 1100 7100 |
||||
NoConn ~ 1200 6600 |
||||
NoConn ~ 1200 6700 |
||||
NoConn ~ 1200 7200 |
||||
Connection ~ 2100 3800 |
||||
Wire Wire Line |
||||
1200 4000 2250 4000 |
||||
Entry Wire Line |
||||
1100 3700 1200 3800 |
||||
Entry Wire Line |
||||
1100 3900 1200 4000 |
||||
Text Label 10350 1500 0 60 ~ 0 |
||||
VCC |
||||
Entry Wire Line |
||||
1100 1900 1200 2000 |
||||
Text Label 1250 2000 0 60 ~ 0 |
||||
VCC |
||||
Entry Wire Line |
||||
1100 5500 1200 5600 |
||||
Connection ~ 1800 5600 |
||||
Text Label 1300 5600 0 60 ~ 0 |
||||
GND |
||||
Wire Wire Line |
||||
9250 5500 10750 5500 |
||||
Entry Wire Line |
||||
10750 5500 10850 5600 |
||||
Text Label 10350 5500 0 60 ~ 0 |
||||
GND |
||||
Wire Wire Line |
||||
9250 1500 10750 1500 |
||||
Entry Wire Line |
||||
10750 1500 10850 1600 |
||||
Connection ~ 3600 2000 |
||||
Wire Wire Line |
||||
4800 2000 4800 2200 |
||||
Entry Wire Line |
||||
6450 2000 6550 2100 |
||||
Text Label 6050 2000 0 60 ~ 0 |
||||
VCC |
||||
Connection ~ 5050 5600 |
||||
Entry Wire Line |
||||
6450 5600 6550 5700 |
||||
Text Label 6050 5600 0 60 ~ 0 |
||||
GND |
||||
NoConn ~ 6450 3850 |
||||
NoConn ~ 6450 3950 |
||||
Wire Wire Line |
||||
1800 4500 1500 4500 |
||||
Wire Wire Line |
||||
1500 4500 1500 5600 |
||||
Connection ~ 1500 5600 |
||||
Entry Wire Line |
||||
10750 2500 10850 2600 |
||||
Entry Wire Line |
||||
10750 2100 10850 2200 |
||||
Text Notes 1000 5300 1 60 ~ 0 |
||||
Sacrificial USB cable from header to Teensy |
||||
Text Notes 7850 5950 0 60 ~ 0 |
||||
Ribbon cable between Teensy pins and socket |
||||
Wire Bus Line |
||||
10850 6050 6550 6050 |
||||
$EndSCHEMATC |
After Width: | Height: | Size: 174 KiB |
After Width: | Height: | Size: 336 KiB |
After Width: | Height: | Size: 260 KiB |
@ -0,0 +1,52 @@ |
||||
This directory of documentation was copied from https://github.com/wjanssens/tmk_keyboard/tree/master/keyboard/kinesis |
||||
and is probably Copyright 2014 Warren Janssens <warren.janssens@gmail.com> |
||||
and probably released under GPL v2, which may be recovered at <http://www.gnu.org/licenses/>. |
||||
|
||||
Row configuration |
||||
PF0 A |
||||
PF1 B |
||||
PF2 C |
||||
PF3 G 0 = U4, 1 = U5 |
||||
|
||||
Column configuration |
||||
4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7 |
||||
r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 |
||||
PB0 21 c1 f6 f8 f7 5 4 3 2 1 =+ |
||||
PB1 22 c2 f3 f5 f4 t r e w q TAB |
||||
PB2 23 c3 ESC f2 f1 g f d s a CL |
||||
PB3 24 c4 f9 f11 f10 b v c x z LS UP DN [{ ]} |
||||
PB4 25 c5 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_ |
||||
PB5 26 c6 PB PGM KPD y u i o p \ |
||||
PB6 27 c7 LC DL BS RC EN SP h j k l ;: '" |
||||
PB7 28 c8 RA PU PD n m ,< .> /? RS |
||||
*/ |
||||
|
||||
|
||||
40 pin connector |
||||
|
||||
DL2 1 40 VCC |
||||
DR1 2 39 A |
||||
DR2 3 38 B |
||||
DL1 4 37 C |
||||
KPD 5 36 G |
||||
PGM 6 35 |
||||
SCL 7 34 |
||||
SDA 8 33 |
||||
RST 9 32 BUZZ |
||||
WP 10 31 EA |
||||
FS1 11 30 ALE |
||||
CLOCK 12 29 PSEN |
||||
DATA 13 28 r8 |
||||
14 27 r7 |
||||
FS3 15 26 r6 |
||||
16 25 r5 |
||||
FS2 17 24 r4 |
||||
XTAL1 18 23 r3 |
||||
XTAL2 19 22 r2 |
||||
GND 20 21 r1 |
||||
|
||||
|
||||
references: |
||||
https://github.com/chrisandreae/keyboard-firmware |
||||
|
||||
|
After Width: | Height: | Size: 171 KiB |
@ -0,0 +1,21 @@ |
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
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 = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # 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
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # 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. Do not enable this with audio at the same time.
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
ifndef QUANTUM_DIR |
||||
include ../../../../Makefile
|
||||
endif |
@ -0,0 +1,8 @@ |
||||
#ifndef CONFIG_USER_H |
||||
#define CONFIG_USER_H |
||||
|
||||
#include "../../config.h" |
||||
|
||||
// place overrides here
|
||||
|
||||
#endif |
@ -0,0 +1,116 @@ |
||||
#include "kinesis.h" |
||||
#include "action_layer.h" |
||||
|
||||
#define QWERTY 0 // Base qerty
|
||||
#define SYMB 1// Symbol layer
|
||||
|
||||
// An almost entirely blank keymap. Test layers with the upper right hand key - 1 in normal mode, reset in layer 2.
|
||||
|
||||
|
||||
/****************************************************************************************************
|
||||
* |
||||
* Keymap: Default Layer in Qwerty |
||||
* |
||||
* ,-------------------------------------------------------------------------------------------------------------------. |
||||
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | PSCR | SLCK | PAUS | FN0 | BOOT | |
||||
* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------| |
||||
* | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ | |
||||
* |--------+------+------+------+------+------| +------+------+------+------+------+--------| |
||||
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| | |
||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------| |
||||
* | Caps | A | S | D | F | G | | H | J | K | L | ;: | '" | |
||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------| |
||||
* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift | |
||||
* `--------+------+------+------+------+------- `------+------+------+------+------+--------' |
||||
* | `~ | INS | Left | Right| | Up | Down | [{ | ]} | |
||||
* `---------------------------' `---------------------------' |
||||
* ,-------------. ,-------------. |
||||
* | Ctrl | Alt | | Gui | Ctrl | |
||||
* ,------|------|------| |------+------+------. |
||||
* | | | Home | | PgUp | | | |
||||
* | BkSp | Del |------| |------|Return| Space| |
||||
* | | | End | | PgDn | | | |
||||
* `--------------------' `--------------------' |
||||
*/ |
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
[QWERTY] = KEYMAP( |
||||
KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8, |
||||
KC_EQL, KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , |
||||
KC_TAB, KC_Q ,KC_W ,KC_E ,KC_R ,KC_T , |
||||
KC_CAPS,KC_A ,KC_S ,KC_D ,KC_F ,KC_G , |
||||
KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , |
||||
KC_GRV ,KC_INS ,KC_LEFT,KC_RGHT, |
||||
KC_LCTL,KC_LALT, |
||||
KC_HOME, |
||||
KC_BSPC,KC_DEL ,KC_END , |
||||
KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR ,KC_SLCK ,KC_PAUS, KC_FN0, KC_1, |
||||
KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS, |
||||
KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS, |
||||
KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT, |
||||
KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT, |
||||
KC_UP ,KC_DOWN,KC_LBRC,KC_RBRC, |
||||
KC_RGUI,KC_RCTL, |
||||
KC_PGUP, |
||||
KC_PGDN,KC_ENTER ,KC_SPC |
||||
), |
||||
[SYMB] = KEYMAP(
|
||||
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, 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, KC_TRNS, KC_TRNS, KC_FN0, RESET, |
||||
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, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, |
||||
KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS |
||||
) |
||||
}; |
||||
|
||||
const uint16_t PROGMEM fn_actions[] = { |
||||
[0] = ACTION_LAYER_TAP_TOGGLE(SYMB) , // FN1 - Momentary Layer 1 (Symbols)
|
||||
|
||||
|
||||
}; |
||||
|
||||
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; |
||||
}; |
||||
|
||||
|
||||
void matrix_init_user(void) { |
||||
|
||||
} |
||||
|
||||
void matrix_scan_user(void) { |
||||
|
||||
} |
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
||||
return true; |
||||
} |
||||
|
||||
void led_set_user(uint8_t usb_led) { |
||||
|
||||
} |
@ -0,0 +1 @@ |
||||
# The default keymap for kinesis-advantage |
@ -0,0 +1,21 @@ |
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
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 = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # 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
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # 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. Do not enable this with audio at the same time.
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
ifndef QUANTUM_DIR |
||||
include ../../../../Makefile
|
||||
endif |
@ -0,0 +1,8 @@ |
||||
#ifndef CONFIG_USER_H |
||||
#define CONFIG_USER_H |
||||
|
||||
#include "../../config.h" |
||||
|
||||
// place overrides here
|
||||
|
||||
#endif |
@ -0,0 +1,245 @@ |
||||
#include "kinesis.h" |
||||
#include "action_layer.h" |
||||
#include "mousekey.h" |
||||
|
||||
#define QWERTY 0 // Base qerty
|
||||
#define SYMB 1// Symbol layer
|
||||
#define MOUSE 2//
|
||||
|
||||
|
||||
|
||||
|
||||
/* Macros */ |
||||
enum { |
||||
NONE = 0, |
||||
// Diagonal mouse movement
|
||||
A_MUL, |
||||
A_MUR, |
||||
A_MDL, |
||||
A_MDR, |
||||
}; |
||||
|
||||
|
||||
// Borrowing very heavily from
|
||||
// https://github.com/alvicstep/tmk_keyboard
|
||||
/****************************************************************************************************
|
||||
* |
||||
* Keymap: Default Layer in Qwerty |
||||
* |
||||
* ,-------------------------------------------------------------------------------------------------------------------. |
||||
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | | bOOT | |
||||
* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------| |
||||
* | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ | |
||||
* |--------+------+------+------+------+------| +------+------+------+------+------+--------| |
||||
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| | |
||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------| |
||||
* |MouseFN1| A | S | D | F | G | | H | J | K | L | ;: | '" | |
||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------| |
||||
* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift | |
||||
* `--------+------+------+------+------+------- `------+------+------+------+------+--------' |
||||
* | `~ | ESC |MOUSE1|MOUSE2| | [{ | ]} | ESC | GUI | |
||||
* `---------------------------' `---------------------------' |
||||
* ,-------------. ,-------------. |
||||
* | Ctrl | Alt | | Gui | Ctrl | |
||||
* ,------|------|------| |------+------+------. |
||||
* | | | Home | | PgUp | | | |
||||
* | BkSp | Del |------| |------|Return| Space| |
||||
* | | | End | | PgDn | | | |
||||
* `--------------------' `--------------------' |
||||
*/ |
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
[QWERTY] = KEYMAP( |
||||
KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8, |
||||
KC_EQL, KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , |
||||
KC_TAB, KC_Q ,KC_W ,KC_E ,KC_R ,KC_T , |
||||
KC_FN1 ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G , |
||||
KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , |
||||
KC_GRV ,KC_ESC, KC_BTN1,KC_BTN2, |
||||
KC_LCTL,KC_LALT, |
||||
KC_HOME, |
||||
KC_BSPC,KC_DEL ,KC_FN0 , |
||||
KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_FN0 ,KC_FN1 ,KC_FN2, KC_NO, RESET, |
||||
KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS, |
||||
KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS, |
||||
KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT, |
||||
KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT, |
||||
KC_LBRC,KC_RBRC, KC_ESC, KC_RGUI, |
||||
KC_RGUI,KC_RCTL, |
||||
KC_PGUP, |
||||
KC_PGDN,KC_ENTER ,KC_SPC |
||||
), |
||||
[SYMB] = KEYMAP(
|
||||
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, 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, KC_TRNS, KC_TRNS, KC_FN0, KC_2, |
||||
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, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, |
||||
KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS |
||||
), |
||||
/* Keymap: Movement and function layer
|
||||
* |
||||
* ,-------------------------------------------------------------------------------------------------------------------. |
||||
* | Caps | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | Tada | bOOT | |
||||
* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------| |
||||
* | =+ | ! | @ | # | $ | % | | ^ | & | * | ( | ) |MS Fast | |
||||
* |--------+------+------+------+------+------| +------+------+------+------+------+--------| |
||||
* | Tab | | | Up | |PgUp | | MwU |MS_UL | MS_U |MS_UR | | Ms Norm|
|
||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------| |
||||
* |MouseFN1| C^A | Left | Down |Right | C^E | | | MS_L |Mouse1| MS_R | |MS Slow | |
||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------| |
||||
* | | GuiZ | GUI X| GUI C| GUI_V|PgDown| | MWD | MDown|MS Dwn|MS_DR | ? | | |
||||
* `--------+------+------+------+------+------- `------+------+------+------+------+--------' |
||||
* | `~ | ESC | < | > | | { | } | ESC | | |
||||
* `---------------------------' `---------------------------' |
||||
* ,-------------. ,-------------. |
||||
* | Ctrl | Alt | | Gui | Ctrl | |
||||
* ,------|------|------| |------+------+------. |
||||
* | | | Home | | PgUp | | | |
||||
* | BkSp | Del |------| |------|Mouse1|Mouse2| |
||||
* | | | End | | PgDn |LClick|Rclick| |
||||
* `--------------------' `--------------------' |
||||
*/ |
||||
|
||||
|
||||
[MOUSE] = KEYMAP( |
||||
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_EXLM ,KC_AT, KC_HASH, KC_DLR ,KC_PERC , |
||||
KC_TRNS, KC_NO, KC_NO, KC_UP, KC_NO, KC_PGUP, |
||||
KC_FN1, LCTL(KC_A),KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_E), |
||||
KC_TRNS, LGUI(KC_Z),LGUI(KC_X),LGUI(KC_C),LGUI(KC_V),KC_PGDN, |
||||
KC_TRNS, KC_TRNS, KC_LABK, KC_RABK, |
||||
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_FN0,RESET,
|
||||
KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_ACL2,
|
||||
KC_WH_U, M(A_MUL), KC_MS_U, M(A_MUR), KC_NO, KC_ACL1, |
||||
KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_ACL0, |
||||
KC_WH_D, M(A_MDL), KC_MS_D, M(A_MDR), KC_TRNS, KC_TRNS, |
||||
KC_LCBR, KC_RCBR, KC_ESC, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, |
||||
KC_TRNS, |
||||
KC_TRNS, KC_BTN1, KC_BTN2 |
||||
), |
||||
|
||||
|
||||
}; |
||||
|
||||
const uint16_t PROGMEM fn_actions[] = { |
||||
[0] = ACTION_LAYER_TAP_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols)
|
||||
[1] = ACTION_LAYER_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols)
|
||||
[2] = ACTION_LAYER_TAP_TOGGLE(SYMB) , // FN1 - Momentary Layer 1 (Symbols)
|
||||
|
||||
|
||||
}; |
||||
|
||||
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; |
||||
|
||||
// from algernon's ErgoDox EZ layout,
|
||||
case A_MUL: |
||||
if (record->event.pressed) { |
||||
mousekey_on(KC_MS_UP); |
||||
mousekey_on(KC_MS_LEFT); |
||||
} else { |
||||
mousekey_off(KC_MS_UP); |
||||
mousekey_off(KC_MS_LEFT); |
||||
} |
||||
mousekey_send(); |
||||
break; |
||||
|
||||
case A_MUR: |
||||
if (record->event.pressed) { |
||||
mousekey_on(KC_MS_UP); |
||||
mousekey_on(KC_MS_RIGHT); |
||||
} else { |
||||
mousekey_off(KC_MS_UP); |
||||
mousekey_off(KC_MS_RIGHT); |
||||
} |
||||
mousekey_send(); |
||||
break; |
||||
|
||||
case A_MDL: |
||||
if (record->event.pressed) { |
||||
mousekey_on(KC_MS_DOWN); |
||||
mousekey_on(KC_MS_LEFT); |
||||
} else { |
||||
mousekey_off(KC_MS_DOWN); |
||||
mousekey_off(KC_MS_LEFT); |
||||
} |
||||
mousekey_send(); |
||||
break; |
||||
|
||||
case A_MDR: |
||||
if (record->event.pressed) { |
||||
mousekey_on(KC_MS_DOWN); |
||||
mousekey_on(KC_MS_RIGHT); |
||||
} else { |
||||
mousekey_off(KC_MS_DOWN); |
||||
mousekey_off(KC_MS_RIGHT); |
||||
} |
||||
mousekey_send(); |
||||
break; |
||||
}
|
||||
return MACRO_NONE; |
||||
}; |
||||
|
||||
|
||||
void matrix_init_user(void) { |
||||
|
||||
|
||||
} |
||||
|
||||
void matrix_scan_user(void) { |
||||
int8_t layer = biton32(layer_state); |
||||
|
||||
switch (layer) { |
||||
case 1: |
||||
all_led_off(); |
||||
break; |
||||
case 2: |
||||
if (!(host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK))) { |
||||
all_led_off(); |
||||
caps_lock_led_on(); |
||||
} |
||||
break; |
||||
case 0: |
||||
all_led_off(); |
||||
num_lock_led_on(); |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
|
||||
} |
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
||||
return true; |
||||
} |
||||
|
||||
void led_set_user(uint8_t usb_led) { |
||||
|
||||
} |
@ -0,0 +1,2 @@ |
||||
# a programmer friendly keymap for the kinesis-advantage |
||||
# not really baked yet. |
@ -0,0 +1,106 @@ |
||||
#include "kinesis.h" |
||||
|
||||
// begin section origin https://github.com/alvicstep/tmk_keyboard
|
||||
|
||||
|
||||
void all_led_off(void) |
||||
{ |
||||
PORTD = 0b11111111; |
||||
} |
||||
|
||||
void all_led_on(void) |
||||
{ |
||||
PORTD = 0b00000000; |
||||
} |
||||
void num_lock_led_on(void) |
||||
{ |
||||
PORTD = 0b11101111; |
||||
} |
||||
|
||||
void caps_lock_led_on(void) |
||||
{ |
||||
PORTD = 0b01111111; |
||||
} |
||||
|
||||
void scroll_lock_led_on(void) |
||||
{ |
||||
PORTD = 0b11011111; |
||||
} |
||||
void keypad_led_on(void) |
||||
{ |
||||
PORTD = 0b10111111; |
||||
} |
||||
void blink_all_leds(void) |
||||
{ |
||||
all_led_on(); |
||||
_delay_ms(500); |
||||
|
||||
all_led_off(); |
||||
_delay_ms(100); |
||||
|
||||
caps_lock_led_on(); |
||||
_delay_ms(100); |
||||
|
||||
num_lock_led_on(); |
||||
_delay_ms(100); |
||||
|
||||
scroll_lock_led_on(); |
||||
_delay_ms(100); |
||||
|
||||
keypad_led_on(); |
||||
_delay_ms(100); |
||||
|
||||
//back
|
||||
|
||||
scroll_lock_led_on(); |
||||
_delay_ms(100); |
||||
|
||||
num_lock_led_on(); |
||||
_delay_ms(100); |
||||
|
||||
caps_lock_led_on(); |
||||
_delay_ms(100); |
||||
|
||||
all_led_off(); |
||||
} |
||||
|
||||
// End section origin https://github.com/alvicstep/tmk_keyboard
|
||||
|
||||
void matrix_init_kb(void) { |
||||
blink_all_leds(); |
||||
matrix_init_user(); |
||||
} |
||||
|
||||
|
||||
void matrix_scan_kb(void) { |
||||
// put your looping keyboard code here
|
||||
// runs every cycle (a lot)
|
||||
|
||||
matrix_scan_user(); |
||||
} |
||||
|
||||
bool process_record_kb(uint16_t keycode, keyrecord_t *record) { |
||||
// put your per-action keyboard code here
|
||||
// runs for every action, just before processing by the firmware
|
||||
|
||||
return process_record_user(keycode, record); |
||||
} |
||||
|
||||
void led_set_kb(uint8_t usb_led) { |
||||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||
|
||||
//Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
|
||||
uint8_t leds = 0xF0; |
||||
if (usb_led & 1 << USB_LED_NUM_LOCK) |
||||
leds &= ~0x10; |
||||
if (usb_led & 1 << USB_LED_CAPS_LOCK) |
||||
leds &= ~0x80; |
||||
if (usb_led & 1 << USB_LED_SCROLL_LOCK) |
||||
leds &= ~0x20; |
||||
PORTD = (PORTD & 0x0F) | leds; |
||||
|
||||
led_set_user(usb_led); |
||||
|
||||
} |
||||
|
||||
|
@ -0,0 +1,67 @@ |
||||
#ifndef KINESIS_H |
||||
#define KINESIS_H |
||||
|
||||
#include "quantum.h" |
||||
|
||||
|
||||
// The first section contains all of the arguements
|
||||
// The second converts the arguments into a two-dimensional array
|
||||
|
||||
#define KEYMAP( \ |
||||
k02,k22,k12,k01,k21,k11,k00,k20,k10, \
|
||||
k80,k70,k60,k50,k40,k30, \
|
||||
k81,k71,k61,k51,k41,k31, \
|
||||
k82,k72,k62,k52,k42,k32, \
|
||||
k83,k73,k63,k53,k43,k33, \
|
||||
k74,k64,k54,k34, \
|
||||
k36,k35, \
|
||||
k55, \
|
||||
k56,k46,k75, \
|
||||
k03,k23,k13,k04,k24,k14,k05,k85,k84, \
|
||||
k94,kA4,kB4,kD4,kE4,kF4, \
|
||||
k95,kA5,kB5,kD5,kE5,kF5, \
|
||||
k96,kA6,kB6,kD6,kE6,kF6, \
|
||||
k97,kA7,kB7,kD7,kE7,kF7, \
|
||||
k93,kB3,kD3,kE3, \
|
||||
k47,k66, \
|
||||
k67, \
|
||||
k87,k76,k86 \
|
||||
) { \
|
||||
{ k00, k01, k02, k03, k04, k05, KC_NO, KC_NO }, \
|
||||
{ k10, k11, k12, k13, k14, KC_NO, KC_NO, KC_NO }, \
|
||||
{ k20, k21, k22, k23, k24, KC_NO, KC_NO, KC_NO }, \
|
||||
{ k30, k31, k32, k33, k34, k35, k36, KC_NO }, \
|
||||
{ k40, k41, k42, k43, KC_NO, KC_NO, k46, k47 }, \
|
||||
{ k50, k51, k52, k53, k54, k55, k56, KC_NO }, \
|
||||
{ k60, k61, k62, k63, k64, KC_NO, k66, k67 }, \
|
||||
{ k70, k71, k72, k73, k74, k75, k76, KC_NO }, \
|
||||
{ k80, k81, k82, k83, KC_NO ,KC_NO, k86, k87}, \
|
||||
{ KC_NO, KC_NO ,KC_NO ,k93, k94, k95, k96, k97}, \
|
||||
{ KC_NO, KC_NO ,KC_NO ,KC_NO, kA4, kA5, kA6, kA7}, \
|
||||
{ KC_NO, KC_NO ,KC_NO ,kB3, kB4, kB5, kB6, kB7}, \
|
||||
{ KC_NO, KC_NO ,KC_NO ,KC_NO, KC_NO, KC_NO, k84, k85}, \
|
||||
{ KC_NO, KC_NO ,KC_NO ,kD3, kD4, kD5, kD6, kD7}, \
|
||||
{ KC_NO, KC_NO ,KC_NO ,kE3, kE4, kE5, kE6, kE7}, \
|
||||
{ KC_NO, KC_NO ,KC_NO ,KC_NO, kF4, kF5, kF6, kF7} \
|
||||
} |
||||
|
||||
|
||||
/* 4y0 A 4y1 B 4y2 4y3 D 4y4 E 4y5 F 4y6 G 4y7 H 5y0 I 5y1 J 5y2 K 5y3 L 5y4 M 5y5 N 5y6 O 5y7 P */ |
||||
|
||||
/*
|
||||
0 1 2 3 4 5 6 7 8 9 A B C D E F |
||||
A B C D E F G H I J K L M N O P |
||||
4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7 |
||||
r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 |
||||
0 PB0 21 c0 f6 f8 f7 5 4 3 2 1 =+ |
||||
1 PB1 22 c1 f3 f5 f4 t r e w q TAB |
||||
2 PB2 23 c2 ESC f2 f1 g f d s a CL |
||||
3 PB3 24 c3 f9 f11 f10 b v c x z LS UP DN [{ ]} |
||||
4 PB4 25 c4 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_ |
||||
5 PB5 26 c5 PB PGM KPD LA HM END y u i o p \
|
||||
6 PB6 27 c6 LC DEL BS RC ENT SP h j k l ;: '" |
||||
7 PB7 28 c7 RA PU PD n m ,< .> /? RS |
||||
*/ |
||||
|
||||
|
||||
#endif |
@ -0,0 +1,228 @@ |
||||
/*
|
||||
Copyright 2014 Warren Janssens <warren.janssens@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
/*
|
||||
* scan matrix |
||||
*/ |
||||
#include <stdint.h> |
||||
#include <stdbool.h> |
||||
#include <avr/io.h> |
||||
#include <util/delay.h> |
||||
#include "action_layer.h" |
||||
#include "print.h" |
||||
#include "debug.h" |
||||
#include "util.h" |
||||
#include "matrix.h" |
||||
#include "led.h" |
||||
#include "config.h" |
||||
|
||||
#ifndef DEBOUNCE |
||||
# define DEBOUNCE 5 |
||||
#endif |
||||
static uint8_t debouncing = DEBOUNCE; |
||||
|
||||
/* matrix state(1:on, 0:off) */ |
||||
static uint8_t matrix[MATRIX_ROWS]; |
||||
static uint8_t matrix_debouncing[MATRIX_ROWS]; |
||||
|
||||
static matrix_row_t read_row(uint8_t row); |
||||
static void unselect_rows(void); |
||||
static void select_rows(uint8_t row); |
||||
|
||||
__attribute__ ((weak)) |
||||
void matrix_init_quantum(void) { |
||||
matrix_init_kb(); |
||||
} |
||||
|
||||
__attribute__ ((weak)) |
||||
void matrix_scan_quantum(void) { |
||||
matrix_scan_kb(); |
||||
} |
||||
|
||||
__attribute__ ((weak)) |
||||
void matrix_init_kb(void) { |
||||
matrix_init_user(); |
||||
} |
||||
|
||||
__attribute__ ((weak)) |
||||
void matrix_scan_kb(void) { |
||||
matrix_scan_user(); |
||||
} |
||||
|
||||
__attribute__ ((weak)) |
||||
void matrix_init_user(void) { |
||||
} |
||||
|
||||
__attribute__ ((weak)) |
||||
void matrix_scan_user(void) { |
||||
} |
||||
|
||||
inline |
||||
uint8_t matrix_rows(void) |
||||
{ |
||||
return MATRIX_ROWS; |
||||
} |
||||
|
||||
|
||||
inline |
||||
uint8_t matrix_cols(void) |
||||
{ |
||||
return MATRIX_COLS; |
||||
} |
||||
|
||||
void matrix_init(void) |
||||
{ |
||||
//debug_enable = true;
|
||||
|
||||
//dprint("matrix_init"); dprintln();
|
||||
// output high (leds)
|
||||
DDRD = 0xFF; |
||||
PORTD = 0xFF; |
||||
|
||||
// output low (multiplexers)
|
||||
DDRF = 0xFF; |
||||
PORTF = 0x00; |
||||
|
||||
// input with pullup (matrix)
|
||||
DDRB = 0x00; |
||||
PORTB = 0xFF; |
||||
|
||||
// input with pullup (program and keypad buttons)
|
||||
DDRC = 0x00; |
||||
PORTC = 0xFF; |
||||
|
||||
// initialize row and col
|
||||
unselect_rows(); |
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) { |
||||
matrix[i] = 0; |
||||
matrix_debouncing[i] = 0; |
||||
} |
||||
|
||||
} |
||||
|
||||
uint8_t matrix_scan(void) |
||||
{ |
||||
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) { |
||||
select_rows(i); |
||||
uint8_t row = read_row(i); |
||||
if (matrix_debouncing[i] != row) { |
||||
matrix_debouncing[i] = row; |
||||
if (debouncing) { |
||||
debug("bounce!: "); debug_hex(debouncing); debug("\n"); |
||||
} |
||||
debouncing = DEBOUNCE; |
||||
} |
||||
unselect_rows(); |
||||
} |
||||
|
||||
if (debouncing) { |
||||
if (--debouncing) { |
||||
_delay_ms(1); |
||||
} else { |
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) { |
||||
matrix[i] = matrix_debouncing[i]; |
||||
} |
||||
} |
||||
} |
||||
matrix_scan_quantum(); |
||||
return 1; |
||||
} |
||||
|
||||
bool matrix_is_modified(void) |
||||
{ |
||||
if (debouncing) return false; |
||||
return true; |
||||
} |
||||
|
||||
inline |
||||
bool matrix_is_on(uint8_t row, uint8_t col) |
||||
{ |
||||
return (matrix[row] & ((matrix_row_t)1<<col)); |
||||
} |
||||
|
||||
inline |
||||
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(": "); |
||||
pbin_reverse(matrix_get_row(row)); |
||||
print("\n"); |
||||
} |
||||
} |
||||
|
||||
uint8_t matrix_key_count(void) |
||||
{ |
||||
uint8_t count = 0; |
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) { |
||||
count += bitpop16(matrix[i]); |
||||
} |
||||
return count; |
||||
} |
||||
|
||||
static matrix_row_t read_row(uint8_t row) |
||||
{ |
||||
_delay_us(30); // without this wait read unstable value.
|
||||
|
||||
//keypad and program buttons
|
||||
if (row == 12) |
||||
{ |
||||
return ~(PINC | 0b00111111); |
||||
} |
||||
return ~PINB; |
||||
} |
||||
|
||||
static void unselect_rows(void) |
||||
{ |
||||
// set A,B,C,G to 0 (F4 - F7)
|
||||
PORTF &= 0x0F; |
||||
} |
||||
|
||||
static void select_rows(uint8_t row) |
||||
{ |
||||
// set A,B,C,G to row value
|
||||
PORTF |= row << 4; |
||||
} |
||||
|
||||
|
||||
/* Row pin configuration
|
||||
PF0 A |
||||
PF1 B |
||||
PF2 C |
||||
PF3 G 0 = U4, 1 = U5 |
||||
|
||||
4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7
|
||||
r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16
|
||||
PB0 21 c1 f6 f8 f7 5 4 3 2 1 =+
|
||||
PB1 22 c2 f3 f5 f4 t r e w q TAB
|
||||
PB2 23 c3 ESC f2 f1 g f d s a CL
|
||||
PB3 24 c4 f9 f11 f10 b v c x z LS UP DN [{ ]}
|
||||
PB4 25 c5 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_
|
||||
PB5 26 c6 PB PGM KPD y u i o p \
|
||||
PB6 27 c7 LC DL BS RC EN SP h j k l ;: '" |
||||
PB7 28 c8 RA PU PD n m ,< .> /? RS
|
||||
*/ |
||||
|
||||
|
@ -0,0 +1,42 @@ |
||||
kinesis-advantage keyboard firmware |
||||
====================== |
||||
|
||||
## Kinesis specific information |
||||
This is a port of https://github.com/alvicstep/tmk_keyboard, |
||||
which is a fork of https://github.com/wjanssens/tmk_keyboard, |
||||
which is based on work from https://github.com/chrisandreae/keyboard-firmware |
||||
|
||||
If you replace the kinesis CPU as described in the doc folder, then this code should allow you to use QMK. |
||||
I've tested with a Teensy 2++, remember to change the CPU if you use a 32u4 instead. |
||||
|
||||
Not yet implemented: |
||||
- Kinesis EEProm reading or writing |
||||
- Audio - this should be simple if we remove hardcoded pins from audio.h and switch to E7 |
||||
|
||||
|
||||
|
||||
## Quantum MK Firmware |
||||
|
||||
For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). |
||||
|
||||
## Building |
||||
|
||||
Download or clone the whole firmware and navigate to the keyboards/kinesis-advantage 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`. |
||||
|
||||
### 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 a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant 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 **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` |
@ -0,0 +1,4 @@ |
||||
Phantom keyboard firmware |
||||
====================== |
||||
|
||||
TODO: to be updated. |
@ -0,0 +1,77 @@ |
||||
CMD-Preonic |
||||
=================== |
||||
The CMD project seeks to improve productivity by optimizing usage of the left hand via clever use of the function layers. |
||||
|
||||
>Note: This project is currently optimized for grid layout, and has not been confirmed to work 100% on MIT layout, although it is expected to work correctly. |
||||
|
||||
---------- |
||||
|
||||
Modes |
||||
------------- |
||||
|
||||
#### QWERTY |
||||
|
||||
>CMD-Qwerty is very similar to the default Preonic with a few key differences: |
||||
|
||||
- Dual-role Raise/Enter Key at Caps Lock position. -Don't need to take your hand off the mouse to submit URLs |
||||
- Space_Function under left space (Grid layout) -Don't need to take your thumb off of the spacebar to use lower. |
||||
- Dedicated arrow keys replaced with ( - , = , [ , and ] ) - big improvement for programmers who are used to fn layer. |
||||
|
||||
---------- |
||||
|
||||
#### Game |
||||
|
||||
> Disables extra features to facilitate easier usage of the Preonic while gaming. this mode is toggled in the adjust layer. |
||||
|
||||
- Dual Role Function key becomes Caps Lock. |
||||
- Space_Function disabled and replaced with normal spacebar. |
||||
- Windows Key disabled. |
||||
|
||||
---------- |
||||
|
||||
#### Numpad |
||||
|
||||
> Enables left-hand numpad |
||||
|
||||
- Left-side numpad |
||||
- Can be toggled on in Adjust layer (under . key) |
||||
|
||||
---------- |
||||
|
||||
#### Arrow - (Lower) |
||||
|
||||
> Makes arrow keys easily accessible to Left Hand, and much more. |
||||
|
||||
- Arrow keys at WASD, Backspace at Q, Delete at E. |
||||
- Media Keys near arrow cluster, mute at A. |
||||
- Web Nav keys. |
||||
- Mouse cluster at YGHJ. |
||||
- Numpad in right side of board. |
||||
- Can be toggled on in Adjust layer (Under , key) |
||||
|
||||
---------- |
||||
|
||||
#### Function- (Raise) |
||||
|
||||
> Basic Functions. Open Keys for customization. |
||||
|
||||
- Turns WASD into Navigation cluster (Home, End, Page up and Page Down) |
||||
- Pok3r style right hand arrow cluster for accessibility (familiar for many users.) |
||||
- Doubles as shift key for top row numbers. |
||||
- Print Screen, Insert, etc. |
||||
|
||||
---------- |
||||
|
||||
#### Adjust- (Raise + Lower) |
||||
|
||||
> Switch Modes |
||||
|
||||
- Default modes moved to the left and new layer toggle modes located to the right. |
||||
- Sleep and Wake keys added. |
||||
- Reset button moved under Spacebar(s). |
||||
|
||||
Notes: |
||||
------------- |
||||
|
||||
Please feel free to reach out to Commandlinedesign@gmail.com with suggestions. |
||||
Special Thanks to Jack for QMK firmware and the Preonic! |
@ -0,0 +1,332 @@ |
||||
#include "preonic.h" |
||||
#include "action_layer.h" |
||||
#include "eeconfig.h" |
||||
#ifdef AUDIO_ENABLE |
||||
#include "audio.h" |
||||
#endif |
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
#define _QWERTY 0 |
||||
#define _COLEMAK 1 |
||||
#define _DVORAK 2 |
||||
#define _GAME 3 |
||||
#define _ARROW 12 |
||||
#define _NUMPAD 13 |
||||
#define _LOWER 14 |
||||
#define _RAISE 15 |
||||
#define _ADJUST 16 |
||||
|
||||
// Macro name shortcuts
|
||||
#define QWERTY M(_QWERTY) |
||||
#define COLEMAK M(_COLEMAK) |
||||
#define DVORAK M(_DVORAK) |
||||
#define GAME M(_GAME) |
||||
#define ARROW M(_ARROW) |
||||
#define NUMPAD M(_NUMPAD) |
||||
#define LOWER M(_LOWER) |
||||
#define RAISE M(_RAISE) |
||||
#define M_BL 5 |
||||
|
||||
// Fillers to make layering more clear
|
||||
#define _______ KC_TRNS |
||||
#define XXXXXXX KC_NO |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
|
||||
/* Qwerty
|
||||
* ,-----------------------------------------------------------------------------------. |
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | Tab | Q | W | E | R | T | Y | U | I | O | P | \ | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | 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| - | = | [ | ] | |
||||
* `-----------------------------------------------------------------------------------' |
||||
*/ |
||||
[_QWERTY] = { |
||||
{KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, |
||||
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH}, |
||||
{LT(_RAISE, KC_ENT), 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 }, |
||||
{M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT(_LOWER, KC_SPC), KC_SPC, RAISE, KC_MINUS, KC_EQUAL, KC_LBRC, KC_RBRC} |
||||
}, |
||||
|
||||
/* 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| - | = | [ | ] | |
||||
* `-----------------------------------------------------------------------------------' |
||||
*/ |
||||
[_COLEMAK] = { |
||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, |
||||
{_______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, _______}, |
||||
{_______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, |
||||
{_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______}, |
||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} |
||||
}, |
||||
|
||||
/* 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| - | = | [ | ] | |
||||
* `-----------------------------------------------------------------------------------' |
||||
*/ |
||||
[_DVORAK] = { |
||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, |
||||
{_______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______}, |
||||
{_______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, _______}, |
||||
{_______, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, _______}, |
||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} |
||||
}, |
||||
|
||||
/* GAME
|
||||
* ,-----------------------------------------------------------------------------------. |
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | Tab | Q | W | E | R | T | Y | U | I | O | P | \ | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | CAPS | A | S | D | F | G | H | J | K | L | ; | " | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | Brite| Ctrl | Alt | XXX | Lower | Space | Raise| - | = | [ | ] | |
||||
* `-----------------------------------------------------------------------------------' |
||||
*/ |
||||
[_GAME] = { |
||||
{KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, |
||||
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH}, |
||||
{KC_CAPS, 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 }, |
||||
{_______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______} |
||||
}, |
||||
|
||||
/* NUMPAD
|
||||
* ,-----------------------------------------------------------------------------------. |
||||
* | Esc | / | * | - | 4 | 5 | 6 | 7 | 8 | 9 | | | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | 7 | 8 | 9 | + | R | T | Y | U | I | O | P | \ | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | 4 | 5 | 6 | + | F | G | H | J | K | L | ; | " | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | 1 | 2 | 3 | Enter| V | B | N | M | , | . | / |Enter | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | 0 | 0 | . | Enter| Lower| Space | Raise| - | = | [ | ] | |
||||
* `-----------------------------------------------------------------------------------' |
||||
*/ |
||||
[_NUMPAD] = { |
||||
{KC_ESC, KC_PSLS, KC_PAST, KC_PMNS, _______, _______, _______, _______, _______, _______, _______, _______}, |
||||
{KC_P7, KC_P8, KC_P9, KC_PPLS, _______, _______, _______, _______, _______, _______, _______, _______}, |
||||
{KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, _______, _______, _______, _______, _______}, |
||||
{KC_P1, KC_P2, KC_P3, KC_PENT, _______, _______, _______, _______, _______, _______, _______, _______}, |
||||
{KC_P0, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, _______, _______}, |
||||
}, |
||||
/* Lower
|
||||
* ,-----------------------------------------------------------------------------------. |
||||
* | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Del | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | Mute | BkSpc| Up | Del | Forwd| MBtn1| MUp| MBtn2| / | 7 | 8 | 9 | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | | Left | Down | Right| Refr MLeft| MDn |MRight| * | 4 | 5 | 6 | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | Vol+| Prev | Play | Next | Back | MWDn| MBtn3| MWUp | - | 1 | 2 | 3 | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | Vol- | | | | | | | + | Enter| 0 | . | |
||||
* `-----------------------------------------------------------------------------------' |
||||
*/ |
||||
[_LOWER] = { |
||||
{KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL}, |
||||
{KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_BTN1, KC_MS_U, KC_BTN2, KC_PSLS, KC_P7, KC_P8, KC_P9}, |
||||
{_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_L, KC_MS_D, KC_MS_R, KC_PAST, KC_P4, KC_P5, KC_P6}, |
||||
{KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_WH_D, KC_BTN3, KC_WH_U, KC_PMNS, KC_P1, KC_P2, KC_P3}, |
||||
{KC_VOLD, _______, _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PENT, KC_P0, KC_PDOT} |
||||
}, |
||||
|
||||
/* Raise
|
||||
* ,-----------------------------------------------------------------------------------. |
||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | | Bksp | PgUp | Del | | | | PgUp | Up | PgDn | | | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | | Home | PgDn | End | | | Home | Left | Down | Right| ] | \ | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | | Pause| Ins | | | Print|Screen| End | | | |Enter | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | | | | | | | | | | | | |
||||
* `-----------------------------------------------------------------------------------' |
||||
*/ |
||||
[_RAISE] = { |
||||
{KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, |
||||
{_______, KC_BSPC, KC_PGUP, KC_DEL, _______, _______, _______, KC_PGUP, KC_UP, _______, _______, _______}, |
||||
{_______, KC_HOME, KC_PGDN, KC_END, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______}, |
||||
{_______, KC_PAUSE, KC_INS, _______, KC_PSCR, KC_PSCR, _______, KC_END, _______, _______, _______, _______}, |
||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} |
||||
}, |
||||
|
||||
/* Adjust (Lower + Raise)
|
||||
* ,-----------------------------------------------------------------------------------. |
||||
* | | |qwerty|ColMak|Dvorak| | | | | | | | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | | | |AGNorm|AGSwap| | | | | | | | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | | | |Aud On|AudOff|MidiOn|MdiOff| | | | | | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | |Voice-|Voice+|Mus On|MusOff| Sleep| Wake | Arrow| Game |NUMPAD| | | |
||||
* |------+------+------+------+------+------+------+------+------+------+------+------| |
||||
* | | | | | | Reset | | | | | | |
||||
* `-----------------------------------------------------------------------------------' |
||||
*/ |
||||
[_ADJUST] = { |
||||
{_______, _______, QWERTY, COLEMAK, DVORAK, _______, _______, _______, _______, _______, _______, _______}, |
||||
{_______, RESET, _______, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, _______, KC_DEL}, |
||||
{_______, _______, _______, AU_ON, AU_OFF, MI_ON, MI_OFF, QWERTY, COLEMAK, DVORAK, _______, _______}, |
||||
{_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, KC_SYSTEM_SLEEP, KC_SYSTEM_WAKE, ARROW, GAME, NUMPAD, _______, _______}, |
||||
{_______, _______, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______} |
||||
} |
||||
|
||||
|
||||
}; |
||||
|
||||
const uint16_t PROGMEM fn_actions[] = { |
||||
|
||||
}; |
||||
|
||||
#ifdef AUDIO_ENABLE |
||||
float start_up[][2] = { |
||||
{440.0*pow(2.0,(14)/12.0), 20}, |
||||
{440.0*pow(2.0,(26)/12.0), 8}, |
||||
{440.0*pow(2.0,(18)/12.0), 20}, |
||||
{440.0*pow(2.0,(26)/12.0), 8} |
||||
}; |
||||
|
||||
float tone_qwerty[][2] = SONG(QWERTY_SOUND); |
||||
float tone_dvorak[][2] = SONG(DVORAK_SOUND); |
||||
float tone_colemak[][2] = SONG(COLEMAK_SOUND); |
||||
|
||||
float goodbye[][2] = SONG(GOODBYE_SOUND); |
||||
#endif |
||||
|
||||
void persistant_default_layer_set(uint16_t default_layer) { |
||||
eeconfig_update_default_layer(default_layer); |
||||
default_layer_set(default_layer); |
||||
} |
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) |
||||
{ |
||||
switch(id) { |
||||
case _QWERTY: |
||||
if (record->event.pressed) { |
||||
#ifdef AUDIO_ENABLE |
||||
PLAY_NOTE_ARRAY(tone_qwerty, false, 0); |
||||
#endif |
||||
persistant_default_layer_set(1UL<<_QWERTY); |
||||
} |
||||
break; |
||||
case _COLEMAK: |
||||
if (record->event.pressed) { |
||||
#ifdef AUDIO_ENABLE |
||||
PLAY_NOTE_ARRAY(tone_colemak, false, 0); |
||||
#endif |
||||
persistant_default_layer_set(1UL<<_COLEMAK); |
||||
} |
||||
break; |
||||
case _DVORAK: |
||||
if (record->event.pressed) { |
||||
#ifdef AUDIO_ENABLE |
||||
PLAY_NOTE_ARRAY(tone_dvorak, false, 0); |
||||
#endif |
||||
persistant_default_layer_set(1UL<<_DVORAK); |
||||
} |
||||
break; |
||||
case _GAME: |
||||
if (record->event.pressed) { |
||||
#ifdef AUDIO_ENABLE |
||||
PLAY_NOTE_ARRAY(tone_colemak, false, 0); |
||||
#endif |
||||
persistant_default_layer_set(1UL<<_GAME); |
||||
} |
||||
break; |
||||
case _NUMPAD: |
||||
if (record->event.pressed) { |
||||
#ifdef AUDIO_ENABLE |
||||
PLAY_NOTE_ARRAY(tone_dvorak, false, 0); |
||||
#endif |
||||
persistant_default_layer_set(1UL<<_NUMPAD); |
||||
} |
||||
break; |
||||
case _ARROW: |
||||
if (record->event.pressed) { |
||||
#ifdef AUDIO_ENABLE |
||||
PLAY_NOTE_ARRAY(tone_colemak, false, 0); |
||||
#endif |
||||
persistant_default_layer_set(1UL<<_LOWER); |
||||
} |
||||
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); |
||||
} |
||||
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); |
||||
} |
||||
break; |
||||
case M_BL: |
||||
if (record->event.pressed) { |
||||
register_code(KC_RSFT); |
||||
#ifdef BACKLIGHT_ENABLE |
||||
backlight_step(); |
||||
#endif |
||||
} else { |
||||
unregister_code(KC_RSFT); |
||||
} |
||||
break; |
||||
} |
||||
return MACRO_NONE; |
||||
}; |
||||
|
||||
|
||||
void matrix_init_user(void) { |
||||
#ifdef AUDIO_ENABLE |
||||
_delay_ms(20); // gets rid of tick
|
||||
PLAY_NOTE_ARRAY(start_up, false, 0); |
||||
#endif |
||||
} |
||||
|
||||
#ifdef AUDIO_ENABLE |
||||
|
||||
void play_goodbye_tone() |
||||
{ |
||||
PLAY_NOTE_ARRAY(goodbye, false, 0); |
||||
_delay_ms(150); |
||||
} |
||||
|
||||
#endif |
@ -0,0 +1,23 @@ |
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
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 = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # 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
|
||||
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. Do not enable this with audio at the same time.
|
||||
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
ifndef QUANTUM_DIR |
||||
include ../../../../Makefile
|
||||
endif |
@ -0,0 +1,21 @@ |
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
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 = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # 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. Do not enable this with audio at the same time.
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
ifndef QUANTUM_DIR |
||||
include ../../../../Makefile
|
||||
endif |
@ -0,0 +1 @@ |
||||
# default Satan GH60 layout |
@ -0,0 +1,21 @@ |
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
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 = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # 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. Do not enable this with audio at the same time.
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
ifndef QUANTUM_DIR |
||||
include ../../../../Makefile
|
||||
endif |
@ -0,0 +1,3 @@ |
||||
# sethbc's Satan GH60 layout |
||||
|
||||
HHKB style split right shift and split backspace. Largely based on the HHKB layout. |
@ -0,0 +1,4 @@ |
||||
Satan GH60 keyboard firmware |
||||
====================== |
||||
|
||||
TODO: to be updated. |