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