spleeb.h (4619B)
- // 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