~ruther/qmk_firmware

c0095710a7c7e9bd94aa9f4dd814dc28d718c731 — Erez Zukerman 7 years ago 682555f
a failed attempt at hot-plugging
2 files changed, 12 insertions(+), 7 deletions(-)

M keyboards/ergodox_ez/ergodox_ez.c
M keyboards/ergodox_ez/matrix.c
M keyboards/ergodox_ez/ergodox_ez.c => keyboards/ergodox_ez/ergodox_ez.c +8 -5
@@ 112,11 112,14 @@ uint8_t init_mcp23018(void) {
    // uint8_t sreg_prev;
    // sreg_prev=SREG;
    // cli();
    if (i2c_initialized == 0) {
        i2c_init();  // on pins D(1,0)
        i2c_initialized = true;
        _delay_ms(1000);
    }

    // if (i2c_initialized == 0) {
    //     i2c_init();  // on pins D(1,0)
    //     i2c_initialized = true;
    //     _delay_ms(1000);
    // }
    i2c_init(); // on pins D(1,0)
    _delay_ms(1000);

    // set pin direction
    // - unused  : input  : 1

M keyboards/ergodox_ez/matrix.c => keyboards/ergodox_ez/matrix.c +4 -2
@@ 68,7 68,8 @@ static void init_cols(void);
static void unselect_rows(void);
static void select_row(uint8_t row);

static uint8_t mcp23018_reset_loop;
// static uint8_t mcp23018_reset_loop;
static uint16_t mcp23018_reset_loop;

#ifdef DEBUG_MATRIX_SCAN_RATE
uint32_t matrix_timer;


@@ 175,7 176,8 @@ void debounce_report(matrix_row_t change, uint8_t row) {
uint8_t matrix_scan(void)
{
    if (mcp23018_status) { // if there was an error
        if (++mcp23018_reset_loop == 0) {
        // if (++mcp23018_reset_loop == 0) {
        if (++mcp23018_reset_loop >= 1300) {
            // 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");