diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f407/board.h b/keyboards/handwired/tractyl_manuform/5x6_right/f407/board.h new file mode 100644 index 0000000000..9be86942d6 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f407/board.h @@ -0,0 +1,23 @@ +/* Copyright 2020 Nick Brassel (tzarc) + * + * 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 3 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 . + */ +#pragma once + +#include_next + +#undef STM32_HSECLK +#define STM32_HSECLK 8000000U +#undef STM32_LSECLK +#define STM32_LSECLK 32768U diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f407/config.h b/keyboards/handwired/tractyl_manuform/5x6_right/f407/config.h new file mode 100644 index 0000000000..33a99a7beb --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f407/config.h @@ -0,0 +1,88 @@ +/* +Copyright 2012 Jun Wako +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 . +*/ + +#pragma once + +//#define SPLIT_HAND_PIN B11 // high = left, low = right +#define USER_BUTTON_PIN A15 +#define DEBUG_LED_PIN C13 + +// WS2812 RGB LED strip input and number of LEDs +#define WS2812_PWM_DRIVER PWMD8 +#define WS2812_PWM_CHANNEL 1 +#define WS2812_PWM_PAL_MODE 3 +#define WS2812_PWM_DMA_STREAM STM32_DMA2_STREAM1 +#define WS2812_PWM_DMA_CHANNEL 7 +#define WS2812_PWM_TARGET_PERIOD 800000 +#define WS2812_EXTERNAL_PULLUP + +#define BACKLIGHT_PWM_DRIVER PWMD3 +#define BACKLIGHT_PWM_CHANNEL 2 +#define BACKLIGHT_PAL_MODE 2 + +/* Audio config */ +#define AUDIO_PIN A4 +#define AUDIO_PIN_ALT A5 +#define AUDIO_PIN_ALT_AS_NEGATIVE + +/* serial.c configuration for split keyboard */ +#define SERIAL_USART_DRIVER SD1 +#define SERIAL_USART_TX_PIN A10 +#define SERIAL_USART_TX_PAL_MODE 7 +#define SERIAL_USART_RX_PIN A9 +#define SERIAL_USART_RX_PAL_MODE 7 +#define SERIAL_USART_TIMEOUT 10 +#define SERIAL_USART_SPEED (1 * 1024 * 1024) +#define SERIAL_USART_FULL_DUPLEX + + +/* i2c config for oleds */ +#define I2C_DRIVER I2CD1 +#define I2C1_CLOCK_SPEED 400000 +#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_16_9 + +/* spi config for eeprom and pmw3360 sensor */ +#define SPI_DRIVER SPID1 +#define SPI_SCK_PIN B3 +#define SPI_SCK_PAL_MODE 5 +#define SPI_MOSI_PIN B5 +#define SPI_MOSI_PAL_MODE 5 +#define SPI_MISO_PIN B4 +#define SPI_MISO_PAL_MODE 5 + +#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN A8 +#define EXTERNAL_FLASH_SPI_CLOCK_DIVISOR 2 +#define EXTERNAL_FLASH_SIZE (8 * 1024 * 1024) + +/* pmw3360 config */ +#define POINTING_DEVICE_CS_PIN B8 +#define POINTING_DEVICE_ROTATION_270 +#undef ROTATIONAL_TRANSFORM_ANGLE +#define PMW33XX_SPI_DIVISOR 8 + +// lcd +#define DISPLAY_RST_PIN B13 +#define DISPLAY_DC_PIN B12 +#define DISPLAY_CS_PIN B9 +#define DISPLAY_SPI_DIVIDER 1 + +#define DRV2605L_FB_ERM_LRA 0 +#define DRV2605L_GREETING DRV2605L_EFFECT_750_MS_ALERT_100 +#define DRV2605L_DEFAULT_MODE DRV2605L_EFFECT_BUZZ_1_100 + +#define VIA_FIRMWARE_VERSION 0x00000001 diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f407/f407.c b/keyboards/handwired/tractyl_manuform/5x6_right/f407/f407.c new file mode 100644 index 0000000000..696506e726 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f407/f407.c @@ -0,0 +1,50 @@ +/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * 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 . + */ + +#include "tractyl_manuform.h" + +#ifdef USB_VBUS_PIN +bool usb_vbus_state(void) { + gpio_set_pin_input_low(USB_VBUS_PIN); + wait_us(5); + return gpio_read_pin(USB_VBUS_PIN); +} +#endif + +void user_button_init(void) { + gpio_set_pin_output(DEBUG_LED_PIN); + // Pin needs to be configured as input low +#ifdef USER_BUTTON_PIN + gpio_set_pin_input_high(USER_BUTTON_PIN); +#endif // USER_BUTTON_PIN +} + +bool check_user_button_state(void) { +#ifdef DEBUG_LED_PIN + gpio_write_pin(DEBUG_LED_PIN, !is_keyboard_master()); +#endif // DEBUG_LED_PIN +#ifdef USER_BUTTON_PIN + return !gpio_read_pin(USER_BUTTON_PIN); +#endif // USER_BUTTON_PIN + return false; +} + +void board_init(void) { + // unset improper SPI pins + gpio_set_pin_input(A5); + gpio_set_pin_input(A6); + gpio_set_pin_input(A7); +} diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f407/halconf.h b/keyboards/handwired/tractyl_manuform/5x6_right/f407/halconf.h new file mode 100644 index 0000000000..23f8e5c934 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f407/halconf.h @@ -0,0 +1,35 @@ +/* Copyright 2020 Nick Brassel (tzarc) + * + * 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 3 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 . + */ +#pragma once + +#define HAL_USE_SERIAL TRUE +#define SERIAL_BUFFERS_SIZE 256 + +#if defined(WS2812_PWM) || defined(BACKLIGHT_PWM) +# define HAL_USE_PWM TRUE +#endif // defined(WS2812_PWM) || defined(BACKLIGHT_PWM) + +#if HAL_USE_SPI == TRUE +# define SPI_USE_WAIT TRUE +# define SPI_SELECT_MODE SPI_SELECT_MODE_PAD +#endif + +#ifdef AUDIO_DRIVER_DAC +# define HAL_USE_GPT TRUE +# define HAL_USE_DAC TRUE +#endif + +#include_next diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f407/keyboard.json b/keyboards/handwired/tractyl_manuform/5x6_right/f407/keyboard.json new file mode 100644 index 0000000000..f497560b41 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f407/keyboard.json @@ -0,0 +1,66 @@ +{ + "keyboard_name": "Tractyl Manuform (5x6) STM32F407", + "audio": { + "driver": "dac_additive", + "power_control": { + "pin": "A3" + } + }, + "backlight": { + "levels": 16, + "pin": "C7" + }, + "bootloader": "tinyuf2", + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "diode_direction": "COL2ROW", + "eeprom": { + "driver": "wear_leveling", + "wear_leveling": { + "driver": "spi_flash" + } + }, + "encoder": { + "rotary": [ + {"pin_a": "D14", "pin_b": "C0"} + ] + }, + "features": { + "haptic": true + }, + "haptic": { + "driver": "drv2605l" + }, + "matrix_pins": { + "cols": ["C1", "C2", "C3", "A0", "A1", "A2"], + "rows": ["A6", "A7", "C4", "C5", "B0", "B1"] + }, + "processor": "STM32F407", + "rgblight": { + "led_count": 24, + "split": true + }, + "split": { + "serial": { + "driver": "usart" + }, + "transport": { + "sync": { + "activity": true, + "haptic": true, + "matrix_state": true + } + } + }, + "usb": { + "shared_endpoint": { + "keyboard": true, + "mouse": true + } + }, + "ws2812": { + "driver": "pwm", + "pin": "C6" + } +} \ No newline at end of file diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f407/mcuconf.h b/keyboards/handwired/tractyl_manuform/5x6_right/f407/mcuconf.h new file mode 100644 index 0000000000..1969b1e0b4 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f407/mcuconf.h @@ -0,0 +1,80 @@ +/* Copyright 2020 Nick Brassel (tzarc) + * + * 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 3 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 . + */ + +#pragma once + +#include_next + +#undef STM32_LSE_ENABLED +#define STM32_LSE_ENABLED TRUE + +#undef STM32_PLLM_VALUE +#define STM32_PLLM_VALUE 8 + +#undef STM32_RTCSEL +#define STM32_RTCSEL STM32_RTCSEL_LSE + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 TRUE + +#if HAL_USE_WDG == TRUE +# undef STM32_WDG_USE_IWDG +# define STM32_WDG_USE_IWDG TRUE +#endif + +#if HAL_USE_I2C == TRUE +# undef STM32_I2C_USE_I2C1 +# define STM32_I2C_USE_I2C1 TRUE + +# undef STM32_I2C_BUSY_TIMEOUT +# define STM32_I2C_BUSY_TIMEOUT 10 + +# undef STM32_I2C_I2C1_RX_DMA_STREAM +# define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0) +# undef STM32_I2C_I2C1_TX_DMA_STREAM +# define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7) +#endif // HAL_USE_I2C + +#ifdef WS2812_PWM +# undef STM32_PWM_USE_TIM8 +# define STM32_PWM_USE_TIM8 TRUE +#endif // WS2812_PWM + +#ifdef BACKLIGHT_PWM +# undef STM32_PWM_USE_TIM3 +# define STM32_PWM_USE_TIM3 TRUE +#endif + +#if HAL_USE_SPI == TRUE +# undef STM32_SPI_USE_SPI1 +# define STM32_SPI_USE_SPI1 TRUE + +# undef STM32_SPI_SPI1_TX_DMA_STREAM +# define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 5) +# undef STM32_SPI_SPI1_RX_DMA_STREAM +# define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0) + +#endif + +#ifdef AUDIO_DRIVER_DAC +# undef STM32_DAC_USE_DAC1_CH1 +# define STM32_DAC_USE_DAC1_CH1 TRUE +# undef STM32_DAC_USE_DAC1_CH2 +# define STM32_DAC_USE_DAC1_CH2 TRUE + +# undef STM32_GPT_USE_TIM6 +# define STM32_GPT_USE_TIM6 TRUE +#endif // AUDIO_DRIVER_DAC diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f407/readme.md b/keyboards/handwired/tractyl_manuform/5x6_right/f407/readme.md new file mode 100644 index 0000000000..4c8db1c90c --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f407/readme.md @@ -0,0 +1,50 @@ +A0 - Column 3 +A1 - Column 4 +A2 - Colume 5 +A3 - Audio Enable +A4 - DAC Audio +A5 - DAC Aduio +A6 - Row 0 +A7 - Row 1 +A8 - +A9 - VBUS Sense -- Don't use - USART TX +A10 - USART RX (weak internal pullup) +A11 - USB D- +A12 - USB D+ +A13 - SWD DIO +A14 - SWD CLK +A15 - Encoder Pin B + +B0 - Row 4 +B1 - Row 5 +B2 - Boot1 - user LED +B3 - SPI SCK +B4 - SPI MISO +B5 - SPI MOSI +B6 - I2C SCL +B7 - I2C SDA +B8 - LCD Display CS Pin +B9 - Pointing Device CS Pin +B10 - Manual VBUS Detect Pin +B11 - Split Hand Pin +B12 - (weak internal pullup) - LCD Display DC Pin +B13 - LCD Display RST Pin +B14 - +B15 - + +C0 - Encoder Pin A +C1 - Column 0 +C2 - Column 1 +C3 - Column 2 +C4 - Row 2 +C5 - Row 3 +C6 - WS2812 PWM Pin +C7 - Backlight PWM Pin +C8 - TF Interface +C9 - TF Interface +C10 - TF Interface +C11 - TF Interface +C12 - TF Interface +C13 - User Button +C14 - LSE Crystal +C15 - LSE Crystal diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f407/rules.mk b/keyboards/handwired/tractyl_manuform/5x6_right/f407/rules.mk new file mode 100644 index 0000000000..dc7d215074 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f407/rules.mk @@ -0,0 +1 @@ +MCU_LDSCRIPT = STM32F407xG