summary refs log tree commit diff
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2016-07-09 20:55:58 -0400
committerGitHub <noreply@github.com>2016-07-09 20:55:58 -0400
commitb0300d8d8fcb79fea48ce20e189520acd1d89d61 (patch)
tree1a411fdfa326ea67456d7915198291ff0e04d73d
parent9dc6dfbf96018134381c5bb5630de2be6cd84546 (diff)
parentdf958a2dbc8b8ca19d57e7f4588656df40bb71f1 (diff)
Merge pull request #502 from robotmaxtron/master
Adding robotmaxtron's GH60 Keymap
-rw-r--r--keyboards/gh60/keymaps/robotmaxtron/Makefile112
-rw-r--r--keyboards/gh60/keymaps/robotmaxtron/WS2812-wiring.jpgbin0 -> 1038926 bytes
-rw-r--r--keyboards/gh60/keymaps/robotmaxtron/config.h190
-rw-r--r--keyboards/gh60/keymaps/robotmaxtron/keymap.c226
-rw-r--r--keyboards/gh60/keymaps/robotmaxtron/readme.md16
5 files changed, 544 insertions, 0 deletions
diff --git a/keyboards/gh60/keymaps/robotmaxtron/Makefile b/keyboards/gh60/keymaps/robotmaxtron/Makefile
new file mode 100644
index 0000000000..2e69aee298
--- /dev/null
+++ b/keyboards/gh60/keymaps/robotmaxtron/Makefile
@@ -0,0 +1,112 @@
+#----------------------------------------------------------------------------

+# On command line:

+#

+# make all = Make software.

+#

+# make clean = Clean out built project files.

+#

+# make coff = Convert ELF to AVR COFF.

+#

+# make extcoff = Convert ELF to AVR Extended COFF.

+#

+# make program = Download the hex file to the device.

+#                Please customize your programmer settings(PROGRAM_CMD)

+#

+# make teensy = Download the hex file to the device, using teensy_loader_cli.

+#               (must have teensy_loader_cli installed).

+#

+# make dfu = Download the hex file to the device, using dfu-programmer (must

+#            have dfu-programmer installed).

+#

+# make flip = Download the hex file to the device, using Atmel FLIP (must

+#             have Atmel FLIP installed).

+#

+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer

+#               (must have dfu-programmer installed).

+#

+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP

+#                (must have Atmel FLIP installed).

+#

+# make debug = Start either simulavr or avarice as specified for debugging, 

+#              with avr-gdb or avr-insight as the front end for debugging.

+#

+# make filename.s = Just compile filename.c into the assembler code only.

+#

+# make filename.i = Create a preprocessed source file for use in submitting

+#                   bug reports to the GCC project.

+#

+# To rebuild project do "make clean" then "make all".

+#----------------------------------------------------------------------------

+

+# MCU name

+#MCU = at90usb1287

+MCU = atmega32u4

+

+# Processor frequency.

+#     This will define a symbol, F_CPU, in all source code files equal to the

+#     processor frequency in Hz. You can then use this symbol in your source code to

+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done

+#     automatically to create a 32-bit value in your source code.

+#

+#     This will be an integer division of F_USB below, as it is sourced by

+#     F_USB after it has run through any CPU prescalers. Note that this value

+#     does not *change* the processor frequency - it should merely be updated to

+#     reflect the processor speed set externally so that the code can use accurate

+#     software delays.

+F_CPU = 16000000

+

+

+#

+# LUFA specific

+#

+# Target architecture (see library "Board Types" documentation).

+ARCH = AVR8

+

+# Input clock frequency.

+#     This will define a symbol, F_USB, in all source code files equal to the

+#     input clock frequency (before any prescaling is performed) in Hz. This value may

+#     differ from F_CPU if prescaling is used on the latter, and is required as the

+#     raw input clock is fed directly to the PLL sections of the AVR for high speed

+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'

+#     at the end, this will be done automatically to create a 32-bit value in your

+#     source code.

+#

+#     If no clock division is performed on the input clock inside the AVR (via the

+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.

+F_USB = $(F_CPU)

+

+# Interrupt driven control endpoint task(+60)

+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT

+

+

+# Boot Section Size in *bytes*

+#   Teensy halfKay   512

+#   Teensy++ halfKay 1024

