diff options
author | Christopher Hoage <[email protected]> | 2023-03-10 21:33:52 -0800 |
---|---|---|
committer | GitHub <[email protected]> | 2023-03-10 22:33:52 -0700 |
commit | 96b0baa230fb0672a68d1f75ba58613526fef0e7 (patch) | |
tree | 213d1bcfd434d410ad68046b31b0e2397a6ead13 /keyboards/spleeb/spleeb.h | |
parent | dbd1d3cba111dabf3b2d322a3681039cf46603f7 (diff) | |
download | qmk_firmware-96b0baa230fb0672a68d1f75ba58613526fef0e7.tar.gz qmk_firmware-96b0baa230fb0672a68d1f75ba58613526fef0e7.zip |
[Keyboard] Add Spleeb default and custom firmware (#19481)
Co-authored-by: jack <[email protected]>
Diffstat (limited to 'keyboards/spleeb/spleeb.h')
-rw-r--r-- | keyboards/spleeb/spleeb.h | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/keyboards/spleeb/spleeb.h b/keyboards/spleeb/spleeb.h new file mode 100644 index 0000000000..67d01cdf35 --- /dev/null +++ b/keyboards/spleeb/spleeb.h @@ -0,0 +1,149 @@ +// Copyright 2022 Chris Hoage (@chrishoage) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "quantum.h" + +#if defined(SPLEEB_ENCODER_MODE_MAP_ENABLE) && !defined(ENCODER_ENABLE) +# error "Encoder must be enabled to use encoder mode map" +#endif + +#if defined(SPLEEB_ENCODER_MODE_MAP_ENABLE) && defined(ENCODER_MAP_ENABLE) +# error "Encoder mode map can not be used with encoder map" +#endif + +enum spleeb_keycodes { + POINTER_DEFAULT_DPI_FORWARD = QK_KB, + POINTER_DEFAULT_DPI_REVERSE, + POINTER_SNIPING_DPI_FORWARD, + POINTER_SNIPING_DPI_REVERSE, + SNIPING_MODE, + SNIPING_MODE_TOGGLE, + DRAGSCROLL_MODE, + DRAGSCROLL_MODE_TOGGLE, + ENC_MODE_STEP_LEFT, + ENC_MODE_STEP_RIGHT, +}; + +#define DF_MOD POINTER_DEFAULT_DPI_FORWARD +#define DF_RMOD POINTER_DEFAULT_DPI_REVERSE +#define SP_MOD POINTER_SNIPING_DPI_FORWARD +#define SP_RMOD POINTER_SNIPING_DPI_REVERSE +#define SNIPING SNIPING_MODE +#define SNP_TOG SNIPING_MODE_TOGGLE +#define DRGSCRL DRAGSCROLL_MODE +#define DRG_TOG DRAGSCROLL_MODE_TOGGLE +#define ENC_STL ENC_MODE_STEP_LEFT +#define ENC_STR ENC_MODE_STEP_RIGHT + +#ifdef POINTING_DEVICE_ENABLE +# ifndef SPLEEB_MINIMUM_DEFAULT_DPI +# define SPLEEB_MINIMUM_DEFAULT_DPI 300 +# endif // SPLEEB_MINIMUM_DEFAULT_DPI + +# ifndef SPLEEB_DEFAULT_DPI_CONFIG_STEP +# define SPLEEB_DEFAULT_DPI_CONFIG_STEP 100 +# endif // SPLEEB_DEFAULT_DPI_CONFIG_STEP + +# ifndef SPLEEB_MINIMUM_SNIPING_DPI +# define SPLEEB_MINIMUM_SNIPING_DPI 100 +# endif // SPLEEB_MINIMUM_SNIPING_DPI + +# ifndef SPLEEB_SNIPING_DPI_CONFIG_STEP +# define SPLEEB_SNIPING_DPI_CONFIG_STEP 100 +# endif // SPLEEB_SNIPING_DPI_CONFIG_STEP + +# ifndef SPLEEB_DRAGSCROLL_DIVISOR +# define SPLEEB_DRAGSCROLL_DIVISOR 64 +# endif // !SPLEEB_DRAGSCROLL_DIVISOR +#endif // POINTING_DEVICE_ENABLE + +#ifdef SPLEEB_ENCODER_MODE_MAP_ENABLE +# ifndef SPLEEB_ENCODER_MODE_COUNT +# define SPLEEB_ENCODER_MODE_COUNT 4 +# endif + +typedef struct { + uint8_t mode; + // Discriminate between array members which are (un)initialized + bool initalized; +} const spleeb_enc_mode_t; + +const spleeb_enc_mode_t spleeb_encoder_mode_map[NUM_ENCODERS][SPLEEB_ENCODER_MODE_COUNT]; + +// SPLEEB_ENC_MODE initializes the spleeb_enc_mode_t struct such that +// uninitialized mode_map members can be discriminated against when looking up +// mapped encoder modes. +# define SPLEEB_ENC_MODE(mode) \ + { mode, true } +#endif // SPLEEB_ENCODER_MODE_MAP_ENABLE + +#ifdef POINTING_DEVICE_ENABLE + +/** \brief Return the current DPI value for the pointer's default mode. */ +uint16_t spleeb_get_pointer_default_dpi(void); + +/** + * \brief Update the pointer's default DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to SPLEEB_DEFAULT_DPI_CONFIG_STEP. + * + * The new value is persisted in EEPROM. + */ +void spleeb_cycle_pointer_default_dpi(bool forward); + +/** + * \brief Same as `spleeb_cycle_pointer_default_dpi`, but do not write to + * EEPROM. + * + * This means that reseting the board will revert the value to the last + * persisted one. + */ +void spleeb_cycle_pointer_default_dpi_noeeprom(bool forward); + +/** \brief Return the current DPI value for the pointer's sniper-mode. */ +uint16_t spleeb_get_pointer_sniping_dpi(void); + +/** + * \brief Update the pointer's sniper-mode DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to SPLEEB_SNIPING_DPI_CONFIG_STEP. + * + * The new value is persisted in EEPROM. + */ +void spleeb_cycle_pointer_sniping_dpi(bool forward); + +/** + * \brief Same as `spleeb_cycle_pointer_sniping_dpi`, but do not write to + * EEPROM. + * + * This means that reseting the board will revert the value to the last + * persisted one. + */ +void spleeb_cycle_pointer_sniping_dpi_noeeprom(bool forward); + +/** \brief Whether sniper-mode is enabled. */ +bool spleeb_get_pointer_sniping_enabled(void); + +/** + * \brief Enable/disable sniper mode. + * + * When sniper mode is enabled the dpi is reduced to slow down the pointer for + * more accurate movements. + */ +void spleeb_set_pointer_sniping_enabled(bool enable); + +/** \brief Whether drag-scroll is enabled. */ +bool spleeb_get_pointer_dragscroll_enabled(void); + +/** + * \brief Enable/disable drag-scroll mode. + * + * When drag-scroll mode is enabled, horizontal and vertical pointer movements + * are translated into horizontal and vertical scroll movements. + */ +void spleeb_set_pointer_dragscroll_enabled(bool enable); +#endif // POINTING_DEVICE_ENABLE |