X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;f=keyboard%2Fergodox%2Fmatrix.c;h=ee0d5d230f33a188c4bc70503e4cd53d8c8ad50e;hb=5d8b9cb1c63b3a489e523808639d606df803de51;hp=e50932c92c25ffc752fc4a7098d5cb6e82c2599f;hpb=e93188021c0b1578ffbb6e0fadcd94e1e5132dcf;p=max%2Ftmk_keyboard.git diff --git a/keyboard/ergodox/matrix.c b/keyboard/ergodox/matrix.c index e50932c9..ee0d5d23 100644 --- a/keyboard/ergodox/matrix.c +++ b/keyboard/ergodox/matrix.c @@ -29,7 +29,7 @@ along with this program. If not, see . #include "matrix.h" #include "ergodox.h" #include "i2cmaster.h" -#ifdef DEBUG_MATRIX_FREQ +#ifdef DEBUG_MATRIX_SCAN_RATE #include "timer.h" #endif @@ -47,9 +47,9 @@ static void init_cols(void); static void unselect_rows(); static void select_row(uint8_t row); -static uint8_t mcp23018_status; +static uint8_t mcp23018_reset_loop; -#ifdef DEBUG_MATRIX_FREQ +#ifdef DEBUG_MATRIX_SCAN_RATE uint32_t matrix_timer; uint32_t matrix_scan_count; #endif @@ -71,6 +71,7 @@ void matrix_init(void) // initialize row and col init_ergodox(); mcp23018_status = init_mcp23018(); + ergodox_blink_all_leds(); unselect_rows(); init_cols(); @@ -80,7 +81,7 @@ void matrix_init(void) matrix_debouncing[i] = 0; } -#ifdef DEBUG_MATRIX_FREQ +#ifdef DEBUG_MATRIX_SCAN_RATE matrix_timer = timer_read32(); matrix_scan_count = 0; #endif @@ -88,7 +89,22 @@ void matrix_init(void) uint8_t matrix_scan(void) { -#ifdef DEBUG_MATRIX_FREQ + if (mcp23018_status) { // if there was an error + if (++mcp23018_reset_loop == 0) { + // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans + // this will be approx bit more frequent than once per second + print("trying to reset mcp23018\n"); + mcp23018_status = init_mcp23018(); + if (mcp23018_status) { + print("left side not responding\n"); + } else { + print("left side attached\n"); + ergodox_blink_all_leds(); + } + } + } + +#ifdef DEBUG_MATRIX_SCAN_RATE matrix_scan_count++; uint32_t timer_now = timer_read32(); @@ -134,8 +150,13 @@ uint8_t matrix_scan(void) case 4: case 5: case 7: - // red + // white + ergodox_left_led_1_on(); + break; + case 9: + // white+green ergodox_left_led_1_on(); + ergodox_left_led_3_on(); break; default: // none