forked from mirrors/qmk_firmware
Change the prototype of matrix_output_unselect_delay() (#13045)
The prototype of matrix_output_unselect_delay() has been changed as follows. ```c void matrix_output_unselect_delay(uint8_t line, bool key_pressed); ``` Currently, no keyboard seems to be redefining `matrix_output_unselect_delay()`, so there is no change in the system behavior. With this change, the keyboard level code can get some optimization hints, for example, the following. ```c void matrix_output_unselect_delay(uint8_t line, bool key_pressed) { /* If none of the keys are pressed, * there is no need to wait for time for the next line. */ if (key_pressed) { #ifdef MATRIX_IO_DELAY # if MATRIX_IO_DELAY > 0 wait_us(MATRIX_IO_DELAY); # endif #else wait_us(30); #endif } } ```
This commit is contained in:
parent
a62b10176e
commit
ac2e6e01f1
3 changed files with 7 additions and 4 deletions
|
@ -182,7 +182,7 @@ __attribute__((weak)) void matrix_read_cols_on_row(matrix_row_t current_matrix[]
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
unselect_row(current_row);
|
unselect_row(current_row);
|
||||||
matrix_output_unselect_delay(); // wait for all Col signals to go HIGH
|
matrix_output_unselect_delay(current_row, current_row_value != 0); // wait for all Col signals to go HIGH
|
||||||
|
|
||||||
// Update the matrix
|
// Update the matrix
|
||||||
current_matrix[current_row] = current_row_value;
|
current_matrix[current_row] = current_row_value;
|
||||||
|
@ -222,6 +222,8 @@ __attribute__((weak)) void matrix_init_pins(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__((weak)) void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
|
__attribute__((weak)) void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
|
||||||
|
bool key_pressed = false;
|
||||||
|
|
||||||
// Select col
|
// Select col
|
||||||
if (!select_col(current_col)) { // select col
|
if (!select_col(current_col)) { // select col
|
||||||
return; // skip NO_PIN col
|
return; // skip NO_PIN col
|
||||||
|
@ -234,6 +236,7 @@ __attribute__((weak)) void matrix_read_rows_on_col(matrix_row_t current_matrix[]
|
||||||
if (readMatrixPin(row_pins[row_index]) == 0) {
|
if (readMatrixPin(row_pins[row_index]) == 0) {
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
|
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
|
key_pressed = true;
|
||||||
} else {
|
} else {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
|
@ -242,7 +245,7 @@ __attribute__((weak)) void matrix_read_rows_on_col(matrix_row_t current_matrix[]
|
||||||
|
|
||||||
// Unselect col
|
// Unselect col
|
||||||
unselect_col(current_col);
|
unselect_col(current_col);
|
||||||
matrix_output_unselect_delay(); // wait for all Row signals to go HIGH
|
matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -56,7 +56,7 @@ matrix_row_t matrix_get_row(uint8_t row);
|
||||||
void matrix_print(void);
|
void matrix_print(void);
|
||||||
/* delay between changing matrix pin state and reading values */
|
/* delay between changing matrix pin state and reading values */
|
||||||
void matrix_output_select_delay(void);
|
void matrix_output_select_delay(void);
|
||||||
void matrix_output_unselect_delay(void);
|
void matrix_output_unselect_delay(uint8_t line, bool key_pressed);
|
||||||
/* only for backwards compatibility. delay between changing matrix pin state and reading values */
|
/* only for backwards compatibility. delay between changing matrix pin state and reading values */
|
||||||
void matrix_io_delay(void);
|
void matrix_io_delay(void);
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ uint8_t matrix_key_count(void) {
|
||||||
__attribute__((weak)) void matrix_io_delay(void) { wait_us(MATRIX_IO_DELAY); }
|
__attribute__((weak)) void matrix_io_delay(void) { wait_us(MATRIX_IO_DELAY); }
|
||||||
|
|
||||||
__attribute__((weak)) void matrix_output_select_delay(void) { waitInputPinDelay(); }
|
__attribute__((weak)) void matrix_output_select_delay(void) { waitInputPinDelay(); }
|
||||||
__attribute__((weak)) void matrix_output_unselect_delay(void) { matrix_io_delay(); }
|
__attribute__((weak)) void matrix_output_unselect_delay(uint8_t line, bool key_pressed) { matrix_io_delay(); }
|
||||||
|
|
||||||
// CUSTOM MATRIX 'LITE'
|
// CUSTOM MATRIX 'LITE'
|
||||||
__attribute__((weak)) void matrix_init_custom(void) {}
|
__attribute__((weak)) void matrix_init_custom(void) {}
|
||||||
|
|
Loading…
Reference in a new issue