Keyboard: Refactor XMMX keyboard to XMMX and Toad (#3955)
	
		
	
				
					
				
			* pull out toad keyboard and get it compiling * refactor xmmx * use the correct LAYOUT macros * move LED code out to toad.c file * move LED code out to xmmx.c file * adjust for correct number of columns and pins used * remove led set userpull/3987/head
							parent
							
								
									e2eee47e20
								
							
						
					
					
						commit
						dbdbbbd5c9
					
				| @ -0,0 +1,54 @@ | ||||
| #ifndef CONFIG_H | ||||
| #define CONFIG_H | ||||
| 
 | ||||
| #include "config_common.h" | ||||
| 
 | ||||
| /* USB Device descriptor parameter */ | ||||
| #define VENDOR_ID       0xFEED | ||||
| #define PRODUCT_ID      0x6776 | ||||
| #define DEVICE_VER      0x0001 | ||||
| #define MANUFACTURER    farmakon | ||||
| #define PRODUCT         "TOAD" | ||||
| #define DESCRIPTION     "TOAD" | ||||
| 
 | ||||
| /* key matrix size */ | ||||
| #define MATRIX_ROWS 6 | ||||
| #define MATRIX_COLS 14 | ||||
| 
 | ||||
| /* key matrix pins */ | ||||
| #define MATRIX_ROW_PINS { B0, F6, F5, F4, F1, F0 } | ||||
| #define MATRIX_COL_PINS { B3, B2, B1, E6, B7, C7, C6, D4, D6, D7, B4, D0, D1, F7 } | ||||
| #define UNUSED_PINS | ||||
| 
 | ||||
| /* COL2ROW or ROW2COL */ | ||||
| #define DIODE_DIRECTION COL2ROW | ||||
| 
 | ||||
| /* number of backlight levels */ | ||||
| 
 | ||||
| #ifdef BACKLIGHT_PIN | ||||
| #define BACKLIGHT_LEVELS 0 | ||||
| #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)) \ | ||||
| ) | ||||
| 
 | ||||
| #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,14 @@ | ||||
| # Toad | ||||
| 
 | ||||
| Toad: 70% Mechanical Keyboard PCB. | ||||
| 
 | ||||
| Toad schematic and PCB are available opensource under Creative Commons BY-SA 3.0 license on EasyEDA at [this link](https://easyeda.com/farmakon/70_Keyboard-d4f6baf4792d4ada9c0571fa3713e461) | ||||
| 
 | ||||
| For more informations on the Toad please visit this [geekhack.org thread](https://geekhack.org/index.php?topic=91388.0) | ||||
| 
 | ||||
| Make examples for these keyboards (after setting up your build environment): | ||||
| 
 | ||||
|     make toad:default | ||||
| 
 | ||||
| 
 | ||||
| See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. | ||||
| @ -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 ?= 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  # 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 ?= no  # Enable keyboard backlight functionality | ||||
| AUDIO_ENABLE ?= no | ||||
| RGBLIGHT_ENABLE ?= no | ||||
| @ -0,0 +1,18 @@ | ||||
| #include "toad.h" | ||||
| 
 | ||||
| void led_set_user(uint8_t usb_led) { | ||||
| 
 | ||||
| 	//LED1
 | ||||
| 	if (usb_led & (1 << USB_LED_CAPS_LOCK)) { | ||||
| 		DDRB |= (1 << 6); PORTB &= ~(1 << 6); | ||||
| 	} else { | ||||
| 		DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); | ||||
| 	} | ||||
| 
 | ||||
| 	//LED2
 | ||||
| 	if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { | ||||
| 		DDRB |= (1 << 5); PORTB &= ~(1 << 5); | ||||
| 	} else { | ||||
| 		DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); | ||||
| 	} | ||||
| } | ||||
| @ -0,0 +1,91 @@ | ||||
| #ifndef TOAD | ||||
| #define TOAD | ||||
| 
 | ||||
| #include "quantum.h" | ||||
| 
 | ||||
| // 70% keyboard: default - all keys
 | ||||
