Merge branch 'master' of https://github.com/jackhumbert/tmk_keyboard
	
		
	
				
					
				
			
						commit
						3d1117db50
					
				| @ -0,0 +1,140 @@ | ||||
| #----------------------------------------------------------------------------
 | ||||
| # 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".
 | ||||
| #----------------------------------------------------------------------------
 | ||||
| 
 | ||||
| # Target file name (without extension).
 | ||||
| TARGET = jd45 | ||||
| 
 | ||||
| 
 | ||||
| # Directory common source filess exist
 | ||||
| TOP_DIR = ../.. | ||||
| TMK_DIR = ../../tmk_core | ||||
| 
 | ||||
| # Directory keyboard dependent files exist
 | ||||
| TARGET_DIR = . | ||||
| 
 | ||||
| # # project specific files
 | ||||
| SRC = jd45.c \
 | ||||
| 	backlight.c  | ||||
| 
 | ||||
| ifdef KEYMAP | ||||
|     SRC := keymaps/keymap_$(KEYMAP).c $(SRC) | ||||
| else | ||||
|     SRC := keymaps/keymap_default.c $(SRC) | ||||
| endif | ||||
| 
 | ||||
| CONFIG_H = config.h | ||||
| 
 | ||||
| # 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 | ||||
| # 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 - not yet supported in LUFA
 | ||||
| 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 | ||||
| 
 | ||||
| 
 | ||||
| # Optimize size but this may cause error "relocation truncated to fit"
 | ||||
| #EXTRALDFLAGS = -Wl,--relax
 | ||||
| 
 | ||||
| # Search Path
 | ||||
| VPATH += $(TARGET_DIR) | ||||
| VPATH += $(TOP_DIR) | ||||
| VPATH += $(TMK_DIR) | ||||
| 
 | ||||
| include $(TOP_DIR)/quantum/quantum.mk | ||||
| 
 | ||||
| @ -0,0 +1,61 @@ | ||||
| 
 | ||||
| #include <avr/io.h> | ||||
| #include "backlight.h" | ||||
| 
 | ||||
| #define CHANNEL OCR1C | ||||
| 
 | ||||
| void backlight_init_ports() | ||||
| { | ||||
| 
 | ||||
|     // Setup PB7 as output and output low.
 | ||||
|     DDRB |= (1<<7); | ||||
|     PORTB &= ~(1<<7); | ||||
|      | ||||
|     // Use full 16-bit resolution. 
 | ||||
|     ICR1 = 0xFFFF; | ||||
| 
 | ||||
|     // I could write a wall of text here to explain... but TL;DW
 | ||||
|     // Go read the ATmega32u4 datasheet.
 | ||||
|     // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
 | ||||
|      | ||||
|     // Pin PB7 = OCR1C (Timer 1, Channel C)
 | ||||
|     // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
 | ||||
|     // (i.e. start high, go low when counter matches.)
 | ||||
|     // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
 | ||||
|     // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
 | ||||
|      | ||||
|     TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
 | ||||
|     TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
 | ||||
| 
 | ||||
|     backlight_init(); | ||||
| } | ||||
| 
 | ||||
| void backlight_set(uint8_t level) | ||||
| { | ||||
|     if ( level == 0 ) | ||||
|     { | ||||
|         // Turn off PWM control on PB7, revert to output low.
 | ||||
|         TCCR1A &= ~(_BV(COM1C1)); | ||||
|         CHANNEL = 0x0; | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|     } | ||||
|     else if ( level == BACKLIGHT_LEVELS ) | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF; | ||||
|     } | ||||
|     else         | ||||
|     { | ||||
|         // Prevent backlight blink on lowest level
 | ||||
|         PORTB &= ~(_BV(PORTB7)); | ||||
|         // Turn on PWM control of PB7
 | ||||
|         TCCR1A |= _BV(COM1C1); | ||||
|         // Set the brightness
 | ||||
|         CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,79 @@ | ||||
| /*
 | ||||
| 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         JD45 | ||||
| #define DESCRIPTION     q.m.k. keyboard firmware for JD45 | ||||
| 
 | ||||
| /* key matrix size */ | ||||
| #define MATRIX_ROWS 4 | ||||
| #define MATRIX_COLS 13  | ||||
| 
 | ||||
| /* Planck PCB default pin-out */ | ||||
| #define COLS (int []){F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2, B0} | ||||
| #define ROWS (int []){F0, F1, F5, B4} | ||||
| 
 | ||||
| /* COL2ROW or ROW2COL */ | ||||
| #define DIODE_DIRECTION COL2ROW | ||||
| 
 | ||||
| /* define if matrix has ghost */ | ||||
| //#define MATRIX_HAS_GHOST
 | ||||
| 
 | ||||
| /* number of backlight levels */ | ||||
| #define BACKLIGHT_LEVELS 3 | ||||
| 
 | ||||
| /* Set 0 if debouncing isn't needed */ | ||||
| #define DEBOUNCE    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)) \ | ||||
| ) | ||||
| 
 | ||||