+#   Atmel DFU loader 4096

+#   LUFA bootloader  4096

+#   USBaspLoader     2048

+OPT_DEFS += -DBOOTLOADER_SIZE=4096

+

+

+# Build Options

+#   comment out to disable the options.

+#

+BOOTMAGIC_ENABLE ?= yes		# Virtual DIP switch configuration(+1000)

+MOUSEKEY_ENABLE ?= yes		# Mouse keys(+4700)

+EXTRAKEY_ENABLE ?= yes		# Audio control and System control(+450)

+# CONSOLE_ENABLE ?= yes		# Console for debug(+400)

+# COMMAND_ENABLE ?= yes		# Commands for debug and configuration

+KEYBOARD_LOCK_ENABLE ?= yes	# Allow locking of keyboard via magic key

+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE

+# SLEEP_LED_ENABLE ?= yes	# Breathing sleep LED during USB suspend

+NKRO_ENABLE ?= yes		# USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work

+# BACKLIGHT_ENABLE ?= yes	# Enable keyboard backlight functionality

+# MIDI_ENABLE ?= YES		# MIDI controls

+# UNICODE_ENABLE ?= YES		# Unicode

+# BLUETOOTH_ENABLE ?= yes	# Enable Bluetooth with the Adafruit EZ-Key HID

+RGBLIGHT_ENABLE ?= yes          # Enable RGB Underglow

+

+ifndef QUANTUM_DIR

+	include ../../../../Makefile

+endif

+

diff --git a/keyboards/gh60/keymaps/robotmaxtron/WS2812-wiring.jpg b/keyboards/gh60/keymaps/robotmaxtron/WS2812-wiring.jpg
new file mode 100644
index 0000000000..4ab8cc31ac
--- /dev/null
+++ b/keyboards/gh60/keymaps/robotmaxtron/WS2812-wiring.jpg
Binary files differdiff --git a/keyboards/gh60/keymaps/robotmaxtron/config.h b/keyboards/gh60/keymaps/robotmaxtron/config.h
new file mode 100644
index 0000000000..8272875ed0
--- /dev/null
+++ b/keyboards/gh60/keymaps/robotmaxtron/config.h
@@ -0,0 +1,190 @@
+/*

+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

+#define CONFIG_H

+

+#include "config_common.h"

+

+/* USB Device descriptor parameter */

+#define VENDOR_ID    0xFEED

+#define PRODUCT_ID   0x6060

+#define DEVICE_VER   0x0001

+#define MANUFACTURER    geekhack

+#define PRODUCT         GH60

+#define DESCRIPTION     t.m.k. keyboard firmware for GH60

+

+/* key matrix size */

+#define MATRIX_ROWS 5

+#define MATRIX_COLS 14

+

+/*

+ * Keyboard Matrix Assignments

+ *

+ * Change this to how you wired your keyboard

+ * COLS: AVR pins used for columns, left to right

+ * ROWS: AVR pins used for rows, top to bottom

+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)

+ *         ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)

+ *

+*/

+ #define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }

+// Rev A

+// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 }

+// Rev B/C

+   #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }

+#define UNUSED_PINS

+

+/* COL2ROW or ROW2COL */

+#define DIODE_DIRECTION COL2ROW

+

+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */

+#define DEBOUNCING_DELAY 5

+

+/* define if matrix has ghost (lacks anti-ghosting diodes) */

+//#define MATRIX_HAS_GHOST

+

+/* number of backlight levels */

+#define BACKLIGHT_LEVELS 3

+

+/* 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

+

+/*

+ * Force NKRO

+ *

+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved

+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the

+ * makefile for this to work.)

+ *

+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)

+ * until the next keyboard reset.

+ *

+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is

+ * fully operational during normal computer usage.

+ *

+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)

+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by

+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a

+ * power-up.

+ *

+ */

+//#define FORCE_NKRO

+

+/*

+ * Magic Key Options

+ *

+ * Magic keys are hotkey commands that allow control over firmware functions of

+ * the keyboard. They are best used in combination with the HID Listen program,

+ * found here: https://www.pjrc.com/teensy/hid_listen.html

+ *

+ * The options below allow the magic key functionality to be changed. This is

+ * useful if your keyboard/keypad is missing keys and you want magic key support.

+ *

+ */

+

+/* key combination for magic key command */

