static matrix_row_t read_cols(uint8_t row);
static void init_cols(void);
-static void unselect_rows();
+static void unselect_rows(void);
static void select_row(uint8_t row);
static uint8_t mcp23018_reset_loop;
__attribute__ ((weak))
-void * matrix_init_kb(void) {
-};
+void matrix_init_kb(void) {
+}
__attribute__ ((weak))
-void * matrix_scan_kb(void) {
-};
+void matrix_scan_kb(void) {
+}
inline
uint8_t matrix_rows(void)
matrix_scan_count = 0;
#endif
- if (matrix_init_kb) {
- (*matrix_init_kb)();
+ matrix_init_kb();
+
+}
+
+void matrix_power_up(void) {
+ mcp23018_status = init_mcp23018();
+
+ unselect_rows();
+ init_cols();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
}
+#ifdef DEBUG_MATRIX_SCAN_RATE
+ matrix_timer = timer_read32();
+ matrix_scan_count = 0;
+#endif
+
}
uint8_t matrix_scan(void)
}
- if (matrix_scan_kb) {
- (*matrix_scan_kb)();
- }
+ matrix_scan_kb();
return 1;
}
mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(GPIOA); if (mcp23018_status) goto out;
mcp23018_status = i2c_write( 0xFF
- & ~(ergodox_left_led_3<<LEFT_LED_3_SHIFT)
+ & ~(0<<7)
); if (mcp23018_status) goto out;
out:
i2c_stop();
mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(GPIOA); if (mcp23018_status) goto out;
mcp23018_status = i2c_write( 0xFF & ~(1<<row)
- & ~(ergodox_left_led_3<<LEFT_LED_3_SHIFT)
+ & ~(0<<7)
); if (mcp23018_status) goto out;
out:
i2c_stop();