Merge remote-tracking branch 'upstream/master'
@ -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)
|
||||
![teckinesis base layout](teckinesis-base.png)
|
||||
|
||||
### 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)
|
||||
![teckinesis symbols layout](teckinesis-symbol.png)
|
||||
|
||||
### Changes from The Ordinary Layout ###
|
||||
|
||||
* None.
|
||||
|
||||
## The Media Layer ##
|
||||
|
||||
[teckinesis (Media Layer)](http://www.keyboard-layout-editor.com/#/gists/41ff65e6a7c490211fd6702fb34d9908)
|
||||
![teckinesis media layout](teckinesis-media.png)
|
||||
|
||||
### 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![teckinesis base layout](teckinesis-base.png)\r\n\r\n## The Symbols Layer ##\r\n\r\n![teckinesis symbols layout](teckinesis-symbol.png)\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.
|