1 #include "split_util.h"
10 # include "tmk_core/common/eeprom.h"
11 # include "eeconfig.h"
14 volatile bool isLeftHand = true;
17 bool is_keyboard_left(void) {
19 // Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand
20 setPinInput(SPLIT_HAND_PIN);
21 return readPin(SPLIT_HAND_PIN);
24 return eeprom_read_byte(EECONFIG_HANDEDNESS);
27 return !is_keyboard_master();
29 return is_keyboard_master();
35 bool is_keyboard_master(void)
38 static enum { UNKNOWN, MASTER, SLAVE } usbstate = UNKNOWN;
40 // only check once, as this is called often
41 if (usbstate == UNKNOWN)
43 USBCON |= (1 << OTGPADE); // enables VBUS pad
46 usbstate = (USBSTA & (1 << VBUS)) ? MASTER : SLAVE; // checks state of VBUS
49 return (usbstate == MASTER);
55 static void keyboard_master_setup(void) {
56 #if defined(USE_I2C) || defined(EH)
58 matrix_master_OLED_init ();
61 transport_master_init();
64 static void keyboard_slave_setup(void)
66 transport_slave_init();
69 // this code runs before the usb and keyboard is initialized
70 void matrix_setup(void)
72 isLeftHand = is_keyboard_left();
74 if (is_keyboard_master())
76 keyboard_master_setup();
80 keyboard_slave_setup();