| /*
 | ||||
|  * 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 | ||||
| @ -0,0 +1,27 @@ | ||||
| #include "jd45.h" | ||||
| 
 | ||||
| __attribute__ ((weak)) | ||||
| void * matrix_init_user(void) { | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| __attribute__ ((weak)) | ||||
| void * matrix_scan_user(void) { | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| void * matrix_init_kb(void) { | ||||
| 	#ifdef BACKLIGHT_ENABLE | ||||
|     	backlight_init_ports(); | ||||
| 	#endif | ||||
| 
 | ||||
| 	if (matrix_init_user) { | ||||
| 		(*matrix_init_user)(); | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| void * matrix_scan_kb(void) { | ||||
| 	if (matrix_scan_user) { | ||||
| 		(*matrix_scan_user)(); | ||||
| 	} | ||||
| }; | ||||
| @ -0,0 +1,12 @@ | ||||
| #ifndef JD45_H | ||||
| #define JD45_H | ||||
| 
 | ||||
| #include "matrix.h" | ||||
| #include "keymap_common.h" | ||||
| #include "backlight.h" | ||||
| #include <stddef.h> | ||||
| 
 | ||||
| void * matrix_init_user(void); | ||||
| void * matrix_scan_user(void); | ||||
| 
 | ||||
| #endif | ||||
| @ -0,0 +1,31 @@ | ||||
| #include "jd45.h" | ||||
| #include "backlight.h" | ||||
| 
 | ||||
| /* this keymap is to provide a basic keyboard layout for testing the matrix
 | ||||
|  * for more practical and complicated keymap refer to other keymaps in the same folder | ||||
|  */ | ||||
| /* JD45 keymap definition macro
 | ||||
|  */ | ||||
| #define KEYMAP( \ | ||||
|     K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, \ | ||||
| 	K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, \ | ||||
| 	K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, \ | ||||
| 	K38, K39, K40, K41, K42, K43, K44, K45, K46, K47 \ | ||||
| ) { \ | ||||
|     { KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K10, KC_##K11, KC_##K12, KC_##K13 }, \ | ||||
|     { KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_NO    }, \ | ||||
|     { KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_NO    }, \ | ||||
|     { KC_##K38, KC_##K39, KC_##K40, KC_##K41, KC_##K42, KC_NO,    KC_##K43, KC_NO,    KC_##K44, KC_##K45, KC_##K46, KC_##K47, KC_NO    }  \ | ||||
| } | ||||
| 
 | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
| [0] = KEYMAP( | ||||
|   ESC,   Q,    W,    E,    R,    T,    Y,    U,    I,    O,    P,     QUOT, BSPC, | ||||
|   TAB,   A,    S,    D,    F,    G,    H,    J,    K,    L,    SCLN,  ENT, | ||||
|   LSFT,  Z,    X,    C,    V,    B,    N,    M,    COMM, DOT,  SLSH,  RSFT, | ||||
|   PAUSE, LCTL, LALT, DEL,  SPC,  DEL,  LEFT, UP,   DOWN, RIGHT ), | ||||
| }; | ||||
| 
 | ||||
| const uint16_t PROGMEM fn_actions[] = { | ||||
| 
 | ||||
| }; | ||||
| @ -0,0 +1,101 @@ | ||||
| #include "jd45.h" | ||||
| #include "backlight.h" | ||||
| 
 | ||||
| /* JD45 keymap definition macro
 | ||||
|  */ | ||||
| #define KEYMAP( \ | ||||
|     K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, \ | ||||
| 	K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, \ | ||||
| 	K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, \ | ||||
| 	K38, K39, K40, K41, K42, K43, K44, K45, K46, K47 \ | ||||
| ) { \ | ||||
|     { KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K10, KC_##K11, KC_##K12, KC_##K13 }, \ | ||||
|     { KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_NO    }, \ | ||||
|     { KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_NO    }, \ | ||||
|     { KC_##K38, KC_##K39, KC_##K40, KC_##K41, KC_##K42, KC_NO,    KC_##K43, KC_NO,    KC_##K44, KC_##K45, KC_##K46, KC_##K47, KC_NO    }  \ | ||||
| } | ||||
| 
 | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
| [0] = KEYMAP( | ||||
|   ESC,  Q,    W,    F,    P,    G,    J,    L,    U,    Y,    SCLN, QUOT, BSPC, | ||||
|   FN8,  A,    R,    S,    T,    D,    H,    N,    E,    I,    O,     ENT, | ||||
|   LSFT, Z,    X,    C,    V,    B,    K,    M,    COMM, DOT,  SLSH,  FN6, | ||||
|   FN4, LGUI, FN7, FN2,  FN1,  SPC,  FN5,  RALT,  FN3, FN0 ), | ||||
| [1] = KEYMAP( | ||||
|   TRNS, FN10, FN11, FN12, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, DEL, | ||||
|   TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGUP, LEFT, RGHT, | ||||
|   TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, END,  PGDN, DOWN, TRNS, | ||||
|   TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS ), | ||||
| [2] = KEYMAP( | ||||
|   TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,    7,    8,    9,    0, TRNS, TRNS, | ||||
|   TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC,    4,    5,    6,  DOT, TRNS, | ||||
|   TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC,    1,    2,    3, BSLS, TRNS, | ||||
|   TRNS,FN29, TRNS, TRNS, TRNS, PAUSE,  EQL, MINS, TRNS, TRNS ), | ||||
| [3] = KEYMAP( | ||||
|   TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, | ||||
|   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, TRNS ), | ||||
| [4] = KEYMAP( | ||||
|   TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,    7,    8,    9,    0, TRNS, TRNS, | ||||
|   TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC,    4,    5,    6,  DOT, TRNS, | ||||
|   TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC,    1,    2,    3, BSLS, TRNS, | ||||
|   TRNS,FN29, TRNS, TRNS, TRNS, PAUSE,  EQL, MINS, TRNS, TRNS ), | ||||
| }; | ||||
| 
 | ||||
| enum macro_id { | ||||
|    PSWD1, | ||||
|    PSWD2, | ||||
|    PSWD3, | ||||
| }; | ||||
| 
 | ||||
| const uint16_t PROGMEM fn_actions[] = { | ||||
|     [0] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_MINS), | ||||
|     [1] = ACTION_LAYER_MOMENTARY(1),  // FN1
 | ||||
|     [2] = ACTION_LAYER_MOMENTARY(2),  // FN2
 | ||||
|     [3] = ACTION_LAYER_MOMENTARY(3),  // FN3
 | ||||
|     [4] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_GRV), | ||||
|     [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_RGUI), | ||||
|     [6] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_CAPS), | ||||
|     [7] = ACTION_LAYER_MODS(4, MOD_LSFT),  // FN4
 | ||||
