diff options
author | Ryan <[email protected]> | 2024-11-10 09:10:10 +1100 |
---|---|---|
committer | GitHub <[email protected]> | 2024-11-09 14:10:10 -0800 |
commit | a3cfb1dab7679a774d8aa09f7b609f3302dad73d (patch) | |
tree | 315e8c7a35ae390b56f84def0d37b867bfa428c7 /quantum | |
parent | 69093f6de9b551bd84ff0a8eabcccca73026d55e (diff) | |
download | qmk_firmware-a3cfb1dab7679a774d8aa09f7b609f3302dad73d.tar.gz qmk_firmware-a3cfb1dab7679a774d8aa09f7b609f3302dad73d.zip |
Joystick: add support for 8-way hat switch (#24515)
Diffstat (limited to 'quantum')
-rw-r--r-- | quantum/joystick.c | 10 | ||||
-rw-r--r-- | quantum/joystick.h | 22 |
2 files changed, 31 insertions, 1 deletions
diff --git a/quantum/joystick.c b/quantum/joystick.c index 32f19b2cd9..62893fd199 100644 --- a/quantum/joystick.c +++ b/quantum/joystick.c @@ -29,6 +29,9 @@ joystick_t joystick_state = { 0 #endif }, +#ifdef JOYSTICK_HAS_HAT + .hat = -1, +#endif .dirty = false, }; @@ -145,6 +148,13 @@ void joystick_set_axis(uint8_t axis, int16_t value) { } } +#ifdef JOYSTICK_HAS_HAT +void joystick_set_hat(int8_t value) { + joystick_state.hat = value; + joystick_state.dirty = true; +} +#endif + void joystick_init(void) { joystick_init_axes(); } diff --git a/quantum/joystick.h b/quantum/joystick.h index 5a69ceac64..24f80c1ad6 100644 --- a/quantum/joystick.h +++ b/quantum/joystick.h @@ -52,6 +52,16 @@ #define JOYSTICK_MAX_VALUE ((1L << (JOYSTICK_AXIS_RESOLUTION - 1)) - 1) +#define JOYSTICK_HAT_CENTER -1 +#define JOYSTICK_HAT_NORTH 0 +#define JOYSTICK_HAT_NORTHEAST 1 +#define JOYSTICK_HAT_EAST 2 +#define JOYSTICK_HAT_SOUTHEAST 3 +#define JOYSTICK_HAT_SOUTH 4 +#define JOYSTICK_HAT_SOUTHWEST 5 +#define JOYSTICK_HAT_WEST 6 +#define JOYSTICK_HAT_NORTHWEST 7 + // configure on input_pin of the joystick_axes array entry to NO_PIN // to prevent it from being read from the ADC. This allows outputting forged axis value. #define JOYSTICK_AXIS_VIRTUAL \ @@ -73,7 +83,10 @@ extern joystick_config_t joystick_axes[JOYSTICK_AXIS_COUNT]; typedef struct { uint8_t buttons[(JOYSTICK_BUTTON_COUNT - 1) / 8 + 1]; int16_t axes[JOYSTICK_AXIS_COUNT]; - bool dirty; +#ifdef JOYSTICK_HAS_HAT + int8_t hat; +#endif + bool dirty; } joystick_t; extern joystick_t joystick_state; @@ -129,4 +142,11 @@ void joystick_read_axes(void); */ void joystick_set_axis(uint8_t axis, int16_t value); +/** + * \brief Set the position of the hat switch. + * + * \param value The hat switch position to set. + */ +void joystick_set_hat(int8_t value); + /** \} */ |