Fixed logic hole breaking USB operations on a USB controller with only one supported USB mode and no USB_DEVICE_ONLY or USB_HOST_ONLY configuration token set.
This commit is contained in:
parent
e225de8a83
commit
44aea22949
10 changed files with 49 additions and 38 deletions
|
|
@ -35,7 +35,7 @@
|
|||
#define __INCLUDE_FROM_USB_CONTROLLER_C
|
||||
#include "../USBController.h"
|
||||
|
||||
#if (!defined(USB_HOST_ONLY) && !defined(USB_DEVICE_ONLY))
|
||||
#if defined(USB_CAN_BE_BOTH)
|
||||
volatile uint8_t USB_CurrentMode = USB_MODE_None;
|
||||
#endif
|
||||
|
||||
|
|
@ -43,7 +43,7 @@ volatile uint8_t USB_CurrentMode = USB_MODE_None;
|
|||
volatile uint8_t USB_Options;
|
||||
#endif
|
||||
|
||||
/* Ugly workaround to ensure an aligned table, since __BIGGEST_ALIGNMENT__ == 1 for 8-bit AVR-GCC */
|
||||
/* Ugly workaround to ensure an aligned table, since __BIGGEST_ALIGNMENT__ == 1 for the 8-bit AVR-GCC toolchain */
|
||||
uint8_t USB_EndpointTable[sizeof(USB_EndpointTable_t) + 1];
|
||||
|
||||
void USB_Init(
|
||||
|
|
@ -66,8 +66,6 @@ void USB_Init(
|
|||
USB_Options = Options;
|
||||
#endif
|
||||
|
||||
USB_IsInitialized = true;
|
||||
|
||||
uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask();
|
||||
GlobalInterruptDisable();
|
||||
|
||||
|
|
@ -89,6 +87,12 @@ void USB_Init(
|
|||
|
||||
SetGlobalInterruptMask(CurrentGlobalInt);
|
||||
|
||||
#if defined(USB_CAN_BE_BOTH)
|
||||
USB_CurrentMode = Mode;
|
||||
#endif
|
||||
|
||||
USB_IsInitialized = true;
|
||||
|
||||
USB_ResetInterface();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -70,7 +70,6 @@
|
|||
|
||||
/* External Variables: */
|
||||
extern uint8_t USB_EndpointTable[];
|
||||
|
||||
#endif
|
||||
|
||||
/* Includes: */
|
||||
|
|
@ -176,8 +175,10 @@
|
|||
* Calling this function when the USB interface is already initialized will cause a complete USB
|
||||
* interface reset and re-enumeration.
|
||||
*
|
||||
* \param[in] Mode This is a mask indicating what mode the USB interface is to be initialized to, a value
|
||||
* \param[in] Mode Mask indicating what mode the USB interface is to be initialized to, a value
|
||||
* from the \ref USB_Modes_t enum.
|
||||
* \note This parameter does not exist on devices with only one supported USB
|
||||
* mode (device or host).
|
||||
*
|
||||
* \param[in] Options Mask indicating the options which should be used when initializing the USB
|
||||
* interface to control the USB interface's behavior. This should be comprised of
|
||||
|
|
@ -232,7 +233,7 @@
|
|||
void USB_ResetInterface(void);
|
||||
|
||||
/* Global Variables: */
|
||||
#if (!defined(USB_HOST_ONLY) && !defined(USB_DEVICE_ONLY)) || defined(__DOXYGEN__)
|
||||
#if defined(USB_CAN_BE_BOTH) || defined(__DOXYGEN__)
|
||||
/** Indicates the mode that the USB interface is currently initialized to, a value from the
|
||||
* \ref USB_Modes_t enum.
|
||||
*
|
||||
|
|
@ -247,7 +248,9 @@
|
|||
* USB interface is not initialized.
|
||||
*/
|
||||
extern volatile uint8_t USB_CurrentMode;
|
||||
#elif defined(USB_DEVICE_ONLY)
|
||||
#elif defined(USB_CAN_BE_HOST)
|
||||
#define USB_CurrentMode USB_MODE_Host
|
||||
#elif defined(USB_CAN_BE_DEVICE)
|
||||
#define USB_CurrentMode USB_MODE_Device
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue