]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/georgi/georgi.c
[Keyboard] fixed pins for numpad_5x4 layout (#6311)
[qmk_firmware.git] / keyboards / georgi / georgi.c
1 #include QMK_KEYBOARD_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     //DDRB  &= ~(1<<4);  // set B(4) as input
11     //PORTB &= ~(1<<4);  // set B(4) internal pull-up disabled
12
13     // unused pins - C7, D4, D5, D7, E6
14     // set as input with internal pull-up enabled
15     DDRC  &= ~(1<<7);
16     DDRD  &= ~(1<<5 | 1<<4 | 1<<6 | 1<<7);
17     DDRE  &= ~(1<<6);
18     PORTC |=  (1<<7);
19     PORTD |=  (1<<5 | 1<<4 | 1<<6 | 1<<7);
20     PORTE |=  (1<<6);
21
22     matrix_init_user();
23 }
24
25
26 uint8_t init_mcp23018(void) {
27     print("starting init");
28     mcp23018_status = 0x20;
29
30     // I2C subsystem
31
32     // uint8_t sreg_prev;
33     // sreg_prev=SREG;
34     // cli();
35
36     if (i2c_initialized == 0) {
37         i2c_init();  // on pins D(1,0)
38         i2c_initialized = true;
39         _delay_ms(1000);
40     }
41     // i2c_init(); // on pins D(1,0)
42     // _delay_ms(1000);
43
44     // set pin direction
45     // - unused  : input  : 1
46     // - input   : input  : 1
47     // - driving : output : 0
48     mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT);    if (mcp23018_status) goto out;
49     mcp23018_status = i2c_write(IODIRA, ERGODOX_EZ_I2C_TIMEOUT);            if (mcp23018_status) goto out;
50     mcp23018_status = i2c_write(0b10000000, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
51     mcp23018_status = i2c_write(0b11111111, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
52     i2c_stop();
53
54     // set pull-up
55     // - unused  : on  : 1
56     // - input   : on  : 1
57     // - driving : off : 0
58     mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT);    if (mcp23018_status) goto out;
59     mcp23018_status = i2c_write(GPPUA, ERGODOX_EZ_I2C_TIMEOUT);             if (mcp23018_status) goto out;
60     mcp23018_status = i2c_write(0b10000000, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
61     mcp23018_status = i2c_write(0b11111111, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
62
63 out:
64     i2c_stop();
65     // SREG=sreg_prev;
66     //uprintf("Init %x\n", mcp23018_status);
67     return mcp23018_status;
68 }