1
0
Fork 0

[Keyboard] Add Durgod Taurus K310 keyboard (#12314)

Co-authored-by: Tyler Tidman <tyler.tidman@draak.ca>
Co-authored-by: Simon Arlott <sa.me.uk>
This commit is contained in:
Donald Kjer 2021-07-22 00:09:00 -07:00 committed by GitHub
parent 931bf52b74
commit 13a514923a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
52 changed files with 1945 additions and 642 deletions

View file

@ -0,0 +1,6 @@
# Taurus K310
Base Model - no backlight leds
See: [K310](../../k3x0/k310/base/readme.md)

View file

@ -0,0 +1 @@
DEFAULT_FOLDER=durgod/k3x0/k310/base

View file

@ -0,0 +1,4 @@
# K310
See: [K310](../k3x0/k310/readme.md)

View file

@ -0,0 +1 @@
DEFAULT_FOLDER=durgod/k3x0/k310

View file

@ -0,0 +1,6 @@
# Taurus K320
Base Model - no backlight leds
See: [K320](../../k3x0/k320/base/readme.md)

View file

@ -0,0 +1 @@
DEFAULT_FOLDER=durgod/k3x0/k320/base

View file

@ -1,26 +0,0 @@
{
"keyboard": "durgod/k320",
"keymap": "default",
"layout": "LAYOUT_all",
"layers": [
[
"KC_ESC", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "KC_PSCR", "KC_SLCK", "KC_PAUS",
"KC_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", "KC_EQL", "KC_BSPC", "KC_INS", "KC_HOME", "KC_PGUP",
"KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_LBRC", "KC_RBRC", "KC_BSLS", "KC_DEL", "KC_END", "KC_PGDN",
"KC_CAPS", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_NUHS", "KC_ENT",
"KC_LSFT", "KC_NUBS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", "KC_UP",
"KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "MO(1)", "KC_APP", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT"
],
[
"KC_TRNS", "KC_MPLY", "KC_MSTP", "KC_MPRV", "KC_MNXT", "KC_MUTE", "KC_VOLD", "KC_VOLU", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TGUI", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
]
],
"author":"dkjer",
"notes":"",
"version":1
}

View file

@ -1,367 +0,0 @@
/* Copyright 2021 kuenhlee and Don Kjer
*
* 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 shorthand
enum _layer {
_WBL,
_WFL,
_WSL,
_MBL,
_MFL,
_MSL
};
#ifndef DEFAULT_LAYOUT
# define DEFAULT_LAYOUT _WBL // Change to _MBL to boot into Mac layout.
#endif
#ifndef ALT_LAYOUT
# define ALT_LAYOUT _MBL // Layout to display 'MR' led when active.
#endif
static bool win_key_locked = false;
static bool mac_media_locked = false;
static bool win_appkey_pressed = false;
static bool mac_fnkey_pressed = false;
// Defines the keycodes used by our macros in process_record_user
enum custom_keycodes {
KC_TGUI = SAFE_RANGE, // Toggle between GUI Lock or Unlock (Windows)
KC_TMED, // Toggle between Fx keys or Media keys (Mac)
KC_WFN, // Windows function key
KC_MFN, // Mac function key
MO_WSL, // Windows system key
MO_MSL, // Mac system key
DF_W2MBL, // Change layout from Windows to Mac
DF_M2WBL // Change layout from Mac to Windows
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _WBL: Windows Base Layer (Default Layer)
* ,-----------------------------------------------------------. ,--------------.
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
* |-----------------------------------------------------------| |--------------|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
* |-----------------------------------------------------------| |--------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
* |-----------------------------------------------------------| `--------------'
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #|Ret |
* |-----------------------------------------------------------| ,----.
* |Shift| \| Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
* |-----------------------------------------------------------| ,-------------.
* |Ctrl|Gui |Alt | Space |Alt |Func |App|Ctrl | |Lft| Dn |Rig |
* `-----------------------------------------------------------' `-------------'
*/
[_WBL] = LAYOUT_all( /* Windows Base Layer */
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_WFN, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
/* Keymap _WFL: Windows Function Layer
* ,-----------------------------------------------------------. ,--------------.
* | |Play|Stop|Prev|Next| |Mute|Vol+|Vol-| | | | | | | | | | |
* |-----------------------------------------------------------| |--------------|
* | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| |--------------|
* | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| `--------------'
* | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,----.
* | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,-------------.
* | |Lock| | | |Func |Sys| | | | | |
* `-----------------------------------------------------------' `-------------'
*/
[_WFL] = LAYOUT_all( /* Windows First Layer */
_______, KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_TGUI, _______, _______, _______, _______, MO_WSL, _______, _______, _______, _______
),
/* Keymap _WSL: Windows System Layer
* ,-----------------------------------------------------------. ,--------------.
* |Reset |Sleep| | |Power| | | | | | | | | |MAC| | |
* |-----------------------------------------------------------| |--------------|
* | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| |--------------|
* | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| `--------------'
* | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,----.
* | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,-------------.
* | | | | | |Func |Sys| | | | | |
* `-----------------------------------------------------------' `-------------'
*/
[_WSL] = LAYOUT_all( /* Windows Second / System Layer */
RESET, KC_SLEP, XXXXXXX, XXXXXXX, KC_PWR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF_W2MBL, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, DEBUG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
/* Keymap _MBL: Mac Base Layer (Alternate Layout)
* ,-----------------------------------------------------------. ,--------------.
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| | f13| f14| f15|
* |-----------------------------------------------------------| |--------------|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
* |-----------------------------------------------------------| |--------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
* |-----------------------------------------------------------| `--------------'
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #|Ret |
* |-----------------------------------------------------------| ,----.
* |Shift| \| Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
* |-----------------------------------------------------------| ,-------------.
* |Ctrl|Alt |Gui | Space |Gui |Alt|Func |Ctrl | |Lft| Dn |Rig |
* `-----------------------------------------------------------' `-------------'
*/
[_MBL] = LAYOUT_all( /* Mac Base Layer */
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_MFN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
/* Keymap _MFL: Mac Function Layer
* ,-----------------------------------------------------------. ,--------------.
* | |Bri-|Bri+|MCon|LPad| | | |Prv|Ply| |Nxt|Mute|Vol-|Vol+| |TMed| | |
* |-----------------------------------------------------------| |--------------|
* | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| |--------------|
* | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| `--------------'
* | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,----.
* | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,-------------.
* | | | | | |Sys|Func | | | | | |
* `-----------------------------------------------------------' `-------------'
*/
[_MFL] = LAYOUT_all( /* Mac First Layer */
_______, KC_BRID, KC_BRIU, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TMED, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, MO_MSL, _______, _______, _______, _______, _______
),
/* Keymap _MSL: Mac System Layer
* ,-----------------------------------------------------------. ,--------------.
* |Reset | | | |Sleep| | | | | | | | | |WIN| | |
* |-----------------------------------------------------------| |--------------|
* | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| |--------------|
* | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| `--------------'
* | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,----.
* | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,-------------.
* | | | | | |Sys|Func | | | | | |
* `-----------------------------------------------------------' `-------------'
*/
[_MSL] = LAYOUT_all( /* Mac Second / System Layer */
RESET, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF_M2WBL, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, DEBUG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
)
};
void unlock_win_key(void) {
win_key_locked = false;
mac_media_locked = false;
writePinHigh(LED_WIN_LOCK_PIN);
}
void toggle_lock_win_key(void) {
win_key_locked = !win_key_locked;
writePin(LED_WIN_LOCK_PIN, !win_key_locked);
}
void toggle_lock_media_key(void) {
mac_media_locked = !mac_media_locked;
writePin(LED_WIN_LOCK_PIN, !mac_media_locked);
}
#ifdef CONSOLE_ENABLE
void dprint_global_layers(void) {
dprint("Global Layers:");
if (IS_LAYER_ON(_WFL)) { dprint(" _WFL"); }
if (IS_LAYER_ON(_WSL)) { dprint(" _WSL"); }
if (IS_LAYER_ON(_MFL)) { dprint(" _MFL"); }
if (IS_LAYER_ON(_MSL)) { dprint(" _MSL"); }
dprintf("\n");
}
void dprint_layers(layer_state_t state) {
dprint("Layers:");
if (IS_LAYER_ON_STATE(state, _WFL)) { dprint(" _WFL"); }
if (IS_LAYER_ON_STATE(state, _WSL)) { dprint(" _WSL"); }
if (IS_LAYER_ON_STATE(state, _MFL)) { dprint(" _MFL"); }
if (IS_LAYER_ON_STATE(state, _MSL)) { dprint(" _MSL"); }
dprintf("\n");
}
#endif
layer_state_t default_layer_state_set_user(layer_state_t state) {
#ifdef CONSOLE_ENABLE
dprintf("default_layer_state_set_user: 0x%x\n", state);
dprint_global_layers();
#endif
// Disable windows key lock on default layer transition.
unlock_win_key();
win_appkey_pressed = false;
mac_fnkey_pressed = false;
writePin(LED_MR_LOCK_PIN, !IS_LAYER_ON_STATE(state, ALT_LAYOUT));
return state;
}
layer_state_t layer_state_set_user(layer_state_t state) {
#ifdef CONSOLE_ENABLE
dprintf("layer_state_set_user: 0x%x\n", state);
dprint_layers(state);
#endif
return state;
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_TGUI:
if (!record->event.pressed) {
// Toggle GUI lock on key release
toggle_lock_win_key();
}
break;
case KC_TMED:
// Only trigger when Fn key is also held down, to avoid accidental unlock.
if (!mac_fnkey_pressed) { return false; }
if (!record->event.pressed) {
// Toggle Media Lock on key release
toggle_lock_media_key();
}
break;
case KC_LGUI:
if (win_key_locked) { return false; }
break;
case KC_WFN:
// Like MO(_WFL), but also enables _WSL if KC_APP is already pressed down.
if (record->event.pressed) {
layer_on(_WFL);
if (win_appkey_pressed) {
// Also enable Secondary layer if App key is being held down.
win_appkey_pressed = false;
layer_on(_WSL);
}
} else {
if (IS_LAYER_ON(_WFL)) { layer_off(_WFL); }
if (IS_LAYER_ON(_MSL)) { layer_off(_MSL); }
}
break;
case KC_APP:
if (record->event.pressed) {
// Don't actually press down the app menu key
win_appkey_pressed = true;
} else {
if (IS_LAYER_ON(_WSL)) { layer_off(_WSL); }
if (IS_LAYER_ON(_MFL)) { layer_off(_MFL); }
if (win_appkey_pressed) {
win_appkey_pressed = false;
// Tap the KC_APP key on key release.
tap_code(KC_APP);
}
}
return false;
break;
case KC_MFN:
// Mac Fn key. Emit Fn keycode, and also transition layers similar to KC_WFN.
if (record->event.pressed) {
mac_fnkey_pressed = true;
layer_on(_MFL);
// Also enable Secondary layer if Right-Alt key is being held down.
if (get_mods() & MOD_BIT(KC_RALT)) {
layer_on(_MSL);
}
} else {
mac_fnkey_pressed = false;
if (!mac_media_locked) {
if (IS_LAYER_ON(_MFL)) { layer_off(_MFL); }
if (IS_LAYER_ON(_WSL)) { layer_off(_WSL); }
}
}
break;
case KC_RALT:
// Disable MSL/WFL layer on key-up.
if (!record->event.pressed) {
if (IS_LAYER_ON(_MSL)) { layer_off(_MSL); }
if (IS_LAYER_ON(_WFL)) { layer_off(_WFL); }
}
break;
case MO_WSL:
if (record->event.pressed) {
layer_on(_WSL);
} else {
if (IS_LAYER_ON(_WSL)) { layer_off(_WSL); }
if (IS_LAYER_ON(_MFL)) { layer_off(_MFL); }
}
break;
case MO_MSL:
if (record->event.pressed) {
layer_on(_MSL);
} else {
if (IS_LAYER_ON(_MSL)) { layer_off(_MSL); }
if (IS_LAYER_ON(_WFL)) { layer_off(_WFL); }
}
break;
case DF_W2MBL:
if (!record->event.pressed) {
// Switch base layer, but preserve first/secondary layers.
default_layer_set(1UL<<_MBL);
layer_state_set(1UL<<_MFL | 1UL<<_MSL);
}
break;
case DF_M2WBL:
if (!record->event.pressed) {
// Switch base layer, but preserve first/secondary layers.
default_layer_set(1UL<<_WBL);
layer_state_set(1UL<<_WFL | 1UL<<_WSL);
}
break;
case RESET:
if (record->event.pressed) {
// Flash LEDs to indicate bootloader mode is enabled.
on_all_leds();
}
break;
}
return true;
}
void keyboard_post_init_user(void) {
default_layer_set(1UL<<DEFAULT_LAYOUT);
}

View file

@ -1,90 +0,0 @@
/* Copyright 2021 Maxime Coirault
*
* 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 shorthand
enum _layer {
_BASE,
_FUNC,
_LAYER3,
_LAYER4
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BASE: Base Layer (Default Layer)
* ,-----------------------------------------------------------. ,--------------.
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
* |-----------------------------------------------------------| |--------------|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
* |-----------------------------------------------------------| |--------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | Del| End|PgDn|
* |------------------------------------------------------ Ret | `--------------'
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #| |
* |-----------------------------------------------------------| ,----.
* |Shift| \| Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
* |-----------------------------------------------------------| ,-------------.
* |Ctrl|Gui |Alt | Space |Alt | Fn |App |Ctrl| |Lft| Dn |Rig |
* `-----------------------------------------------------------' `-------------'
*/
[_BASE] = LAYOUT_all( /* Base Layer */
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FUNC),KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
/* Keymap _FUNC: Function Layer
* ,-----------------------------------------------------------. ,--------------.
* | |Play|Stop|Prev|Next| |Mute|Vol+|Vol-| | | | | | | | | | |
* |-----------------------------------------------------------| |--------------|
* | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| |--------------|
* | | | | | | | | | | | | | | | | | | |
* |------------------------------------------------------- | `--------------'
* | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,----.
* | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,-------------.
* | | | | | |Func | | | | | | |
* `-----------------------------------------------------------' `-------------'
*/
[_FUNC] = LAYOUT_all( /* Function Layer */
_______, KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_LAYER3] = LAYOUT_all( /* Layer 3 */
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_LAYER4] = LAYOUT_all( /* Layer 4 */
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View file

@ -1,12 +0,0 @@
# The default keymap for Durgod Taurus K320.
Layer 0 : Standard 87/88 keys TKL layout
Layer 1 : Media control
- Reusing Durgod's Original Media Control for Fn + F1 ~ Fn + F7
## Supported PCBs
This firmware was tested on a Durgod K320 ISO with the PCB marked "DGK320ST-Single v1.0 HS20181227".
The pcb features switch holes for ANSI layout, so this firmware might be compatible with with the Durgod K320 ANSI.

View file

@ -1,4 +0,0 @@
OPT_DEFS += -DWINLOCK_DISABLED
VIA_ENABLE = yes
LTO_ENABLE = yes

View file

@ -1,57 +1,4 @@
# K320 # K320
This is a standard off-the-shelf Durgod Taurus K320 TKL (87/88-key) keyboard without backlight. See: [K320](../k3x0/k320/readme.md)
* Keyboard Maintainer: [dkjer](https://github.com/dkjer)
* Hardware Supported: Durgod Taurus K320 board with STM32F070RBT6
* Hardware Availability: https://www.durgod.com/page9?product_id=47&_l=en
## Instructions
### Build
Make command example for this keyboard (after setting up your build environment):
make durgod/k320:default
Flashing example for this keyboard:
make durgod/k320:default:flash
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).
### Initial Flash
For first Flashing from initial Stock's Firmware
1. Back up original Firmware Image:
- Unplug
- Short Boot0 to Vdd (See below)
- Plug In USB
- Make a Flash Image's Backup in case you wanted to restore the Keyboard to Stock's Image:
- Using DFUseDemo.exe from ST's STSW-STM32080: https://www.st.com/en/development-tools/stsw-stm32080.html
- Using dfu-util:
dfu-util --list
dfu-util --alt 0 --dfuse-address 0x08000000 --upload ${OLD_STOCK_BIN}
2. Flash the QMK Firmware Image.
- Put board into Bootloader mode, using the same method as when backing up the original Firmware (above)
- Here are a few options for performing the initial Flash:
- Using [QMK Toolbox](https://github.com/qmk/qmk_toolbox)
- Using DFuseDemo.exe if STTub30 driver is used.
- Using dfu-util:
dfu-util --alt 0 --dfuse-address 0x08000000 --download ${NEW_QMK_BIN}
You can short Boot0 to Vdd by shorting R21 to C27 on the sides closest to the processor, as shown:
<img src="https://i.imgur.com/hvDnw5a.jpg" width="520" height="693" alt="Shorting Boot0 to Vdd on K320">
### Subsequent Flashing
For repeating Flashing you can use BootMagic:
- BootMagic Lite has been enabled with Assigned "Esc" key
- Unplug USB Cable
- Holding Esc Button
- Plug in USB Cable, Keyboard should be in ST-Bootloader state

View file

@ -1,29 +1 @@
# MCU name DEFAULT_FOLDER=durgod/k3x0/k320
# Actually F070, but close enough
MCU = STM32F072
BOARD = DURGOD_STM32_F070
# Bootloader selection
BOOTLOADER = stm32-dfu
# Do not put the microcontroller into power saving mode
OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # 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 = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output
LAYOUTS = tkl_ansi tkl_iso

View file

@ -1,4 +1,5 @@
/* Copyright 2021 kuenhlee and Don Kjer /* Copyright 2021 kuenhlee, Don Kjer, Tyler Tidman
* Copyright 2021 Simon Arlott
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -20,16 +21,11 @@
/* USB Device descriptor parameter */ /* USB Device descriptor parameter */
#define VENDOR_ID 0xD60D #define VENDOR_ID 0xD60D
#define PRODUCT_ID 0x3200
#define DEVICE_VER 0x0001
#define MANUFACTURER Hoksi Technology #define MANUFACTURER Hoksi Technology
#define PRODUCT DURGOD Taurus K320 (QMK)
/* key matrix size */ /* key matrix size (rows in specific keyboard variant) */
#define MATRIX_ROWS 7
#define MATRIX_COLS 16 #define MATRIX_COLS 16
#define MATRIX_ROW_PINS { A0, A1, A2, A3, A4, A5, A6 }
#define MATRIX_COL_PINS { C4, C5, B0, B1, B2, B10, B11, B12, B13, B14, B15, C6, C7, C10, C11, C12 } #define MATRIX_COL_PINS { C4, C5, B0, B1, B2, B10, B11, B12, B13, B14, B15, C6, C7, C10, C11, C12 }
/* COL2ROW, ROW2COL*/ /* COL2ROW, ROW2COL*/
@ -42,6 +38,7 @@
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5 #define DEBOUNCE 5
// #define USB_POLLING_INTERVAL_MS 1
/* Bootmagic Lite key configuration */ /* Bootmagic Lite key configuration */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE #define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
@ -54,3 +51,6 @@
#define LED_WIN_LOCK_PIN A9 #define LED_WIN_LOCK_PIN A9
#define LED_MR_LOCK_PIN A10 #define LED_MR_LOCK_PIN A10
#define LED_PIN_ON_STATE 0 #define LED_PIN_ON_STATE 0
/* Original hardware "reset" button on pin D2 */
#define HARDWARE_RESET_PIN D2

View file

@ -0,0 +1,22 @@
/* Copyright 2021 Simon Arlott
*
* 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
#define HAL_USE_PAL TRUE
#define PAL_USE_CALLBACKS TRUE
#include_next <halconf.h>

View file

@ -0,0 +1,23 @@
/* Copyright 2021 Don Kjer
*
* 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 PRODUCT DURGOD Taurus K310 (QMK)
#define DEVICE_VER 0x0001 // Base (no backlight)

View file

@ -0,0 +1,27 @@
# K310
This is a standard off-the-shelf Durgod Taurus K310 full-sized 104/105-key
keyboard without backlight. This supports both the ANSI and ISO variants.
* Keyboard Maintainers: [dkjer](https://github.com/dkjer) and [tylert](https://github.com/tylert)
* Hardware Supported: Durgod Taurus K310 board with STM32F070RBT6
* Hardware Availability: K310 https://www.durgod.com/page9?product_id=53&_l=en
## Instructions
### Build
Make command example for this keyboard (after setting up your build environment):
make durgod/k310:default
Flashing example for this keyboard:
make durgod/k310:default:flash
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).
### Initial Flash
Instructions for Flashing from initial Stock Firmware:
* [Initial Flashing](../../readme.md#initial-flash)

View file

@ -0,0 +1 @@
# see common rules.mk

View file

@ -0,0 +1,36 @@
/* Copyright 2021 Don Kjer and Tyler Tidman
* Copyright 2021 Simon Arlott
*
* 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 PRODUCT_ID 0x3100
// Taurus K310 models:
//#define DEVICE_VER 0x0001 // Base (no backlight)
//#define DEVICE_VER 0x0002 // Corona (white led matrix)
//#define DEVICE_VER 0x0003 // Aurora (red & blue led matrix)
//#define DEVICE_VER 0x0004 // Nebula (rgb led matrix)
/* key matrix size (cols in generic keyboard config) */
#define MATRIX_ROWS 8
#define MATRIX_ROW_PINS { A0, A1, A2, A3, A4, A5, A6, A7 }
/* LED indicator pins */
#define LED_NUM_LOCK_PIN C8

View file

@ -1,11 +1,11 @@
{ {
"keyboard_name": "DURGOD Taurus K320", "keyboard_name": "DURGOD Taurus K310",
"url": "https://www.durgod.com/page9?product_id=47&_l=en", "url": "https://www.durgod.com/page9?product_id=53&_l=en",
"maintainer": "dkjer", "maintainer": "tylert",
"width": 18.25, "width": 22.5,
"height": 6.5, "height": 6.5,
"layouts": { "layouts": {
"LAYOUT_tkl_ansi": { "LAYOUT_fullsize_ansi": {
"layout": [ "layout": [
{ "label": "Esc", "x": 0, "y": 0 }, { "label": "Esc", "x": 0, "y": 0 },
{ "label": "F1", "x": 2, "y": 0 }, { "label": "F1", "x": 2, "y": 0 },
@ -41,6 +41,10 @@
{ "label": "Insert", "x": 15.25, "y": 1.5 }, { "label": "Insert", "x": 15.25, "y": 1.5 },
{ "label": "Home", "x": 16.25, "y": 1.5 }, { "label": "Home", "x": 16.25, "y": 1.5 },
{ "label": "PgUp", "x": 17.25, "y": 1.5 }, { "label": "PgUp", "x": 17.25, "y": 1.5 },
{ "label": "Num Lock", "x": 18.5, "y": 1.5 },
{ "label": "/", "x": 19.5, "y": 1.5 },
{ "label": "*", "x": 20.5, "y": 1.5 },
{ "label": "-", "x": 21.5, "y": 1.5 },
{ "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 }, { "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 },
{ "label": "Q", "x": 1.5, "y": 2.5 }, { "label": "Q", "x": 1.5, "y": 2.5 },
@ -59,6 +63,10 @@
{ "label": "Delete", "x": 15.25, "y": 2.5 }, { "label": "Delete", "x": 15.25, "y": 2.5 },
{ "label": "End", "x": 16.25, "y": 2.5 }, { "label": "End", "x": 16.25, "y": 2.5 },
{ "label": "PgDn", "x": 17.25, "y": 2.5 }, { "label": "PgDn", "x": 17.25, "y": 2.5 },
{ "label": "7", "x": 18.5, "y": 2.5 },
{ "label": "8", "x": 19.5, "y": 2.5 },
{ "label": "9", "x": 20.5, "y": 2.5 },
{ "label": "+", "x": 21.5, "y": 2.5, "h": 2 },
{ "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 }, { "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 },
{ "label": "A", "x": 1.75, "y": 3.5 }, { "label": "A", "x": 1.75, "y": 3.5 },
@ -73,6 +81,9 @@
{ "label": ":", "x": 10.75, "y": 3.5 }, { "label": ":", "x": 10.75, "y": 3.5 },
{ "label": "\"", "x": 11.75, "y": 3.5 }, { "label": "\"", "x": 11.75, "y": 3.5 },
{ "label": "Enter", "x": 12.75, "y": 3.5, "w": 2.25 }, { "label": "Enter", "x": 12.75, "y": 3.5, "w": 2.25 },
{ "label": "4", "x": 18.5, "y": 3.5 },
{ "label": "5", "x": 19.5, "y": 3.5 },
{ "label": "6", "x": 20.5, "y": 3.5 },
{ "label": "Shift", "x": 0, "y": 4.5, "w": 2.25 }, { "label": "Shift", "x": 0, "y": 4.5, "w": 2.25 },
{ "label": "Z", "x": 2.25, "y": 4.5 }, { "label": "Z", "x": 2.25, "y": 4.5 },
@ -87,6 +98,10 @@
{ "label": "?", "x": 11.25, "y": 4.5 }, { "label": "?", "x": 11.25, "y": 4.5 },
{ "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 }, { "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 },
{ "label": "\u2191", "x": 16.25, "y": 4.5 }, { "label": "\u2191", "x": 16.25, "y": 4.5 },
{ "label": "1", "x": 18.5, "y": 4.5 },
{ "label": "2", "x": 19.5, "y": 4.5 },
{ "label": "3", "x": 20.5, "y": 4.5 },
{ "label": "Enter", "x": 21.5, "y": 4.5, "h": 2 },
{ "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25 }, { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25 },
{ "label": "Win", "x": 1.25, "y": 5.5, "w": 1.25 }, { "label": "Win", "x": 1.25, "y": 5.5, "w": 1.25 },
@ -98,10 +113,12 @@
{ "label": "Ctrl", "x": 13.75, "y": 5.5, "w": 1.25 }, { "label": "Ctrl", "x": 13.75, "y": 5.5, "w": 1.25 },
{ "label": "\u2190", "x": 15.25, "y": 5.5 }, { "label": "\u2190", "x": 15.25, "y": 5.5 },
{ "label": "\u2193", "x": 16.25, "y": 5.5 }, { "label": "\u2193", "x": 16.25, "y": 5.5 },
{ "label": "\u2192", "x": 17.25, "y": 5.5 } { "label": "\u2192", "x": 17.25, "y": 5.5 },
{ "label": "0", "x": 18.5, "y": 5.5, "w": 2 },
{ "label": ".", "x": 20.5, "y": 5.5 }
] ]
}, },
"LAYOUT_tkl_iso": { "LAYOUT_fullsize_iso": {
"layout": [ "layout": [
{ "label": "Esc", "x": 0, "y": 0 }, { "label": "Esc", "x": 0, "y": 0 },
{ "label": "F1", "x": 2, "y": 0 }, { "label": "F1", "x": 2, "y": 0 },
@ -137,6 +154,10 @@
{ "label": "Insert", "x": 15.25, "y": 1.5 }, { "label": "Insert", "x": 15.25, "y": 1.5 },
{ "label": "Home", "x": 16.25, "y": 1.5 }, { "label": "Home", "x": 16.25, "y": 1.5 },
{ "label": "PgUp", "x": 17.25, "y": 1.5 }, { "label": "PgUp", "x": 17.25, "y": 1.5 },
{ "label": "Num Lock", "x": 18.5, "y": 1.5 },
{ "label": "/", "x": 19.5, "y": 1.5 },
{ "label": "*", "x": 20.5, "y": 1.5 },
{ "label": "-", "x": 21.5, "y": 1.5 },
{ "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 }, { "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 },
{ "label": "Q", "x": 1.5, "y": 2.5 }, { "label": "Q", "x": 1.5, "y": 2.5 },
@ -154,6 +175,10 @@
{ "label": "Delete", "x": 15.25, "y": 2.5 }, { "label": "Delete", "x": 15.25, "y": 2.5 },
{ "label": "End", "x": 16.25, "y": 2.5 }, { "label": "End", "x": 16.25, "y": 2.5 },
{ "label": "PgDn", "x": 17.25, "y": 2.5 }, { "label": "PgDn", "x": 17.25, "y": 2.5 },
{ "label": "7", "x": 18.5, "y": 2.5 },
{ "label": "8", "x": 19.5, "y": 2.5 },
{ "label": "9", "x": 20.5, "y": 2.5 },
{ "label": "+", "x": 21.5, "y": 2.5, "h": 2 },
{ "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 }, { "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 },
{ "label": "A", "x": 1.75, "y": 3.5 }, { "label": "A", "x": 1.75, "y": 3.5 },
@ -169,6 +194,9 @@
{ "label": "\"", "x": 11.75, "y": 3.5 }, { "label": "\"", "x": 11.75, "y": 3.5 },
{ "label": "#", "x": 12.75, "y": 3.5 }, { "label": "#", "x": 12.75, "y": 3.5 },
{ "label": "Enter", "x": 13.75, "y": 2.5, "w": 1.25, "h": 2 }, { "label": "Enter", "x": 13.75, "y": 2.5, "w": 1.25, "h": 2 },
{ "label": "4", "x": 18.5, "y": 3.5 },
{ "label": "5", "x": 19.5, "y": 3.5 },
{ "label": "6", "x": 20.5, "y": 3.5 },
{ "label": "Shift", "x": 0, "y": 4.5, "w": 1.25 }, { "label": "Shift", "x": 0, "y": 4.5, "w": 1.25 },
{ "label": "\\", "x": 1.25, "y": 4.5 }, { "label": "\\", "x": 1.25, "y": 4.5 },
@ -184,6 +212,10 @@
{ "label": "?", "x": 11.25, "y": 4.5 }, { "label": "?", "x": 11.25, "y": 4.5 },
{ "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 }, { "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 },
{ "label": "\u2191", "x": 16.25, "y": 4.5 }, { "label": "\u2191", "x": 16.25, "y": 4.5 },
{ "label": "1", "x": 18.5, "y": 4.5 },
{ "label": "2", "x": 19.5, "y": 4.5 },
{ "label": "3", "x": 20.5, "y": 4.5 },
{ "label": "Enter", "x": 21.5, "y": 4.5, "h": 2 },
{ "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25 }, { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25 },
{ "label": "Win", "x": 1.25, "y": 5.5, "w": 1.25 }, { "label": "Win", "x": 1.25, "y": 5.5, "w": 1.25 },
@ -195,7 +227,9 @@
{ "label": "Ctrl", "x": 13.75, "y": 5.5, "w": 1.25 }, { "label": "Ctrl", "x": 13.75, "y": 5.5, "w": 1.25 },
{ "label": "\u2190", "x": 15.25, "y": 5.5 }, { "label": "\u2190", "x": 15.25, "y": 5.5 },
{ "label": "\u2193", "x": 16.25, "y": 5.5 }, { "label": "\u2193", "x": 16.25, "y": 5.5 },
{ "label": "\u2192", "x": 17.25, "y": 5.5 } { "label": "\u2192", "x": 17.25, "y": 5.5 },
{ "label": "0", "x": 18.5, "y": 5.5, "w": 2 },
{ "label": ".", "x": 20.5, "y": 5.5 }
] ]
}, },
"LAYOUT_all": { "LAYOUT_all": {
@ -234,6 +268,10 @@
{ "label": "Insert", "x": 15.25, "y": 1.5 }, { "label": "Insert", "x": 15.25, "y": 1.5 },
{ "label": "Home", "x": 16.25, "y": 1.5 }, { "label": "Home", "x": 16.25, "y": 1.5 },
{ "label": "PgUp", "x": 17.25, "y": 1.5 }, { "label": "PgUp", "x": 17.25, "y": 1.5 },
{ "label": "Num Lock", "x": 18.5, "y": 1.5 },
{ "label": "/", "x": 19.5, "y": 1.5 },
{ "label": "*", "x": 20.5, "y": 1.5 },
{ "label": "-", "x": 21.5, "y": 1.5 },
{ "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 }, { "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 },
{ "label": "Q", "x": 1.5, "y": 2.5 }, { "label": "Q", "x": 1.5, "y": 2.5 },
@ -252,6 +290,10 @@
{ "label": "Delete", "x": 15.25, "y": 2.5 }, { "label": "Delete", "x": 15.25, "y": 2.5 },
{ "label": "End", "x": 16.25, "y": 2.5 }, { "label": "End", "x": 16.25, "y": 2.5 },
{ "label": "PgDn", "x": 17.25, "y": 2.5 }, { "label": "PgDn", "x": 17.25, "y": 2.5 },
{ "label": "7", "x": 18.5, "y": 2.5 },
{ "label": "8", "x": 19.5, "y": 2.5 },
{ "label": "9", "x": 20.5, "y": 2.5 },
{ "label": "+", "x": 21.5, "y": 2.5, "h": 2 },
{ "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 }, { "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 },
{ "label": "A", "x": 1.75, "y": 3.5 }, { "label": "A", "x": 1.75, "y": 3.5 },
@ -267,6 +309,9 @@
{ "label": "\"", "x": 11.75, "y": 3.5 }, { "label": "\"", "x": 11.75, "y": 3.5 },
{ "label": "#", "x": 12.75, "y": 3.5 }, { "label": "#", "x": 12.75, "y": 3.5 },
{ "label": "Enter", "x": 13.75, "y": 3.5, "w": 1.25 }, { "label": "Enter", "x": 13.75, "y": 3.5, "w": 1.25 },
{ "label": "4", "x": 18.5, "y": 3.5 },
{ "label": "5", "x": 19.5, "y": 3.5 },
{ "label": "6", "x": 20.5, "y": 3.5 },
{ "label": "Shift", "x": 0, "y": 4.5, "w": 1.25 }, { "label": "Shift", "x": 0, "y": 4.5, "w": 1.25 },
{ "label": "\\", "x": 1.25, "y": 4.5 }, { "label": "\\", "x": 1.25, "y": 4.5 },
@ -282,6 +327,10 @@
{ "label": "?", "x": 11.25, "y": 4.5 }, { "label": "?", "x": 11.25, "y": 4.5 },
{ "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 }, { "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 },
{ "label": "\u2191", "x": 16.25, "y": 4.5 }, { "label": "\u2191", "x": 16.25, "y": 4.5 },
{ "label": "1", "x": 18.5, "y": 4.5 },
{ "label": "2", "x": 19.5, "y": 4.5 },
{ "label": "3", "x": 20.5, "y": 4.5 },
{ "label": "Enter", "x": 21.5, "y": 4.5, "h": 2 },
{ "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25 }, { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25 },
{ "label": "Win", "x": 1.25, "y": 5.5, "w": 1.25 }, { "label": "Win", "x": 1.25, "y": 5.5, "w": 1.25 },
@ -293,7 +342,9 @@
{ "label": "Ctrl", "x": 13.75, "y": 5.5, "w": 1.25 }, { "label": "Ctrl", "x": 13.75, "y": 5.5, "w": 1.25 },
{ "label": "\u2190", "x": 15.25, "y": 5.5 }, { "label": "\u2190", "x": 15.25, "y": 5.5 },
{ "label": "\u2193", "x": 16.25, "y": 5.5 }, { "label": "\u2193", "x": 16.25, "y": 5.5 },
{ "label": "\u2192", "x": 17.25, "y": 5.5 } { "label": "\u2192", "x": 17.25, "y": 5.5 },
{ "label": "0", "x": 18.5, "y": 5.5, "w": 2 },
{ "label": ".", "x": 20.5, "y": 5.5 }
] ]
} }
} }

View file

@ -0,0 +1,78 @@
/* Copyright 2021 Don Kjer and Tyler Tidman
* Copyright 2021 Simon Arlott
*
* 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
#define XXX KC_NO
// This a shortcut to help you visually see your layout.
#define LAYOUT_fullsize_ansi( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, K2E, K2F, K1F, K6A, K69, K68, K67, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K3D, K3E, K3F, K7A, K79, K78, K6B, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K4E, K7E, K7D, K7C, \
K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, K6E, K6D, K6C, K7B, \
K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K6F, K7F, K77 \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, XXX, K1E, K1F }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D, K3E, K3F }, \
{ K40, XXX, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \
{ K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F }, \
{ XXX, XXX, XXX, XXX, XXX, XXX, XXX, K67, K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \
{ XXX, XXX, XXX, XXX, XXX, XXX, XXX, K77, K78, K79, K7A, K7B, K7C, K7D, K7E, K7F } \
}
// This a shortcut to help you visually see your layout.
#define LAYOUT_fullsize_iso( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, K2E, K2F, K1F, K6A, K69, K68, K67, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K3D, K3E, K3F, K7A, K79, K78, K6B, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K4E, K7E, K7D, K7C, \
K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, K6E, K6D, K6C, K7B, \
K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K6F, K7F, K77 \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, XXX, K1E, K1F }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, XXX, K2E, K2F }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \
{ K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F }, \
{ XXX, XXX, XXX, XXX, XXX, XXX, XXX, K67, K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \
{ XXX, XXX, XXX, XXX, XXX, XXX, XXX, K77, K78, K79, K7A, K7B, K7C, K7D, K7E, K7F } \
}
// This a shortcut to help you visually see your layout.
#define LAYOUT_all( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, K2E, K2F, K1F, K6A, K69, K68, K67, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K3D, K3E, K3F, K7A, K79, K78, K6B, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K4E, K7E, K7D, K7C, \
K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, K6E, K6D, K6C, K7B, \
K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K6F, K7F, K77 \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, XXX, K1E, K1F }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \
{ K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F }, \
{ XXX, XXX, XXX, XXX, XXX, XXX, XXX, K67, K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \
{ XXX, XXX, XXX, XXX, XXX, XXX, XXX, K77, K78, K79, K7A, K7B, K7C, K7D, K7E, K7F } \
}

View file

@ -0,0 +1,10 @@
# Taurus K310
This code is shared between all K310 variants. Currently only the base model with no backlight is supported.
* Keyboard Maintainers: [dkjer](https://github.com/dkjer) and [tylert](https://github.com/tylert)
* Hardware Supported: Durgod Taurus K310 board with STM32F070RBT6
* Hardware Availability: Base https://www.durgod.com/page9?product_id=53&_l=en
Instructions for building the K310 firmware can be found here:
* [No Backlight](base/readme.md)

View file

@ -0,0 +1,4 @@
# Default to the base model
DEFAULT_FOLDER=durgod/k3x0/k310/base
LAYOUTS = fullsize_ansi fullsize_iso

View file

@ -0,0 +1,23 @@
/* Copyright 2021 Don Kjer
*
* 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 PRODUCT DURGOD Taurus K320 (QMK)
#define DEVICE_VER 0x0001 // Base (no backlight)

View file

@ -0,0 +1,27 @@
# K320
This is a standard off-the-shelf Durgod Taurus K320 TKL (87/88-key)
keyboard without backlight. This supports both the ANSI and ISO variants.
* Keyboard Maintainers: [dkjer](https://github.com/dkjer) and [tylert](https://github.com/tylert)
* Hardware Supported: Durgod Taurus K320 board with STM32F070RBT6
* Hardware Availability: https://www.durgod.com/page9?product_id=47&_l=en
## Instructions
### Build
Make command example for this keyboard (after setting up your build environment):
make durgod/k320:default
Flashing example for this keyboard:
make durgod/k320:default:flash
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).
### Initial Flash
Instructions for Flashing from initial Stock Firmware:
* [Initial Flashing](../../readme.md#initial-flash)

View file

@ -0,0 +1 @@
# see common rules.mk

View file

@ -0,0 +1,33 @@
/* Copyright 2021 Don Kjer and Tyler Tidman
* Copyright 2021 Simon Arlott
*
* 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 PRODUCT_ID 0x3200
// Taurus K320 models:
//#define DEVICE_VER 0x0001 // Base (no backlight)
//#define DEVICE_VER 0x0002 // Corona (white led matrix)
//#define DEVICE_VER 0x0003 // Aurora (red & blue led matrix)
//#define DEVICE_VER 0x0004 // Nebula (rgb led matrix)
/* key matrix size (cols in generic keyboard config) */
#define MATRIX_ROWS 7
#define MATRIX_ROW_PINS { A0, A1, A2, A3, A4, A5, A6 }

View file

@ -0,0 +1,415 @@
{
"keyboard_name": "DURGOD Taurus K320",
"url": "https://www.durgod.com/page9?product_id=47&_l=en",
"maintainer": "dkjer",
"width": 18.25,
"height": 6.5,
"layouts": {
"LAYOUT_tkl_ansi": {
"layout": [
{ "label": "Esc", "x": 0, "y": 0 },
{ "label": "F1", "x": 2, "y": 0 },
{ "label": "F2", "x": 3, "y": 0 },
{ "label": "F3", "x": 4, "y": 0 },
{ "label": "F4", "x": 5, "y": 0 },
{ "label": "F5", "x": 6.5, "y": 0 },
{ "label": "F6", "x": 7.5, "y": 0 },
{ "label": "F7", "x": 8.5, "y": 0 },
{ "label": "F8", "x": 9.5, "y": 0 },
{ "label": "F9", "x": 11, "y": 0 },
{ "label": "F10", "x": 12, "y": 0 },
{ "label": "F11", "x": 13, "y": 0 },
{ "label": "F12", "x": 14, "y": 0 },
{ "label": "PrtSc", "x": 15.25, "y": 0 },
{ "label": "Scroll Lock", "x": 16.25, "y": 0 },
{ "label": "Pause", "x": 17.25, "y": 0 },
{ "label": "~", "x": 0, "y": 1.5 },
{ "label": "!", "x": 1, "y": 1.5 },
{ "label": "@", "x": 2, "y": 1.5 },
{ "label": "#", "x": 3, "y": 1.5 },
{ "label": "$", "x": 4, "y": 1.5 },
{ "label": "%", "x": 5, "y": 1.5 },
{ "label": "^", "x": 6, "y": 1.5 },
{ "label": "&", "x": 7, "y": 1.5 },
{ "label": "*", "x": 8, "y": 1.5 },
{ "label": "(", "x": 9, "y": 1.5 },
{ "label": ")", "x": 10, "y": 1.5 },
{ "label": "_", "x": 11, "y": 1.5 },
{ "label": "+", "x": 12, "y": 1.5 },
{ "label": "Backspace", "x": 13, "y": 1.5, "w": 2 },
{ "label": "Insert", "x": 15.25, "y": 1.5 },
{ "label": "Home", "x": 16.25, "y": 1.5 },
{ "label": "PgUp", "x": 17.25, "y": 1.5 },
{ "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 },
{ "label": "Q", "x": 1.5, "y": 2.5 },
{ "label": "W", "x": 2.5, "y": 2.5 },
{ "label": "E", "x": 3.5, "y": 2.5 },
{ "label": "R", "x": 4.5, "y": 2.5 },
{ "label": "T", "x": 5.5, "y": 2.5 },
{ "label": "Y", "x": 6.5, "y": 2.5 },
{ "label": "U", "x": 7.5, "y": 2.5 },
{ "label": "I", "x": 8.5, "y": 2.5 },
{ "label": "O", "x": 9.5, "y": 2.5 },
{ "label": "P", "x": 10.5, "y": 2.5 },
{ "label": "{", "x": 11.5, "y": 2.5 },
{ "label": "}", "x": 12.5, "y": 2.5 },
{ "label": "|", "x": 13.5, "y": 2.5, "w": 1.5 },
{ "label": "Delete", "x": 15.25, "y": 2.5 },
{ "label": "End", "x": 16.25, "y": 2.5 },
{ "label": "PgDn", "x": 17.25, "y": 2.5 },
{ "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 },
{ "label": "A", "x": 1.75, "y": 3.5 },
{ "label": "S", "x": 2.75, "y": 3.5 },
{ "label": "D", "x": 3.75, "y": 3.5 },
{ "label": "F", "x": 4.75, "y": 3.5 },
{ "label": "G", "x": 5.75, "y": 3.5 },
{ "label": "H", "x": 6.75, "y": 3.5 },
{ "label": "J", "x": 7.75, "y": 3.5 },
{ "label": "K", "x": 8.75, "y": 3.5 },
{ "label": "L", "x": 9.75, "y": 3.5 },
{ "label": ":", "x": 10.75, "y": 3.5 },
{ "label": "\"", "x": 11.75, "y": 3.5 },
{ "label": "Enter", "x": 12.75, "y": 3.5, "w": 2.25 },
{ "label": "Shift", "x": 0, "y": 4.5, "w": 2.25 },
{ "label": "Z", "x": 2.25, "y": 4.5 },
{ "label": "X", "x": 3.25, "y": 4.5 },
{ "label": "C", "x": 4.25, "y": 4.5 },
{ "label": "V", "x": 5.25, "y": 4.5 },
{ "label": "B", "x": 6.25, "y": 4.5 },
{ "label": "N", "x": 7.25, "y": 4.5 },
{ "label": "M", "x": 8.25, "y": 4.5 },
{ "label": "<", "x": 9.25, "y": 4.5 },
{ "label": ">", "x": 10.25, "y": 4.5 },
{ "label": "?", "x": 11.25, "y": 4.5 },
{ "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 },
{ "label": "\u2191", "x": 16.25, "y": 4.5 },
{ "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25 },
{ "label": "Win", "x": 1.25, "y": 5.5, "w": 1.25 },
{ "label": "Alt", "x": 2.5, "y": 5.5, "w": 1.25 },
{ "x": 3.75, "y": 5.5, "w": 6.25 },
{ "label": "Alt", "x": 10, "y": 5.5, "w": 1.25 },
{ "label": "Fn", "x": 11.25, "y": 5.5, "w": 1.25 },
{ "label": "Menu", "x": 12.5, "y": 5.5, "w": 1.25 },
{ "label": "Ctrl", "x": 13.75, "y": 5.5, "w": 1.25 },
{ "label": "\u2190", "x": 15.25, "y": 5.5 },
{ "label": "\u2193", "x": 16.25, "y": 5.5 },
{ "label": "\u2192", "x": 17.25, "y": 5.5 }
]
},
"LAYOUT_tkl_iso": {
"layout": [
{ "label": "Esc", "x": 0, "y": 0 },
{ "label": "F1", "x": 2, "y": 0 },
{ "label": "F2", "x": 3, "y": 0 },
{ "label": "F3", "x": 4, "y": 0 },
{ "label": "F4", "x": 5, "y": 0 },
{ "label": "F5", "x": 6.5, "y": 0 },
{ "label": "F6", "x": 7.5, "y": 0 },
{ "label": "F7", "x": 8.5, "y": 0 },
{ "label": "F8", "x": 9.5, "y": 0 },
{ "label": "F9", "x": 11, "y": 0 },
{ "label": "F10", "x": 12, "y": 0 },
{ "label": "F11", "x": 13, "y": 0 },
{ "label": "F12", "x": 14, "y": 0 },
{ "label": "PrtSc", "x": 15.25, "y": 0 },
{ "label": "Scroll Lock", "x": 16.25, "y": 0 },
{ "label": "Pause", "x": 17.25, "y": 0 },
{ "label": "~", "x": 0, "y": 1.5 },
{ "label": "!", "x": 1, "y": 1.5 },
{ "label": "@", "x": 2, "y": 1.5 },
{ "label": "#", "x": 3, "y": 1.5 },
{ "label": "$", "x": 4, "y": 1.5 },
{ "label": "%", "x": 5, "y": 1.5 },
{ "label": "^", "x": 6, "y": 1.5 },
{ "label": "&", "x": 7, "y": 1.5 },
{ "label": "*", "x": 8, "y": 1.5 },
{ "label": "(", "x": 9, "y": 1.5 },
{ "label": ")", "x": 10, "y": 1.5 },
{ "label": "_", "x": 11, "y": 1.5 },
{ "label": "+", "x": 12, "y": 1.5 },
{ "label": "Backspace", "x": 13, "y": 1.5, "w": 2 },
{ "label": "Insert", "x": 15.25, "y": 1.5 },
{ "label": "Home", "x": 16.25, "y": 1.5 },
{ "label": "PgUp", "x": 17.25, "y": 1.5 },
{ "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 },
{ "label": "Q", "x": 1.5, "y": 2.5 },
{ "label": "W", "x": 2.5, "y": 2.5 },
{ "label": "E", "x": 3.5, "y": 2.5 },
{ "label": "R", "x": 4.5, "y": 2.5 },
{ "label": "T", "x": 5.5, "y": 2.5 },
{ "label": "Y", "x": 6.5, "y": 2.5 },
{ "label": "U", "x": 7.5, "y": 2.5 },
{ "label": "I", "x": 8.5, "y": 2.5 },
{ "label": "O", "x": 9.5, "y": 2.5 },
{ "label": "P", "x": 10.5, "y": 2.5 },
{ "label": "{", "x": 11.5, "y": 2.5 },
{ "label": "}", "x": 12.5, "y": 2.5 },
{ "label": "Delete", "x": 15.25, "y": 2.5 },
{ "label": "End", "x": 16.25, "y": 2.5 },
{ "label": "PgDn", "x": 17.25, "y": 2.5 },
{ "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 },
{ "label": "A", "x": 1.75, "y": 3.5 },
{ "label": "S", "x": 2.75, "y": 3.5 },
{ "label": "D", "x": 3.75, "y": 3.5 },
{ "label": "F", "x": 4.75, "y": 3.5 },
{ "label": "G", "x": 5.75, "y": 3.5 },
{ "label": "H", "x": 6.75, "y": 3.5 },
{ "label": "J", "x": 7.75, "y": 3.5 },
{ "label": "K", "x": 8.75, "y": 3.5 },
{ "label": "L", "x": 9.75, "y": 3.5 },
{ "label": ":", "x": 10.75, "y": 3.5 },
{ "label": "\"", "x": 11.75, "y": 3.5 },
{ "label": "#", "x": 12.75, "y": 3.5 },
{ "label": "Enter", "x": 13.75, "y": 2.5, "w": 1.25, "h": 2 },
{ "label": "Shift", "x": 0, "y": 4.5, "w": 1.25 },
{ "label": "\\", "x": 1.25, "y": 4.5 },
{ "label": "Z", "x": 2.25, "y": 4.5 },
{ "label": "X", "x": 3.25, "y": 4.5 },
{ "label": "C", "x": 4.25, "y": 4.5 },
{ "label": "V", "x": 5.25, "y": 4.5 },
{ "label": "B", "x": 6.25, "y": 4.5 },
{ "label": "N", "x": 7.25, "y": 4.5 },
{ "label": "M", "x": 8.25, "y": 4.5 },
{ "label": "<", "x": 9.25, "y": 4.5 },
{ "label": ">", "x": 10.25, "y": 4.5 },
{ "label": "?", "x": 11.25, "y": 4.5 },
{ "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 },
{ "label": "\u2191", "x": 16.25, "y": 4.5 },
{ "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25 },
{ "label": "Win", "x": 1.25, "y": 5.5, "w": 1.25 },
{ "label": "Alt", "x": 2.5, "y": 5.5, "w": 1.25 },
{ "x": 3.75, "y": 5.5, "w": 6.25 },
{ "label": "Alt", "x": 10, "y": 5.5, "w": 1.25 },
{ "label": "Fn", "x": 11.25, "y": 5.5, "w": 1.25 },
{ "label": "Menu", "x": 12.5, "y": 5.5, "w": 1.25 },
{ "label": "Ctrl", "x": 13.75, "y": 5.5, "w": 1.25 },
{ "label": "\u2190", "x": 15.25, "y": 5.5 },
{ "label": "\u2193", "x": 16.25, "y": 5.5 },
{ "label": "\u2192", "x": 17.25, "y": 5.5 }
]
},
"LAYOUT_tkl": {
"layout": [
{ "label": "Esc", "x": 0, "y": 0 },
{ "label": "F1", "x": 2, "y": 0 },
{ "label": "F2", "x": 3, "y": 0 },
{ "label": "F3", "x": 4, "y": 0 },
{ "label": "F4", "x": 5, "y": 0 },
{ "label": "F5", "x": 6.5, "y": 0 },
{ "label": "F6", "x": 7.5, "y": 0 },
{ "label": "F7", "x": 8.5, "y": 0 },
{ "label": "F8", "x": 9.5, "y": 0 },
{ "label": "F9", "x": 11, "y": 0 },
{ "label": "F10", "x": 12, "y": 0 },
{ "label": "F11", "x": 13, "y": 0 },
{ "label": "F12", "x": 14, "y": 0 },
{ "label": "PrtSc", "x": 15.25, "y": 0 },
{ "label": "Scroll Lock", "x": 16.25, "y": 0 },
{ "label": "Pause", "x": 17.25, "y": 0 },
{ "label": "~", "x": 0, "y": 1.5 },
{ "label": "!", "x": 1, "y": 1.5 },
{ "label": "@", "x": 2, "y": 1.5 },
{ "label": "#", "x": 3, "y": 1.5 },
{ "label": "$", "x": 4, "y": 1.5 },
{ "label": "%", "x": 5, "y": 1.5 },
{ "label": "^", "x": 6, "y": 1.5 },
{ "label": "&", "x": 7, "y": 1.5 },
{ "label": "*", "x": 8, "y": 1.5 },
{ "label": "(", "x": 9, "y": 1.5 },
{ "label": ")", "x": 10, "y": 1.5 },
{ "label": "_", "x": 11, "y": 1.5 },
{ "label": "+", "x": 12, "y": 1.5 },
{ "label": "Backspace", "x": 13, "y": 1.5, "w": 2 },
{ "label": "Insert", "x": 15.25, "y": 1.5 },
{ "label": "Home", "x": 16.25, "y": 1.5 },
{ "label": "PgUp", "x": 17.25, "y": 1.5 },
{ "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 },
{ "label": "Q", "x": 1.5, "y": 2.5 },
{ "label": "W", "x": 2.5, "y": 2.5 },
{ "label": "E", "x": 3.5, "y": 2.5 },
{ "label": "R", "x": 4.5, "y": 2.5 },
{ "label": "T", "x": 5.5, "y": 2.5 },
{ "label": "Y", "x": 6.5, "y": 2.5 },
{ "label": "U", "x": 7.5, "y": 2.5 },
{ "label": "I", "x": 8.5, "y": 2.5 },
{ "label": "O", "x": 9.5, "y": 2.5 },
{ "label": "P", "x": 10.5, "y": 2.5 },
{ "label": "{", "x": 11.5, "y": 2.5 },
{ "label": "}", "x": 12.5, "y": 2.5 },
{ "label": "|", "x": 13.5, "y": 2.5, "w": 1.5 },
{ "label": "Delete", "x": 15.25, "y": 2.5 },
{ "label": "End", "x": 16.25, "y": 2.5 },
{ "label": "PgDn", "x": 17.25, "y": 2.5 },
{ "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 },
{ "label": "A", "x": 1.75, "y": 3.5 },
{ "label": "S", "x": 2.75, "y": 3.5 },
{ "label": "D", "x": 3.75, "y": 3.5 },
{ "label": "F", "x": 4.75, "y": 3.5 },
{ "label": "G", "x": 5.75, "y": 3.5 },
{ "label": "H", "x": 6.75, "y": 3.5 },
{ "label": "J", "x": 7.75, "y": 3.5 },
{ "label": "K", "x": 8.75, "y": 3.5 },
{ "label": "L", "x": 9.75, "y": 3.5 },
{ "label": ":", "x": 10.75, "y": 3.5 },
{ "label": "\"", "x": 11.75, "y": 3.5 },
{ "label": "#", "x": 12.75, "y": 3.5 },
{ "label": "Enter", "x": 13.75, "y": 3.5, "w": 1.25 },
{ "label": "Shift", "x": 0, "y": 4.5, "w": 1.25 },
{ "label": "\\", "x": 1.25, "y": 4.5 },
{ "label": "Z", "x": 2.25, "y": 4.5 },
{ "label": "X", "x": 3.25, "y": 4.5 },
{ "label": "C", "x": 4.25, "y": 4.5 },
{ "label": "V", "x": 5.25, "y": 4.5 },
{ "label": "B", "x": 6.25, "y": 4.5 },
{ "label": "N", "x": 7.25, "y": 4.5 },
{ "label": "M", "x": 8.25, "y": 4.5 },
{ "label": "<", "x": 9.25, "y": 4.5 },
{ "label": ">", "x": 10.25, "y": 4.5 },
{ "label": "?", "x": 11.25, "y": 4.5 },
{ "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 },
{ "label": "\u2191", "x": 16.25, "y": 4.5 },
{ "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25 },
{ "label": "Win", "x": 1.25, "y": 5.5, "w": 1.25 },
{ "label": "Alt", "x": 2.5, "y": 5.5, "w": 1.25 },
{ "x": 3.75, "y": 5.5, "w": 6.25 },
{ "label": "Alt", "x": 10, "y": 5.5, "w": 1.25 },
{ "label": "Fn", "x": 11.25, "y": 5.5, "w": 1.25 },
{ "label": "Menu", "x": 12.5, "y": 5.5, "w": 1.25 },
{ "label": "Ctrl", "x": 13.75, "y": 5.5, "w": 1.25 },
{ "label": "\u2190", "x": 15.25, "y": 5.5 },
{ "label": "\u2193", "x": 16.25, "y": 5.5 },
{ "label": "\u2192", "x": 17.25, "y": 5.5 }
]
},
"LAYOUT_all": {
"layout": [
{ "label": "Esc", "x": 0, "y": 0 },
{ "label": "F1", "x": 2, "y": 0 },
{ "label": "F2", "x": 3, "y": 0 },
{ "label": "F3", "x": 4, "y": 0 },
{ "label": "F4", "x": 5, "y": 0 },
{ "label": "F5", "x": 6.5, "y": 0 },
{ "label": "F6", "x": 7.5, "y": 0 },
{ "label": "F7", "x": 8.5, "y": 0 },
{ "label": "F8", "x": 9.5, "y": 0 },
{ "label": "F9", "x": 11, "y": 0 },
{ "label": "F10", "x": 12, "y": 0 },
{ "label": "F11", "x": 13, "y": 0 },
{ "label": "F12", "x": 14, "y": 0 },
{ "label": "PrtSc", "x": 15.25, "y": 0 },
{ "label": "Scroll Lock", "x": 16.25, "y": 0 },
{ "label": "Pause", "x": 17.25, "y": 0 },
{ "label": "~", "x": 0, "y": 1.5 },
{ "label": "!", "x": 1, "y": 1.5 },
{ "label": "@", "x": 2, "y": 1.5 },
{ "label": "#", "x": 3, "y": 1.5 },
{ "label": "$", "x": 4, "y": 1.5 },
{ "label": "%", "x": 5, "y": 1.5 },
{ "label": "^", "x": 6, "y": 1.5 },
{ "label": "&", "x": 7, "y": 1.5 },
{ "label": "*", "x": 8, "y": 1.5 },
{ "label": "(", "x": 9, "y": 1.5 },
{ "label": ")", "x": 10, "y": 1.5 },
{ "label": "_", "x": 11, "y": 1.5 },
{ "label": "+", "x": 12, "y": 1.5 },
{ "label": "Backspace", "x": 13, "y": 1.5, "w": 2 },
{ "label": "Insert", "x": 15.25, "y": 1.5 },
{ "label": "Home", "x": 16.25, "y": 1.5 },
{ "label": "PgUp", "x": 17.25, "y": 1.5 },
{ "label": "Num Lock", "x": 18.5, "y": 1.5 },
{ "label": "/", "x": 19.5, "y": 1.5 },
{ "label": "*", "x": 20.5, "y": 1.5 },
{ "label": "-", "x": 21.5, "y": 1.5 },
{ "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 },
{ "label": "Q", "x": 1.5, "y": 2.5 },
{ "label": "W", "x": 2.5, "y": 2.5 },
{ "label": "E", "x": 3.5, "y": 2.5 },
{ "label": "R", "x": 4.5, "y": 2.5 },
{ "label": "T", "x": 5.5, "y": 2.5 },
{ "label": "Y", "x": 6.5, "y": 2.5 },
{ "label": "U", "x": 7.5, "y": 2.5 },
{ "label": "I", "x": 8.5, "y": 2.5 },
{ "label": "O", "x": 9.5, "y": 2.5 },
{ "label": "P", "x": 10.5, "y": 2.5 },
{ "label": "{", "x": 11.5, "y": 2.5 },
{ "label": "}", "x": 12.5, "y": 2.5 },
{ "label": "|", "x": 13.5, "y": 2.5, "w": 1.5 },
{ "label": "Delete", "x": 15.25, "y": 2.5 },
{ "label": "End", "x": 16.25, "y": 2.5 },
{ "label": "PgDn", "x": 17.25, "y": 2.5 },
{ "label": "7", "x": 18.5, "y": 2.5 },
{ "label": "8", "x": 19.5, "y": 2.5 },
{ "label": "9", "x": 20.5, "y": 2.5 },
{ "label": "+", "x": 21.5, "y": 2.5, "h": 2 },
{ "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 },
{ "label": "A", "x": 1.75, "y": 3.5 },
{ "label": "S", "x": 2.75, "y": 3.5 },
{ "label": "D", "x": 3.75, "y": 3.5 },
{ "label": "F", "x": 4.75, "y": 3.5 },
{ "label": "G", "x": 5.75, "y": 3.5 },
{ "label": "H", "x": 6.75, "y": 3.5 },
{ "label": "J", "x": 7.75, "y": 3.5 },
{ "label": "K", "x": 8.75, "y": 3.5 },
{ "label": "L", "x": 9.75, "y": 3.5 },
{ "label": ":", "x": 10.75, "y": 3.5 },
{ "label": "\"", "x": 11.75, "y": 3.5 },
{ "label": "#", "x": 12.75, "y": 3.5 },
{ "label": "Enter", "x": 13.75, "y": 3.5, "w": 1.25 },
{ "label": "4", "x": 18.5, "y": 3.5 },
{ "label": "5", "x": 19.5, "y": 3.5 },
{ "label": "6", "x": 20.5, "y": 3.5 },
{ "label": "Shift", "x": 0, "y": 4.5, "w": 1.25 },
{ "label": "\\", "x": 1.25, "y": 4.5 },
{ "label": "Z", "x": 2.25, "y": 4.5 },
{ "label": "X", "x": 3.25, "y": 4.5 },
{ "label": "C", "x": 4.25, "y": 4.5 },
{ "label": "V", "x": 5.25, "y": 4.5 },
{ "label": "B", "x": 6.25, "y": 4.5 },
{ "label": "N", "x": 7.25, "y": 4.5 },
{ "label": "M", "x": 8.25, "y": 4.5 },
{ "label": "<", "x": 9.25, "y": 4.5 },
{ "label": ">", "x": 10.25, "y": 4.5 },
{ "label": "?", "x": 11.25, "y": 4.5 },
{ "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 },
{ "label": "\u2191", "x": 16.25, "y": 4.5 },
{ "label": "1", "x": 18.5, "y": 4.5 },
{ "label": "2", "x": 19.5, "y": 4.5 },
{ "label": "3", "x": 20.5, "y": 4.5 },
{ "label": "Enter", "x": 21.5, "y": 4.5, "h": 2 },
{ "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25 },
{ "label": "Win", "x": 1.25, "y": 5.5, "w": 1.25 },
{ "label": "Alt", "x": 2.5, "y": 5.5, "w": 1.25 },
{ "x": 3.75, "y": 5.5, "w": 6.25 },
{ "label": "Alt", "x": 10, "y": 5.5, "w": 1.25 },
{ "label": "Fn", "x": 11.25, "y": 5.5, "w": 1.25 },
{ "label": "Menu", "x": 12.5, "y": 5.5, "w": 1.25 },
{ "label": "Ctrl", "x": 13.75, "y": 5.5, "w": 1.25 },
{ "label": "\u2190", "x": 15.25, "y": 5.5 },
{ "label": "\u2193", "x": 16.25, "y": 5.5 },
{ "label": "\u2192", "x": 17.25, "y": 5.5 },
{ "label": "0", "x": 18.5, "y": 5.5, "w": 2 },
{ "label": ".", "x": 20.5, "y": 5.5 }
]
}
}
}

View file

@ -1,4 +1,5 @@
/* Copyright 2021 kuenhlee and Don Kjer /* Copyright 2021 Don Kjer and Tyler Tidman
* Copyright 2021 Simon Arlott
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -13,26 +14,9 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#pragma once #pragma once
#include "quantum.h"
#ifndef WINLOCK_DISABLED
// Define the TGUI key here so it is available in QMK configurator
enum K320_keycodes {
KC_TGUI = SAFE_RANGE, // Toggle between GUI Lock or Unlock
NEW_SAFE_RANGE
};
#undef SAFE_RANGE
#define SAFE_RANGE NEW_SAFE_RANGE
#endif /* WINLOCK_DISABLED */
/* Function Prototype */
void off_all_leds(void);
void on_all_leds(void);
#define XXX KC_NO #define XXX KC_NO
// This a shortcut to help you visually see your layout. // This a shortcut to help you visually see your layout.
@ -53,7 +37,6 @@ void on_all_leds(void);
{ XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, K6F } \ { XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, K6F } \
} }
// This a shortcut to help you visually see your layout. // This a shortcut to help you visually see your layout.
#define LAYOUT_tkl_iso( \ #define LAYOUT_tkl_iso( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
@ -72,9 +55,8 @@ void on_all_leds(void);
{ XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, K6F } \ { XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, K6F } \
} }
// This a shortcut to help you visually see your layout. // This a shortcut to help you visually see your layout.
#define LAYOUT_all( \ #define LAYOUT_tkl( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, K2E, K2F, K1F, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, K2E, K2F, K1F, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K3D, K3E, K3F, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K3D, K3E, K3F, \
@ -90,3 +72,21 @@ void on_all_leds(void);
{ K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F }, \ { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F }, \
{ XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, K6F } \ { XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, K6F } \
} }
// This a shortcut to help you visually see your layout.
#define LAYOUT_all( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, K2E, K2F, K1F, K6A, K69, K68, K67, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K3D, K3E, K3F, K7A, K79, K78, K6B, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K4E, K7E, K7D, K7C, \
K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, K6E, K6D, K6C, K7B, \
K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K6F, K7F, K77 \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, XXX, K1E, K1F }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, XXX, K4D, K4E, K4F }, \
{ K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, K5A, K5B, K5C, K5D, K5E, K5F }, \
{ XXX, XXX, XXX, XXX, XXX, XXX, XXX, K67, K68, K69, K6A, K6B, K6C, K6D, K6E, K6F } \
}

View file

@ -0,0 +1,10 @@
# Taurus K320
This code is shared between all K320 variants. Currently only the base model with no backlight is supported.
* Keyboard Maintainers: [dkjer](https://github.com/dkjer) and [tylert](https://github.com/tylert)
* Hardware Supported: Durgod Taurus K320 board with STM32F070RBT6
* Hardware Availability: Base https://www.amazon.com/Durgod-Taurus-Corona-Mechanical-Keyboard/dp/B078H3WPHM
Instructions for building the K320 firmware can be found here:
* [No Backlight](base/readme.md)

View file

@ -0,0 +1,4 @@
# Default to the base model
DEFAULT_FOLDER=durgod/k3x0/k320/base
LAYOUTS = tkl_ansi tkl_iso

View file

@ -1,4 +1,5 @@
/* Copyright 2021 kuenhlee and Don Kjer /* Copyright 2021 kuenhlee, Don Kjer, Tyler Tidman
* Copyright 2021 Simon Arlott
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -14,10 +15,15 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "k320.h" #include "k3x0.h"
#include <ch.h>
#include <hal.h>
/* Private Functions */ /* Private Functions */
void off_all_leds(void) { void off_all_leds(void) {
#ifdef LED_NUM_LOCK_PIN
writePinHigh(LED_NUM_LOCK_PIN);
#endif
writePinHigh(LED_CAPS_LOCK_PIN); writePinHigh(LED_CAPS_LOCK_PIN);
writePinHigh(LED_SCROLL_LOCK_PIN); writePinHigh(LED_SCROLL_LOCK_PIN);
writePinHigh(LED_WIN_LOCK_PIN); writePinHigh(LED_WIN_LOCK_PIN);
@ -25,6 +31,9 @@ void off_all_leds(void) {
} }
void on_all_leds(void) { void on_all_leds(void) {
#ifdef LED_NUM_LOCK_PIN
writePinLow(LED_NUM_LOCK_PIN);
#endif
writePinLow(LED_CAPS_LOCK_PIN); writePinLow(LED_CAPS_LOCK_PIN);
writePinLow(LED_SCROLL_LOCK_PIN); writePinLow(LED_SCROLL_LOCK_PIN);
writePinLow(LED_WIN_LOCK_PIN); writePinLow(LED_WIN_LOCK_PIN);
@ -33,6 +42,9 @@ void on_all_leds(void) {
/* WinLock and MR LEDs are non-standard. Need to override led init */ /* WinLock and MR LEDs are non-standard. Need to override led init */
void led_init_ports(void) { void led_init_ports(void) {
#ifdef LED_NUM_LOCK_PIN
setPinOutput(LED_NUM_LOCK_PIN);
#endif
setPinOutput(LED_CAPS_LOCK_PIN); setPinOutput(LED_CAPS_LOCK_PIN);
setPinOutput(LED_SCROLL_LOCK_PIN); setPinOutput(LED_SCROLL_LOCK_PIN);
setPinOutput(LED_WIN_LOCK_PIN); setPinOutput(LED_WIN_LOCK_PIN);
@ -40,7 +52,6 @@ void led_init_ports(void) {
off_all_leds(); off_all_leds();
} }
#ifndef WINLOCK_DISABLED #ifndef WINLOCK_DISABLED
static bool win_key_locked = false; static bool win_key_locked = false;
@ -60,3 +71,26 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
return process_record_user(keycode, record); return process_record_user(keycode, record);
} }
#endif /* WINLOCK_DISABLED */ #endif /* WINLOCK_DISABLED */
#ifndef HW_RESET_PIN_DISABLED
static void hardware_reset_cb(void *arg) {
chSysLockFromISR();
bootloader_jump();
chSysUnlockFromISR();
}
#endif
void keyboard_pre_init_kb(void) {
setPinInputHigh(HARDWARE_RESET_PIN);
#ifndef HW_RESET_PIN_DISABLED
/* Jump to bootloader when the hardware reset button is pressed */
palEnablePadEvent(PAL_PORT(HARDWARE_RESET_PIN), PAL_PAD(HARDWARE_RESET_PIN), PAL_EVENT_MODE_FALLING_EDGE);
palSetPadCallback(PAL_PORT(HARDWARE_RESET_PIN), PAL_PAD(HARDWARE_RESET_PIN), hardware_reset_cb, NULL);
/* The interrupt is edge-triggered so check that it's not already pressed */
if (!readPin(HARDWARE_RESET_PIN)) {
bootloader_jump();
}
#endif
}

View file

@ -0,0 +1,47 @@
/* Copyright 2021 kuenhlee, Don Kjer, Tyler Tidman
* Copyright 2021 Simon Arlott
*
* 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"
#ifdef KEYBOARD_durgod_k3x0_k310
# include "k310.h"
#elif KEYBOARD_durgod_k3x0_k320
# include "k320.h"
#endif
#ifndef WINLOCK_DISABLED
// Define the TGUI key here so it is available in QMK configurator
enum K3x0_keycodes {
#ifdef VIA_ENABLE
KC_TGUI = USER00, // Toggle between GUI Lock or Unlock
NEW_SAFE_RANGE = SAFE_RANGE
#else
KC_TGUI = SAFE_RANGE, // Toggle between GUI Lock or Unlock
NEW_SAFE_RANGE
#endif
};
#undef SAFE_RANGE
#define SAFE_RANGE NEW_SAFE_RANGE
#endif /* WINLOCK_DISABLED */
/* Function Prototype */
void off_all_leds(void);
void on_all_leds(void);

View file

@ -0,0 +1,373 @@
/* Copyright 2021 Don Kjer and Tyler Tidman
*
* 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 shorthand
enum _layer {
_WBL,
_WFL,
_WSL,
_MBL,
_MFL,
_MSL
};
#ifndef DEFAULT_LAYOUT
# define DEFAULT_LAYOUT _WBL // Change to _MBL to boot into Mac layout.
#endif
#ifndef ALT_LAYOUT
# define ALT_LAYOUT _MBL // Layout to display 'MR' led when active.
#endif
static bool win_key_locked = false;
static bool mac_media_locked = false;
static bool win_appkey_pressed = false;
static bool mac_fnkey_pressed = false;
// Defines the keycodes used by our macros in process_record_user
enum custom_keycodes {
KC_TGUI = SAFE_RANGE, // Toggle between GUI Lock or Unlock (Windows)
KC_TMED, // Toggle between Fx keys or Media keys (Mac)
KC_WFN, // Windows function key
KC_MFN, // Mac function key
MO_WSL, // Windows system key
MO_MSL, // Mac system key
DF_W2MBL, // Change layout from Windows to Mac
DF_M2WBL // Change layout from Mac to Windows
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _WBL: Windows Base Layer (Default Layer)
*
* Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12 PScSlkPse
*
*
* ` 1 2 3 4 5 6 7 8 9 0 - = Backsp InsHomPgU Num / * -
*
* Tab Q W E R T Y U I O P [ ] \ DelEndPgD 7 8 9
* +
* Caps A S D F G H J K L ; ' # Entr 4 5 6
*
* Shft \ Z X C V B N M , . / Shift 1 2 3
* Ent
* CtrlGUI Alt AltFunc AppCtrl 0 .
*
*/
[_WBL] = LAYOUT_all( /* Windows Base Layer */
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_WFN, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
),
/* Keymap _WFL: Windows Function Layer
*
* PlyStpPrvNxt MutVo+Vo- Mut
*
*
* Vo+
*
* Vo-
*
*
*
*
*
* Lock Func Sys
*
*/
[_WFL] = LAYOUT_all( /* Windows Function Layer */
_______, KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, KC_MUTE,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_TGUI, _______, _______, _______, _______, MO_WSL, _______, _______, _______, _______, _______, _______
),
/* Keymap _WSL: Windows System Layer
*
* Rst Slp Pwr MAC
*
*
*
*
*
*
* DBG
*
*
*
*
*
*/
[_WSL] = LAYOUT_all( /* Windows Second / System Layer */
RESET, KC_SLEP, XXXXXXX, XXXXXXX, KC_PWR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF_W2MBL, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, DEBUG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
/* Keymap _MBL: Mac Base Layer (Alternate Layout)
*
* Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12 F13F14F15
*
*
* ` 1 2 3 4 5 6 7 8 9 0 - = Backsp InsHomPgU Num / * -
*
* Tab Q W E R T Y U I O P [ ] \ DelEndPgD 7 8 9
* +
* Caps A S D F G H J K L ; ' # Entr 4 5 6
*
* Shft \ Z X C V B N M , . / Shift 1 2 3
* Ent
* CtrlAlt GUI GUI AltFuncCtrl 0 .
*
*/
[_MBL] = LAYOUT_all( /* Mac Base Layer */
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_MFN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
),
/* Keymap _MFL: Mac Function Layer
*
* Br-Br+ PrvPly NxtMutVo-Vo+ TMd Mut
*
*
* Vo+
*
* Vo-
*
*
*
*
*
* SysFunc
*
*/
[_MFL] = LAYOUT_all( /* Mac Function Layer */
_______, KC_BRID, KC_BRIU, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TMED, _______, KC_MUTE,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, MO_MSL, _______, _______, _______, _______, _______, _______, _______
),
/* Keymap _MSL: Mac System Layer
*
* Rst Slp WIN
*
*
*
*
*
*
* DBG
*
*
*
* SysFunc
*
*/
[_MSL] = LAYOUT_all( /* Mac Second / System Layer */
RESET, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF_M2WBL, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, DEBUG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
)
};
void unlock_win_key(void) {
win_key_locked = false;
mac_media_locked = false;
writePinHigh(LED_WIN_LOCK_PIN);
}
void toggle_lock_win_key(void) {
win_key_locked = !win_key_locked;
writePin(LED_WIN_LOCK_PIN, !win_key_locked);
}
void toggle_lock_media_key(void) {
mac_media_locked = !mac_media_locked;
writePin(LED_WIN_LOCK_PIN, !mac_media_locked);
}
#ifdef CONSOLE_ENABLE
void dprint_global_layers(void) {
dprint("Global Layers:");
if (IS_LAYER_ON(_WFL)) { dprint(" _WFL"); }
if (IS_LAYER_ON(_WSL)) { dprint(" _WSL"); }
if (IS_LAYER_ON(_MFL)) { dprint(" _MFL"); }
if (IS_LAYER_ON(_MSL)) { dprint(" _MSL"); }
dprintf("\n");
}
void dprint_layers(layer_state_t state) {
dprint("Layers:");
if (IS_LAYER_ON_STATE(state, _WFL)) { dprint(" _WFL"); }
if (IS_LAYER_ON_STATE(state, _WSL)) { dprint(" _WSL"); }
if (IS_LAYER_ON_STATE(state, _MFL)) { dprint(" _MFL"); }
if (IS_LAYER_ON_STATE(state, _MSL)) { dprint(" _MSL"); }
dprintf("\n");
}
#endif
layer_state_t default_layer_state_set_user(layer_state_t state) {
#ifdef CONSOLE_ENABLE
dprintf("default_layer_state_set_user: 0x%x\n", state);
dprint_global_layers();
#endif
// Disable windows key lock on default layer transition.
unlock_win_key();
win_appkey_pressed = false;
mac_fnkey_pressed = false;
writePin(LED_MR_LOCK_PIN, !IS_LAYER_ON_STATE(state, ALT_LAYOUT));
return state;
}
layer_state_t layer_state_set_user(layer_state_t state) {
#ifdef CONSOLE_ENABLE
dprintf("layer_state_set_user: 0x%x\n", state);
dprint_layers(state);
#endif
return state;
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_TGUI:
if (!record->event.pressed) {
// Toggle GUI lock on key release
toggle_lock_win_key();
}
break;
case KC_TMED:
// Only trigger when Fn key is also held down, to avoid accidental unlock.
if (!mac_fnkey_pressed) { return false; }
if (!record->event.pressed) {
// Toggle Media Lock on key release
toggle_lock_media_key();
}
break;
case KC_LGUI:
if (win_key_locked) { return false; }
break;
case KC_WFN:
// Like MO(_WFL), but also enables _WSL if KC_APP is already pressed down.
if (record->event.pressed) {
layer_on(_WFL);
if (win_appkey_pressed) {
// Also enable Secondary layer if App key is being held down.
win_appkey_pressed = false;
layer_on(_WSL);
}
} else {
if (IS_LAYER_ON(_WFL)) { layer_off(_WFL); }
if (IS_LAYER_ON(_MSL)) { layer_off(_MSL); }
}
break;
case KC_APP:
if (record->event.pressed) {
// Don't actually press down the app menu key
win_appkey_pressed = true;
} else {
if (IS_LAYER_ON(_WSL)) { layer_off(_WSL); }
if (IS_LAYER_ON(_MFL)) { layer_off(_MFL); }
if (win_appkey_pressed) {
win_appkey_pressed = false;
// Tap the KC_APP key on key release.
tap_code(KC_APP);
}
}
return false;
break;
case KC_MFN:
// Mac Fn key. Emit Fn keycode, and also transition layers similar to KC_WFN.
if (record->event.pressed) {
mac_fnkey_pressed = true;
layer_on(_MFL);
// Also enable Secondary layer if Right-Alt key is being held down.
if (get_mods() & MOD_BIT(KC_RALT)) {
layer_on(_MSL);
}
} else {
mac_fnkey_pressed = false;
if (!mac_media_locked) {
if (IS_LAYER_ON(_MFL)) { layer_off(_MFL); }
if (IS_LAYER_ON(_WSL)) { layer_off(_WSL); }
}
}
break;
case KC_RALT:
// Disable MSL/WFL layer on key-up.
if (!record->event.pressed) {
if (IS_LAYER_ON(_MSL)) { layer_off(_MSL); }
if (IS_LAYER_ON(_WFL)) { layer_off(_WFL); }
}
break;
case MO_WSL:
if (record->event.pressed) {
layer_on(_WSL);
} else {
if (IS_LAYER_ON(_WSL)) { layer_off(_WSL); }
if (IS_LAYER_ON(_MFL)) { layer_off(_MFL); }
}
break;
case MO_MSL:
if (record->event.pressed) {
layer_on(_MSL);
} else {
if (IS_LAYER_ON(_MSL)) { layer_off(_MSL); }
if (IS_LAYER_ON(_WFL)) { layer_off(_WFL); }
}
break;
case DF_W2MBL:
if (!record->event.pressed) {
// Switch base layer, but preserve first/secondary layers.
default_layer_set(1UL<<_MBL);
layer_state_set(1UL<<_MFL | 1UL<<_MSL);
}
break;
case DF_M2WBL:
if (!record->event.pressed) {
// Switch base layer, but preserve first/secondary layers.
default_layer_set(1UL<<_WBL);
layer_state_set(1UL<<_WFL | 1UL<<_WSL);
}
break;
case RESET:
if (record->event.pressed) {
// Flash LEDs to indicate bootloader mode is enabled.
on_all_leds();
}
break;
}
return true;
}
void keyboard_post_init_user(void) {
default_layer_set(1UL<<DEFAULT_LAYOUT);
}

View file

@ -1,8 +1,8 @@
# A keymap for Durgod Taurus K320 that supports toggling between Mac and Windows # A keymap for Durgod Taurus K310/K320 that supports toggling between Mac and Windows
Supports both ANSI and ISO layouts. Supports both ANSI and ISO layouts.
Layer 0 : Standard 87/88 keys TKL layout (Windows) Layer 0 : Standard layout (Windows)
Layer 1 : Media control and Windows lock key (Windows) Layer 1 : Media control and Windows lock key (Windows)
- Reusing Durgod's Original Media Control for Fn + F1 ~ Fn + F7 - Reusing Durgod's Original Media Control for Fn + F1 ~ Fn + F7
@ -14,7 +14,7 @@ Layer 2 : System layer (Windows)
- Fn + Menu + F4 : Turning Off System - Fn + Menu + F4 : Turning Off System
- Fn + Menu + F12 : Switch to Mac layout - Fn + Menu + F12 : Switch to Mac layout
Layer 3 : Mac 87/88 keys TKL layout Layer 3 : Mac layout
Layer 4 : Media control and Media lock key (Mac) Layer 4 : Media control and Media lock key (Mac)
- Standard Mac Media keys for Fn + F1 ~ Fn + F12. - Standard Mac Media keys for Fn + F1 ~ Fn + F12.
@ -39,14 +39,14 @@ You can change the default & alternate layout by setting the following flags to
For example, to configure Mac as the default layer, and Windows to be the alternate layout, compile with these flags: For example, to configure Mac as the default layer, and Windows to be the alternate layout, compile with these flags:
make EXTRAFLAGS="-DDEFAULT_LAYOUT=_MBL -DALT_LAYOUT=_WBL" durgod/k320:default_toggle_mac_windows make EXTRAFLAGS="-DDEFAULT_LAYOUT=_MBL -DALT_LAYOUT=_WBL" durgod/k3x0/k310:chimera
## Windows key lock ## Windows key lock
In windows layout, you can hold down Fn + Windows key to disable the Windows key while in locked mode. The 'Lock' LED In windows layout, you can hold down Fn + Windows key to disable the Windows key while in locked mode. The 'Lock' LED
indicates if the Windows key is locked. indicates if the Windows key is locked.
This is similar to the stock K320 Windows key lock functionality. This is similar to the stock K310/K320 Windows key lock functionality.
## Mac Media Lock ## Mac Media Lock

View file

@ -0,0 +1,26 @@
{
"keyboard": "durgod/k3x0",
"keymap": "default",
"layout": "LAYOUT_all",
"layers": [
[
"KC_ESC", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "KC_PSCR", "KC_SLCK", "KC_PAUS",
"KC_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", "KC_EQL", "KC_BSPC", "KC_INS", "KC_HOME", "KC_PGUP", "KC_NLCK", "KC_PSLS", "KC_PAST", "KC_PMNS",
"KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_LBRC", "KC_RBRC", "KC_BSLS", "KC_DEL", "KC_END", "KC_PGDN", "KC_P7", "KC_P8", "KC_P9", "KC_PPLS",
"KC_CAPS", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_NUHS", "KC_ENT", "KC_P4", "KC_P5", "KC_P6",
"KC_LSFT", "KC_NUBS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", "KC_UP", "KC_P1", "KC_P2", "KC_P3", "KC_PENT",
"KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "MO(1)", "KC_APP", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_P0", "KC_PDOT"
],
[
"_______", "KC_MPLY", "KC_MSTP", "KC_MPRV", "KC_MNXT", "KC_MUTE", "KC_VOLD", "KC_VOLU", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
"_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
"_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
"_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
"_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
"_______", "KC_TGUI", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______"
]
],
"author": "tylert",
"notes": "",
"version": 1
}

View file

@ -1,8 +1,8 @@
# The default keymap for Durgod Taurus K320. # The default keymap for Durgod Taurus K3X0 (K310, K320, etc.) without backlight
Supports both ANSI and ISO layouts. Supports both ANSI and ISO layouts.
Layer 0 : Standard 87/88 keys TKL layout (Windows) Layer 0 : Standard layout (Windows)
Layer 1 : Media control and Windows lock key Layer 1 : Media control and Windows lock key
- Reusing Durgod's Original Media Control for Fn + F1 ~ Fn + F7 - Reusing Durgod's Original Media Control for Fn + F1 ~ Fn + F7
@ -13,4 +13,4 @@ Layer 1 : Media control and Windows lock key
You can hold down Fn + Windows key to disable the Windows key while in locked mode. You can hold down Fn + Windows key to disable the Windows key while in locked mode.
The 'Lock' LED indicates if the Windows key is locked. The 'Lock' LED indicates if the Windows key is locked.
This is similar to the stock K320 Windows key lock functionality. This is similar to the stock K310/K320 Windows key lock functionality.

View file

@ -1,23 +1,23 @@
{ {
"keyboard": "durgod/k320", "keyboard": "durgod/k3x0",
"keymap": "default_mac", "keymap": "default_mac",
"layout": "LAYOUT_all", "layout": "LAYOUT_all",
"layers": [ "layers": [
[ [
"KC_ESC", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "KC_F13", "KC_F14", "KC_F15", "KC_ESC", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "KC_F13", "KC_F14", "KC_F15",
"KC_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", "KC_EQL", "KC_BSPC", "KC_INS", "KC_HOME", "KC_PGUP", "KC_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", "KC_EQL", "KC_BSPC", "KC_INS", "KC_HOME", "KC_PGUP", "KC_NLCK", "KC_PSLS", "KC_PAST", "KC_PMNS",
"KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_LBRC", "KC_RBRC", "KC_BSLS", "KC_DEL", "KC_END", "KC_PGDN", "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_LBRC", "KC_RBRC", "KC_BSLS", "KC_DEL", "KC_END", "KC_PGDN", "KC_P7", "KC_P8", "KC_P9", "KC_PPLS",
"KC_CAPS", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_NUHS", "KC_ENT", "KC_CAPS", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_NUHS", "KC_ENT", "KC_P4", "KC_P5", "KC_P6",
"KC_LSFT", "KC_NUBS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", "KC_UP", "KC_LSFT", "KC_NUBS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", "KC_UP", "KC_P1", "KC_P2", "KC_P3", "KC_PENT",
"KC_LCTL", "KC_LALT", "KC_LGUI", "KC_SPC", "KC_RGUI", "KC_RALT", "MO(1)", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT" "KC_LCTL", "KC_LALT", "KC_LGUI", "KC_SPC", "KC_RGUI", "KC_RALT", "MO(1)", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_P0", "KC_PDOT"
], ],
[ [
"KC_TRNS", "KC_MPLY", "KC_MSTP", "KC_MPRV", "KC_MNXT", "KC_MUTE", "KC_VOLD", "KC_VOLU", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MPLY", "KC_MSTP", "KC_MPRV", "KC_MNXT", "KC_MUTE", "KC_VOLD", "KC_VOLU", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "_______", "_______", "_______", "_______",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "_______", "_______", "_______", "_______",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "_______", "_______", "_______",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "_______", "_______", "_______", "_______",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS" "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "_______", "_______"
] ]
], ],
"author":"AlCutter", "author":"AlCutter",

View file

@ -0,0 +1,373 @@
/* Copyright 2021 Don Kjer and Tyler Tidman
*
* 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 shorthand
enum _layer {
_WBL,
_WFL,
_WSL,
_MBL,
_MFL,
_MSL
};
#ifndef DEFAULT_LAYOUT
# define DEFAULT_LAYOUT _WBL // Change to _MBL to boot into Mac layout.
#endif
#ifndef ALT_LAYOUT
# define ALT_LAYOUT _MBL // Layout to display 'MR' led when active.
#endif
static bool win_key_locked = false;
static bool mac_media_locked = false;
static bool win_appkey_pressed = false;
static bool mac_fnkey_pressed = false;
// Defines the keycodes used by our macros in process_record_user
enum custom_keycodes {
KC_TGUI = SAFE_RANGE, // Toggle between GUI Lock or Unlock (Windows)
KC_TMED, // Toggle between Fx keys or Media keys (Mac)
KC_WFN, // Windows function key
KC_MFN, // Mac function key
MO_WSL, // Windows system key
MO_MSL, // Mac system key
DF_W2MBL, // Change layout from Windows to Mac
DF_M2WBL // Change layout from Mac to Windows
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _WBL: Windows Base Layer (Default Layer)
*
* Esc M1 M3 M2 M4 M1 M3 M2 M4 M1 M3 M2 M4 PScSlkPse
*
*
* ` 1 2 3 4 5 6 7 8 9 0 - = Backsp InsHomPgU Num / * -
*
* Tab Q W E R T Y U I O P [ ] \ DelEndPgD 7 8 9
* +
* Caps A S D F G H J K L ; ' # Entr 4 5 6
*
* Shft \ Z X C V B N M , . / Shift 1 2 3
* Ent
* CtrlGUI Alt AltFunc AppCtrl 0 .
*
*/
[_WBL] = LAYOUT_all( /* Windows Base Layer */
KC_ESC, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN4, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN4, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN4, KC_PSCR, KC_SLCK, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_WFN, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
),
/* Keymap _WFL: Windows Function Layer
*
* F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12 Mut
*
*
* Vo+
*
* Vo-
*
*
*
*
*
* Lock Func Sys
*
*/
[_WFL] = LAYOUT_all( /* Windows Function Layer */
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_MUTE,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_TGUI, _______, _______, _______, _______, MO_WSL, _______, _______, _______, _______, _______, _______
),
/* Keymap _WSL: Windows System Layer
*
* Rst Slp Pwr MAC
*
*
*
*
*
*
* DBG
*
*
*
*
*
*/
[_WSL] = LAYOUT_all( /* Windows Second / System Layer */
RESET, KC_SLEP, XXXXXXX, XXXXXXX, KC_PWR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF_W2MBL, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, DEBUG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
/* Keymap _MBL: Mac Base Layer (Alternate Layout)
*
* Esc M1 M3 M2 M4 M1 M3 M2 M4 M1 M3 M2 M4 F13F14F15
*
*
* ` 1 2 3 4 5 6 7 8 9 0 - = Backsp InsHomPgU Num / * -
*
* Tab Q W E R T Y U I O P [ ] \ DelEndPgD 7 8 9
* +
* Caps A S D F G H J K L ; ' # Entr 4 5 6
*
* Shft \ Z X C V B N M , . / Shift 1 2 3
* Ent
* CtrlAlt GUI GUI AltFuncCtrl 0 .
*
*/
[_MBL] = LAYOUT_all( /* Mac Base Layer */
KC_ESC, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN4, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN4, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN4, KC_F13, KC_F14, KC_F15,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_MFN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
),
/* Keymap _MFL: Mac Function Layer
*
* F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12 TMd Mut
*
*
* Vo+
*
* Vo-
*
*
*
*
*
* SysFunc
*
*/
[_MFL] = LAYOUT_all( /* Mac Function Layer */
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TMED, _______, KC_MUTE,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, MO_MSL, _______, _______, _______, _______, _______, _______, _______
),
/* Keymap _MSL: Mac System Layer
*
* Rst Slp WIN
*
*
*
*
*
*
* DBG
*
*
*
* SysFunc
*
*/
[_MSL] = LAYOUT_all( /* Mac Second / System Layer */
RESET, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF_M2WBL, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, DEBUG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
)
};
void unlock_win_key(void) {
win_key_locked = false;
mac_media_locked = false;
writePinHigh(LED_WIN_LOCK_PIN);
}
void toggle_lock_win_key(void) {
win_key_locked = !win_key_locked;
writePin(LED_WIN_LOCK_PIN, !win_key_locked);
}
void toggle_lock_media_key(void) {
mac_media_locked = !mac_media_locked;
writePin(LED_WIN_LOCK_PIN, !mac_media_locked);
}
#ifdef CONSOLE_ENABLE
void dprint_global_layers(void) {
dprint("Global Layers:");
if (IS_LAYER_ON(_WFL)) { dprint(" _WFL"); }
if (IS_LAYER_ON(_WSL)) { dprint(" _WSL"); }
if (IS_LAYER_ON(_MFL)) { dprint(" _MFL"); }
if (IS_LAYER_ON(_MSL)) { dprint(" _MSL"); }
dprintf("\n");
}
void dprint_layers(layer_state_t state) {
dprint("Layers:");
if (IS_LAYER_ON_STATE(state, _WFL)) { dprint(" _WFL"); }
if (IS_LAYER_ON_STATE(state, _WSL)) { dprint(" _WSL"); }
if (IS_LAYER_ON_STATE(state, _MFL)) { dprint(" _MFL"); }
if (IS_LAYER_ON_STATE(state, _MSL)) { dprint(" _MSL"); }
dprintf("\n");
}
#endif
layer_state_t default_layer_state_set_user(layer_state_t state) {
#ifdef CONSOLE_ENABLE
dprintf("default_layer_state_set_user: 0x%x\n", state);
dprint_global_layers();
#endif
// Disable windows key lock on default layer transition.
unlock_win_key();
win_appkey_pressed = false;
mac_fnkey_pressed = false;
writePin(LED_MR_LOCK_PIN, !IS_LAYER_ON_STATE(state, ALT_LAYOUT));
return state;
}
layer_state_t layer_state_set_user(layer_state_t state) {
#ifdef CONSOLE_ENABLE
dprintf("layer_state_set_user: 0x%x\n", state);
dprint_layers(state);
#endif
return state;
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_TGUI:
if (!record->event.pressed) {
// Toggle GUI lock on key release
toggle_lock_win_key();
}
break;
case KC_TMED:
// Only trigger when Fn key is also held down, to avoid accidental unlock.
if (!mac_fnkey_pressed) { return false; }
if (!record->event.pressed) {
// Toggle Media Lock on key release
toggle_lock_media_key();
}
break;
case KC_LGUI:
if (win_key_locked) { return false; }
break;
case KC_WFN:
// Like MO(_WFL), but also enables _WSL if KC_APP is already pressed down.
if (record->event.pressed) {
layer_on(_WFL);
if (win_appkey_pressed) {
// Also enable Secondary layer if App key is being held down.
win_appkey_pressed = false;
layer_on(_WSL);
}
} else {
if (IS_LAYER_ON(_WFL)) { layer_off(_WFL); }
if (IS_LAYER_ON(_MSL)) { layer_off(_MSL); }
}
break;
case KC_APP:
if (record->event.pressed) {
// Don't actually press down the app menu key
win_appkey_pressed = true;
} else {
if (IS_LAYER_ON(_WSL)) { layer_off(_WSL); }
if (IS_LAYER_ON(_MFL)) { layer_off(_MFL); }
if (win_appkey_pressed) {
win_appkey_pressed = false;
// Tap the KC_APP key on key release.
tap_code(KC_APP);
}
}
return false;
break;
case KC_MFN:
// Mac Fn key. Emit Fn keycode, and also transition layers similar to KC_WFN.
if (record->event.pressed) {
mac_fnkey_pressed = true;
layer_on(_MFL);
// Also enable Secondary layer if Right-Alt key is being held down.
if (get_mods() & MOD_BIT(KC_RALT)) {
layer_on(_MSL);
}
} else {
mac_fnkey_pressed = false;
if (!mac_media_locked) {
if (IS_LAYER_ON(_MFL)) { layer_off(_MFL); }
if (IS_LAYER_ON(_WSL)) { layer_off(_WSL); }
}
}
break;
case KC_RALT:
// Disable MSL/WFL layer on key-up.
if (!record->event.pressed) {
if (IS_LAYER_ON(_MSL)) { layer_off(_MSL); }
if (IS_LAYER_ON(_WFL)) { layer_off(_WFL); }
}
break;
case MO_WSL:
if (record->event.pressed) {
layer_on(_WSL);
} else {
if (IS_LAYER_ON(_WSL)) { layer_off(_WSL); }
if (IS_LAYER_ON(_MFL)) { layer_off(_MFL); }
}
break;
case MO_MSL:
if (record->event.pressed) {
layer_on(_MSL);
} else {
if (IS_LAYER_ON(_MSL)) { layer_off(_MSL); }
if (IS_LAYER_ON(_WFL)) { layer_off(_WFL); }
}
break;
case DF_W2MBL:
if (!record->event.pressed) {
// Switch base layer, but preserve first/secondary layers.
default_layer_set(1UL<<_MBL);
layer_state_set(1UL<<_MFL | 1UL<<_MSL);
}
break;
case DF_M2WBL:
if (!record->event.pressed) {
// Switch base layer, but preserve first/secondary layers.
default_layer_set(1UL<<_WBL);
layer_state_set(1UL<<_WFL | 1UL<<_WSL);
}
break;
case RESET:
if (record->event.pressed) {
// Flash LEDs to indicate bootloader mode is enabled.
on_all_leds();
}
break;
}
return true;
}
void keyboard_post_init_user(void) {
default_layer_set(1UL<<DEFAULT_LAYOUT);
}

View file

@ -0,0 +1,65 @@
# A keymap for Durgod Taurus K310/K320 that supports toggling between Mac and Windows
Supports both ANSI and ISO layouts.
Layer 0 : Standard layout (Windows)
Layer 1 : Media control and Windows lock key (Windows)
- Reusing Durgod's Original Media Control for Fn + F1 ~ Fn + F7
- Fn + Windows to toggle Windows lock key functionality
Layer 2 : System layer (Windows)
- Fn + Menu + Esc : Bootloader mode
- Fn + Menu + F1 : System Sleep
- Fn + Menu + F4 : Turning Off System
- Fn + Menu + F12 : Switch to Mac layout
Layer 3 : Mac layout
Layer 4 : Media control and Media lock key (Mac)
- Standard Mac Media keys for Fn + F1 ~ Fn + F12.
- Fn + F13 to toggle Media lock key functionality
Layer 5 : System layer (Mac)
- Fn + R-ALT + Esc : Bootloader mode
- Fn + R-ALT + F4 : Shutdown/Sleep (Hold down on Mac)
- Fn + R-ALT + F12 : Switch to Windows layout
## Toggle between Mac and Windows layout
You can switch between Mac and Windows layout by doing the following:
- Hold down Fn + Menu (Windows Layout) or Fn + Right-Alt (Mac layout) (These are the same physical keys)
- Press F12
The 'M' led will be lit when you are using the alternate layout. By default Mac is the alternate layout.
You can change the default & alternate layout by setting the following flags to either '_WBL'(Windows) or '_MBL' (Mac)
- DEFAULT_LAYOUT (initial layout to use on boot)
- ALT_LAYOUT (layout that will light the 'M' LED when active)
For example, to configure Mac as the default layer, and Windows to be the alternate layout, compile with these flags:
make EXTRAFLAGS="-DDEFAULT_LAYOUT=_MBL -DALT_LAYOUT=_WBL" durgod/k3x0/k310:typhon
## Windows key lock
In windows layout, you can hold down Fn + Windows key to disable the Windows key while in locked mode. The 'Lock' LED
indicates if the Windows key is locked.
This is similar to the stock K310/K320 Windows key lock functionality.
## Mac Media Lock
To switch between Function row and Media row in Mac layout, press Fn + PrtSc. The 'Lock' LED indicator will be lit when in Media row mode.
### Subsequent Flashing
For repeating Flashing you have two options with this keymap:
1. Use BootMagic
- BootMagic Lite has been enabled with Assigned "Esc" key
- Unplug USB Cable
- Holding Esc Button
- Plug in USB Cable, Keyboard should be in ST-Bootloader state
2. Use key combination if using default keymap
- Hold down Fn + Menu (Windows Layout) or Fn + Right-Alt (Mac layout) (These are the same physical keys)
- Press Esc. Keyboard should go into booloader state.

View file

@ -0,0 +1,2 @@
OPT_DEFS += -DWINLOCK_DISABLED
MOUSEKEY_ENABLE = yes

View file

@ -0,0 +1,92 @@
/* Copyright 2021 Maxime Coirault, Don Kjer, Tyler Tidman
*
* 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 shorthand
enum _layer {
_BASE,
_FN,
_LAYER3,
_LAYER4
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BASE: Base Layer (Default Layer)
*
* Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12 PScSlkPse
*
*
* ` 1 2 3 4 5 6 7 8 9 0 - = Backsp InsHomPgU Num / * -
*
* Tab Q W E R T Y U I O P [ ] \ DelEndPgD 7 8 9
* +
* Caps A S D F G H J K L ; ' # Entr 4 5 6
*
* Shft \ Z X C V B N M , . / Shift 1 2 3
* Ent
* CtrlGUI Alt AltFunc AppCtrl 0 .
*
*/
[_BASE] = LAYOUT_all( /* Base Layer */
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
),
/* Keymap _FN: Function Layer
*
* PlyStpPrvNxt MutVo+Vo-
*
*
*
*
*
*
*
*
*
*
* Lock Func Sys
*
*/
[_FN] = LAYOUT_all( /* Function Layer */
_______, KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_TGUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_LAYER3] = LAYOUT_all( /* Layer 3 */
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_LAYER4] = LAYOUT_all( /* Layer 4 */
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View file

@ -0,0 +1,6 @@
# The via keymap for Durgod Taurus K310/K320.
Layer 0 : Standard layout
Layer 1 : Media control
- Reusing Durgod's Original Media Control for Fn + F1 ~ Fn + F7

View file

@ -0,0 +1 @@
VIA_ENABLE = yes

View file

@ -0,0 +1,51 @@
# K3X0 = K310, K320, etc.
This K3X0 code is shared between both the ANSI and ISO variants of both the
K310 full-sized 104/105-key and K320 TKL 87/88-key keyboards.
* Keyboard Maintainers: [dkjer](https://github.com/dkjer) and [tylert](https://github.com/tylert)
* Hardware Supported: Durgod Taurus K310 or K320 board with STM32F070RBT6
* Hardware Availability: K310 https://www.durgod.com/page9?product_id=53&_l=en
and K320 https://www.durgod.com/page9?product_id=47&_l=en
## Instructions
### Build
Instructions for building the K310 and K320 firmware can be found here:
* [K310](k310/readme.md)
* [K320](k320/readme.md)
### Initial Flash
For first Flashing from initial Stock Firmware
1. Back up original Firmware Image:
- Unplug
- Short Boot0 to Vdd (See below)
- Plug In USB
- Make a Flash Image's Backup in case you wanted to restore the Keyboard to Stock's Image:
- Using dfu-util:
dfu-util --list
dfu-util --alt 0 --dfuse-address 0x08000000 --upload ${OLD_STOCK_BIN}
2. Flash the QMK Firmware Image.
- Put board into Bootloader mode, using the same method as when backing up the original Firmware (above)
- Here are a few options for performing the initial Flash:
- Using [QMK Toolbox](https://github.com/qmk/qmk_toolbox)
- Using dfu-util:
dfu-util --alt 0 --dfuse-address 0x08000000 --download ${NEW_QMK_BIN}
You can short Boot0 to Vdd by shorting R21 to C27 on the sides closest to the processor, as shown:
<img src="https://i.imgur.com/hvDnw5a.jpg" width="520" height="693" alt="Shorting Boot0 to Vdd on K320">
### Subsequent Flashing
For repeating Flashing you can use BootMagic:
- BootMagic Lite has been enabled with Assigned "Esc" key
- Unplug USB Cable
- Holding Esc Button
- Plug in USB Cable, Keyboard should be in ST-Bootloader state

View file

@ -0,0 +1,28 @@
# Default to K310 variant, since it will also work on a K320
DEFAULT_FOLDER=durgod/k3x0/k310
# MCU name
# Actually F070, but close enough
MCU = STM32F072
BOARD = DURGOD_STM32_F070
# Bootloader selection
BOOTLOADER = stm32-dfu
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # 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 = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output
LTO_ENABLE = yes

View file

@ -92,6 +92,7 @@ enum layers {
#define MLT_E LT(_NUM, KC_E) #define MLT_E LT(_NUM, KC_E)
#ifndef SWAP_HANDS_ENABLE #ifndef SWAP_HANDS_ENABLE
#undef SH_T
#define SH_T #define SH_T
#endif #endif