qmk_firmware/keyboards/hotdox/left.c
layne001365 2a2f41c6de [Keyboard] Add HotDox keyboard (#5365)
* Add HotDox

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/keymaps/default/keymap.c

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* * Update

  - keyboards/hotdox/config.h
  - keyboards/hotdox/hotdox.h
  - keyboards/hotdox/info.json
  - keyboards/hotdox/left.h
  - keyboards/hotdox/left.c
  - keyboards/hotdox/rules.mk

* Replace EPRM with EPRM

  - keyboards/hotdox/keymaps/default/keymap.c
  - keyboards/hotdox/keymaps/eozaki/keymap.c
  - keyboards/hotdox/keymaps/kloki/keymap.c

* Remove keymaps readme.md
* Remove twimaster.h/ twimaster.c

* * Update
  - remove FORCE_NKRO from keyboards/hotdox/config.h
  - keyboards/hotdox/hotdox.c
  - keyboards/hotdox/hotdox.h
  - keyboards/hotdox/keymaps/default/keymap.c
  - keyboards/hotdox/left.c
  - keyboards/hotdox/readme.md
  - keyboards/hotdox/rules.mk

* Update keyboards/hotdox/keymaps/default/keymap.c

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/keymaps/default/keymap.c

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/hotdox.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>
2019-03-11 12:41:16 -07:00

131 lines
2.4 KiB
C

#include "action.h"
#include "left.h"
#include "wait.h"
bool i2c_initialized = false;
void left_config(void);
uint8_t left_write(uint8_t reg, uint8_t data);
uint8_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)
{
uint8_t ret = i2c_start(I2C_ADDR_WRITE, HOTDOX_I2C_TIMEOUT);
if (ret == 0)
{
i2c_stop(HOTDOX_I2C_TIMEOUT);
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);
}
uint8_t left_write(uint8_t reg, uint8_t data)
{
if (!i2c_initialized)
{
return 0;
}
uint8_t ret;
ret = i2c_start(I2C_ADDR_WRITE, HOTDOX_I2C_TIMEOUT); if (ret) goto out;
ret = i2c_write(reg, HOTDOX_I2C_TIMEOUT); if (ret) goto out;
ret = i2c_write(data, HOTDOX_I2C_TIMEOUT);
out:
i2c_stop(HOTDOX_I2C_TIMEOUT);
return ret;
}
uint8_t left_read(uint8_t reg, uint8_t *data)
{
if (!i2c_initialized)
{
return 0;
}
uint8_t ret = 0;
ret = i2c_start(I2C_ADDR_WRITE, HOTDOX_I2C_TIMEOUT); if (ret) goto out;
ret = i2c_write(reg, HOTDOX_I2C_TIMEOUT); if (ret) goto out;
ret = i2c_start(I2C_ADDR_READ, HOTDOX_I2C_TIMEOUT); if (ret) goto out;
*data = i2c_read_nack(HOTDOX_I2C_TIMEOUT);
out:
i2c_stop(HOTDOX_I2C_TIMEOUT);
return ret;
}