better generic vik support to handle all modules in one go, testing out with ximega

This commit is contained in:
Sadek Baroudi 2024-06-25 03:48:26 -07:00
parent eed5dd5b99
commit d1c8b75485
58 changed files with 562 additions and 331 deletions

View File

@ -61,6 +61,7 @@ For an example, see `keyboards/fingerpunch/ximi/config.h`, which uses the `FP_ST
#define FP_STARTUP_LIGHT_EXT HALF_NOTE(_E6), HALF_NOTE(_F6), HALF_NOTE(_C6), WHOLE_NOTE(_A5), WHOLE_DOT_NOTE(_F5), WHOLE_DOT_NOTE(_D5), WHOLE_DOT_NOTE(_G5), WHOLE_DOT_NOTE(_C5),
#define FP_STARTUP_DARK HALF_DOT_NOTE(_B5), QUARTER_NOTE(_B5), HALF_NOTE(_E6), HALF_NOTE(_REST), QUARTER_NOTE(_C6), QUARTER_NOTE(_REST), QUARTER_NOTE(_G5), QUARTER_NOTE(_E5), QUARTER_NOTE(_F5), QUARTER_NOTE(_GS5), QUARTER_NOTE(_G5), QUARTER_NOTE(_F5), WHOLE_NOTE(_G5),
#define FP_MARIO QUARTER_NOTE(_E5), QUARTER_NOTE(_E5), QUARTER_NOTE(_REST), QUARTER_NOTE(_E5), QUARTER_NOTE(_REST), QUARTER_NOTE(_C5), QUARTER_NOTE(_E5), QUARTER_NOTE(_REST), QUARTER_NOTE(_G5), HALF_DOT_NOTE(_REST), QUARTER_NOTE(_G4),
#define FP_STARTUP_XIMEGA WHOLE_NOTE(_FS5), QUARTER_NOTE(_A5), HALF_DOT_NOTE(_B5), WHOLE_NOTE(_D6), QUARTER_NOTE(_REST), HALF_DOT_NOTE(_B5), HALF_DOT_NOTE(_FS5), HALF_DOT_NOTE(_D5), HALF_DOT_NOTE(_E5), HALF_NOTE(_REST), HALF_DOT_NOTE(_D5), HALF_DOT_NOTE(_B4),
```
### Shared RGB effects

View File

