diff --git a/qmk/README.md b/qmk/README.md new file mode 100644 index 0000000..e69de29 diff --git a/qmk/convert.py b/qmk/convert.py new file mode 100644 index 0000000..646c028 --- /dev/null +++ b/qmk/convert.py @@ -0,0 +1,95 @@ +import json +layout = [ + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 10], "x": 11, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0.125}, + {"matrix": [0, 4], "x": 4, "y": 0.125}, + {"matrix": [0, 5], "x": 5, "y": 0.125}, + {"matrix": [0, 6], "x": 6, "y": 0.125}, + {"matrix": [0, 7], "x": 8, "y": 0.125}, + {"matrix": [0, 8], "x": 9, "y": 0.125}, + {"matrix": [0, 9], "x": 10, "y": 0.125}, + {"matrix": [0, 11], "x": 12, "y": 0.125}, + {"matrix": [1, 3], "x": 3, "y": 1}, + {"matrix": [1, 10], "x": 11, "y": 1}, + {"matrix": [1, 2], "x": 2, "y": 1.125}, + {"matrix": [1, 4], "x": 4, "y": 1.125}, + {"matrix": [1, 5], "x": 5, "y": 1.125}, + {"matrix": [1, 6], "x": 6, "y": 1.125}, + {"matrix": [1, 7], "x": 8, "y": 1.125}, + {"matrix": [1, 8], "x": 9, "y": 1.125}, + {"matrix": [1, 9], "x": 10, "y": 1.125}, + {"matrix": [1, 11], "x": 12, "y": 1.125}, + {"matrix": [1, 0], "x": 0, "y": 1.375}, + {"matrix": [1, 1], "x": 1, "y": 1.375}, + {"matrix": [1, 12], "x": 13, "y": 1.375}, + {"matrix": [1, 13], "x": 14, "y": 1.375}, + {"matrix": [2, 3], "x": 3, "y": 2}, + {"matrix": [2, 10], "x": 11, "y": 2}, + {"matrix": [2, 2], "x": 2, "y": 2.125}, + {"matrix": [2, 4], "x": 4, "y": 2.125}, + {"matrix": [2, 5], "x": 5, "y": 2.125}, + {"matrix": [2, 6], "x": 6, "y": 2.125}, + {"matrix": [2, 7], "x": 8, "y": 2.125}, + {"matrix": [2, 8], "x": 9, "y": 2.125}, + {"matrix": [2, 9], "x": 10, "y": 2.125}, + {"matrix": [2, 11], "x": 12, "y": 2.125}, + {"matrix": [2, 0], "x": 0, "y": 2.375}, + {"matrix": [2, 1], "x": 1, "y": 2.375}, + {"matrix": [2, 12], "x": 13, "y": 2.375}, + {"matrix": [2, 13], "x": 14, "y": 2.375}, + {"matrix": [3, 3], "x": 3, "y": 3}, + {"matrix": [3, 10], "x": 11, "y": 3}, + {"matrix": [3, 2], "x": 2, "y": 3.125}, + {"matrix": [3, 4], "x": 4, "y": 3.125}, + {"matrix": [3, 5], "x": 5, "y": 3.125}, + {"matrix": [3, 6], "x": 6, "y": 3.125}, + {"matrix": [3, 7], "x": 8, "y": 3.125}, + {"matrix": [3, 8], "x": 9, "y": 3.125}, + {"matrix": [3, 9], "x": 10, "y": 3.125}, + {"matrix": [3, 11], "x": 12, "y": 3.125}, + {"matrix": [3, 0], "x": 0, "y": 3.375}, + {"matrix": [3, 1], "x": 1, "y": 3.375}, + {"matrix": [3, 12], "x": 13, "y": 3.375}, + {"matrix": [3, 13], "x": 14, "y": 3.375}, + {"matrix": [4, 3], "x": 3, "y": 4}, + {"matrix": [4, 10], "x": 11, "y": 4}, + {"matrix": [4, 2], "x": 2, "y": 4.125}, + {"matrix": [4, 4], "x": 4, "y": 4.125}, + {"matrix": [4, 5], "x": 5, "y": 4.125}, + {"matrix": [4, 6], "x": 6, "y": 4.125}, + {"matrix": [4, 7], "x": 8, "y": 4.125}, + {"matrix": [4, 8], "x": 9, "y": 4.125}, + {"matrix": [4, 9], "x": 10, "y": 4.125}, + {"matrix": [4, 11], "x": 12, "y": 4.125}, + {"matrix": [4, 0], "x": 0, "y": 4.375}, + {"matrix": [4, 1], "x": 1, "y": 4.375}, + {"matrix": [4, 12], "x": 13, "y": 4.375}, + {"matrix": [4, 13], "x": 14, "y": 4.375}, + {"matrix": [5, 3], "x": 3, "y": 5}, + {"matrix": [5, 10], "x": 11, "y": 5}, + {"matrix": [5, 2], "x": 2, "y": 5.125}, + {"matrix": [5, 4], "x": 4, "y": 5.125}, + {"matrix": [5, 5], "x": 5, "y": 5.125}, + {"matrix": [5, 6], "x": 6, "y": 5.125}, + {"matrix": [5, 7], "x": 8, "y": 5.125}, + {"matrix": [5, 8], "x": 9, "y": 5.125}, + {"matrix": [5, 9], "x": 10, "y": 5.125}, + {"matrix": [5, 11], "x": 12, "y": 5.125}, + {"matrix": [5, 0], "x": 0, "y": 5.375}, + {"matrix": [5, 1], "x": 1, "y": 5.375}, + {"matrix": [5, 12], "x": 13, "y": 5.375}, + {"matrix": [5, 13], "x": 14, "y": 5.375}, +] + + +new_layout = [] +for x in layout: + m = x["matrix"] + if m[1] > 6: + m[0] += 6 + m[1] -= 7 + x["matrix"] = m + new_layout.append(x) + +print(json.dumps(new_layout)) diff --git a/qmk/etc/rev1/snappy_rev1.json b/qmk/etc/rev1/snappy_rev1.json new file mode 100644 index 0000000..6ebb528 --- /dev/null +++ b/qmk/etc/rev1/snappy_rev1.json @@ -0,0 +1,273 @@ +[ + { + "name": "Snappy", + "author": "Philip Gaber ", + "notes": "Handwired keyboard to test this layout idea.", + "switchMount": "cherry", + "switchBrand": "gateron", + "plate": true + }, + [ + { + "x": 3, + "a": 7 + }, + "", + { + "x": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "", + { + "x": 1 + }, + "", + "", + { + "x": 2 + }, + "", + "", + "", + { + "x": 1 + }, + "" + ], + [ + { + "y": -0.125, + "x": 3 + }, + "", + { + "x": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "" + ], + [ + { + "y": -0.75 + }, + "", + "", + { + "x": 11 + }, + "", + "" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "", + { + "x": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "" + ], + [ + { + "y": -0.75 + }, + "", + "", + { + "x": 11 + }, + "", + "" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "", + { + "x": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "" + ], + [ + { + "y": -0.75 + }, + "", + "", + { + "x": 11 + }, + "", + "" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "", + { + "x": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "" + ], + [ + { + "y": -0.75 + }, + "", + "", + { + "x": 11 + }, + "", + "" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "", + { + "x": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "" + ], + [ + { + "y": -0.75 + }, + "", + "", + { + "x": 11 + }, + "", + "" + ] +] \ No newline at end of file diff --git a/qmk/etc/rev1/snappy_rev1.kb_raw b/qmk/etc/rev1/snappy_rev1.kb_raw new file mode 100644 index 0000000..5ce617d --- /dev/null +++ b/qmk/etc/rev1/snappy_rev1.kb_raw @@ -0,0 +1,22 @@ +[{x:3,a:7},"",{x:7},""], +[{y:-0.875,x:2},"",{x:1},"","",{x:2},"","","",{x:1},""], + +[{y:-0.125,x:3},"",{x:7},""], +[{y:-0.875,x:2},"",{x:1},"","","",{x:1},"","","",{x:1},""], +[{y:-0.75},"","",{x:11},"",""], + +[{y:-0.375,x:3},"",{x:7},""], +[{y:-0.875,x:2},"",{x:1},"","","",{x:1},"","","",{x:1},""], +[{y:-0.75},"","",{x:11},"",""], + +[{y:-0.375,x:3},"",{x:7},""], +[{y:-0.875,x:2},"",{x:1},"","","",{x:1},"","","",{x:1},""], +[{y:-0.75},"","",{x:11},"",""], + +[{y:-0.375,x:3},"",{x:7},""], +[{y:-0.875,x:2},"",{x:1},"","","",{x:1},"","","",{x:1},""], +[{y:-0.75},"","",{x:11},"",""], + +[{y:-0.375,x:3},"",{x:7},""], +[{y:-0.875,x:2},"",{x:1},"","","",{x:1},"","","",{x:1},""], +[{y:-0.75},"","",{x:11},"",""] diff --git a/qmk/etc/rev1/snappy_rev1.png b/qmk/etc/rev1/snappy_rev1.png new file mode 100644 index 0000000..54856f0 Binary files /dev/null and b/qmk/etc/rev1/snappy_rev1.png differ diff --git a/qmk/etc/rev1/snappy_rev1_info.json b/qmk/etc/rev1/snappy_rev1_info.json new file mode 100644 index 0000000..4bd7503 --- /dev/null +++ b/qmk/etc/rev1/snappy_rev1_info.json @@ -0,0 +1,327 @@ +{ + "keyboard_name": "snappy - rev1", + "url": "", + "maintainer": "qhga", + "layouts": { + "LAYOUT": { + "layout": [ + { + "x": 3, + "y": 0 + }, + { + "x": 11, + "y": 0 + }, + { + "x": 2, + "y": 0.125 + }, + { + "x": 4, + "y": 0.125 + }, + { + "x": 5, + "y": 0.125 + }, + { + "x": 8, + "y": 0.125 + }, + { + "x": 9, + "y": 0.125 + }, + { + "x": 10, + "y": 0.125 + }, + { + "x": 12, + "y": 0.125 + }, + { + "x": 3, + "y": 1 + }, + { + "x": 11, + "y": 1 + }, + { + "x": 2, + "y": 1.125 + }, + { + "x": 4, + "y": 1.125 + }, + { + "x": 5, + "y": 1.125 + }, + { + "x": 6, + "y": 1.125 + }, + { + "x": 8, + "y": 1.125 + }, + { + "x": 9, + "y": 1.125 + }, + { + "x": 10, + "y": 1.125 + }, + { + "x": 12, + "y": 1.125 + }, + { + "x": 0, + "y": 1.375 + }, + { + "x": 1, + "y": 1.375 + }, + { + "x": 13, + "y": 1.375 + }, + { + "x": 14, + "y": 1.375 + }, + { + "x": 3, + "y": 2 + }, + { + "x": 11, + "y": 2 + }, + { + "x": 2, + "y": 2.125 + }, + { + "x": 4, + "y": 2.125 + }, + { + "x": 5, + "y": 2.125 + }, + { + "x": 6, + "y": 2.125 + }, + { + "x": 8, + "y": 2.125 + }, + { + "x": 9, + "y": 2.125 + }, + { + "x": 10, + "y": 2.125 + }, + { + "x": 12, + "y": 2.125 + }, + { + "x": 0, + "y": 2.375 + }, + { + "x": 1, + "y": 2.375 + }, + { + "x": 13, + "y": 2.375 + }, + { + "x": 14, + "y": 2.375 + }, + { + "x": 3, + "y": 3 + }, + { + "x": 11, + "y": 3 + }, + { + "x": 2, + "y": 3.125 + }, + { + "x": 4, + "y": 3.125 + }, + { + "x": 5, + "y": 3.125 + }, + { + "x": 6, + "y": 3.125 + }, + { + "x": 8, + "y": 3.125 + }, + { + "x": 9, + "y": 3.125 + }, + { + "x": 10, + "y": 3.125 + }, + { + "x": 12, + "y": 3.125 + }, + { + "x": 0, + "y": 3.375 + }, + { + "x": 1, + "y": 3.375 + }, + { + "x": 13, + "y": 3.375 + }, + { + "x": 14, + "y": 3.375 + }, + { + "x": 3, + "y": 4 + }, + { + "x": 11, + "y": 4 + }, + { + "x": 2, + "y": 4.125 + }, + { + "x": 4, + "y": 4.125 + }, + { + "x": 5, + "y": 4.125 + }, + { + "x": 6, + "y": 4.125 + }, + { + "x": 8, + "y": 4.125 + }, + { + "x": 9, + "y": 4.125 + }, + { + "x": 10, + "y": 4.125 + }, + { + "x": 12, + "y": 4.125 + }, + { + "x": 0, + "y": 4.375 + }, + { + "x": 1, + "y": 4.375 + }, + { + "x": 13, + "y": 4.375 + }, + { + "x": 14, + "y": 4.375 + }, + { + "x": 3, + "y": 5 + }, + { + "x": 11, + "y": 5 + }, + { + "x": 2, + "y": 5.125 + }, + { + "x": 4, + "y": 5.125 + }, + { + "x": 5, + "y": 5.125 + }, + { + "x": 6, + "y": 5.125 + }, + { + "x": 8, + "y": 5.125 + }, + { + "x": 9, + "y": 5.125 + }, + { + "x": 10, + "y": 5.125 + }, + { + "x": 12, + "y": 5.125 + }, + { + "x": 0, + "y": 5.375 + }, + { + "x": 1, + "y": 5.375 + }, + { + "x": 13, + "y": 5.375 + }, + { + "x": 14, + "y": 5.375 + } + ] + } + } +} \ No newline at end of file diff --git a/qmk/etc/rev1/snappy_rev1_via_keyboard_definition.json b/qmk/etc/rev1/snappy_rev1_via_keyboard_definition.json new file mode 100644 index 0000000..8e06638 --- /dev/null +++ b/qmk/etc/rev1/snappy_rev1_via_keyboard_definition.json @@ -0,0 +1,275 @@ +{ + "name": "snappy v1", + "vendorId": "0xCAFE", + "productId": "0x0001", + "matrix": { + "rows": 12, + "cols": 7 + }, + "layouts": { + "keymap": [ + [ + { + "x": 3 + }, + "0,3", + { + "x": 7 + }, + "6,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "0,2", + { + "x": 1 + }, + "0,4", + "0,5", + { + "x": 2 + }, + "6,6", + "6,5", + "6,4", + { + "x": 1 + }, + "6,2" + ], + [ + { + "y": -0.125, + "x": 3 + }, + "1,3", + { + "x": 7 + }, + "7,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "1,2", + { + "x": 1 + }, + "1,4", + "1,5", + "1,6", + { + "x": 1 + }, + "7,6", + "7,5", + "7,4", + { + "x": 1 + }, + "7,2" + ], + [ + { + "y": -0.75 + }, + "1,0", + "1,1", + { + "x": 11 + }, + "7,1", + "7,0" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "2,3", + { + "x": 7 + }, + "8,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "2,2", + { + "x": 1 + }, + "2,4", + "2,5", + "2,6", + { + "x": 1 + }, + "8,6", + "8,5", + "8,4", + { + "x": 1 + }, + "8,2" + ], + [ + { + "y": -0.75 + }, + "2,0", + "2,1", + { + "x": 11 + }, + "8,1", + "8,0" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "3,3", + { + "x": 7 + }, + "9,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "3,2", + { + "x": 1 + }, + "3,4", + "3,5", + "3,6", + { + "x": 1 + }, + "9,6", + "9,5", + "9,4", + { + "x": 1 + }, + "9,2" + ], + [ + { + "y": -0.75 + }, + "3,0", + "3,1", + { + "x": 11 + }, + "9,1", + "9,0" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "4,3", + { + "x": 7 + }, + "10,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "4,2", + { + "x": 1 + }, + "4,4", + "4,5", + "4,6", + { + "x": 1 + }, + "10,6", + "10,5", + "10,4", + { + "x": 1 + }, + "10,2" + ], + [ + { + "y": -0.75 + }, + "4,0", + "4,1", + { + "x": 11 + }, + "10,1", + "10,0" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "5,3", + { + "x": 7 + }, + "11,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "5,2", + { + "x": 1 + }, + "5,4", + "5,5", + "5,6", + { + "x": 1 + }, + "11,6", + "11,5", + "11,4", + { + "x": 1 + }, + "11,2" + ], + [ + { + "y": -0.75 + }, + "5,0", + "5,1", + { + "x": 11 + }, + "11,1", + "11,0" + ] + ] + } +} diff --git a/qmk/etc/rev2/snappy_rev2.json b/qmk/etc/rev2/snappy_rev2.json new file mode 100644 index 0000000..56310c9 --- /dev/null +++ b/qmk/etc/rev2/snappy_rev2.json @@ -0,0 +1,266 @@ +[ + [ + { + "x": 3, + "a": 7 + }, + "", + { + "x": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "" + ], + [ + { + "y": -0.125, + "x": 3 + }, + "", + { + "x": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "" + ], + [ + { + "y": -0.75 + }, + "", + "", + { + "x": 11 + }, + "", + "" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "", + { + "x": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "" + ], + [ + { + "y": -0.75 + }, + "", + "", + { + "x": 11 + }, + "", + "" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "", + { + "x": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "" + ], + [ + { + "y": -0.75 + }, + "", + "", + { + "x": 11 + }, + "", + "" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "", + { + "x": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "" + ], + [ + { + "y": -0.75 + }, + "", + "", + { + "x": 11 + }, + "", + "" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "", + { + "x": 7 + }, + "" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "", + "", + "", + { + "x": 1 + }, + "" + ], + [ + { + "y": -0.75 + }, + "", + "", + { + "x": 11 + }, + "", + "" + ] +] \ No newline at end of file diff --git a/qmk/etc/rev2/snappy_rev2.kb_raw b/qmk/etc/rev2/snappy_rev2.kb_raw new file mode 100644 index 0000000..7ec24c5 --- /dev/null +++ b/qmk/etc/rev2/snappy_rev2.kb_raw @@ -0,0 +1,22 @@ +[{x:3,a:7},"",{x:7},""], +[{y:-0.875,x:2},"",{x:1},"","","",{x:1},"","","",{x:1},""], + +[{y:-0.125,x:3},"",{x:7},""], +[{y:-0.875,x:2},"",{x:1},"","","",{x:1},"","","",{x:1},""], +[{y:-0.75},"","",{x:11},"",""], + +[{y:-0.375,x:3},"",{x:7},""], +[{y:-0.875,x:2},"",{x:1},"","","",{x:1},"","","",{x:1},""], +[{y:-0.75},"","",{x:11},"",""], + +[{y:-0.375,x:3},"",{x:7},""], +[{y:-0.875,x:2},"",{x:1},"","","",{x:1},"","","",{x:1},""], +[{y:-0.75},"","",{x:11},"",""], + +[{y:-0.375,x:3},"",{x:7},""], +[{y:-0.875,x:2},"",{x:1},"","","",{x:1},"","","",{x:1},""], +[{y:-0.75},"","",{x:11},"",""], + +[{y:-0.375,x:3},"",{x:7},""], +[{y:-0.875,x:2},"",{x:1},"","","",{x:1},"","","",{x:1},""], +[{y:-0.75},"","",{x:11},"",""] diff --git a/qmk/etc/rev2/snappy_rev2.png b/qmk/etc/rev2/snappy_rev2.png new file mode 100644 index 0000000..51a69ed Binary files /dev/null and b/qmk/etc/rev2/snappy_rev2.png differ diff --git a/qmk/etc/rev2/snappy_rev2_info.json b/qmk/etc/rev2/snappy_rev2_info.json new file mode 100644 index 0000000..5142669 --- /dev/null +++ b/qmk/etc/rev2/snappy_rev2_info.json @@ -0,0 +1,331 @@ +{ + "keyboard_name": "snappy - rev2", + "url": "", + "maintainer": "phga", + "layouts": { + "LAYOUT": { + "layout": [ + { + "x": 3, + "y": 0 + }, + { + "x": 11, + "y": 0 + }, + { + "x": 2, + "y": 0.125 + }, + { + "x": 4, + "y": 0.125 + }, + { + "x": 5, + "y": 0.125 + }, + { + "x": 6, + "y": 0.125 + }, + { + "x": 8, + "y": 0.125 + }, + { + "x": 9, + "y": 0.125 + }, + { + "x": 10, + "y": 0.125 + }, + { + "x": 12, + "y": 0.125 + }, + { + "x": 3, + "y": 1 + }, + { + "x": 11, + "y": 1 + }, + { + "x": 2, + "y": 1.125 + }, + { + "x": 4, + "y": 1.125 + }, + { + "x": 5, + "y": 1.125 + }, + { + "x": 6, + "y": 1.125 + }, + { + "x": 8, + "y": 1.125 + }, + { + "x": 9, + "y": 1.125 + }, + { + "x": 10, + "y": 1.125 + }, + { + "x": 12, + "y": 1.125 + }, + { + "x": 0, + "y": 1.375 + }, + { + "x": 1, + "y": 1.375 + }, + { + "x": 13, + "y": 1.375 + }, + { + "x": 14, + "y": 1.375 + }, + { + "x": 3, + "y": 2 + }, + { + "x": 11, + "y": 2 + }, + { + "x": 2, + "y": 2.125 + }, + { + "x": 4, + "y": 2.125 + }, + { + "x": 5, + "y": 2.125 + }, + { + "x": 6, + "y": 2.125 + }, + { + "x": 8, + "y": 2.125 + }, + { + "x": 9, + "y": 2.125 + }, + { + "x": 10, + "y": 2.125 + }, + { + "x": 12, + "y": 2.125 + }, + { + "x": 0, + "y": 2.375 + }, + { + "x": 1, + "y": 2.375 + }, + { + "x": 13, + "y": 2.375 + }, + { + "x": 14, + "y": 2.375 + }, + { + "x": 3, + "y": 3 + }, + { + "x": 11, + "y": 3 + }, + { + "x": 2, + "y": 3.125 + }, + { + "x": 4, + "y": 3.125 + }, + { + "x": 5, + "y": 3.125 + }, + { + "x": 6, + "y": 3.125 + }, + { + "x": 8, + "y": 3.125 + }, + { + "x": 9, + "y": 3.125 + }, + { + "x": 10, + "y": 3.125 + }, + { + "x": 12, + "y": 3.125 + }, + { + "x": 0, + "y": 3.375 + }, + { + "x": 1, + "y": 3.375 + }, + { + "x": 13, + "y": 3.375 + }, + { + "x": 14, + "y": 3.375 + }, + { + "x": 3, + "y": 4 + }, + { + "x": 11, + "y": 4 + }, + { + "x": 2, + "y": 4.125 + }, + { + "x": 4, + "y": 4.125 + }, + { + "x": 5, + "y": 4.125 + }, + { + "x": 6, + "y": 4.125 + }, + { + "x": 8, + "y": 4.125 + }, + { + "x": 9, + "y": 4.125 + }, + { + "x": 10, + "y": 4.125 + }, + { + "x": 12, + "y": 4.125 + }, + { + "x": 0, + "y": 4.375 + }, + { + "x": 1, + "y": 4.375 + }, + { + "x": 13, + "y": 4.375 + }, + { + "x": 14, + "y": 4.375 + }, + { + "x": 3, + "y": 5 + }, + { + "x": 11, + "y": 5 + }, + { + "x": 2, + "y": 5.125 + }, + { + "x": 4, + "y": 5.125 + }, + { + "x": 5, + "y": 5.125 + }, + { + "x": 6, + "y": 5.125 + }, + { + "x": 8, + "y": 5.125 + }, + { + "x": 9, + "y": 5.125 + }, + { + "x": 10, + "y": 5.125 + }, + { + "x": 12, + "y": 5.125 + }, + { + "x": 0, + "y": 5.375 + }, + { + "x": 1, + "y": 5.375 + }, + { + "x": 13, + "y": 5.375 + }, + { + "x": 14, + "y": 5.375 + } + ] + } + } +} \ No newline at end of file diff --git a/qmk/etc/rev2/snappy_rev2_via_keyboard_definition.json b/qmk/etc/rev2/snappy_rev2_via_keyboard_definition.json new file mode 100644 index 0000000..23fad34 --- /dev/null +++ b/qmk/etc/rev2/snappy_rev2_via_keyboard_definition.json @@ -0,0 +1,276 @@ +{ + "name": "snappy v2", + "vendorId": "0xCAFE", + "productId": "0x0002", + "matrix": { + "rows": 12, + "cols": 7 + }, + "layouts": { + "keymap": [ + [ + { + "x": 3 + }, + "0,3", + { + "x": 7 + }, + "6,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "0,2", + { + "x": 1 + }, + "0,4", + "0,5", + "0,6", + { + "x": 1 + }, + "6,6", + "6,5", + "6,4", + { + "x": 1 + }, + "6,2" + ], + [ + { + "y": -0.125, + "x": 3 + }, + "1,3", + { + "x": 7 + }, + "7,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "1,2", + { + "x": 1 + }, + "1,4", + "1,5", + "1,6", + { + "x": 1 + }, + "7,6", + "7,5", + "7,4", + { + "x": 1 + }, + "7,2" + ], + [ + { + "y": -0.75 + }, + "1,0", + "1,1", + { + "x": 11 + }, + "7,1", + "7,0" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "2,3", + { + "x": 7 + }, + "8,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "2,2", + { + "x": 1 + }, + "2,4", + "2,5", + "2,6", + { + "x": 1 + }, + "8,6", + "8,5", + "8,4", + { + "x": 1 + }, + "8,2" + ], + [ + { + "y": -0.75 + }, + "2,0", + "2,1", + { + "x": 11 + }, + "8,1", + "8,0" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "3,3", + { + "x": 7 + }, + "9,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "3,2", + { + "x": 1 + }, + "3,4", + "3,5", + "3,6", + { + "x": 1 + }, + "9,6", + "9,5", + "9,4", + { + "x": 1 + }, + "9,2" + ], + [ + { + "y": -0.75 + }, + "3,0", + "3,1", + { + "x": 11 + }, + "9,1", + "9,0" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "4,3", + { + "x": 7 + }, + "10,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "4,2", + { + "x": 1 + }, + "4,4", + "4,5", + "4,6", + { + "x": 1 + }, + "10,6", + "10,5", + "10,4", + { + "x": 1 + }, + "10,2" + ], + [ + { + "y": -0.75 + }, + "4,0", + "4,1", + { + "x": 11 + }, + "10,1", + "10,0" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "5,3", + { + "x": 7 + }, + "11,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "5,2", + { + "x": 1 + }, + "5,4", + "5,5", + "5,6", + { + "x": 1 + }, + "11,6", + "11,5", + "11,4", + { + "x": 1 + }, + "11,2" + ], + [ + { + "y": -0.75 + }, + "5,0", + "5,1", + { + "x": 11 + }, + "11,1", + "11,0" + ] + ] + } +} diff --git a/qmk/etc/rev3/flash_nuke.uf2 b/qmk/etc/rev3/flash_nuke.uf2 new file mode 100644 index 0000000..31291e6 Binary files /dev/null and b/qmk/etc/rev3/flash_nuke.uf2 differ diff --git a/qmk/etc/rev3/snappy_rev3_via_keyboard_definition.json b/qmk/etc/rev3/snappy_rev3_via_keyboard_definition.json new file mode 100644 index 0000000..33146a8 --- /dev/null +++ b/qmk/etc/rev3/snappy_rev3_via_keyboard_definition.json @@ -0,0 +1,276 @@ +{ + "name": "snappy v3", + "vendorId": "0xCAFE", + "productId": "0x1337", + "matrix": { + "rows": 12, + "cols": 7 + }, + "layouts": { + "keymap": [ + [ + { + "x": 3 + }, + "0,3", + { + "x": 7 + }, + "6,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "0,2", + { + "x": 1 + }, + "0,4", + "0,5", + "0,6", + { + "x": 1 + }, + "6,6", + "6,5", + "6,4", + { + "x": 1 + }, + "6,2" + ], + [ + { + "y": -0.125, + "x": 3 + }, + "1,3", + { + "x": 7 + }, + "7,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "1,2", + { + "x": 1 + }, + "1,4", + "1,5", + "1,6", + { + "x": 1 + }, + "7,6", + "7,5", + "7,4", + { + "x": 1 + }, + "7,2" + ], + [ + { + "y": -0.75 + }, + "1,0", + "1,1", + { + "x": 11 + }, + "7,1", + "7,0" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "2,3", + { + "x": 7 + }, + "8,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "2,2", + { + "x": 1 + }, + "2,4", + "2,5", + "2,6", + { + "x": 1 + }, + "8,6", + "8,5", + "8,4", + { + "x": 1 + }, + "8,2" + ], + [ + { + "y": -0.75 + }, + "2,0", + "2,1", + { + "x": 11 + }, + "8,1", + "8,0" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "3,3", + { + "x": 7 + }, + "9,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "3,2", + { + "x": 1 + }, + "3,4", + "3,5", + "3,6", + { + "x": 1 + }, + "9,6", + "9,5", + "9,4", + { + "x": 1 + }, + "9,2" + ], + [ + { + "y": -0.75 + }, + "3,0", + "3,1", + { + "x": 11 + }, + "9,1", + "9,0" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "4,3", + { + "x": 7 + }, + "10,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "4,2", + { + "x": 1 + }, + "4,4", + "4,5", + "4,6", + { + "x": 1 + }, + "10,6", + "10,5", + "10,4", + { + "x": 1 + }, + "10,2" + ], + [ + { + "y": -0.75 + }, + "4,0", + "4,1", + { + "x": 11 + }, + "10,1", + "10,0" + ], + [ + { + "y": -0.375, + "x": 3 + }, + "5,3", + { + "x": 7 + }, + "11,3" + ], + [ + { + "y": -0.875, + "x": 2 + }, + "5,2", + { + "x": 1 + }, + "5,4", + "5,5", + "5,6", + { + "x": 1 + }, + "11,6", + "11,5", + "11,4", + { + "x": 1 + }, + "11,2" + ], + [ + { + "y": -0.75 + }, + "5,0", + "5,1", + { + "x": 11 + }, + "11,1", + "11,0" + ] + ] + } +} diff --git a/qmk/snappy/README.md b/qmk/snappy/README.md new file mode 100644 index 0000000..3b3979d --- /dev/null +++ b/qmk/snappy/README.md @@ -0,0 +1,56 @@ +# snappy + +![snappy](imgur.com image replace me!) + +*A short description of the keyboard/project* + +* Keyboard Maintainer: [Philip Gaber](https://github.com/qhga) +* Hardware Supported: *The PCBs, controllers supported* +* Hardware Availability: *Links to where you can find this hardware* + +Make example for this keyboard (after setting up your build environment): + + make snappy:default + + # REV1 & REV2 (elite c) + sudo make snappy/rev1:default:dfu-split-left + sudo make snappy/rev1:default:dfu-split-right + + sudo make snappy/rev2:default:dfu-split-left + sudo make snappy/rev2:default:dfu-split-right + + # REV3 (promicro rp2040) (info.json -> CURRENTLY NOT WORKING) + sudo make snappy/rev3:default:uf2-split-left + sudo make snappy/rev3:default:uf2-split-right + + # REV3_5 (promicro rp2040) (WITHOUT info.json) + sudo make snappy/rev3_5:default:uf2-split-left + sudo make snappy/rev3_5:default:uf2-split-right + + # Make sure to mount the RP2040 drive to /media/snappy for automatic copying of the .uf2 file + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +### REV1 & REV2 +* **Physical Reset Button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in Layout**: Press the key mapped to `QK_BOOT` (REV1 & REV2) if it is available + +### REV3 (NOT WORKING) & REV3_5 +* **Physical Reset Button**: Hold the `boot` button while plugging in the MC OR hold `boot` and press `reset` +* **Physical Bootmagic Key**: Hold the `boot` button while plugging in the MC OR hold `boot` and press `reset` +* **Keycode in Layout**: Press the key mapped to `QK_BOOT` (REV3 & REV3_5) if it is available + +info.json spec: https://github.com/qmk/qmk_firmware/blob/master/docs/reference_info_json.md + +### VIA (Troubleshooting) + +On GNU/Linux while using Chrome to access VIA (https://usevia.app/) +Navigate to `chrome://device-log` find hidrawXYZ + + sudo chown $USER:$USER /dev/hidrawXYZ + +For now we have to upload the `snappy_revXYZ_via_keyboard_definition.json` located in the `/etc/` folder manually to the via website \ No newline at end of file diff --git a/qmk/snappy/config.h b/qmk/snappy/config.h new file mode 100644 index 0000000..3305d63 --- /dev/null +++ b/qmk/snappy/config.h @@ -0,0 +1,4 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once \ No newline at end of file diff --git a/qmk/snappy/readme.md b/qmk/snappy/readme.md new file mode 100644 index 0000000..f437598 --- /dev/null +++ b/qmk/snappy/readme.md @@ -0,0 +1,43 @@ +# snappy + +![snappy](imgur.com image replace me!) + +*A short description of the keyboard/project* + +* Keyboard Maintainer: [Philip Gaber](https://github.com/qhga) +* Hardware Supported: *The PCBs, controllers supported* +* Hardware Availability: *Links to where you can find this hardware* + +Make example for this keyboard (after setting up your build environment): + + make snappy:default + + # REV1 & REV2 (elite c) + sudo make snappy/rev2:default:dfu-split-left + sudo make snappy/rev2:default:dfu-split-right + + # REV3 (promicro rp2040) (info.json -> NOT WORKING) + sudo make snappy/rev3:default:uf2-split-left + sudo make snappy/rev3:default:uf2-split-right + + # REV3_5 (promicro rp2040) (WITHOUT info.json) + sudo make snappy/rev3_5:default:uf2-split-left + sudo make snappy/rev3_5:default:uf2-split-right + + # Make sure to mount the RP2040 drive to /media/snappy for automatic copying of the .uf2 file + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +### REV1 & REV2 +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` (REV1 & REV2) if it is available + +### REV3 (NOT WORKING) & REV3_5 +* **Physical reset button**: Hold the `boot` button while plugging in the MC OR hold `boot` and press `reset` +* **Keycode in layout**: Press the key mapped to `QK_BOOT` (REV3 & REV3_5) if it is available + +info.json spec: https://github.com/qmk/qmk_firmware/blob/master/docs/reference_info_json.md diff --git a/qmk/snappy/rev1/README.md b/qmk/snappy/rev1/README.md new file mode 100644 index 0000000..3dfae81 --- /dev/null +++ b/qmk/snappy/rev1/README.md @@ -0,0 +1,3 @@ +# Important + +At the moment, this uses some patches from drashna (https://github.com/drashna/qmk_firmware/tree/pointing/large_reports) to make the trackball a bit smoother \ No newline at end of file diff --git a/qmk/snappy/rev1/config.h b/qmk/snappy/rev1/config.h new file mode 100644 index 0000000..e69e228 --- /dev/null +++ b/qmk/snappy/rev1/config.h @@ -0,0 +1,72 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* key matrix size */ +#define MATRIX_ROWS 12 +#define MATRIX_COLS 7 + +/* + * 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 { D4, C6, D7, E6, B4, B5 } +#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6 } + +/* COL2ROW, ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* + * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN. + */ +#define SOFT_SERIAL_PIN D2 // or D1, D2, D3, E6 +// Other options: MASTER_RIGHT +/* #define MASTER_LEFT */ +// Set the handedness by writing it to EEPROM +// Plug in left side: +// sudo make snappy/rev2:default:dfu-split-left +// Plug in right side: +// sudo make snappy/rev2:default:dfu-split-right +#define EE_HANDS + +// Also required for the trackball (if one wants to use MOUSE_EXT_REPORT) +#define SPLIT_POINTING_ENABLE +#define POINTING_DEVICE_LEFT +#define POINTING_DEVICE_ROTATION_90 +// This option requires drashnas fork and makes the trackball a bit smoother +#define MOUSE_EXT_REPORT + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * 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 + +/* Bootmagic Lite key configuration */ +//#define BOOTMAGIC_LITE_ROW 0 +//#define BOOTMAGIC_LITE_COLUMN 0 diff --git a/qmk/snappy/rev1/info.json b/qmk/snappy/rev1/info.json new file mode 100644 index 0000000..2768057 --- /dev/null +++ b/qmk/snappy/rev1/info.json @@ -0,0 +1,333 @@ +{ + "keyboard_name": "snappy", + "manufacturer": "phga", + "maintainer": "qhga", + "url": "", + "usb": { + "vid": "0xCAFE", + "pid": "0x0001", + "device_version": "1.0.0" + }, + "layouts": { + "LAYOUT": { + "layout": [ + { + "x": 3, + "y": 0 + }, + { + "x": 11, + "y": 0 + }, + { + "x": 2, + "y": 0.125 + }, + { + "x": 4, + "y": 0.125 + }, + { + "x": 5, + "y": 0.125 + }, + { + "x": 8, + "y": 0.125 + }, + { + "x": 9, + "y": 0.125 + }, + { + "x": 10, + "y": 0.125 + }, + { + "x": 12, + "y": 0.125 + }, + { + "x": 3, + "y": 1 + }, + { + "x": 11, + "y": 1 + }, + { + "x": 2, + "y": 1.125 + }, + { + "x": 4, + "y": 1.125 + }, + { + "x": 5, + "y": 1.125 + }, + { + "x": 6, + "y": 1.125 + }, + { + "x": 8, + "y": 1.125 + }, + { + "x": 9, + "y": 1.125 + }, + { + "x": 10, + "y": 1.125 + }, + { + "x": 12, + "y": 1.125 + }, + { + "x": 0, + "y": 1.375 + }, + { + "x": 1, + "y": 1.375 + }, + { + "x": 13, + "y": 1.375 + }, + { + "x": 14, + "y": 1.375 + }, + { + "x": 3, + "y": 2 + }, + { + "x": 11, + "y": 2 + }, + { + "x": 2, + "y": 2.125 + }, + { + "x": 4, + "y": 2.125 + }, + { + "x": 5, + "y": 2.125 + }, + { + "x": 6, + "y": 2.125 + }, + { + "x": 8, + "y": 2.125 + }, + { + "x": 9, + "y": 2.125 + }, + { + "x": 10, + "y": 2.125 + }, + { + "x": 12, + "y": 2.125 + }, + { + "x": 0, + "y": 2.375 + }, + { + "x": 1, + "y": 2.375 + }, + { + "x": 13, + "y": 2.375 + }, + { + "x": 14, + "y": 2.375 + }, + { + "x": 3, + "y": 3 + }, + { + "x": 11, + "y": 3 + }, + { + "x": 2, + "y": 3.125 + }, + { + "x": 4, + "y": 3.125 + }, + { + "x": 5, + "y": 3.125 + }, + { + "x": 6, + "y": 3.125 + }, + { + "x": 8, + "y": 3.125 + }, + { + "x": 9, + "y": 3.125 + }, + { + "x": 10, + "y": 3.125 + }, + { + "x": 12, + "y": 3.125 + }, + { + "x": 0, + "y": 3.375 + }, + { + "x": 1, + "y": 3.375 + }, + { + "x": 13, + "y": 3.375 + }, + { + "x": 14, + "y": 3.375 + }, + { + "x": 3, + "y": 4 + }, + { + "x": 11, + "y": 4 + }, + { + "x": 2, + "y": 4.125 + }, + { + "x": 4, + "y": 4.125 + }, + { + "x": 5, + "y": 4.125 + }, + { + "x": 6, + "y": 4.125 + }, + { + "x": 8, + "y": 4.125 + }, + { + "x": 9, + "y": 4.125 + }, + { + "x": 10, + "y": 4.125 + }, + { + "x": 12, + "y": 4.125 + }, + { + "x": 0, + "y": 4.375 + }, + { + "x": 1, + "y": 4.375 + }, + { + "x": 13, + "y": 4.375 + }, + { + "x": 14, + "y": 4.375 + }, + { + "x": 3, + "y": 5 + }, + { + "x": 11, + "y": 5 + }, + { + "x": 2, + "y": 5.125 + }, + { + "x": 4, + "y": 5.125 + }, + { + "x": 5, + "y": 5.125 + }, + { + "x": 6, + "y": 5.125 + }, + { + "x": 8, + "y": 5.125 + }, + { + "x": 9, + "y": 5.125 + }, + { + "x": 10, + "y": 5.125 + }, + { + "x": 12, + "y": 5.125 + }, + { + "x": 0, + "y": 5.375 + }, + { + "x": 1, + "y": 5.375 + }, + { + "x": 13, + "y": 5.375 + }, + { + "x": 14, + "y": 5.375 + } + ] + } + } +} diff --git a/qmk/snappy/rev1/keymaps/default/config.h b/qmk/snappy/rev1/keymaps/default/config.h new file mode 100644 index 0000000..cd65c5f --- /dev/null +++ b/qmk/snappy/rev1/keymaps/default/config.h @@ -0,0 +1,6 @@ +#pragma once + +#define USE_SERIAL + +#define OLED_DISPLAY_128X64 +#define OLED_UPDATE_INTERVAL 10 diff --git a/qmk/snappy/rev1/keymaps/default/keymap.c b/qmk/snappy/rev1/keymaps/default/keymap.c new file mode 100644 index 0000000..54ad975 --- /dev/null +++ b/qmk/snappy/rev1/keymaps/default/keymap.c @@ -0,0 +1,241 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _DVORAK, + _SPECIAL, + _FUNCTION, + _GAMING, +}; + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + UM_PARN, + UM_CURL, + UM_BRAC +}; + +#define OS_LSFT OSM(MOD_LSFT) + +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) + +#define ____ _______ +#define OS_LSFT OSM(MOD_LSFT) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /*************************************************************************** + * DVORAK + ***************************************************************************/ + // R1 (9) +#define _____FN1__FN2__FN3__FN4___ ____, KC_MS_BTN3, KC_MS_BTN1, KC_MS_BTN2 +#define _____FN5__FN6__FN7__FN8___ KC_5, KC_6, KC_7, QK_BOOT + // R2 (14) +#define _1_____2_____3_____4_____5 KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL +#define _6_____7_____8_____9_____0 KC_DEL, KC_6, KC_7, KC_8, KC_9, KC_0 + // R3 (14) +#define QUOT__COMM__DOT____P_____Y KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_DEL +#define _F_____G_____C_____R_____L KC_DEL, KC_F, KC_G, KC_C, KC_R, KC_L + // R4 (14) +#define _A_____O_____E_____U_____I KC_A, KC_O, KC_E, KC_U, KC_I, UM_PARN +#define _D_____H_____T_____N_____S UM_BRAC, KC_D, KC_H, KC_T, KC_N, KC_S + // R5 (14) +#define _EQL___Q_____J_____K_____X KC_EQL, KC_Q, KC_J, KC_K, KC_X, UM_PARN +#define _B_____M_____W_____V_____Z UM_BRAC, KC_B, KC_M, KC_W, KC_V, KC_Z + // R6 (14) +#define _______BOTTOM_LEFT________ KC_LCTL, KC_LSFT, KC_LGUI, OSL(_SPECIAL), KC_MINS, KC_BSPC, KC_ENT +#define _______BOTTOM_RIGHT_______ OS_LSFT, KC_SPC, KC_SCLN, OSL(_FUNCTION),____, ____, ____ + + [_DVORAK] = + LAYOUT_wrapper( + _____FN1__FN2__FN3__FN4___, TO(_GAMING),_____FN5__FN6__FN7__FN8___, + KC_GRAVE,_1_____2_____3_____4_____5, _6_____7_____8_____9_____0, UM_CURL, + KC_TAB, QUOT__COMM__DOT____P_____Y, _F_____G_____C_____R_____L, KC_BSLS, + KC_ESC, _A_____O_____E_____U_____I, _D_____H_____T_____N_____S, KC_SLASH, + KC_LALT, _EQL___Q_____J_____K_____X, _B_____M_____W_____V_____Z, KC_LCTL, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + /*************************************************************************** + * SPECIAL + ***************************************************************************/ + +#define ________SPECIAL_L1________ ____, ____, ____, ____, ____, ____ +#define ________SPECIAL_L2________ RALT(KC_Q), RALT(KC_P), RALT(KC_5), RALT(KC_Y), RALT(KC_S), ____ +#define ________SPECIAL_L3________ ____, ____, ____, ____, ____, ____ + +#define ________SPECIAL_R1________ ____, ____, ____, KC_UP, ____, ____ +#define ________SPECIAL_R2________ ____, ____, KC_LEFT, KC_DOWN, KC_RIGHT, ____ +#define ________SPECIAL_R3________ ____, ____, ____, ____, ____, QK_BOOT + + [_SPECIAL]= + LAYOUT_wrapper( + _____FN1__FN2__FN3__FN4___, ____,_____FN5__FN6__FN7__FN8___, + KC_GRAVE,_1_____2_____3_____4_____5, _6_____7_____8_____9_____0, UM_CURL, + KC_TAB, ________SPECIAL_L1________, ________SPECIAL_R1________, KC_BSLS, + KC_ESC, ________SPECIAL_L2________, ________SPECIAL_R2________, KC_SLASH, + KC_LALT, ________SPECIAL_L3________, ________SPECIAL_R3________, KC_LCTL, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + + /*************************************************************************** + * FUNCTION + ***************************************************************************/ +#define _________FUNC_L0__________ ____, ____, ____, ____, ____, ____ +#define _________FUNC_L1__________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 +#define _________FUNC_L2__________ ____, ____, ____, ____, ____, ____ +#define _________FUNC_L3__________ ____, ____, ____, ____, ____, ____ + +#define _________FUNC_R0__________ ____, ____, ____, ____, ____, ____ +#define _________FUNC_R1__________ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 +#define _________FUNC_R2__________ ____, ____, ____, ____, ____, ____ +#define _________FUNC_R3__________ ____, ____, ____, ____, ____, ____ + + [_FUNCTION] = + LAYOUT_wrapper( + _____FN1__FN2__FN3__FN4___, ____,_____FN5__FN6__FN7__FN8___, + KC_GRAVE,_________FUNC_L0__________, _________FUNC_R0__________, UM_CURL, + KC_TAB, _________FUNC_L1__________, _________FUNC_R1__________, KC_BSLS, + KC_ESC, _________FUNC_L2__________, _________FUNC_R2__________, KC_SLASH, + KC_LALT, _________FUNC_L3__________, _________FUNC_R3__________, KC_LCTL, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + + + /*************************************************************************** + * GAMING + ***************************************************************************/ +#define _Q_____W_____E_____R_____T KC_Q, KC_W, KC_E, KC_R, KC_T, ____ +#define _A_____S_____D_____F_____G KC_A, KC_S, KC_D, KC_F, KC_G, ____ +#define _Z_____X_____C_____V_____B KC_Z, KC_X, KC_C, KC_V, KC_B, ____ + +#define _Y_____U_____I_____O_____P ____, KC_Y, KC_U, KC_I, KC_O, KC_P +#define _H_____J_____K_____L____SCLN ____, KC_H, KC_J, KC_K, KC_L, KC_SCLN +#define _N_____M____COMM__DOT___SLSH ____, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH +#define ____GAMING_BOTTOM_LEFT____ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_ENT +#define ____GAMING_BOTTOM_RIGHT___ OS_LSFT, KC_SPC, KC_SCLN, ____, ____, ____, ____ + + [_GAMING] = + LAYOUT_wrapper( + _____FN1__FN2__FN3__FN4___, TO(_DVORAK),_____FN5__FN6__FN7__FN8___, + KC_ESC, _1_____2_____3_____4_____5, _6_____7_____8_____9_____0, UM_CURL, + KC_TAB, _Q_____W_____E_____R_____T, _Y_____U_____I_____O_____P, KC_BSLS, + KC_LSFT,_A_____S_____D_____F_____G, _H_____J_____K_____L____SCLN, KC_SLASH, + KC_LSFT,_Z_____X_____C_____V_____B, _N_____M____COMM__DOT___SLSH, KC_LCTL, + ____GAMING_BOTTOM_LEFT____, _______BOTTOM_RIGHT_______ + ), + +}; + +void matrix_scan_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("matrix_scan_user\n"); */ +#endif +} + +#ifdef OLED_ENABLE +static void render_logo(void) { + static const char PROGMEM raw_logo[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,192,240,248,252, 60, 30, 30, 30, 30, 30,190,252,252,120, 0, 0, 30,254,254,254,192,224,224,240,240,120,124,124,124,252,252,248,248,240,224, 0, 0, 0, 0, 0,192,224,240,248,248,124,124, 60, 60,120,248,252,254,254,252, 0, 0, 0,254,254,248,248,252,126, 62, 62, 30, 30, 30, 60, 60,252,248,248,240,128, 0, 0,252,252,240,240,240,252,124, 62, 62, 30, 30, 30, 30, 30, 62,254,254,252,240,192, 2, 6, 62,254,252,248,224,192, 0, 0, 2, 2, 6, 6, 6, 14, 14,238,254,254,252, 56, 0, 0, + 0, 0, 0, 0, 0, 7, 31, 63, 63,127,124,240,224,224,224,193,193,129, 0, 0, 0, 0, 0,255,255,255, 63, 15, 3, 1, 0, 0, 0, 0, 0, 0, 1,255,255,255,255, 0, 0, 0,252,255,255,255, 7, 3, 0, 0, 0, 0, 0, 0, 3,255,255,255,255, 0, 0, 0,255,255,255,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,231,255,255,252, 0,255,255,255,255,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,255,255,255,255,248, 0, 0, 0, 3, 31, 63,255,255,252,240,224,128,192,240,252,255,127, 15, 7, 0, 0, 0, 0, + 0, 0,128,192,128,128, 0, 0, 0, 0, 0, 0, 1, 3, 7,159,255,255,254,248, 0, 0,254,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255, 0, 0, 0,255,255,255,255,240,192,128,128,128,192,192,240,248,255,255,255,255, 0, 0, 0,255,255,255,255,224,192,192,192,128,128,128,192,224,240,252,255,255,127, 31, 0,255,255,255,255,255,248,192,128,128,128,128,128,128,224,248,255,255,255,127, 63, 7, 0, 0, 0, 0, 0, 0, 1, 31,255,255,255,255,255,255, 31, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 3, 7, 7, 15, 14, 30, 30, 30, 30, 30, 30, 30, 31, 15, 7, 3, 0, 16, 24, 31, 15, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 24, 31, 31, 15, 7, 0, 0, 0, 0, 3, 7, 15, 15, 31, 31, 31, 31, 31, 15, 15, 7, 7, 7, 15, 31, 28, 24, 0,255,255,255,255, 15, 15, 15, 15, 15, 15, 15, 15, 7, 7, 3, 3, 1, 0, 0, 0,255,255,255,255, 7, 7, 7, 15, 15, 15, 15, 15, 15, 7, 7, 7, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,248,255,255, 63, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,192, 96, 32, 48, 24, 8, 8, 8, 8, 24,240, 96, 0, 0, 0, 0, 0, 0, 0,224, 48, 24, 8, 8, 8, 8,200,120, 0, 0, 0, 0, 0, 0, 0, 0,192, 96, 48, 16, 48, 32,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192,224,248,252,255,255, 31, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 56, 84, 16, 16, 19, 30, 12, 12, 12, 14, 10, 10, 11, 25, 17, 16, 16, 16, 24, 8, 8, 8, 8, 9, 11, 14, 6, 6, 6, 15, 9, 8, 24, 16, 16, 16, 16, 16, 24, 8, 15, 12, 28, 52, 38, 35, 33, 48, 16, 16, 16, 16, 16, 16, 16, 24, 24, 28, 28, 30, 30, 31, 31, 31, 15, 15, 6, 0, 0, 0, 0, 0, 16, 24, 24, 28, 28, 28, 30, 30, 30, 31, 15, 15, 15, 6, 0, 0, 0, 0, 0, 0, 8, 12, 12, 12, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + oled_write_raw_P(raw_logo, sizeof(raw_logo)); +} + +bool oled_task_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("oled_task_user\n"); */ +#endif + + if (is_keyboard_master()) { + oled_write_P(PSTR(" "), false); + + switch(get_highest_layer(layer_state)) { + case _DVORAK: + oled_write_P(PSTR("DVORAK <3\n"), false); + break; + case _GAMING: + oled_write_P(PSTR("GAMING <3\n"), false); + break; + case _SPECIAL: + oled_write_P(PSTR("SPECIAL\n"), false); + break; + case _FUNCTION: + oled_write_P(PSTR("FUNCTION\n"), false); + break; + default: + oled_write_P(PSTR("UNDEFINED S.O.S\n"), false); + break; + } + } + return false; +} +#endif + +void keyboard_post_init_user(void) { + oled_init(OLED_ROTATION_180); + render_logo(); + // Customise these values to desired behaviour + /* debug_enable=true; */ + /* debug_matrix=true; */ + /* debug_keyboard=true; */ + //debug_mouse=true; + +} + +bool RLFW = false; +bool RLBO = false; +uint8_t mods; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + mods = get_mods(); + switch (keycode) { + case UM_CURL: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + SEND_STRING("}"); + } else { + SEND_STRING("{"); + } + set_mods(mods); + } + return false; + break; + case UM_BRAC: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + // Otherwise shift makes bracket into curly bracket + del_mods(MOD_MASK_SHIFT); + SEND_STRING("]"); + } else { + SEND_STRING("["); + } + set_mods(mods); + } + return false; + break; + case UM_PARN: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + SEND_STRING(")"); + } else { + SEND_STRING("("); + } + set_mods(mods); + } + return false; + break; + default: + return true; + } +} diff --git a/qmk/snappy/rev1/keymaps/default/readme.md b/qmk/snappy/rev1/keymaps/default/readme.md new file mode 100644 index 0000000..c1a5a02 --- /dev/null +++ b/qmk/snappy/rev1/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for snappy diff --git a/qmk/snappy/rev1/keymaps/qwertz/config.h b/qmk/snappy/rev1/keymaps/qwertz/config.h new file mode 100644 index 0000000..cd65c5f --- /dev/null +++ b/qmk/snappy/rev1/keymaps/qwertz/config.h @@ -0,0 +1,6 @@ +#pragma once + +#define USE_SERIAL + +#define OLED_DISPLAY_128X64 +#define OLED_UPDATE_INTERVAL 10 diff --git a/qmk/snappy/rev1/keymaps/qwertz/keymap.c b/qmk/snappy/rev1/keymaps/qwertz/keymap.c new file mode 100644 index 0000000..dbd5400 --- /dev/null +++ b/qmk/snappy/rev1/keymaps/qwertz/keymap.c @@ -0,0 +1,214 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _QWERTZ, + _SPECIAL, + _FUNCTION, +}; + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + UM_PARN, + UM_CURL, + UM_BRAC +}; + +#define OS_LSFT OSM(MOD_LSFT) + +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) + +#define ____ _______ +#define OS_LSFT OSM(MOD_LSFT) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /*************************************************************************** + * QWERTZ + ***************************************************************************/ +#define Q____FN1__FN2__FN3__FN4___ KC_ESC, KC_MS_BTN3, KC_MS_BTN1, KC_MS_BTN2 +#define Q_FN5__FN6__FN7__FN8__FN9_ KC_F5, KC_F8, KC_F10, KC_F11, KC_F12 + +#define _1_____2_____3_____4_____5 KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL +#define _6_____7_____8_____9_____0 KC_DEL, KC_6, KC_7, KC_8, KC_9, KC_0 + +#define _Q_____W_____E_____R_____T KC_Q, KC_W, KC_E, KC_R, KC_T, ____ +#define _A_____S_____D_____F_____G KC_A, KC_S, KC_D, KC_F, KC_G, ____ +#define _Y_____X_____C_____V_____B KC_Z, KC_X, KC_C, KC_V, KC_B, ____ + +#define _Z_____U_____I_____O_____P ____, KC_Y, KC_U, KC_I, KC_O, KC_P +#define _H_____J_____K_____L____OE ____, KC_H, KC_J, KC_K, KC_L, RALT(KC_P) +#define _N_____M____COMM__DOT_DASH ____, KC_N, KC_M, KC_COMM, KC_DOT, KC_MINS + +#define _______BOTTOM_LEFT________ KC_LCTL, KC_LGUI, KC_LALT, OSL(_SPECIAL), KC_MINS, KC_BSPC, KC_ENT +#define _______BOTTOM_RIGHT_______ OS_LSFT, KC_SPC, KC_COMM, OSL(_FUNCTION),____, ____, ____ + + [_QWERTZ] = + LAYOUT_wrapper( + Q____FN1__FN2__FN3__FN4___, Q_FN5__FN6__FN7__FN8__FN9_, + KC_GRAVE,_1_____2_____3_____4_____5, _6_____7_____8_____9_____0, KC_BSLS, + KC_TAB, _Q_____W_____E_____R_____T, _Z_____U_____I_____O_____P, RALT(KC_Y), + KC_ESC, _A_____S_____D_____F_____G, _H_____J_____K_____L____OE, RALT(KC_Q), + KC_LSFT, _Y_____X_____C_____V_____B, _N_____M____COMM__DOT_DASH, KC_RSFT, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + /*************************************************************************** + * SPECIAL + ***************************************************************************/ + +#define ________SPECIAL_L1________ ____, ____, ____, ____, ____, ____ +#define ________SPECIAL_L2________ RALT(KC_Q), RALT(KC_P), RALT(KC_5), RALT(KC_Y), RALT(KC_S), ____ +#define ________SPECIAL_L3________ ____, ____, ____, ____, ____, ____ + +#define ________SPECIAL_R1________ ____, ____, ____, KC_UP, ____, ____ +#define ________SPECIAL_R2________ ____, ____, KC_LEFT, KC_DOWN, KC_RIGHT, ____ +#define ________SPECIAL_R3________ ____, ____, ____, ____, ____, QK_BOOT + + [_SPECIAL]= + LAYOUT_wrapper( + Q____FN1__FN2__FN3__FN4___, Q_FN5__FN6__FN7__FN8__FN9_, + KC_GRAVE,_1_____2_____3_____4_____5, _6_____7_____8_____9_____0, UM_CURL, + KC_TAB, ________SPECIAL_L1________, ________SPECIAL_R1________, KC_BSLS, + KC_ESC, ________SPECIAL_L2________, ________SPECIAL_R2________, KC_SLASH, + KC_LALT, ________SPECIAL_L3________, ________SPECIAL_R3________, KC_LCTL, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + + /*************************************************************************** + * FUNCTION + ***************************************************************************/ +#define _________FUNC_L0__________ ____, ____, ____, ____, ____, ____ +#define _________FUNC_L1__________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 +#define _________FUNC_L2__________ ____, ____, ____, ____, ____, ____ +#define _________FUNC_L3__________ ____, ____, ____, ____, ____, ____ + +#define _________FUNC_R0__________ ____, ____, ____, ____, ____, ____ +#define _________FUNC_R1__________ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 +#define _________FUNC_R2__________ ____, ____, ____, ____, ____, ____ +#define _________FUNC_R3__________ ____, ____, ____, ____, ____, ____ + + [_FUNCTION] = + LAYOUT_wrapper( + _____FN1__FN2__FN3__FN4___, ____,_____FN5__FN6__FN7__FN8___, + KC_GRAVE,_________FUNC_L0__________, _________FUNC_R0__________, UM_CURL, + KC_TAB, _________FUNC_L1__________, _________FUNC_R1__________, KC_BSLS, + KC_ESC, _________FUNC_L2__________, _________FUNC_R2__________, KC_SLASH, + KC_LALT, _________FUNC_L3__________, _________FUNC_R3__________, KC_LCTL, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + +}; + +void matrix_scan_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("matrix_scan_user\n"); */ +#endif +} + +#ifdef OLED_ENABLE +static void render_logo(void) { + static const char PROGMEM raw_logo[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,192,240,248,252, 60, 30, 30, 30, 30, 30,190,252,252,120, 0, 0, 30,254,254,254,192,224,224,240,240,120,124,124,124,252,252,248,248,240,224, 0, 0, 0, 0, 0,192,224,240,248,248,124,124, 60, 60,120,248,252,254,254,252, 0, 0, 0,254,254,248,248,252,126, 62, 62, 30, 30, 30, 60, 60,252,248,248,240,128, 0, 0,252,252,240,240,240,252,124, 62, 62, 30, 30, 30, 30, 30, 62,254,254,252,240,192, 2, 6, 62,254,252,248,224,192, 0, 0, 2, 2, 6, 6, 6, 14, 14,238,254,254,252, 56, 0, 0, + 0, 0, 0, 0, 0, 7, 31, 63, 63,127,124,240,224,224,224,193,193,129, 0, 0, 0, 0, 0,255,255,255, 63, 15, 3, 1, 0, 0, 0, 0, 0, 0, 1,255,255,255,255, 0, 0, 0,252,255,255,255, 7, 3, 0, 0, 0, 0, 0, 0, 3,255,255,255,255, 0, 0, 0,255,255,255,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,231,255,255,252, 0,255,255,255,255,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,255,255,255,255,248, 0, 0, 0, 3, 31, 63,255,255,252,240,224,128,192,240,252,255,127, 15, 7, 0, 0, 0, 0, + 0, 0,128,192,128,128, 0, 0, 0, 0, 0, 0, 1, 3, 7,159,255,255,254,248, 0, 0,254,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255, 0, 0, 0,255,255,255,255,240,192,128,128,128,192,192,240,248,255,255,255,255, 0, 0, 0,255,255,255,255,224,192,192,192,128,128,128,192,224,240,252,255,255,127, 31, 0,255,255,255,255,255,248,192,128,128,128,128,128,128,224,248,255,255,255,127, 63, 7, 0, 0, 0, 0, 0, 0, 1, 31,255,255,255,255,255,255, 31, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 3, 7, 7, 15, 14, 30, 30, 30, 30, 30, 30, 30, 31, 15, 7, 3, 0, 16, 24, 31, 15, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 24, 31, 31, 15, 7, 0, 0, 0, 0, 3, 7, 15, 15, 31, 31, 31, 31, 31, 15, 15, 7, 7, 7, 15, 31, 28, 24, 0,255,255,255,255, 15, 15, 15, 15, 15, 15, 15, 15, 7, 7, 3, 3, 1, 0, 0, 0,255,255,255,255, 7, 7, 7, 15, 15, 15, 15, 15, 15, 7, 7, 7, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,248,255,255, 63, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,192, 96, 32, 48, 24, 8, 8, 8, 8, 24,240, 96, 0, 0, 0, 0, 0, 0, 0,224, 48, 24, 8, 8, 8, 8,200,120, 0, 0, 0, 0, 0, 0, 0, 0,192, 96, 48, 16, 48, 32,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192,224,248,252,255,255, 31, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 56, 84, 16, 16, 19, 30, 12, 12, 12, 14, 10, 10, 11, 25, 17, 16, 16, 16, 24, 8, 8, 8, 8, 9, 11, 14, 6, 6, 6, 15, 9, 8, 24, 16, 16, 16, 16, 16, 24, 8, 15, 12, 28, 52, 38, 35, 33, 48, 16, 16, 16, 16, 16, 16, 16, 24, 24, 28, 28, 30, 30, 31, 31, 31, 15, 15, 6, 0, 0, 0, 0, 0, 16, 24, 24, 28, 28, 28, 30, 30, 30, 31, 15, 15, 15, 6, 0, 0, 0, 0, 0, 0, 8, 12, 12, 12, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + oled_write_raw_P(raw_logo, sizeof(raw_logo)); +} + +bool oled_task_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("oled_task_user\n"); */ +#endif + + if (is_keyboard_master()) { + oled_write_P(PSTR(" "), false); + + switch(get_highest_layer(layer_state)) { + case _DVORAK: + oled_write_P(PSTR("DVORAK <3\n"), false); + break; + case _GAMING: + oled_write_P(PSTR("GAMING <3\n"), false); + break; + case _SPECIAL: + oled_write_P(PSTR("SPECIAL\n"), false); + break; + case _FUNCTION: + oled_write_P(PSTR("FUNCTION\n"), false); + break; + default: + oled_write_P(PSTR("UNDEFINED S.O.S\n"), false); + break; + } + } + return false; +} +#endif + +void keyboard_post_init_user(void) { + oled_init(OLED_ROTATION_180); + render_logo(); + // Customise these values to desired behaviour + /* debug_enable=true; */ + /* debug_matrix=true; */ + /* debug_keyboard=true; */ + //debug_mouse=true; + +} + +bool RLFW = false; +bool RLBO = false; +uint8_t mods; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + mods = get_mods(); + switch (keycode) { + case UM_CURL: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + SEND_STRING("}"); + } else { + SEND_STRING("{"); + } + set_mods(mods); + } + return false; + break; + case UM_BRAC: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + // Otherwise shift makes bracket into curly bracket + del_mods(MOD_MASK_SHIFT); + SEND_STRING("]"); + } else { + SEND_STRING("["); + } + set_mods(mods); + } + return false; + break; + case UM_PARN: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + SEND_STRING(")"); + } else { + SEND_STRING("("); + } + set_mods(mods); + } + return false; + break; + default: + return true; + } +} diff --git a/qmk/snappy/rev1/keymaps/qwertz/readme.md b/qmk/snappy/rev1/keymaps/qwertz/readme.md new file mode 100644 index 0000000..6762024 --- /dev/null +++ b/qmk/snappy/rev1/keymaps/qwertz/readme.md @@ -0,0 +1 @@ +# A QWERTZ keymap for snappy diff --git a/qmk/snappy/rev1/keymaps/tima/config.h b/qmk/snappy/rev1/keymaps/tima/config.h new file mode 100644 index 0000000..80fa393 --- /dev/null +++ b/qmk/snappy/rev1/keymaps/tima/config.h @@ -0,0 +1,10 @@ +#pragma once + +#define USE_SERIAL +// #define USE_I2C + +// #define MASTER_LEFT +// #define MASTER_RIGHT + +#define OLED_DISPLAY_128X64 +#define OLED_UPDATE_INTERVAL 10 diff --git a/qmk/snappy/rev1/keymaps/tima/keymap.c b/qmk/snappy/rev1/keymaps/tima/keymap.c new file mode 100644 index 0000000..105eb60 --- /dev/null +++ b/qmk/snappy/rev1/keymaps/tima/keymap.c @@ -0,0 +1,199 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +enum layer_names { + _LAYER0, + _LAYER1, + _LAYER2, + _LAYER3, +}; + +#define OS_LSFT OSM(MOD_LSFT) + +#define LAYOUT_wrapper( ... ) LAYOUT(__VA_ARGS__) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /*********************************************************************************** + * DEFAULT + ***********************************************************************************/ + + // R1 (9) +#define ___HSTG___F5___F9___HCM___MOUSE__ KC_BSLS, KC_F5, KC_F9, KC_EQL +#define _TO3___PLAY___VOUP___VODO___MUTE_ TO(_LAYER3), KC_MPLY, KC_MUTE, KC_VOLU, KC_VOLD + // R2 (14) +#define __ESC__1_____2_____3_____4_____5__PLS__ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_RBRC +#define __MIN__6_____7_____8_____9_____0__QST__ KC_SLSH, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS + // R3 (14) +#define __TAB__Q_____W_____E_____R_____T_RIBR3_ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, RALT(KC_8) +#define _LFBR3_Z_____U_____I_____O_____P___UE__ RALT(KC_9), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC + // R4 (14) +#define __ESC__A_____S_____D_____F_____G_RIBR1_ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8) +#define _LFBR1_H_____J_____K_____L_____OE__AE__ S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT + // R5 (14) +#define _SHFT__Y_____X_____C_____V_____B_RIBR2_ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, RALT(KC_7) +#define _LFBR2_N_____M____COM___DOT___MIN__SHFT RALT(KC_0), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT + // R6 (14) +#define ______________BOTTOM_LEFT______________ KC_LALT, KC_NUBS, KC_LCTL, MO(_LAYER1), KC_LGUI, KC_LCTL, KC_RALT +#define ______________BOTTOM_RIGHT_____________ KC_ENT, KC_SPC, KC_BSPC, MO(_LAYER2), KC_NO, KC_PSCR, OSM(MOD_LSFT) + + [_LAYER0] = + LAYOUT_wrapper( + ___HSTG___F5___F9___HCM___MOUSE__, _TO3___PLAY___VOUP___VODO___MUTE_, + __ESC__1_____2_____3_____4_____5__PLS__, __MIN__6_____7_____8_____9_____0__QST__, + __TAB__Q_____W_____E_____R_____T_RIBR3_, _LFBR3_Z_____U_____I_____O_____P___UE__, + __ESC__A_____S_____D_____F_____G_RIBR1_, _LFBR1_H_____J_____K_____L_____OE__AE__, + _SHFT__Y_____X_____C_____V_____B_RIBR2_, _LFBR2_N_____M____COM___DOT___MIN__SHFT, + ______________BOTTOM_LEFT______________, ______________BOTTOM_RIGHT_____________ + ), + + /*********************************************************************************** + * LAYER 1 + ***********************************************************************************/ + + // R1 (9) +#define ____________LAYER1_L1____________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +#define ____________LAYER1_R1____________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT + // R2 (14) +#define _______________LAYER1_L2_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO +#define _______________LAYER1_R2_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS + // R3 (14) +#define _______________LAYER1_L3_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO +#define _______________LAYER1_R3_______________ KC_NO, KC_NO, KC_LBRC, KC_NO, KC_SCLN, KC_NO, KC_BSLS + // R4 (14) +#define _______________LAYER1_L4_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO +#define _______________LAYER1_R4_______________ KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_SLSH + // R5 (14) +#define _______________LAYER1_L5_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO +#define _______________LAYER1_R5_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT, KC_NO + // R6 (14) +#define _______________LAYER1_L6_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +#define _______________LAYER1_R6_______________ KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + + [_LAYER1] = + LAYOUT_wrapper( + ____________LAYER1_L1____________, ____________LAYER1_R1____________, + _______________LAYER1_L2_______________, _______________LAYER1_R2_______________, + _______________LAYER1_L3_______________, _______________LAYER1_R3_______________, + _______________LAYER1_L4_______________, _______________LAYER1_R4_______________, + _______________LAYER1_L5_______________, _______________LAYER1_R5_______________, + _______________LAYER1_L6_______________, _______________LAYER1_R6_______________ + ), + + /*********************************************************************************** + * LAYER 2 + ***********************************************************************************/ + + // R1 (9) +#define ____________LAYER2_L1____________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +#define ____________LAYER2_R1____________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT + // R2 (14) +#define _______________LAYER2_L2_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +#define _______________LAYER2_R2_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + // R3 (14) +#define _______________LAYER2_L3_______________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 +#define _______________LAYER2_R3_______________ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSLS + // R4 (14) +#define _______________LAYER2_L4_______________ KC_TRNS, KC_QUOT, KC_MINS, KC_MS_BTN4, KC_MS_BTN5, KC_NO, KC_NO +#define _______________LAYER2_R4_______________ KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, KC_NO, KC_SLSH + // R5 (14) +#define _______________LAYER2_L5_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO +#define _______________LAYER2_R5_______________ KC_NO, KC_MS_BTN1, KC_MS_BTN2, KC_NO, KC_NO, KC_NO, KC_NO + // R6 (14) +#define _______________LAYER2_L6_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +#define _______________LAYER2_R6_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + + [_LAYER2] = + LAYOUT_wrapper( + ____________LAYER2_L1____________, ____________LAYER2_R1____________, + _______________LAYER2_L2_______________, _______________LAYER2_R2_______________, + _______________LAYER2_L3_______________, _______________LAYER2_R3_______________, + _______________LAYER2_L4_______________, _______________LAYER2_R4_______________, + _______________LAYER2_L5_______________, _______________LAYER2_R5_______________, + _______________LAYER2_L6_______________, _______________LAYER2_R6_______________ + ), + + /*********************************************************************************** + * LAYER 3 + ***********************************************************************************/ + + // R1 (9) +#define ____________LAYER3_L1____________ KC_F1, KC_F2, KC_F3, KC_F4 +#define ____________LAYER3_R1____________ TO(_LAYER0), KC_NO, KC_NO, KC_NO, KC_DEL + // R2 (14) +#define _______________LAYER3_L2_______________ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6 +#define _______________LAYER3_R2_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO + // R3 (14) +#define _______________LAYER3_L3_______________ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y +#define _______________LAYER3_R3_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO + // R4 (14) +#define _______________LAYER3_L4_______________ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H +#define _______________LAYER3_R4_______________ KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO + // R5 (14) +#define _______________LAYER3_L5_______________ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N +#define _______________LAYER3_R5_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO + // R6 (14) +#define _______________LAYER3_L6_______________ KC_LCTL, KC_LALT, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_TRNS +#define _______________LAYER3_R6_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT + + [_LAYER3] = + LAYOUT_wrapper( + ____________LAYER3_L1____________, ____________LAYER3_R1____________, + _______________LAYER3_L2_______________, _______________LAYER3_R2_______________, + _______________LAYER3_L3_______________, _______________LAYER3_R3_______________, + _______________LAYER3_L4_______________, _______________LAYER3_R4_______________, + _______________LAYER3_L5_______________, _______________LAYER3_R5_______________, + _______________LAYER3_L6_______________, _______________LAYER3_R6_______________ + ), +}; + +#ifdef OLED_ENABLE +static void render_logo(void) { + static const char PROGMEM raw_logo[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 192, 192, 224, 240, 240, 248, 248, 252, 252, 254, 254, 252, 252, 248, 248, 240, 224, 224, 192, 192, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 224, 240, 240, 248, 248, 252, 252, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 252, 252, 120, 56, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 3, 3, 7, 7, 15, 31, 31, 63, 63, 127, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 63, 63, 31, 31, 143, 143, 135, 131, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 129, 131, 195, 195, 227, 241, 241, 248, 248, 252, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 252, 252, 248, 240, 240, 224, 224, 192, 192, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 60, 60, 126, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 127, 63, 63, 31, 31, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 7, 15, 15, 31, 31, 63, 63, 127, 255, 255, 255, 127, 63, 63, 31, 31, 15, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + oled_write_raw_P(raw_logo, sizeof(raw_logo)); +} + +bool oled_task_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("oled_task_user\n"); */ +#endif + + if (is_keyboard_master()) { + oled_write_P(PSTR("\n "), false); + switch(get_highest_layer(layer_state)) { + case _LAYER0: + oled_write_P(PSTR("Default\n"),false); + break; + case _LAYER1: + oled_write_P(PSTR("Lower\n"),false); + break; + case _LAYER2: + oled_write_P(PSTR("Upper\n"),false); + break; + case _LAYER3: + oled_write_P(PSTR("Gaming\n"),false); + break; + } + } else { + render_logo(); + } + return false; +} +#endif + +void keyboard_post_init_user(void) { + oled_init(OLED_ROTATION_180); + // debug_enable=true; + // debug_matrix=true; + // debug_keyboard=true; + // debug_mouse=true; +} \ No newline at end of file diff --git a/qmk/snappy/rev1/keymaps/tima/readme.md b/qmk/snappy/rev1/keymaps/tima/readme.md new file mode 100644 index 0000000..6762024 --- /dev/null +++ b/qmk/snappy/rev1/keymaps/tima/readme.md @@ -0,0 +1 @@ +# A QWERTZ keymap for snappy diff --git a/qmk/snappy/rev1/keymaps/tima/rules.mk b/qmk/snappy/rev1/keymaps/tima/rules.mk new file mode 100644 index 0000000..74c71e0 --- /dev/null +++ b/qmk/snappy/rev1/keymaps/tima/rules.mk @@ -0,0 +1,3 @@ +# Special features +MOUSEKEY_ENABLE = yes +EXTRAKEY_ENABLE = yes \ No newline at end of file diff --git a/qmk/snappy/rev1/rev1.c b/qmk/snappy/rev1/rev1.c new file mode 100644 index 0000000..1e3aed7 --- /dev/null +++ b/qmk/snappy/rev1/rev1.c @@ -0,0 +1,4 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "rev1.h" diff --git a/qmk/snappy/rev1/rev1.h b/qmk/snappy/rev1/rev1.h new file mode 100644 index 0000000..605bb01 --- /dev/null +++ b/qmk/snappy/rev1/rev1.h @@ -0,0 +1,38 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "quantum.h" + +/* This is a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ + +#define LAYOUT( \ + L02, L03, L04, L05, R06, R05, R04, R03, R02, \ + L10, L11, L12, L13, L14, L15, L16, R16, R15, R14, R13, R12, R11, R10, \ + L20, L21, L22, L23, L24, L25, L26, R26, R25, R24, R23, R22, R21, R20, \ + L30, L31, L32, L33, L34, L35, L36, R36, R35, R34, R33, R32, R31, R30, \ + L40, L41, L42, L43, L44, L45, L46, R46, R45, R44, R43, R42, R41, R40, \ + L50, L51, L52, L53, L54, L55, L56, R56, R55, R54, R53, R52, R51, R50 \ + ) \ + { \ + { KC_NO, KC_NO, L02, L03, L04, L05, KC_NO }, \ + { L10, L11, L12, L13, L14, L15, L16 }, \ + { L20, L21, L22, L23, L24, L25, L26 }, \ + { L30, L31, L32, L33, L34, L35, L36 }, \ + { L40, L41, L42, L43, L44, L45, L46 }, \ + { L50, L51, L52, L53, L54, L55, L56 }, \ + { KC_NO, KC_NO, R02, R03, R04, R05, R06 }, \ + { R10, R11, R12, R13, R14, R15, R16 }, \ + { R20, R21, R22, R23, R24, R25, R26 }, \ + { R30, R31, R32, R33, R34, R35, R36 }, \ + { R40, R41, R42, R43, R44, R45, R46 }, \ + { R50, R51, R52, R53, R54, R55, R56 } \ + } diff --git a/qmk/snappy/rev1/rules.mk b/qmk/snappy/rev1/rules.mk new file mode 100644 index 0000000..15502cf --- /dev/null +++ b/qmk/snappy/rev1/rules.mk @@ -0,0 +1,17 @@ +# MCU name +MCU = atmega32u4 +# MCU = liatris +PIN_COMPATIBLE = elite_c +# Bootloader selection +BOOTLOADER = atmel-dfu +SPLIT_KEYBOARD = yes + +# Oled support +OLED_ENABLE = yes +OLED_DRIVER = ssd1306 + +# Trackball support (disable if not used) +MOUSEKEY_ENABLE = no +POINTING_DEVICE_ENABLE = no +SPLIT_POINTING_ENABLE = no +POINTING_DEVICE_DRIVER = pimoroni_trackball diff --git a/qmk/snappy/rev2/config.h b/qmk/snappy/rev2/config.h new file mode 100644 index 0000000..4143bbc --- /dev/null +++ b/qmk/snappy/rev2/config.h @@ -0,0 +1,68 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* key matrix size */ +#define MATRIX_ROWS 12 +#define MATRIX_COLS 7 + +/* + * 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 { D4, C6, D7, E6, B4, B5 } +#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6 } + +/* COL2ROW, ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* + * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN. + */ +#define SOFT_SERIAL_PIN D2 // or D1, D2, D3, E6 +// Set the handedness manually +/* #define MASTER_LEFT */ +/* #define MASTER_RIGHT */ + +// Set the handedness by writing it to EEPROM +// Plug in left side: +// sudo make snappy/rev2:default:dfu-split-left +// Plug in right side: +// sudo make snappy/rev2:default:dfu-split-right +#define EE_HANDS + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCE 15 +#define USB_POLLING_INTERVAL_MS 1 + +/* 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 + +/* + * 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 + +/* Bootmagic Lite key configuration */ +//#define BOOTMAGIC_LITE_ROW 0 +//#define BOOTMAGIC_LITE_COLUMN 0 \ No newline at end of file diff --git a/qmk/snappy/rev2/info.json b/qmk/snappy/rev2/info.json new file mode 100644 index 0000000..00ef100 --- /dev/null +++ b/qmk/snappy/rev2/info.json @@ -0,0 +1,337 @@ +{ + "keyboard_name": "snappy v2", + "manufacturer": "phga", + "maintainer": "qhga", + "url": "", + "usb": { + "vid": "0xCAFE", + "pid": "0x0002", + "device_version": "2.0.0" + }, + "layouts": { + "LAYOUT": { + "layout": [ + { + "x": 3, + "y": 0 + }, + { + "x": 11, + "y": 0 + }, + { + "x": 2, + "y": 0.125 + }, + { + "x": 4, + "y": 0.125 + }, + { + "x": 5, + "y": 0.125 + }, + { + "x": 6, + "y": 0.125 + }, + { + "x": 8, + "y": 0.125 + }, + { + "x": 9, + "y": 0.125 + }, + { + "x": 10, + "y": 0.125 + }, + { + "x": 12, + "y": 0.125 + }, + { + "x": 3, + "y": 1 + }, + { + "x": 11, + "y": 1 + }, + { + "x": 2, + "y": 1.125 + }, + { + "x": 4, + "y": 1.125 + }, + { + "x": 5, + "y": 1.125 + }, + { + "x": 6, + "y": 1.125 + }, + { + "x": 8, + "y": 1.125 + }, + { + "x": 9, + "y": 1.125 + }, + { + "x": 10, + "y": 1.125 + }, + { + "x": 12, + "y": 1.125 + }, + { + "x": 0, + "y": 1.375 + }, + { + "x": 1, + "y": 1.375 + }, + { + "x": 13, + "y": 1.375 + }, + { + "x": 14, + "y": 1.375 + }, + { + "x": 3, + "y": 2 + }, + { + "x": 11, + "y": 2 + }, + { + "x": 2, + "y": 2.125 + }, + { + "x": 4, + "y": 2.125 + }, + { + "x": 5, + "y": 2.125 + }, + { + "x": 6, + "y": 2.125 + }, + { + "x": 8, + "y": 2.125 + }, + { + "x": 9, + "y": 2.125 + }, + { + "x": 10, + "y": 2.125 + }, + { + "x": 12, + "y": 2.125 + }, + { + "x": 0, + "y": 2.375 + }, + { + "x": 1, + "y": 2.375 + }, + { + "x": 13, + "y": 2.375 + }, + { + "x": 14, + "y": 2.375 + }, + { + "x": 3, + "y": 3 + }, + { + "x": 11, + "y": 3 + }, + { + "x": 2, + "y": 3.125 + }, + { + "x": 4, + "y": 3.125 + }, + { + "x": 5, + "y": 3.125 + }, + { + "x": 6, + "y": 3.125 + }, + { + "x": 8, + "y": 3.125 + }, + { + "x": 9, + "y": 3.125 + }, + { + "x": 10, + "y": 3.125 + }, + { + "x": 12, + "y": 3.125 + }, + { + "x": 0, + "y": 3.375 + }, + { + "x": 1, + "y": 3.375 + }, + { + "x": 13, + "y": 3.375 + }, + { + "x": 14, + "y": 3.375 + }, + { + "x": 3, + "y": 4 + }, + { + "x": 11, + "y": 4 + }, + { + "x": 2, + "y": 4.125 + }, + { + "x": 4, + "y": 4.125 + }, + { + "x": 5, + "y": 4.125 + }, + { + "x": 6, + "y": 4.125 + }, + { + "x": 8, + "y": 4.125 + }, + { + "x": 9, + "y": 4.125 + }, + { + "x": 10, + "y": 4.125 + }, + { + "x": 12, + "y": 4.125 + }, + { + "x": 0, + "y": 4.375 + }, + { + "x": 1, + "y": 4.375 + }, + { + "x": 13, + "y": 4.375 + }, + { + "x": 14, + "y": 4.375 + }, + { + "x": 3, + "y": 5 + }, + { + "x": 11, + "y": 5 + }, + { + "x": 2, + "y": 5.125 + }, + { + "x": 4, + "y": 5.125 + }, + { + "x": 5, + "y": 5.125 + }, + { + "x": 6, + "y": 5.125 + }, + { + "x": 8, + "y": 5.125 + }, + { + "x": 9, + "y": 5.125 + }, + { + "x": 10, + "y": 5.125 + }, + { + "x": 12, + "y": 5.125 + }, + { + "x": 0, + "y": 5.375 + }, + { + "x": 1, + "y": 5.375 + }, + { + "x": 13, + "y": 5.375 + }, + { + "x": 14, + "y": 5.375 + } + ] + } + } +} diff --git a/qmk/snappy/rev2/keymaps/default/config.h b/qmk/snappy/rev2/keymaps/default/config.h new file mode 100644 index 0000000..a519f8a --- /dev/null +++ b/qmk/snappy/rev2/keymaps/default/config.h @@ -0,0 +1,4 @@ +#pragma once + +#define OLED_DISPLAY_128X64 +#define OLED_UPDATE_INTERVAL 10 diff --git a/qmk/snappy/rev2/keymaps/default/keymap.c b/qmk/snappy/rev2/keymaps/default/keymap.c new file mode 100644 index 0000000..dfd6558 --- /dev/null +++ b/qmk/snappy/rev2/keymaps/default/keymap.c @@ -0,0 +1,222 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _DVORAK, + _SPECIAL, + _GAMING, +}; + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + UM_PARN, + UM_CURL, + UM_BRAC, + UM_SPAM, +}; + + +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) + +#define ____ _______ +#define OS_LSFT OSM(MOD_LSFT) +/* #define OS_LGUI OSM(MOD_LGUI) */ +/* #define OS_LALT OSM(MOD_LALT) */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /*************************************************************************** + * DVORAK + ***************************************************************************/ + // R1 (10) +#define D_FN1__FN2__FN3__FN4__FN5_ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define D_FN6__FN7__FN8__FN9__FN0_ TO(_GAMING), KC_F8, KC_F10, KC_F12, ____ + // R2 (14) +#define _1_____2_____3_____4_____5 KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL +#define _6_____7_____8_____9_____0 KC_DEL, KC_6, KC_7, KC_8, KC_9, KC_0 + // R3 (14) +#define QUOT__COMM__DOT____P_____Y KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_DEL +#define _F_____G_____C_____R_____L KC_DEL, KC_F, KC_G, KC_C, KC_R, KC_L + // R4 (14) +#define _A_____O_____E_____U_____I KC_A, KC_O, KC_E, KC_U, KC_I, UM_PARN +#define _D_____H_____T_____N_____S KC_COLN, KC_D, KC_H, KC_T, KC_N, KC_S + // R5 (14) +#define _EQL___Q_____J_____K_____X KC_EQL, KC_Q, KC_J, KC_K, KC_X, UM_PARN +#define _B_____M_____W_____V_____Z UM_BRAC, KC_B, KC_M, KC_W, KC_V, KC_Z + // R6 (14) +#define _______BOTTOM_LEFT________ KC_LCTL, KC_LSFT, KC_LALT, OSL(_SPECIAL), KC_MINS, KC_BSPC, KC_ENT +#define _______BOTTOM_RIGHT_______ OS_LSFT, KC_SPC, KC_SCLN, ____, ____, ____, KC_LALT + + [_DVORAK] = + LAYOUT_wrapper( + D_FN1__FN2__FN3__FN4__FN5_, D_FN6__FN7__FN8__FN9__FN0_, + KC_GRAVE,_1_____2_____3_____4_____5, _6_____7_____8_____9_____0, UM_CURL, + KC_TAB, QUOT__COMM__DOT____P_____Y, _F_____G_____C_____R_____L, KC_BSLS, + KC_ESC, _A_____O_____E_____U_____I, _D_____H_____T_____N_____S, KC_SLASH, + KC_LGUI, _EQL___Q_____J_____K_____X, _B_____M_____W_____V_____Z, KC_LCTL, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + + /*************************************************************************** + * SPECIAL + ***************************************************************************/ + +#define ________SPECIAL_L0________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 +#define ________SPECIAL_L1________ ____, ____, ____, ____, ____, ____ +#define ________SPECIAL_L2________ RALT(KC_Q), RALT(KC_P), RALT(KC_5), RALT(KC_Y), RALT(KC_S), ____ +#define ________SPECIAL_L3________ ____, ____, ____, ____, ____, ____ + +#define ________SPECIAL_R0________ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 +#define ________SPECIAL_R1________ ____, ____, ____, KC_UP, ____, ____ +#define ________SPECIAL_R2________ ____, ____, KC_LEFT, KC_DOWN, KC_RIGHT, ____ +#define ________SPECIAL_R3________ ____, ____, ____, ____, ____, QK_BOOT + + [_SPECIAL]= + LAYOUT_wrapper( + D_FN1__FN2__FN3__FN4__FN5_, D_FN6__FN7__FN8__FN9__FN0_, + KC_GRAVE,________SPECIAL_L0________, ________SPECIAL_R0________, UM_CURL, + KC_TAB, ________SPECIAL_L1________, ________SPECIAL_R1________, KC_BSLS, + KC_ESC, ________SPECIAL_L2________, ________SPECIAL_R2________, KC_SLASH, + KC_LGUI, ________SPECIAL_L3________, ________SPECIAL_R3________, KC_LCTL, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + + /*************************************************************************** + * GAMING + ***************************************************************************/ +#define G_FN1__FN2__FN3__FN4__FN5_ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define G_FN6__FN7__FN8__FN9__FN0_ TO(_DVORAK), KC_F8, KC_F10, KC_F12, ____ +#define _Q_____W_____E_____R_____T KC_Q, KC_W, KC_E, KC_R, KC_T, ____ +#define _A_____S_____D_____F_____G KC_A, KC_S, KC_D, KC_F, KC_G, ____ +#define _Z_____X_____C_____V_____B KC_Z, KC_X, KC_C, KC_V, KC_B, ____ + +#define _Y_____U_____I_____O_____P ____, KC_Y, KC_U, KC_I, KC_O, KC_P +#define _H_____J_____K_____L__SCLN ____, KC_H, KC_J, KC_K, KC_L, KC_SCLN +#define _N_____M____COMM__DOT___UP ____, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP +#define ____GAMING_BOTTOM_LEFT____ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_ENT +#define ____GAMING_BOTTOM_RIGHT___ OS_LSFT, KC_SPC, KC_BSPC, UM_SPAM, KC_LEFT, KC_DOWN, KC_RIGHT + + [_GAMING] = + LAYOUT_wrapper( + G_FN1__FN2__FN3__FN4__FN5_, G_FN6__FN7__FN8__FN9__FN0_, + KC_ESC, _1_____2_____3_____4_____5, _6_____7_____8_____9_____0, UM_CURL, + KC_TAB, _Q_____W_____E_____R_____T, _Y_____U_____I_____O_____P, KC_BSLS, + KC_LSFT,_A_____S_____D_____F_____G, _H_____J_____K_____L__SCLN, KC_SLASH, + KC_LSFT,_Z_____X_____C_____V_____B, _N_____M____COMM__DOT___UP, KC_LCTL, + ____GAMING_BOTTOM_LEFT____, ____GAMING_BOTTOM_RIGHT___ + ), +}; + +void matrix_scan_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("matrix_scan_user\n"); */ +#endif +} + +#ifdef OLED_ENABLE +static void render_logo(void) { + static const char PROGMEM raw_logo[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,192,192,224,240,240,248,248,252,252,254,254,252,252,248,248,240,224,224,192,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 64,224,240,240,248,248,252,252,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,252,252,120, 56, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 3, 3, 7, 7, 15, 31, 31, 63, 63,127,127,255,255,255,255,255,255,255,255,255,255,255,127, 63, 63, 31, 31,143,143,135,131, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,129,131,195,195,227,241,241,248,248,252,254,254,255,255,255,255,255,255,255,255,254,254,252,252,248,240,240,224,224,192,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 60, 60,126,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,127, 63, 63, 31, 31, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 7, 15, 15, 31, 31, 63, 63,127,255,255,255,127, 63, 63, 31, 31, 15, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + oled_write_raw_P(raw_logo, sizeof(raw_logo)); +} + +bool oled_task_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("oled_task_user\n"); */ +#endif + if (is_keyboard_master()) { + const char *layer_names[3]; // or { "DVORAK", "SPECIAL", "GAMING" }; + layer_names[_DVORAK] = "DVORAK"; + layer_names[_SPECIAL] = "SPECIAL"; + layer_names[_GAMING] = "GAMING"; + + render_logo(); + // Align right + size_t layer = get_highest_layer(layer_state); + oled_set_cursor(oled_max_chars() - 1 - strlen(layer_names[layer]), 1); + oled_write(layer_names[layer], false); + } else { + // Center logo on second screen + oled_set_cursor(6, 0); + render_logo(); + } + return false; +} +#endif + +void keyboard_post_init_user(void) { + oled_init(OLED_ROTATION_180); + /* render_logo(); */ + // Customise these values to desired behaviour + /* debug_enable=true; */ + /* debug_matrix=true; */ + /* debug_keyboard=true; */ + //debug_mouse=true; + +} + +bool RLFW = false; +bool RLBO = false; +uint8_t mods; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + mods = get_mods(); + switch (keycode) { + case UM_SPAM: + if (record->event.pressed) { + SEND_STRING("k"SS_DELAY(80)"k"); + } + return false; + break; + case UM_CURL: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + SEND_STRING("}"); + } else { + SEND_STRING("{"); + } + set_mods(mods); + } + return false; + break; + case UM_BRAC: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + // Otherwise shift makes bracket into curly bracket + del_mods(MOD_MASK_SHIFT); + SEND_STRING("]"); + } else { + SEND_STRING("["); + } + set_mods(mods); + } + return false; + break; + case UM_PARN: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + SEND_STRING(")"); + } else { + SEND_STRING("("); + } + set_mods(mods); + } + return false; + break; + default: + return true; + } +} diff --git a/qmk/snappy/rev2/keymaps/default/readme.md b/qmk/snappy/rev2/keymaps/default/readme.md new file mode 100644 index 0000000..c1a5a02 --- /dev/null +++ b/qmk/snappy/rev2/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for snappy diff --git a/qmk/snappy/rev2/keymaps/qwertz/config.h b/qmk/snappy/rev2/keymaps/qwertz/config.h new file mode 100644 index 0000000..a519f8a --- /dev/null +++ b/qmk/snappy/rev2/keymaps/qwertz/config.h @@ -0,0 +1,4 @@ +#pragma once + +#define OLED_DISPLAY_128X64 +#define OLED_UPDATE_INTERVAL 10 diff --git a/qmk/snappy/rev2/keymaps/qwertz/keymap.c b/qmk/snappy/rev2/keymaps/qwertz/keymap.c new file mode 100644 index 0000000..4ce4b2d --- /dev/null +++ b/qmk/snappy/rev2/keymaps/qwertz/keymap.c @@ -0,0 +1,181 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _QWERTZ, + _SPECIAL, +}; + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + UM_PARN, + UM_CURL, + UM_BRAC, +}; + + +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) + +#define ____ _______ +#define OS_LSFT OSM(MOD_LSFT) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /*************************************************************************** + * QWERTZ + ***************************************************************************/ +#define _FN1__FN2__FN3__FN4__FN5_ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define SP__1_____2_____3_____4_____5__SP QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL +#define SP__Q_____W_____E_____R_____T__SP KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, UM_CURL +#define SP__A_____S_____D_____F_____G__SP OS_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, UM_PARN +#define SP__Y_____X_____C_____V_____B__SP OS_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NUBS + +#define _FN6__FN7__FN8__FN9__FN0_ TO(_SPECIAL), KC_F8, KC_F10, KC_F12, KC_GRV +#define SP__6_____7_____8_____9_____0__SP KC_DEL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS +#define SP__Z_____U_____I_____O_____P__SP KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC +#define SP__H_____J_____K_____L____OE__SP KC_NUHS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT +#define SP__N_____M____COMM__DOT_DASH__SP UM_BRAC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OS_LSFT + +#define _______BOTTOM_LEFT________ KC_LCTL, KC_LALT, ____, OSL(_SPECIAL), KC_MINS, KC_BSPC, KC_ENT +#define _______BOTTOM_RIGHT_______ OS_LSFT, KC_SPC, KC_RALT, ____, ____, ____, KC_EQL + + [_QWERTZ] = + LAYOUT_wrapper( + _FN1__FN2__FN3__FN4__FN5_, _FN6__FN7__FN8__FN9__FN0_, + SP__1_____2_____3_____4_____5__SP, SP__6_____7_____8_____9_____0__SP, + SP__Q_____W_____E_____R_____T__SP, SP__Z_____U_____I_____O_____P__SP, + SP__A_____S_____D_____F_____G__SP, SP__H_____J_____K_____L____OE__SP, + SP__Y_____X_____C_____V_____B__SP, SP__N_____M____COMM__DOT_DASH__SP, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + + /*************************************************************************** + * SPECIAL + ***************************************************************************/ + +#define ___________SPECIAL_L0___________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7 +#define ___________SPECIAL_L1___________ ____, ____, ____, ____, ____, ____, ____ +#define ___________SPECIAL_L2___________ ____, ____, ____, ____, ____, ____, ____ +#define ___________SPECIAL_L3___________ ____, ____, ____, ____, ____, ____, ____ +#define ___________SPECIAL_R0___________ KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14 +#define ___________SPECIAL_R1___________ ____, ____, ____, KC_UP, ____, ____, ____ +#define ___________SPECIAL_R2___________ ____, ____, KC_LEFT, KC_DOWN, KC_RIGHT, ____, ____ +#define ___________SPECIAL_R3___________ ____, ____, ____, ____, ____, QK_BOOT, ____ + + [_SPECIAL]= + LAYOUT_wrapper( + _FN1__FN2__FN3__FN4__FN5_, _FN6__FN7__FN8__FN9__FN0_, + ___________SPECIAL_L0___________, ___________SPECIAL_R0___________, + ___________SPECIAL_L1___________, ___________SPECIAL_R1___________, + ___________SPECIAL_L2___________, ___________SPECIAL_R2___________, + ___________SPECIAL_L3___________, ___________SPECIAL_R3___________, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + +}; + +void matrix_scan_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("matrix_scan_user\n"); */ +#endif +} + +#ifdef OLED_ENABLE +static void render_logo(void) { + static const char PROGMEM raw_logo[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,192,192,224,240,240,248,248,252,252,254,254,252,252,248,248,240,224,224,192,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 64,224,240,240,248,248,252,252,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,252,252,120, 56, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 3, 3, 7, 7, 15, 31, 31, 63, 63,127,127,255,255,255,255,255,255,255,255,255,255,255,127, 63, 63, 31, 31,143,143,135,131, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,129,131,195,195,227,241,241,248,248,252,254,254,255,255,255,255,255,255,255,255,254,254,252,252,248,240,240,224,224,192,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 60, 60,126,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,127, 63, 63, 31, 31, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 7, 15, 15, 31, 31, 63, 63,127,255,255,255,127, 63, 63, 31, 31, 15, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + oled_write_raw_P(raw_logo, sizeof(raw_logo)); +} + +bool oled_task_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("oled_task_user\n"); */ +#endif + if (is_keyboard_master()) { + const char *layer_names[3]; // or { "DVORAK", "SPECIAL", "GAMING" }; + layer_names[_QWERTZ] = "QWERTZ"; + layer_names[_SPECIAL] = "SPECIAL"; + + render_logo(); + // Align right + size_t layer = get_highest_layer(layer_state); + oled_set_cursor(oled_max_chars() - 1 - strlen(layer_names[layer]), 1); + oled_write(layer_names[layer], false); + } else { + // Center logo on second screen + oled_set_cursor(6, 0); + render_logo(); + } + return false; +} +#endif + +void keyboard_post_init_user(void) { + oled_init(OLED_ROTATION_180); + /* render_logo(); */ + // Customise these values to desired behaviour + /* debug_enable=true; */ + /* debug_matrix=true; */ + /* debug_keyboard=true; */ + //debug_mouse=true; + +} + +uint8_t mods; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + mods = get_mods(); + switch (keycode) { + case UM_CURL: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + del_mods(MOD_MASK_SHIFT); + SEND_STRING(SS_RALT("0")); + } else { + SEND_STRING(SS_RALT("7")); + } + set_mods(mods); + } + return false; + break; + case UM_BRAC: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + del_mods(MOD_MASK_SHIFT); + SEND_STRING(SS_RALT("9")); + } else { + SEND_STRING(SS_RALT("8")); + } + set_mods(mods); + } + return false; + break; + case UM_PARN: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + del_mods(MOD_MASK_SHIFT); + SEND_STRING(SS_LSFT("9")); + } else { + SEND_STRING(SS_LSFT("8")); + } + set_mods(mods); + } + return false; + break; + default: + return true; + } +} diff --git a/qmk/snappy/rev2/keymaps/qwertz/readme.md b/qmk/snappy/rev2/keymaps/qwertz/readme.md new file mode 100644 index 0000000..5ab2b13 --- /dev/null +++ b/qmk/snappy/rev2/keymaps/qwertz/readme.md @@ -0,0 +1 @@ +# The qwertz keymap for snappy diff --git a/qmk/snappy/rev2/rev2.c b/qmk/snappy/rev2/rev2.c new file mode 100644 index 0000000..2e80e7d --- /dev/null +++ b/qmk/snappy/rev2/rev2.c @@ -0,0 +1,4 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "rev2.h" diff --git a/qmk/snappy/rev2/rev2.h b/qmk/snappy/rev2/rev2.h new file mode 100644 index 0000000..6079eec --- /dev/null +++ b/qmk/snappy/rev2/rev2.h @@ -0,0 +1,38 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "quantum.h" + +/* This is a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ + +#define LAYOUT( \ + L02, L03, L04, L05, L06, R06, R05, R04, R03, R02, \ + L10, L11, L12, L13, L14, L15, L16, R16, R15, R14, R13, R12, R11, R10, \ + L20, L21, L22, L23, L24, L25, L26, R26, R25, R24, R23, R22, R21, R20, \ + L30, L31, L32, L33, L34, L35, L36, R36, R35, R34, R33, R32, R31, R30, \ + L40, L41, L42, L43, L44, L45, L46, R46, R45, R44, R43, R42, R41, R40, \ + L50, L51, L52, L53, L54, L55, L56, R56, R55, R54, R53, R52, R51, R50 \ + ) \ + { \ + { KC_NO, KC_NO, L02, L03, L04, L05, L06 }, \ + { L10, L11, L12, L13, L14, L15, L16 }, \ + { L20, L21, L22, L23, L24, L25, L26 }, \ + { L30, L31, L32, L33, L34, L35, L36 }, \ + { L40, L41, L42, L43, L44, L45, L46 }, \ + { L50, L51, L52, L53, L54, L55, L56 }, \ + { KC_NO, KC_NO, R02, R03, R04, R05, R06 }, \ + { R10, R11, R12, R13, R14, R15, R16 }, \ + { R20, R21, R22, R23, R24, R25, R26 }, \ + { R30, R31, R32, R33, R34, R35, R36 }, \ + { R40, R41, R42, R43, R44, R45, R46 }, \ + { R50, R51, R52, R53, R54, R55, R56 } \ + } diff --git a/qmk/snappy/rev2/rules.mk b/qmk/snappy/rev2/rules.mk new file mode 100644 index 0000000..8c97ea3 --- /dev/null +++ b/qmk/snappy/rev2/rules.mk @@ -0,0 +1,22 @@ +# MCU name +MCU = atmega32u4 +# MCU = liatris +PIN_COMPATIBLE = elite_c +# Bootloader selection +BOOTLOADER = atmel-dfu + +# Oled support +OLED_ENABLE = yes +OLED_DRIVER = ssd1306 +SPLIT_KEYBOARD = yes + +DEBOUNCE_TYPE = sym_eager_pk + +# Dynamic Layout Configuration +VIA_ENABLE = yes + +# Trackball support (disable if not used) +# MOUSEKEY_ENABLE = no +# POINTING_DEVICE_ENABLE = no +# SPLIT_POINTING_ENABLE = no +# POINTING_DEVICE_DRIVER = pimoroni_trackball diff --git a/qmk/snappy/rev3/config.h b/qmk/snappy/rev3/config.h new file mode 100644 index 0000000..8d3bf6e --- /dev/null +++ b/qmk/snappy/rev3/config.h @@ -0,0 +1,9 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once +// Set the handedness by writing it to EEPROM +#define EE_HANDS +/* #define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode. */ +/* #define SERIAL_USART_TX_PIN GP0 // USART TX pin */ +/* #define SERIAL_USART_RX_PIN GP1 // USART RX pin */ diff --git a/qmk/snappy/rev3/info.json b/qmk/snappy/rev3/info.json new file mode 100644 index 0000000..fd3272a --- /dev/null +++ b/qmk/snappy/rev3/info.json @@ -0,0 +1,711 @@ +{ + "keyboard_name": "snappy v3", + "manufacturer": "phga", + "maintainer": "qhga", + "url": "", + "usb": { + "vid": "0xCAFE", + "pid": "0x1337", + "device_version": "3.0.0", + "polling_interval": 1 + }, + "qmk": { + "locking": { + "enabled": true, + "resync": true + } + }, + "bootloader": "rp2040", + "processor": "RP2040", + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": [ + "GP28", + "GP27", + "GP26", + "GP22", + "GP20", + "GP23", + "GP21" + ], + "rows": [ + "GP4", + "GP5", + "GP6", + "GP7", + "GP8", + "GP9" + ] + }, + "split": { + "enabled": true, + "transport": { + "protocol": "serial_usart" + }, + "bootmagic": { + "matrix": [ + 0, + 0 + ] + } + }, + "features": { + "bootmagic": true, + "nkro": true, + "command": false, + "console": false, + "backlight": false, + "rgblight": false, + "audio": false + }, + "build": { + "debounce_type": "sym_eager_pk" + }, + "debounce": 15, + "layouts": { + "LAYOUT": { + "layout": [ + { + "matrix": [ + 0, + 3 + ], + "x": 3, + "y": 0 + }, + { + "matrix": [ + 6, + 3 + ], + "x": 11, + "y": 0 + }, + { + "matrix": [ + 0, + 2 + ], + "x": 2, + "y": 0.125 + }, + { + "matrix": [ + 0, + 4 + ], + "x": 4, + "y": 0.125 + }, + { + "matrix": [ + 0, + 5 + ], + "x": 5, + "y": 0.125 + }, + { + "matrix": [ + 0, + 6 + ], + "x": 6, + "y": 0.125 + }, + { + "matrix": [ + 6, + 0 + ], + "x": 8, + "y": 0.125 + }, + { + "matrix": [ + 6, + 1 + ], + "x": 9, + "y": 0.125 + }, + { + "matrix": [ + 6, + 2 + ], + "x": 10, + "y": 0.125 + }, + { + "matrix": [ + 6, + 4 + ], + "x": 12, + "y": 0.125 + }, + { + "matrix": [ + 1, + 3 + ], + "x": 3, + "y": 1 + }, + { + "matrix": [ + 7, + 3 + ], + "x": 11, + "y": 1 + }, + { + "matrix": [ + 1, + 2 + ], + "x": 2, + "y": 1.125 + }, + { + "matrix": [ + 1, + 4 + ], + "x": 4, + "y": 1.125 + }, + { + "matrix": [ + 1, + 5 + ], + "x": 5, + "y": 1.125 + }, + { + "matrix": [ + 1, + 6 + ], + "x": 6, + "y": 1.125 + }, + { + "matrix": [ + 7, + 0 + ], + "x": 8, + "y": 1.125 + }, + { + "matrix": [ + 7, + 1 + ], + "x": 9, + "y": 1.125 + }, + { + "matrix": [ + 7, + 2 + ], + "x": 10, + "y": 1.125 + }, + { + "matrix": [ + 7, + 4 + ], + "x": 12, + "y": 1.125 + }, + { + "matrix": [ + 1, + 0 + ], + "x": 0, + "y": 1.375 + }, + { + "matrix": [ + 1, + 1 + ], + "x": 1, + "y": 1.375 + }, + { + "matrix": [ + 7, + 5 + ], + "x": 13, + "y": 1.375 + }, + { + "matrix": [ + 7, + 6 + ], + "x": 14, + "y": 1.375 + }, + { + "matrix": [ + 2, + 3 + ], + "x": 3, + "y": 2 + }, + { + "matrix": [ + 8, + 3 + ], + "x": 11, + "y": 2 + }, + { + "matrix": [ + 2, + 2 + ], + "x": 2, + "y": 2.125 + }, + { + "matrix": [ + 2, + 4 + ], + "x": 4, + "y": 2.125 + }, + { + "matrix": [ + 2, + 5 + ], + "x": 5, + "y": 2.125 + }, + { + "matrix": [ + 2, + 6 + ], + "x": 6, + "y": 2.125 + }, + { + "matrix": [ + 8, + 0 + ], + "x": 8, + "y": 2.125 + }, + { + "matrix": [ + 8, + 1 + ], + "x": 9, + "y": 2.125 + }, + { + "matrix": [ + 8, + 2 + ], + "x": 10, + "y": 2.125 + }, + { + "matrix": [ + 8, + 4 + ], + "x": 12, + "y": 2.125 + }, + { + "matrix": [ + 2, + 0 + ], + "x": 0, + "y": 2.375 + }, + { + "matrix": [ + 2, + 1 + ], + "x": 1, + "y": 2.375 + }, + { + "matrix": [ + 8, + 5 + ], + "x": 13, + "y": 2.375 + }, + { + "matrix": [ + 8, + 6 + ], + "x": 14, + "y": 2.375 + }, + { + "matrix": [ + 3, + 3 + ], + "x": 3, + "y": 3 + }, + { + "matrix": [ + 9, + 3 + ], + "x": 11, + "y": 3 + }, + { + "matrix": [ + 3, + 2 + ], + "x": 2, + "y": 3.125 + }, + { + "matrix": [ + 3, + 4 + ], + "x": 4, + "y": 3.125 + }, + { + "matrix": [ + 3, + 5 + ], + "x": 5, + "y": 3.125 + }, + { + "matrix": [ + 3, + 6 + ], + "x": 6, + "y": 3.125 + }, + { + "matrix": [ + 9, + 0 + ], + "x": 8, + "y": 3.125 + }, + { + "matrix": [ + 9, + 1 + ], + "x": 9, + "y": 3.125 + }, + { + "matrix": [ + 9, + 2 + ], + "x": 10, + "y": 3.125 + }, + { + "matrix": [ + 9, + 4 + ], + "x": 12, + "y": 3.125 + }, + { + "matrix": [ + 3, + 0 + ], + "x": 0, + "y": 3.375 + }, + { + "matrix": [ + 3, + 1 + ], + "x": 1, + "y": 3.375 + }, + { + "matrix": [ + 9, + 5 + ], + "x": 13, + "y": 3.375 + }, + { + "matrix": [ + 9, + 6 + ], + "x": 14, + "y": 3.375 + }, + { + "matrix": [ + 4, + 3 + ], + "x": 3, + "y": 4 + }, + { + "matrix": [ + 10, + 3 + ], + "x": 11, + "y": 4 + }, + { + "matrix": [ + 4, + 2 + ], + "x": 2, + "y": 4.125 + }, + { + "matrix": [ + 4, + 4 + ], + "x": 4, + "y": 4.125 + }, + { + "matrix": [ + 4, + 5 + ], + "x": 5, + "y": 4.125 + }, + { + "matrix": [ + 4, + 6 + ], + "x": 6, + "y": 4.125 + }, + { + "matrix": [ + 10, + 0 + ], + "x": 8, + "y": 4.125 + }, + { + "matrix": [ + 10, + 1 + ], + "x": 9, + "y": 4.125 + }, + { + "matrix": [ + 10, + 2 + ], + "x": 10, + "y": 4.125 + }, + { + "matrix": [ + 10, + 4 + ], + "x": 12, + "y": 4.125 + }, + { + "matrix": [ + 4, + 0 + ], + "x": 0, + "y": 4.375 + }, + { + "matrix": [ + 4, + 1 + ], + "x": 1, + "y": 4.375 + }, + { + "matrix": [ + 10, + 5 + ], + "x": 13, + "y": 4.375 + }, + { + "matrix": [ + 10, + 6 + ], + "x": 14, + "y": 4.375 + }, + { + "matrix": [ + 5, + 3 + ], + "x": 3, + "y": 5 + }, + { + "matrix": [ + 11, + 3 + ], + "x": 11, + "y": 5 + }, + { + "matrix": [ + 5, + 2 + ], + "x": 2, + "y": 5.125 + }, + { + "matrix": [ + 5, + 4 + ], + "x": 4, + "y": 5.125 + }, + { + "matrix": [ + 5, + 5 + ], + "x": 5, + "y": 5.125 + }, + { + "matrix": [ + 5, + 6 + ], + "x": 6, + "y": 5.125 + }, + { + "matrix": [ + 11, + 0 + ], + "x": 8, + "y": 5.125 + }, + { + "matrix": [ + 11, + 1 + ], + "x": 9, + "y": 5.125 + }, + { + "matrix": [ + 11, + 2 + ], + "x": 10, + "y": 5.125 + }, + { + "matrix": [ + 11, + 4 + ], + "x": 12, + "y": 5.125 + }, + { + "matrix": [ + 5, + 0 + ], + "x": 0, + "y": 5.375 + }, + { + "matrix": [ + 5, + 1 + ], + "x": 1, + "y": 5.375 + }, + { + "matrix": [ + 11, + 5 + ], + "x": 13, + "y": 5.375 + }, + { + "matrix": [ + 11, + 6 + ], + "x": 14, + "y": 5.375 + } + ] + } + } +} diff --git a/qmk/snappy/rev3/keymaps/default/config.h b/qmk/snappy/rev3/keymaps/default/config.h new file mode 100644 index 0000000..a519f8a --- /dev/null +++ b/qmk/snappy/rev3/keymaps/default/config.h @@ -0,0 +1,4 @@ +#pragma once + +#define OLED_DISPLAY_128X64 +#define OLED_UPDATE_INTERVAL 10 diff --git a/qmk/snappy/rev3/keymaps/default/keymap.c b/qmk/snappy/rev3/keymaps/default/keymap.c new file mode 100644 index 0000000..dfd6558 --- /dev/null +++ b/qmk/snappy/rev3/keymaps/default/keymap.c @@ -0,0 +1,222 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _DVORAK, + _SPECIAL, + _GAMING, +}; + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + UM_PARN, + UM_CURL, + UM_BRAC, + UM_SPAM, +}; + + +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) + +#define ____ _______ +#define OS_LSFT OSM(MOD_LSFT) +/* #define OS_LGUI OSM(MOD_LGUI) */ +/* #define OS_LALT OSM(MOD_LALT) */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /*************************************************************************** + * DVORAK + ***************************************************************************/ + // R1 (10) +#define D_FN1__FN2__FN3__FN4__FN5_ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define D_FN6__FN7__FN8__FN9__FN0_ TO(_GAMING), KC_F8, KC_F10, KC_F12, ____ + // R2 (14) +#define _1_____2_____3_____4_____5 KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL +#define _6_____7_____8_____9_____0 KC_DEL, KC_6, KC_7, KC_8, KC_9, KC_0 + // R3 (14) +#define QUOT__COMM__DOT____P_____Y KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_DEL +#define _F_____G_____C_____R_____L KC_DEL, KC_F, KC_G, KC_C, KC_R, KC_L + // R4 (14) +#define _A_____O_____E_____U_____I KC_A, KC_O, KC_E, KC_U, KC_I, UM_PARN +#define _D_____H_____T_____N_____S KC_COLN, KC_D, KC_H, KC_T, KC_N, KC_S + // R5 (14) +#define _EQL___Q_____J_____K_____X KC_EQL, KC_Q, KC_J, KC_K, KC_X, UM_PARN +#define _B_____M_____W_____V_____Z UM_BRAC, KC_B, KC_M, KC_W, KC_V, KC_Z + // R6 (14) +#define _______BOTTOM_LEFT________ KC_LCTL, KC_LSFT, KC_LALT, OSL(_SPECIAL), KC_MINS, KC_BSPC, KC_ENT +#define _______BOTTOM_RIGHT_______ OS_LSFT, KC_SPC, KC_SCLN, ____, ____, ____, KC_LALT + + [_DVORAK] = + LAYOUT_wrapper( + D_FN1__FN2__FN3__FN4__FN5_, D_FN6__FN7__FN8__FN9__FN0_, + KC_GRAVE,_1_____2_____3_____4_____5, _6_____7_____8_____9_____0, UM_CURL, + KC_TAB, QUOT__COMM__DOT____P_____Y, _F_____G_____C_____R_____L, KC_BSLS, + KC_ESC, _A_____O_____E_____U_____I, _D_____H_____T_____N_____S, KC_SLASH, + KC_LGUI, _EQL___Q_____J_____K_____X, _B_____M_____W_____V_____Z, KC_LCTL, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + + /*************************************************************************** + * SPECIAL + ***************************************************************************/ + +#define ________SPECIAL_L0________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 +#define ________SPECIAL_L1________ ____, ____, ____, ____, ____, ____ +#define ________SPECIAL_L2________ RALT(KC_Q), RALT(KC_P), RALT(KC_5), RALT(KC_Y), RALT(KC_S), ____ +#define ________SPECIAL_L3________ ____, ____, ____, ____, ____, ____ + +#define ________SPECIAL_R0________ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 +#define ________SPECIAL_R1________ ____, ____, ____, KC_UP, ____, ____ +#define ________SPECIAL_R2________ ____, ____, KC_LEFT, KC_DOWN, KC_RIGHT, ____ +#define ________SPECIAL_R3________ ____, ____, ____, ____, ____, QK_BOOT + + [_SPECIAL]= + LAYOUT_wrapper( + D_FN1__FN2__FN3__FN4__FN5_, D_FN6__FN7__FN8__FN9__FN0_, + KC_GRAVE,________SPECIAL_L0________, ________SPECIAL_R0________, UM_CURL, + KC_TAB, ________SPECIAL_L1________, ________SPECIAL_R1________, KC_BSLS, + KC_ESC, ________SPECIAL_L2________, ________SPECIAL_R2________, KC_SLASH, + KC_LGUI, ________SPECIAL_L3________, ________SPECIAL_R3________, KC_LCTL, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + + /*************************************************************************** + * GAMING + ***************************************************************************/ +#define G_FN1__FN2__FN3__FN4__FN5_ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define G_FN6__FN7__FN8__FN9__FN0_ TO(_DVORAK), KC_F8, KC_F10, KC_F12, ____ +#define _Q_____W_____E_____R_____T KC_Q, KC_W, KC_E, KC_R, KC_T, ____ +#define _A_____S_____D_____F_____G KC_A, KC_S, KC_D, KC_F, KC_G, ____ +#define _Z_____X_____C_____V_____B KC_Z, KC_X, KC_C, KC_V, KC_B, ____ + +#define _Y_____U_____I_____O_____P ____, KC_Y, KC_U, KC_I, KC_O, KC_P +#define _H_____J_____K_____L__SCLN ____, KC_H, KC_J, KC_K, KC_L, KC_SCLN +#define _N_____M____COMM__DOT___UP ____, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP +#define ____GAMING_BOTTOM_LEFT____ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_ENT +#define ____GAMING_BOTTOM_RIGHT___ OS_LSFT, KC_SPC, KC_BSPC, UM_SPAM, KC_LEFT, KC_DOWN, KC_RIGHT + + [_GAMING] = + LAYOUT_wrapper( + G_FN1__FN2__FN3__FN4__FN5_, G_FN6__FN7__FN8__FN9__FN0_, + KC_ESC, _1_____2_____3_____4_____5, _6_____7_____8_____9_____0, UM_CURL, + KC_TAB, _Q_____W_____E_____R_____T, _Y_____U_____I_____O_____P, KC_BSLS, + KC_LSFT,_A_____S_____D_____F_____G, _H_____J_____K_____L__SCLN, KC_SLASH, + KC_LSFT,_Z_____X_____C_____V_____B, _N_____M____COMM__DOT___UP, KC_LCTL, + ____GAMING_BOTTOM_LEFT____, ____GAMING_BOTTOM_RIGHT___ + ), +}; + +void matrix_scan_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("matrix_scan_user\n"); */ +#endif +} + +#ifdef OLED_ENABLE +static void render_logo(void) { + static const char PROGMEM raw_logo[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,192,192,224,240,240,248,248,252,252,254,254,252,252,248,248,240,224,224,192,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 64,224,240,240,248,248,252,252,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,252,252,120, 56, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 3, 3, 7, 7, 15, 31, 31, 63, 63,127,127,255,255,255,255,255,255,255,255,255,255,255,127, 63, 63, 31, 31,143,143,135,131, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,129,131,195,195,227,241,241,248,248,252,254,254,255,255,255,255,255,255,255,255,254,254,252,252,248,240,240,224,224,192,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 60, 60,126,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,127, 63, 63, 31, 31, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 7, 15, 15, 31, 31, 63, 63,127,255,255,255,127, 63, 63, 31, 31, 15, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + oled_write_raw_P(raw_logo, sizeof(raw_logo)); +} + +bool oled_task_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("oled_task_user\n"); */ +#endif + if (is_keyboard_master()) { + const char *layer_names[3]; // or { "DVORAK", "SPECIAL", "GAMING" }; + layer_names[_DVORAK] = "DVORAK"; + layer_names[_SPECIAL] = "SPECIAL"; + layer_names[_GAMING] = "GAMING"; + + render_logo(); + // Align right + size_t layer = get_highest_layer(layer_state); + oled_set_cursor(oled_max_chars() - 1 - strlen(layer_names[layer]), 1); + oled_write(layer_names[layer], false); + } else { + // Center logo on second screen + oled_set_cursor(6, 0); + render_logo(); + } + return false; +} +#endif + +void keyboard_post_init_user(void) { + oled_init(OLED_ROTATION_180); + /* render_logo(); */ + // Customise these values to desired behaviour + /* debug_enable=true; */ + /* debug_matrix=true; */ + /* debug_keyboard=true; */ + //debug_mouse=true; + +} + +bool RLFW = false; +bool RLBO = false; +uint8_t mods; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + mods = get_mods(); + switch (keycode) { + case UM_SPAM: + if (record->event.pressed) { + SEND_STRING("k"SS_DELAY(80)"k"); + } + return false; + break; + case UM_CURL: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + SEND_STRING("}"); + } else { + SEND_STRING("{"); + } + set_mods(mods); + } + return false; + break; + case UM_BRAC: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + // Otherwise shift makes bracket into curly bracket + del_mods(MOD_MASK_SHIFT); + SEND_STRING("]"); + } else { + SEND_STRING("["); + } + set_mods(mods); + } + return false; + break; + case UM_PARN: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + SEND_STRING(")"); + } else { + SEND_STRING("("); + } + set_mods(mods); + } + return false; + break; + default: + return true; + } +} diff --git a/qmk/snappy/rev3/keymaps/default/readme.md b/qmk/snappy/rev3/keymaps/default/readme.md new file mode 100644 index 0000000..c1a5a02 --- /dev/null +++ b/qmk/snappy/rev3/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for snappy diff --git a/qmk/snappy/rev3/rev3.c b/qmk/snappy/rev3/rev3.c new file mode 100644 index 0000000..f0dd23c --- /dev/null +++ b/qmk/snappy/rev3/rev3.c @@ -0,0 +1,4 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "rev3.h" diff --git a/qmk/snappy/rev3/rev3.h b/qmk/snappy/rev3/rev3.h new file mode 100644 index 0000000..9746d58 --- /dev/null +++ b/qmk/snappy/rev3/rev3.h @@ -0,0 +1,6 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "quantum.h" diff --git a/qmk/snappy/rev3/rules.mk b/qmk/snappy/rev3/rules.mk new file mode 100644 index 0000000..34d119c --- /dev/null +++ b/qmk/snappy/rev3/rules.mk @@ -0,0 +1,8 @@ +# Split communication +SERIAL_DRIVER = vendor +# Oled support +OLED_ENABLE = yes +OLED_DRIVER = ssd1306 + +# Dynamic Layout Configuration +VIA_ENABLE = yes diff --git a/qmk/snappy/rev3_5/config.h b/qmk/snappy/rev3_5/config.h new file mode 100644 index 0000000..6ea4e40 --- /dev/null +++ b/qmk/snappy/rev3_5/config.h @@ -0,0 +1,49 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* key matrix size */ +#define MATRIX_ROWS 12 +#define MATRIX_COLS 7 + +/* + * 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 { GP4, GP5, GP6, GP7, GP8, GP9 } +#define MATRIX_COL_PINS { GP28, GP27, GP26, GP22, GP20, GP23, GP21 } +#define BOOTMAGIC_ROW 0 +#define BOOTMAGIC_COLUMN 6 +#define BOOTMAGIC_ROW_RIGHT 6 +#define BOOTMAGIC_COLUMN_RIGHT 6 + +/* COL2ROW, ROW2COL */ +#define DIODE_DIRECTION COL2ROW +// Set the handedness by writing it to EEPROM +#define EE_HANDS +// Used in ChibiOS/ARM boards that do not support VBUS detection (r2040 promicro, not liatris) +#define SPLIT_USB_DETECT +// ATTENTION: This has to be enabled on both halves so make sure you have a button on each +// half (independently) to get the half into bootloader mode. (e.g. BOOTMAGIC keys for both halves) +#define SPLIT_WATCHDOG_ENABLE +#define SPLIT_WATCHDOG_TIMEOUT 3000 +// https://github.com/qmk/qmk_firmware/blob/master/docs/serial_driver.md#usart-full-duplex +#define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode. +#define SERIAL_USART_TX_PIN GP0 // USART TX pin +#define SERIAL_USART_RX_PIN GP1 // USART RX pin + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCE 20 +#define USB_POLLING_INTERVAL_MS 1 + +/* 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 diff --git a/qmk/snappy/rev3_5/info.json b/qmk/snappy/rev3_5/info.json new file mode 100644 index 0000000..fbba25f --- /dev/null +++ b/qmk/snappy/rev3_5/info.json @@ -0,0 +1,337 @@ +{ + "keyboard_name": "snappy v3.5", + "manufacturer": "phga", + "maintainer": "qhga", + "url": "", + "usb": { + "vid": "0xCAFE", + "pid": "0x1337", + "device_version": "3.5.0" + }, + "layouts": { + "LAYOUT": { + "layout": [ + { + "x": 3, + "y": 0 + }, + { + "x": 11, + "y": 0 + }, + { + "x": 2, + "y": 0.125 + }, + { + "x": 4, + "y": 0.125 + }, + { + "x": 5, + "y": 0.125 + }, + { + "x": 6, + "y": 0.125 + }, + { + "x": 8, + "y": 0.125 + }, + { + "x": 9, + "y": 0.125 + }, + { + "x": 10, + "y": 0.125 + }, + { + "x": 12, + "y": 0.125 + }, + { + "x": 3, + "y": 1 + }, + { + "x": 11, + "y": 1 + }, + { + "x": 2, + "y": 1.125 + }, + { + "x": 4, + "y": 1.125 + }, + { + "x": 5, + "y": 1.125 + }, + { + "x": 6, + "y": 1.125 + }, + { + "x": 8, + "y": 1.125 + }, + { + "x": 9, + "y": 1.125 + }, + { + "x": 10, + "y": 1.125 + }, + { + "x": 12, + "y": 1.125 + }, + { + "x": 0, + "y": 1.375 + }, + { + "x": 1, + "y": 1.375 + }, + { + "x": 13, + "y": 1.375 + }, + { + "x": 14, + "y": 1.375 + }, + { + "x": 3, + "y": 2 + }, + { + "x": 11, + "y": 2 + }, + { + "x": 2, + "y": 2.125 + }, + { + "x": 4, + "y": 2.125 + }, + { + "x": 5, + "y": 2.125 + }, + { + "x": 6, + "y": 2.125 + }, + { + "x": 8, + "y": 2.125 + }, + { + "x": 9, + "y": 2.125 + }, + { + "x": 10, + "y": 2.125 + }, + { + "x": 12, + "y": 2.125 + }, + { + "x": 0, + "y": 2.375 + }, + { + "x": 1, + "y": 2.375 + }, + { + "x": 13, + "y": 2.375 + }, + { + "x": 14, + "y": 2.375 + }, + { + "x": 3, + "y": 3 + }, + { + "x": 11, + "y": 3 + }, + { + "x": 2, + "y": 3.125 + }, + { + "x": 4, + "y": 3.125 + }, + { + "x": 5, + "y": 3.125 + }, + { + "x": 6, + "y": 3.125 + }, + { + "x": 8, + "y": 3.125 + }, + { + "x": 9, + "y": 3.125 + }, + { + "x": 10, + "y": 3.125 + }, + { + "x": 12, + "y": 3.125 + }, + { + "x": 0, + "y": 3.375 + }, + { + "x": 1, + "y": 3.375 + }, + { + "x": 13, + "y": 3.375 + }, + { + "x": 14, + "y": 3.375 + }, + { + "x": 3, + "y": 4 + }, + { + "x": 11, + "y": 4 + }, + { + "x": 2, + "y": 4.125 + }, + { + "x": 4, + "y": 4.125 + }, + { + "x": 5, + "y": 4.125 + }, + { + "x": 6, + "y": 4.125 + }, + { + "x": 8, + "y": 4.125 + }, + { + "x": 9, + "y": 4.125 + }, + { + "x": 10, + "y": 4.125 + }, + { + "x": 12, + "y": 4.125 + }, + { + "x": 0, + "y": 4.375 + }, + { + "x": 1, + "y": 4.375 + }, + { + "x": 13, + "y": 4.375 + }, + { + "x": 14, + "y": 4.375 + }, + { + "x": 3, + "y": 5 + }, + { + "x": 11, + "y": 5 + }, + { + "x": 2, + "y": 5.125 + }, + { + "x": 4, + "y": 5.125 + }, + { + "x": 5, + "y": 5.125 + }, + { + "x": 6, + "y": 5.125 + }, + { + "x": 8, + "y": 5.125 + }, + { + "x": 9, + "y": 5.125 + }, + { + "x": 10, + "y": 5.125 + }, + { + "x": 12, + "y": 5.125 + }, + { + "x": 0, + "y": 5.375 + }, + { + "x": 1, + "y": 5.375 + }, + { + "x": 13, + "y": 5.375 + }, + { + "x": 14, + "y": 5.375 + } + ] + } + } +} diff --git a/qmk/snappy/rev3_5/keymaps/default/config.h b/qmk/snappy/rev3_5/keymaps/default/config.h new file mode 100644 index 0000000..a519f8a --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/default/config.h @@ -0,0 +1,4 @@ +#pragma once + +#define OLED_DISPLAY_128X64 +#define OLED_UPDATE_INTERVAL 10 diff --git a/qmk/snappy/rev3_5/keymaps/default/keymap.c b/qmk/snappy/rev3_5/keymaps/default/keymap.c new file mode 100644 index 0000000..dfd6558 --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/default/keymap.c @@ -0,0 +1,222 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _DVORAK, + _SPECIAL, + _GAMING, +}; + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + UM_PARN, + UM_CURL, + UM_BRAC, + UM_SPAM, +}; + + +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) + +#define ____ _______ +#define OS_LSFT OSM(MOD_LSFT) +/* #define OS_LGUI OSM(MOD_LGUI) */ +/* #define OS_LALT OSM(MOD_LALT) */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /*************************************************************************** + * DVORAK + ***************************************************************************/ + // R1 (10) +#define D_FN1__FN2__FN3__FN4__FN5_ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define D_FN6__FN7__FN8__FN9__FN0_ TO(_GAMING), KC_F8, KC_F10, KC_F12, ____ + // R2 (14) +#define _1_____2_____3_____4_____5 KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL +#define _6_____7_____8_____9_____0 KC_DEL, KC_6, KC_7, KC_8, KC_9, KC_0 + // R3 (14) +#define QUOT__COMM__DOT____P_____Y KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_DEL +#define _F_____G_____C_____R_____L KC_DEL, KC_F, KC_G, KC_C, KC_R, KC_L + // R4 (14) +#define _A_____O_____E_____U_____I KC_A, KC_O, KC_E, KC_U, KC_I, UM_PARN +#define _D_____H_____T_____N_____S KC_COLN, KC_D, KC_H, KC_T, KC_N, KC_S + // R5 (14) +#define _EQL___Q_____J_____K_____X KC_EQL, KC_Q, KC_J, KC_K, KC_X, UM_PARN +#define _B_____M_____W_____V_____Z UM_BRAC, KC_B, KC_M, KC_W, KC_V, KC_Z + // R6 (14) +#define _______BOTTOM_LEFT________ KC_LCTL, KC_LSFT, KC_LALT, OSL(_SPECIAL), KC_MINS, KC_BSPC, KC_ENT +#define _______BOTTOM_RIGHT_______ OS_LSFT, KC_SPC, KC_SCLN, ____, ____, ____, KC_LALT + + [_DVORAK] = + LAYOUT_wrapper( + D_FN1__FN2__FN3__FN4__FN5_, D_FN6__FN7__FN8__FN9__FN0_, + KC_GRAVE,_1_____2_____3_____4_____5, _6_____7_____8_____9_____0, UM_CURL, + KC_TAB, QUOT__COMM__DOT____P_____Y, _F_____G_____C_____R_____L, KC_BSLS, + KC_ESC, _A_____O_____E_____U_____I, _D_____H_____T_____N_____S, KC_SLASH, + KC_LGUI, _EQL___Q_____J_____K_____X, _B_____M_____W_____V_____Z, KC_LCTL, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + + /*************************************************************************** + * SPECIAL + ***************************************************************************/ + +#define ________SPECIAL_L0________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 +#define ________SPECIAL_L1________ ____, ____, ____, ____, ____, ____ +#define ________SPECIAL_L2________ RALT(KC_Q), RALT(KC_P), RALT(KC_5), RALT(KC_Y), RALT(KC_S), ____ +#define ________SPECIAL_L3________ ____, ____, ____, ____, ____, ____ + +#define ________SPECIAL_R0________ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 +#define ________SPECIAL_R1________ ____, ____, ____, KC_UP, ____, ____ +#define ________SPECIAL_R2________ ____, ____, KC_LEFT, KC_DOWN, KC_RIGHT, ____ +#define ________SPECIAL_R3________ ____, ____, ____, ____, ____, QK_BOOT + + [_SPECIAL]= + LAYOUT_wrapper( + D_FN1__FN2__FN3__FN4__FN5_, D_FN6__FN7__FN8__FN9__FN0_, + KC_GRAVE,________SPECIAL_L0________, ________SPECIAL_R0________, UM_CURL, + KC_TAB, ________SPECIAL_L1________, ________SPECIAL_R1________, KC_BSLS, + KC_ESC, ________SPECIAL_L2________, ________SPECIAL_R2________, KC_SLASH, + KC_LGUI, ________SPECIAL_L3________, ________SPECIAL_R3________, KC_LCTL, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + + /*************************************************************************** + * GAMING + ***************************************************************************/ +#define G_FN1__FN2__FN3__FN4__FN5_ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define G_FN6__FN7__FN8__FN9__FN0_ TO(_DVORAK), KC_F8, KC_F10, KC_F12, ____ +#define _Q_____W_____E_____R_____T KC_Q, KC_W, KC_E, KC_R, KC_T, ____ +#define _A_____S_____D_____F_____G KC_A, KC_S, KC_D, KC_F, KC_G, ____ +#define _Z_____X_____C_____V_____B KC_Z, KC_X, KC_C, KC_V, KC_B, ____ + +#define _Y_____U_____I_____O_____P ____, KC_Y, KC_U, KC_I, KC_O, KC_P +#define _H_____J_____K_____L__SCLN ____, KC_H, KC_J, KC_K, KC_L, KC_SCLN +#define _N_____M____COMM__DOT___UP ____, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP +#define ____GAMING_BOTTOM_LEFT____ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_ENT +#define ____GAMING_BOTTOM_RIGHT___ OS_LSFT, KC_SPC, KC_BSPC, UM_SPAM, KC_LEFT, KC_DOWN, KC_RIGHT + + [_GAMING] = + LAYOUT_wrapper( + G_FN1__FN2__FN3__FN4__FN5_, G_FN6__FN7__FN8__FN9__FN0_, + KC_ESC, _1_____2_____3_____4_____5, _6_____7_____8_____9_____0, UM_CURL, + KC_TAB, _Q_____W_____E_____R_____T, _Y_____U_____I_____O_____P, KC_BSLS, + KC_LSFT,_A_____S_____D_____F_____G, _H_____J_____K_____L__SCLN, KC_SLASH, + KC_LSFT,_Z_____X_____C_____V_____B, _N_____M____COMM__DOT___UP, KC_LCTL, + ____GAMING_BOTTOM_LEFT____, ____GAMING_BOTTOM_RIGHT___ + ), +}; + +void matrix_scan_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("matrix_scan_user\n"); */ +#endif +} + +#ifdef OLED_ENABLE +static void render_logo(void) { + static const char PROGMEM raw_logo[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,192,192,224,240,240,248,248,252,252,254,254,252,252,248,248,240,224,224,192,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 64,224,240,240,248,248,252,252,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,252,252,120, 56, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 3, 3, 7, 7, 15, 31, 31, 63, 63,127,127,255,255,255,255,255,255,255,255,255,255,255,127, 63, 63, 31, 31,143,143,135,131, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,129,131,195,195,227,241,241,248,248,252,254,254,255,255,255,255,255,255,255,255,254,254,252,252,248,240,240,224,224,192,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 60, 60,126,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,127, 63, 63, 31, 31, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 7, 15, 15, 31, 31, 63, 63,127,255,255,255,127, 63, 63, 31, 31, 15, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + oled_write_raw_P(raw_logo, sizeof(raw_logo)); +} + +bool oled_task_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("oled_task_user\n"); */ +#endif + if (is_keyboard_master()) { + const char *layer_names[3]; // or { "DVORAK", "SPECIAL", "GAMING" }; + layer_names[_DVORAK] = "DVORAK"; + layer_names[_SPECIAL] = "SPECIAL"; + layer_names[_GAMING] = "GAMING"; + + render_logo(); + // Align right + size_t layer = get_highest_layer(layer_state); + oled_set_cursor(oled_max_chars() - 1 - strlen(layer_names[layer]), 1); + oled_write(layer_names[layer], false); + } else { + // Center logo on second screen + oled_set_cursor(6, 0); + render_logo(); + } + return false; +} +#endif + +void keyboard_post_init_user(void) { + oled_init(OLED_ROTATION_180); + /* render_logo(); */ + // Customise these values to desired behaviour + /* debug_enable=true; */ + /* debug_matrix=true; */ + /* debug_keyboard=true; */ + //debug_mouse=true; + +} + +bool RLFW = false; +bool RLBO = false; +uint8_t mods; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + mods = get_mods(); + switch (keycode) { + case UM_SPAM: + if (record->event.pressed) { + SEND_STRING("k"SS_DELAY(80)"k"); + } + return false; + break; + case UM_CURL: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + SEND_STRING("}"); + } else { + SEND_STRING("{"); + } + set_mods(mods); + } + return false; + break; + case UM_BRAC: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + // Otherwise shift makes bracket into curly bracket + del_mods(MOD_MASK_SHIFT); + SEND_STRING("]"); + } else { + SEND_STRING("["); + } + set_mods(mods); + } + return false; + break; + case UM_PARN: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + SEND_STRING(")"); + } else { + SEND_STRING("("); + } + set_mods(mods); + } + return false; + break; + default: + return true; + } +} diff --git a/qmk/snappy/rev3_5/keymaps/default/readme.md b/qmk/snappy/rev3_5/keymaps/default/readme.md new file mode 100644 index 0000000..c1a5a02 --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for snappy diff --git a/qmk/snappy/rev3_5/keymaps/default/rules.mk b/qmk/snappy/rev3_5/keymaps/default/rules.mk new file mode 100644 index 0000000..41ed140 --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/default/rules.mk @@ -0,0 +1,2 @@ +EXTRAKEY_ENABLE = no +MOUSEKEY_ENABLE = no diff --git a/qmk/snappy/rev3_5/keymaps/maza/config.h b/qmk/snappy/rev3_5/keymaps/maza/config.h new file mode 100644 index 0000000..a519f8a --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/maza/config.h @@ -0,0 +1,4 @@ +#pragma once + +#define OLED_DISPLAY_128X64 +#define OLED_UPDATE_INTERVAL 10 diff --git a/qmk/snappy/rev3_5/keymaps/maza/keymap.c b/qmk/snappy/rev3_5/keymaps/maza/keymap.c new file mode 100644 index 0000000..8ceb85f --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/maza/keymap.c @@ -0,0 +1,181 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _QWERTZ, + _SPECIAL, +}; + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + UM_PARN, + UM_CURL, + UM_BRAC, +}; + + +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) + +#define ____ _______ +#define OS_LSFT OSM(MOD_LSFT) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /*************************************************************************** + * QWERTZ + ***************************************************************************/ +#define _FN1__FN2__FN3__FN4__FN5_ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define SP__1_____2_____3_____4_____5__SP QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL +#define SP__Q_____W_____E_____R_____T__SP KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, UM_CURL +#define SP__A_____S_____D_____F_____G__SP KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, UM_PARN +#define SP__Y_____X_____C_____V_____B__SP OS_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NUBS + +#define _FN6__FN7__FN8__FN9__FN0_ KC_ESC, KC_F8, KC_F10, KC_F12, KC_GRV +#define SP__6_____7_____8_____9_____0__SP KC_DEL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS +#define SP__Z_____U_____I_____O_____P__SP KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC +#define SP__H_____J_____K_____L____OE__SP KC_NUHS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT +#define SP__N_____M____COMM__DOT_DASH__SP UM_BRAC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OS_LSFT + +#define _______BOTTOM_LEFT________ KC_LCTL, KC_LALT, KC_LALT, OSL(_SPECIAL), OS_LSFT, KC_BSPC, KC_ENT +#define _______BOTTOM_RIGHT_______ KC_BSPC, KC_SPC, KC_RALT, ____, ____, ____, KC_EQL + + [_QWERTZ] = + LAYOUT_wrapper( + _FN1__FN2__FN3__FN4__FN5_, _FN6__FN7__FN8__FN9__FN0_, + SP__1_____2_____3_____4_____5__SP, SP__6_____7_____8_____9_____0__SP, + SP__Q_____W_____E_____R_____T__SP, SP__Z_____U_____I_____O_____P__SP, + SP__A_____S_____D_____F_____G__SP, SP__H_____J_____K_____L____OE__SP, + SP__Y_____X_____C_____V_____B__SP, SP__N_____M____COMM__DOT_DASH__SP, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + + /*************************************************************************** + * SPECIAL + ***************************************************************************/ + +#define ___________SPECIAL_L0___________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7 +#define ___________SPECIAL_L1___________ ____, ____, ____, ____, ____, ____, ____ +#define ___________SPECIAL_L2___________ ____, ____, ____, ____, ____, ____, ____ +#define ___________SPECIAL_L3___________ ____, ____, ____, ____, ____, ____, ____ +#define ___________SPECIAL_R0___________ KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14 +#define ___________SPECIAL_R1___________ ____, ____, ____, KC_UP, ____, ____, ____ +#define ___________SPECIAL_R2___________ ____, ____, KC_LEFT, KC_DOWN, KC_RIGHT, ____, ____ +#define ___________SPECIAL_R3___________ ____, ____, ____, ____, ____, QK_BOOT, ____ + + [_SPECIAL]= + LAYOUT_wrapper( + _FN1__FN2__FN3__FN4__FN5_, _FN6__FN7__FN8__FN9__FN0_, + ___________SPECIAL_L0___________, ___________SPECIAL_R0___________, + ___________SPECIAL_L1___________, ___________SPECIAL_R1___________, + ___________SPECIAL_L2___________, ___________SPECIAL_R2___________, + ___________SPECIAL_L3___________, ___________SPECIAL_R3___________, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + +}; + +void matrix_scan_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("matrix_scan_user\n"); */ +#endif +} + +#ifdef OLED_ENABLE +static void render_logo(void) { + static const char PROGMEM raw_logo[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,192,192,224,240,240,248,248,252,252,254,254,252,252,248,248,240,224,224,192,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 64,224,240,240,248,248,252,252,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,252,252,120, 56, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 3, 3, 7, 7, 15, 31, 31, 63, 63,127,127,255,255,255,255,255,255,255,255,255,255,255,127, 63, 63, 31, 31,143,143,135,131, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,129,131,195,195,227,241,241,248,248,252,254,254,255,255,255,255,255,255,255,255,254,254,252,252,248,240,240,224,224,192,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 60, 60,126,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,127, 63, 63, 31, 31, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 7, 15, 15, 31, 31, 63, 63,127,255,255,255,127, 63, 63, 31, 31, 15, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + oled_write_raw_P(raw_logo, sizeof(raw_logo)); +} + +bool oled_task_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("oled_task_user\n"); */ +#endif + if (is_keyboard_master()) { + const char *layer_names[3]; // or { "DVORAK", "SPECIAL", "GAMING" }; + layer_names[_QWERTZ] = "QWERTZ"; + layer_names[_SPECIAL] = "SPECIAL"; + + render_logo(); + // Align right + size_t layer = get_highest_layer(layer_state); + oled_set_cursor(oled_max_chars() - 1 - strlen(layer_names[layer]), 1); + oled_write(layer_names[layer], false); + } else { + // Center logo on second screen + oled_set_cursor(6, 0); + render_logo(); + } + return false; +} +#endif + +void keyboard_post_init_user(void) { + oled_init(OLED_ROTATION_180); + /* render_logo(); */ + // Customise these values to desired behaviour + /* debug_enable=true; */ + /* debug_matrix=true; */ + /* debug_keyboard=true; */ + //debug_mouse=true; + +} + +uint8_t mods; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + mods = get_mods(); + switch (keycode) { + case UM_CURL: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + del_mods(MOD_MASK_SHIFT); + SEND_STRING(SS_RALT("0")); + } else { + SEND_STRING(SS_RALT("7")); + } + set_mods(mods); + } + return false; + break; + case UM_BRAC: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + del_mods(MOD_MASK_SHIFT); + SEND_STRING(SS_RALT("9")); + } else { + SEND_STRING(SS_RALT("8")); + } + set_mods(mods); + } + return false; + break; + case UM_PARN: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + del_mods(MOD_MASK_SHIFT); + SEND_STRING(SS_LSFT("9")); + } else { + SEND_STRING(SS_LSFT("8")); + } + set_mods(mods); + } + return false; + break; + default: + return true; + } +} diff --git a/qmk/snappy/rev3_5/keymaps/maza/readme.md b/qmk/snappy/rev3_5/keymaps/maza/readme.md new file mode 100644 index 0000000..e2c9f0d --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/maza/readme.md @@ -0,0 +1 @@ +# Mazas qwertz keymap for snappy diff --git a/qmk/snappy/rev3_5/keymaps/qwertz/config.h b/qmk/snappy/rev3_5/keymaps/qwertz/config.h new file mode 100644 index 0000000..a519f8a --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/qwertz/config.h @@ -0,0 +1,4 @@ +#pragma once + +#define OLED_DISPLAY_128X64 +#define OLED_UPDATE_INTERVAL 10 diff --git a/qmk/snappy/rev3_5/keymaps/qwertz/keymap.c b/qmk/snappy/rev3_5/keymaps/qwertz/keymap.c new file mode 100644 index 0000000..4ce4b2d --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/qwertz/keymap.c @@ -0,0 +1,181 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _QWERTZ, + _SPECIAL, +}; + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + UM_PARN, + UM_CURL, + UM_BRAC, +}; + + +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) + +#define ____ _______ +#define OS_LSFT OSM(MOD_LSFT) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /*************************************************************************** + * QWERTZ + ***************************************************************************/ +#define _FN1__FN2__FN3__FN4__FN5_ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define SP__1_____2_____3_____4_____5__SP QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL +#define SP__Q_____W_____E_____R_____T__SP KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, UM_CURL +#define SP__A_____S_____D_____F_____G__SP OS_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, UM_PARN +#define SP__Y_____X_____C_____V_____B__SP OS_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NUBS + +#define _FN6__FN7__FN8__FN9__FN0_ TO(_SPECIAL), KC_F8, KC_F10, KC_F12, KC_GRV +#define SP__6_____7_____8_____9_____0__SP KC_DEL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS +#define SP__Z_____U_____I_____O_____P__SP KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC +#define SP__H_____J_____K_____L____OE__SP KC_NUHS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT +#define SP__N_____M____COMM__DOT_DASH__SP UM_BRAC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OS_LSFT + +#define _______BOTTOM_LEFT________ KC_LCTL, KC_LALT, ____, OSL(_SPECIAL), KC_MINS, KC_BSPC, KC_ENT +#define _______BOTTOM_RIGHT_______ OS_LSFT, KC_SPC, KC_RALT, ____, ____, ____, KC_EQL + + [_QWERTZ] = + LAYOUT_wrapper( + _FN1__FN2__FN3__FN4__FN5_, _FN6__FN7__FN8__FN9__FN0_, + SP__1_____2_____3_____4_____5__SP, SP__6_____7_____8_____9_____0__SP, + SP__Q_____W_____E_____R_____T__SP, SP__Z_____U_____I_____O_____P__SP, + SP__A_____S_____D_____F_____G__SP, SP__H_____J_____K_____L____OE__SP, + SP__Y_____X_____C_____V_____B__SP, SP__N_____M____COMM__DOT_DASH__SP, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + + /*************************************************************************** + * SPECIAL + ***************************************************************************/ + +#define ___________SPECIAL_L0___________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7 +#define ___________SPECIAL_L1___________ ____, ____, ____, ____, ____, ____, ____ +#define ___________SPECIAL_L2___________ ____, ____, ____, ____, ____, ____, ____ +#define ___________SPECIAL_L3___________ ____, ____, ____, ____, ____, ____, ____ +#define ___________SPECIAL_R0___________ KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14 +#define ___________SPECIAL_R1___________ ____, ____, ____, KC_UP, ____, ____, ____ +#define ___________SPECIAL_R2___________ ____, ____, KC_LEFT, KC_DOWN, KC_RIGHT, ____, ____ +#define ___________SPECIAL_R3___________ ____, ____, ____, ____, ____, QK_BOOT, ____ + + [_SPECIAL]= + LAYOUT_wrapper( + _FN1__FN2__FN3__FN4__FN5_, _FN6__FN7__FN8__FN9__FN0_, + ___________SPECIAL_L0___________, ___________SPECIAL_R0___________, + ___________SPECIAL_L1___________, ___________SPECIAL_R1___________, + ___________SPECIAL_L2___________, ___________SPECIAL_R2___________, + ___________SPECIAL_L3___________, ___________SPECIAL_R3___________, + _______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______ + ), + +}; + +void matrix_scan_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("matrix_scan_user\n"); */ +#endif +} + +#ifdef OLED_ENABLE +static void render_logo(void) { + static const char PROGMEM raw_logo[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,192,192,224,240,240,248,248,252,252,254,254,252,252,248,248,240,224,224,192,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 64,224,240,240,248,248,252,252,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,252,252,120, 56, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 3, 3, 7, 7, 15, 31, 31, 63, 63,127,127,255,255,255,255,255,255,255,255,255,255,255,127, 63, 63, 31, 31,143,143,135,131, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,129,131,195,195,227,241,241,248,248,252,254,254,255,255,255,255,255,255,255,255,254,254,252,252,248,240,240,224,224,192,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 60, 60,126,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,127, 63, 63, 31, 31, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 7, 15, 15, 31, 31, 63, 63,127,255,255,255,127, 63, 63, 31, 31, 15, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + oled_write_raw_P(raw_logo, sizeof(raw_logo)); +} + +bool oled_task_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("oled_task_user\n"); */ +#endif + if (is_keyboard_master()) { + const char *layer_names[3]; // or { "DVORAK", "SPECIAL", "GAMING" }; + layer_names[_QWERTZ] = "QWERTZ"; + layer_names[_SPECIAL] = "SPECIAL"; + + render_logo(); + // Align right + size_t layer = get_highest_layer(layer_state); + oled_set_cursor(oled_max_chars() - 1 - strlen(layer_names[layer]), 1); + oled_write(layer_names[layer], false); + } else { + // Center logo on second screen + oled_set_cursor(6, 0); + render_logo(); + } + return false; +} +#endif + +void keyboard_post_init_user(void) { + oled_init(OLED_ROTATION_180); + /* render_logo(); */ + // Customise these values to desired behaviour + /* debug_enable=true; */ + /* debug_matrix=true; */ + /* debug_keyboard=true; */ + //debug_mouse=true; + +} + +uint8_t mods; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + mods = get_mods(); + switch (keycode) { + case UM_CURL: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + del_mods(MOD_MASK_SHIFT); + SEND_STRING(SS_RALT("0")); + } else { + SEND_STRING(SS_RALT("7")); + } + set_mods(mods); + } + return false; + break; + case UM_BRAC: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + del_mods(MOD_MASK_SHIFT); + SEND_STRING(SS_RALT("9")); + } else { + SEND_STRING(SS_RALT("8")); + } + set_mods(mods); + } + return false; + break; + case UM_PARN: + if (record->event.pressed) { + if (mods & MOD_MASK_SHIFT) { + del_mods(MOD_MASK_SHIFT); + SEND_STRING(SS_LSFT("9")); + } else { + SEND_STRING(SS_LSFT("8")); + } + set_mods(mods); + } + return false; + break; + default: + return true; + } +} diff --git a/qmk/snappy/rev3_5/keymaps/qwertz/readme.md b/qmk/snappy/rev3_5/keymaps/qwertz/readme.md new file mode 100644 index 0000000..5ab2b13 --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/qwertz/readme.md @@ -0,0 +1 @@ +# The qwertz keymap for snappy diff --git a/qmk/snappy/rev3_5/keymaps/tima/config.h b/qmk/snappy/rev3_5/keymaps/tima/config.h new file mode 100644 index 0000000..84e1d24 --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/tima/config.h @@ -0,0 +1,4 @@ +#pragma once + +#define OLED_DISPLAY_128X64 +#define OLED_UPDATE_INTERVAL 10 \ No newline at end of file diff --git a/qmk/snappy/rev3_5/keymaps/tima/keymap.c b/qmk/snappy/rev3_5/keymaps/tima/keymap.c new file mode 100644 index 0000000..64f0059 --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/tima/keymap.c @@ -0,0 +1,183 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _LAYER0, + _LAYER1, + _LAYER2, + _LAYER3, +}; + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here +}; + +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) + +#define OS_LSFT OSM(MOD_LSFT) +/* #define OS_LGUI OSM(MOD_LGUI) */ +/* #define OS_LALT OSM(MOD_LALT) */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/*********************************************************************************** + * DEFAULT - _LAYER0 + ***********************************************************************************/ + +// R1 (10) +#define ___HASH___F5___F9___NONE___QUOT__ KC_BSLS, KC_F5, KC_F9, KC_NO, KC_EQL +#define _TO3___PLAY___MUTE___VOUP___VOLD_ TO(_LAYER3), KC_MPLY, KC_MUTE, KC_VOLU, KC_VOLD +// R2 (14) +#define __ESC__1_____2_____3_____4_____5__PLS__ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_RBRC +#define __MIN__6_____7_____8_____9_____0__QST__ KC_SLSH, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS +// R3 (14) +#define __TAB__Q_____W_____E_____R_____T_RIBR3_ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, RALT(KC_8) +#define _LFBR3_Z_____U_____I_____O_____P___UE__ RALT(KC_9), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC +// R4 (14) +#define __ESC__A_____S_____D_____F_____G_RIBR1_ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8) +#define _LFBR1_H_____J_____K_____L_____OE__AE__ S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT +// R5 (14) +#define _SHFT__Y_____X_____C_____V_____B_RIBR2_ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, RALT(KC_7) +#define _LFBR2_N_____M____COM___DOT___MIN__SHFT RALT(KC_0), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT +// R6 (14) +#define ______________BOTTOM_LEFT______________ KC_LALT, KC_NUBS, KC_LCTL, MO(_LAYER1), KC_LGUI, KC_LCTL, KC_RALT +#define ______________BOTTOM_RIGHT_____________ KC_ENT, KC_SPC, KC_BSPC, MO(_LAYER2), KC_DEL, KC_PSCR, OSM(MOD_LSFT) + + [_LAYER0] = LAYOUT_wrapper(___HASH___F5___F9___NONE___QUOT__, _TO3___PLAY___MUTE___VOUP___VOLD_, __ESC__1_____2_____3_____4_____5__PLS__, __MIN__6_____7_____8_____9_____0__QST__, __TAB__Q_____W_____E_____R_____T_RIBR3_, _LFBR3_Z_____U_____I_____O_____P___UE__, __ESC__A_____S_____D_____F_____G_RIBR1_, _LFBR1_H_____J_____K_____L_____OE__AE__, _SHFT__Y_____X_____C_____V_____B_RIBR2_, _LFBR2_N_____M____COM___DOT___MIN__SHFT, ______________BOTTOM_LEFT______________, ______________BOTTOM_RIGHT_____________), + +/*********************************************************************************** + * LOWER - _LAYER1 + ***********************************************************************************/ + +// R1 (10) +#define ____________LAYER1_L1____________ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +#define ____________LAYER1_R1____________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +// R2 (14) +#define _______________LAYER1_L2_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO +#define _______________LAYER1_R2_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS +// R3 (14) +#define _______________LAYER1_L3_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO +#define _______________LAYER1_R3_______________ KC_NO, KC_NO, KC_LBRC, KC_NO, KC_SCLN, KC_NO, KC_BSLS +// R4 (14) +#define _______________LAYER1_L4_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO +#define _______________LAYER1_R4_______________ KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_SLSH +// R5 (14) +#define _______________LAYER1_L5_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO +#define _______________LAYER1_R5_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT, KC_NO +// R6 (14) +#define _______________LAYER1_L6_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +#define _______________LAYER1_R6_______________ KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + + [_LAYER1] = LAYOUT_wrapper(____________LAYER1_L1____________, ____________LAYER1_R1____________, _______________LAYER1_L2_______________, _______________LAYER1_R2_______________, _______________LAYER1_L3_______________, _______________LAYER1_R3_______________, _______________LAYER1_L4_______________, _______________LAYER1_R4_______________, _______________LAYER1_L5_______________, _______________LAYER1_R5_______________, _______________LAYER1_L6_______________, _______________LAYER1_R6_______________), + +/*********************************************************************************** + * UPPER - _LAYER2 + ***********************************************************************************/ + +// R1 (10) +#define ____________LAYER2_L1____________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +#define ____________LAYER2_R1____________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT +// R2 (14) +#define _______________LAYER2_L2_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +#define _______________LAYER2_R2_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +// R3 (14) +#define _______________LAYER2_L3_______________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 +#define _______________LAYER2_R3_______________ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSLS +// R4 (14) +#define _______________LAYER2_L4_______________ KC_TRNS, KC_QUOT, KC_MINS, KC_MS_BTN4, KC_MS_BTN5, KC_NO, KC_NO +#define _______________LAYER2_R4_______________ KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, KC_NO, KC_SLSH +// R5 (14) +#define _______________LAYER2_L5_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO +#define _______________LAYER2_R5_______________ KC_NO, KC_MS_BTN1, KC_MS_BTN2, KC_NO, KC_NO, KC_NO, KC_NO +// R6 (14) +#define _______________LAYER2_L6_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS +#define _______________LAYER2_R6_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + + [_LAYER2] = LAYOUT_wrapper(____________LAYER2_L1____________, ____________LAYER2_R1____________, _______________LAYER2_L2_______________, _______________LAYER2_R2_______________, _______________LAYER2_L3_______________, _______________LAYER2_R3_______________, _______________LAYER2_L4_______________, _______________LAYER2_R4_______________, _______________LAYER2_L5_______________, _______________LAYER2_R5_______________, _______________LAYER2_L6_______________, _______________LAYER2_R6_______________), + +/*********************************************************************************** + * Gaming - _LAYER3 + ***********************************************************************************/ + +// R1 (10) +#define ____________LAYER3_L1____________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define ____________LAYER3_R1____________ TO(_LAYER0), KC_NO, KC_NO, KC_TRNS, KC_DEL +// R2 (14) +#define _______________LAYER3_L2_______________ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6 +#define _______________LAYER3_R2_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO +// R3 (14) +#define _______________LAYER3_L3_______________ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y +#define _______________LAYER3_R3_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO +// R4 (14) +#define _______________LAYER3_L4_______________ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H +#define _______________LAYER3_R4_______________ KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO +// R5 (14) +#define _______________LAYER3_L5_______________ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N +#define _______________LAYER3_R5_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO +// R6 (14) +#define _______________LAYER3_L6_______________ KC_LCTL, KC_LALT, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_TRNS +#define _______________LAYER3_R6_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT + + [_LAYER3] = LAYOUT_wrapper(____________LAYER3_L1____________, ____________LAYER3_R1____________, _______________LAYER3_L2_______________, _______________LAYER3_R2_______________, _______________LAYER3_L3_______________, _______________LAYER3_R3_______________, _______________LAYER3_L4_______________, _______________LAYER3_R4_______________, _______________LAYER3_L5_______________, _______________LAYER3_R5_______________, _______________LAYER3_L6_______________, _______________LAYER3_R6_______________), +}; + +void matrix_scan_user(void) { +#ifdef CONSOLE_ENABLE + /* uprintf("matrix_scan_user\n"); */ +#endif +} + +#ifdef OLED_ENABLE +static void render_logo(void) { + static const char PROGMEM raw_logo[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 192, 192, 224, 240, 240, 248, 248, 252, 252, 254, 254, 252, 252, 248, 248, 240, 224, 224, 192, 192, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 224, 240, 240, 248, 248, 252, 252, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 252, 252, 120, 56, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 3, 3, 7, 7, 15, 31, 31, 63, 63, 127, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 63, 63, 31, 31, 143, 143, 135, 131, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 129, 131, 195, 195, 227, 241, 241, 248, 248, 252, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 252, 252, 248, 240, 240, 224, 224, 192, 192, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 60, 60, 126, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 127, 63, 63, 31, 31, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 7, 15, 15, 31, 31, 63, 63, 127, 255, 255, 255, 127, 63, 63, 31, 31, 15, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + oled_write_raw_P(raw_logo, sizeof(raw_logo)); +} + +bool oled_task_user(void) { +# ifdef CONSOLE_ENABLE + /* uprintf("oled_task_user\n"); */ +# endif + if (is_keyboard_master()) { + oled_write_P(PSTR("\n "), false); + switch (get_highest_layer(layer_state)) { + case _LAYER0: + oled_write_P(PSTR("Default\n"), false); + break; + case _LAYER1: + oled_write_P(PSTR("Lower\n"), false); + break; + case _LAYER2: + oled_write_P(PSTR("Upper\n"), false); + break; + case _LAYER3: + oled_write_P(PSTR("Gaming\n"), false); + break; + } + } else { + // Center logo on second screen + oled_set_cursor(6, 0); + render_logo(); + } + return false; +} +#endif + +void keyboard_post_init_user(void) { + oled_init(OLED_ROTATION_180); + /* render_logo(); */ + // Customise these values to desired behaviour + /* debug_enable=true; */ + /* debug_matrix=true; */ + /* debug_keyboard=true; */ + // debug_mouse=true; +} \ No newline at end of file diff --git a/qmk/snappy/rev3_5/keymaps/tima/readme.md b/qmk/snappy/rev3_5/keymaps/tima/readme.md new file mode 100644 index 0000000..6762024 --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/tima/readme.md @@ -0,0 +1 @@ +# A QWERTZ keymap for snappy diff --git a/qmk/snappy/rev3_5/keymaps/tima/rules.mk b/qmk/snappy/rev3_5/keymaps/tima/rules.mk new file mode 100644 index 0000000..74c71e0 --- /dev/null +++ b/qmk/snappy/rev3_5/keymaps/tima/rules.mk @@ -0,0 +1,3 @@ +# Special features +MOUSEKEY_ENABLE = yes +EXTRAKEY_ENABLE = yes \ No newline at end of file diff --git a/qmk/snappy/rev3_5/rev3_5.c b/qmk/snappy/rev3_5/rev3_5.c new file mode 100644 index 0000000..e912fa3 --- /dev/null +++ b/qmk/snappy/rev3_5/rev3_5.c @@ -0,0 +1,4 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "rev3_5.h" diff --git a/qmk/snappy/rev3_5/rev3_5.h b/qmk/snappy/rev3_5/rev3_5.h new file mode 100644 index 0000000..6079eec --- /dev/null +++ b/qmk/snappy/rev3_5/rev3_5.h @@ -0,0 +1,38 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "quantum.h" + +/* This is a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ + +#define LAYOUT( \ + L02, L03, L04, L05, L06, R06, R05, R04, R03, R02, \ + L10, L11, L12, L13, L14, L15, L16, R16, R15, R14, R13, R12, R11, R10, \ + L20, L21, L22, L23, L24, L25, L26, R26, R25, R24, R23, R22, R21, R20, \ + L30, L31, L32, L33, L34, L35, L36, R36, R35, R34, R33, R32, R31, R30, \ + L40, L41, L42, L43, L44, L45, L46, R46, R45, R44, R43, R42, R41, R40, \ + L50, L51, L52, L53, L54, L55, L56, R56, R55, R54, R53, R52, R51, R50 \ + ) \ + { \ + { KC_NO, KC_NO, L02, L03, L04, L05, L06 }, \ + { L10, L11, L12, L13, L14, L15, L16 }, \ + { L20, L21, L22, L23, L24, L25, L26 }, \ + { L30, L31, L32, L33, L34, L35, L36 }, \ + { L40, L41, L42, L43, L44, L45, L46 }, \ + { L50, L51, L52, L53, L54, L55, L56 }, \ + { KC_NO, KC_NO, R02, R03, R04, R05, R06 }, \ + { R10, R11, R12, R13, R14, R15, R16 }, \ + { R20, R21, R22, R23, R24, R25, R26 }, \ + { R30, R31, R32, R33, R34, R35, R36 }, \ + { R40, R41, R42, R43, R44, R45, R46 }, \ + { R50, R51, R52, R53, R54, R55, R56 } \ + } diff --git a/qmk/snappy/rev3_5/rules.mk b/qmk/snappy/rev3_5/rules.mk new file mode 100644 index 0000000..6584cdb --- /dev/null +++ b/qmk/snappy/rev3_5/rules.mk @@ -0,0 +1,15 @@ +MCU = RP2040 +BOOTLOADER = rp2040 +SERIAL_DRIVER = vendor +# Key is defined in config.h +BOOTMAGIC_ENABLE = yes + +# Oled support +OLED_ENABLE = yes +OLED_DRIVER = ssd1306 +SPLIT_KEYBOARD = yes + +DEBOUNCE_TYPE = sym_eager_pk + +# Dynamic Layout Configuration +VIA_ENABLE = yes diff --git a/qmk/snappy/rules.mk b/qmk/snappy/rules.mk new file mode 100644 index 0000000..84dea74 --- /dev/null +++ b/qmk/snappy/rules.mk @@ -0,0 +1,3 @@ +# Current default revision +# NOTE: Additional mk rules in the specific folders (rev1, ...) +DEFAULT_FOLDER = snappy/rev3_5 diff --git a/qmk/snappy/snappy.c b/qmk/snappy/snappy.c new file mode 100644 index 0000000..dbe85bf --- /dev/null +++ b/qmk/snappy/snappy.c @@ -0,0 +1,4 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "snappy.h" diff --git a/qmk/snappy/snappy.h b/qmk/snappy/snappy.h new file mode 100644 index 0000000..c762389 --- /dev/null +++ b/qmk/snappy/snappy.h @@ -0,0 +1,16 @@ +// Copyright 2022 Philip Gaber (@qhga) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "quantum.h" + +#ifdef KEYBOARD_snappy_rev1 + #include "rev1.h" +#elif KEYBOARD_snappy_rev2 + #include "rev2.h" +#elif KEYBOARD_snappy_rev3 + #include "rev3.h" +#elif KEYBOARD_snappy_rev3_5 + #include "rev3_5.h" +#endif