diff options
Diffstat (limited to 'quantum/split_common/split_util.c')
| -rw-r--r-- | quantum/split_common/split_util.c | 70 | 
1 files changed, 24 insertions, 46 deletions
| diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c index 2ae44e6e15..9e75e19ce0 100644 --- a/quantum/split_common/split_util.c +++ b/quantum/split_common/split_util.c @@ -1,3 +1,18 @@ +/* Copyright 2021 QMK + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include "split_util.h"  #include "matrix.h"  #include "keyboard.h" @@ -6,14 +21,7 @@  #include "transport.h"  #include "quantum.h"  #include "wait.h" - -#ifdef PROTOCOL_LUFA -#    include <LUFA/Drivers/USB/USB.h> -#endif - -#ifdef PROTOCOL_VUSB -#    include <usbdrv/usbdrv.h> -#endif +#include "usb_util.h"  #ifdef EE_HANDS  #    include "eeconfig.h" @@ -31,56 +39,21 @@  #    define SPLIT_USB_TIMEOUT_POLL 10  #endif -#ifdef PROTOCOL_CHIBIOS -#    define SPLIT_USB_DETECT  // Force this on for now -#endif -  volatile bool isLeftHand = true;  #if defined(SPLIT_USB_DETECT) -#    if defined(PROTOCOL_LUFA) -static inline bool usbHasActiveConnection(void) { return USB_Device_IsAddressSet(); } -static inline void usbDisable(void) { -    USB_Disable(); -    USB_DeviceState = DEVICE_STATE_Unattached; -} -#    elif defined(PROTOCOL_CHIBIOS) -static inline bool usbHasActiveConnection(void) { return usbGetDriverStateI(&USBD1) == USB_ACTIVE; } -static inline void usbDisable(void) { usbStop(&USBD1); } -#    elif defined(PROTOCOL_VUSB) -static inline bool usbHasActiveConnection(void) { -    usbPoll(); -    return usbConfiguration; -} -static inline void usbDisable(void) { usbDeviceDisconnect(); } -#    else -static inline bool usbHasActiveConnection(void) { return true; } -static inline void usbDisable(void) {} -#    endif - -bool usbIsActive(void) { +static bool usbIsActive(void) {      for (uint8_t i = 0; i < (SPLIT_USB_TIMEOUT / SPLIT_USB_TIMEOUT_POLL); i++) {          // This will return true if a USB connection has been established -        if (usbHasActiveConnection()) { +        if (usb_connected_state()) {              return true;          }          wait_ms(SPLIT_USB_TIMEOUT_POLL);      } - -    // Avoid NO_USB_STARTUP_CHECK - Disable USB as the previous checks seem to enable it somehow -    usbDisable(); -      return false;  } -#elif defined(PROTOCOL_LUFA) && defined(OTGPADE) -static inline bool usbIsActive(void) { -    USB_OTGPAD_On();  // enables VBUS pad -    wait_us(5); - -    return USB_VBUS_GetStatus();  // checks state of VBUS -}  #else -static inline bool usbIsActive(void) { return true; } +static inline bool usbIsActive(void) { return usb_vbus_state(); }  #endif  #ifdef SPLIT_HAND_MATRIX_GRID @@ -126,6 +99,11 @@ __attribute__((weak)) bool is_keyboard_master(void) {      // only check once, as this is called often      if (usbstate == UNKNOWN) {          usbstate = usbIsActive() ? MASTER : SLAVE; + +        // Avoid NO_USB_STARTUP_CHECK - Disable USB as the previous checks seem to enable it somehow +        if (usbstate == SLAVE) { +            usb_disable(); +        }      }      return (usbstate == MASTER); | 
