Fixed CDC class drivers not saving and sending all 16-bits of the control line states...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Device / Audio.c
index 5979212..cdbe1a0 100644 (file)
@@ -52,10 +52,10 @@ void Audio_Device_ProcessControlRequest(USB_ClassInfo_Audio_Device_t* const Audi
                bool EndpointFilterMatch = false;
        
                EndpointFilterMatch |= (AudioInterfaceInfo->Config.DataINEndpointNumber &&
                bool EndpointFilterMatch = false;
        
                EndpointFilterMatch |= (AudioInterfaceInfo->Config.DataINEndpointNumber &&
-                                       ((uint8_t)USB_ControlRequest.wIndex == (ENDPOINT_DESCRIPTOR_DIR_IN  | AudioInterfaceInfo->Config.DataINEndpointNumber)));
+                                       ((uint8_t)USB_ControlRequest.wIndex == (ENDPOINT_DIR_IN  | AudioInterfaceInfo->Config.DataINEndpointNumber)));
        
                EndpointFilterMatch |= (AudioInterfaceInfo->Config.DataOUTEndpointNumber &&
        
                EndpointFilterMatch |= (AudioInterfaceInfo->Config.DataOUTEndpointNumber &&
-                                       ((uint8_t)USB_ControlRequest.wIndex == (ENDPOINT_DESCRIPTOR_DIR_OUT | AudioInterfaceInfo->Config.DataOUTEndpointNumber)));
+                                       ((uint8_t)USB_ControlRequest.wIndex == (ENDPOINT_DIR_OUT | AudioInterfaceInfo->Config.DataOUTEndpointNumber)));
 
                if (!(EndpointFilterMatch))
                  return;
 
                if (!(EndpointFilterMatch))
                  return;
@@ -143,26 +143,32 @@ bool Audio_Device_ConfigureEndpoints(USB_ClassInfo_Audio_Device_t* const AudioIn
                uint16_t Size;
                uint8_t  Type;
                uint8_t  Direction;
                uint16_t Size;
                uint8_t  Type;
                uint8_t  Direction;
+               bool     DoubleBanked;
 
                if (EndpointNum == AudioInterfaceInfo->Config.DataINEndpointNumber)
                {
                        Size         = AudioInterfaceInfo->Config.DataINEndpointSize;
                        Direction    = ENDPOINT_DIR_IN;
                        Type         = EP_TYPE_ISOCHRONOUS;
 
                if (EndpointNum == AudioInterfaceInfo->Config.DataINEndpointNumber)
                {
                        Size         = AudioInterfaceInfo->Config.DataINEndpointSize;
                        Direction    = ENDPOINT_DIR_IN;
                        Type         = EP_TYPE_ISOCHRONOUS;
+                       DoubleBanked = true;
                }
                else if (EndpointNum == AudioInterfaceInfo->Config.DataOUTEndpointNumber)
                {
                        Size         = AudioInterfaceInfo->Config.DataOUTEndpointSize;
                        Direction    = ENDPOINT_DIR_OUT;
                        Type         = EP_TYPE_ISOCHRONOUS;
                }
                else if (EndpointNum == AudioInterfaceInfo->Config.DataOUTEndpointNumber)
                {
                        Size         = AudioInterfaceInfo->Config.DataOUTEndpointSize;
                        Direction    = ENDPOINT_DIR_OUT;
                        Type         = EP_TYPE_ISOCHRONOUS;
+                       DoubleBanked = true;
                }
                else
                {
                        continue;
                }
 
                }
                else
                {
                        continue;
                }
 
-               if (!(Endpoint_ConfigureEndpoint(EndpointNum, Type, Direction, Size, ENDPOINT_BANK_DOUBLE)))
-                 return false;
+               if (!(Endpoint_ConfigureEndpoint(EndpointNum, Type, Direction, Size,
+                                                DoubleBanked ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))
+               {
+                       return false;
+               }
        }
 
        return true;
        }
 
        return true;