parent
							
								
									9dc6dfbf96
								
							
						
					
					
						commit
						1ab527a4db
					
				| @ -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 | ||||
| 
 | ||||
| After Width: | Height: | Size: 1015 KiB | 
| @ -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 | ||||
| @ -0,0 +1,228 @@ | ||||
| #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 
 | ||||
|   // This is some kind of macro code, haven't quite figured it out yet.
 | ||||
|   // Todo: Figure out macro coding here
 | ||||
|       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
 | ||||
| // Todo: Caps lock led on when caps lock is enabled 
 | ||||
|     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; | ||||
|     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; | ||||
|     } | ||||
| }; | ||||
| @ -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. | ||||
					Loading…
					
					
				
		Reference in new issue
	
	 Max Whittingham
						Max Whittingham