From d1fb51976aeef8eeea5975c5bf75b6b1aa649826 Mon Sep 17 00:00:00 2001 From: Ole Anders Date: Mon, 6 Feb 2017 11:53:48 +0100 Subject: [PATCH] Added new keymap to the Satan GH60 keyboard. Added new keymap `Admiral Strokers` to the Satan keyboard. This is an ISO based layout with tap for brackets/ curly on shft and ctl keys. Furthermore, there is added arrows and media/volume/special/f-keys layer on the TAB button when you hold. --- .../satan/keymaps/admiralStrokers/Makefile | 26 +++ .../satan/keymaps/admiralStrokers/config.h | 96 +++++++++ .../satan/keymaps/admiralStrokers/keymap.c | 189 ++++++++++++++++++ .../satan/keymaps/admiralStrokers/readme.md | 13 ++ 4 files changed, 324 insertions(+) create mode 100644 keyboards/satan/keymaps/admiralStrokers/Makefile create mode 100644 keyboards/satan/keymaps/admiralStrokers/config.h create mode 100644 keyboards/satan/keymaps/admiralStrokers/keymap.c create mode 100644 keyboards/satan/keymaps/admiralStrokers/readme.md diff --git a/keyboards/satan/keymaps/admiralStrokers/Makefile b/keyboards/satan/keymaps/admiralStrokers/Makefile new file mode 100644 index 0000000000..18d2280d69 --- /dev/null +++ b/keyboards/satan/keymaps/admiralStrokers/Makefile @@ -0,0 +1,26 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Enables your LED to breathe while your computer is sleeping. +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODEMAP_ENABLE = no # This allows sending unicode symbols using X() in your keymap. +UNICODE_ENABLE = no # Unicode +UCIS_ENABLE = no # Keep in mind that not all will work (See WinCompose for details on Windows). +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +VARIABLE_TRACE = no # Use this to debug changes to variable values +API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/satan/keymaps/admiralStrokers/config.h b/keyboards/satan/keymaps/admiralStrokers/config.h new file mode 100644 index 0000000000..d0338fb7e9 --- /dev/null +++ b/keyboards/satan/keymaps/admiralStrokers/config.h @@ -0,0 +1,96 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#ifndef CONFIG_H_ADMSTROK +#define CONFIG_H_ADMSTROK + +#include "config_common.h" +#include "../../config.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0003 +#define MANUFACTURER SATAN +#define PRODUCT GH60 +#define DESCRIPTION QMK keyboard firmware for Satan GH60 with WS2812 support + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 14 + +// ROWS: Top to bottom, COLS: Left to right + +#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 } +#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3 } +#define UNUSED_PINS + +#define BACKLIGHT_PIN B6 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* Backlight configuration */ +#define BACKLIGHT_LEVELS 4 + +/* Underlight configuration */ +#define RGB_DI_PIN E2 +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 8 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +#define DISABLE_SPACE_CADET_ROLLOVER + + + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/satan/keymaps/admiralStrokers/keymap.c b/keyboards/satan/keymaps/admiralStrokers/keymap.c new file mode 100644 index 0000000000..487deb0862 --- /dev/null +++ b/keyboards/satan/keymaps/admiralStrokers/keymap.c @@ -0,0 +1,189 @@ +#include "satan.h" +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +// general keydefs + #define norm 0 // Default layer + #define elev 1 // Layer directional keys + #define supr 2 // F-keys and mediakeys + #define spac 3 + #define FNO1 4 // + #define FNO2 5 // + #define FNO3 6 // + #define MAC0 M(0) // + #define MAC1 M(1) // + #define MAC2 M(2) // + #define MAC3 M(3) // + #define MAC4 M(4) // + #define MAC5 M(5) // + #define MAC6 M(6) // + #define MAC7 M(7) // + #define MAC8 M(8) // + #define MAC9 M(9) // + #define GRAV KC_GRV // + #define MEDI F(FNO1)// + +// General shortenings + #define ESCA KC_ESC + #define MINS KC_MINS + #define EQUL KC_EQL + #define BSPC KC_BSPC + #define DELE KC_DEL + #define LBRC KC_LBRC + #define RBRC KC_RBRC + #define ALTR KC_RALT + #define SCLN KC_SCLN + #define QUOT KC_QUOT + #define NUHS KC_NUHS + #define ENTE KC_ENT + #define NUBS KC_NUBS // Less/ greater sign + #define COMM KC_COMM // Comma + #define FSTO KC_DOT // Full stop + #define SLSH KC_SLSH + #define ALTL KC_LALT + #define GUIL KC_LGUI + #define GUIR KC_RGUI + #define MENO KC_MENU +// The F-row/layer: + #define FK01 KC_F1 + #define FK02 KC_F2 + #define FK03 KC_F3 + #define FK04 KC_F4 + #define FK05 KC_F5 + #define FK06 KC_F6 + #define FK07 KC_F7 + #define FK08 KC_F8 + #define FK09 KC_F9 + #define FK10 KC_F10 + #define FK11 KC_F11 + #define FK12 KC_F12 + #define FK13 KC_F13 + #define FK14 KC_F14 +// Special Actions and Media Keys + #define INSE KC_INS // Insert here + #define HOME KC_HOME // Go to beginning of line + #define ENDI KC_END // go to end of line + #define PSCR KC_PSCR // Print Screen + #define SLCK KC_SLCK // go to end of line + #define PGDN KC_PGDN // go to end of line + #define PGUP KC_PGUP // go to end of line + #define PLPS KC_MPLY // Play/Pause + #define PAUS KC_PAUS // Pause button + #define MUTE KC_MUTE // Mute sound + #define VOLU KC_VOLU // Volume increase + #define VOLD KC_VOLD // Volume decrease + #define MNXT KC_MNXT // next track + #define MPRV KC_MPRV // prev track + #define MSTP KC_MSTP // stop playing + #define MSEL KC_MSEL // Select media (Start playing it) + #define MAIL KC_MAIL // Open default mail app + #define CALC KC_CALC // Open default calculator app + #define MYCM KC_MYCM // Open default file manager + //#define LILO KC_XXXXXX // Reserved for later + //#define LIHI KC_XXXXXX // Reserved for later + + +// dual-role shortcuts + #define DUTB LT(elev, KC_TAB) // `tabs` layer on hold and tab on tap + #define DUSP LT(spac, KC_SPACE) // `spce` layer on hold and space on tap + #define LOCK LGUI(KC_L) // lock computer (win) + +// Space Admiral Strokers + #define SADL MAC0 // Hold for lshift and { on tap + #define SADR MAC1 // Hold for rshift and } on tap + #define CADL MAC2 // Hold for lctrl and [ on tap + #define CADR MAC3 // Hold for rctrl and ] on tap + +// arrow cluster duality bottom right corner + #define ARLF ALT_T(KC_LEFT) // Left arrow + #define ARRT CTL_T(KC_RIGHT)// Right arrow + #define ARUP SFT_T(KC_UP) // Up arrow + #define ARDN GUI_T(KC_DOWN) // Down arrow + +// brackets + #define NOCL RALT(KC_7) // [ + #define NOCR RALT(KC_0) // ] + #define NOPL LSFT(KC_8) // ( + #define NOPR LSFT(KC_9) // ) + #define NOAL KC_NUBS // < + #define NOAR LSFT(KC_NUBS) // > + #define NOBL RALT(KC_8) // [ + #define NOBR RALT(KC_9) // ] + +// increase readability + #define XXXX KC_TRNS + #define DEAD KC_NO + #define SCAN KC_TRNS // Scandinavian keys, the Row 5 key 5 is actually Row 1 key 15 on the PCB + +[ norm ] = KEYMAP( // Normal scandinavian mapping (danish has QUOT and SCLN wapped) + GRAV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, MINS, EQUL, BSPC, DELE,\ + DUTB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, LBRC, RBRC, DEAD,\ + ALTR, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SCLN, QUOT, NUHS, ENTE,\ + SADL, NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, COMM, FSTO, SLSH, SADR, DEAD,\ + CADL, ALTL, GUIL, DUSP, GUIR, MEDI, MENO, CADR), + +[ elev ] = KEYMAP( // The f-Row (with f13-14), Special keys and media keys + LOCK, FK01, FK02, FK03, FK04, FK05, FK06, FK07, FK08, FK09, FK10, FK11, FK12, FK13, FK14,\ + XXXX, XXXX, XXXX, XXXX, MAIL, XXXX, XXXX, HOME, INSE, PSCR, SLCK, PAUS, PGUP, XXXX,\ + XXXX, XXXX, XXXX, XXXX, MYCM, XXXX, XXXX, MPRV, PAUS, MNXT, XXXX, XXXX, PGDN, ENDI,\ + XXXX, XXXX, XXXX, XXXX, CALC, XXXX, XXXX, XXXX, MUTE, VOLD, VOLU, XXXX, ARUP, DEAD,\ + XXXX, XXXX, XXXX, PLPS, XXXX, ARLF, ARDN, ARRT), + +[ spac ] = KEYMAP( // The space controls (by pressing space) + XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\ + XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\ + XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\ + XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, DEAD,\ + XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX), + +[ supr ] = KEYMAP( // Additional layer for later use. + XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\ + XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\ + XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\ + XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, DEAD,\ + XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function + static uint16_t key_timer; + switch(id) { + case 0: //MAC0 - Hold for lshift and { on tap + if (record->event.pressed) { + key_timer = timer_read(); + return MACRO(D(LSFT), END ); + } else { + return (timer_elapsed(key_timer) < 150) ? MACRO(U(LSFT),D(RALT),T(7),U(RALT),END): MACRO(U(LSFT),END); + }; break; + case 1: //MAC1 - Hold for rshift and } on tap + if (record->event.pressed) { + key_timer = timer_read(); + return MACRO(D(RSFT), END ); + } else { + return (timer_elapsed(key_timer) < 150) ? MACRO(U(RSFT),D(RALT),T(0),U(RALT),END): MACRO(U(RSFT),END); + }; break; + case 2: //MAC2 - Hold for lctrl and [ on tap + if (record->event.pressed) { + key_timer = timer_read(); + return MACRO(D(LCTL), END ); + } else {return (timer_elapsed(key_timer) < 150) ? MACRO(U(LCTL),D(RALT),T(8),U(RALT),END):MACRO(U(LCTL),END); + }; break; + case 3: //MAC3 - Hold for rctrl and ] on tap + if (record->event.pressed) { + key_timer = timer_read(); + return MACRO(D(RCTL), END ); + } else { + return (timer_elapsed(key_timer) < 150) ? MACRO(U(RCTL),D(RALT),T(9),U(RALT),END):MACRO(U(RCTL),END); + }; break; + case 4: //MAC4 + if (record->event.pressed) { } else { }; break; + case 5: //MAC5 + if (record->event.pressed) { } else { }; break; + case 6: //MAC6 + if (record->event.pressed) { } else { }; break; + } return MACRO_NONE; +}; +/* + Later use: + void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } + enum function_id { }; + const uint16_t PROGMEM fn_actions[] = { }; + +*/ diff --git a/keyboards/satan/keymaps/admiralStrokers/readme.md b/keyboards/satan/keymaps/admiralStrokers/readme.md new file mode 100644 index 0000000000..9b30caf349 --- /dev/null +++ b/keyboards/satan/keymaps/admiralStrokers/readme.md @@ -0,0 +1,13 @@ +# Admiral Strokers keymap +## For the Satan GH60 PCB +The Admiral STN60 is a layout for users of the satan GH60, optimized with some nice features such as mod tap for brackets (Similar to Space Cadett), space mod for F-row/ layer with easy to access media and control keys. The layout below is just as an example and is ISO based, ANSI and JIS layouts will be included later. + +`````` +[ _tmp ] = KEYMAP( // Copy this to get started. SCAN is scandinavian layout specific. +XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\ +XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, DEAD,\ +XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, SCAN, XXXX,\ +XXXX, SCAN, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, DEAD,\ +XXXX, XXXX, XXXX, XXXX, SCAN, XXXX, XXXX, XXXX, XXXX),\ + +```