forked from mfulz_github/qmk_firmware
		
	Compare commits
	
		
			13 Commits
		
	
	
		
			master
			...
			keyboards/
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 4940edec07 | |||
| b417f04f85 | |||
| fc450f4de0 | |||
| d7f74c7a6f | |||
| 3019b56aac | |||
| e4ff1fdf80 | |||
| fc9eb9dd06 | |||
| c473110c89 | |||
| 9bda2904f3 | |||
| d7bdb943f0 | |||
| dc5cb40c72 | |||
| b0ff58a23a | |||
| 27801eefc8 | 
							
								
								
									
										1
									
								
								keyboards/handwired/trenctyl_manuform/6x6/6x6.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								keyboards/handwired/trenctyl_manuform/6x6/6x6.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| #include "6x6.h" | ||||
							
								
								
									
										40
									
								
								keyboards/handwired/trenctyl_manuform/6x6/6x6.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								keyboards/handwired/trenctyl_manuform/6x6/6x6.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #include "trenctyl_manuform.h" | ||||
| 
 | ||||
| #if defined(KEYBOARD_handwired_trenctyl_manuform_6x6_f401) | ||||
| #    include "f401.h" | ||||
| #elif defined(KEYBOARD_handwired_trenctyl_manuform_6x6_f411) | ||||
| #    include "f411.h" | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #define XXX KC_NO | ||||
| 
 | ||||
| #define LAYOUT_6x6( \ | ||||
|     L00, L01, L02, L03, L04, L05,                          R00, R01, R02, R03, R04, R05, \ | ||||
|     L10, L11, L12, L13, L14, L15,                          R10, R11, R12, R13, R14, R15, \ | ||||
|     L20, L21, L22, L23, L24, L25,                          R20, R21, R22, R23, R24, R25, \ | ||||
|     L30, L31, L32, L33, L34, L35,                          R30, R31, R32, R33, R34, R35, \ | ||||
|     L40, L41, L42, L43, L44, L45,                          R40, R41, R42, R43, R44, R45, \ | ||||
|          L51, L52, L53,                                              R52, R53, \ | ||||
|                         L54, L55,                          R50, R51, \ | ||||
|                                   L64, L65,      R60, R61, \ | ||||
|                                   L62, L63 \ | ||||
| ) { \ | ||||
|     { L00, L01, L02, L03, L04, L05 }, \ | ||||
|     { L10, L11, L12, L13, L14, L15 }, \ | ||||
|     { L20, L21, L22, L23, L24, L25 }, \ | ||||
|     { L30, L31, L32, L33, L34, L35 }, \ | ||||
|     { L40, L41, L42, L43, L44, L45 }, \ | ||||
|     { XXX, L51, L52, L53, L54, L55 }, \ | ||||
|     { XXX, XXX, L62, L63, L64, L65 }, \ | ||||
| \ | ||||
|     { R00, R01, R02, R03, R04, R05 }, \ | ||||
|     { R10, R11, R12, R13, R14, R15 }, \ | ||||
|     { R20, R21, R22, R23, R24, R25 }, \ | ||||
|     { R30, R31, R32, R33, R34, R35 }, \ | ||||
|     { R40, R41, R42, R43, R44, R45 }, \ | ||||
|     { R50, R51, R52, R53, XXX, XXX }, \ | ||||
|     { R60, R61, XXX, XXX, XXX, XXX } \ | ||||
| } | ||||
							
								
								
									
										91
									
								
								keyboards/handwired/trenctyl_manuform/6x6/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								keyboards/handwired/trenctyl_manuform/6x6/config.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,91 @@ | ||||
| /*
 | ||||
| Copyright 2012 Jun Wako <wakojun@gmail.com> | ||||
| Copyright 2015 Jack Humbert | ||||
| 
 | ||||
| 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/>.
 | ||||
| */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "config_common.h" | ||||
| 
 | ||||
| /* key matrix size */ | ||||
| // Rows are doubled-up
 | ||||
| #define MATRIX_ROWS 14 | ||||
| #define MATRIX_COLS  6 | ||||
| 
 | ||||
| #define RGB_MATRIX_KEYPRESSES | ||||
| //#define RGB_MATRIX_KEYRELEASES
 | ||||
| #define RGB_MATRIX_FRAMEBUFFER_EFFECTS | ||||
| 
 | ||||
| #define SPLIT_TRANSPORT_MIRROR | ||||
| #define SPLIT_LAYER_STATE_ENABLE | ||||
| #define SPLIT_ENC_MODE_ENABLE | ||||
| #define SPLIT_ENC_FLAGS_ENABLE | ||||
| #define SPLIT_OLED_ENABLE | ||||
| 
 | ||||
| #define POINTING_DEVICE_INVERT_Y TRUE | ||||
| #define PMW3360_LIFTOFF_DISTANCE 0x03 | ||||
| 
 | ||||
| #define ONESHOT_TAP_TOGGLE 3 | ||||
| 
 | ||||
| #define OLED_TIMEOUT 0 | ||||
| 
 | ||||
| #define ENABLE_RGB_MATRIX_NONE | ||||
| #define ENABLE_RGB_MATRIX_SOLID_COLOR     // Static single hue, no speed support
 | ||||
| #define ENABLE_RGB_MATRIX_ALPHAS_MODS         // Static dual hue, speed is hue for secondary hue
 | ||||
| #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN    // Static gradient top to bottom, speed controls how much gradient changes
 | ||||
| #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT    // Static gradient left to right, speed controls how much gradient changes
 | ||||
| #define ENABLE_RGB_MATRIX_BREATHING           // Single hue brightness cycling animation
 | ||||
| #define ENABLE_RGB_MATRIX_BAND_SAT        // Single hue band fading saturation scrolling left to right
 | ||||
| #define ENABLE_RGB_MATRIX_BAND_VAL        // Single hue band fading brightness scrolling left to right
 | ||||
| #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT   // Single hue 3 blade spinning pinwheel fades saturation
 | ||||
| #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL   // Single hue 3 blade spinning pinwheel fades brightness
 | ||||
| #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT     // Single hue spinning spiral fades saturation
 | ||||
| #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL     // Single hue spinning spiral fades brightness
 | ||||
| #define ENABLE_RGB_MATRIX_CYCLE_ALL           // Full keyboard solid hue cycling through full gradient
 | ||||
| #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT    // Full gradient scrolling left to right
 | ||||
| #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN       // Full gradient scrolling top to bottom
 | ||||
| #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN        // Full gradient scrolling out to in
 | ||||
| #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL   // Full dual gradients scrolling out to in
 | ||||
| #define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON  // Full gradent Chevron shapped scrolling left to right
 | ||||
| #define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL      // Full gradient spinning pinwheel around center of keyboard
 | ||||
| #define ENABLE_RGB_MATRIX_CYCLE_SPIRAL        // Full gradient spinning spiral around center of keyboard
 | ||||
| #define ENABLE_RGB_MATRIX_DUAL_BEACON         // Full gradient spinning around center of keyboard
 | ||||
