parent
							
								
									9069edd934
								
							
						
					
					
						commit
						7cbd16c902
					
				| @ -0,0 +1,3 @@ | ||||
| ifndef MAKEFILE_INCLUDED | ||||
| 	include ../../Makefile | ||||
| endif | ||||
| @ -0,0 +1,12 @@ | ||||
| 
 | ||||
| About | ||||
| ------ | ||||
| 
 | ||||
| First pass at adding support for the gherkin keyboard. Compiles but completely | ||||
| untested. Intended to kick-start development. | ||||
| 
 | ||||
| * [Gherkin project on 40% Keyboards](http://www.40percent.club/2016/11/gherkin.html) | ||||
| * [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/gherkin) | ||||
| 
 | ||||
| Credit to JadedC for the initial work. | ||||
| 
 | ||||
| @ -0,0 +1,58 @@ | ||||
| #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    qmkbuilder | ||||
| #define PRODUCT         keyboard | ||||
| #define DESCRIPTION     Keyboard | ||||
| 
 | ||||
| /* key matrix size */ | ||||
| #define MATRIX_ROWS 5 | ||||
| #define MATRIX_COLS 6 | ||||
| 
 | ||||
| /* key matrix pins */ | ||||
| #define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 } | ||||
| #define MATRIX_COL_PINS { B4, E6, D7, C6, D4, D0 } | ||||
| #define UNUSED_PINS | ||||
| 
 | ||||
| /* COL2ROW or ROW2COL */ | ||||
| #define DIODE_DIRECTION COL2ROW | ||||
| 
 | ||||
| /* number of backlight levels */ | ||||
| #define BACKLIGHT_PIN B5 | ||||
| #ifdef BACKLIGHT_PIN | ||||
| #define BACKLIGHT_LEVELS 3 | ||||
| #endif | ||||
| 
 | ||||
| /* 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)) \ | ||||
| ) | ||||
| 
 | ||||
| /* prevent stuck modifiers */ | ||||
| #define PREVENT_STUCK_MODIFIERS | ||||
| 
 | ||||
| 
 | ||||
| #ifdef RGB_DI_PIN | ||||
| #define RGBLIGHT_ANIMATIONS | ||||
| #define RGBLED_NUM 0 | ||||
| #define RGBLIGHT_HUE_STEP 8 | ||||
| #define RGBLIGHT_SAT_STEP 8 | ||||
| #define RGBLIGHT_VAL_STEP 8 | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
| @ -0,0 +1 @@ | ||||
| #include "gherkin.h" | ||||
| @ -0,0 +1,18 @@ | ||||
| #ifndef GHERKIN_H | ||||
| #define GHERKIN_H | ||||
| 
 | ||||
| #include "quantum.h" | ||||
| 
 | ||||
| #define KEYMAP( \ | ||||
| 	 K00,   K01,   K02,   K03,   K04,   K05,   K10,   K11,   K12,   K13 , \ | ||||
| 	 K14,   K15,   K20,   K21,   K22,   K23,   K24,   K25,   K30,   K31 , \ | ||||
| 	 K32,   K33,   K34,   K35,   K40,   K41,   K42,   K43,   K44,   K45   \ | ||||
| ) { \ | ||||
| 	{ K00,   K01,   K02,   K03,   K04,   K05 }, \ | ||||
| 	{ K10,   K11,   K12,   K13,   K14,   K15 }, \ | ||||
| 	{ K20,   K21,   K22,   K23,   K24,   K25 }, \ | ||||
| 	{ K30,   K31,   K32,   K33,   K34,   K35 }, \ | ||||
| 	{ K40,   K41,   K42,   K43,   K44,   K45 }  \ | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| @ -0,0 +1,171 @@ | ||||
| #include "gherkin.h" | ||||
| 
 | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		LT(1, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y,  | ||||
| 		KC_U, KC_I, KC_O, KC_P, KC_A, KC_S,  | ||||
| 		KC_D, KC_F, KC_G, KC_H, KC_J, KC_K,  | ||||
| 		KC_L, KC_ESC, KC_Z, KC_X, KC_C, KC_V,  | ||||
| 		KC_BSPC, KC_SPC, KC_B, KC_N, KC_M, KC_ENT), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, BL_DEC), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||||
| 
 | ||||
| 	KEYMAP( | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  | ||||
| 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { | ||||
| 	keyevent_t event = record->event; | ||||
|     (void)event; | ||||
| 
 | ||||
| 	switch (id) { | ||||
| 
 | ||||
| 	} | ||||
| 	return MACRO_NONE; | ||||
| } | ||||
| 
 | ||||
| void matrix_init_user(void) { | ||||
| } | ||||
| 
 | ||||
| void matrix_scan_user(void) { | ||||
| } | ||||
| 
 | ||||
| bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| void led_set_user(uint8_t usb_led) { | ||||
| 
 | ||||
| 	if (usb_led & (1 << USB_LED_NUM_LOCK)) { | ||||
| 		DDRD |= (1 << 5); PORTD &= ~(1 << 5); | ||||
| 	} else { | ||||
| 		DDRD &= ~(1 << 5); PORTD &= ~(1 << 5); | ||||
| 	} | ||||
| 
 | ||||
| 	if (usb_led & (1 << USB_LED_CAPS_LOCK)) { | ||||
| 		DDRB |= (1 << 0); PORTB &= ~(1 << 0); | ||||
| 	} else { | ||||
| 		DDRB &= ~(1 << 0); PORTB &= ~(1 << 0); | ||||
| 	} | ||||
| 
 | ||||
| 	if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { | ||||
| 		 | ||||
| 	} else { | ||||
| 		 | ||||
| 	} | ||||
| 
 | ||||
| 	if (usb_led & (1 << USB_LED_COMPOSE)) { | ||||
| 		 | ||||
| 	} else { | ||||
| 		 | ||||
| 	} | ||||
| 
 | ||||
| 	if (usb_led & (1 << USB_LED_KANA)) { | ||||
| 		 | ||||
| 	} else { | ||||
| 		 | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,56 @@ | ||||
| # MCU name
 | ||||
| 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*
 | ||||
| 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 ?= no	# Console for debug(+400) | ||||
| COMMAND_ENABLE ?= no    # Commands for debug and configuration | ||||
| SLEEP_LED_ENABLE ?= no  # 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 | ||||
| AUDIO_ENABLE ?= no | ||||
| RGBLIGHT_ENABLE ?= no | ||||
					Loading…
					
					
				
		Reference in new issue
	
	 Daniel Shields
						Daniel Shields