Align Dip Switch feature (#22625)
This commit is contained in:
		
							parent
							
								
									e471cb80cb
								
							
						
					
					
						commit
						42245651e7
					
				
					 3 changed files with 32 additions and 19 deletions
				
			
		| 
						 | 
				
			
			@ -19,8 +19,6 @@
 | 
			
		|||
#include <string.h> // 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);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,11 +20,29 @@
 | 
			
		|||
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue