enhancementhelp wantedin progress
Metriche repository
- Star
- (20.368 star)
- Metriche merge PR
- (Merge medio 20g 9h) (27 PR mergiate in 30 g)
Descrizione
Feature Request Type
- Core functionality
- Add-on hardware support (eg. audio, RGB, OLED screen, etc.)
- Alteration (enhancement/optimization) of existing feature(s)
- New behavior
Description
The configuration of the current key matrix is done by defining one of the following three types.
#define DIRECT_PINS {...}#define DIODE_DIRECTION COL2ROW#define DIODE_DIRECTION ROW2COL
For this configuration, quantum/matrix.c has the following structure.
This is difficult to read because of the long and complicated ifdef ... endif block.
#ifdef DIRECT_PINS
//// direct_pins code block 27 lines
#elif defined(DIODE_DIRECTION)
# if defined(MATRIX_ROW_PINS) && defined(MATRIX_COL_PINS)
# if (DIODE_DIRECTION == COL2ROW)
//// COL2ROW code block 56 lines
# elif (DIODE_DIRECTION == ROW2COL)
//// ROW2COL code block 58 lines
# else
# error DIODE_DIRECTION must be one of COL2ROW or ROW2COL!
# endif
# endif // defined(MATRIX_ROW_PINS) && defined(MATRIX_COL_PINS)
#else
# error DIODE_DIRECTION is not defined!
#endif
Therefore, I propose a new configuration format as follows.
#define KEY_MATRIX_TYPE DIRECT_SWITCH#define KEY_MATRIX_TYPE DIODE_COL2ROW#define KEY_MATRIX_TYPE DIODE_ROW2COL
With this configuration, quantum/matrix.c will have the following structure, which is easier to read.
#if KEY_MATRIX_TYPE == DIRECT_SWITCH
# ifndef DIRECT_PINS
# error "DIRECT_PINS is not defined."
# endif
//// direct_pins code block 27 lines
#endif // KEY_MATRIX_TYPE == DIRECT_SWITCH
#if KEY_MATRIX_TYPE == DIODE_COL2ROW && defined(MATRIX_ROW_PINS) && defined(MATRIX_COL_PINS)
//// COL2ROW code block 56 lines
#endif // KEY_MATRIX_TYPE == DIODE_COL2ROW
#if KEY_MATRIX_TYPE == DIODE_ROW2COL && defined(MATRIX_ROW_PINS) && defined(MATRIX_COL_PINS)
//// ROW2COL code block 58 lines
#endif // KEY_MATRIX_TYPE == DIODE_ROW2COL
Also, add the following code to the top of quantum/matrix.h to ensure backward compatibility.
#ifndef KEY_MATRIX_TYPE
// for backward compatibility
# ifdef DIRECT_PINS
# define KEY_MATRIX_TYPE DIRECT_SWITCH
# else
# if DIODE_DIRECTION == ROW2COL
# define KEY_MATRIX_TYPE DIODE_ROW2COL
# endif
# if DIODE_DIRECTION == COL2ROW
# define KEY_MATRIX_TYPE DIODE_COL2ROW
# endif
# endif
# ifndef KEY_MATRIX_TYPE
# error "KEY_MATRIX_TYPE could not be determined."
# endif
#endif
#if KEY_MATRIX_TYPE != DIRECT_SWITCH && KEY_MATRIX_TYPE != DIODE_COL2ROW && KEY_MATRIX_TYPE != DIODE_ROW2COL
# error "Invalid KEY_MATRIX_TYPE config."
#endif