|     [8] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_TAB), | ||||
| 
 | ||||
|     [10] = ACTION_MACRO(PSWD1), | ||||
|     [11] = ACTION_MACRO(PSWD2), | ||||
|     [12] = ACTION_MACRO(PSWD3), | ||||
|      | ||||
|     [29] = ACTION_BACKLIGHT_TOGGLE(), | ||||
|     [30] = ACTION_BACKLIGHT_INCREASE(), | ||||
|     [31] = ACTION_BACKLIGHT_DECREASE() | ||||
|      | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * Macro definition | ||||
|  */ | ||||
| const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | ||||
| { | ||||
|     switch (id) { | ||||
|         case PSWD1: | ||||
|             return (record->event.pressed ? | ||||
|                     MACRO( I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END ) : | ||||
|                     MACRO_NONE ); | ||||
|         case PSWD2: | ||||
|             return (record->event.pressed ? | ||||
|                     MACRO( I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END ) : | ||||
|                     MACRO_NONE ); | ||||
|         case PSWD3: | ||||
|             return (record->event.pressed ? | ||||
|                     MACRO( I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END ) : | ||||
|                     MACRO_NONE ); | ||||
|         //case VOLUP:
 | ||||
|         //    return (record->event.pressed ?
 | ||||
|         //            MACRO( D(VOLU), U(VOLU), END ) :
 | ||||
|         //            MACRO_NONE );
 | ||||
|         //case ALT_TAB:
 | ||||
|         //    return (record->event.pressed ?
 | ||||
|         //            MACRO( D(LALT), D(TAB), END ) :
 | ||||
|         //            MACRO( U(TAB), END ));
 | ||||
|     } | ||||
|     return MACRO_NONE; | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue
	
	 Jack Humbert
						Jack Humbert