Partial commit: Rename USBFOO LED driver to fix capitalisation of file name, which...
[pub/USBasp.git] / LUFA / Drivers / USB / Core / DeviceStandardReq.c
index f0c336e..f9c64b6 100644 (file)
@@ -48,10 +48,11 @@ bool    USB_RemoteWakeupEnabled;
 
 void USB_Device_ProcessControlRequest(void)
 {
-       uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest;
-
-       for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++)
-         *(RequestHeader++) = Endpoint_Read_Byte();
+       USB_ControlRequest.bmRequestType = Endpoint_Read_8();
+       USB_ControlRequest.bRequest      = Endpoint_Read_8();
+       USB_ControlRequest.wValue        = Endpoint_Read_16_LE();
+       USB_ControlRequest.wIndex        = Endpoint_Read_16_LE();
+       USB_ControlRequest.wLength       = Endpoint_Read_16_LE();
 
        EVENT_USB_Device_ControlRequest();
 
@@ -113,20 +114,20 @@ void USB_Device_ProcessControlRequest(void)
 
 static void USB_Device_SetAddress(void)
 {
-       uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F);
-
-       ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-       {
-               Endpoint_ClearSETUP();
+       uint8_t    DeviceAddress    = (USB_ControlRequest.wValue & 0x7F);
+       uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask();
+       GlobalInterruptDisable();
+                               
+       Endpoint_ClearSETUP();
 
-               Endpoint_ClearStatusStage();
+       Endpoint_ClearStatusStage();
 
-               while (!(Endpoint_IsINReady()));
+       while (!(Endpoint_IsINReady()));
 
-               USB_Device_SetDeviceAddress(DeviceAddress);
-       }
-       
+       USB_Device_SetDeviceAddress(DeviceAddress);
        USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default;
+       
+       SetGlobalInterruptMask(CurrentGlobalInt);
 }
 
 static void USB_Device_SetConfiguration(void)
@@ -137,18 +138,21 @@ static void USB_Device_SetConfiguration(void)
        #else
        USB_Descriptor_Device_t* DevDescriptorPtr;
 
-       #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;
+       #if defined(ARCH_HAS_MULTI_ADDRESS_SPACE)
+               #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
        #endif
-
+       
        if (CALLBACK_USB_GetDescriptor((DTYPE_Device << 8), 0, (void*)&DevDescriptorPtr
-       #if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS)
+       #if defined(ARCH_HAS_MULTI_ADDRESS_SPACE) && \
+           !(defined(USE_FLASH_DESCRIPTORS) || defined(USE_EEPROM_DESCRIPTORS) || defined(USE_RAM_DESCRIPTORS))
                                       , &MemoryAddressSpace
        #endif
                                       ) == NO_DESCRIPTOR)
@@ -156,6 +160,7 @@ static void USB_Device_SetConfiguration(void)
                return;
        }
 
+       #if defined(ARCH_HAS_MULTI_ADDRESS_SPACE)
        if (MemoryAddressSpace == MEMSPACE_FLASH)
        {
                if (((uint8_t)USB_ControlRequest.wValue > pgm_read_byte(&DevDescriptorPtr->NumberOfConfigurations)))
@@ -171,6 +176,10 @@ static void USB_Device_SetConfiguration(void)
                if ((uint8_t)USB_ControlRequest.wValue > DevDescriptorPtr->NumberOfConfigurations)
                  return;
        }
+       #else
+       if ((uint8_t)USB_ControlRequest.wValue > DevDescriptorPtr->NumberOfConfigurations)
+         return;       
+       #endif
        #endif
 
        Endpoint_ClearSETUP();
@@ -191,7 +200,7 @@ static void USB_Device_GetConfiguration(void)
 {
        Endpoint_ClearSETUP();
 
-       Endpoint_Write_Byte(USB_ConfigurationNumber);
+       Endpoint_Write_8(USB_ConfigurationNumber);
        Endpoint_ClearIN();
 
        Endpoint_ClearStatusStage();
@@ -203,12 +212,13 @@ static void USB_Device_GetInternalSerialDescriptor(void)
        struct
        {
                USB_Descriptor_Header_t Header;
-               wchar_t                 UnicodeString[20];
+               uint16_t                UnicodeString[INTERNAL_SERIAL_LENGTH_BITS / 4];
        } SignatureDescriptor;
 
        SignatureDescriptor.Header.Type = DTYPE_String;
-       SignatureDescriptor.Header.Size = USB_Device_GetSerialString(SignatureDescriptor.UnicodeString,
-                                                                    sizeof(SignatureDescriptor.UnicodeString));
+       SignatureDescriptor.Header.Size = USB_STRING_LEN(INTERNAL_SERIAL_LENGTH_BITS / 4);
+       
+       USB_Device_GetSerialString(SignatureDescriptor.UnicodeString);
 
        Endpoint_ClearSETUP();
 
@@ -222,7 +232,8 @@ static void USB_Device_GetDescriptor(void)
        const void* DescriptorPointer;
        uint16_t    DescriptorSize;
 
-       #if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS)
+       #if defined(ARCH_HAS_MULTI_ADDRESS_SPACE) && \
+           !(defined(USE_FLASH_DESCRIPTORS) || defined(USE_EEPROM_DESCRIPTORS) || defined(USE_RAM_DESCRIPTORS))
        uint8_t DescriptorAddressSpace;
        #endif
 
@@ -236,7 +247,8 @@ static void USB_Device_GetDescriptor(void)
 
        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)
+       #if defined(ARCH_HAS_MULTI_ADDRESS_SPACE) && \
+           !(defined(USE_FLASH_DESCRIPTORS) || defined(USE_EEPROM_DESCRIPTORS) || defined(USE_RAM_DESCRIPTORS))
                                                         , &DescriptorAddressSpace
        #endif
                                                                                                         )) == NO_DESCRIPTOR)
@@ -246,7 +258,7 @@ static void USB_Device_GetDescriptor(void)
 
        Endpoint_ClearSETUP();
 
-       #if defined(USE_RAM_DESCRIPTORS)
+       #if defined(USE_RAM_DESCRIPTORS) || !defined(ARCH_HAS_MULTI_ADDRESS_SPACE)
        Endpoint_Write_Control_Stream_LE(DescriptorPointer, DescriptorSize);
        #elif defined(USE_EEPROM_DESCRIPTORS)
        Endpoint_Write_Control_EStream_LE(DescriptorPointer, DescriptorSize);
@@ -299,7 +311,7 @@ static void USB_Device_GetStatus(void)
 
        Endpoint_ClearSETUP();
 
-       Endpoint_Write_Word_LE(CurrentStatus);
+       Endpoint_Write_16_LE(CurrentStatus);
        Endpoint_ClearIN();
 
        Endpoint_ClearStatusStage();
@@ -338,7 +350,7 @@ static void USB_Device_ClearSetFeature(void)
                                        else
                                        {
                                                Endpoint_ClearStall();
-                                               Endpoint_ResetFIFO(EndpointIndex);
+                                               Endpoint_ResetEndpoint(EndpointIndex);
                                                Endpoint_ResetDataToggle();
                                        }
                                }