149 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // 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
 | 
