aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.txt2
-rw-r--r--Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c2
-rw-r--r--Demos/DualRole/ClassDriver/MouseHostDevice/MouseHostDevice.c9
-rw-r--r--LUFA/Drivers/USB/HighLevel/StdDescriptors.h4
-rw-r--r--LUFA/Drivers/USB/LowLevel/Device.h3
-rw-r--r--LUFA/Drivers/USB/LowLevel/Host.c19
-rw-r--r--LUFA/Drivers/USB/LowLevel/USBInterrupt.c12
-rw-r--r--LUFA/ManPages/FutureChanges.txt2
8 files changed, 38 insertions, 15 deletions
diff --git a/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.txt b/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.txt
index 03a97cee9..3959f89c4 100644
--- a/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.txt
+++ b/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.txt
@@ -50,7 +50,7 @@
*
* Dual Communications Device Class demonstration application.
* This gives a simple reference application for implementing
- * a compound device with dual CDC functions acting as a pair
+ * a composite device with dual CDC functions acting as a pair
* of virtual serial ports. This demo uses Interface Association
* Descriptors to link together the pair of related CDC
* descriptors for each virtual serial port, which may not be
diff --git a/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c b/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c
index e2a2128e9..8d1cae9ad 100644
--- a/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c
+++ b/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c
@@ -62,12 +62,14 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Device_Interface =
/** Event handler for the library USB WakeUp event. */
void EVENT_USB_Device_Connect(void)
{
+ puts_P(PSTR("Device Connected.\r\n"));
LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
}
/** Event handler for the library USB Suspend event. */
void EVENT_USB_Device_Disconnect(void)
{
+ puts_P(PSTR("Device Disconnected.\r\n"));
LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
}
diff --git a/Demos/DualRole/ClassDriver/MouseHostDevice/MouseHostDevice.c b/Demos/DualRole/ClassDriver/MouseHostDevice/MouseHostDevice.c
index cd6bf59ee..1b905b114 100644
--- a/Demos/DualRole/ClassDriver/MouseHostDevice/MouseHostDevice.c
+++ b/Demos/DualRole/ClassDriver/MouseHostDevice/MouseHostDevice.c
@@ -82,3 +82,12 @@ void SetupHardware(void)
Buttons_Init();
USB_Init(USB_MODE_UID);
}
+
+/** Event handler for the library USB mode change event. */
+void EVENT_USB_UIDChange(void)
+{
+ printf_P(PSTR(ESC_FG_YELLOW "UID Change to %S mode\r\n" ESC_FG_WHITE),
+ (USB_CurrentMode == USB_MODE_DEVICE) ? PSTR("Device") : PSTR("Host"));
+
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
+}
diff --git a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
index 89c2c97cb..433947997 100644
--- a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
+++ b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
@@ -459,7 +459,7 @@
* to make each element's purpose clearer.
*
* This descriptor has been added as a supplement to the USB2.0 standard, in the ECN located at
- * <a>http://www.usb.org/developers/docs/InterfaceAssociationDescriptor_ecn.pdf</a>. It allows compound
+ * <a>http://www.usb.org/developers/docs/InterfaceAssociationDescriptor_ecn.pdf</a>. It allows composite
* devices with multiple interfaces related to the same function to have the multiple interfaces bound
* together at the point of enumeration, loading one generic driver for all the interfaces in the single
* function. Read the ECN for more information.
@@ -488,7 +488,7 @@
* element names to ensure compatibility with the standard.
*
* This descriptor has been added as a supplement to the USB2.0 standard, in the ECN located at
- * <a>http://www.usb.org/developers/docs/InterfaceAssociationDescriptor_ecn.pdf</a>. It allows compound
+ * <a>http://www.usb.org/developers/docs/InterfaceAssociationDescriptor_ecn.pdf</a>. It allows composite
* devices with multiple interfaces related to the same function to have the multiple interfaces bound
* together at the point of enumeration, loading one generic driver for all the interfaces in the single
* function. Read the ECN for more information.
diff --git a/LUFA/Drivers/USB/LowLevel/Device.h b/LUFA/Drivers/USB/LowLevel/Device.h
index 300793612..a37e6d939 100644
--- a/LUFA/Drivers/USB/LowLevel/Device.h
+++ b/LUFA/Drivers/USB/LowLevel/Device.h
@@ -221,7 +221,8 @@
static inline void USB_Device_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE;
static inline void USB_Device_SetDeviceAddress(const uint8_t Address)
{
- UDADDR = ((1 << ADDEN) | (Address & 0x7F));
+ UDADDR = ((UDADDR & (1 << ADDEN)) | (Address & 0x7F));
+ UDADDR |= (1 << ADDEN);
}
#endif
diff --git a/LUFA/Drivers/USB/LowLevel/Host.c b/LUFA/Drivers/USB/LowLevel/Host.c
index 2b66e28b4..6c66083a8 100644
--- a/LUFA/Drivers/USB/LowLevel/Host.c
+++ b/LUFA/Drivers/USB/LowLevel/Host.c
@@ -194,19 +194,21 @@ void USB_Host_ProcessNextHostState(void)
uint8_t USB_Host_WaitMS(uint8_t MS)
{
- bool BusSuspended = USB_Host_IsBusSuspended();
- uint8_t ErrorCode = HOST_WAITERROR_Successful;
- uint16_t PreviousFrameNumber = USB_Host_GetFrameNumber();
+ bool BusSuspended = USB_Host_IsBusSuspended();
+ uint8_t ErrorCode = HOST_WAITERROR_Successful;
USB_Host_ResumeBus();
+ bool HSOFIEnabled = USB_INT_IsEnabled(USB_INT_HSOFI);
+
+ USB_INT_Disable(USB_INT_HSOFI);
+ USB_INT_Clear(USB_INT_HSOFI);
+
while (MS)
{
- uint16_t CurrentFrameNumber = USB_Host_GetFrameNumber();
-
- if (CurrentFrameNumber != PreviousFrameNumber)
+ if (USB_INT_HasOccurred(USB_INT_HSOFI))
{
- PreviousFrameNumber = CurrentFrameNumber;
+ USB_INT_Clear(USB_INT_HSOFI);
MS--;
}
@@ -234,6 +236,9 @@ uint8_t USB_Host_WaitMS(uint8_t MS)
}
}
+ if (HSOFIEnabled)
+ USB_INT_Enable(USB_INT_HSOFI);
+
if (BusSuspended)
USB_Host_SuspendBus();
diff --git a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
index a49b8da7b..52951fc39 100644
--- a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
+++ b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
@@ -34,14 +34,17 @@
void USB_INT_DisableAllInterrupts(void)
{
#if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
- USBCON &= ~((1 << VBUSTE) | (1 << IDTE));
+ USBCON &= ~((1 << OTGPADE) | (1 << VBUSTE) | (1 << IDTE));
#elif defined(USB_SERIES_4_AVR)
USBCON &= ~(1 << VBUSTE);
#endif
+ #if defined(USB_CAN_BE_BOTH)
+ OTGIEN = 0;
+ #endif
+
#if defined(USB_CAN_BE_HOST)
UHIEN = 0;
- OTGIEN = 0;
#endif
#if defined(USB_CAN_BE_DEVICE)
@@ -55,9 +58,12 @@ void USB_INT_ClearAllInterrupts(void)
USBINT = 0;
#endif
+ #if defined(USB_CAN_BE_BOTH)
+ OTGINT = 0;
+ #endif
+
#if defined(USB_CAN_BE_HOST)
UHINT = 0;
- OTGINT = 0;
#endif
#if defined(USB_CAN_BE_DEVICE)
diff --git a/LUFA/ManPages/FutureChanges.txt b/LUFA/ManPages/FutureChanges.txt
index 555971f8e..6e77effbf 100644
--- a/LUFA/ManPages/FutureChanges.txt
+++ b/LUFA/ManPages/FutureChanges.txt
@@ -14,7 +14,7 @@
* <b>Targeted for Future Releases:</b>
* - Code Features
* -# Add hub support when in Host mode for multiple devices
- * -# Investigate virtual hubs when in device mode instead of compound devices
+ * -# Investigate virtual hubs when in device mode instead of composite devices
* -# Add ability to get number of bytes not written with pipe/endpoint write routines after an error
* -# Change makefiles to allow for absolute LUFA location to be used
* -# Re-add interrupt Pipe/Endpoint support