forked from mfulz_github/qmk_firmware
Compare commits
19 Commits
master
...
keyboards/
Author | SHA1 | Date |
---|---|---|
Matthias Fulz | 81e56339a0 | |
Matthias Fulz | ae7e3d8139 | |
Matthias Fulz | 0a14d4faef | |
Matthias Fulz | 212c54f840 | |
Matthias Fulz | 98add843de | |
Matthias Fulz | fa40c927ea | |
Matthias Fulz | 4940edec07 | |
Matthias Fulz | b417f04f85 | |
Matthias Fulz | fc450f4de0 | |
Matthias Fulz | d7f74c7a6f | |
Matthias Fulz | 3019b56aac | |
Matthias Fulz | e4ff1fdf80 | |
Matthias Fulz | fc9eb9dd06 | |
Matthias Fulz | c473110c89 | |
Matthias Fulz | 9bda2904f3 | |
Matthias Fulz | d7bdb943f0 | |
Matthias Fulz | dc5cb40c72 | |
Matthias Fulz | b0ff58a23a | |
Matthias Fulz | 27801eefc8 |
|
@ -0,0 +1 @@
|
|||
#include "6x6.h"
|
|
@ -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 } \
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
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
|
||||
|
||||
/* 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_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
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
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
|
||||
|
||||
// #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 RGB_MATRIX_LED_COUNT 74
|
||||
|
||||
#define RGBLIGHT_SPLIT
|
||||
#define RGBLED_SPLIT \
|
||||
{ 38, 36 }
|
||||
#define RGBLIGHT_LIMIT_VAL 200
|
||||
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
|
||||
#define RGB_MATRIX_SPLIT \
|
||||
{ 38, 36 }
|
||||
#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 PMW33XX_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
|
|
@ -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"
|
|
@ -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>
|
|
@ -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
|
|
@ -0,0 +1,6 @@
|
|||
MCU = STM32F401
|
||||
|
||||
BOOTLOADER = stm32-dfu
|
||||
|
||||
LTO_ENABLE = no
|
||||
SERIAL_DRIVER = usart
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
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
|
||||
|
||||
// #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 \
|
||||
{ B1, B0, A1, A0, B4, C14 }
|
||||
|
||||
#define DIODE_DIRECTION ROW2COL
|
||||
|
||||
#define RGB_DI_PIN B3
|
||||
#define RGBLED_NUM 74
|
||||
#define DRIVER_LED_TOTAL 74
|
||||
#define RGB_MATRIX_LED_COUNT 74
|
||||
|
||||
#define RGBLIGHT_SPLIT
|
||||
#define RGBLED_SPLIT \
|
||||
{ 38, 36 }
|
||||
#define RGBLIGHT_LIMIT_VAL 200
|
||||
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
|
||||
#define RGB_MATRIX_SPLIT \
|
||||
{ 38, 36 }
|
||||
#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 PMW33XX_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
|
|
@ -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"
|
|
@ -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>
|
|
@ -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
|
|
@ -0,0 +1,6 @@
|
|||
MCU = STM32F401
|
||||
|
||||
BOOTLOADER = tinyuf2
|
||||
|
||||
LTO_ENABLE = no
|
||||
SERIAL_DRIVER = usart
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"keyboard_name": "Trenctyl Manuform(6x6) BlackPill F401",
|
||||
"url": "",
|
||||
"usb": {
|
||||
"vid": "0x44FD",
|
||||
"pid": "0x3836",
|
||||
"device_version": "0.1.0"
|
||||
},
|
||||
"manufacturer": "mfulz",
|
||||
"maintainer": "Matthias Fulz",
|
||||
"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,580 @@
|
|||
#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
|
||||
extern rgb_config_t rgb_matrix_config;
|
||||
|
||||
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_BACKSLASH,
|
||||
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,_______,_______,_______,_______,*/
|
||||
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,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 uint16_t _vis_timeout_sec;
|
||||
static uint32_t _vis_timer;
|
||||
static bool _vis_status;
|
||||
|
||||
#if defined(RGB_MATRIX_EFFECT)
|
||||
# undef RGB_MATRIX_EFFECT
|
||||
#endif // defined(RGB_MATRIX_EFFECT)
|
||||
|
||||
#define RGB_MATRIX_EFFECT(x) RGB_MATRIX_EFFECT_##x,
|
||||
enum {
|
||||
RGB_MATRIX_EFFECT_NONE,
|
||||
#include "rgb_matrix_effects.inc"
|
||||
#undef RGB_MATRIX_EFFECT
|
||||
#ifdef RGB_MATRIX_CUSTOM_KB
|
||||
# include "rgb_matrix_kb.inc"
|
||||
#endif
|
||||
#ifdef RGB_MATRIX_CUSTOM_USER
|
||||
# include "rgb_matrix_user.inc"
|
||||
#endif
|
||||
};
|
||||
|
||||
#define RGB_MATRIX_EFFECT(x) \
|
||||
case RGB_MATRIX_EFFECT_##x: \
|
||||
return #x;
|
||||
const char* rgb_matrix_name(uint8_t effect) {
|
||||
switch (effect) {
|
||||
case RGB_MATRIX_EFFECT_NONE:
|
||||
return "NONE";
|
||||
#include "rgb_matrix_effects.inc"
|
||||
#undef RGB_MATRIX_EFFECT
|
||||
#ifdef RGB_MATRIX_CUSTOM_KB
|
||||
# include "rgb_matrix_kb.inc"
|
||||
#endif
|
||||
#ifdef RGB_MATRIX_CUSTOM_USER
|
||||
# include "rgb_matrix_user.inc"
|
||||
#endif
|
||||
default:
|
||||
return "UNKNOWN";
|
||||
}
|
||||
}
|
||||
|
||||
void oled_write_rgb_matrix(void) {
|
||||
/*char rgb_matrix_info_str[24] = {0};*/
|
||||
oled_write("RGB: ", false);
|
||||
/*switch (rgb_matrix_config.mode) {*/
|
||||
/*case 1:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Solid Color");*/
|
||||
/*break;*/
|
||||
/*case 2:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Alphas Mods");*/
|
||||
/*break;*/
|
||||
/*case 3:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Gradient up down");*/
|
||||
/*break;*/
|
||||
/*case 4:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Gradient left right");*/
|
||||
/*break;*/
|
||||
/*case 5:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Breathing");*/
|
||||
/*break;*/
|
||||
/*case 6:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Band Sat");*/
|
||||
/*break;*/
|
||||
/*case 7:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Band Val");*/
|
||||
/*break;*/
|
||||
/*case 8:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Band Pinwheel Sat");*/
|
||||
/*break;*/
|
||||
/*case 9:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Band Pinwheel Val");*/
|
||||
/*break;*/
|
||||
/*case 10:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Band Spiral Sat");*/
|
||||
/*break;*/
|
||||
/*case 11:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Band Spiral Val");*/
|
||||
/*break;*/
|
||||
/*case 12:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Cycle All");*/
|
||||
/*break;*/
|
||||
/*case 13:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Cycle left right");*/
|
||||
/*break;*/
|
||||
/*case 14:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Cycle up down");*/
|
||||
/*break;*/
|
||||
/*case 15:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Cycle out in");*/
|
||||
/*break;*/
|
||||
/*case 16:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Cycle out in dual");*/
|
||||
/*break;*/
|
||||
/*case 17:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Rainbow mov chevron");*/
|
||||
/*break;*/
|
||||
/*case 18:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Cycle Pinwheel");*/
|
||||
/*break;*/
|
||||
/*case 19:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Cycle Spiral");*/
|
||||
/*break;*/
|
||||
/*case 20:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "Dual Beacon");*/
|
||||
/*break;*/
|
||||
/*default:*/
|
||||
/*snprintf(rgb_matrix_info_str, sizeof(rgb_matrix_info_str), "%2d", rgb_matrix_config.mode);*/
|
||||
/*break;*/
|
||||
/*}*/
|
||||
oled_write_ln(rgb_matrix_name(rgb_matrix_config.mode), false);
|
||||
}
|
||||
|
||||
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_u16_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);
|
||||
}
|
||||
|
||||
oled_write_rgb_matrix();
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
if (!_vis_status) {
|
||||
return false;
|
||||
}
|
||||
|
||||
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 false;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
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 = 600;
|
||||
_vis_timer = timer_read32();
|
||||
#ifdef ENC_ENABLE
|
||||
pre_init_enc();
|
||||
#endif
|
||||
}
|
||||
|
||||
void eeconfig_init_user(void) {
|
||||
#ifdef ENC_ENABLE
|
||||
eeconfig_init_enc();
|
||||
#endif
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
# 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
|
||||
|
||||
POINTING_DEVICE_ENABLE = yes
|
||||
POINTING_DEVICE_DRIVER = pmw3360
|
||||
#DIP_SWITCH_ENABLE = yes
|
||||
ENCODER_ENABLE = yes
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
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
|
||||
|
||||
/* 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
|
|
@ -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.
|
||||
![Imgur](https://i.imgur.com/7y0Vbyd.jpg)
|
||||
|
||||
|
||||
## 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:
|
||||
|
||||
![serial wiring](https://i.imgur.com/C3D1GAQ.png)
|
||||
|
||||
The wiring for i2c:
|
||||
|
||||
![i2c wiring](https://i.imgur.com/Hbzhc6E.png)
|
||||
|
||||
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…
Reference in New Issue