aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB/LowLevel
diff options
context:
space:
mode:
Diffstat (limited to 'LUFA/Drivers/USB/LowLevel')
-rw-r--r--LUFA/Drivers/USB/LowLevel/DevChapter9.c395
-rw-r--r--LUFA/Drivers/USB/LowLevel/DevChapter9.h164
-rw-r--r--LUFA/Drivers/USB/LowLevel/Device.h7
-rw-r--r--LUFA/Drivers/USB/LowLevel/HostChapter9.c179
-rw-r--r--LUFA/Drivers/USB/LowLevel/HostChapter9.h117
-rw-r--r--LUFA/Drivers/USB/LowLevel/USBController.c (renamed from LUFA/Drivers/USB/LowLevel/LowLevel.c)2
-rw-r--r--LUFA/Drivers/USB/LowLevel/USBController.h (renamed from LUFA/Drivers/USB/LowLevel/LowLevel.h)7
-rw-r--r--LUFA/Drivers/USB/LowLevel/USBInterrupt.h2
8 files changed, 11 insertions, 862 deletions
diff --git a/LUFA/Drivers/USB/LowLevel/DevChapter9.c b/LUFA/Drivers/USB/LowLevel/DevChapter9.c
deleted file mode 100644
index 544531b8d..000000000
--- a/LUFA/Drivers/USB/LowLevel/DevChapter9.c
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2010.
-
- dean [at] fourwalledcubicle [dot] com
- www.fourwalledcubicle.com
-*/
-
-/*
- Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-#define __INCLUDE_FROM_USB_DRIVER
-#include "../HighLevel/USBMode.h"
-
-#if defined(USB_CAN_BE_DEVICE)
-
-#define __INCLUDE_FROM_DEVCHAPTER9_C
-#include "DevChapter9.h"
-
-uint8_t USB_ConfigurationNumber;
-
-#if !defined(NO_DEVICE_SELF_POWER)
-bool USB_CurrentlySelfPowered;
-#endif
-
-#if !defined(NO_DEVICE_REMOTE_WAKEUP)
-bool USB_RemoteWakeupEnabled;
-#endif
-
-void USB_Device_ProcessControlRequest(void)
-{
- bool RequestHandled = false;
- uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest;
-
- for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++)
- *(RequestHeader++) = Endpoint_Read_Byte();
-
- uint8_t bmRequestType = USB_ControlRequest.bmRequestType;
-
- switch (USB_ControlRequest.bRequest)
- {
- case REQ_GetStatus:
- if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||
- (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT)))
- {
- USB_Device_GetStatus();
- RequestHandled = true;
- }
-
- break;
- case REQ_ClearFeature:
- case REQ_SetFeature:
- if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) ||
- (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_ENDPOINT)))
- {
- USB_Device_ClearSetFeature();
- RequestHandled = true;
- }
-
- break;
- case REQ_SetAddress:
- if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
- {
- USB_Device_SetAddress();
- RequestHandled = true;
- }
-
- break;
- case REQ_GetDescriptor:
- if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||
- (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_INTERFACE)))
- {
- USB_Device_GetDescriptor();
- RequestHandled = true;
- }
-
- break;
- case REQ_GetConfiguration:
- if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE))
- {
- USB_Device_GetConfiguration();
- RequestHandled = true;
- }
-
- break;
- case REQ_SetConfiguration:
- if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
- {
- USB_Device_SetConfiguration();
- RequestHandled = true;
- }
-
- break;
- }
-
- if (!(RequestHandled))
- EVENT_USB_Device_UnhandledControlRequest();
-
- if (Endpoint_IsSETUPReceived())
- {
- Endpoint_StallTransaction();
- Endpoint_ClearSETUP();
- }
-}
-
-static void USB_Device_SetAddress(void)
-{
- uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F);
-
- Endpoint_ClearSETUP();
-
- Endpoint_ClearStatusStage();
-
- while (!(Endpoint_IsINReady()))
- {
- if (USB_DeviceState == DEVICE_STATE_Unattached)
- return;
- }
-
- USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default;
-
- UDADDR = ((1 << ADDEN) | DeviceAddress);
-
- return;
-}
-
-static void USB_Device_SetConfiguration(void)
-{
-#if defined(FIXED_NUM_CONFIGURATIONS)
- if ((uint8_t)USB_ControlRequest.wValue > FIXED_NUM_CONFIGURATIONS)
- return;
-#else
- #if defined(USE_FLASH_DESCRIPTORS)
- #define MemoryAddressSpace MEMSPACE_FLASH
- #elif defined(USE_EEPROM_DESCRIPTORS)
- #define MemoryAddressSpace MEMSPACE_EEPROM
- #elif defined(USE_SRAM_DESCRIPTORS)
- #define MemoryAddressSpace MEMSPACE_SRAM
- #else
- uint8_t MemoryAddressSpace;
- #endif
-
- USB_Descriptor_Device_t* DevDescriptorPtr;
-
- if (CALLBACK_USB_GetDescriptor((DTYPE_Device << 8), 0, (void*)&DevDescriptorPtr
- #if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS)
- , &MemoryAddressSpace
- #endif
- ) == NO_DESCRIPTOR)
- {
- return;
- }
-
- if (MemoryAddressSpace == MEMSPACE_FLASH)
- {
- if (((uint8_t)USB_ControlRequest.wValue > pgm_read_byte(&DevDescriptorPtr->NumberOfConfigurations)))
- return;
- }
- else if (MemoryAddressSpace == MEMSPACE_EEPROM)
- {
- if (((uint8_t)USB_ControlRequest.wValue > eeprom_read_byte(&DevDescriptorPtr->NumberOfConfigurations)))
- return;
- }
- else
- {
- if ((uint8_t)USB_ControlRequest.wValue > DevDescriptorPtr->NumberOfConfigurations)
- return;
- }
-#endif
-
- Endpoint_ClearSETUP();
-
- USB_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue;
-
- Endpoint_ClearStatusStage();
-
- USB_DeviceState = (USB_ConfigurationNumber) ? DEVICE_STATE_Configured : DEVICE_STATE_Addressed;
-
- EVENT_USB_Device_ConfigurationChanged();
-}
-
-void USB_Device_GetConfiguration(void)
-{
- Endpoint_ClearSETUP();
-
- Endpoint_Write_Byte(USB_ConfigurationNumber);
- Endpoint_ClearIN();
-
- Endpoint_ClearStatusStage();
-}
-
-#if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR)
-static char USB_Device_NibbleToASCII(uint8_t Nibble)
-{
- Nibble = ((Nibble & 0x0F) + '0');
- return (Nibble > '9') ? (Nibble + ('A' - '9' - 1)) : Nibble;
-}
-
-static void USB_Device_GetInternalSerialDescriptor(void)
-{
- struct
- {
- USB_Descriptor_Header_t Header;
- int16_t UnicodeString[20];
- } SignatureDescriptor;
-
- SignatureDescriptor.Header.Type = DTYPE_String;
- SignatureDescriptor.Header.Size = sizeof(SignatureDescriptor);
-
- uint8_t SigReadAddress = 0x0E;
-
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
- {
- for (uint8_t SerialCharNum = 0; SerialCharNum < 20; SerialCharNum++)
- {
- uint8_t SerialByte = boot_signature_byte_get(SigReadAddress);
-
- if (SerialCharNum & 0x01)
- {
- SerialByte >>= 4;
- SigReadAddress++;
- }
-
- SignatureDescriptor.UnicodeString[SerialCharNum] = USB_Device_NibbleToASCII(SerialByte);
- }
- }
-
- Endpoint_ClearSETUP();
-
- Endpoint_Write_Control_Stream_LE(&SignatureDescriptor, sizeof(SignatureDescriptor));
-
- Endpoint_ClearOUT();
-}
-#endif
-
-static void USB_Device_GetDescriptor(void)
-{
- void* DescriptorPointer;
- uint16_t DescriptorSize;
-
- #if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS)
- uint8_t DescriptorAddressSpace;
- #endif
-
- #if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR)
- if (USB_ControlRequest.wValue == ((DTYPE_String << 8) | USE_INTERNAL_SERIAL))
- {
- USB_Device_GetInternalSerialDescriptor();
- return;
- }
- #endif
-
- if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue, USB_ControlRequest.wIndex,
- &DescriptorPointer
- #if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS)
- , &DescriptorAddressSpace
- #endif
- )) == NO_DESCRIPTOR)
- {
- return;
- }
-
- Endpoint_ClearSETUP();
-
- #if defined(USE_RAM_DESCRIPTORS)
- Endpoint_Write_Control_Stream_LE(DescriptorPointer, DescriptorSize);
- #elif defined(USE_EEPROM_DESCRIPTORS)
- Endpoint_Write_Control_EStream_LE(DescriptorPointer, DescriptorSize);
- #elif defined(USE_FLASH_DESCRIPTORS)
- Endpoint_Write_Control_PStream_LE(DescriptorPointer, DescriptorSize);
- #else
- if (DescriptorAddressSpace == MEMSPACE_FLASH)
- Endpoint_Write_Control_PStream_LE(DescriptorPointer, DescriptorSize);
- else if (DescriptorAddressSpace == MEMSPACE_EEPROM)
- Endpoint_Write_Control_EStream_LE(DescriptorPointer, DescriptorSize);
- else
- Endpoint_Write_Control_Stream_LE(DescriptorPointer, DescriptorSize);
- #endif
-
- Endpoint_ClearOUT();
-}
-
-static void USB_Device_GetStatus(void)
-{
- uint8_t CurrentStatus = 0;
-
- switch (USB_ControlRequest.bmRequestType)
- {
-#if !defined(NO_DEVICE_SELF_POWER) || !defined(NO_DEVICE_REMOTE_WAKEUP)
- case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE):
- #if !defined(NO_DEVICE_SELF_POWER)
- if (USB_CurrentlySelfPowered)
- CurrentStatus |= FEATURE_SELFPOWERED_ENABLED;
- #endif
-
- #if !defined(NO_DEVICE_REMOTE_WAKEUP)
- if (USB_RemoteWakeupEnabled)
- CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED;
- #endif
- break;
-#endif
-#if !defined(CONTROL_ONLY_DEVICE)
- case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT):
- Endpoint_SelectEndpoint((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK);
-
- CurrentStatus = Endpoint_IsStalled();
-
- Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
-
- break;
-#endif
- default:
- return;
- }
-
- Endpoint_ClearSETUP();
-
- Endpoint_Write_Word_LE(CurrentStatus);
- Endpoint_ClearIN();
-
- Endpoint_ClearStatusStage();
-}
-
-static void USB_Device_ClearSetFeature(void)
-{
- switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT)
- {
-#if !defined(NO_DEVICE_REMOTE_WAKEUP)
- case REQREC_DEVICE:
- if ((uint8_t)USB_ControlRequest.wValue == FEATURE_REMOTE_WAKEUP)
- USB_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature);
- else
- return;
-
- break;
-#endif
-#if !defined(CONTROL_ONLY_DEVICE)
- case REQREC_ENDPOINT:
- if ((uint8_t)USB_ControlRequest.wValue == FEATURE_ENDPOINT_HALT)
- {
- uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK);
-
- if (EndpointIndex == ENDPOINT_CONTROLEP)
- return;
-
- Endpoint_SelectEndpoint(EndpointIndex);
-
- if (!(Endpoint_IsEnabled()))
- return;
-
- if (USB_ControlRequest.bRequest == REQ_SetFeature)
- {
- Endpoint_StallTransaction();
- }
- else
- {
- Endpoint_ClearStall();
- Endpoint_ResetFIFO(EndpointIndex);
- Endpoint_ResetDataToggle();
- }
- }
-
- break;
-#endif
- default:
- return;
- }
-
- Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
-
- Endpoint_ClearSETUP();
-
- Endpoint_ClearStatusStage();
-}
-
-#endif
diff --git a/LUFA/Drivers/USB/LowLevel/DevChapter9.h b/LUFA/Drivers/USB/LowLevel/DevChapter9.h
deleted file mode 100644
index ab62c535a..000000000
--- a/LUFA/Drivers/USB/LowLevel/DevChapter9.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2010.
-
- dean [at] fourwalledcubicle [dot] com
- www.fourwalledcubicle.com
-*/
-
-/*
- Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- * \brief USB device standard request management.
- *
- * This file contains the function prototypes necessary for the processing of incoming standard control requests
- * when the library is in USB device mode.
- *
- * \note This file should not be included directly. It is automatically included as needed by the USB driver
- * dispatch header located in LUFA/Drivers/USB/USB.h.
- */
-
-#ifndef __DEVCHAPTER9_H__
-#define __DEVCHAPTER9_H__
-
- /* Includes: */
- #include <avr/io.h>
- #include <avr/pgmspace.h>
- #include <avr/eeprom.h>
- #include <avr/boot.h>
- #include <util/atomic.h>
-
- #include "../HighLevel/StdDescriptors.h"
- #include "../HighLevel/Events.h"
- #include "../HighLevel/StdRequestType.h"
- #include "../HighLevel/USBTask.h"
- #include "LowLevel.h"
-
- /* Enable C linkage for C++ Compilers: */
- #if defined(__cplusplus)
- extern "C" {
- #endif
-
- /* Preprocessor Checks: */
- #if !defined(__INCLUDE_FROM_USB_DRIVER)
- #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
- #endif
-
- /* Public Interface - May be used in end-application: */
- /* Macros: */
- #if defined(USE_SINGLE_DEVICE_CONFIGURATION)
- #define FIXED_NUM_CONFIGURATIONS 1
- #endif
-
- /* Enums: */
- #if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS)
- /** Enum for the possible descriptor memory spaces, for the MemoryAddressSpace of the
- * \ref CALLBACK_USB_GetDescriptor() function. This can be used when none of the USE_*_DESCRIPTORS
- * compile time options are used, to indicate in which memory space the descriptor is stored.
- *
- * \ingroup Group_Device
- */
- enum USB_DescriptorMemorySpaces_t
- {
- MEMSPACE_FLASH = 0, /**< Indicates the requested descriptor is located in FLASH memory. */
- MEMSPACE_EEPROM = 1, /**< Indicates the requested descriptor is located in EEPROM memory. */
- MEMSPACE_RAM = 2, /**< Indicates the requested descriptor is located in RAM memory. */
- };
- #endif
-
- /* Global Variables: */
- /** Indicates the currently set configuration number of the device. USB devices may have several
- * different configurations which the host can select between; this indicates the currently selected
- * value, or 0 if no configuration has been selected.
- *
- * \note This variable should be treated as read-only in the user application, and never manually
- * changed in value.
- *
- * \ingroup Group_Device
- */
- extern uint8_t USB_ConfigurationNumber;
-
- #if !defined(NO_DEVICE_REMOTE_WAKEUP)
- /** Indicates if the host is currently allowing the device to issue remote wakeup events. If this
- * flag is cleared, the device should not issue remote wakeup events to the host.
- *
- * \note This variable should be treated as read-only in the user application, and never manually
- * changed in value.
- * \n\n
- *
- * \note To reduce FLASH usage of the compiled applications where Remote Wakeup is not supported,
- * this global and the underlying management code can be disabled by defining the
- * NO_DEVICE_REMOTE_WAKEUP token in the project makefile and passing it to the compiler via
- * the -D switch.
- *
- * \ingroup Group_Device
- */
- extern bool USB_RemoteWakeupEnabled;
- #endif
-
- #if !defined(NO_DEVICE_SELF_POWER)
- /** Indicates if the device is currently being powered by its own power supply, rather than being
- * powered by the host's USB supply. This flag should remain cleared if the device does not
- * support self powered mode, as indicated in the device descriptors.
- *
- * \ingroup Group_Device
- */
- extern bool USB_CurrentlySelfPowered;
- #endif
-
- /* Private Interface - For use in library only: */
- #if !defined(__DOXYGEN__)
- #if defined(USE_RAM_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS)
- #error USE_RAM_DESCRIPTORS and USE_EEPROM_DESCRIPTORS are mutually exclusive.
- #elif defined(USE_RAM_DESCRIPTORS) && defined(USE_FLASH_DESCRIPTORS)
- #error USE_RAM_DESCRIPTORS and USE_FLASH_DESCRIPTORS are mutually exclusive.
- #elif defined(USE_FLASH_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS)
- #error USE_FLASH_DESCRIPTORS and USE_EEPROM_DESCRIPTORS are mutually exclusive.
- #elif defined(USE_FLASH_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS) && defined(USE_RAM_DESCRIPTORS)
- #error Only one of the USE_*_DESCRIPTORS modes should be selected.
- #endif
-
- /* Function Prototypes: */
- void USB_Device_ProcessControlRequest(void);
-
- #if defined(__INCLUDE_FROM_DEVCHAPTER9_C)
- static void USB_Device_SetAddress(void);
- static void USB_Device_SetConfiguration(void);
- static void USB_Device_GetConfiguration(void);
- static void USB_Device_GetDescriptor(void);
- static void USB_Device_GetStatus(void);
- static void USB_Device_ClearSetFeature(void);
-
- #if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR)
- static char USB_Device_NibbleToASCII(uint8_t Nibble) ATTR_ALWAYS_INLINE;
- static void USB_Device_GetInternalSerialDescriptor(void);
- #endif
- #endif
- #endif
-
- /* Disable C linkage for C++ Compilers: */
- #if defined(__cplusplus)
- }
- #endif
-
-#endif
diff --git a/LUFA/Drivers/USB/LowLevel/Device.h b/LUFA/Drivers/USB/LowLevel/Device.h
index 27bc42828..02dd8cf0d 100644
--- a/LUFA/Drivers/USB/LowLevel/Device.h
+++ b/LUFA/Drivers/USB/LowLevel/Device.h
@@ -191,8 +191,11 @@
/* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__)
/* Macros: */
- #define USB_Device_SetLowSpeed() MACROS{ UDCON |= (1 << LSM); }MACROE
- #define USB_Device_SetFullSpeed() MACROS{ UDCON &= ~(1 << LSM); }MACROE
+ #define USB_Device_SetLowSpeed() MACROS{ UDCON |= (1 << LSM); }MACROE
+ #define USB_Device_SetFullSpeed() MACROS{ UDCON &= ~(1 << LSM); }MACROE
+
+ #define USB_Device_SetDeviceAddress(addr) MACROS{ UDADDR = ((1 << ADDEN) | (addr & 0x7F)); }MACROE
+
#endif
#endif
diff --git a/LUFA/Drivers/USB/LowLevel/HostChapter9.c b/LUFA/Drivers/USB/LowLevel/HostChapter9.c
deleted file mode 100644
index 69575f18b..000000000
--- a/LUFA/Drivers/USB/LowLevel/HostChapter9.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2010.
-
- dean [at] fourwalledcubicle [dot] com
- www.fourwalledcubicle.com
-*/
-
-/*
- Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-#define __INCLUDE_FROM_USB_DRIVER
-#include "../HighLevel/USBMode.h"
-
-#if defined(USB_CAN_BE_HOST)
-
-#define __INCLUDE_FROM_HOSTCHAPTER9_C
-#include "HostChapter9.h"
-
-uint8_t USB_Host_SendControlRequest(void* BufferPtr)
-{
- uint8_t* HeaderStream = (uint8_t*)&USB_ControlRequest;
- uint8_t* DataStream = (uint8_t*)BufferPtr;
- bool BusSuspended = USB_Host_IsBusSuspended();
- uint8_t ReturnStatus = HOST_SENDCONTROL_Successful;
- uint16_t DataLen = USB_ControlRequest.wLength;
-
- USB_Host_ResumeBus();
-
- if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
- goto End_Of_Control_Send;
-
- Pipe_SetPipeToken(PIPE_TOKEN_SETUP);
- Pipe_ClearErrorFlags();
-
- Pipe_Unfreeze();
-
- for (uint8_t HeaderByte = 0; HeaderByte < sizeof(USB_Request_Header_t); HeaderByte++)
- Pipe_Write_Byte(*(HeaderStream++));
-
- Pipe_ClearSETUP();
-
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_SetupSent)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
-
- Pipe_Freeze();
-
- if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
- goto End_Of_Control_Send;
-
- if ((USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_DEVICETOHOST)
- {
- Pipe_SetPipeToken(PIPE_TOKEN_IN);
-
- if (DataStream != NULL)
- {
- while (DataLen)
- {
- Pipe_Unfreeze();
-
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
-
- if (!(Pipe_BytesInPipe()))
- DataLen = 0;
-
- while (Pipe_BytesInPipe() && DataLen)
- {
- *(DataStream++) = Pipe_Read_Byte();
- DataLen--;
- }
-
- Pipe_Freeze();
- Pipe_ClearIN();
- }
- }
-
- Pipe_SetPipeToken(PIPE_TOKEN_OUT);
- Pipe_Unfreeze();
-
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
-
- Pipe_ClearOUT();
-
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
- }
- else
- {
- if (DataStream != NULL)
- {
- Pipe_SetPipeToken(PIPE_TOKEN_OUT);
- Pipe_Unfreeze();
-
- while (DataLen)
- {
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
-
- while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize))
- {
- Pipe_Write_Byte(*(DataStream++));
- DataLen--;
- }
-
- Pipe_ClearOUT();
- }
-
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
-
- Pipe_Freeze();
- }
-
- Pipe_SetPipeToken(PIPE_TOKEN_IN);
- Pipe_Unfreeze();
-
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
-
- Pipe_ClearIN();
- }
-
-End_Of_Control_Send:
- Pipe_Freeze();
-
- if (BusSuspended)
- USB_Host_SuspendBus();
-
- Pipe_ResetPipe(PIPE_CONTROLPIPE);
-
- return ReturnStatus;
-}
-
-static uint8_t USB_Host_WaitForIOS(const uint8_t WaitType)
-{
- #if (USB_HOST_TIMEOUT_MS < 0xFF)
- uint8_t TimeoutCounter = USB_HOST_TIMEOUT_MS;
- #else
- uint16_t TimeoutCounter = USB_HOST_TIMEOUT_MS;
- #endif
-
- while (!(((WaitType == USB_HOST_WAITFOR_SetupSent) && Pipe_IsSETUPSent()) ||
- ((WaitType == USB_HOST_WAITFOR_InReceived) && Pipe_IsINReceived()) ||
- ((WaitType == USB_HOST_WAITFOR_OutReady) && Pipe_IsOUTReady())))
- {
- uint8_t ErrorCode;
-
- if ((ErrorCode = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
- return ErrorCode;
-
- if (!(TimeoutCounter--))
- return HOST_SENDCONTROL_SoftwareTimeOut;
- }
-
- return HOST_SENDCONTROL_Successful;
-}
-
-#endif
diff --git a/LUFA/Drivers/USB/LowLevel/HostChapter9.h b/LUFA/Drivers/USB/LowLevel/HostChapter9.h
deleted file mode 100644
index 0518855ad..000000000
--- a/LUFA/Drivers/USB/LowLevel/HostChapter9.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2010.
-
- dean [at] fourwalledcubicle [dot] com
- www.fourwalledcubicle.com
-*/
-
-/*
- Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- * \brief USB host standard request management.
- *
- * This file contains the function prototypes necessary for the issuing of outgoing standard control requests
- * when the library is in USB host mode.
- *
- * \note This file should not be included directly. It is automatically included as needed by the USB driver
- * dispatch header located in LUFA/Drivers/USB/USB.h.
- */
-
-#ifndef __HOSTCHAPTER9_H__
-#define __HOSTCHAPTER9_H__
-
- /* Includes: */
- #include <avr/io.h>
- #include <stdbool.h>
-
- #include "LowLevel.h"
- #include "../HighLevel/USBMode.h"
- #include "../HighLevel/StdRequestType.h"
-
- /* Enable C linkage for C++ Compilers: */
- #if defined(__cplusplus)
- extern "C" {
- #endif
-
- /* Preprocessor Checks: */
- #if !defined(__INCLUDE_FROM_USB_DRIVER)
- #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
- #endif
-
- /* Public Interface - May be used in end-application: */
- /* Enums: */
- /** Enum for the \ref USB_Host_SendControlRequest() return code, indicating the reason for the error
- * if the transfer of the request is unsuccessful.
- *
- * \ingroup Group_PipeControlReq
- */
- enum USB_Host_SendControlErrorCodes_t
- {
- HOST_SENDCONTROL_Successful = 0, /**< No error occurred in the request transfer. */
- HOST_SENDCONTROL_DeviceDisconnected = 1, /**< The attached device was disconnected during the
- * request transfer.
- */
- HOST_SENDCONTROL_PipeError = 2, /**< An error occurred in the pipe while sending the request. */
- HOST_SENDCONTROL_SetupStalled = 3, /**< The attached device stalled the request, usually
- * indicating that the request is unsupported on the device.
- */
- HOST_SENDCONTROL_SoftwareTimeOut = 4, /**< The request or data transfer timed out. */
- };
-
- /* Function Prototypes: */
- /** Sends the request stored in the \ref USB_ControlRequest global structure to the attached device,
- * and transfers the data stored in the buffer to the device, or from the device to the buffer
- * as requested. The transfer is made on the currently selected pipe.
- *
- * \ingroup Group_PipeControlReq
- *
- * \param[in] BufferPtr Pointer to the start of the data buffer if the request has a data stage, or
- * NULL if the request transfers no data to or from the device.
- *
- * \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
- */
- uint8_t USB_Host_SendControlRequest(void* BufferPtr);
-
- /* Private Interface - For use in library only: */
- #if !defined(__DOXYGEN__)
- /* Enums: */
- enum USB_WaitForTypes_t
- {
- USB_HOST_WAITFOR_SetupSent,
- USB_HOST_WAITFOR_InReceived,
- USB_HOST_WAITFOR_OutReady,
- };
-
- /* Function Prototypes: */
- #if defined(__INCLUDE_FROM_HOSTCHAPTER9_C)
- static uint8_t USB_Host_WaitForIOS(const uint8_t WaitType);
- #endif
- #endif
-
- /* Disable C linkage for C++ Compilers: */
- #if defined(__cplusplus)
- }
- #endif
-
-#endif
diff --git a/LUFA/Drivers/USB/LowLevel/LowLevel.c b/LUFA/Drivers/USB/LowLevel/USBController.c
index 4c742102b..907e2bab0 100644
--- a/LUFA/Drivers/USB/LowLevel/LowLevel.c
+++ b/LUFA/Drivers/USB/LowLevel/USBController.c
@@ -29,7 +29,7 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
-#include "LowLevel.h"
+#include "USBController.h"
#if (!defined(USB_HOST_ONLY) && !defined(USB_DEVICE_ONLY))
volatile uint8_t USB_CurrentMode = USB_MODE_NONE;
diff --git a/LUFA/Drivers/USB/LowLevel/LowLevel.h b/LUFA/Drivers/USB/LowLevel/USBController.h
index 4f27216b1..ef670a456 100644
--- a/LUFA/Drivers/USB/LowLevel/LowLevel.h
+++ b/LUFA/Drivers/USB/LowLevel/USBController.h
@@ -46,8 +46,8 @@
* @{
*/
-#ifndef __USBLOWLEVEL_H__
-#define __USBLOWLEVEL_H__
+#ifndef __USBCONTROLLER_H__
+#define __USBCONTROLLER_H__
/* Includes: */
#include <avr/io.h>
@@ -66,12 +66,13 @@
#include "Host.h"
#include "Pipe.h"
#include "OTG.h"
+ #include "../HighLevel/HostStandardReq.h"
#endif
#if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)
#include "Device.h"
#include "Endpoint.h"
- #include "DevChapter9.h"
+ #include "../HighLevel/DeviceStandardReq.h"
#endif
/* Enable C linkage for C++ Compilers: */
diff --git a/LUFA/Drivers/USB/LowLevel/USBInterrupt.h b/LUFA/Drivers/USB/LowLevel/USBInterrupt.h
index 6f8bf7cea..f954468be 100644
--- a/LUFA/Drivers/USB/LowLevel/USBInterrupt.h
+++ b/LUFA/Drivers/USB/LowLevel/USBInterrupt.h
@@ -50,7 +50,7 @@
#include "../../../Common/Common.h"
#include "../HighLevel/USBMode.h"
#include "../HighLevel/Events.h"
- #include "LowLevel.h"
+ #include "USBController.h"
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)