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.
This commit is contained in:
Ole Anders 2017-02-06 11:53:48 +01:00
parent f0633f2540
commit d1fb51976a
4 changed files with 324 additions and 0 deletions

View File

@ -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(<unicode>) 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

View File

@ -0,0 +1,96 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
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/>.
*/
#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

View File

@ -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[] = { };
*/

View File

@ -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),\
```