- for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) {
- matrix_row_t mask = (matrix_row_t)1 << c;
- if (changes & mask) {
- keyevent_t event;
- event.key = (keypos_t){ .row = r, .col = c };
- event.pressed = state & mask;
- /* the time should not be 0 */
- event.time = timer_read() | 1;
- action_exec(event);
- /* records the processed key event */
- previous_matrix[r] ^= mask;
- /* processes one key event per call */
- goto event_processed;
+ for (uint8_t c = 0; c < MATRIX_COLS; c++) {
+ if (matrix_change & ((matrix_row_t)1<<c)) {
+ action_exec((keyevent_t){
+ .key = (keypos_t){ .row = r, .col = c },
+ .pressed = (matrix_row & ((matrix_row_t)1<<c)),
+ .time = (timer_read() | 1) /* time should not be 0 */
+ });
+ // record a processed key
+ matrix_prev[r] ^= ((matrix_row_t)1<<c);
+ // process a key per task call
+ goto MATRIX_LOOP_END;