| #define ENABLE_RGB_MATRIX_RAINBOW_BEACON      // Full tighter gradient spinning around center of keyboard
 | ||||
| #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS   // Full dual gradients spinning two halfs of keyboard
 | ||||
| #define ENABLE_RGB_MATRIX_RAINDROPS           // Randomly changes a single key's hue
 | ||||
| #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly changes a single key's hue and saturation
 | ||||
| #define ENABLE_RGB_MATRIX_HUE_BREATHING       // Hue shifts up a slight ammount at the same time then shifts back
 | ||||
| #define ENABLE_RGB_MATRIX_HUE_PENDULUM        // Hue shifts up a slight ammount in a wave to the right then back to the left
 | ||||
| #define ENABLE_RGB_MATRIX_HUE_WAVE            // Hue shifts up a slight ammount and then back down in a wave to the right
 | ||||
| #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL       // Single hue fractal filled keys pulsing horizontally out to edges
 | ||||
| #define ENABLE_RGB_MATRIX_PIXEL_RAIN          // Randomly light keys with random hues
 | ||||
| #define ENABLE_RGB_MATRIX_TYPING_HEATMAP      // How hot is your WPM!
 | ||||
| #define ENABLE_RGB_MATRIX_DIGITAL_RAIN        // That famous computer simulation
 | ||||
| #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE   // Pulses keys hit to hue & value then fades value out
 | ||||
| #define ENABLE_RGB_MATRIX_SOLID_REACTIVE      // Static single hue pulses keys hit to shifted hue then fades to current hue
 | ||||
| #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE       // Hue & value pulse near a single key hit then fades value out
 | ||||
| #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE  // Hue & value pulse near multiple key hits then fades value out
 | ||||
| #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS      // Hue & value pulse the same column and row of a single key hit then fades value out
 | ||||
| #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Hue & value pulse the same column and row of multiple key hits then fades value out
 | ||||
| #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS      // Hue & value pulse away on the same column and row of a single key hit then fades value out
 | ||||
| #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multiple key hits then fades value out
 | ||||
| #define ENABLE_RGB_MATRIX_SPLASH              // Full gradient & value pulse away from a single key hit then fades value out
 | ||||
| #define ENABLE_RGB_MATRIX_MULTISPLASH         // Full gradient & value pulse away from multiple key hits then fades value out
 | ||||
| #define ENABLE_RGB_MATRIX_SOLID_SPLASH        // Hue & value pulse away from a single key hit then fades value out
 | ||||
| #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH   // Hue & value pulse away from multiple key hits then fades value out
 | ||||
| #define ENABLE_RGB_MATRIX_EFFECT_MAX | ||||
| 
 | ||||
| #define SPLIT_TRANSACTION_IDS_USER USER_SYNC_VIS_STATUS | ||||
							
								
								
									
										76
									
								
								keyboards/handwired/trenctyl_manuform/6x6/f01/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								keyboards/handwired/trenctyl_manuform/6x6/f01/config.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,76 @@ | ||||
| /*
 | ||||
| Copyright 2012 Jun Wako <wakojun@gmail.com> | ||||
| Copyright 2015 Jack Humbert | ||||
| 
 | ||||
| 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/>.
 | ||||
| */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "config_common.h" | ||||
| 
 | ||||
| #define PRODUCT_ID 0x3836 | ||||
| #define DEVICE_VER 0x0001 | ||||
| #define PRODUCT    Trenctyl Manuform (6x6) BlackPill F01 | ||||
| 
 | ||||
| #define MATRIX_ROW_PINS { A15, B13, B14, B15, A8, B6, B7 } | ||||
| #define MATRIX_COL_PINS { B10, B0, A1, A0, B4, C14 } | ||||
| 
 | ||||
| #define MATRIX_ROW_PINS_RIGHT { A15, B13, B14, B15, A8, B6, B7 } | ||||
| #define MATRIX_COL_PINS_RIGHT { B10, B0, A1, A0, B4, C14 } | ||||
| 
 | ||||
| #define DIODE_DIRECTION ROW2COL | ||||
| 
 | ||||
| #define RGB_DI_PIN B3 | ||||
| #define RGBLED_NUM 74 | ||||
| #define DRIVER_LED_TOTAL 74 | ||||
| 
 | ||||
| #define RGBLIGHT_SPLIT | ||||
| #define RGBLED_SPLIT { 38, 36 } | ||||
| #define RGBLIGHT_LIMIT_VAL 200 | ||||
| #define RGB_MATRIX_MAXIMUM_BRIGHTNESS RGBLIGHT_LIMIT_VAL | ||||
| #define RGB_MATRIX_SPLIT RGBLED_SPLIT | ||||
| #define RGB_MATRIX_CENTER { 110, 19 } | ||||
| 
 | ||||
| #define SERIAL_USART_RX_PIN A2 | ||||
| #define SELECT_SOFT_SERIAL_SPEED 1 | ||||
| #define FORCED_SYNC_THROTTLE_MS 200 | ||||
| #define SERIAL_USART_DRIVER SD2 | ||||
| #define SERIAL_USART_TX_PAL_MODE 7 | ||||
| #define SERIAL_USART_RX_PAL_MODE 7 | ||||
| #define SERIAL_USART_TIMEOUT 10 | ||||
| #define I2C1_SCL_PIN B8 | ||||
| #define I2C1_SDA_PIN B9 | ||||
| 
 | ||||
| #define PMW3360_CS_PIN A4 | ||||
| 
 | ||||
| #define SPI_DRIVER                           SPID1 | ||||
| #define SPI_SCK_PIN                          A5 | ||||
| #define SPI_SCK_PAL_MODE                     5 | ||||
| #define SPI_MOSI_PIN                         A7 | ||||
| #define SPI_MOSI_PAL_MODE                    5 | ||||
| #define SPI_MISO_PIN                         A6 | ||||
| #define SPI_MISO_PAL_MODE                    5 | ||||
| 
 | ||||
| #define ENCODERS_PAD_A { C13 } | ||||
| #define ENCODERS_PAD_B { C15 } | ||||
| 
 | ||||
| #define WS2812_PWM_DRIVER PWMD2 | ||||
| #define WS2812_PWM_CHANNEL 2 | ||||
| #define WS2812_DMA_STREAM STM32_DMA1_STREAM7 | ||||
| #define WS2812_DMA_CHANNEL 3 | ||||
| #define WS2812_PWM_PAL_MODE 1 | ||||
| 
 | ||||
| // hw rnd generator
 | ||||
| //#define ENC_HW_RND_STM32F4
 | ||||
							
								
								
									
										19
									
								
								keyboards/handwired/trenctyl_manuform/6x6/f01/f401.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								keyboards/handwired/trenctyl_manuform/6x6/f01/f401.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| /* Copyright 2020 Christopher Courtney, aka Drashna Jael're  (@drashna) <drashna@live.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/>.
 | ||||
|  */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "6x6.h" | ||||
							
								
								
									
										8
									
								
								keyboards/handwired/trenctyl_manuform/6x6/f01/halconf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								keyboards/handwired/trenctyl_manuform/6x6/f01/halconf.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #define HAL_USE_SERIAL TRUE | ||||
