From 0da743d80ba9c8dc913f46f91e16354883ac27ac Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sat, 20 Jul 2019 21:35:30 +0100 Subject: [PATCH] [Keyboard] Refactor handwired/splittest to support multiple boards (#6373) * Refactor splittest to support multiple dev boards * Refactor splittest to support multiple dev boards - revert change to number of RGB led * Refactor splittest to support multiple dev boards - update docs * Refactor splittest to support multiple dev boards - correct docs * Refactor splittest to support multiple dev boards - update teensy master logic --- keyboards/handwired/splittest/config.h | 7 --- .../handwired/splittest/promicro/config.h | 28 +++++++++ .../handwired/splittest/promicro/readme.md | 11 ++++ .../handwired/splittest/promicro/rules.mk | 58 +++++++++++++++++++ keyboards/handwired/splittest/readme.md | 14 ++--- keyboards/handwired/splittest/rules.mk | 46 +-------------- .../handwired/splittest/teensy_2/config.h | 31 ++++++++++ .../handwired/splittest/teensy_2/readme.md | 11 ++++ .../handwired/splittest/teensy_2/rules.mk | 58 +++++++++++++++++++ .../handwired/splittest/teensy_2/teensy_2.c | 14 +++++ 10 files changed, 217 insertions(+), 61 deletions(-) create mode 100644 keyboards/handwired/splittest/promicro/config.h create mode 100644 keyboards/handwired/splittest/promicro/readme.md create mode 100644 keyboards/handwired/splittest/promicro/rules.mk create mode 100644 keyboards/handwired/splittest/teensy_2/config.h create mode 100644 keyboards/handwired/splittest/teensy_2/readme.md create mode 100644 keyboards/handwired/splittest/teensy_2/rules.mk create mode 100644 keyboards/handwired/splittest/teensy_2/teensy_2.c diff --git a/keyboards/handwired/splittest/config.h b/keyboards/handwired/splittest/config.h index a502d12382d..56574f75296 100644 --- a/keyboards/handwired/splittest/config.h +++ b/keyboards/handwired/splittest/config.h @@ -33,12 +33,6 @@ along with this program. If not, see . #define MATRIX_ROWS 2 #define MATRIX_COLS 1 -// wiring of each half -#define MATRIX_ROW_PINS { B3 } -#define MATRIX_COL_PINS { B6 } -#define SPLIT_HAND_PIN F6 -#define SOFT_SERIAL_PIN D1 - /* define if matrix has ghost */ //#define MATRIX_HAS_GHOST @@ -51,7 +45,6 @@ along with this program. If not, see . #define LOCKING_RESYNC_ENABLE /* ws2812 RGB LED */ -#define RGB_DI_PIN D3 #define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 12 #define RGBLED_SPLIT { 6, 6 } diff --git a/keyboards/handwired/splittest/promicro/config.h b/keyboards/handwired/splittest/promicro/config.h new file mode 100644 index 00000000000..c2a9c6002e6 --- /dev/null +++ b/keyboards/handwired/splittest/promicro/config.h @@ -0,0 +1,28 @@ +/* Copyright 2019 + * + * 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 + +#include "config_common.h" + +// wiring of each half +#define MATRIX_ROW_PINS { B3 } +#define MATRIX_COL_PINS { B6 } +#define SPLIT_HAND_PIN F6 +#define SOFT_SERIAL_PIN D1 + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D3 diff --git a/keyboards/handwired/splittest/promicro/readme.md b/keyboards/handwired/splittest/promicro/readme.md new file mode 100644 index 00000000000..64a6f4c2494 --- /dev/null +++ b/keyboards/handwired/splittest/promicro/readme.md @@ -0,0 +1,11 @@ +# Pro Micro splittest + +To trigger keypress, short together pins *B3* and *B6* (marked on the PCB as *14* and *10*). + +## Wiring +- Add switches to both Pro Micros across B3 and B6 pins +- Add pull-up resistor to left side between VCC and F6 +- Add pull-down resistors to right side between GND and F6 +- Connect the following pins on both sides together: D0, D1, GND, VCC +- Add I2C 4.7kOhm resistors between D0 and VCC, and D1 and VCC +- Wire Di of RGB strip for each half to D3 diff --git a/keyboards/handwired/splittest/promicro/rules.mk b/keyboards/handwired/splittest/promicro/rules.mk new file mode 100644 index 00000000000..dc6f1962373 --- /dev/null +++ b/keyboards/handwired/splittest/promicro/rules.mk @@ -0,0 +1,58 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = caterina + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 diff --git a/keyboards/handwired/splittest/readme.md b/keyboards/handwired/splittest/readme.md index 3dbff32ed40..33dbc6e805d 100644 --- a/keyboards/handwired/splittest/readme.md +++ b/keyboards/handwired/splittest/readme.md @@ -4,7 +4,10 @@ Split Tester A two-switch tester built using two Pro Micros, mainly intended to test RGB on split keyboards. Seen here: https://www.instagram.com/p/BvCPNzynwrV/ Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) -Hardware Supported: Pro Micro +Hardware Supported: Pro Micro, Teensy 2.0 +Hardware Availability: + +**See each individual board for pin infomation** Make example for this keyboard (after setting up your build environment): @@ -15,12 +18,3 @@ Example of flashing this keyboard: make handwired/splittest:default:avrdude See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). - -Wiring ------- -- Add switches to both Pro Micros across B3 and B6 pins -- Add pull-up resistor to left side between VCC and F6 -- Add pull-down resistors to right side between GND and F6 -- Connect the following pins on both sides together: D0, D1, GND, VCC -- Add I2C 4.7kOhm resistors between D0 and VCC, and D1 and VCC -- Wire Di of RGB strip for each half to D2 diff --git a/keyboards/handwired/splittest/rules.mk b/keyboards/handwired/splittest/rules.mk index 9512c0f6482..2aa484db0bb 100644 --- a/keyboards/handwired/splittest/rules.mk +++ b/keyboards/handwired/splittest/rules.mk @@ -1,47 +1,3 @@ -# MCU name -MCU = atmega32u4 - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Bootloader -# This definition is optional, and if your keyboard supports multiple bootloaders of -# different sizes, comment this out, and the correct address will be loaded -# automatically (+60). See bootloader.mk for all options. -BOOTLOADER = caterina - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - # Build Options # change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically @@ -63,3 +19,5 @@ RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend SPLIT_KEYBOARD = yes + +DEFAULT_FOLDER = handwired/splittest/promicro diff --git a/keyboards/handwired/splittest/teensy_2/config.h b/keyboards/handwired/splittest/teensy_2/config.h new file mode 100644 index 00000000000..3d0b0346edf --- /dev/null +++ b/keyboards/handwired/splittest/teensy_2/config.h @@ -0,0 +1,31 @@ +/* Copyright 2019 + * + * 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 + +#include "config_common.h" + +// wiring of each half +#define MATRIX_ROW_PINS { F5 } +#define MATRIX_COL_PINS { F7 } +#define SPLIT_HAND_PIN F0 +#define SOFT_SERIAL_PIN D1 + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D3 + +// required for teensy slave otherwise it "locks up" during startup +#define NO_USB_STARTUP_CHECK diff --git a/keyboards/handwired/splittest/teensy_2/readme.md b/keyboards/handwired/splittest/teensy_2/readme.md new file mode 100644 index 00000000000..ed5f845d201 --- /dev/null +++ b/keyboards/handwired/splittest/teensy_2/readme.md @@ -0,0 +1,11 @@ +# Teensy 2.0 splittest + +To trigger keypress, short together pins *F5* and *F7* + +## Wiring +- Add switches to both Teensy 2s across F5 and F7 pins +- Add pull-up resistor to left side between VCC and F0 +- Add pull-down resistors to right side between GND and F0 +- Connect the following pins on both sides together: D0, D1, GND, VCC +- Add I2C 4.7kOhm resistors between D0 and VCC, and D1 and VCC +- Wire Di of RGB strip for each half to D3 diff --git a/keyboards/handwired/splittest/teensy_2/rules.mk b/keyboards/handwired/splittest/teensy_2/rules.mk new file mode 100644 index 00000000000..3fb7c7e5a7e --- /dev/null +++ b/keyboards/handwired/splittest/teensy_2/rules.mk @@ -0,0 +1,58 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = halfkay + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 diff --git a/keyboards/handwired/splittest/teensy_2/teensy_2.c b/keyboards/handwired/splittest/teensy_2/teensy_2.c new file mode 100644 index 00000000000..bcc2a437bdc --- /dev/null +++ b/keyboards/handwired/splittest/teensy_2/teensy_2.c @@ -0,0 +1,14 @@ +#include QMK_KEYBOARD_H + +bool is_keyboard_master(void) { + // TODO: replace this override once USB host detection is implemented + // SPLIT_HAND_PIN Combined with MASTER_LEFT or MASTER_RIGHT, gives a crude + // way to force teensy to run as slave/master + setPinInput(SPLIT_HAND_PIN); + +#if defined(MASTER_RIGHT) + return !readPin(SPLIT_HAND_PIN); +#else + return readPin(SPLIT_HAND_PIN); +#endif +}