1
0
Fork 0

2020 May 30 Breaking Changes Update (#9215)

* Branch point for 2020 May 30 Breaking Change

* Migrate `ACTION_LAYER_TOGGLE` to `TG()` (#8954)

* Migrate `ACTION_MODS_ONESHOT` to `OSM()` (#8957)

* Migrate `ACTION_DEFAULT_LAYER_SET` to `DF()` (#8958)

* Migrate `ACTION_LAYER_MODS` to `LM()` (#8959)

* Migrate `ACTION_MODS_TAP_KEY` to `MT()` (#8968)

* Convert V-USB usbdrv to a submodule (#8321)

* Unify Tap Hold functions and documentation (#8348)

* Changing board names to prevent confusion (#8412)

* Move the Keyboardio Model01 to a keyboardio/ subdir (#8499)

* Move spaceman keyboards (#8830)

* Migrate miscellaneous `fn_actions` entries (#8977)

* Migrate `ACTION_MODS_KEY` to chained mod keycodes (#8979)

* Organizing my keyboards (plaid, tartan, ergoinu) (#8537)

* Refactor Lily58 to use split_common (#6260)

* Refactor zinc to use split_common (#7114)

* Add a message if bin/qmk doesn't work (#9000)

* Fix conflicting types for 'tfp_printf' (#8269)

* Fixed RGB_DISABLE_AFTER_TIMEOUT to be seconds based & small internals cleanup (#6480)

* Refactor and updates to TKC1800 code (#8472)

* Switch to qmk forks for everything (#9019)

* audio refactor: replace deprecated PLAY_NOTE_ARRAY (#8484)

* Audio enable corrections (2/3) (#8903)

* Split HHKB to ANSI and JP layouts and Add VIA support for each (#8582)

* Audio enable corrections (Part 4) (#8974)

* Fix typo from PR7114 (#9171)

* Augment future branch Changelogs (#8978)

* Revert "Branch point for 2020 May 30 Breaking Change"
This commit is contained in:
James Young 2020-05-30 13:14:59 -07:00 committed by GitHub
parent 7b8a013826
commit fced377ac0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
460 changed files with 2624 additions and 12709 deletions

View file

@ -0,0 +1,38 @@
/*
Copyright 2018 James Laird-Wah
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <config_common.h>
/* USB Device descriptor parameter */
#define VENDOR_ID 0x1209
#define PRODUCT_ID 0x2301
#define DEVICE_VER 0x0001
#define MANUFACTURER Keyboardio
#define PRODUCT Model 01
#define DESCRIPTION (QMK)
/* key matrix size; rows are doubled for split */
#define MATRIX_ROWS 8
#define MATRIX_COLS 8
/* The scanners already debounce for us */
#define DEBOUNCE 0
/* RGB matrix constants */
#define DRIVER_LED_TOTAL 64

View file

@ -0,0 +1,87 @@
{
"keyboard_name": "model01",
"keyboard_folder": "keyboardio/model01",
"url": "https://keyboard.io",
"maintainer": "qmk",
"width": 18.5,
"height": 7.5,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"PROG", "x":0, "y":0.4, "h":1.3},
{"label":"1", "x":1, "y":0.2, "h":1.5},
{"label":"2", "x":2, "y":0.1, "h":1.1},
{"label":"3", "x":3, "y":0},
{"label":"4", "x":4, "y":0.1},
{"label":"5", "x":5, "y":0.3},
{"label":"6", "x":12.5, "y":0.3},
{"label":"7", "x":13.5, "y":0.1},
{"label":"8", "x":14.5, "y":0},
{"label":"9", "x":15.5, "y":0.1, "h":1.1},
{"label":"0", "x":16.5, "y":0.2, "h":1.5},
{"label":"NUM", "x":17.5, "y":0.4, "h":1.3},
{"label":"GRAVE", "x":0, "y":1.7},
{"label":"Q", "x":1, "y":1.7},
{"label":"W", "x":2, "y":1.2},
{"label":"E", "x":3, "y":1},
{"label":"R", "x":4, "y":1.1},
{"label":"T", "x":5, "y":1.3},
{"label":"LED", "x":6, "y":0.6, "h":1.5},
{"label":"ANY", "x":11.5, "y":0.6, "h":1.5},
{"label":"Y", "x":12.5, "y":1.3},
{"label":"U", "x":13.5, "y":1.1},
{"label":"I", "x":14.5, "y":1},
{"label":"O", "x":15.5, "y":1.2},
{"label":"P", "x":16.5, "y":1.7},
{"label":"EQUAL", "x":17.5, "y":1.7},
{"label":"PAGEUP", "x":0, "y":2.7},
{"label":"A", "x":1, "y":2.7},
{"label":"S", "x":2, "y":2.2},
{"label":"D", "x":3, "y":2},
{"label":"F", "x":4, "y":2.1},
{"label":"G", "x":5, "y":2.3},
{"label":"TAB", "x":6, "y":2.1, "h":1.3},
{"label":"ENTER", "x":11.5, "y":2.1, "h":1.3},
{"label":"H", "x":12.5, "y":2.3},
{"label":"J", "x":13.5, "y":2.1},
{"label":"K", "x":14.5, "y":2},
{"label":"L", "x":15.5, "y":2.2},
{"label":"SEMICOLON", "x":16.5, "y":2.7},
{"label":"QUOTE", "x":17.5, "y":2.7},
{"label":"PAGEDOWN", "x":0, "y":3.7, "h":1.2},
{"label":"Z", "x":1, "y":3.7},
{"label":"X", "x":2, "y":3.2, "h":1.15},
{"label":"C", "x":3, "y":3},
{"label":"V", "x":4, "y":3.1},
{"label":"B", "x":5, "y":3.3},
{"label":"ESC", "x":6, "y":3.4, "h":1.1},
{"label":"BUTTERFLY", "x":11.5, "y":3.4, "h":1.1},
{"label":"N", "x":12.5, "y":3.3},
{"label":"M", "x":13.5, "y":3.1},
{"label":"COMMA", "x":14.5, "y":3},
{"label":"DOT", "x":15.5, "y":3.2, "h":1.15},
{"label":"SLASH", "x":16.5, "y":3.7},
{"label":"MINS", "x":17.5, "y":3.7, "h":1.2},
{"label":"LCTL", "x":4.75, "y":4.3},
{"label":"RCTL", "x":12.75, "y":4.3},
{"label":"BACKSPACE", "x":5.75, "y":4.5},
{"label":"SPACE", "x":11.75, "y":4.5},
{"label":"LGUI", "x":6.75, "y":4.7},
{"label":"RALT", "x":10.75, "y":4.7},
{"label":"LSHIFT", "x":7.75, "y":5.1},
{"label":"RSHIFT", "x":9.75, "y":5.1},
{"label":"FN", "x":6.25, "y":6.1, "h":1.4},
{"label":"FN", "x":11.25, "y":6.1, "h":1.4}
]
}
}
}

View file

@ -0,0 +1,19 @@
/* Copyright 2018 James Laird-Wah
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
/* place overrides here */

View file

@ -0,0 +1,124 @@
/* Copyright 2018 James Laird-Wah
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
/* layer constants */
enum {
DEF = 0,
NUM,
FUN,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DEF] = LAYOUT(
RESET , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , TG(NUM),
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 ,
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,
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,
KC_LCTL, KC_RCTL,
KC_BSPC, KC_SPC ,
KC_LGUI, KC_RALT,
KC_LSFT, KC_RSFT,
MO(FUN), MO(FUN)
),
[NUM] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, KC_P7 , KC_P8 , KC_P9 , KC_PMNS, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P4 , KC_P5 , KC_P6 , KC_PPLS, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1 , KC_P2 , KC_P3 , KC_PEQL, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0 , KC_PDOT, KC_PAST, KC_PSLS, KC_PENT,
_______, _______,
_______, _______,
_______, _______,
_______, _______,
_______, _______
),
[FUN] = LAYOUT(
_______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
KC_TAB , _______, KC_MS_U, _______, KC_BTN3, _______, RGB_TOG, KC_MPRV, KC_MNXT, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 ,
KC_HOME, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, _______, _______, KC_MPLY, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______, _______,
KC_END , KC_PSCR, KC_INS , _______, KC_BTN2, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_BSLS, KC_PIPE,
_______, _______,
KC_DEL , KC_ENT ,
_______, _______,
_______, _______,
_______, _______
)
};
/* template for new layouts:
LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______,
_______, _______,
_______, _______,
_______, _______,
_______, _______
)
*/
static void set_numpad_colours(int on, void (*write)(int, uint8_t, uint8_t, uint8_t)) {
if (!on) {
for (int i=44; i<=60; i++)
write(i, 0, 0, 0);
write(63, 0, 0, 0);
return;
}
/* main number keys */
for (int i=44; i<=47; i++)
write(i, 255, 0, 0);
for (int i=49; i<=54; i++)
write(i, 255, 0, 0);
/* accessory keys */
write(48, 128, 128, 0);
for (int i=55; i<=59; i++)
write(i, 128, 128, 0);
// enter
write(63, 0, 128, 0);
// num key
write(60, 128, 0, 128);
}
#ifdef RGB_MATRIX_ENABLE
/* the RGB matrix effects will overwrite the numpad indicator.
* this handy mechanism allows to override the matrix effects.
*/
void rgb_matrix_indicators_user(void) {
if (layer_state & (1<<NUM)) {
set_numpad_colours(1, &rgb_matrix_set_color);
}
}
#else /* no RGB matrix support */
layer_state_t layer_state_set_user(layer_state_t state) {
if (state & (1<<NUM)) {
set_numpad_colours(1, &set_led_to);
} else {
set_numpad_colours(0, &set_led_to);
}
return state;
}
#endif
/* vim: set ts=2 sw=2 et: */

View file

@ -0,0 +1,3 @@
# The default keymap for Keyboardio's Model01
This implements all of their default keymap, except for mouse warping.

View file

@ -0,0 +1,4 @@
#pragma once
#define RGB_DIGITAL_RAIN_DROPS 18

View file

@ -0,0 +1,28 @@
#include QMK_KEYBOARD_H
#include "dshields.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DEF] = LAYOUT(
RESET , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______,
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 ,
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,
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,
OSMLCTL, OSMRCTL,
KC_BSPC, KC_SPC ,
KC_LGUI, OSMRALT,
OSMLSFT, OSMRSFT,
OSL_FUN, OSL_FUN
),
[FUN] = LAYOUT(
EEP_RST, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
KC_TAB , _______, KC_MS_U, _______, KC_BTN3, _______, RGB_MOD, DM_REC2, _______, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 ,
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, _______, _______,
KC_END , KC_PSCR, KC_INS , _______, KC_BTN2, _______, RGB_HUD, DM_PLY2, _______, _______, _______, _______, KC_BSLS, KC_PIPE,
_______, _______,
KC_DEL , KC_ENT ,
_______, _______,
_______, _______,
_______, _______
)
};

View file

@ -0,0 +1,10 @@
About
------
A lightly modded version of the default keymap.
- One-shot modifiers and layers.
- Dynamic macros
- No num lock layer

View file

@ -0,0 +1,19 @@
/* Copyright 2018 James Laird-Wah
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
/* place overrides here */

View file

@ -0,0 +1,50 @@
#include QMK_KEYBOARD_H
#include "keymap_german.h"
/* layer constants */
enum {
DEF = 0,
MOD,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DEF] = LAYOUT(
_______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , DE_SS ,
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 ,
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 ,
DE_PIPE, KC_Z , KC_X , KC_C , KC_V , KC_B , _______, _______, KC_N , KC_M , DE_COMM, DE_DOT , DE_MINS, DE_UE ,
KC_LALT, KC_LGUI,
KC_SPC , KC_ENT ,
KC_LSFT, MO(MOD),
KC_BSPC, KC_DEL ,
KC_LCTL, KC_RCTL
),
[MOD] = LAYOUT(
KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
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,
DE_TILD, DE_EXLM, DE_DLR , DE_LPRN, DE_RPRN, DE_AMPR, _______, _______, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, DE_QST , DE_ASTR,
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,
_______, _______,
_______, _______,
_______, _______,
_______, _______,
_______, _______
)
};
/* template for new layouts:
LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______,
_______, _______,
_______, _______,
_______, _______,
_______, _______
)
*/
/* vim: set ts=2 sw=2 et: */

View file

@ -0,0 +1,5 @@
# Keymap for Keyboardio's Model01 by tw1t611
Features:
- german keymap
- vim optimized

View file

@ -0,0 +1,132 @@
/* Copyright 2018 James Laird-Wah
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <quantum.h>
#include <i2c_master.h>
#include <led_tables.h>
#include <rgb_matrix.h>
#include <string.h>
#include "model01.h"
#define I2C_TIMEOUT 1000
void set_all_leds_to(uint8_t r, uint8_t g, uint8_t b) {
uint8_t buf[] = {
TWI_CMD_LED_SET_ALL_TO,
b, g, r
};
i2c_transmit(I2C_ADDR(LEFT), buf, sizeof(buf), I2C_TIMEOUT);
i2c_transmit(I2C_ADDR(RIGHT), buf, sizeof(buf), I2C_TIMEOUT);
_delay_us(10);
}
void set_led_to(int led, uint8_t r, uint8_t g, uint8_t b) {
uint8_t buf[] = {
TWI_CMD_LED_SET_ONE_TO,
led & 0x1f,
b, g, r
};
int hand = (led >= 32) ? RIGHT : LEFT;
i2c_transmit(I2C_ADDR(hand), buf, sizeof(buf), I2C_TIMEOUT);
_delay_us(10);
}
#ifdef RGB_MATRIX_ENABLE
__attribute__ ((weak))
led_config_t g_led_config = { {
{ 27, 26, 20, 19, 12, 11, 4, 3 },
{ 28, 25, 21, 18, 13, 10, 5, 2 },
{ 29, 24, 22, 17, 14, 9, 6, 1 },
{ 30, 31, 23, 16, 15, 8, 7, 0 },
{ 60, 59, 52, 51, 44, 43, 37, 36 },
{ 61, 58, 53, 50, 45, 42, 38, 35 },
{ 62, 57, 54, 49, 46, 41, 39, 34 },
{ 63, 56, 55, 48, 47, 40, 32, 33 }
}, {
{ 3, 35 }, { 0, 26 }, { 0, 17 }, { 0, 6 }, { 14, 5 }, { 15, 16 }, { 16, 25 }, { 17, 34 },
{ 31, 29 }, { 31, 19 }, { 30, 11 }, { 30, 1 }, { 45, 0 }, { 45, 8 }, { 46, 17 }, { 46, 27 },
{ 60, 27 }, { 60, 18 }, { 60, 9 }, { 60, 0 }, { 74, 2 }, { 74, 11 }, { 75, 20 }, { 74, 28 },
{ 89, 30 }, { 89, 19 }, { 89, 7 }, { 70, 38 }, { 82, 41 }, { 93, 45 }, { 104, 50 }, { 74, 64 },
{ 149, 64 }, { 119, 50 }, { 130, 45 }, { 141, 41 }, { 153, 38 }, { 134, 7 }, { 134, 19 }, { 134, 30 },
{ 149, 28 }, { 148, 20 }, { 149, 11 }, { 149, 2 }, { 163, 0 }, { 163, 9 }, { 163, 18 }, { 163, 27 },
{ 177, 27 }, { 177, 17 }, { 178, 8 }, { 178, 0 }, { 193, 1 }, { 193, 11 }, { 192, 19 }, { 192, 29 },
{ 206, 34 }, { 207, 25 }, { 208, 16 }, { 209, 5 }, { 224, 6 }, { 223, 17 }, { 223, 26 }, { 220, 35 }
}, {
4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4
} };
static struct {
uint8_t b;
uint8_t g;
uint8_t r;
} __attribute__((packed)) led_state[64];
static void set_color(int index, uint8_t r, uint8_t g, uint8_t b) {
led_state[index].r = r;
led_state[index].g = g;
led_state[index].b = b;
}
static void set_color_all(uint8_t r, uint8_t g, uint8_t b) {
for (int i=0; i<DRIVER_LED_TOTAL; i++)
set_color(i, r, g, b);
}
static void init(void) {
// Enable high current pathway to LEDs - this does violate the USB spec though! (1.6 amps...)
DDRE |= _BV(6);
PORTE &= ~_BV(6);
// Overcurrent check input
DDRB &= ~_BV(4);
PORTB &= ~_BV(4);
}
static void flush(void) {
uint8_t *bank_data = (uint8_t*)&led_state[0];
uint8_t command[1 + 8*3];
for (int hand=0; hand<2; hand++) {
int addr = I2C_ADDR(hand);
for (int bank=0; bank<4; bank++) {
command[0] = TWI_CMD_LED_BASE + bank;
memcpy(&command[1], bank_data, 8*3);
i2c_transmit(addr, command, sizeof(command), I2C_TIMEOUT);
_delay_us(100);
bank_data += 8*3;
}
}
}
const rgb_matrix_driver_t rgb_matrix_driver = {
.init = init,
.flush = flush,
.set_color = set_color,
.set_color_all = set_color_all
};
#endif
/* vim: set ts=2 sw=2 et: */

View file

@ -0,0 +1,22 @@
/* Copyright 2018 James Laird-Wah
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <quantum.h>
#include <rgb_matrix.h>
void set_all_leds_to(uint8_t r, uint8_t g, uint8_t b);
void set_led_to(int led, uint8_t r, uint8_t g, uint8_t b);

View file

@ -0,0 +1,94 @@
/* Copyright 2018 James Laird-Wah
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <quantum.h>
#include <i2c_master.h>
#include <string.h>
#include "model01.h"
/* If no key events have occurred, the scanners will time out on reads.
* So we don't want to be too permissive here. */
#define I2C_TIMEOUT 10
static matrix_row_t rows[MATRIX_ROWS];
#define ROWS_PER_HAND (MATRIX_ROWS / 2)
inline
uint8_t matrix_rows(void) {
return MATRIX_ROWS;
}
inline
uint8_t matrix_cols(void) {
return MATRIX_COLS;
}
static int i2c_read_hand(int hand) {
uint8_t buf[5];
i2c_status_t ret = i2c_receive(I2C_ADDR(hand), buf, sizeof(buf), I2C_TIMEOUT);
if (ret != I2C_STATUS_SUCCESS)
return 1;
if (buf[0] != TWI_REPLY_KEYDATA)
return 2;
int start_row = hand ? ROWS_PER_HAND : 0;
uint8_t *out = &rows[start_row];
memcpy(out, &buf[1], 4);
return 0;
}
static int i2c_set_keyscan_interval(int hand, int delay) {
uint8_t buf[] = {TWI_CMD_KEYSCAN_INTERVAL, delay};
i2c_status_t ret = i2c_transmit(I2C_ADDR(hand), buf, sizeof(buf), I2C_TIMEOUT);
return ret;
}
void matrix_init(void) {
/* Ensure scanner power is on - else right hand will not work */
DDRC |= _BV(7);
PORTC |= _BV(7);
i2c_init();
i2c_set_keyscan_interval(LEFT, 2);
i2c_set_keyscan_interval(RIGHT, 2);
memset(rows, 0, sizeof(rows));
matrix_init_quantum();
}
uint8_t matrix_scan(void) {
uint8_t ret = 0;
ret |= i2c_read_hand(LEFT);
ret |= i2c_read_hand(RIGHT);
matrix_scan_quantum();
return ret;
}
inline
matrix_row_t matrix_get_row(uint8_t row) {
return rows[row];
}
void matrix_print(void) {
print("\nr/c 0123456789ABCDEF\n");
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
phex(row); print(": ");
pbin_reverse16(matrix_get_row(row));
print("\n");
}
}
/* vim: set ts=2 sw=2 et: */

View file

@ -0,0 +1,38 @@
/* Copyright 2018 James Laird-Wah
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <quantum.h>
#include <i2c_master.h>
#include <string.h>
#include "model01.h"
void matrix_init_kb(void) {
/* the bootloader can leave LEDs on, so */
set_all_leds_to(0, 0, 0);
matrix_init_user();
}
void matrix_scan_kb(void) {
matrix_scan_user();
}
__attribute__ ((weak))
void matrix_scan_user(void) {
}
__attribute__ ((weak))
void matrix_init_user(void) {
}

View file

@ -0,0 +1,50 @@
/* Copyright 2018 James Laird-Wah
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <quantum.h>
#define LAYOUT( \
L07, L06, L05, L04, L03, L02, R05, R04, R03, R02, R01, R00, \
L17, L16, L15, L14, L13, L12, L01, R06, R15, R14, R13, R12, R11, R10, \
L27, L26, L25, L24, L23, L22, L11, R16, R25, R24, R23, R22, R21, R20, \
L37, L36, L35, L34, L33, L32, L21, R26, R35, R34, R33, R32, R31, R30, \
L00, R07, \
L10, R17, \
L20, R27, \
L30, R37, \
L31, R36 \
) { \
{L00, L01, L02, L03, L04, L05, L06, L07}, \
{L10, L11, L12, L13, L14, L15, L16, L17}, \
{L20, L21, L22, L23, L24, L25, L26, L27}, \
{L30, L31, L32, L33, L34, L35, L36, L37}, \
{R00, R01, R02, R03, R04, R05, R06, R07}, \
{R10, R11, R12, R13, R14, R15, R16, R17}, \
{R20, R21, R22, R23, R24, R25, R26, R27}, \
{R30, R31, R32, R33, R34, R35, R36, R37} \
}
#include "wire-protocol-constants.h"
#define I2C_ADDR_LEFT (0x58 << 1)
#define I2C_ADDR_RIGHT (I2C_ADDR_LEFT + 6)
#define I2C_ADDR(hand) ((hand) ? I2C_ADDR_RIGHT : I2C_ADDR_LEFT)
#define LEFT 0
#define RIGHT 1
#include "leds.h"
/* vim: set ts=2 sw=2 et: */

View file

@ -0,0 +1,37 @@
# Keyboardio Model 01
A split keyboard.
* Keyboard Maintainer: QMK Community
* Hardware Supported: Keyboardio Model 01
* Hardware Availability: [Keyboardio](https://shop.keyboard.io)
Make example for this keyboard (after setting up your build environment):
make keyboardio/model01:default
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).
## Programming the Keyboard
To program the keyboard, if you have avrdude installed:
make keyboardio/model01:default:flash
When prompted to reset your keyboard, press the prog key at upper left. If the
keyboard does not reset, you can hold the prog key while plugging it into your
computer. The prog key will light up red in programming mode.
## Features
This implements the standard keymap, including mousekeys.
It doesn't do cursor warping - QMK does not support absolute mouse positioning.
LED support is limited. Gamma compensation and the high speed batch update
functions supported by the hardware are not implemented. The high current power
switch is also not implemented, so if you try and turn all the LEDs on at full
brightness, something may conk out.
Hotplugging the two halves works but is not extensively tested.

View file

@ -0,0 +1,35 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# ATmega32A bootloadHID
# ATmega328P USBasp
BOOTLOADER = caterina
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
MIDI_ENABLE = no # MIDI support
UNICODE_ENABLE = no # Unicode
CUSTOM_MATRIX = yes
QUANTUM_LIB_SRC += i2c_master.c
SRC += leds.c \
matrix.c
# You can set RGB_MATRIX_ENABLE = no in your rules.mk to disable this and save the Flash
RGB_MATRIX_ENABLE = custom # Enable RGB matrix effects.

View file

@ -0,0 +1,53 @@
/*
* This file is taken from the KeyboardioScanner module:
* https://github.com/keyboardio/KeyboardioScanner/blob/master/wire-protocol-constants.h
*
* Copyright (C) 2015-2018 Keyboard.io, Inc
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#pragma once
#define TWI_CMD_NONE 0x00
#define TWI_CMD_VERSION 0x01
#define TWI_CMD_KEYSCAN_INTERVAL 0x02
#define TWI_CMD_LED_SET_ALL_TO 0x03
#define TWI_CMD_LED_SET_ONE_TO 0x04
#define TWI_CMD_COLS_USE_PULLUPS 0x05
#define TWI_CMD_LED_SPI_FREQUENCY 0x06
#define LED_SPI_FREQUENCY_4MHZ 0x07
#define LED_SPI_FREQUENCY_2MHZ 0x06
#define LED_SPI_FREQUENCY_1MHZ 0x05
#define LED_SPI_FREQUENCY_512KHZ 0x04
#define LED_SPI_FREQUENCY_256KHZ 0x03
#define LED_SPI_FREQUENCY_128KHZ 0x02
#define LED_SPI_FREQUENCY_64KHZ 0x01
#define LED_SPI_OFF 0x00
// 512KHZ seems to be the sweet spot in early testing
// so make it the default
#define LED_SPI_FREQUENCY_DEFAULT LED_SPI_FREQUENCY_512KHZ
#define TWI_CMD_LED_BASE 0x80
#define TWI_REPLY_NONE 0x00
#define TWI_REPLY_KEYDATA 0x01