forked from mirrors/qmk_userspace
		
	core: allow locking the matrix state (#18852)
Co-authored-by: Sergey Vlasov <sigprof@gmail.com> Co-authored-by: Stefan Kerkmann <karlk90@pm.me> Co-authored-by: Nick Brassel <nick@tzarc.org>
This commit is contained in:
		
					parent
					
						
							
								db1eeea478
							
						
					
				
			
			
				commit
				
					
						3ae87b1555
					
				
			
		
					 2 changed files with 15 additions and 1 deletions
				
			
		| 
						 | 
					@ -252,6 +252,14 @@ __attribute__((weak)) void keyboard_post_init_kb(void) {
 | 
				
			||||||
    keyboard_post_init_user();
 | 
					    keyboard_post_init_user();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** \brief matrix_can_read
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Allows overriding when matrix scanning operations should be executed.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					__attribute__((weak)) bool matrix_can_read(void) {
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** \brief keyboard_setup
 | 
					/** \brief keyboard_setup
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * FIXME: needs doc
 | 
					 * FIXME: needs doc
 | 
				
			||||||
| 
						 | 
					@ -449,10 +457,14 @@ static inline void generate_tick_event(void) {
 | 
				
			||||||
 * @return false Matrix didn't change
 | 
					 * @return false Matrix didn't change
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static bool matrix_task(void) {
 | 
					static bool matrix_task(void) {
 | 
				
			||||||
 | 
					    if (!matrix_can_read()) {
 | 
				
			||||||
 | 
					        generate_tick_event();
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static matrix_row_t matrix_previous[MATRIX_ROWS];
 | 
					    static matrix_row_t matrix_previous[MATRIX_ROWS];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    matrix_scan();
 | 
					    matrix_scan();
 | 
				
			||||||
 | 
					 | 
				
			||||||
    bool matrix_changed = false;
 | 
					    bool matrix_changed = false;
 | 
				
			||||||
    for (uint8_t row = 0; row < MATRIX_ROWS && !matrix_changed; row++) {
 | 
					    for (uint8_t row = 0; row < MATRIX_ROWS && !matrix_changed; row++) {
 | 
				
			||||||
        matrix_changed |= matrix_previous[row] ^ matrix_get_row(row);
 | 
					        matrix_changed |= matrix_previous[row] ^ matrix_get_row(row);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,6 +51,8 @@ void matrix_setup(void);
 | 
				
			||||||
void matrix_init(void);
 | 
					void matrix_init(void);
 | 
				
			||||||
/* scan all key states on matrix */
 | 
					/* scan all key states on matrix */
 | 
				
			||||||
uint8_t matrix_scan(void);
 | 
					uint8_t matrix_scan(void);
 | 
				
			||||||
 | 
					/* whether matrix scanning operations should be executed */
 | 
				
			||||||
 | 
					bool matrix_can_read(void);
 | 
				
			||||||
/* whether a switch is on */
 | 
					/* whether a switch is on */
 | 
				
			||||||
bool matrix_is_on(uint8_t row, uint8_t col);
 | 
					bool matrix_is_on(uint8_t row, uint8_t col);
 | 
				
			||||||
/* matrix state on row */
 | 
					/* matrix state on row */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue