]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/deltasplit75/split_util.c
a636f60dbfddd2675cd5a28e7aba5bc0a1c3cf2c
[qmk_firmware.git] / keyboards / deltasplit75 / split_util.c
1 #include <avr/io.h>\r
2 #include <avr/wdt.h>\r
3 #include <avr/power.h>\r
4 #include <avr/interrupt.h>\r
5 #include <util/delay.h>\r
6 #include <avr/eeprom.h>\r
7 #include "split_util.h"\r
8 #include "matrix.h"\r
9 #include "keyboard.h"\r
10 #include "config.h"\r
11 \r
12 #ifdef USE_I2C\r
13 #  include "i2c.h"\r
14 #else\r
15 #  include "serial.h"\r
16 #endif\r
17 \r
18 volatile bool isLeftHand = true;\r
19 \r
20 static void setup_handedness(void) {\r
21   #ifdef EE_HANDS\r
22     isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);\r
23   #else\r
24     // I2C_MASTER_RIGHT is deprecated use MASTER_RIGHT instead since this works for both serial and i2c\r
25     #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT)\r
26       isLeftHand = !has_usb();\r
27     #else\r
28       isLeftHand = has_usb();\r
29     #endif\r
30   #endif\r
31 }\r
32 \r
33 static void keyboard_master_setup(void) {\r
34 #ifdef USE_I2C\r
35     i2c_master_init();\r
36 #else\r
37     serial_master_init();\r
38 #endif\r
39 }\r
40 \r
41 static void keyboard_slave_setup(void) {\r
42 #ifdef USE_I2C\r
43     i2c_slave_init(SLAVE_I2C_ADDRESS);\r
44 #else\r
45     serial_slave_init();\r
46 #endif\r
47 }\r
48 \r
49 bool has_usb(void) {\r
50    USBCON |= (1 << OTGPADE); //enables VBUS pad\r
51    _delay_us(5);\r
52    return (USBSTA & (1<<VBUS));  //checks state of VBUS\r
53 }\r
54 \r
55 void split_keyboard_setup(void) {\r
56    setup_handedness();\r
57 \r
58    if (has_usb()) {\r
59       keyboard_master_setup();\r
60    } else {\r
61       keyboard_slave_setup();\r
62    }\r
63    sei();\r
64 }\r
65 \r
66 void keyboard_slave_loop(void) {\r
67    matrix_init();\r
68 \r
69    while (1) {\r
70       matrix_slave_scan();\r
71    }\r
72 }\r
73 \r
74 // this code runs before the usb and keyboard is initialized\r
75 void matrix_setup(void) {\r
76     split_keyboard_setup();\r
77 \r
78     if (!has_usb()) {\r
79         keyboard_slave_loop();\r
80     }\r
81 }\r