From 42245651e7515c0d323761c97e0f0d35ee6ff35a Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 8 Dec 2023 15:57:34 +0000 Subject: [PATCH] Align Dip Switch feature (#22625) --- quantum/dip_switch.c | 29 ++++++++++++----------------- quantum/dip_switch.h | 20 +++++++++++++++++++- quantum/keyboard.c | 2 +- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/quantum/dip_switch.c b/quantum/dip_switch.c index 6e254578d1..c4d64aa133 100644 --- a/quantum/dip_switch.c +++ b/quantum/dip_switch.c @@ -19,8 +19,6 @@ #include // for memcpy #include "dip_switch.h" -#include "gpio.h" -#include "util.h" #ifdef SPLIT_KEYBOARD # include "split_common/split_util.h" @@ -35,24 +33,17 @@ #endif #ifdef DIP_SWITCH_PINS -# define NUMBER_OF_DIP_SWITCHES (ARRAY_SIZE(dip_switch_pad)) static pin_t dip_switch_pad[] = DIP_SWITCH_PINS; #endif #ifdef DIP_SWITCH_MATRIX_GRID -typedef struct matrix_index_t { - uint8_t row; - uint8_t col; -} matrix_index_t; - -# define NUMBER_OF_DIP_SWITCHES (ARRAY_SIZE(dip_switch_pad)) -static matrix_index_t dip_switch_pad[] = DIP_SWITCH_MATRIX_GRID; -extern bool peek_matrix(uint8_t row_index, uint8_t col_index, bool read_raw); -static uint16_t scan_count; +static matrix_intersection_t dip_switch_pad[] = DIP_SWITCH_MATRIX_GRID; +extern bool peek_matrix(uint8_t row_index, uint8_t col_index, bool read_raw); +static uint16_t scan_count; #endif /* DIP_SWITCH_MATRIX_GRID */ -static bool dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0}; -static bool last_dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0}; +static bool dip_switch_state[NUM_DIP_SWITCHES] = {0}; +static bool last_dip_switch_state[NUM_DIP_SWITCHES] = {0}; __attribute__((weak)) bool dip_switch_update_user(uint8_t index, bool active) { return true; @@ -75,12 +66,12 @@ void dip_switch_init(void) { # if defined(SPLIT_KEYBOARD) && defined(DIP_SWITCH_PINS_RIGHT) if (!isLeftHand) { const pin_t dip_switch_pad_right[] = DIP_SWITCH_PINS_RIGHT; - for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) { + for (uint8_t i = 0; i < NUM_DIP_SWITCHES; i++) { dip_switch_pad[i] = dip_switch_pad_right[i]; } } # endif - for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) { + for (uint8_t i = 0; i < NUM_DIP_SWITCHES; i++) { setPinInputHigh(dip_switch_pad[i]); } dip_switch_read(true); @@ -108,7 +99,7 @@ void dip_switch_read(bool forced) { } #endif - for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) { + for (uint8_t i = 0; i < NUM_DIP_SWITCHES; i++) { #ifdef DIP_SWITCH_PINS dip_switch_state[i] = !readPin(dip_switch_pad[i]); #endif @@ -126,3 +117,7 @@ void dip_switch_read(bool forced) { memcpy(last_dip_switch_state, dip_switch_state, sizeof(dip_switch_state)); } } + +void dip_switch_task(void) { + dip_switch_read(false); +} diff --git a/quantum/dip_switch.h b/quantum/dip_switch.h index 6e79dcb0bf..ee5b550ada 100644 --- a/quantum/dip_switch.h +++ b/quantum/dip_switch.h @@ -20,11 +20,29 @@ #include #include +#include "gpio.h" +#include "util.h" + +#if defined(DIP_SWITCH_PINS) +# define NUM_DIP_SWITCHES ARRAY_SIZE(((pin_t[])DIP_SWITCH_PINS)) +#elif defined(DIP_SWITCH_MATRIX_GRID) +typedef struct matrix_intersection_t { + uint8_t row; + uint8_t col; +} matrix_intersection_t; +# define NUM_DIP_SWITCHES ARRAY_SIZE(((matrix_intersection_t[])DIP_SWITCH_MATRIX_GRID)) +#endif + +#ifndef NUM_DIP_SWITCHES +# define NUM_DIP_SWITCHES 0 +#endif bool dip_switch_update_kb(uint8_t index, bool active); bool dip_switch_update_user(uint8_t index, bool active); bool dip_switch_update_mask_user(uint32_t state); bool dip_switch_update_mask_kb(uint32_t state); -void dip_switch_init(void); void dip_switch_read(bool forced); + +void dip_switch_init(void); +void dip_switch_task(void); diff --git a/quantum/keyboard.c b/quantum/keyboard.c index 86a1a9fea3..b5fa1a6e2e 100644 --- a/quantum/keyboard.c +++ b/quantum/keyboard.c @@ -615,7 +615,7 @@ void quantum_task(void) { #endif #ifdef DIP_SWITCH_ENABLE - dip_switch_read(false); + dip_switch_task(); #endif #ifdef AUTO_SHIFT_ENABLE