@ -84,6 +84,7 @@ Note: if you are using a userspace, and you have custom keycodes, you will need
|| defined(KEYBOARD_fingerpunch_sweeeeep) \
|| defined(KEYBOARD_fingerpunch_vulpes_minora) \
|| defined(KEYBOARD_fingerpunch_vulpes_majora_v1) \
|| defined(KEYBOARD_fingerpunch_ximega) \
|| defined(KEYBOARD_fingerpunch_ximi)
# define PLACEHOLDER_SAFE_RANGE FP_SAFE_RANGE
#else
@ -334,7 +335,7 @@ When using a fingerpunch board, the get_haptic_enabled_key is completely overrid
* NO_HAPTIC_PUNCTUATION
* etc...
See https://github.com/qmk/qmk_firmware/blob/master/docs/feature_haptic_feedback.md#haptic-key-exclusion for details
See https://github.com/qmk/qmk_firmware/blob/master/docs/features/haptic_feedback.md#haptic-key-exclusion for details
If you'd like to override this, you'll need to create a function as follows:
`bool get_haptic_enabled_key_user(uint16_t keycode, keyrecord_t *record)`
@ -364,15 +365,45 @@ Note that the ctrl-X audio responses will use control as the modifier, so it won
| Setting | Description | Default |
| --------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------- |
| `FP_AUDIO_MOUSE_BUTTONS` | (Optional) Enable audio response for Mouse 1, 2, and 3 | `undefined` |
| `FP_AUDIO_CUT_COPY_PASTE` | (Optional) Enable audio response for ctrl-x, ctrl-c, ctrl-v | `undefined` |
| `FP_AUDIO_SAVE` | (Optional) Enable audio response for ctrl-s | `undefined` |
| `FP_AUDIO_MOUSE_BUTTONS` | (Optional) Enable audio response for Mouse 1, 2, and 3 | `undefined` |
| `FP_AUDIO_CUT_COPY_PASTE` | (Optional) Enable audio response for ctrl-x, ctrl-c, ctrl-v | `undefined` |
| `FP_AUDIO_SAVE` | (Optional) Enable audio response for ctrl-s | `undefined` |
## VIK
## Keymap
VIK features are automatically integrated when a keyboard is properly configured using the fingerpunch VIK library. If you'd like to support these VIK features, please see the [FP_LIBRARY_SUPPORT](./FP_LIBRARY_SUPPORT.md) page
If you are looking to use process_record_kb() or process_record
All fingerpunch boards with a VIK connector support the features below. When compiling, you can add the flags below. Please note that the `*_RIGHT` features are for split boards only, and that pointing devices will require additional configuration to change orientation or invert the axis. See the [QMK documentation for pointing devices](https://github.com/qmk/qmk_firmware/blob/master/docs/features/pointing_device.md#common-configuration) if you need to change the pointing orientation.
Important notes:
* For split keyboards with **different** pointing devices (i.e. cirque on left, and trackball on right), you must build two separate firmwares, one for each half. You must specify `VIK_BUILD_LEFT=yes` as a parameter when compiling the left, and `VIK_BUILD_RIGHT=yes` when compiling the right. Then you need to flash each firmware on each respective half.
* For split keyboards, the fingerpunch VIK logic will set `VIK_BUILD_LEFT` and `VIK_BUILD_RIGHT` so that you can check what the user configured. This can be checked with `#ifdef VIK_BUILD_LEFT` or `#ifdef VIK_BUILD_RIGHT`
* All encoder functions in VIK modules do not support any click function of the encoder.
* For all of the items below, please see the [VIK repository certifications](https://github.com/sadekbaroudi/vik?tab=readme-ov-file#known-list-of-vik-certifications) in the modules section for details on the hardware.
| Rules.mk | Split Use | Description |
| --------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `VIK_ENABLE=yes` | Both | Enables the VIK code, this should always be yes if the keyboard has a VIK connector that meets specifications |
| `VIK_BUILD_LEFT=yes` | Left | **If and only if** you have different pointing devices on each half, you must specify this when compiling firmware for the left, and then flash that firmware on the left only |
| `VIK_BUILD_RIGHT=yes` | Right | **If and only if** you have different pointing devices on each half, you must specify this when compiling firmware for the right, and then flash that firmware on the right only |
| `VIK_HAPTIC=yes` | Both | Enables haptic feedback on both sides of the keyboard, requires `#define SPLIT_HAPTIC_ENABLE` |
| `VIK_ILI9341=yes` | Left | Enables ILI9341 display, see [qmk quantum painter](https://github.com/qmk/qmk_firmware/blob/master/docs/quantum_painter.md) |
| `VIK_PER56_CIRQUE_LEDS=yes` | Left | Enables PER56 encoder and cirque trackpad, note that the keyboard firmware should enable RGB leds since the number of LEDs can vary, use `#ifdef VIK_PER56_CIRQUE_LEDS` to check if this is enabled |
| `VIK_PER56_PMW3360_LEDS=yes` | Left | Enables PER56 encoder and pmw3360, note that the keyboard firmware should enable RGB leds since the number of LEDs can vary, use `#ifdef VIK_PER56_PMW3360_LEDS` to check if this is enabled |
| `VIK_PMW3360=yes` | Left | Enables pmw3360, note that the keyboard firmware should set orientation, use `#ifdef VIK_PMW3360` to check if this is enabled |
| `VIK_WEACT_ST7735=yes` | Left | Enables WeAct ST7735 display, see [qmk quantum painter](https://github.com/qmk/qmk_firmware/blob/master/docs/quantum_painter.md) |
| `VIK_GC9A01=yes` | Left | Enables GC9A01 display, see [qmk quantum painter](https://github.com/qmk/qmk_firmware/blob/master/docs/quantum_painter.md) . |
| `VIK_WAVESHARE_22224=yes` | Left | Enables Waveshare 22224 display, see [qmk quantum painter](https://github.com/qmk/qmk_firmware/blob/master/docs/quantum_painter.md) |
| `VIK_AZOTEQ=yes` | Left | Enables azoteq trackpad, note that the keyboard firmware should set orientation and trackpade size, use `#ifdef VIK_AZOTEQ` to check if this is enabled |
| `VIK_EC11_EVQWGD001=yes` | Left | Enables encoders in QMK. Because a keyboard can have existing encoders, the pin configuration must happen at the keyboard. Use `#ifdef VIK_EC11_EVQWGD001` to check if this is enabled. |
| `VIK_CIRQUE=yes` | Left | Enables cirque trackpad via SPI, note that the keyboard firmware should set orientation, use `#ifdef VIK_CIRQUE` to check if this is enabled |
| `VIK_TRACKPOINT=yes` | Left | Enables PS/2 trackpoint. This does **not** support split pointing, so it must be on the master half |
| `VIK_CIRQUE_RIGHT=yes` | Right | Same as above, but equivalent for the right half of a split board. Do not set this if you aren't using a split keyboard. See section header above about determining which device is on which half. |
| `VIK_PER56_CIRQUE_LEDS_RIGHT=yes` | Right | Same as above, but equivalent for the right half of a split board. Do not set this if you aren't using a split keyboard. See section header above about determining which device is on which half. |
| `VIK_PER56_PMW3360_LEDS_RIGHT=yes` | Right | Same as above, but equivalent for the right half of a split board. Do not set this if you aren't using a split keyboard. See section header above about determining which device is on which half. |
| `VIK_PMW3360_RIGHT=yes` | Right | Same as above, but equivalent for the right half of a split board. Do not set this if you aren't using a split keyboard. See section header above about determining which device is on which half. |
| `VIK_AZOTEQ_RIGHT=yes` | Right | Same as above, but equivalent for the right half of a split board. Do not set this if you aren't using a split keyboard. See section header above about determining which device is on which half. |
| `VIK_EC11_EVQWGD001_RIGHT=yes` | Right | Same as above, but equivalent for the right half of a split board. Do not set this if you aren't using a split keyboard. |
## Debugging

View File

@ -40,3 +40,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -116,3 +116,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -116,3 +116,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -99,3 +99,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -121,3 +121,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// If using encoder type 2, uncomment this
// #define ENCODERS_B_REVERSE
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -79,3 +79,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -139,3 +139,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// If using encoder type 2, uncomment this
// #define ENCODERS_B_REVERSE
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -63,3 +63,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define I2C1_CLOCK_SPEED 400000
#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -96,3 +96,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define FP_HAPTIC_CUT_COPY_PASTE
#define FP_HAPTIC_SAVE
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -79,3 +79,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define POINTING_DEVICE_INVERT_Y
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -38,4 +38,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
{ D3, D2, B2, B6 }
#define MATRIX_COL_PINS \
{ B4, E6, D7, C6, D4, B5, F4, F5, F6, F7, B1, B3 }
#endif
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -119,3 +119,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define FP_HAPTIC_CUT_COPY_PASTE
#define FP_HAPTIC_SAVE
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -85,3 +85,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -200,3 +200,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define POINTING_DEVICE_INVERT_Y
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -141,4 +141,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define POINTING_DEVICE_INVERT_Y
// #endif
#include "keyboards/fingerpunch/src/config_post.h"
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -89,3 +89,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -31,4 +31,6 @@
// To dynamically control the backlight with BL_TOGG keycode
#define BACKLIGHT_PIN GP24
#endif
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -27,3 +27,5 @@
#define POINTING_DEVICE_TASK_THROTTLE_MS 5
#define CIRQUE_PINNACLE_DIAMETER_MM 35
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -19,4 +19,4 @@
#define CIRQUE_PINNACLE_DIAMETER_MM 35
#define POINTING_DEVICE_ROTATION_90
#include "keyboards/fingerpunch/src/config_post.h"
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -91,3 +91,5 @@
#define RGB_MATRIX_LED_COUNT 63
#endif // defined(RGB_MATRIX_ENABLE)
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -75,3 +75,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -133,3 +133,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# define F_LRA 150 // resonance freq
# define DRV_GREETING alert_750ms
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -213,3 +213,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
defined(FP_TRACKBALL_RIGHT_ONLY)
#define POINTING_DEVICE_INVERT_X_RIGHT
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -168,3 +168,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define POINTING_DEVICE_INVERT_Y // This inverts the Y on the left side only
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -166,3 +166,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define SPI_MOSI_PAL_MODE 5 // already defined in chibios
// #define SPI_MISO_PAL_MODE 5 // already defined in chibios
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -108,3 +108,5 @@
#define ENABLE_RGB_MATRIX_SOLID_SPLASH
#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -97,3 +97,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef OLED_ENABLE
#define OLED_DISPLAY_128X64
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -163,3 +163,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define I2C1_CLOCK_SPEED 400000
#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -163,3 +163,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define I2C1_CLOCK_SPEED 400000
#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -31,3 +31,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef OLED_ENABLE
#define OLED_DISPLAY_128X64
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -75,3 +75,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef OLED_ENABLE
#define OLED_DISPLAY_128X64
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -132,3 +132,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define POINTING_DEVICE_INVERT_Y
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -155,3 +155,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef OLED_ENABLE
#define OLED_DISPLAY_128X64
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -1,3 +1,3 @@
#ifdef VIK_ENABLE
#include "keyboards/fingerpunch/src/vik/config.h"
#endif
#include "keyboards/fingerpunch/src/vik/config.vik.post.h"
#endif

View File

@ -4,3 +4,7 @@
#ifdef POINTING_DEVICE_ENABLE
#define PMW33XX_CPI 1000
#endif
#ifdef VIK_ENABLE
#include "keyboards/fingerpunch/src/vik/config.vik.pre.h"
#endif

View File

@ -12,6 +12,7 @@
* VIK_WAVESHARE_22224
* VIK_AZOTEQ
* VIK_EC11_EVQWGD001
* VIK_CIRQUE (really just a raw cirque)
* VIK_TRACKPOINT
*
* Pin config:
@ -96,7 +97,7 @@
#define DISPLAY_RST_PIN VIK_DISPLAY_RST_UNUSED_PIN
#endif
#ifdef VIK_PER56_CIRQUE_LEDS
#if defined(VIK_PER56_CIRQUE_LEDS) || defined(VIK_PER56_CIRQUE_LEDS_RIGHT)
#ifdef RGBLIGHT_LED_COUNT
#undef RGBLIGHT_LED_COUNT
#endif
@ -109,7 +110,7 @@
#define RGBLIGHT_LED_COUNT 4
#endif
#ifdef VIK_PER56_PMW3360_LEDS
#if defined(VIK_PER56_PMW3360_LEDS) || defined(VIK_PER56_PMW3360_LEDS_RIGHT)
// Trackball config
#define PMW33XX_CS_PIN VIK_SPI_CS
#define PMW33XX_CPI 1000
@ -127,7 +128,7 @@
#define RGBLIGHT_LED_COUNT 4
#endif
#ifdef VIK_PMW3360
#if defined(VIK_PMW3360) || defined(VIK_PMW3360_RIGHT)
// Trackball config
#define PMW33XX_CS_PIN VIK_SPI_CS
#define PMW33XX_CPI 1000
@ -167,20 +168,20 @@
#define DISPLAY_RST_PIN VIK_DISPLAY_RST_UNUSED_PIN
#endif
#ifdef VIK_AZOTEQ
#if defined(VIK_AZOTEQ) || defined(VIK_AZOTEQ_RIGHT)
// default to AZOTEQ_IQS5XX_TPS43... shouldn't really do this
#if !defined(AZOTEQ_IQS5XX_TPS43) && !defined(AZOTEQ_IQS5XX_TPS65)
// #warning "fingerpunch:vik:azoteq: no azoteq profile defined, defaulted to AZOTEQ_IQS5XX_TPS43"
#define AZOTEQ_IQS5XX_TPS43
#define AZOTEQ_IQS5XX_PRESS_AND_HOLD_ENABLE true
#define AZOTEQ_IQS5XX_SWIPE_X_ENABLE true
#define AZOTEQ_IQS5XX_SWIPE_Y_ENABLE true
#define AZOTEQ_IQS5XX_ZOOM_ENABLE true
// Can only use motion pin on unibodies or splits that don't use split pointing
// This is currently a QMK constraint
#ifndef SPLIT_POINTING
#define POINTING_DEVICE_MOTION_PIN VIK_GPIO_2
#endif
#endif
// #define AZOTEQ_IQS5XX_PRESS_AND_HOLD_ENABLE true
// #define AZOTEQ_IQS5XX_SWIPE_X_ENABLE true
// #define AZOTEQ_IQS5XX_SWIPE_Y_ENABLE true
// #define AZOTEQ_IQS5XX_ZOOM_ENABLE true
// Can only use motion pin on unibodies or splits that don't use split pointing
// This is currently a QMK constraint
#ifndef SPLIT_POINTING_ENABLE
#define POINTING_DEVICE_MOTION_PIN VIK_GPIO_2
#endif
#endif
@ -206,4 +207,6 @@
#ifdef CIRQUE_ENABLE
#define CIRQUE_PINNACLE_SPI_CS_PIN VIK_SPI_CS
#define CIRQUE_PINNACLE_TAP_ENABLE
#define POINTING_DEVICE_TASK_THROTTLE_MS 5
#endif

View File

@ -0,0 +1,12 @@
#ifdef SPLIT_KEYBOARD
#ifdef VIK_POINTING_LEFT
#ifdef VIK_POINTING_RIGHT
#define SPLIT_POINTING_ENABLE
#define POINTING_DEVICE_COMBINED
#else
#define POINTING_DEVICE_LEFT
#endif
#elif defined(VIK_POINTING_RIGHT)
#define POINTING_DEVICE_RIGHT
#endif
#endif

View File

@ -12,145 +12,31 @@
# VIK_WAVESHARE_22224
# VIK_AZOTEQ
# VIK_EC11_EVQWGD001
# VIK_CIRQUE
# VIK_TRACKPOINT
ifeq ($(strip $(VIK_HAPTIC)), yes)
HAPTIC_ENABLE = yes
HAPTIC_DRIVER = drv2605l
OPT_DEFS += -DVIK_HAPTIC
# rules.mk options for split right half
# VIK_CIRQUE_RIGHT
# VIK_PER56_CIRQUE_LEDS_RIGHT
# VIK_PER56_PMW3360_LEDS_RIGHT
# VIK_PMW3360_RIGHT
# VIK_AZOTEQ_RIGHT
# VIK_EC11_EVQWGD001_RIGHT
# Up front rules
include keyboards/fingerpunch/src/vik/rules.vik.pre.mk
# Include the unibody / split left VIK features
include keyboards/fingerpunch/src/vik/rules.vik.main.general.mk
include keyboards/fingerpunch/src/vik/rules.vik.main.pointing.mk
### Begin VIK right half support, if there is a VIK module on the right half
### IMPORTANT: not all modules can work on the slave half, which is a QMK limitation
### only those that work will be handled here
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
include keyboards/fingerpunch/src/vik/rules.vik.right.general.mk
include keyboards/fingerpunch/src/vik/rules.vik.right.pointing.mk
endif
ifeq ($(strip $(VIK_ILI9341)), yes)
# For LCD backlight toggling
BACKLIGHT_ENABLE = yes
BACKLIGHT_DRIVER = software
QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_DRIVERS += ili9341_spi
QUANTUM_PAINTER_LVGL_INTEGRATION = yes
SRC += keyboards/fingerpunch/src/display/ili9341.c
OPT_DEFS += -DVIK_ILI9341
endif
ifeq ($(strip $(VIK_PER56_CIRQUE_LEDS)), yes)
CIRQUE_ENABLE = yes
ENCODER_ENABLE = yes
# RGBLIGHT_ENABLE = yes # you need to choose whether or not this is enabled within the keyboard or user rules.mk
OPT_DEFS += -DVIK_PER56_CIRQUE_LEDS
endif
ifeq ($(strip $(VIK_PER56_PMW3360_LEDS)), yes)
PMW3360_ENABLE = yes
ENCODER_ENABLE = yes
# RGBLIGHT_ENABLE = yes # you need to choose whether or not this is enabled within the keyboard or user rules.mk
OPT_DEFS += -DVIK_PER56_PMW3360_LEDS
endif
ifeq ($(strip $(VIK_PMW3360)), yes)
PMW3360_ENABLE = yes
OPT_DEFS += -DVIK_PMW3360
endif
ifeq ($(strip $(VIK_WEACT_ST7735)), yes)
# For LCD backlight toggling
BACKLIGHT_ENABLE = yes
BACKLIGHT_DRIVER = software
QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_DRIVERS += st7735_spi
QUANTUM_PAINTER_LVGL_INTEGRATION = yes
SRC += keyboards/fingerpunch/src/display/st7735.c
# WPM_ENABLE = yes
OPT_DEFS += -DVIK_WEACT_ST7735
endif
ifeq ($(strip $(VIK_GC9A01)), yes)
QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_DRIVERS += gc9a01_spi
QUANTUM_PAINTER_LVGL_INTEGRATION = yes
SRC += keyboards/fingerpunch/src/display/gc9a01.c
# WPM_ENABLE = yes
OPT_DEFS += -DVIK_GC9A01
endif
ifeq ($(strip $(VIK_WAVESHARE_22224)), yes)
QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_DRIVERS += st7789_spi
QUANTUM_PAINTER_LVGL_INTEGRATION = yes
SRC += keyboards/fingerpunch/src/display/waveshare_22224.c
# WPM_ENABLE = yes
OPT_DEFS += -DVIK_WAVESHARE_22224
endif
ifeq ($(strip $(VIK_AZOTEQ)), yes)
POINTING_DEVICE_ENABLE := yes
POINTING_DEVICE_DRIVER := azoteq_iqs5xx
OPT_DEFS += -DVIK_AZOTEQ
endif
ifeq ($(strip $(VIK_EC11_EVQWGD001)), yes)
ENCODER_ENABLE := yes
OPT_DEFS += -DVIK_EC11_EVQWGD001
endif
ifeq ($(strip $(VIK_TRACKPOINT)), yes)
###### OVERALL FINDINGS SO FAR
# AVR interrupt mode doesn't work for RP2040, as it requires PAL_MODE_OUTPUT_OPENDRAIN, which isn't provided for RP2040
# https://github.com/qmk/qmk_firmware/blob/master/docs/feature_ps2_mouse.md#interrupt-version-arm-chibios-idinterrupt-version-chibios
# https://github.com/qmk/qmk_firmware/pull/22615#issuecomment-1841537237
# USART mode won't work, since the pins on the VIK controllers don't use USART for GPIO 1 and GPIO 2
# https://github.com/qmk/qmk_firmware/blob/master/docs/feature_ps2_mouse.md#usart-version-idusart-version
# The only thing that's left is busywait, which is not recommended by QMK, and also requires PAL_MODE_OUTPUT_OPENDRAIN
# https://github.com/qmk/qmk_firmware/blob/master/docs/feature_ps2_mouse.md#busywait-version-idbusywait-version
# So, our only option is to use two consecutive pins, which means we can't even use the VIK connector unless GPIO AD1 and AD2
# are consecutive, as defined by the RP2040 vendor driver, check QMK docs
# Options are:
# 1) hand wire from VIK module to a PCB with consecutive GPIO available (assuming RP2040), or hand wire to any two GPIO for non-RP2040 controllers. This also requires a bodge for 3.3v (untested) or a logic level conversion between 3.3v and 5v if using a 3.3v controller
# 2) figure out an alternative way to get a driver working in QMK with PAL_MODE_OUTPUT_OPENDRAIN on an RP2040 (I don't even know if this is possible)
######
###### Actual VIK logic and options below:
# Uncomment these two lines, and one of the modes to test the various options, see:
# https://discord.com/channels/939959680611020840/1179500491525328926/1189474876386459678
# PS2_MOUSE_ENABLE = yes
# PS2_ENABLE = yes
# Busywait mode: https://github.com/qmk/qmk_firmware/blob/master/docs/feature_ps2_mouse.md#busywait-version-idbusywait-version
# PS2_DRIVER = busywait
# If using this mode, also see: keyboards/fingerpunch/svlinky/halconf.h
# ARM interrupt mode: https://github.com/qmk/qmk_firmware/blob/master/docs/feature_ps2_mouse.md#interrupt-version-arm-chibios-idinterrupt-version-chibios
# PS2_DRIVER = interrupt
# RP2040 pio / vendor mode: https://github.com/qmk/qmk_firmware/blob/master/docs/feature_ps2_mouse.md#rp2040-pio-version-idrp2040-pio-version
# PS2_DRIVER = vendor
OPT_DEFS += -DVIK_TRACKPOINT
endif
ifeq ($(strip $(VIK_RGB_ONLY)), yes)
OPT_DEFS += -DVIK_RGB_ONLY
endif
ifeq ($(strip $(PMW3360_ENABLE)), yes)
POINTING_DEVICE_ENABLE := yes
POINTING_DEVICE_DRIVER := pmw3360
QUANTUM_LIB_SRC += spi_master.c
OPT_DEFS += -DVIK_TRACKBALL_ENABLE
endif
ifeq ($(strip $(CIRQUE_ENABLE)), yes)
MOUSEKEY_ENABLE := yes # not required, but enabling for mouse button keys
POINTING_DEVICE_ENABLE := yes
POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
OPT_DEFS += -DCIRQUE_ENABLE
endif
ifeq ($(strip $(QUANTUM_PAINTER_ENABLE)), yes)
SRC += keyboards/fingerpunch/src/display/fp_display.c
endif
# Include any post processing that's dependent on everything else
include keyboards/fingerpunch/src/vik/rules.vik.post.mk

View File

@ -0,0 +1,112 @@
# Note that we need to wrap *all* of the actual enabling of drivers to only happen when building
# the left side. This is to avoid conflicts with the VIK device on the right half
# Notice the blocks below:
# ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
# ifeq ($(strip $(VIK_BUILD_LEFT)), yes)
# rules to enable feature
# endif
# else
# rules to enable feature
# endif
ifeq ($(strip $(VIK_HAPTIC)), yes)
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
ifeq ($(strip $(VIK_BUILD_LEFT)), yes)
HAPTIC_ENABLE = yes
HAPTIC_DRIVER = drv2605l
endif
else
HAPTIC_ENABLE = yes
HAPTIC_DRIVER = drv2605l
endif
OPT_DEFS += -DVIK_HAPTIC
endif
ifeq ($(strip $(VIK_ILI9341)), yes)
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
ifeq ($(strip $(VIK_BUILD_LEFT)), yes)
BACKLIGHT_ENABLE = yes
BACKLIGHT_DRIVER = software
QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_DRIVERS += ili9341_spi
QUANTUM_PAINTER_LVGL_INTEGRATION = yes
SRC += keyboards/fingerpunch/src/display/ili9341.c
endif
else
BACKLIGHT_ENABLE = yes
BACKLIGHT_DRIVER = software
QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_DRIVERS += ili9341_spi
QUANTUM_PAINTER_LVGL_INTEGRATION = yes
SRC += keyboards/fingerpunch/src/display/ili9341.c
endif
OPT_DEFS += -DVIK_ILI9341
endif
ifeq ($(strip $(VIK_WEACT_ST7735)), yes)
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
ifeq ($(strip $(VIK_BUILD_LEFT)), yes)
BACKLIGHT_ENABLE = yes
BACKLIGHT_DRIVER = software
QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_DRIVERS += st7735_spi
QUANTUM_PAINTER_LVGL_INTEGRATION = yes
SRC += keyboards/fingerpunch/src/display/st7735.c
endif
else
BACKLIGHT_ENABLE = yes
BACKLIGHT_DRIVER = software
QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_DRIVERS += st7735_spi
QUANTUM_PAINTER_LVGL_INTEGRATION = yes
SRC += keyboards/fingerpunch/src/display/st7735.c
endif
OPT_DEFS += -DVIK_WEACT_ST7735
endif
ifeq ($(strip $(VIK_GC9A01)), yes)
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
ifeq ($(strip $(VIK_BUILD_LEFT)), yes)
QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_DRIVERS += gc9a01_spi
QUANTUM_PAINTER_LVGL_INTEGRATION = yes
SRC += keyboards/fingerpunch/src/display/gc9a01.c
endif
else
QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_DRIVERS += gc9a01_spi
QUANTUM_PAINTER_LVGL_INTEGRATION = yes
SRC += keyboards/fingerpunch/src/display/gc9a01.c
endif
OPT_DEFS += -DVIK_GC9A01
endif
ifeq ($(strip $(VIK_WAVESHARE_22224)), yes)
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
ifeq ($(strip $(VIK_BUILD_LEFT)), yes)
QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_DRIVERS += st7789_spi
QUANTUM_PAINTER_LVGL_INTEGRATION = yes
SRC += keyboards/fingerpunch/src/display/waveshare_22224.c
endif
else
QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_DRIVERS += st7789_spi
QUANTUM_PAINTER_LVGL_INTEGRATION = yes
SRC += keyboards/fingerpunch/src/display/waveshare_22224.c
endif
OPT_DEFS += -DVIK_WAVESHARE_22224
endif
ifeq ($(strip $(VIK_EC11_EVQWGD001)), yes)
ENCODER_ENABLE := yes
OPT_DEFS += -DVIK_EC11_EVQWGD001
endif

View File

@ -0,0 +1,83 @@
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
ifeq ($(strip $(VIK_BUILD_LEFT)), yes)
endif
else
endif
# Point devices left
ifeq ($(strip $(VIK_AZOTEQ)), yes)
POINTING_DEVICE_ENABLE := yes
POINTING_DEVICE_DRIVER := azoteq_iqs5xx
VIK_POINTING_LEFT := yes
OPT_DEFS += -DVIK_AZOTEQ
OPT_DEFS += -DVIK_POINTING_LEFT
endif
ifeq ($(strip $(VIK_CIRQUE)), yes)
CIRQUE_ENABLE := yes
VIK_POINTING_LEFT := yes
OPT_DEFS += -DVIK_CIRQUE
OPT_DEFS += -DVIK_POINTING_LEFT
endif
ifeq ($(strip $(VIK_PER56_CIRQUE_LEDS)), yes)
CIRQUE_ENABLE = yes
VIK_POINTING_LEFT := yes
ENCODER_ENABLE = yes
OPT_DEFS += -DVIK_PER56_CIRQUE_LEDS
OPT_DEFS += -DVIK_POINTING_LEFT
endif
ifeq ($(strip $(VIK_PER56_PMW3360_LEDS)), yes)
PMW3360_ENABLE = yes
VIK_POINTING_LEFT := yes
ENCODER_ENABLE = yes
OPT_DEFS += -DVIK_PER56_PMW3360_LEDS
OPT_DEFS += -DVIK_POINTING_LEFT
endif
ifeq ($(strip $(VIK_PMW3360)), yes)
PMW3360_ENABLE = yes
VIK_POINTING_LEFT := yes
OPT_DEFS += -DVIK_PMW3360
OPT_DEFS += -DVIK_POINTING_LEFT
endif
ifeq ($(strip $(VIK_TRACKPOINT)), yes)
###### OVERALL FINDINGS SO FAR
# AVR interrupt mode doesn't work for RP2040, as it requires PAL_MODE_OUTPUT_OPENDRAIN, which isn't provided for RP2040
# https://github.com/qmk/qmk_firmware/blob/master/docs/feature_ps2_mouse.md#interrupt-version-arm-chibios-idinterrupt-version-chibios
# https://github.com/qmk/qmk_firmware/pull/22615#issuecomment-1841537237
# USART mode won't work, since the pins on the VIK controllers don't use USART for GPIO 1 and GPIO 2
# https://github.com/qmk/qmk_firmware/blob/master/docs/feature_ps2_mouse.md#usart-version-idusart-version
# The only thing that's left is busywait, which is not recommended by QMK, and also requires PAL_MODE_OUTPUT_OPENDRAIN
# https://github.com/qmk/qmk_firmware/blob/master/docs/feature_ps2_mouse.md#busywait-version-idbusywait-version
# So, our only option is to use two consecutive pins, which means we can't even use the VIK connector unless GPIO AD1 and AD2
# are consecutive, as defined by the RP2040 vendor driver, check QMK docs
# Options are:
# 1) hand wire from VIK module to a PCB with consecutive GPIO available (assuming RP2040), or hand wire to any two GPIO for non-RP2040 controllers. This also requires a bodge for 3.3v (untested) or a logic level conversion between 3.3v and 5v if using a 3.3v controller
# 2) figure out an alternative way to get a driver working in QMK with PAL_MODE_OUTPUT_OPENDRAIN on an RP2040 (I don't even know if this is possible)
######
###### Actual VIK logic and options below:
# Uncomment these two lines, and one of the modes to test the various options, see:
# https://discord.com/channels/939959680611020840/1179500491525328926/1189474876386459678
# PS2_MOUSE_ENABLE = yes
# PS2_ENABLE = yes
# Busywait mode: https://github.com/qmk/qmk_firmware/blob/master/docs/feature_ps2_mouse.md#busywait-version-idbusywait-version
# PS2_DRIVER = busywait
# If using this mode, also see: keyboards/fingerpunch/svlinky/halconf.h
# ARM interrupt mode: https://github.com/qmk/qmk_firmware/blob/master/docs/feature_ps2_mouse.md#interrupt-version-arm-chibios-idinterrupt-version-chibios
# PS2_DRIVER = interrupt
# RP2040 pio / vendor mode: https://github.com/qmk/qmk_firmware/blob/master/docs/feature_ps2_mouse.md#rp2040-pio-version-idrp2040-pio-version
# PS2_DRIVER = vendor
OPT_DEFS += -DVIK_TRACKPOINT
endif

View File

@ -0,0 +1,17 @@
ifeq ($(strip $(PMW3360_ENABLE)), yes)
POINTING_DEVICE_ENABLE := yes
POINTING_DEVICE_DRIVER := pmw3360
QUANTUM_LIB_SRC += spi_master.c
OPT_DEFS += -DVIK_TRACKBALL_ENABLE
endif
ifeq ($(strip $(CIRQUE_ENABLE)), yes)
MOUSEKEY_ENABLE := yes # not required, but enabling for mouse button keys
POINTING_DEVICE_ENABLE := yes
POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
OPT_DEFS += -DCIRQUE_ENABLE
endif
ifeq ($(strip $(QUANTUM_PAINTER_ENABLE)), yes)
SRC += keyboards/fingerpunch/src/display/fp_display.c
endif

View File

@ -0,0 +1,6 @@
VIK_POINTING_LEFT ?= no
VIK_POINTING_RIGHT ?= no
ifeq ($(strip $(VIK_RGB_ONLY)), yes)
OPT_DEFS += -DVIK_RGB_ONLY
endif

View File

@ -0,0 +1,4 @@
ifeq ($(strip $(VIK_EC11_EVQWGD001_RIGHT)), yes)
ENCODER_ENABLE := yes
OPT_DEFS += -DVIK_EC11_EVQWGD001_RIGHT
endif

View File

@ -0,0 +1,73 @@
# Note that we need to wrap *all* of the actual enabling of drivers to only happen when building
# the right side, or if the left side has no pointing device
# Notice the blocks below:
# ifeq ($(strip $(VIK_POINTING_LEFT)), no)
# rules to enable pointing
# endif
# ifeq ($(strip $(VIK_BUILD_RIGHT)), yes)
# rules to enable pointing
# endif
ifeq ($(strip $(VIK_AZOTEQ_RIGHT)), yes)
ifeq ($(strip $(VIK_POINTING_LEFT)), no)
POINTING_DEVICE_ENABLE := yes
POINTING_DEVICE_DRIVER := azoteq_iqs5xx
endif
ifeq ($(strip $(VIK_BUILD_RIGHT)), yes)
POINTING_DEVICE_ENABLE := yes
POINTING_DEVICE_DRIVER := azoteq_iqs5xx
endif
VIK_POINTING_RIGHT := yes
OPT_DEFS += -DVIK_AZOTEQ_RIGHT
OPT_DEFS += -DVIK_POINTING_RIGHT
endif
ifeq ($(strip $(VIK_CIRQUE_RIGHT)), yes)
ifeq ($(strip $(VIK_POINTING_LEFT)), no)
CIRQUE_ENABLE := yes
endif
ifeq ($(strip $(VIK_BUILD_RIGHT)), yes)
CIRQUE_ENABLE := yes
endif
VIK_POINTING_RIGHT := yes
OPT_DEFS += -DVIK_CIRQUE_RIGHT
OPT_DEFS += -DVIK_POINTING_RIGHT
endif
ifeq ($(strip $(VIK_PER56_CIRQUE_LEDS_RIGHT)), yes)
ifeq ($(strip $(VIK_POINTING_LEFT)), no)
CIRQUE_ENABLE := yes
endif
ifeq ($(strip $(VIK_BUILD_RIGHT)), yes)
CIRQUE_ENABLE := yes
endif
ENCODER_ENABLE = yes
VIK_POINTING_RIGHT := yes
OPT_DEFS += -DVIK_PER56_CIRQUE_LEDS_RIGHT
OPT_DEFS += -DVIK_POINTING_RIGHT
endif
ifeq ($(strip $(VIK_PER56_PMW3360_LEDS_RIGHT)), yes)
ifeq ($(strip $(VIK_POINTING_LEFT)), no)
PMW3360_ENABLE = yes
endif
ifeq ($(strip $(VIK_BUILD_RIGHT)), yes)
PMW3360_ENABLE = yes
endif
ENCODER_ENABLE = yes
VIK_POINTING_RIGHT := yes
OPT_DEFS += -DVIK_PER56_PMW3360_LEDS_RIGHT
OPT_DEFS += -DVIK_POINTING_RIGHT
endif
ifeq ($(strip $(VIK_PMW3360_RIGHT)), yes)
ifeq ($(strip $(VIK_POINTING_LEFT)), no)
PMW3360_ENABLE = yes
endif
ifeq ($(strip $(VIK_BUILD_RIGHT)), yes)
PMW3360_ENABLE = yes
endif
VIK_POINTING_RIGHT := yes
OPT_DEFS += -DVIK_PMW3360_RIGHT
OPT_DEFS += -DVIK_POINTING_RIGHT
endif

View File

@ -40,3 +40,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -16,7 +16,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// NOTE: All logic for the modules can be found in:
// keyboards/fingerpunch/src/vik/config.h
// keyboards/fingerpunch/src/vik/config.vik.pre.h
// keyboards/fingerpunch/src/vik/config.vik.post.h
// keyboards/fingerpunch/src/vik/rules.mk
#pragma once

View File

@ -93,3 +93,5 @@
/* Backwards compatibility with existing out-of-tree keymaps */
#define LAYOUT_sweeeeep LAYOUT_split_3x5_3
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -101,3 +101,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -35,7 +35,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define SPI_MOSI_PIN GP23
#define SPI_MISO_PIN GP20
// Got help from https://www.eisbahn.jp/yoichiro/2022/08/luankey_pico_qmk_firmware.html
#define MASTER_LEFT
#define SPLIT_TRANSPORT_MIRROR
#define SPLIT_POINTING_ENABLE
@ -143,64 +142,48 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#ifdef CIRQUE_ENABLE
// cirque trackpad config
// This is for I2C only, which is not the default. Ximega doesn't have pull up resistors
// So you can't use it anyway
#define CIRQUE_PINNACLE_ADDR 0x2A
// This is for SPI only, which is the default
#define CIRQUE_PINNACLE_SPI_CS_PIN GP9
// Uncomment 2 lines below to switch to relative mode and enable right click
// Note that tap to click doesn't work on the slave side unless you enable relative mode
// #define CIRQUE_PINNACLE_POSITION_MODE CIRQUE_PINNACLE_RELATIVE_MODE
// #define CIRQUE_PINNACLE_SECONDARY_TAP_ENABLE
#define CIRQUE_PINNACLE_TAP_ENABLE
#define POINTING_DEVICE_TASK_THROTTLE_MS 5
#endif
#ifdef FP_TRACKBALL_ENABLE
// Trackball config
#define PMW33XX_CS_PIN GP9
#define PMW33XX_CPI 1000
#define PMW33XX_CS_DIVISOR 8
#endif
// All the possible configurations of pointing devices
#if defined(FP_TRACKBALL_BOTH)
#define POINTING_DEVICE_COMBINED // two pointing devices
#define POINTING_DEVICE_INVERT_Y // for trackball on the left
#define POINTING_DEVICE_INVERT_X_RIGHT // for trackball on the right
#if defined(VIK_CIRQUE) || defined(VIK_PER56_CIRQUE_LEDS)
#define POINTING_DEVICE_ROTATION_90
#endif
#if defined(FP_CIRQUE_BOTH)
#define POINTING_DEVICE_COMBINED // two pointing devices
#define POINTING_DEVICE_ROTATION_90 // for cirque on the left
#define POINTING_DEVICE_ROTATION_90_RIGHT // for cirque on the right
#endif
#if defined(FP_TRACKBALL_LEFT_ONLY)
#define POINTING_DEVICE_LEFT // one pointing device, on the left
#define POINTING_DEVICE_INVERT_Y // for trackball on the left
#endif
#if defined(FP_TRACKBALL_RIGHT_ONLY)
#define POINTING_DEVICE_RIGHT // one pointing device, on the right
#define POINTING_DEVICE_INVERT_X_RIGHT // for trackball on the right
#endif
#if defined(FP_CIRQUE_LEFT_ONLY)
#define POINTING_DEVICE_LEFT // one pointing device, on the left
#define POINTING_DEVICE_ROTATION_90 // for cirque on the left
#endif
#if defined(FP_CIRQUE_RIGHT_ONLY)
#define POINTING_DEVICE_RIGHT // one pointing device, on the right
#define POINTING_DEVICE_ROTATION_90_RIGHT // for cirque on the right
#endif
#if defined(FP_TRACKBALL_LEFT_CIRQUE_RIGHT)
#define POINTING_DEVICE_COMBINED // two pointing devices
#define POINTING_DEVICE_INVERT_Y // for trackball on the left
#define POINTING_DEVICE_ROTATION_90_RIGHT // for cirque on the right
#if defined(VIK_CIRQUE_RIGHT) || defined(VIK_PER56_CIRQUE_LEDS_RIGHT)
#ifdef POINTING_DEVICE_COMBINED
#define POINTING_DEVICE_ROTATION_90_RIGHT
#else
#define POINTING_DEVICE_ROTATION_90
#endif
#endif
#if defined(FP_CIRQUE_LEFT_TRACKBALL_RIGHT)
#define POINTING_DEVICE_COMBINED // two pointing devices
#define POINTING_DEVICE_ROTATION_90 // for cirque on the left
#define POINTING_DEVICE_INVERT_X_RIGHT // for trackball on the right
#if defined(VIK_PMW3360) || defined(VIK_PER56_PMW3360_LEDS)
#define POINTING_DEVICE_INVERT_X
#endif
#if defined(VIK_PMW3360_RIGHT) || defined(VIK_PER56_PMW3360_LEDS_RIGHT)
#ifdef POINTING_DEVICE_COMBINED
#define POINTING_DEVICE_INVERT_Y_RIGHT
#else
#define POINTING_DEVICE_INVERT_Y
#endif
#endif
#if defined(VIK_AZOTEQ)
#define AZOTEQ_IQS5XX_TPS65
#define POINTING_DEVICE_ROTATION_270
#endif
#if defined(VIK_AZOTEQ_RIGHT)
#define AZOTEQ_IQS5XX_TPS65
#ifdef POINTING_DEVICE_COMBINED
#define POINTING_DEVICE_ROTATION_270_RIGHT
#else
#define POINTING_DEVICE_ROTATION_270
#endif
#endif
// Display rotations
#if defined(VIK_WEACT_ST7735)
#define FP_QP_ROTATION QP_ROTATION_180
#endif
// Encoder configuration from VIK is in version specific config, e.g. ximega/v1/config.h

View File

@ -46,103 +46,12 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
OPT_DEFS += -DRGB_MATRIX_CUSTOM_KB
endif
# Choose only one (or none) of the 8 options below
FP_TRACKBALL_BOTH ?= no
FP_CIRQUE_BOTH ?= no
FP_TRACKBALL_LEFT_ONLY ?= no
FP_TRACKBALL_RIGHT_ONLY ?= no
FP_CIRQUE_LEFT_ONLY ?= no
FP_CIRQUE_RIGHT_ONLY ?= no
FP_TRACKBALL_LEFT_CIRQUE_RIGHT ?= no
FP_CIRQUE_LEFT_TRACKBALL_RIGHT ?= no
# When qmk supports multiple types of pointing devices, can remove this line below
# Also, can remove the question from fp_build.json
FP_SPLIT_LEFT ?= no
FP_SPLIT_RIGHT ?= no
# If you want to use VIK2 port's RGB instead of per key rgb and VIK1, enable this
FP_VIK2_RGB ?= no
ifeq ($(strip $(FP_TRACKBALL_BOTH)), yes)
PMW3360_ENABLE = yes
OPT_DEFS += -DFP_TRACKBALL_BOTH
endif
ifeq ($(strip $(FP_TRACKBALL_LEFT_ONLY)), yes)
PMW3360_ENABLE = yes
OPT_DEFS += -DFP_TRACKBALL_LEFT_ONLY
endif
ifeq ($(strip $(FP_TRACKBALL_RIGHT_ONLY)), yes)
PMW3360_ENABLE = yes
OPT_DEFS += -DFP_TRACKBALL_RIGHT_ONLY
endif
ifeq ($(strip $(FP_TRACKBALL_LEFT_CIRQUE_RIGHT)), yes)
# When qmk supports multiple types of pointing devices, change to something like the commented code below
# PMW3360_ENABLE = yes
# CIRQUE_ENABLE = yes
ifeq ($(strip $(FP_SPLIT_LEFT)), yes)
PMW3360_ENABLE = yes
endif
ifeq ($(strip $(FP_SPLIT_RIGHT)), yes)
CIRQUE_ENABLE = yes
endif
OPT_DEFS += -DFP_TRACKBALL_LEFT_CIRQUE_RIGHT
endif
ifeq ($(strip $(FP_CIRQUE_LEFT_TRACKBALL_RIGHT)), yes)
# When qmk supports multiple types of pointing devices, change to something like the commented code below
# PMW3360_ENABLE = yes
# CIRQUE_ENABLE = yes
ifeq ($(strip $(FP_SPLIT_LEFT)), yes)
CIRQUE_ENABLE = yes
endif
ifeq ($(strip $(FP_SPLIT_RIGHT)), yes)
PMW3360_ENABLE = yes
endif
OPT_DEFS += -DFP_CIRQUE_LEFT_TRACKBALL_RIGHT
endif
ifeq ($(strip $(FP_CIRQUE_BOTH)), yes)
CIRQUE_ENABLE = yes
OPT_DEFS += -DFP_CIRQUE_BOTH
endif
ifeq ($(strip $(FP_CIRQUE_LEFT_ONLY)), yes)
CIRQUE_ENABLE = yes
OPT_DEFS += -DFP_CIRQUE_LEFT_ONLY
endif
ifeq ($(strip $(FP_CIRQUE_RIGHT_ONLY)), yes)
CIRQUE_ENABLE = yes
OPT_DEFS += -DFP_CIRQUE_RIGHT_ONLY
endif
# When qmk supports multiple types of pointing devices, can remove the FP_SPLIT_* blocks below
ifeq ($(strip $(FP_SPLIT_LEFT)), yes)
OPT_DEFS += -DFP_SPLIT_LEFT
endif
ifeq ($(strip $(FP_SPLIT_RIGHT)), yes)
OPT_DEFS += -DFP_SPLIT_RIGHT
endif
ifeq ($(strip $(FP_VIK2_RGB)), yes)
OPT_DEFS += -DFP_VIK2_RGB
endif
# include here so that if VIK enables the PMW3360, the OPT_DEFS get set appropriately for ximega
include keyboards/fingerpunch/src/rules.mk
ifeq ($(strip $(CIRQUE_ENABLE)), yes)
POINTING_DEVICE_ENABLE := yes
POINTING_DEVICE_DRIVER := cirque_pinnacle_spi
OPT_DEFS += -DCIRQUE_ENABLE
endif
ifeq ($(strip $(PMW3360_ENABLE)), yes)
POINTING_DEVICE_ENABLE := yes
POINTING_DEVICE_DRIVER := pmw3360
QUANTUM_LIB_SRC += spi_master.c
OPT_DEFS += -DFP_TRACKBALL_ENABLE
endif

View File

@ -49,4 +49,34 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Used only if you have a display with RESET unconnected, set to unused pin
#define VIK_DISPLAY_RST_UNUSED_PIN GP17
#define FP_QP_ROTATION QP_ROTATION_270
// Encoder configuration from VIK
#ifdef VIK_EC11_EVQWGD001
#define ENCODERS_PAD_A { GP26 }
#define ENCODERS_PAD_B { GP27 }
#define ENCODER_RESOLUTIONS { 2 }
#elif defined(VIK_PER56_CIRQUE_LEDS) || defined(VIK_PER56_PMW3360_LEDS)
#define ENCODERS_PAD_A { GP26 }
#define ENCODERS_PAD_B { GP27 }
#define ENCODER_RESOLUTIONS { 1 }
#else
#define ENCODERS_PAD_A { }
#define ENCODERS_PAD_B { }
#define ENCODER_RESOLUTIONS { }
#endif
#ifdef VIK_EC11_EVQWGD001_RIGHT
#define ENCODERS_PAD_A_RIGHT { GP26 }
#define ENCODERS_PAD_B_RIGHT { GP27 }
#define ENCODER_RESOLUTIONS_RIGHT { 2 }
#elif defined(VIK_PER56_CIRQUE_LEDS_RIGHT) || defined(VIK_PER56_PMW3360_LEDS_RIGHT)
#define ENCODERS_PAD_A_RIGHT { GP26 }
#define ENCODERS_PAD_B_RIGHT { GP27 }
#define ENCODER_RESOLUTIONS_RIGHT { 1 }
#else
#define ENCODERS_PAD_A_RIGHT { }
#define ENCODERS_PAD_B_RIGHT { }
#define ENCODER_RESOLUTIONS_RIGHT { }
#endif
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -2,24 +2,39 @@
{
"type" : "one-of",
"names" : [
"FP_TRACKBALL_BOTH",
"FP_CIRQUE_BOTH",
"FP_TRACKBALL_LEFT_ONLY",
"FP_TRACKBALL_RIGHT_ONLY",
"FP_CIRQUE_LEFT_ONLY",
"FP_CIRQUE_RIGHT_ONLY",
"FP_TRACKBALL_LEFT_CIRQUE_RIGHT",
"FP_CIRQUE_LEFT_TRACKBALL_RIGHT"
"VIK_BUILD_LEFT",
"VIK_BUILD_RIGHT"
],
"user_input": "What config would you like to use? (NONE, FP_TRACKBALL_BOTH, FP_CIRQUE_BOTH, FP_TRACKBALL_LEFT_ONLY, FP_TRACKBALL_RIGHT_ONLY, FP_CIRQUE_LEFT_ONLY, FP_CIRQUE_RIGHT_ONLY, FP_TRACKBALL_LEFT_CIRQUE_RIGHT, FP_CIRQUE_LEFT_TRACKBALL_RIGHT):"
"user_input": "This is only applicable if you have two *different* VIK devices, one on each half. 0 if not applicable, 1 to build left firmware, 2 to build right firmware:"
},
{
"type" : "one-of",
"names" : [
"FP_SPLIT_LEFT",
"FP_SPLIT_RIGHT"
"VIK_AZOTEQ",
"VIK_CIRQUE",
"VIK_EC11_EVQWGD001",
"VIK_GC9A01",
"VIK_HAPTIC",
"VIK_ILI9341",
"VIK_PER56_CIRQUE_LEDS",
"VIK_PER56_PMW3360_LEDS",
"VIK_PMW3360",
"VIK_WAVESHARE_22224",
"VIK_WEACT_ST7735"
],
"user_input": "This is only applicable if you are doing mixed pointing devices. 0 if not applicable, 1 to build left firmware, 2 to build right firmware:"
"user_input": "What VIK config would you like to use for the left half? (0) NONE, (1) VIK_AZOTEQ, (2) VIK_CIRQUE, (3) VIK_EC11_EVQWGD001, (4) VIK_GC9A01, (5) VIK_HAPTIC, (6) VIK_ILI9341, (7) VIK_PER56_CIRQUE_LEDS, (8) VIK_PER56_PMW3360_LEDS, (9) VIK_PMW3360, (10) VIK_WAVESHARE_22224, (11) VIK_WEACT_ST7735:"
},
{
"type" : "one-of",
"names" : [
"VIK_AZOTEQ_RIGHT",
"VIK_CIRQUE_RIGHT",
"VIK_EC11_EVQWGD001_RIGHT",
"VIK_PER56_CIRQUE_LEDS_RIGHT",
"VIK_PER56_PMW3360_LEDS_RIGHT",
"VIK_PMW3360_RIGHT"
],
"user_input": "What VIK config would you like to use for the right half? (0) NONE, (1) VIK_AZOTEQ, (2) VIK_CIRQUE, (3) VIK_EC11_EVQWGD001, (4) VIK_PER56_CIRQUE_LEDS, (5) VIK_PER56_PMW3360_LEDS, (6) VIK_PMW3360:"
},
{
"type" : "one-of",
@ -28,10 +43,5 @@
"RGB_MATRIX_ENABLE"
],
"user_input": "No RGB, RGB light, RGB matrix?"
},
{
"type" : "single",
"name" : "FP_VIK2_RGB",
"user_input": "Do you want to use the RGB on VIK2? This disables per key rgb and VIK1 RGB."
}
]

View File

@ -21,3 +21,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROW_PINS { GP29, GP28, GP27, GP24 }
#define MATRIX_COL_PINS { GP10, GP11, GP26, GP12, GP13, GP14, GP15, GP16 }
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -37,3 +37,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Used only if you have a display with RESET unconnected, set to unused pin
#define VIK_DISPLAY_RST_UNUSED_PIN GP15
#define FP_QP_ROTATION QP_ROTATION_270
#include "keyboards/fingerpunch/src/config_post.h"

View File

@ -16,7 +16,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// NOTE: All logic for the modules can be found in:
// keyboards/fingerpunch/src/vik/config.h
// keyboards/fingerpunch/src/vik/config.vik.pre.h
// keyboards/fingerpunch/src/vik/config.vik.post.h
// keyboards/fingerpunch/src/vik/rules.mk
#pragma once

View File

@ -29,6 +29,7 @@
|| defined(KEYBOARD_fingerpunch_sweeeeep) \
|| defined(KEYBOARD_fingerpunch_vulpes_minora) \
|| defined(KEYBOARD_fingerpunch_vulpes_majora_v1) \
|| defined(KEYBOARD_fingerpunch_ximega) \
|| defined(KEYBOARD_fingerpunch_ximi) \
|| defined(KEYBOARD_fingerpunch_personal_badwings) \
|| defined(KEYBOARD_fingerpunch_personal_badwings_v2) \