+#define IS_COMMAND() ( \

+  keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \

+)

+

+/* control how magic key switches layers */

+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true

+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true

+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false

+

+/* override magic key keymap */

+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS

+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS

+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM

+//#define MAGIC_KEY_HELP1     H

+//#define MAGIC_KEY_HELP2     SLASH

+//#define MAGIC_KEY_DEBUG     D

+//#define MAGIC_KEY_DEBUG_MATRIX  X

+//#define MAGIC_KEY_DEBUG_KBD   K

+//#define MAGIC_KEY_DEBUG_MOUSE  M

+//#define MAGIC_KEY_VERSION    V

+//#define MAGIC_KEY_STATUS     S

+//#define MAGIC_KEY_CONSOLE    C

+//#define MAGIC_KEY_LAYER0_ALT1  ESC

+//#define MAGIC_KEY_LAYER0_ALT2  GRAVE

+//#define MAGIC_KEY_LAYER0     0

+//#define MAGIC_KEY_LAYER1     1

+//#define MAGIC_KEY_LAYER2     2

+//#define MAGIC_KEY_LAYER3     3

+//#define MAGIC_KEY_LAYER4     4

+//#define MAGIC_KEY_LAYER5     5

+//#define MAGIC_KEY_LAYER6     6

+//#define MAGIC_KEY_LAYER7     7

+//#define MAGIC_KEY_LAYER8     8

+//#define MAGIC_KEY_LAYER9     9

+//#define MAGIC_KEY_BOOTLOADER   PAUSE

+//#define MAGIC_KEY_LOCK      CAPS

+//#define MAGIC_KEY_EEPROM     E

+//#define MAGIC_KEY_NKRO      N

+//#define MAGIC_KEY_SLEEP_LED   Z

+

+/*

+ * 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

+

+/*

+ * RGB Underglow

+ * These settings are for the F4 by default:

+ * 

+ *

+ * #define ws2812_PORTREG  PORTF

+ * #define ws2812_DDRREG   DDRF

+ * #define ws2812_pin PF4

+ * #define RGBLED_NUM 14     // Number of LEDs

+ * #define RGBLIGHT_HUE_STEP 10

+ * #define RGBLIGHT_SAT_STEP 17

+ * #define RGBLIGHT_VAL_STEP 17

+ *

+ * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects. 

+ * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations. 

+ * For details, please check this keymap. keyboard/planck/keymaps/yang/keymap.c

+*/

+

+/* Deprecated code below

+#define ws2812_PORTREG  PORTF 

+#define ws2812_DDRREG   DDRF

+#define ws2812_pin PF4

+*/ 

+#define RGB_DI_PIN F4

+#define RGBLIGHT_TIMER

+#define RGBLED_NUM 8         // Number of LEDs

+#define RGBLIGHT_HUE_STEP 8

+#define RGBLIGHT_SAT_STEP 8

+#define RGBLIGHT_VAL_STEP 8

+#endif

