1
0
Fork 0

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:
Takeshi ISHII 2021-07-13 16:50:25 +09:00 committed by GitHub
parent a62b10176e
commit ac2e6e01f1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 7 additions and 4 deletions

View file

@ -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

View file

@ -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);

View file

@ -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) {}