- #include "action.h"
- #include "left.h"
- #include "wait.h"
-
- bool i2c_initialized = false;
-
- void left_config(void);
- i2c_status_t left_write(uint8_t reg, uint8_t data);
- i2c_status_t left_read(uint8_t reg, uint8_t *data);
-
- uint8_t init_mcp23017(void)
- {
- i2c_initialized = false;
-
- if (i2c_initialized == 0)
- {
- i2c_init(); // on pins D(1,0)
- _delay_ms(1000);
- }
-
- return 0;
- }
- void left_init(void)
- {
- init_mcp23017();
- left_scan();
- #if 0
- while (1)
- {
- print("wait\n");
- wait_us(1000000);
- }
- #endif
- }
-
- void left_scan(void)
- {
-
- i2c_status_t ret = i2c_ping_address(I2C_ADDR, HOTDOX_I2C_TIMEOUT);
-
- if (ret == I2C_STATUS_SUCCESS)
- {
- if (!i2c_initialized)
- {
- i2c_initialized = true;
- left_config();
- clear_keyboard();
- print("mcp23017 attached!!!\n");
- }
- }
- else
- {
- if (i2c_initialized)
- {
- i2c_initialized = false;
- clear_keyboard();
- print("mcp23017 deattached!!!\n");
- }
- }
-
- return;
- }
-
- uint8_t left_read_cols(void)
- {
- uint8_t data = 0;
-
- left_read(MCP23017_B0_GPIOA, &data);
-
- return data;
- }
-
- void left_unselect_rows(void)
- {
- left_write(MCP23017_B0_IODIRB, 0x3F);
- }
-
- void left_select_row(uint8_t row)
- {
- left_write(MCP23017_B0_IODIRB, ~(1 << row));
- }
-
- void left_config(void)
- {
- left_write(MCP23017_B0_IODIRA, 0x7F);
- left_write(MCP23017_B0_IPOLA, 0x7F);
- left_write(MCP23017_B0_GPPUA, 0x7F);
-
- left_write(MCP23017_B0_IODIRB, 0xFF);
- left_write(MCP23017_B0_GPIOB, 0xC0);
- }
-
- i2c_status_t left_write(uint8_t reg, uint8_t data)
- {
- if (!i2c_initialized)
- {
- return 0;
- }
-
- i2c_status_t ret;
-
- ret = i2c_write_register(I2C_ADDR, reg, &data, sizeof(data), HOTDOX_I2C_TIMEOUT);
-
- return ret;
- }
-
- i2c_status_t left_read(uint8_t reg, uint8_t *data)
- {
- if (!i2c_initialized)
- {
- return 0;
- }
-
- i2c_status_t ret = 0;
- ret = i2c_read_register(I2C_ADDR, reg, data, 1, HOTDOX_I2C_TIMEOUT);
-
- return ret;
- }
|