diff --git a/keyboards/gh60/keymaps/robotmaxtron/keymap.c b/keyboards/gh60/keymaps/robotmaxtron/keymap.c
new file mode 100644
index 0000000000..263eec4e53
--- /dev/null
+++ b/keyboards/gh60/keymaps/robotmaxtron/keymap.c
@@ -0,0 +1,226 @@
+#include "gh60.h"
+#include "action_layer.h"
+
+#define _BL 0
+#define _AL 1
+#define _FL 2
+#define _UL 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+   /*
+   *  Base layer, pretty standard ANSI layout. 
+   * ,-----------------------------------------------------------.
+   * |FN12| 1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |
+   * |-----------------------------------------------------------|
+   * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
+   * |-----------------------------------------------------------|
+   * |Caps/Fn|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |
+   * |-----------------------------------------------------------|
+   * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift     |
+   * |-----------------------------------------------------------|
+   * |Ctrl|Gui |Alt |      Space             |Alt |Fn  |Menu|Ctrl|
+   * `-----------------------------------------------------------'
+   */
+	[_BL] = KEYMAP(
+        FN12,1,2,3,4,5,6,7,8,9,0,MINS,EQL,BSPC, \
+	TAB,Q,W,E,R,T,Y,U,I,O,P,LBRC,RBRC,BSLS, \
+        FN2,A,S,D,F,G,H,J,K,L,SCLN,QUOT,NO,ENT,  \
+        LSFT,NO,Z,X,C,V,B,N,M,COMM,DOT,SLSH,NO,RSFT, \
+        LCTL,LGUI,LALT,        SPC,      NO,RALT,FN0,APP, RCTL),
+   
+   /*  
+   * Locking arrow keys to WASD for when you need dedicated arrow keys
+   * ,-----------------------------------------------------------.
+   * |    |  |   |   |   |   |   |   |   |   |   |   |   |       |
+   * |-----------------------------------------------------------|
+   * |     |   |Up |   |   |   |   |   |   |   |   |   |   |     |
+   * |-----------------------------------------------------------|
+   * |       |Left|Down|Rght|   |   |   |   |   |   |   |   |    |
+   * |-----------------------------------------------------------|
+   * |        |   |   |   |   |   |   |   |   |   |   |          |
+   * |-----------------------------------------------------------|
+   * |    |    |    |                        |    |    |    |    |
+   * `-----------------------------------------------------------'
+   */
+	[_AL] = KEYMAP(
+        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
+        TRNS,TRNS,UP,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
+        TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
+        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,   \
+        TRNS,TRNS,TRNS,          TRNS,               TRNS,TRNS,TRNS,TRNS,TRNS),
+
+
+   /* 
+   * Primary function layer, mostly the same as the traditional Pok3r layout.
+   * ,-------------------------------------------------------------.
+   * |`~ | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|DEL   |
+   * |-------------------------------------------------------------|
+   * |    |_AL|   |   |  |  |Calc|PgUp|Up|PgDn|Ptscn|Srlck|Pause|  |
+   * |-------------------------------------------------------------|
+   * |      |   |   |   |   |   |Home|Left|Down|Rght|Ins|   |      |
+   * |-------------------------------------------------------------|
+   * |        |_UL|   |   |   |   |   |    |    |    |   |         |
+   * |-------------------------------------------------------------|
+   * |    |    |    |                          |    |    |    |    |
+   * `-------------------------------------------------------------'
+   */
+	[_FL] = KEYMAP(
+        GRAVE,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12, DELETE, \
+        TRNS,FN1,TRNS,TRNS,TRNS,TRNS,CALC,PGUP,UP,PGDN,PSCR,SLCK,PAUS,TRNS, \
+        TRNS,MUTE,_VOLDOWN,_VOLUP,TRNS,TRNS,HOME,LEFT,DOWN,RGHT,INS,TRNS,TRNS,TRNS, \
+        TRNS,TRNS,FN3,TRNS,TRNS,TRNS,TRNS,END,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
+        TRNS,TRNS,TRNS,          TRNS,               TRNS,TRNS,TRNS,TRNS,TRNS),
+   
+   /* 
+   * Locking layer for controlling the underglow.
+   * 
+   * ,-----------------------------------------------------------.
+   * |    |  |   |   |   |   |   |   |   |   |   |   |   |       |
+   * |-----------------------------------------------------------|
+   * |     |   |   |   |   |   |   |   |   |   |   |   |   |     |
+   * |-----------------------------------------------------------|
+   * |       |On|Mode|   |   |   |   |   |   |   |   |   |       |
+   * |-----------------------------------------------------------|
+   * |        |   |Hue+|Hue-|Sat+|Sat-|Val+|Val-|  |  |   |      |
+   * |-----------------------------------------------------------|
+   * |    |    |    |                        |    |    |    |    |
+   * `-----------------------------------------------------------'
+   */
+	[_UL] = KEYMAP(
+        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
+        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
+        TRNS,FN4,FN5,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
+        TRNS,TRNS,TRNS,FN6,FN7,FN8,FN9,FN10,FN11,TRNS,TRNS,TRNS,TRNS,TRNS,   \
+        TRNS,TRNS,TRNS,          TRNS,               TRNS,TRNS,TRNS,TRNS,TRNS),
+};
+
+enum function_id {
+    RGBLED_TOGGLE,
+    RGBLED_STEP_MODE,
+    RGBLED_INCREASE_HUE,
+    RGBLED_DECREASE_HUE,
+    RGBLED_INCREASE_SAT,
+    RGBLED_DECREASE_SAT,
+    RGBLED_INCREASE_VAL,
+    RGBLED_DECREASE_VAL,
+    SHIFT_ESC,
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [0]  = ACTION_LAYER_MOMENTARY(2),  // Momentary Fn overlay
+    [1]  = ACTION_LAYER_TOGGLE(1),     // Toggle Arrow Layer overlay
+    [2]  = ACTION_LAYER_TAP_KEY(2, KC_CAPS), // Tap to toggle caps lock and hold to activate function layer
+    [3]  = ACTION_LAYER_TOGGLE(3),     // Toggle Underglow Layer overlay
+    [4]  = ACTION_FUNCTION(RGBLED_TOGGLE), //Turn on/off underglow
+    [5]  = ACTION_FUNCTION(RGBLED_STEP_MODE), // Change underglow mode
+    [6]  = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
+    [7]  = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
+    [8]  = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
+    [9]  = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
+    [10] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
+    [11] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
+    [12] = ACTION_FUNCTION(SHIFT_ESC),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function 
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+void matrix_scan_user(void) {
+
+// Layer LED indicators
+// ESC led on when in function layer, WASD cluster leds enabled when on arrow cluster
+    uint32_t layer = layer_state;
+    if (layer & (1<<1)) {
+        gh60_wasd_leds_on();
+    } else {
+        gh60_wasd_leds_off();
+    }
+
+    if (layer & (1<<2)) {
+        gh60_esc_led_on();
+    } else {
+        gh60_esc_led_off();
+    }
+};
+
+#define MODS_CTRL_MASK  (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  switch (id) {
+    case RGBLED_TOGGLE:
+      //led operations
+      if (record->event.pressed) {
+        rgblight_toggle();
+        }
+        break;
+    case RGBLED_INCREASE_HUE:
+      if (record->event.pressed) {
+        rgblight_increase_hue();
+        }
+        break;
+    case RGBLED_DECREASE_HUE:
+      if (record->event.pressed) {
+        rgblight_decrease_hue();
+        }
+        break;
+    case RGBLED_INCREASE_SAT:
+      if (record->event.pressed) {
+        rgblight_increase_sat();
+        }
+        break;
+    case RGBLED_DECREASE_SAT:
+      if (record->event.pressed) {
+        rgblight_decrease_sat();
+        }
+        break;
+    case RGBLED_INCREASE_VAL:
+        if (record->event.pressed) {
+          rgblight_increase_val();
+        }
+        break;
+    case RGBLED_DECREASE_VAL:
+        if (record->event.pressed) {
+          rgblight_decrease_val();
+        }
+        break;
+    case RGBLED_STEP_MODE:
+        if (record->event.pressed) {
+          rgblight_step();
+        }
+        break;
+    static uint8_t shift_esc_shift_mask;
+    // Shift + ESC = ~
+    case SHIFT_ESC:
+      shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
+      if (record->event.pressed) {
+        if (shift_esc_shift_mask) {
+          add_key(KC_GRV);
+          send_keyboard_report();
+        } else {
+          add_key(KC_ESC);
+          send_keyboard_report();
+        }
+      } else {
+        if (shift_esc_shift_mask) {
+          del_key(KC_GRV);
+          send_keyboard_report();
+        } else {
+          del_key(KC_ESC);
+          send_keyboard_report();
+        }
+      }
+      break;
+    }
+};
diff --git a/keyboards/gh60/keymaps/robotmaxtron/readme.md b/keyboards/gh60/keymaps/robotmaxtron/readme.md
new file mode 100644
index 0000000000..3e22925008
--- /dev/null
+++ b/keyboards/gh60/keymaps/robotmaxtron/readme.md
@@ -0,0 +1,16 @@
+robotmaxtron's GH60 Layout
+=====================
+
+##Quantum MK Firmware
+For the full Quantum feature list, see the parent readme.md.
+
+* Standard ANSI layout with Pok3r styled function layers
+* ESC key led enables when on function layer
+* Lockable layer with arrow keys on WASD with backlighting to indicate locked on arrow layer
+* Neopixel/WS2812 RGB Underglow Support
+
+## Reference Images
+![Wiring Refererence] (WS2812-wiring.jpg)
+
+### Additional Credits
+Keymap has been based on various keymaps available from the QMK Repo for the GH60-SATAN and KC60 keyboards.