Moved calls to Device mode Class Driver events to after the request has been acknowle...
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / Endpoint.c
index c704ac7..f1ed2f9 100644 (file)
 uint8_t USB_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE;
 #endif
 
 uint8_t USB_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE;
 #endif
 
-uint8_t Endpoint_BytesToEPSizeMaskDynamic(const uint16_t Size)
+bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number,
+                                    const uint8_t UECFG0XData,
+                                    const uint8_t UECFG1XData)
 {
 {
-       return Endpoint_BytesToEPSizeMask(Size);
-}
-
-bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, const uint8_t UECFG0XData, const uint8_t UECFG1XData)
-{
-       Endpoint_SelectEndpoint(Number);
-       Endpoint_EnableEndpoint();
-
-       UECFG1X = 0;
+       uint8_t UECFG0XTemp[ENDPOINT_TOTAL_ENDPOINTS];
+       uint8_t UECFG1XTemp[ENDPOINT_TOTAL_ENDPOINTS];
+       
+       for (uint8_t EPNum = 0; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
+       {
+               Endpoint_SelectEndpoint(EPNum);
+               UECFG0XTemp[EPNum] = UECFG0X;
+               UECFG1XTemp[EPNum] = UECFG1X;
+       }
+       
+       UECFG0XTemp[Number] = UECFG0XData;
+       UECFG1XTemp[Number] = UECFG1XData;
+       
+       for (uint8_t EPNum = 1; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
+       {
+               Endpoint_SelectEndpoint(EPNum); 
+               UEIENX  = 0;
+               UEINTX  = 0;
+               UECFG1X = 0;
+               Endpoint_DisableEndpoint();
+       }
 
 
-       UECFG0X = UECFG0XData;
-       UECFG1X = UECFG1XData;
+       for (uint8_t EPNum = 0; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
+       {
+               if (!(UECFG1XTemp[EPNum] & (1 << ALLOC)))
+                 continue;
+               
+               Endpoint_SelectEndpoint(EPNum);         
+               Endpoint_EnableEndpoint();
 
 
-       return Endpoint_IsConfigured();
+               UECFG0X = UECFG0XTemp[EPNum];
+               UECFG1X = UECFG1XTemp[EPNum];
+               
+               if (!(Endpoint_IsConfigured()))
+                 return false;
+       }
+       
+       Endpoint_SelectEndpoint(Number);
+       return true;
 }
 
 void Endpoint_ClearEndpoints(void)
 }
 
 void Endpoint_ClearEndpoints(void)
@@ -65,9 +92,9 @@ void Endpoint_ClearEndpoints(void)
        for (uint8_t EPNum = 0; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
        {
                Endpoint_SelectEndpoint(EPNum); 
        for (uint8_t EPNum = 0; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
        {
                Endpoint_SelectEndpoint(EPNum); 
-               UEIENX = 0;
-               UEINTX = 0;
-               Endpoint_DeallocateMemory();
+               UEIENX  = 0;
+               UEINTX  = 0;
+               UECFG1X = 0;
                Endpoint_DisableEndpoint();
        }
 }
                Endpoint_DisableEndpoint();
        }
 }
@@ -115,7 +142,7 @@ uint8_t Endpoint_WaitUntilReady(void)
                else
                {
                        if (Endpoint_IsOUTReceived())
                else
                {
                        if (Endpoint_IsOUTReceived())
-                         return ENDPOINT_READYWAIT_NoError;            
+                         return ENDPOINT_READYWAIT_NoError;
                }
                
                if (USB_DeviceState == DEVICE_STATE_Unattached)
                }
                
                if (USB_DeviceState == DEVICE_STATE_Unattached)
@@ -139,7 +166,7 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
 #if !defined(NO_STREAM_CALLBACKS)
                                 , StreamCallbackPtr_t Callback
 #endif
 #if !defined(NO_STREAM_CALLBACKS)
                                 , StreamCallbackPtr_t Callback
 #endif
-                                                               )
+                                )
 {
        uint8_t  ErrorCode;
        
 {
        uint8_t  ErrorCode;
        
@@ -266,7 +293,7 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
 #define  TEMPLATE_BUFFER_TYPE                      void*
 #define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
 #define  TEMPLATE_BUFFER_OFFSET(Length)            0
 #define  TEMPLATE_BUFFER_TYPE                      void*
 #define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
 #define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
 #include "Template/Template_Endpoint_RW.c"
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_BE
 #include "Template/Template_Endpoint_RW.c"
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_BE
@@ -280,7 +307,7 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
 #define  TEMPLATE_BUFFER_TYPE                      void*
 #define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
 #define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
 #define  TEMPLATE_BUFFER_TYPE                      void*
 #define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
 #define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
 #include "Template/Template_Endpoint_RW.c"
 
 #endif
 #include "Template/Template_Endpoint_RW.c"
 
 #endif
@@ -322,7 +349,7 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_LE
 #define  TEMPLATE_BUFFER_OFFSET(Length)            0
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_LE
 #define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
 #include "Template/Template_Endpoint_Control_R.c"
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_BE
 #include "Template/Template_Endpoint_Control_R.c"
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_BE
@@ -332,7 +359,7 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_BE
 #define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
 
 #define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_BE
 #define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
 #include "Template/Template_Endpoint_Control_R.c"
 
 #endif
 #include "Template/Template_Endpoint_Control_R.c"
 
 #endif