diff options
Diffstat (limited to 'keyboards/lets_split/split_util.c')
| -rw-r--r-- | keyboards/lets_split/split_util.c | 76 | 
1 files changed, 76 insertions, 0 deletions
| diff --git a/keyboards/lets_split/split_util.c b/keyboards/lets_split/split_util.c new file mode 100644 index 0000000000..65003a71a4 --- /dev/null +++ b/keyboards/lets_split/split_util.c @@ -0,0 +1,76 @@ +#include <avr/io.h> +#include <avr/wdt.h> +#include <avr/power.h> +#include <avr/interrupt.h> +#include <util/delay.h> +#include <avr/eeprom.h> +#include "split_util.h" +#include "matrix.h" +#include "i2c.h" +#include "serial.h" +#include "keyboard.h" +#include "config.h" + +volatile bool isLeftHand = true; + +static void setup_handedness(void) { +  #ifdef EE_HANDS +    isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); +  #else +    #ifdef I2C_MASTER_RIGHT +      isLeftHand = !has_usb(); +    #else +      isLeftHand = has_usb(); +    #endif +  #endif +} + +static void keyboard_master_setup(void) { +#ifdef USE_I2C +    i2c_master_init(); +#else +    serial_master_init(); +#endif +} + +static void keyboard_slave_setup(void) { +#ifdef USE_I2C +    i2c_slave_init(SLAVE_I2C_ADDRESS); +#else +    serial_slave_init(); +#endif +} + +bool has_usb(void) { +   USBCON |= (1 << OTGPADE); //enables VBUS pad +   _delay_us(5); +   return (USBSTA & (1<<VBUS));  //checks state of VBUS +} + +void split_keyboard_setup(void) { +   setup_handedness(); + +   if (has_usb()) { +      keyboard_master_setup(); +   } else { +      keyboard_slave_setup(); +   } +   sei(); +} + +void keyboard_slave_loop(void) { +   matrix_init(); + +   while (1) { +      matrix_slave_scan(); +   } +} + +// this code runs before the usb and keyboard is initialized +void matrix_setup(void) { +    split_keyboard_setup(); + +    if (!has_usb()) { +        keyboard_slave_loop(); +    } +} | 