| #define LAYOUT_all( \ | ||||
| 	K000,       K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012,        \ | ||||
| 	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K013,  \ | ||||
| 	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,        \ | ||||
| 	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313,        \ | ||||
| 	K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413,        \ | ||||
| 	K500, K501, K502,                         K507,             K510, K511, K512, K513         \ | ||||
| ) { \ | ||||
| 	{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ | ||||
| 	{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \ | ||||
| 	{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \ | ||||
| 	{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \ | ||||
| 	{ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413 }, \ | ||||
| 	{ K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 }  \ | ||||
| } | ||||
| 
 | ||||
| // 70% keyboard: ANSI Winkey
 | ||||
| #define LAYOUT_ansi_wk( \ | ||||
| 	K000,       K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012,  \ | ||||
| 	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013,  \ | ||||
| 	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,  \ | ||||
| 	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,  \ | ||||
| 	K400,       K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412,        \ | ||||
| 	K500, K501, K502,                         K507,             K510, K511, K512, K513   \ | ||||
| ) { \ | ||||
| 	{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ | ||||
| 	{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \ | ||||
| 	{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \ | ||||
| 	{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO,K313 }, \ | ||||
| 	{ K400, KC_NO,K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \ | ||||
| 	{ K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 }  \ | ||||
| } | ||||
| 
 | ||||
| // 70% keyboard: ANSI Winkeyless
 | ||||
| #define LAYOUT_ansi_wkl( \ | ||||
| 	K000,       K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012,  \ | ||||
| 	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013,  \ | ||||
| 	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,  \ | ||||
| 	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,  \ | ||||
| 	K400,       K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412,        \ | ||||
| 	K500,       K502,                         K507,                   K511,       K513   \ | ||||
| ) { \ | ||||
| 	{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ | ||||
| 	{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \ | ||||
| 	{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \ | ||||
| 	{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO,K313 }, \ | ||||
| 	{ K400, KC_NO,K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \ | ||||
| 	{ K500, KC_NO,K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,KC_NO,K511, KC_NO,K513 }  \ | ||||
| } | ||||
| 
 | ||||
| // 70% keyboard: ISO Winkey
 | ||||
| #define LAYOUT_iso_wk( \ | ||||
| 	K000,       K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012,  \ | ||||
| 	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013,  \ | ||||
| 	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212,        \ | ||||
| 	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313,  \ | ||||
| 	K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412,        \ | ||||
| 	K500, K501, K502,                         K507,             K510, K511, K512, K513   \ | ||||
| ) { \ | ||||
| 	{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ | ||||
| 	{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \ | ||||
| 	{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO}, \ | ||||
| 	{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \ | ||||
| 	{ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \ | ||||
| 	{ K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 }  \ | ||||
| } | ||||
| 
 | ||||
| // 70% keyboard: ISO Winkeyless
 | ||||
| #define LAYOUT_iso_wkl( \ | ||||
| 	K000,       K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012,  \ | ||||
| 	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013,  \ | ||||
| 	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212,        \ | ||||
| 	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313,  \ | ||||
| 	K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412,        \ | ||||
| 	K500,       K502,                         K507,                   K511,       K513   \ | ||||
| ) { \ | ||||
| 	{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ | ||||
| 	{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \ | ||||
| 	{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO}, \ | ||||
| 	{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \ | ||||
| 	{ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \ | ||||
| 	{ K500, KC_NO,K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,KC_NO,K511, KC_NO,K513 }  \ | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| @ -1,20 +1,14 @@ | ||||
| XMMX and Toad | ||||
| ======== | ||||
| # XMMX | ||||
| 
 | ||||
| XMMX: Tenkeyless Mechanical Keyboard PCB designed to fit Filco Majestouch TKL and Cooler Master Quickfire Rapid cases | ||||
| Toad: 70% Mechanical Keyboard PCB. | ||||
| 
 | ||||
| XMMX schematic and PCB are available opensource under Creative Commons BY-SA 3.0 license on EasyEDA at [this link](https://easyeda.com/farmakon/XMMX-0447d28c1e4644b88fd04905d983684d) | ||||
| Toad schematic and PCB are available opensource under Creative Commons BY-SA 3.0 license on EasyEDA at [this link](https://easyeda.com/farmakon/70_Keyboard-d4f6baf4792d4ada9c0571fa3713e461) | ||||
| 
 | ||||
| For more informations on the XMMX please visit this [geekhack.org thread](https://geekhack.org/index.php?topic=93422.0) | ||||
| For more informations on the Toad please visit this [geekhack.org thread](https://geekhack.org/index.php?topic=91388.0) | ||||
| 
 | ||||
| Make examples for these keyboards (after setting up your build environment): | ||||
| 
 | ||||
|     make xmmx:default | ||||
| 
 | ||||
|     make xmmx:toad | ||||
| 
 | ||||
| 
 | ||||
| See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. | ||||
|  | ||||
| @ -1 +1,18 @@ | ||||
| #include "xmmx.h" | ||||
| 
 | ||||
| void led_set_user(uint8_t usb_led) { | ||||
| 
 | ||||
| 	//LED1
 | ||||
| 	if (usb_led & (1 << USB_LED_CAPS_LOCK)) { | ||||
| 		DDRB |= (1 << 6); PORTB &= ~(1 << 6); | ||||
| 	} else { | ||||
| 		DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); | ||||
| 	} | ||||
| 
 | ||||
| 	//LED2
 | ||||
| 	if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { | ||||
| 		DDRB |= (1 << 5); PORTB &= ~(1 << 5); | ||||
| 	} else { | ||||
| 		DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); | ||||
| 	} | ||||
| } | ||||
|  | ||||
					Loading…
					
					
				
		Reference in new issue
	
	 MechMerlin
						MechMerlin