qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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 }