Update UC3 platform driver support to use the bitmasks defined in the header files...
[pub/USBasp.git] / LUFA / Drivers / USB / Core / DeviceStandardReq.c
index a2270f4..c3a111e 100644 (file)
 #define  __INCLUDE_FROM_DEVICESTDREQ_C
 #include "DeviceStandardReq.h"
 
-uint8_t USB_ConfigurationNumber;
+uint8_t USB_Device_ConfigurationNumber;
 
 #if !defined(NO_DEVICE_SELF_POWER)
-bool    USB_CurrentlySelfPowered;
+bool    USB_Device_CurrentlySelfPowered;
 #endif
 
 #if !defined(NO_DEVICE_REMOTE_WAKEUP)
-bool    USB_RemoteWakeupEnabled;
+bool    USB_Device_RemoteWakeupEnabled;
 #endif
 
 void USB_Device_ProcessControlRequest(void)
 {
-       USB_ControlRequest.bmRequestType = Endpoint_Read_Byte();
-       USB_ControlRequest.bRequest      = Endpoint_Read_Byte();
-       USB_ControlRequest.wValue        = Endpoint_Read_Word_LE();
-       USB_ControlRequest.wIndex        = Endpoint_Read_Word_LE();
-       USB_ControlRequest.wLength       = Endpoint_Read_Word_LE();
+       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();
 
@@ -114,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)
@@ -138,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)
@@ -157,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)))
@@ -172,15 +176,19 @@ 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();
 
-       USB_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue;
+       USB_Device_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue;
 
        Endpoint_ClearStatusStage();
 
-       if (USB_ConfigurationNumber)
+       if (USB_Device_ConfigurationNumber)
          USB_DeviceState = DEVICE_STATE_Configured;
        else
          USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered;
@@ -192,7 +200,7 @@ static void USB_Device_GetConfiguration(void)
 {
        Endpoint_ClearSETUP();
 
-       Endpoint_Write_Byte(USB_ConfigurationNumber);
+       Endpoint_Write_8(USB_Device_ConfigurationNumber);
        Endpoint_ClearIN();
 
        Endpoint_ClearStatusStage();
@@ -204,12 +212,13 @@ static void USB_Device_GetInternalSerialDescriptor(void)
        struct
        {
                USB_Descriptor_Header_t Header;
-               uint16_t                UnicodeString[20];
+               uint16_t                UnicodeString[INTERNAL_SERIAL_LENGTH_BITS / 4];
        } SignatureDescriptor;
 
        SignatureDescriptor.Header.Type = DTYPE_String;
-       SignatureDescriptor.Header.Size = USB_STRING_LEN(USB_Device_GetSerialString(SignatureDescriptor.UnicodeString,
-                                                        sizeof(SignatureDescriptor.UnicodeString) / sizeof(SignatureDescriptor.UnicodeString[0])));
+       SignatureDescriptor.Header.Size = USB_STRING_LEN(INTERNAL_SERIAL_LENGTH_BITS / 4);
+       
+       USB_Device_GetSerialString(SignatureDescriptor.UnicodeString);
 
        Endpoint_ClearSETUP();
 
@@ -223,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
 
@@ -237,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)
@@ -247,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);
@@ -274,12 +285,12 @@ static void USB_Device_GetStatus(void)
                #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)
+                       if (USB_Device_CurrentlySelfPowered)
                          CurrentStatus |= FEATURE_SELFPOWERED_ENABLED;
                        #endif
 
                        #if !defined(NO_DEVICE_REMOTE_WAKEUP)
-                       if (USB_RemoteWakeupEnabled)
+                       if (USB_Device_RemoteWakeupEnabled)
                          CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED;
                        #endif
                        break;
@@ -300,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();
@@ -313,7 +324,7 @@ static void USB_Device_ClearSetFeature(void)
                #if !defined(NO_DEVICE_REMOTE_WAKEUP)
                case REQREC_DEVICE:
                        if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_DeviceRemoteWakeup)
-                         USB_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature);
+                         USB_Device_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature);
                        else
                          return;