diff options
author | layne001365 <layne.guan@gmail.com> | 2019-03-12 03:41:16 +0800 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2019-03-11 12:41:16 -0700 |
commit | 2a2f41c6de868c06c06cf437cf7c2b875b8c53a4 (patch) | |
tree | b8f688d6af621a681bf6c262d029f63a704e86e1 /keyboards/hotdox/left.c | |
parent | bf1e51ec22a8016aa02d84993241c6a85c562a0e (diff) | |
download | qmk_firmware-2a2f41c6de868c06c06cf437cf7c2b875b8c53a4.tar.gz qmk_firmware-2a2f41c6de868c06c06cf437cf7c2b875b8c53a4.zip |
[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>
Diffstat (limited to 'keyboards/hotdox/left.c')
-rw-r--r-- | keyboards/hotdox/left.c | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/keyboards/hotdox/left.c b/keyboards/hotdox/left.c new file mode 100644 index 000000000..ae56b1816 --- /dev/null +++ b/keyboards/hotdox/left.c | |||
@@ -0,0 +1,130 @@ | |||
1 | #include "action.h" | ||
2 | #include "left.h" | ||
3 | #include "wait.h" | ||
4 | |||
5 | bool i2c_initialized = false; | ||
6 | |||
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); | ||
10 | |||
11 | uint8_t init_mcp23017(void) | ||
12 | { | ||
13 | i2c_initialized = false; | ||
14 | |||
15 | if (i2c_initialized == 0) | ||
16 | { | ||
17 | i2c_init(); // on pins D(1,0) | ||
18 | _delay_ms(1000); | ||
19 | } | ||
20 | |||
21 | return 0; | ||
22 | } | ||
23 | void left_init(void) | ||
24 | { | ||
25 | init_mcp23017(); | ||
26 | left_scan(); | ||
27 | #if 0 | ||
28 | while (1) | ||
29 | { | ||
30 | print("wait\n"); | ||
31 | wait_us(1000000); | ||
32 | } | ||
33 | #endif | ||
34 | } | ||
35 | |||
36 | void left_scan(void) | ||
37 | { | ||
38 | uint8_t ret = i2c_start(I2C_ADDR_WRITE, HOTDOX_I2C_TIMEOUT); | ||
39 | |||
40 | if (ret == 0) | ||
41 | { | ||
42 | i2c_stop(HOTDOX_I2C_TIMEOUT); | ||
43 | |||
44 | if (!i2c_initialized) | ||
45 | { | ||
46 | i2c_initialized = true; | ||
47 | left_config(); | ||
48 | clear_keyboard(); | ||
49 | print("mcp23017 attached!!!\n"); | ||
50 | } | ||
51 | } | ||
52 | else | ||
53 | { | ||
54 | if (i2c_initialized) | ||
55 | { | ||
56 | i2c_initialized = false; | ||
57 | clear_keyboard(); | ||
58 | print("mcp23017 deattached!!!\n"); | ||
59 | } | ||
60 | } | ||
61 | |||
62 | return; | ||
63 | } | ||
64 | |||
65 | uint8_t left_read_cols(void) | ||
66 | { | ||
67 | uint8_t data = 0; | ||
68 | |||
69 | left_read(MCP23017_B0_GPIOA, &data); | ||
70 | |||
71 | return data; | ||
72 | } | ||
73 | |||
74 | void left_unselect_rows(void) | ||
75 | { | ||
76 | left_write(MCP23017_B0_IODIRB, 0x3F); | ||
77 | } | ||
78 | |||
79 | void left_select_row(uint8_t row) | ||
80 | { | ||
81 | left_write(MCP23017_B0_IODIRB, ~(1 << row)); | ||
82 | } | ||
83 | |||
84 | void left_config(void) | ||
85 | { | ||
86 | left_write(MCP23017_B0_IODIRA, 0x7F); | ||
87 | left_write(MCP23017_B0_IPOLA, 0x7F); | ||
88 | left_write(MCP23017_B0_GPPUA, 0x7F); | ||
89 | |||
90 | left_write(MCP23017_B0_IODIRB, 0xFF); | ||
91 | left_write(MCP23017_B0_GPIOB, 0xC0); | ||
92 | } | ||
93 | |||
94 | uint8_t left_write(uint8_t reg, uint8_t data) | ||
95 | { | ||
96 | if (!i2c_initialized) | ||
97 | { | ||
98 | return 0; | ||
99 | } | ||
100 | |||
101 | uint8_t ret; | ||
102 | |||
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); | ||
106 | |||
107 | out: | ||
108 | i2c_stop(HOTDOX_I2C_TIMEOUT); | ||
109 | return ret; | ||
110 | } | ||
111 | |||
112 | uint8_t left_read(uint8_t reg, uint8_t *data) | ||
113 | { | ||
114 | if (!i2c_initialized) | ||
115 | { | ||
116 | return 0; | ||
117 | } | ||
118 | |||
119 | uint8_t ret = 0; | ||
120 | |||
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; | ||
124 | |||
125 | *data = i2c_read_nack(HOTDOX_I2C_TIMEOUT); | ||
126 | |||
127 | out: | ||
128 | i2c_stop(HOTDOX_I2C_TIMEOUT); | ||
129 | return ret; | ||
130 | } | ||