georgi.c (1591B)
1 #include "georgi.h" 2 3 bool i2c_initialized = 0; 4 i2c_status_t mcp23018_status = 0x20; 5 6 void matrix_init_kb(void) { 7 steno_set_mode(STENO_MODE_GEMINI); // or STENO_MODE_BOLT 8 9 // (tied to Vcc for hardware convenience) 10 //gpio_set_pin_input(B4); // set B(4) as input, internal pull-up disabled 11 12 // unused pins - C7, D4, D5, D6, D7, E6 13 // set as input with internal pull-up enabled 14 gpio_set_pin_input_high(C7); 15 gpio_set_pin_input_high(D4); 16 gpio_set_pin_input_high(D5); 17 gpio_set_pin_input_high(D6); 18 gpio_set_pin_input_high(D7); 19 gpio_set_pin_input_high(E6); 20 21 matrix_init_user(); 22 } 23 24 25 uint8_t init_mcp23018(void) { 26 print("starting init"); 27 mcp23018_status = 0x20; 28 29 // I2C subsystem 30 31 // uint8_t sreg_prev; 32 // sreg_prev=SREG; 33 // cli(); 34 35 if (i2c_initialized == 0) { 36 i2c_init(); // on pins D(1,0) 37 i2c_initialized = true; 38 _delay_ms(1000); 39 } 40 // i2c_init(); // on pins D(1,0) 41 // _delay_ms(1000); 42 43 // set pin direction 44 // - unused : input : 1 45 // - input : input : 1 46 // - driving : output : 0 47 uint8_t data[] = {0b10000000, 0b11111111}; 48 mcp23018_status = i2c_write_register(I2C_ADDR, IODIRA, data, 2, ERGODOX_EZ_I2C_TIMEOUT); 49 50 if (!mcp23018_status) { 51 // set pull-up 52 // - unused : on : 1 53 // - input : on : 1 54 // - driving : off : 0 55 mcp23018_status = i2c_write_register(I2C_ADDR, GPPUA, data, 2, ERGODOX_EZ_I2C_TIMEOUT); 56 } 57 58 // SREG=sreg_prev; 59 //uprintf("Init %x\n", mcp23018_status); 60 return mcp23018_status; 61 }