summaryrefslogtreecommitdiffstats
path: root/keyboards/spleeb/spleeb.h
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/spleeb/spleeb.h')
-rw-r--r--keyboards/spleeb/spleeb.h149
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