aboutsummaryrefslogtreecommitdiff
path: root/keyboards/keyboardio/model01
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/keyboardio/model01')
-rw-r--r--keyboards/keyboardio/model01/config.h38
-rw-r--r--keyboards/keyboardio/model01/info.json87
-rw-r--r--keyboards/keyboardio/model01/keymaps/default/config.h19
-rw-r--r--keyboards/keyboardio/model01/keymaps/default/keymap.c124
-rw-r--r--keyboards/keyboardio/model01/keymaps/default/readme.md3
-rw-r--r--keyboards/keyboardio/model01/keymaps/dshields/config.h4
-rw-r--r--keyboards/keyboardio/model01/keymaps/dshields/keymap.c28
-rw-r--r--keyboards/keyboardio/model01/keymaps/dshields/readme.md10
-rw-r--r--keyboards/keyboardio/model01/keymaps/tw1t611/config.h19
-rw-r--r--keyboards/keyboardio/model01/keymaps/tw1t611/keymap.c50
-rw-r--r--keyboards/keyboardio/model01/keymaps/tw1t611/readme.md5
-rw-r--r--keyboards/keyboardio/model01/leds.c132
-rw-r--r--keyboards/keyboardio/model01/leds.h22
-rw-r--r--keyboards/keyboardio/model01/matrix.c94
-rw-r--r--keyboards/keyboardio/model01/model01.c38
-rw-r--r--keyboards/keyboardio/model01/model01.h50
-rw-r--r--keyboards/keyboardio/model01/readme.md37
-rw-r--r--keyboards/keyboardio/model01/rules.mk35
-rw-r--r--keyboards/keyboardio/model01/wire-protocol-constants.h53
19 files changed, 848 insertions, 0 deletions
diff --git a/keyboards/keyboardio/model01/config.h b/keyboards/keyboardio/model01/config.h
new file mode 100644
index 000000000..c2160979c
--- /dev/null
+++ b/keyboards/keyboardio/model01/config.h
@@ -0,0 +1,38 @@
1/*
2Copyright 2018 James Laird-Wah
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include <config_common.h>
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0x1209
24#define PRODUCT_ID 0x2301
25#define DEVICE_VER 0x0001
26#define MANUFACTURER Keyboardio
27#define PRODUCT Model 01
28#define DESCRIPTION (QMK)
29
30/* key matrix size; rows are doubled for split */
31#define MATRIX_ROWS 8
32#define MATRIX_COLS 8
33
34/* The scanners already debounce for us */
35#define DEBOUNCE 0
36
37/* RGB matrix constants */
38#define DRIVER_LED_TOTAL 64
diff --git a/keyboards/keyboardio/model01/info.json b/keyboards/keyboardio/model01/info.json
new file mode 100644
index 000000000..66bea171d
--- /dev/null
+++ b/keyboards/keyboardio/model01/info.json
@@ -0,0 +1,87 @@
1{
2 "keyboard_name": "model01",
3 "keyboard_folder": "keyboardio/model01",
4 "url": "https://keyboard.io",
5 "maintainer": "qmk",
6 "width": 18.5,
7 "height": 7.5,
8 "layouts": {
9 "LAYOUT": {
10 "layout": [
11 {"label":"PROG", "x":0, "y":0.4, "h":1.3},
12 {"label":"1", "x":1, "y":0.2, "h":1.5},
13 {"label":"2", "x":2, "y":0.1, "h":1.1},
14 {"label":"3", "x":3, "y":0},
15 {"label":"4", "x":4, "y":0.1},
16 {"label":"5", "x":5, "y":0.3},
17
18 {"label":"6", "x":12.5, "y":0.3},
19 {"label":"7", "x":13.5, "y":0.1},
20 {"label":"8", "x":14.5, "y":0},
21 {"label":"9", "x":15.5, "y":0.1, "h":1.1},
22 {"label":"0", "x":16.5, "y":0.2, "h":1.5},
23 {"label":"NUM", "x":17.5, "y":0.4, "h":1.3},
24
25 {"label":"GRAVE", "x":0, "y":1.7},
26 {"label":"Q", "x":1, "y":1.7},
27 {"label":"W", "x":2, "y":1.2},
28 {"label":"E", "x":3, "y":1},
29 {"label":"R", "x":4, "y":1.1},
30 {"label":"T", "x":5, "y":1.3},
31 {"label":"LED", "x":6, "y":0.6, "h":1.5},
32
33 {"label":"ANY", "x":11.5, "y":0.6, "h":1.5},
34 {"label":"Y", "x":12.5, "y":1.3},
35 {"label":"U", "x":13.5, "y":1.1},
36 {"label":"I", "x":14.5, "y":1},
37 {"label":"O", "x":15.5, "y":1.2},
38 {"label":"P", "x":16.5, "y":1.7},
39 {"label":"EQUAL", "x":17.5, "y":1.7},
40
41 {"label":"PAGEUP", "x":0, "y":2.7},
42 {"label":"A", "x":1, "y":2.7},
43 {"label":"S", "x":2, "y":2.2},
44 {"label":"D", "x":3, "y":2},
45 {"label":"F", "x":4, "y":2.1},
46 {"label":"G", "x":5, "y":2.3},
47 {"label":"TAB", "x":6, "y":2.1, "h":1.3},
48
49 {"label":"ENTER", "x":11.5, "y":2.1, "h":1.3},
50 {"label":"H", "x":12.5, "y":2.3},
51 {"label":"J", "x":13.5, "y":2.1},
52 {"label":"K", "x":14.5, "y":2},
53 {"label":"L", "x":15.5, "y":2.2},
54 {"label":"SEMICOLON", "x":16.5, "y":2.7},
55 {"label":"QUOTE", "x":17.5, "y":2.7},
56
57 {"label":"PAGEDOWN", "x":0, "y":3.7, "h":1.2},
58 {"label":"Z", "x":1, "y":3.7},
59 {"label":"X", "x":2, "y":3.2, "h":1.15},
60 {"label":"C", "x":3, "y":3},
61 {"label":"V", "x":4, "y":3.1},
62 {"label":"B", "x":5, "y":3.3},
63 {"label":"ESC", "x":6, "y":3.4, "h":1.1},
64
65 {"label":"BUTTERFLY", "x":11.5, "y":3.4, "h":1.1},
66 {"label":"N", "x":12.5, "y":3.3},
67 {"label":"M", "x":13.5, "y":3.1},
68 {"label":"COMMA", "x":14.5, "y":3},
69 {"label":"DOT", "x":15.5, "y":3.2, "h":1.15},
70 {"label":"SLASH", "x":16.5, "y":3.7},
71 {"label":"MINS", "x":17.5, "y":3.7, "h":1.2},
72
73 {"label":"LCTL", "x":4.75, "y":4.3},
74 {"label":"RCTL", "x":12.75, "y":4.3},
75 {"label":"BACKSPACE", "x":5.75, "y":4.5},
76 {"label":"SPACE", "x":11.75, "y":4.5},
77 {"label":"LGUI", "x":6.75, "y":4.7},
78 {"label":"RALT", "x":10.75, "y":4.7},
79 {"label":"LSHIFT", "x":7.75, "y":5.1},
80 {"label":"RSHIFT", "x":9.75, "y":5.1},
81
82 {"label":"FN", "x":6.25, "y":6.1, "h":1.4},
83 {"label":"FN", "x":11.25, "y":6.1, "h":1.4}
84 ]
85 }
86 }
87}
diff --git a/keyboards/keyboardio/model01/keymaps/default/config.h b/keyboards/keyboardio/model01/keymaps/default/config.h
new file mode 100644
index 000000000..8ab9d8b02
--- /dev/null
+++ b/keyboards/keyboardio/model01/keymaps/default/config.h
@@ -0,0 +1,19 @@
1/* Copyright 2018 James Laird-Wah
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19/* place overrides here */
diff --git a/keyboards/keyboardio/model01/keymaps/default/keymap.c b/keyboards/keyboardio/model01/keymaps/default/keymap.c
new file mode 100644
index 000000000..5ee865972
--- /dev/null
+++ b/keyboards/keyboardio/model01/keymaps/default/keymap.c
@@ -0,0 +1,124 @@
1/* Copyright 2018 James Laird-Wah
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18/* layer constants */
19enum {
20 DEF = 0,
21 NUM,
22 FUN,
23};
24
25
26const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
27[DEF] = LAYOUT(
28 RESET , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , TG(NUM),
29 KC_GRV , KC_Q , KC_W , KC_E , KC_R , KC_T , RGB_MOD, _______, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_EQL ,
30 KC_PGUP, KC_A , KC_S , KC_D , KC_F , KC_G , KC_TAB , KC_ENT , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
31 KC_PGDN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_ESC , _______, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_MINS,
32 KC_LCTL, KC_RCTL,
33 KC_BSPC, KC_SPC ,
34 KC_LGUI, KC_RALT,
35 KC_LSFT, KC_RSFT,
36 MO(FUN), MO(FUN)
37 ),
38[NUM] = LAYOUT(
39 _______, _______, _______, _______, _______, _______, _______, KC_P7 , KC_P8 , KC_P9 , KC_PMNS, _______,
40 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P4 , KC_P5 , KC_P6 , KC_PPLS, _______,
41 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1 , KC_P2 , KC_P3 , KC_PEQL, _______,
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0 , KC_PDOT, KC_PAST, KC_PSLS, KC_PENT,
43 _______, _______,
44 _______, _______,
45 _______, _______,
46 _______, _______,
47 _______, _______
48 ),
49[FUN] = LAYOUT(
50 _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
51 KC_TAB , _______, KC_MS_U, _______, KC_BTN3, _______, RGB_TOG, KC_MPRV, KC_MNXT, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 ,
52 KC_HOME, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, _______, _______, KC_MPLY, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______, _______,
53 KC_END , KC_PSCR, KC_INS , _______, KC_BTN2, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_BSLS, KC_PIPE,
54 _______, _______,
55 KC_DEL , KC_ENT ,
56 _______, _______,
57 _______, _______,
58 _______, _______
59 )
60};
61
62/* template for new layouts:
63LAYOUT(
64 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
65 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
66 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
67 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
68 _______, _______,
69 _______, _______,
70 _______, _______,
71 _______, _______,
72 _______, _______
73 )
74*/
75
76static void set_numpad_colours(int on, void (*write)(int, uint8_t, uint8_t, uint8_t)) {
77 if (!on) {
78 for (int i=44; i<=60; i++)
79 write(i, 0, 0, 0);
80 write(63, 0, 0, 0);
81 return;
82 }
83
84 /* main number keys */
85 for (int i=44; i<=47; i++)
86 write(i, 255, 0, 0);
87 for (int i=49; i<=54; i++)
88 write(i, 255, 0, 0);
89
90 /* accessory keys */
91 write(48, 128, 128, 0);
92 for (int i=55; i<=59; i++)
93 write(i, 128, 128, 0);
94
95 // enter
96 write(63, 0, 128, 0);
97
98 // num key
99 write(60, 128, 0, 128);
100}
101
102#ifdef RGB_MATRIX_ENABLE
103/* the RGB matrix effects will overwrite the numpad indicator.
104 * this handy mechanism allows to override the matrix effects.
105 */
106void rgb_matrix_indicators_user(void) {
107 if (layer_state & (1<<NUM)) {
108 set_numpad_colours(1, &rgb_matrix_set_color);
109 }
110}
111#else /* no RGB matrix support */
112
113layer_state_t layer_state_set_user(layer_state_t state) {
114 if (state & (1<<NUM)) {
115 set_numpad_colours(1, &set_led_to);
116 } else {
117 set_numpad_colours(0, &set_led_to);
118 }
119
120 return state;
121}
122#endif
123
124/* vim: set ts=2 sw=2 et: */
diff --git a/keyboards/keyboardio/model01/keymaps/default/readme.md b/keyboards/keyboardio/model01/keymaps/default/readme.md
new file mode 100644
index 000000000..740515a26
--- /dev/null
+++ b/keyboards/keyboardio/model01/keymaps/default/readme.md
@@ -0,0 +1,3 @@
1# The default keymap for Keyboardio's Model01
2
3This implements all of their default keymap, except for mouse warping.
diff --git a/keyboards/keyboardio/model01/keymaps/dshields/config.h b/keyboards/keyboardio/model01/keymaps/dshields/config.h
new file mode 100644
index 000000000..fdb23d46b
--- /dev/null
+++ b/keyboards/keyboardio/model01/keymaps/dshields/config.h
@@ -0,0 +1,4 @@
1#pragma once
2
3#define RGB_DIGITAL_RAIN_DROPS 18
4
diff --git a/keyboards/keyboardio/model01/keymaps/dshields/keymap.c b/keyboards/keyboardio/model01/keymaps/dshields/keymap.c
new file mode 100644
index 000000000..04887124f
--- /dev/null
+++ b/keyboards/keyboardio/model01/keymaps/dshields/keymap.c
@@ -0,0 +1,28 @@
1#include QMK_KEYBOARD_H
2#include "dshields.h"
3
4const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
5[DEF] = LAYOUT(
6 RESET , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______,
7 KC_GRV , KC_Q , KC_W , KC_E , KC_R , KC_T , RGB_TOG, DM_REC1, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_EQL ,
8 KC_PGUP, KC_A , KC_S , KC_D , KC_F , KC_G , KC_TAB , KC_ENT , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
9 KC_PGDN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_ESC , DM_PLY1, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_MINS,
10 OSMLCTL, OSMRCTL,
11 KC_BSPC, KC_SPC ,
12 KC_LGUI, OSMRALT,
13 OSMLSFT, OSMRSFT,
14 OSL_FUN, OSL_FUN
15 ),
16[FUN] = LAYOUT(
17 EEP_RST, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
18 KC_TAB , _______, KC_MS_U, _______, KC_BTN3, _______, RGB_MOD, DM_REC2, _______, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 ,
19 KC_HOME, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, _______, RGB_HUI, DM_RSTP, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______, _______,
20 KC_END , KC_PSCR, KC_INS , _______, KC_BTN2, _______, RGB_HUD, DM_PLY2, _______, _______, _______, _______, KC_BSLS, KC_PIPE,
21 _______, _______,
22 KC_DEL , KC_ENT ,
23 _______, _______,
24 _______, _______,
25 _______, _______
26 )
27};
28
diff --git a/keyboards/keyboardio/model01/keymaps/dshields/readme.md b/keyboards/keyboardio/model01/keymaps/dshields/readme.md
new file mode 100644
index 000000000..ead1c1aad
--- /dev/null
+++ b/keyboards/keyboardio/model01/keymaps/dshields/readme.md
@@ -0,0 +1,10 @@
1
2About
3------
4
5A lightly modded version of the default keymap.
6
7- One-shot modifiers and layers.
8- Dynamic macros
9- No num lock layer
10
diff --git a/keyboards/keyboardio/model01/keymaps/tw1t611/config.h b/keyboards/keyboardio/model01/keymaps/tw1t611/config.h
new file mode 100644
index 000000000..8ab9d8b02
--- /dev/null
+++ b/keyboards/keyboardio/model01/keymaps/tw1t611/config.h
@@ -0,0 +1,19 @@
1/* Copyright 2018 James Laird-Wah
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19/* place overrides here */
diff --git a/keyboards/keyboardio/model01/keymaps/tw1t611/keymap.c b/keyboards/keyboardio/model01/keymaps/tw1t611/keymap.c
new file mode 100644
index 000000000..b4bd53e3f
--- /dev/null
+++ b/keyboards/keyboardio/model01/keymaps/tw1t611/keymap.c
@@ -0,0 +1,50 @@
1#include QMK_KEYBOARD_H
2#include "keymap_german.h"
3
4/* layer constants */
5enum {
6 DEF = 0,
7 MOD,
8};
9
10
11const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12[DEF] = LAYOUT(
13 _______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , DE_SS ,
14 KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , RGB_MOD, KC_MUTE, KC_Y , KC_U , KC_I , KC_O , KC_P , DE_AE ,
15 KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G , DE_PARA, _______, KC_H , KC_J , KC_K , KC_L , DE_SLSH, DE_OE ,
16 DE_PIPE, KC_Z , KC_X , KC_C , KC_V , KC_B , _______, _______, KC_N , KC_M , DE_COMM, DE_DOT , DE_MINS, DE_UE ,
17 KC_LALT, KC_LGUI,
18 KC_SPC , KC_ENT ,
19 KC_LSFT, MO(MOD),
20 KC_BSPC, KC_DEL ,
21 KC_LCTL, KC_RCTL
22 ),
23[MOD] = LAYOUT(
24 KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
25 DE_CIRC, DE_QUOT, DE_DQOT, DE_LCBR, DE_RCBR, DE_GRV , RGB_TOG, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END , DE_EQL , DE_PERC,
26 DE_TILD, DE_EXLM, DE_DLR , DE_LPRN, DE_RPRN, DE_AMPR, _______, _______, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, DE_QST , DE_ASTR,
27 DE_BSLS, DE_HASH, DE_LESS, DE_LBRC, DE_RBRC, DE_MORE, _______, RESET , DE_AT , DE_EURO, DE_SCLN, DE_COLN, DE_UNDS, DE_PLUS,
28 _______, _______,
29 _______, _______,
30 _______, _______,
31 _______, _______,
32 _______, _______
33 )
34};
35
36/* template for new layouts:
37LAYOUT(
38 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
39 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
40 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
41 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
42 _______, _______,
43 _______, _______,
44 _______, _______,
45 _______, _______,
46 _______, _______
47 )
48*/
49
50/* vim: set ts=2 sw=2 et: */
diff --git a/keyboards/keyboardio/model01/keymaps/tw1t611/readme.md b/keyboards/keyboardio/model01/keymaps/tw1t611/readme.md
new file mode 100644
index 000000000..b9d728831
--- /dev/null
+++ b/keyboards/keyboardio/model01/keymaps/tw1t611/readme.md
@@ -0,0 +1,5 @@
1# Keymap for Keyboardio's Model01 by tw1t611
2
3Features:
4- german keymap
5- vim optimized
diff --git a/keyboards/keyboardio/model01/leds.c b/keyboards/keyboardio/model01/leds.c
new file mode 100644
index 000000000..b21c1a5c8
--- /dev/null
+++ b/keyboards/keyboardio/model01/leds.c
@@ -0,0 +1,132 @@
1/* Copyright 2018 James Laird-Wah
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include <quantum.h>
17#include <i2c_master.h>
18#include <led_tables.h>
19#include <rgb_matrix.h>
20#include <string.h>
21#include "model01.h"
22
23#define I2C_TIMEOUT 1000
24
25void set_all_leds_to(uint8_t r, uint8_t g, uint8_t b) {
26 uint8_t buf[] = {
27 TWI_CMD_LED_SET_ALL_TO,
28 b, g, r
29 };
30 i2c_transmit(I2C_ADDR(LEFT), buf, sizeof(buf), I2C_TIMEOUT);
31 i2c_transmit(I2C_ADDR(RIGHT), buf, sizeof(buf), I2C_TIMEOUT);
32 _delay_us(10);
33}
34
35void set_led_to(int led, uint8_t r, uint8_t g, uint8_t b) {
36 uint8_t buf[] = {
37 TWI_CMD_LED_SET_ONE_TO,
38 led & 0x1f,
39 b, g, r
40 };
41 int hand = (led >= 32) ? RIGHT : LEFT;
42 i2c_transmit(I2C_ADDR(hand), buf, sizeof(buf), I2C_TIMEOUT);
43 _delay_us(10);
44}
45
46#ifdef RGB_MATRIX_ENABLE
47
48__attribute__ ((weak))
49led_config_t g_led_config = { {
50 { 27, 26, 20, 19, 12, 11, 4, 3 },
51 { 28, 25, 21, 18, 13, 10, 5, 2 },
52 { 29, 24, 22, 17, 14, 9, 6, 1 },
53 { 30, 31, 23, 16, 15, 8, 7, 0 },
54 { 60, 59, 52, 51, 44, 43, 37, 36 },
55 { 61, 58, 53, 50, 45, 42, 38, 35 },
56 { 62, 57, 54, 49, 46, 41, 39, 34 },
57 { 63, 56, 55, 48, 47, 40, 32, 33 }
58}, {
59 { 3, 35 }, { 0, 26 }, { 0, 17 }, { 0, 6 }, { 14, 5 }, { 15, 16 }, { 16, 25 }, { 17, 34 },
60 { 31, 29 }, { 31, 19 }, { 30, 11 }, { 30, 1 }, { 45, 0 }, { 45, 8 }, { 46, 17 }, { 46, 27 },
61 { 60, 27 }, { 60, 18 }, { 60, 9 }, { 60, 0 }, { 74, 2 }, { 74, 11 }, { 75, 20 }, { 74, 28 },
62 { 89, 30 }, { 89, 19 }, { 89, 7 }, { 70, 38 }, { 82, 41 }, { 93, 45 }, { 104, 50 }, { 74, 64 },
63 { 149, 64 }, { 119, 50 }, { 130, 45 }, { 141, 41 }, { 153, 38 }, { 134, 7 }, { 134, 19 }, { 134, 30 },
64 { 149, 28 }, { 148, 20 }, { 149, 11 }, { 149, 2 }, { 163, 0 }, { 163, 9 }, { 163, 18 }, { 163, 27 },
65 { 177, 27 }, { 177, 17 }, { 178, 8 }, { 178, 0 }, { 193, 1 }, { 193, 11 }, { 192, 19 }, { 192, 29 },
66 { 206, 34 }, { 207, 25 }, { 208, 16 }, { 209, 5 }, { 224, 6 }, { 223, 17 }, { 223, 26 }, { 220, 35 }
67}, {
68 4, 4, 4, 4, 4, 4, 4, 4,
69 4, 4, 4, 4, 4, 4, 4, 4,
70 4, 4, 4, 4, 4, 4, 4, 4,
71 4, 4, 4, 1, 1, 1, 1, 1,
72 1, 1, 1, 1, 1, 4, 4, 4,
73 4, 4, 4, 4, 4, 4, 4, 4,
74 4, 4, 4, 4, 4, 4, 4, 4,
75 4, 4, 4, 4, 4, 4, 4, 4
76} };
77
78
79static struct {
80 uint8_t b;
81 uint8_t g;
82 uint8_t r;
83} __attribute__((packed)) led_state[64];
84
85static void set_color(int index, uint8_t r, uint8_t g, uint8_t b) {
86 led_state[index].r = r;
87 led_state[index].g = g;
88 led_state[index].b = b;
89}
90
91static void set_color_all(uint8_t r, uint8_t g, uint8_t b) {
92 for (int i=0; i<DRIVER_LED_TOTAL; i++)
93 set_color(i, r, g, b);
94}
95
96static void init(void) {
97 // Enable high current pathway to LEDs - this does violate the USB spec though! (1.6 amps...)
98 DDRE |= _BV(6);
99 PORTE &= ~_BV(6);
100
101 // Overcurrent check input
102 DDRB &= ~_BV(4);
103 PORTB &= ~_BV(4);
104}
105
106static void flush(void) {
107 uint8_t *bank_data = (uint8_t*)&led_state[0];
108 uint8_t command[1 + 8*3];
109 for (int hand=0; hand<2; hand++) {
110 int addr = I2C_ADDR(hand);
111
112 for (int bank=0; bank<4; bank++) {
113 command[0] = TWI_CMD_LED_BASE + bank;
114 memcpy(&command[1], bank_data, 8*3);
115 i2c_transmit(addr, command, sizeof(command), I2C_TIMEOUT);
116 _delay_us(100);
117
118 bank_data += 8*3;
119 }
120 }
121}
122
123const rgb_matrix_driver_t rgb_matrix_driver = {
124 .init = init,
125 .flush = flush,
126 .set_color = set_color,
127 .set_color_all = set_color_all
128};
129
130#endif
131
132/* vim: set ts=2 sw=2 et: */
diff --git a/keyboards/keyboardio/model01/leds.h b/keyboards/keyboardio/model01/leds.h
new file mode 100644
index 000000000..405bdf328
--- /dev/null
+++ b/keyboards/keyboardio/model01/leds.h
@@ -0,0 +1,22 @@
1/* Copyright 2018 James Laird-Wah
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include <quantum.h>
19#include <rgb_matrix.h>
20
21void set_all_leds_to(uint8_t r, uint8_t g, uint8_t b);
22void set_led_to(int led, uint8_t r, uint8_t g, uint8_t b);
diff --git a/keyboards/keyboardio/model01/matrix.c b/keyboards/keyboardio/model01/matrix.c
new file mode 100644
index 000000000..f1f9024c7
--- /dev/null
+++ b/keyboards/keyboardio/model01/matrix.c
@@ -0,0 +1,94 @@
1/* Copyright 2018 James Laird-Wah
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include <quantum.h>
17#include <i2c_master.h>
18#include <string.h>
19#include "model01.h"
20
21/* If no key events have occurred, the scanners will time out on reads.
22 * So we don't want to be too permissive here. */
23#define I2C_TIMEOUT 10
24
25static matrix_row_t rows[MATRIX_ROWS];
26#define ROWS_PER_HAND (MATRIX_ROWS / 2)
27
28inline
29uint8_t matrix_rows(void) {
30 return MATRIX_ROWS;
31}
32
33inline
34uint8_t matrix_cols(void) {
35 return MATRIX_COLS;
36}
37
38static int i2c_read_hand(int hand) {
39 uint8_t buf[5];
40 i2c_status_t ret = i2c_receive(I2C_ADDR(hand), buf, sizeof(buf), I2C_TIMEOUT);
41 if (ret != I2C_STATUS_SUCCESS)
42 return 1;
43
44 if (buf[0] != TWI_REPLY_KEYDATA)
45 return 2;
46
47 int start_row = hand ? ROWS_PER_HAND : 0;
48 uint8_t *out = &rows[start_row];
49 memcpy(out, &buf[1], 4);
50 return 0;
51}
52
53static int i2c_set_keyscan_interval(int hand, int delay) {
54 uint8_t buf[] = {TWI_CMD_KEYSCAN_INTERVAL, delay};
55 i2c_status_t ret = i2c_transmit(I2C_ADDR(hand), buf, sizeof(buf), I2C_TIMEOUT);
56 return ret;
57}
58
59void matrix_init(void) {
60 /* Ensure scanner power is on - else right hand will not work */
61 DDRC |= _BV(7);
62 PORTC |= _BV(7);
63
64 i2c_init();
65 i2c_set_keyscan_interval(LEFT, 2);
66 i2c_set_keyscan_interval(RIGHT, 2);
67 memset(rows, 0, sizeof(rows));
68
69 matrix_init_quantum();
70}
71
72uint8_t matrix_scan(void) {
73 uint8_t ret = 0;
74 ret |= i2c_read_hand(LEFT);
75 ret |= i2c_read_hand(RIGHT);
76 matrix_scan_quantum();
77 return ret;
78}
79
80inline
81matrix_row_t matrix_get_row(uint8_t row) {
82 return rows[row];
83}
84
85void matrix_print(void) {
86 print("\nr/c 0123456789ABCDEF\n");
87 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
88 phex(row); print(": ");
89 pbin_reverse16(matrix_get_row(row));
90 print("\n");
91 }
92}
93
94/* vim: set ts=2 sw=2 et: */
diff --git a/keyboards/keyboardio/model01/model01.c b/keyboards/keyboardio/model01/model01.c
new file mode 100644
index 000000000..29615ca86
--- /dev/null
+++ b/keyboards/keyboardio/model01/model01.c
@@ -0,0 +1,38 @@
1/* Copyright 2018 James Laird-Wah
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include <quantum.h>
17#include <i2c_master.h>
18#include <string.h>
19#include "model01.h"
20
21void matrix_init_kb(void) {
22 /* the bootloader can leave LEDs on, so */
23 set_all_leds_to(0, 0, 0);
24 matrix_init_user();
25}
26
27void matrix_scan_kb(void) {
28 matrix_scan_user();
29}
30
31__attribute__ ((weak))
32void matrix_scan_user(void) {
33}
34
35__attribute__ ((weak))
36void matrix_init_user(void) {
37}
38
diff --git a/keyboards/keyboardio/model01/model01.h b/keyboards/keyboardio/model01/model01.h
new file mode 100644
index 000000000..a83e33cd8
--- /dev/null
+++ b/keyboards/keyboardio/model01/model01.h
@@ -0,0 +1,50 @@
1/* Copyright 2018 James Laird-Wah
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include <quantum.h>
19
20#define LAYOUT( \
21 L07, L06, L05, L04, L03, L02, R05, R04, R03, R02, R01, R00, \
22 L17, L16, L15, L14, L13, L12, L01, R06, R15, R14, R13, R12, R11, R10, \
23 L27, L26, L25, L24, L23, L22, L11, R16, R25, R24, R23, R22, R21, R20, \
24 L37, L36, L35, L34, L33, L32, L21, R26, R35, R34, R33, R32, R31, R30, \
25 L00, R07, \
26 L10, R17, \
27 L20, R27, \
28 L30, R37, \
29 L31, R36 \
30 ) { \
31 {L00, L01, L02, L03, L04, L05, L06, L07}, \
32 {L10, L11, L12, L13, L14, L15, L16, L17}, \
33 {L20, L21, L22, L23, L24, L25, L26, L27}, \
34 {L30, L31, L32, L33, L34, L35, L36, L37}, \
35 {R00, R01, R02, R03, R04, R05, R06, R07}, \
36 {R10, R11, R12, R13, R14, R15, R16, R17}, \
37 {R20, R21, R22, R23, R24, R25, R26, R27}, \
38 {R30, R31, R32, R33, R34, R35, R36, R37} \
39 }
40
41#include "wire-protocol-constants.h"
42#define I2C_ADDR_LEFT (0x58 << 1)
43#define I2C_ADDR_RIGHT (I2C_ADDR_LEFT + 6)
44#define I2C_ADDR(hand) ((hand) ? I2C_ADDR_RIGHT : I2C_ADDR_LEFT)
45#define LEFT 0
46#define RIGHT 1
47
48#include "leds.h"
49
50/* vim: set ts=2 sw=2 et: */
diff --git a/keyboards/keyboardio/model01/readme.md b/keyboards/keyboardio/model01/readme.md
new file mode 100644
index 000000000..5f55a8812
--- /dev/null
+++ b/keyboards/keyboardio/model01/readme.md
@@ -0,0 +1,37 @@
1# Keyboardio Model 01
2
3A split keyboard.
4
5* Keyboard Maintainer: QMK Community
6* Hardware Supported: Keyboardio Model 01
7* Hardware Availability: [Keyboardio](https://shop.keyboard.io)
8
9Make example for this keyboard (after setting up your build environment):
10
11 make keyboardio/model01:default
12
13See 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.
14Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
15
16## Programming the Keyboard
17
18To program the keyboard, if you have avrdude installed:
19
20 make keyboardio/model01:default:flash
21
22When prompted to reset your keyboard, press the prog key at upper left. If the
23keyboard does not reset, you can hold the prog key while plugging it into your
24computer. The prog key will light up red in programming mode.
25
26## Features
27
28This implements the standard keymap, including mousekeys.
29
30It doesn't do cursor warping - QMK does not support absolute mouse positioning.
31
32LED support is limited. Gamma compensation and the high speed batch update
33functions supported by the hardware are not implemented. The high current power
34switch is also not implemented, so if you try and turn all the LEDs on at full
35brightness, something may conk out.
36
37Hotplugging the two halves works but is not extensively tested.
diff --git a/keyboards/keyboardio/model01/rules.mk b/keyboards/keyboardio/model01/rules.mk
new file mode 100644
index 000000000..29c028ac8
--- /dev/null
+++ b/keyboards/keyboardio/model01/rules.mk
@@ -0,0 +1,35 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5# Teensy halfkay
6# Pro Micro caterina
7# Atmel DFU atmel-dfu
8# LUFA DFU lufa-dfu
9# QMK DFU qmk-dfu
10# ATmega32A bootloadHID
11# ATmega328P USBasp
12BOOTLOADER = caterina
13
14# Build Options
15# change yes to no to disable
16#
17BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
18MOUSEKEY_ENABLE = yes # Mouse keys
19EXTRAKEY_ENABLE = yes # Audio control and System control
20CONSOLE_ENABLE = yes # Console for debug
21COMMAND_ENABLE = no # Commands for debug and configuration
22# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
23SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
24# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
25NKRO_ENABLE = no # USB Nkey Rollover
26MIDI_ENABLE = no # MIDI support
27UNICODE_ENABLE = no # Unicode
28
29CUSTOM_MATRIX = yes
30QUANTUM_LIB_SRC += i2c_master.c
31SRC += leds.c \
32 matrix.c
33
34# You can set RGB_MATRIX_ENABLE = no in your rules.mk to disable this and save the Flash
35RGB_MATRIX_ENABLE = custom # Enable RGB matrix effects.
diff --git a/keyboards/keyboardio/model01/wire-protocol-constants.h b/keyboards/keyboardio/model01/wire-protocol-constants.h
new file mode 100644
index 000000000..90a528582
--- /dev/null
+++ b/keyboards/keyboardio/model01/wire-protocol-constants.h
@@ -0,0 +1,53 @@
1/*
2 * This file is taken from the KeyboardioScanner module:
3 * https://github.com/keyboardio/KeyboardioScanner/blob/master/wire-protocol-constants.h
4 *
5 * Copyright (C) 2015-2018 Keyboard.io, Inc
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in all
15 * copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 * SOFTWARE.
24 */
25#pragma once
26
27#define TWI_CMD_NONE 0x00
28#define TWI_CMD_VERSION 0x01
29#define TWI_CMD_KEYSCAN_INTERVAL 0x02
30#define TWI_CMD_LED_SET_ALL_TO 0x03
31#define TWI_CMD_LED_SET_ONE_TO 0x04
32#define TWI_CMD_COLS_USE_PULLUPS 0x05
33#define TWI_CMD_LED_SPI_FREQUENCY 0x06
34
35#define LED_SPI_FREQUENCY_4MHZ 0x07
36#define LED_SPI_FREQUENCY_2MHZ 0x06
37#define LED_SPI_FREQUENCY_1MHZ 0x05
38#define LED_SPI_FREQUENCY_512KHZ 0x04
39#define LED_SPI_FREQUENCY_256KHZ 0x03
40#define LED_SPI_FREQUENCY_128KHZ 0x02
41#define LED_SPI_FREQUENCY_64KHZ 0x01
42#define LED_SPI_OFF 0x00
43
44
45// 512KHZ seems to be the sweet spot in early testing
46// so make it the default
47#define LED_SPI_FREQUENCY_DEFAULT LED_SPI_FREQUENCY_512KHZ
48
49
50#define TWI_CMD_LED_BASE 0x80
51
52#define TWI_REPLY_NONE 0x00
53#define TWI_REPLY_KEYDATA 0x01