Compare commits

...

19 Commits

Author SHA1 Message Date
Matthias Fulz 81e56339a0 Fixed warning for including config_common.h 2023-03-29 23:54:57 +02:00
Matthias Fulz ae7e3d8139 Added tinyuf2 bootloader version 2023-03-28 00:26:56 +02:00
Matthias Fulz 0a14d4faef Merge branch 'master' into keyboards/tractyl_manuform_muf 2023-03-13 10:40:26 +01:00
Matthias Fulz 212c54f840 Merge branch 'master' into keyboards/tractyl_manuform_muf 2023-02-12 22:02:14 +01:00
Matthias Fulz 98add843de removed enc stuff 2022-12-01 12:26:59 +01:00
Matthias Fulz fa40c927ea Trenctyl without enc 2022-12-01 12:23:46 +01:00
Matthias Fulz 4940edec07 Merge branch 'master' into keyboards/trenctyl_manuform 2022-12-01 10:36:48 +01:00
Matthias Fulz b417f04f85 Mouse wheel too fast 2022-08-30 10:56:04 +02:00
Matthias Fulz fc450f4de0 Merge branch 'master' into keyboards/trenctyl_manuform 2022-08-23 10:08:27 +02:00
Matthias Fulz d7f74c7a6f set key via keyboard 2022-07-26 01:43:43 +02:00
Matthias Fulz 3019b56aac Merge branch 'master' into keyboards/trenctyl_manuform 2022-07-25 22:21:26 +02:00
Matthias Fulz e4ff1fdf80 Merge branch 'master' into keyboards/trenctyl_manuform 2022-07-19 10:51:20 +02:00
Matthias Fulz fc9eb9dd06 Merge branch 'master' into keyboards/trenctyl_manuform 2022-07-11 00:37:31 +02:00
Matthias Fulz c473110c89 Merge branch 'master' into keyboards/trenctyl_manuform 2022-07-04 00:26:18 +02:00
Matthias Fulz 9bda2904f3 Mouse speed adjustments 2022-07-02 14:11:47 +02:00
Matthias Fulz d7bdb943f0 Merge branch 'master' into keyboards/trenctyl_manuform 2022-06-28 10:50:51 +02:00
Matthias Fulz dc5cb40c72 Fixed renaming 2022-06-26 22:03:17 +02:00
Matthias Fulz b0ff58a23a Fixed renaming 2022-06-26 22:02:01 +02:00
Matthias Fulz 27801eefc8 New master broke compilation 2022-06-26 21:41:19 +02:00
21 changed files with 1378 additions and 0 deletions

View File

@ -0,0 +1 @@
#include "6x6.h"

View 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 } \
}

View File

@ -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

View File

@ -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

View 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"

View 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>

View 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

View File

@ -0,0 +1,6 @@
MCU = STM32F401
BOOTLOADER = stm32-dfu
LTO_ENABLE = no
SERIAL_DRIVER = usart

View File

@ -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

View 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"

View 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>

View 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

View File

@ -0,0 +1,6 @@
MCU = STM32F401
BOOTLOADER = tinyuf2
LTO_ENABLE = no
SERIAL_DRIVER = usart

View File

@ -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}
]
}
}
}

View File

@ -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

View File

@ -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);
}
}

View File

@ -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

View File

@ -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

View 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.
![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.
```

View File

@ -0,0 +1 @@
#include "trenctyl_manuform.h"

View File

@ -0,0 +1,7 @@
#pragma once
#if defined(KEYBOARD_handwired_trenctyl_manuform_6x6)
# include "6x6.h"
#endif
#include "quantum.h"