logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

spleeb.h (4619B)


  1. // Copyright 2022 Chris Hoage (@chrishoage)
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include "quantum.h"
  5. #if defined(SPLEEB_ENCODER_MODE_MAP_ENABLE) && !defined(ENCODER_ENABLE)
  6. # error "Encoder must be enabled to use encoder mode map"
  7. #endif
  8. #if defined(SPLEEB_ENCODER_MODE_MAP_ENABLE) && defined(ENCODER_MAP_ENABLE)
  9. # error "Encoder mode map can not be used with encoder map"
  10. #endif
  11. enum spleeb_keycodes {
  12. POINTER_DEFAULT_DPI_FORWARD = QK_KB,
  13. POINTER_DEFAULT_DPI_REVERSE,
  14. POINTER_SNIPING_DPI_FORWARD,
  15. POINTER_SNIPING_DPI_REVERSE,
  16. SNIPING_MODE,
  17. SNIPING_MODE_TOGGLE,
  18. DRAGSCROLL_MODE,
  19. DRAGSCROLL_MODE_TOGGLE,
  20. ENC_MODE_STEP_LEFT,
  21. ENC_MODE_STEP_RIGHT,
  22. };
  23. #define DF_MOD POINTER_DEFAULT_DPI_FORWARD
  24. #define DF_RMOD POINTER_DEFAULT_DPI_REVERSE
  25. #define SP_MOD POINTER_SNIPING_DPI_FORWARD
  26. #define SP_RMOD POINTER_SNIPING_DPI_REVERSE
  27. #define SNIPING SNIPING_MODE
  28. #define SNP_TOG SNIPING_MODE_TOGGLE
  29. #define DRGSCRL DRAGSCROLL_MODE
  30. #define DRG_TOG DRAGSCROLL_MODE_TOGGLE
  31. #define ENC_STL ENC_MODE_STEP_LEFT
  32. #define ENC_STR ENC_MODE_STEP_RIGHT
  33. #ifdef POINTING_DEVICE_ENABLE
  34. # ifndef SPLEEB_MINIMUM_DEFAULT_DPI
  35. # define SPLEEB_MINIMUM_DEFAULT_DPI 300
  36. # endif // SPLEEB_MINIMUM_DEFAULT_DPI
  37. # ifndef SPLEEB_DEFAULT_DPI_CONFIG_STEP
  38. # define SPLEEB_DEFAULT_DPI_CONFIG_STEP 100
  39. # endif // SPLEEB_DEFAULT_DPI_CONFIG_STEP
  40. # ifndef SPLEEB_MINIMUM_SNIPING_DPI
  41. # define SPLEEB_MINIMUM_SNIPING_DPI 100
  42. # endif // SPLEEB_MINIMUM_SNIPING_DPI
  43. # ifndef SPLEEB_SNIPING_DPI_CONFIG_STEP
  44. # define SPLEEB_SNIPING_DPI_CONFIG_STEP 100
  45. # endif // SPLEEB_SNIPING_DPI_CONFIG_STEP
  46. # ifndef SPLEEB_DRAGSCROLL_DIVISOR
  47. # define SPLEEB_DRAGSCROLL_DIVISOR 64
  48. # endif // !SPLEEB_DRAGSCROLL_DIVISOR
  49. #endif // POINTING_DEVICE_ENABLE
  50. #ifdef SPLEEB_ENCODER_MODE_MAP_ENABLE
  51. # ifndef SPLEEB_ENCODER_MODE_COUNT
  52. # define SPLEEB_ENCODER_MODE_COUNT 4
  53. # endif
  54. typedef struct {
  55. uint8_t mode;
  56. // Discriminate between array members which are (un)initialized
  57. bool initalized;
  58. } const spleeb_enc_mode_t;
  59. const spleeb_enc_mode_t spleeb_encoder_mode_map[NUM_ENCODERS][SPLEEB_ENCODER_MODE_COUNT];
  60. // SPLEEB_ENC_MODE initializes the spleeb_enc_mode_t struct such that
  61. // uninitialized mode_map members can be discriminated against when looking up
  62. // mapped encoder modes.
  63. # define SPLEEB_ENC_MODE(mode) \
  64. { mode, true }
  65. #endif // SPLEEB_ENCODER_MODE_MAP_ENABLE
  66. #ifdef POINTING_DEVICE_ENABLE
  67. /** \brief Return the current DPI value for the pointer's default mode. */
  68. uint16_t spleeb_get_pointer_default_dpi(void);
  69. /**
  70. * \brief Update the pointer's default DPI to the next or previous step.
  71. *
  72. * Increases the DPI value if `forward` is `true`, decreases it otherwise.
  73. * The increment/decrement steps are equal to SPLEEB_DEFAULT_DPI_CONFIG_STEP.
  74. *
  75. * The new value is persisted in EEPROM.
  76. */
  77. void spleeb_cycle_pointer_default_dpi(bool forward);
  78. /**
  79. * \brief Same as `spleeb_cycle_pointer_default_dpi`, but do not write to
  80. * EEPROM.
  81. *
  82. * This means that reseting the board will revert the value to the last
  83. * persisted one.
  84. */
  85. void spleeb_cycle_pointer_default_dpi_noeeprom(bool forward);
  86. /** \brief Return the current DPI value for the pointer's sniper-mode. */
  87. uint16_t spleeb_get_pointer_sniping_dpi(void);
  88. /**
  89. * \brief Update the pointer's sniper-mode DPI to the next or previous step.
  90. *
  91. * Increases the DPI value if `forward` is `true`, decreases it otherwise.
  92. * The increment/decrement steps are equal to SPLEEB_SNIPING_DPI_CONFIG_STEP.
  93. *
  94. * The new value is persisted in EEPROM.
  95. */
  96. void spleeb_cycle_pointer_sniping_dpi(bool forward);
  97. /**
  98. * \brief Same as `spleeb_cycle_pointer_sniping_dpi`, but do not write to
  99. * EEPROM.
  100. *
  101. * This means that reseting the board will revert the value to the last
  102. * persisted one.
  103. */
  104. void spleeb_cycle_pointer_sniping_dpi_noeeprom(bool forward);
  105. /** \brief Whether sniper-mode is enabled. */
  106. bool spleeb_get_pointer_sniping_enabled(void);
  107. /**
  108. * \brief Enable/disable sniper mode.
  109. *
  110. * When sniper mode is enabled the dpi is reduced to slow down the pointer for
  111. * more accurate movements.
  112. */
  113. void spleeb_set_pointer_sniping_enabled(bool enable);
  114. /** \brief Whether drag-scroll is enabled. */
  115. bool spleeb_get_pointer_dragscroll_enabled(void);
  116. /**
  117. * \brief Enable/disable drag-scroll mode.
  118. *
  119. * When drag-scroll mode is enabled, horizontal and vertical pointer movements
  120. * are translated into horizontal and vertical scroll movements.
  121. */
  122. void spleeb_set_pointer_dragscroll_enabled(bool enable);
  123. #endif // POINTING_DEVICE_ENABLE