| #define HAL_USE_I2C TRUE | ||||
| #define HAL_USE_SPI TRUE | ||||
| #define HAL_USE_PWM TRUE | ||||
| 
 | ||||
| #include_next <halconf.h> | ||||
							
								
								
									
										33
									
								
								keyboards/handwired/trenctyl_manuform/6x6/f01/mcuconf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								keyboards/handwired/trenctyl_manuform/6x6/f01/mcuconf.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #include_next "mcuconf.h" | ||||
| 
 | ||||
| #undef STM32_SERIAL_USE_USART2 | ||||
| #define STM32_SERIAL_USE_USART2 TRUE | ||||
| 
 | ||||
| #undef STM32_UART_USART2_RX_DMA_STREAM | ||||
| #define STM32_UART_USART2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5) | ||||
| #undef STM32_UART_USART2_TX_DMA_STREAM | ||||
| #define STM32_UART_USART2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6) | ||||
| 
 | ||||
| #undef STM32_PWM_USE_TIM2 | ||||
| #define STM32_PWM_USE_TIM2 TRUE | ||||
| 
 | ||||
| #undef STM32_ST_USE_TIMER | ||||
| #define STM32_ST_USE_TIMER 5 | ||||
| 
 | ||||
| #undef STM32_SPI_USE_SPI1 | ||||
| #define STM32_SPI_USE_SPI1 TRUE | ||||
| 
 | ||||
| #undef STM32_SPI_SPI1_RX_DMA_STREAM | ||||
| #define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0) | ||||
| #undef STM32_SPI_SPI1_TX_DMA_STREAM | ||||
| #define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3) | ||||
| 
 | ||||
| #undef STM32_I2C_USE_I2C1 | ||||
| #define STM32_I2C_USE_I2C1 TRUE | ||||
| 
 | ||||
| #undef STM32_ADC_USE_ADC0 | ||||
| #define STM32_ADC_USE_ADC0 TRUE | ||||
| #undef STM32_ADC_USE_ADC1 | ||||
| #define STM32_ADC_USE_ADC1 TRUE | ||||
							
								
								
									
										6
									
								
								keyboards/handwired/trenctyl_manuform/6x6/f01/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								keyboards/handwired/trenctyl_manuform/6x6/f01/rules.mk
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| MCU = STM32F401 | ||||
| 
 | ||||
| BOOTLOADER = stm32-dfu | ||||
| 
 | ||||
| LTO_ENABLE = no | ||||
| SERIAL_DRIVER = usart | ||||
							
								
								
									
										102
									
								
								keyboards/handwired/trenctyl_manuform/6x6/info.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								keyboards/handwired/trenctyl_manuform/6x6/info.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,102 @@ | ||||
