5 bool i2c_initialized = false;
7 void left_config(void);
8 uint8_t left_write(uint8_t reg, uint8_t data);
9 uint8_t left_read(uint8_t reg, uint8_t *data);
11 uint8_t init_mcp23017(void)
13 i2c_initialized = false;
15 if (i2c_initialized == 0)
17 i2c_init(); // on pins D(1,0)
38 uint8_t ret = i2c_start(I2C_ADDR_WRITE, HOTDOX_I2C_TIMEOUT);
46 i2c_initialized = true;
49 print("mcp23017 attached!!!\n");
56 i2c_initialized = false;
58 print("mcp23017 deattached!!!\n");
65 uint8_t left_read_cols(void)
69 left_read(MCP23017_B0_GPIOA, &data);
74 void left_unselect_rows(void)
76 left_write(MCP23017_B0_IODIRB, 0x3F);
79 void left_select_row(uint8_t row)
81 left_write(MCP23017_B0_IODIRB, ~(1 << row));
84 void left_config(void)
86 left_write(MCP23017_B0_IODIRA, 0x7F);
87 left_write(MCP23017_B0_IPOLA, 0x7F);
88 left_write(MCP23017_B0_GPPUA, 0x7F);
90 left_write(MCP23017_B0_IODIRB, 0xFF);
91 left_write(MCP23017_B0_GPIOB, 0xC0);
94 uint8_t left_write(uint8_t reg, uint8_t data)
103 ret = i2c_start(I2C_ADDR_WRITE, HOTDOX_I2C_TIMEOUT); if (ret) goto out;
104 ret = i2c_write(reg, HOTDOX_I2C_TIMEOUT); if (ret) goto out;
105 ret = i2c_write(data, HOTDOX_I2C_TIMEOUT);
112 uint8_t left_read(uint8_t reg, uint8_t *data)
114 if (!i2c_initialized)
121 ret = i2c_start(I2C_ADDR_WRITE, HOTDOX_I2C_TIMEOUT); if (ret) goto out;
122 ret = i2c_write(reg, HOTDOX_I2C_TIMEOUT); if (ret) goto out;
123 ret = i2c_start(I2C_ADDR_READ, HOTDOX_I2C_TIMEOUT); if (ret) goto out;
125 *data = i2c_read_nack(HOTDOX_I2C_TIMEOUT);