@ -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. |