diff options
author | ai03 <sarcaphx510@gmail.com> | 2019-03-10 19:57:36 -0700 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2019-03-10 19:57:36 -0700 |
commit | 9bea41c9b239916ae8786e7df02c29fad79ef459 (patch) | |
tree | b9b4b3cdacd87156ebc29e70a79e846cb32e8679 /keyboards/ai03/orbit/split_util.c | |
parent | ad12acd3c049e1eef02ac21bb749eda375e09cec (diff) | |
download | qmk_firmware-9bea41c9b239916ae8786e7df02c29fad79ef459.tar.gz qmk_firmware-9bea41c9b239916ae8786e7df02c29fad79ef459.zip |
[Keyboard] Add Orbit keyboard (#5306)
* Get things working except indicators
* Attempt to get things working
* hmm
* Compiles but doesn't run
* Make data transfer work
* Get all indicators working
* Remove old transport
* Prepare for pullreq
* Revert keymap from testing to production
* Final error checking for pull request
* Remove autogenerated is_command from config.h
* Rewrite pin toggles using qmk functions
Diffstat (limited to 'keyboards/ai03/orbit/split_util.c')
-rw-r--r-- | keyboards/ai03/orbit/split_util.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/keyboards/ai03/orbit/split_util.c b/keyboards/ai03/orbit/split_util.c new file mode 100644 index 0000000000..5095cb8fdc --- /dev/null +++ b/keyboards/ai03/orbit/split_util.c @@ -0,0 +1,87 @@ +#include "split_util.h" +#include "matrix.h" +#include "keyboard.h" +#include "config.h" +#include "timer.h" +#include "split_flags.h" +#include "transport.h" +#include "quantum.h" + +#ifdef EE_HANDS +# include "tmk_core/common/eeprom.h" +# include "eeconfig.h" +#endif + +volatile bool isLeftHand = true; + +__attribute__((weak)) +bool is_keyboard_left(void) { + #ifdef SPLIT_HAND_PIN + // Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand + setPinInput(SPLIT_HAND_PIN); + return readPin(SPLIT_HAND_PIN); + #else + #ifdef EE_HANDS + return eeprom_read_byte(EECONFIG_HANDEDNESS); + #else + #ifdef MASTER_RIGHT + return !is_keyboard_master(); + #else + return is_keyboard_master(); + #endif + #endif + #endif +} + +bool is_keyboard_master(void) +{ +#ifdef __AVR__ + static enum { UNKNOWN, MASTER, SLAVE } usbstate = UNKNOWN; + + // only check once, as this is called often + if (usbstate == UNKNOWN) + { + USBCON |= (1 << OTGPADE); // enables VBUS pad + wait_us(5); + + usbstate = (USBSTA & (1 << VBUS)) ? MASTER : SLAVE; // checks state of VBUS + } + + return (usbstate == MASTER); +#else + return true; +#endif +} + +static void keyboard_master_setup(void) { +#if defined(USE_I2C) || defined(EH) + #ifdef SSD1306OLED + matrix_master_OLED_init (); + #endif +#endif + transport_master_init(); + + // For master the Backlight info needs to be sent on startup + // Otherwise the salve won't start with the proper info until an update + BACKLIT_DIRTY = true; +} + +static void keyboard_slave_setup(void) +{ + transport_slave_init(); +} + +// this code runs before the usb and keyboard is initialized +void matrix_setup(void) +{ + isLeftHand = is_keyboard_left(); + + if (is_keyboard_master()) + { + keyboard_master_setup(); + } + else + { + keyboard_slave_setup(); + } +} |