| { | ||||
|     "keyboard_name": "Dactyl Manuform 6x6", | ||||
|     "url": "", | ||||
|     "maintainer": "qmk", | ||||
|     "layouts": { | ||||
|         "LAYOUT_6x6": { | ||||
|             "layout": [ | ||||
|                 {"x": 0, "y": 0}, | ||||
|                 {"x": 1, "y": 0}, | ||||
|                 {"x": 2, "y": 0}, | ||||
|                 {"x": 3, "y": 0}, | ||||
|                 {"x": 4, "y": 0}, | ||||
|                 {"x": 5, "y": 0}, | ||||
| 
 | ||||
|                 {"x": 11, "y": 0}, | ||||
|                 {"x": 12, "y": 0}, | ||||
|                 {"x": 13, "y": 0}, | ||||
|                 {"x": 14, "y": 0}, | ||||
|                 {"x": 15, "y": 0}, | ||||
|                 {"x": 16, "y": 0}, | ||||
| 
 | ||||
|                 {"x": 0, "y": 1}, | ||||
|                 {"x": 1, "y": 1}, | ||||
|                 {"x": 2, "y": 1}, | ||||
|                 {"x": 3, "y": 1}, | ||||
|                 {"x": 4, "y": 1}, | ||||
|                 {"x": 5, "y": 1}, | ||||
| 
 | ||||
|                 {"x": 11, "y": 1}, | ||||
|                 {"x": 12, "y": 1}, | ||||
|                 {"x": 13, "y": 1}, | ||||
|                 {"x": 14, "y": 1}, | ||||
|                 {"x": 15, "y": 1}, | ||||
|                 {"x": 16, "y": 1}, | ||||
| 
 | ||||
|                 {"x": 0, "y": 2}, | ||||
|                 {"x": 1, "y": 2}, | ||||
|                 {"x": 2, "y": 2}, | ||||
|                 {"x": 3, "y": 2}, | ||||
|                 {"x": 4, "y": 2}, | ||||
|                 {"x": 5, "y": 2}, | ||||
| 
 | ||||
|                 {"x": 11, "y": 2}, | ||||
|                 {"x": 12, "y": 2}, | ||||
|                 {"x": 13, "y": 2}, | ||||
|                 {"x": 14, "y": 2}, | ||||
|                 {"x": 15, "y": 2}, | ||||
|                 {"x": 16, "y": 2}, | ||||
| 
 | ||||
|                 {"x": 0, "y": 3}, | ||||
|                 {"x": 1, "y": 3}, | ||||
|                 {"x": 2, "y": 3}, | ||||
|                 {"x": 3, "y": 3}, | ||||
|                 {"x": 4, "y": 3}, | ||||
|                 {"x": 5, "y": 3}, | ||||
| 
 | ||||
|                 {"x": 11, "y": 3}, | ||||
|                 {"x": 12, "y": 3}, | ||||
|                 {"x": 13, "y": 3}, | ||||
|                 {"x": 14, "y": 3}, | ||||
|                 {"x": 15, "y": 3}, | ||||
|                 {"x": 16, "y": 3}, | ||||
| 
 | ||||
|                 {"x": 0, "y": 4}, | ||||
|                 {"x": 1, "y": 4}, | ||||
|                 {"x": 2, "y": 4}, | ||||
|                 {"x": 3, "y": 4}, | ||||
|                 {"x": 4, "y": 4}, | ||||
|                 {"x": 5, "y": 4}, | ||||
| 
 | ||||
|                 {"x": 11, "y": 4}, | ||||
|                 {"x": 12, "y": 4}, | ||||
|                 {"x": 13, "y": 4}, | ||||
|                 {"x": 14, "y": 4}, | ||||
|                 {"x": 15, "y": 4}, | ||||
|                 {"x": 16, "y": 4}, | ||||
| 
 | ||||
|                 {"x": 1, "y": 5}, | ||||
|                 {"x": 2, "y": 5}, | ||||
|                 {"x": 3, "y": 5}, | ||||
| 
 | ||||
|                 {"x": 13, "y": 5}, | ||||
|                 {"x": 14, "y": 5}, | ||||
| 
 | ||||
|                 {"x": 4, "y": 6}, | ||||
|                 {"x": 5, "y": 6}, | ||||
| 
 | ||||
|                 {"x": 11, "y": 6}, | ||||
|                 {"x": 12, "y": 6}, | ||||
| 
 | ||||
|                 {"x": 6, "y": 7}, | ||||
|                 {"x": 7, "y": 7}, | ||||
| 
 | ||||
|                 {"x": 9, "y": 7}, | ||||
|                 {"x": 10, "y": 7}, | ||||
| 
 | ||||
|                 {"x": 6, "y": 8}, | ||||
|                 {"x": 7, "y": 8} | ||||
|             ] | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,25 @@ | ||||
| /*
 | ||||
| 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/>.
 | ||||
| */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #define SERIAL_USART_FULL_DUPLEX | ||||
| 
 | ||||
| //#define MASTER_LEFT
 | ||||
| #define MASTER_RIGHT | ||||
| 
 | ||||
| //#define EE_HANDS
 | ||||
| @ -0,0 +1,462 @@ | ||||
| #include QMK_KEYBOARD_H | ||||
| 
 | ||||
| #include "pointing_device.h" | ||||
| 
 | ||||
| #include "quantum_keycodes.h" | ||||
| #include "transactions.h" | ||||
| /*#include "enc.h"*/ | ||||
| 
 | ||||
| #define _QWERTZ 0 | ||||
| #define _CONTROL 1 | ||||
| #define _I3WM 2 | ||||
| #define _MOUSE 3 | ||||
| 
 | ||||
| #define QWERTZ TO(_QWERTZ) | ||||
| #define CONTROL TT(_CONTROL) | ||||
| #define I3WM TT(_I3WM) | ||||
| #define MOUSE TG(_MOUSE) | ||||
| 
 | ||||
| #ifdef RGB_MATRIX_ENABLE | ||||
| // clang-format off
 | ||||
| led_config_t g_led_config = {{ | ||||
|     {      0,      5,   10,     16,     22,     30,  }, | ||||
|     {      1,      6,   11,     17,     23,     31,  }, | ||||
|     {      2,      7,   12,     18,     24,     32,  }, | ||||
|     {      3,      8,   13,     19,     25,     33,  }, | ||||
|     {      4,      9,   14,     20,     26,     34,  }, | ||||
|     { NO_LED, NO_LED,   15,     21,     27,     35,  }, | ||||
|     { NO_LED, NO_LED,   29,     37,     28,     36,  }, | ||||
|     // RIGHT HALF
 | ||||
|     {   38,     45,     52,     58,     64,     69 }, | ||||
|     {   39,     46,     53,     59,     65,     70 }, | ||||
|     {   40,     47,     54,     60,     66,     71 }, | ||||
|     {   41,     48,     55,     61,     67,     72 }, | ||||
|     {   42,     49,     56,     62,     68,     73 }, | ||||
|     {   43,     50,     57,     63, NO_LED, NO_LED }, | ||||
|     {   44,     51, NO_LED, NO_LED, NO_LED, NO_LED }, | ||||
| }, { | ||||
|     {   0,  0 }, {   0,  8 }, {   0, 19 }, {   0, 30 }, {   0, 41 }, | ||||
|     {  20,  0 }, {  20,  8 }, {  20, 19 }, {  20, 30 }, {  20, 41 }, | ||||
|     {  40,  0 }, {  40,  8 }, {  40, 19 }, {  40, 30 }, {  40, 41 }, {  40, 52 }, | ||||
|     {  60,  0 }, {  60,  8 }, {  60, 19 }, {  60, 30 }, {  60, 41 }, {  60, 52 }, | ||||
|     {  80,  0 }, {  80,  8 }, {  80, 19 }, {  80, 30 }, {  80, 41 }, {  80, 52 }, {  80, 64 }, | ||||
|     {  40, 64 }, | ||||
|     { 100,  0 }, { 100,  8 }, { 100, 19 }, { 100, 30 }, { 100, 41 }, { 100, 52 }, { 100, 64 }, | ||||
|     {  60, 64 }, | ||||
|     // RIGHT HALF
 | ||||
|     { 120,  0 }, { 120,  8 }, { 120, 19 }, { 120, 30 }, { 120, 41 }, { 120, 52 }, { 120, 64 }, | ||||
|     { 140,  0 }, { 140,  8 }, { 140, 19 }, { 140, 30 }, { 140, 41 }, { 140, 52 }, { 140, 64 }, | ||||
|     { 160,  0 }, { 160,  8 }, { 160, 19 }, { 160, 30 }, { 160, 41 }, { 160, 52 }, | ||||
|     { 180,  0 }, { 180,  8 }, { 180, 19 }, { 180, 30 }, { 180, 41 }, { 180, 52 }, | ||||
|     { 200,  0 }, { 200,  8 }, { 200, 19 }, { 200, 30 }, { 200, 41 }, | ||||
|     { 224,  0 }, { 224,  8 }, { 224, 19 }, { 224, 30 }, { 224, 41 } | ||||
|  }, { | ||||
|     4, 4, 4, 4, 4, 4, | ||||
|     4, 4, 4, 4, 4, 4, | ||||
|     4, 4, 4, 4, 4, 4, | ||||
|     4, 4, 4, 4, 4, 4, | ||||
|     4, 4, 4, 4, 4, 4, | ||||
|           4, 4, | ||||
|                 4, 4, | ||||
|                 4, 4, | ||||
|                 4, 4, | ||||
|     /*4, 4, 4, 4, 4, 4,*/ | ||||
|     // RIGHT HALF
 | ||||
|     4, 4, 4, 4, 4, 4, | ||||
|     4, 4, 4, 4, 4, 4, | ||||
|     4, 4, 4, 4, 4, 4, | ||||
|     4, 4, 4, 4, 4, 4, | ||||
|     4, 4, 4, 4, 4, 4, | ||||
|           4, 4, | ||||
|     4, 4, | ||||
|     4, 4, | ||||
|     /*4, 4, 4, 4, 4, 4,*/ | ||||
| }}; | ||||
| #endif | ||||
| 
 | ||||
| enum my_keycodes { | ||||
|     CPI_NEXT = SAFE_RANGE, | ||||
|     CPI_PREV, | ||||
|     VIS_VAD, | ||||
|     VIS_VAI | ||||
| }; | ||||
| 
 | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
|     [_QWERTZ] = LAYOUT_6x6( | ||||
|         KC_F1  , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 ,                         KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 , | ||||
|         KC_GRV , KC_1  , KC_2  , KC_3  , KC_4  , KC_5  ,                         KC_6  , KC_7  , KC_8  , KC_9  , KC_0  ,KC_BSPC, | ||||
|         KC_TAB , KC_Q  , KC_W  , KC_E  , KC_R  , KC_T  ,                         KC_Y  , KC_U  , KC_I  , KC_O  , KC_P  ,KC_LBRC, | ||||
|         KC_LCTL, KC_A  , KC_S  , KC_D  , KC_F  , KC_G  ,                         KC_H  , KC_J  , KC_K  , KC_L  ,KC_SCLN,KC_QUOT, | ||||
|         OSM(MOD_LSFT), KC_Z  , KC_X  , KC_C  , KC_V  , KC_B  ,                   KC_N  , KC_M  ,KC_DOT,KC_COMM ,KC_SLSH,KC_BSLASH, | ||||
|                  KC_MUTE,KC_RBRC,KC_MINS,                                                       KC_NUBS, KC_EQL, | ||||
|                                          KC_LALT,KC_ENT,                        KC_SPC, KC_RALT, | ||||
|                                          KC_ESC,I3WM,                           KC_LGUI,MOUSE, | ||||
|                                          MOUSE,CONTROL | ||||
|     ), | ||||
| 
 | ||||
|     [_CONTROL] = LAYOUT_6x6( | ||||
|         ENC_INIT,ENC_LOAD,ENC_CLOSE,ENC_KEY,_______,_______,                   ENC_REQ_ALLOW,ENC_REQ_DENY,_______,_______,_______,EEP_RST, | ||||
|         _______,_______,_______,_______,_______,_______,                     _______,_______,_______,_______,_______,KC_DEL, | ||||
|         _______,_______,KC_PGDN,KC_UP,KC_PGUP,_______,                       _______,KC_7,KC_8,KC_9,_______,_______, | ||||
|         _______,_______,KC_LEFT,KC_DOWN,KC_RGHT,_______,                     KC_HOME,KC_4,KC_5,KC_6,KC_END,_______, | ||||
|         _______,_______,_______,_______,_______,_______,                     _______,KC_1,KC_2,KC_3,VIS_VAD,_______, | ||||
|                 _______,VIS_VAI,_______,                                               KC_0,_______, | ||||
|                                                 RGB_MOD,RGB_RMOD,           KC_ENT,RGB_VAI, | ||||
|                                                 RGB_SPD,RGB_SPI,            RGB_VAD,RGB_TOG, | ||||
|                                                 QWERTZ,_______ | ||||
|     ), | ||||
| 
 | ||||
|     [_I3WM] = LAYOUT_6x6( | ||||
|         _______,_______,_______,_______,_______,_______,                        _______,_______,_______,_______,_______,_______, | ||||
|         _______,LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),         LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0),_______, | ||||
|         _______,SGUI(KC_C),LGUI(KC_W),LGUI(KC_E),_______,_______,               LGUI(KC_Y),_______,LGUI(KC_I),_______,LGUI(KC_P),_______, | ||||
|         _______,LGUI(KC_ENT),LGUI(KC_S),LGUI(KC_D),_______,_______,             LGUI(KC_H),LGUI(KC_J),LGUI(KC_K),LGUI(KC_L),_______,_______, | ||||
|         _______,_______,_______,LGUI(KC_C),_______,_______,                     LAG(KC_N),_______,_______,_______,_______,_______, | ||||
|                 _______,_______,_______,                                                       _______,_______, | ||||
|                                         _______,_______,                        LGUI(KC_ENT),_______, | ||||
|                                         _______,_______,                        _______,_______, | ||||
|                                         QWERTZ,_______ | ||||
|     ), | ||||
| 
 | ||||
|     [_MOUSE] = LAYOUT_6x6( | ||||
|         _______,_______,_______,_______,_______,_______,                       _______,_______,_______,_______,_______,_______, | ||||
|         _______,_______,_______,_______,_______,_______,                       _______,_______,_______,_______,_______,_______, | ||||
|         _______,_______,_______,_______,_______,_______,                       _______,_______,_______,_______,_______,_______, | ||||
|         _______,_______,KC_MS_BTN2,KC_MS_BTN3,KC_MS_BTN1,_______,                       _______,_______,_______,_______,_______,_______, | ||||
|         _______,_______,_______,_______,_______,_______,                       _______,KC_MS_BTN1,KC_MS_BTN3,KC_MS_BTN2,_______,_______, | ||||
|                 _______,_______,_______,                                               KC_MS_WH_DOWN,KC_MS_WH_UP, | ||||
|                                                 _______,_______,               KC_SPC,CPI_NEXT, | ||||
|                                                 _______,_______,               CPI_PREV,QWERTZ, | ||||
|                                                 _______,QWERTZ | ||||
|     ), | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| #ifdef OLED_ENABLE | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| 
 | ||||
| int get_val_percent(void) { | ||||
| #ifdef RGB_MATRIX_MAXIMUM_BRIGHTNESS | ||||
|     uint8_t maxVal = RGB_MATRIX_MAXIMUM_BRIGHTNESS; | ||||
| #else | ||||
|     uint8_t maxVal = 255; | ||||
| #endif | ||||
|     uint8_t actVal = rgb_matrix_get_val(); | ||||
| 
 | ||||
|     float ret = ((float) 100)/((float) maxVal)*((float)actVal); | ||||
| 
 | ||||
|     return ((int) ret); | ||||
| } | ||||
| 
 | ||||
| int get_speed_percent(void) { | ||||
|     uint8_t maxVal = 255; | ||||
|     uint8_t actVal = rgb_matrix_get_speed(); | ||||
| 
 | ||||
|     float ret = ((float) 100)/((float) maxVal)*((float)actVal); | ||||
| 
 | ||||
|     return ((int) ret); | ||||
| } | ||||
| 
 | ||||
| #ifdef POINTING_DEVICE_ENABLE | ||||
| static uint16_t _cpi; | ||||
| #endif | ||||
| 
 | ||||
| static uint8_t _vis_timeout_sec; | ||||
| static uint32_t _vis_timer; | ||||
| static bool _vis_status; | ||||
| 
 | ||||
| bool oled_task_user(void) { | ||||
|     // Host Keyboard Layer Status
 | ||||
|     if(is_keyboard_master()) { | ||||
|         uint32_t _oled_timeout = ((_vis_timeout_sec * 1000) - timer_elapsed32(_vis_timer)) / 1000; | ||||
|         if (!_vis_status) { | ||||
|             // turn displays off
 | ||||
|             oled_off(); | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         oled_write_P(PSTR("L: "), false); | ||||
| 
 | ||||
|         switch (get_highest_layer(layer_state)) { | ||||
|             case _QWERTZ: | ||||
|                 oled_write_P(PSTR("Quertz\n"), false); | ||||
|                 break; | ||||
|             case _CONTROL: | ||||
|                 oled_write_P(PSTR("Control\n"), false); | ||||
|                 break; | ||||
|             case _I3WM: | ||||
|                 oled_write_P(PSTR("I3WM\n"), false); | ||||
|                 break; | ||||
|             case _MOUSE: | ||||
|                 oled_write_P(PSTR("MOUSE\n"), false); | ||||
|                 break; | ||||
|             default: | ||||
|                 oled_write_P(PSTR("Undefined\n"), false); | ||||
|         } | ||||
| 
 | ||||
|         char brightness[100]; | ||||
|         memset(brightness, 0x00, 100); | ||||
|         if (rgb_matrix_is_enabled()) { | ||||
|             snprintf(brightness, 100, "B: %d%% S: %d%%\n", get_val_percent(), get_speed_percent()); | ||||
|         } else { | ||||
|             snprintf(brightness, 100, "B: OFF\n"); | ||||
|         } | ||||
|         oled_write_P(PSTR(brightness), false); | ||||
| 
 | ||||
| #ifdef POINTING_DEVICE_ENABLE | ||||
|         switch(_cpi) { | ||||
|             case 100: | ||||
|                 oled_write_P(PSTR("M: >\n"), false); | ||||
|                 break; | ||||
|             case 200: | ||||
|                 oled_write_P(PSTR("M: >>\n"), false); | ||||
|                 break; | ||||
|             case 400: | ||||
|                 oled_write_P(PSTR("M: >>>\n"), false); | ||||
|                 break; | ||||
|             case 500: | ||||
|                 oled_write_P(PSTR("M: >>>>\n"), false); | ||||
|                 break; | ||||
|             case 600: | ||||
|                 oled_write_P(PSTR("M: >>>>>\n"), false); | ||||
|                 break; | ||||
|         } | ||||
| #endif | ||||
| 
 | ||||
|         oled_write_P(PSTR("V: "), false); | ||||
|         oled_write_P(get_u8_str(_oled_timeout, ' '), false); | ||||
|         oled_write_P(PSTR("s\n"), false); | ||||
|     } else { | ||||
| #ifdef ENC_ENABLE | ||||
|         enc_write_oled(false); | ||||
| #endif | ||||
|         oled_write_P(PSTR("L: "), false); | ||||
| 
 | ||||
|         switch (get_highest_layer(layer_state)) { | ||||
|             case _QWERTZ: | ||||
|                 oled_write_P(PSTR("Quertz\n"), false); | ||||
|                 break; | ||||
|             case _CONTROL: | ||||
|                 oled_write_P(PSTR("Control\n"), false); | ||||
|                 break; | ||||
|             case _I3WM: | ||||
|                 oled_write_P(PSTR("I3WM\n"), false); | ||||
|                 break; | ||||
|             case _MOUSE: | ||||
|                 oled_write_P(PSTR("MOUSE\n"), false); | ||||
|                 break; | ||||
|             default: | ||||
|                 oled_write_P(PSTR("Undefined\n"), false); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return true; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #ifdef POINTING_DEVICE_ENABLE | ||||
| 
 | ||||
| void pointing_device_init_user(void) { | ||||
|     _cpi = 400; | ||||
| 
 | ||||
|     pointing_device_set_cpi(_cpi); | ||||
| } | ||||
| 
 | ||||
| void _cpi_next(void) { | ||||
|     switch(_cpi) { | ||||
|         case 100: | ||||
|             _cpi = 200; | ||||
|             break; | ||||
|         case 200: | ||||
|             _cpi = 400; | ||||
|             break; | ||||
|         case 400: | ||||
|             _cpi = 500; | ||||
|             break; | ||||
|         case 500: | ||||
|             _cpi = 600; | ||||
|             break; | ||||
|         case 600: | ||||
|             _cpi = 100; | ||||
|             break; | ||||
|     } | ||||
| 
 | ||||
|     pointing_device_set_cpi(_cpi); | ||||
| } | ||||
| 
 | ||||
| void _cpi_prev(void) { | ||||
|     switch(_cpi) { | ||||
|         case 100: | ||||
|             _cpi = 600; | ||||
|             break; | ||||
|         case 200: | ||||
|             _cpi = 100; | ||||
|             break; | ||||
|         case 400: | ||||
|             _cpi = 200; | ||||
|             break; | ||||
|         case 500: | ||||
|             _cpi = 400; | ||||
|             break; | ||||
|         case 600: | ||||
|             _cpi = 500; | ||||
|             break; | ||||
|     } | ||||
| 
 | ||||
|     pointing_device_set_cpi(_cpi); | ||||
| } | ||||
| 
 | ||||
| report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) { | ||||
|     if (!layer_state_is(_MOUSE)) { | ||||
|         mouse_report.h = 0; | ||||
|         mouse_report.v = 0; | ||||
|         mouse_report.x = 0; | ||||
|         mouse_report.y = 0; | ||||
|     } | ||||
|     return mouse_report; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { | ||||
|     if (!_vis_status) { | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     HSV hsv = (HSV){0, 0, 0}; | ||||
|     HSV hsv_alt = (HSV){0, 0, 0}; | ||||
|     bool led_off = false; | ||||
|     bool led_alt = false; | ||||
| 
 | ||||
|     switch(get_highest_layer(layer_state)) {  // special handling per layer
 | ||||
|         case _CONTROL: | ||||
|             hsv = (HSV){0, 255, 255}; | ||||
|             break; | ||||
|         case _I3WM: | ||||
|             hsv = (HSV){85, 255, 255}; | ||||
|             break; | ||||
|         case _MOUSE: | ||||
|             hsv = (HSV){170, 255, 255}; | ||||
|             led_off = true; | ||||
|             break; | ||||
|         default: | ||||
|             return; | ||||
|     } | ||||
| 
 | ||||
|     hsv.v = rgb_matrix_get_val(); | ||||
|     RGB rgb = hsv_to_rgb(hsv); | ||||
|     hsv_alt.v = rgb_matrix_get_val(); | ||||
|     RGB rgb_alt = hsv_to_rgb(hsv_alt); | ||||
| 
 | ||||
|     for (uint8_t row=0; row<MATRIX_ROWS; ++row) { | ||||
|         for (uint8_t col=0; col<MATRIX_COLS; ++col) { | ||||
|             uint8_t index = g_led_config.matrix_co[row][col]; | ||||
| 
 | ||||
|             if (index >= led_min && index <= led_max && index != NO_LED) { | ||||
|                 if (keymap_key_to_keycode(get_highest_layer(layer_state), (keypos_t){col, row}) > KC_TRNS) { | ||||
|                     rgb_matrix_set_color(index, rgb.r, rgb.g, rgb.b); | ||||
|                 } else { | ||||
|                     if (led_alt) { | ||||
|                         rgb_matrix_set_color(index, rgb_alt.r, rgb_alt.g, rgb_alt.b); | ||||
|                         continue; | ||||
|                     } | ||||
|                     if (led_off) { | ||||
|                         rgb_matrix_set_color(index, 0, 0, 0); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| typedef struct _vis_status { | ||||
|     bool m2s_data; | ||||
| } vis_status_t; | ||||
| 
 | ||||
| void user_sync_vis_status_slave_handler(uint8_t in_buflen, const void* in_data, uint8_t out_buflen, void* out_data) { | ||||
|     const vis_status_t *m2s = (const vis_status_t*)in_data; | ||||
|     _vis_status = m2s->m2s_data; | ||||
| } | ||||
| 
 | ||||
| bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||||
|     if (is_keyboard_master()) { | ||||
|         _vis_timer = timer_read32(); | ||||
|     } | ||||
| 
 | ||||
|     switch (keycode) { | ||||
| #ifdef POINTING_DEVICE_ENABLE | ||||
|         case CPI_PREV: | ||||
|             if (record->event.pressed) { | ||||
|                 _cpi_prev(); | ||||
|             } | ||||
|             return false; | ||||
|         case CPI_NEXT: | ||||
|             if (record->event.pressed) { | ||||
|                 _cpi_next(); | ||||
|             } | ||||
|             return false; | ||||
| #endif | ||||
|         case VIS_VAD: | ||||
|             if (record->event.pressed) { | ||||
|                 _vis_timeout_sec -= 10; | ||||
|             } | ||||
|             return false; | ||||
|         case VIS_VAI: | ||||
|             if (record->event.pressed) { | ||||
|                 _vis_timeout_sec += 10; | ||||
|             } | ||||
|             return false; | ||||
|         default: | ||||
|             return true; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| bool encoder_update_user(uint8_t index, bool clockwise) { | ||||
|     switch(index) { | ||||
|         case 0: | ||||
|             if(clockwise) { | ||||
|                 tap_code_delay(KC_VOLU, 10); | ||||
|             } else { | ||||
|                 tap_code_delay(KC_VOLD, 10); | ||||
|             } | ||||
|             break; | ||||
|     } | ||||
|     return false; | ||||
| } | ||||
| 
 | ||||
| void keyboard_pre_init_user(void) { | ||||
|     _vis_status = true; | ||||
|     _vis_timeout_sec = 120; | ||||
|     _vis_timer = timer_read32(); | ||||
|     pre_init_enc(); | ||||
| } | ||||
| 
 | ||||
| void eeconfig_init_user(void) { | ||||
|     eeconfig_init_enc(); | ||||
| } | ||||
| 
 | ||||
| void keyboard_post_init_user(void) { | ||||
|     transaction_register_rpc(USER_SYNC_VIS_STATUS, user_sync_vis_status_slave_handler); | ||||
| } | ||||
| 
 | ||||
| void housekeeping_task_user(void) { | ||||
|     if (is_keyboard_master()) { | ||||
|         if (timer_elapsed32(_vis_timer) >= (_vis_timeout_sec * 1000)) { | ||||
|             _vis_status = false; | ||||
|         } else { | ||||
|             _vis_status = true; | ||||
|         } | ||||
|         static uint32_t last_sync = 0; | ||||
|         if (timer_elapsed32(last_sync) > 500) { | ||||
|             vis_status_t m2s = {_vis_status}; | ||||
|             if (transaction_rpc_send(USER_SYNC_VIS_STATUS, sizeof(m2s), &m2s)) { | ||||
|                 last_sync = timer_read32(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (!_vis_status) { | ||||
|         rgb_matrix_set_color_all(0, 0, 0); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										26
									
								
								keyboards/handwired/trenctyl_manuform/6x6/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								keyboards/handwired/trenctyl_manuform/6x6/rules.mk
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| # Build Options
 | ||||
| #   change yes to no to disable
 | ||||
| #
 | ||||
| BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite | ||||
| MOUSEKEY_ENABLE = yes       # Mouse keys | ||||
| EXTRAKEY_ENABLE = yes       # Audio control and System control | ||||
| CONSOLE_ENABLE = no         # Console for debug | ||||
| COMMAND_ENABLE = no         # Commands for debug and configuration | ||||
| # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | ||||
| NKRO_ENABLE = yes           # USB Nkey Rollover | ||||
| BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality | ||||
| RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow | ||||
| AUDIO_ENABLE = no           # Audio output | ||||
| SPLIT_KEYBOARD = yes | ||||
| RGB_MATRIX_ENABLE = yes | ||||
| RGB_MATRIX_DRIVER = WS2812 | ||||
| WS2812_DRIVER = pwm | ||||
| VIA_ENABLE = yes | ||||
| RAW_ENABLE = yes | ||||
| OLED_ENABLE = yes | ||||
| ENC_ENABLE = yes | ||||
| 
 | ||||
| POINTING_DEVICE_ENABLE = yes | ||||
| POINTING_DEVICE_DRIVER = pmw3360 | ||||
| #DIP_SWITCH_ENABLE = yes
 | ||||
| ENCODER_ENABLE = yes | ||||
							
								
								
									
										47
									
								
								keyboards/handwired/trenctyl_manuform/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								keyboards/handwired/trenctyl_manuform/config.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,47 @@ | ||||
| /*
 | ||||
| Copyright 2012 Jun Wako <wakojun@gmail.com> | ||||
| Copyright 2015 Jack Humbert | ||||
| 
 | ||||
| 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/>.
 | ||||
| */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "config_common.h" | ||||
| 
 | ||||
| /* USB Device descriptor parameter */ | ||||
| #define VENDOR_ID 0x44FD | ||||
| #define MANUFACTURER mfulz | ||||
| 
 | ||||
| /* mouse config */ | ||||
| //#define MOUSEKEY_INTERVAL    20
 | ||||
| //#define MOUSEKEY_DELAY       0
 | ||||
| //#define MOUSEKEY_TIME_TO_MAX 60
 | ||||
| //#define MOUSEKEY_MAX_SPEED   7
 | ||||
| //#define MOUSEKEY_WHEEL_DELAY 0
 | ||||
| #define MOUSEKEY_WHEEL_INTERVAL 120 | ||||
| 
 | ||||
| /* Set 0 if debouncing isn't needed */ | ||||
| #define DEBOUNCE 5 | ||||
| 
 | ||||
| /* serial.c configuration for split keyboard */ | ||||
| #define SOFT_SERIAL_PIN A3 | ||||
| 
 | ||||
| /* 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 | ||||
| 
 | ||||
| /* Enables This makes it easier for fast typists to use dual-function keys */ | ||||
| #define PERMISSIVE_HOLD | ||||
							
								
								
									
										159
									
								
								keyboards/handwired/trenctyl_manuform/readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								keyboards/handwired/trenctyl_manuform/readme.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,159 @@ | ||||
| Dactyl Manuform (4x5, 5x6, 5x7, 6x6) | ||||
| ====== | ||||
| the [Dactyl-Manuform](https://github.com/tshort/dactyl-keyboard) is a split curved keyboard based on the design of [adereth dactyl](https://github.com/adereth/dactyl-keyboard) and thumb cluster design of the [manuform](https://geekhack.org/index.php?topic=46015.0) keyboard, the hardware is similar to the let's split keyboard. all information needed for making one is in the first link. | ||||
|  | ||||
| 
 | ||||
| 
 | ||||
| ## First Time Setup | ||||
| 
 | ||||
| Download or clone the `qmk_firmware` repo and navigate to its top level directory. Once your build environment is setup, you'll be able to generate the default .hex using: | ||||
| 
 | ||||
| Depending on your Layout chose one of the follwing commands: | ||||
| 
 | ||||
| ``` | ||||
| $ make handwired/dactyl_manuform/YOUR_LAYOUT:YOUR_KEYMAP_NAME | ||||
| ``` | ||||
| 
 | ||||
| example: | ||||
| ``` | ||||
| $ make handwired/dactyl_manuform/4x5:default | ||||
| ``` | ||||
| 
 | ||||
| If everything worked correctly you will see a file: | ||||
| 
 | ||||
| ``` | ||||
| dactyl_manuform_YOUR_LAYOUT_YOUR_KEYMAP_NAME.hex | ||||
| ``` | ||||
| 
 | ||||
| For more information on customizing keymaps, take a look at the primary documentation for [Customizing Your Keymap](/docs/faq_keymap.md) in the main readme.md. | ||||
| 
 | ||||
| 
 | ||||
| ## Keymaps | ||||
| 
 | ||||
| ### [Keymaps 4x5](/keyboards/handwired/dactyl_manuform/4x5/keymaps/) | ||||
| 
 | ||||
| #### Default | ||||
| Simple QWERTY layout with 3 Layers. | ||||
| #### Dvorak | ||||
| 
 | ||||
| ### [Keymaps 5x6](/keyboards/handwired/dactyl_manuform/5x6/keymaps/) | ||||
| 
 | ||||
| #### Default | ||||
| Just a copy of the Impstyle keymap. Feel free to adjust it. | ||||
| 
 | ||||
| #### Impstyle | ||||
| A simple QWERTY keymap with 3 Layers. Both sides are connected via serial and the Left ist the master. | ||||
| 
 | ||||
| ### [Keymaps 5x7 aka almost Ergodox](/keyboards/handwired/dactyl_manuform/5x7/keymaps/) | ||||
| #### Default | ||||
| Keymap of Loligagger from geekhack. | ||||
| 
 | ||||
| ### [Keymaps 6x6](/keyboards/handwired/dactyl_manuform/6x6/keymaps/) | ||||
| 
 | ||||
| #### Default | ||||
| Simple QWERTY layout with 3 Layers. | ||||
| 
 | ||||
| ## Required Hardware | ||||
| 
 | ||||
| Apart from diodes and key switches for the keyboard matrix in each half, you | ||||
| will need: | ||||
| 
 | ||||
| * 2 Arduino Pro Micros. You can find these on AliExpress for ≈3.50USD each. | ||||
| * 2 TRRS sockets and 1 TRRS cable, or 2 TRS sockets and 1 TRS cable | ||||
| 
 | ||||
| Alternatively, you can use any sort of cable and socket that has at least 3 | ||||
| wires. If you want to use I2C to communicate between halves, you will need a | ||||
| cable with at least 4 wires and 2x 4.7kΩ pull-up resistors | ||||
| 
 | ||||
| ## Optional Hardware | ||||
| A speaker can be hooked-up to either side to the `5` (`C6`) pin and `GND`, and turned on via `AUDIO_ENABLE`. | ||||
| 
 | ||||
| ## Wiring | ||||
| 
 | ||||
| The 3 wires of the TRS/TRRS cable need to connect GND, VCC, and digital pin 3 (i.e. | ||||
| PD0 on the ATmega32u4) between the two Pro Micros. | ||||
| 
 | ||||
| Next, wire your key matrix to any of the remaining 17 IO pins of the pro micro | ||||
| and modify the `matrix.c` accordingly. | ||||
| 
 | ||||
| The wiring for serial: | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| The wiring for i2c: | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| The pull-up resistors may be placed on either half. It is also possible | ||||
| to use 4 resistors and have the pull-ups in both halves, but this is | ||||
| unnecessary in simple use cases. | ||||
| 
 | ||||
| You can change your configuration between serial and i2c by modifying your `config.h` file. | ||||
| 
 | ||||
| ## Notes on Software Configuration | ||||
| 
 | ||||
| the keymaps in here are for the 4x5 layout of the keyboard only. | ||||
| 
 | ||||
| ## Flashing | ||||
| 
 | ||||
| To flash your firmware take a look at: [Flashing Instructions and Bootloader Information](https://docs.qmk.fm/#/flashing) | ||||
| 
 | ||||
| 
 | ||||
| ## Choosing which board to plug the USB cable into (choosing Master) | ||||
| 
 | ||||
| Because the two boards are identical, the firmware has logic to differentiate the left and right board. | ||||
| 
 | ||||
| It uses two strategies to figure things out: looking at the EEPROM (memory on the chip) or looking if the current board has the usb cable. | ||||
| 
 | ||||
| The EEPROM approach requires additional setup (flashing the eeprom) but allows you to swap the usb cable to either side. | ||||
| 
 | ||||
| The USB cable approach is easier to setup and if you just want the usb cable on the left board, you do not need to do anything extra. | ||||
| 
 | ||||
| ### Setting the left hand as master | ||||
| 
 | ||||
| If you always plug the usb cable into the left board, nothing extra is needed as this is the default. Comment out `EE_HANDS` and comment out `I2C_MASTER_RIGHT` or `MASTER_RIGHT` if for some reason it was set. | ||||
| 
 | ||||
| ### Setting the right hand as master | ||||
| 
 | ||||
| If you always plug the usb cable into the right board, add an extra flag to your `config.h` | ||||
| ``` | ||||
|  #define MASTER_RIGHT | ||||
| ``` | ||||
| 
 | ||||
| ### Setting EE_hands to use either hands as master | ||||
| 
 | ||||
| If you define `EE_HANDS` in your `config.h`, you will need to set the | ||||
| EEPROM for the left and right halves. | ||||
| 
 | ||||
| The EEPROM is used to store whether the | ||||
| half is left handed or right handed. This makes it so that the same firmware | ||||
| file will run on both hands instead of having to flash left and right handed | ||||
| versions of the firmware to each half. To flash the EEPROM file for the left | ||||
| half run: | ||||
| ``` | ||||
| make handwired/dactyl_promicro:default:dfu-split-left | ||||
| make handwired/dactyl_promicro:default:dfu-split-right | ||||
| ``` | ||||
| 
 | ||||
| After you have flashed the EEPROM, you then need to set `EE_HANDS` in your config.h, rebuild the hex files and reflash. | ||||
| 
 | ||||
| Note that you need to program both halves, but you have the option of using | ||||
| different keymaps for each half. You could program the left half with a QWERTY | ||||
| layout and the right half with a Colemak layout using bootmagic's default layout option. | ||||
| Then if you connect the left half to a computer by USB the keyboard will use QWERTY and Colemak when the | ||||
| right half is connected. | ||||
| 
 | ||||
| 
 | ||||
| Notes on Using Pro Micro 3.3V | ||||
| ----------------------------- | ||||
| 
 | ||||
| Do update the `F_CPU` parameter in `rules.mk` to `8000000` which reflects | ||||
| the frequency on the 3.3V board. | ||||
| 
 | ||||
| Also, if the slave board is producing weird characters in certain columns, | ||||
| update the following line in `matrix.c` to the following: | ||||
| 
 | ||||
| ``` | ||||
| // wait_us(30);  // without this wait read unstable value. | ||||
| wait_us(300);  // without this wait read unstable value. | ||||
| ``` | ||||
| @ -0,0 +1 @@ | ||||
| #include "trenctyl_manuform.h" | ||||
| @ -0,0 +1,7 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #if defined(KEYBOARD_handwired_trenctyl_manuform_6x6) | ||||
| #    include "6x6.h" | ||||
| #endif | ||||
| 
 | ||||
| #include "quantum.h" | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user