Added incomplete MIDIToneGenerator project.
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Device / Audio.c
index 4651bf1..d2572e9 100644 (file)
@@ -1,21 +1,21 @@
 /*\r
              LUFA Library\r
 /*\r
              LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
+     Copyright (C) Dean Camera, 2010.\r
               \r
   dean [at] fourwalledcubicle [dot] com\r
       www.fourwalledcubicle.com\r
 */\r
 \r
 /*\r
               \r
   dean [at] fourwalledcubicle [dot] com\r
       www.fourwalledcubicle.com\r
 */\r
 \r
 /*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
+  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this \r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in \r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting \r
+  documentation, and that the name of the author not be used in \r
+  advertising or publicity pertaining to distribution of the \r
   software without specific, written prior permission.\r
 \r
   The author disclaim all warranties with regard to this\r
   software without specific, written prior permission.\r
 \r
   The author disclaim all warranties with regard to this\r
   this software.\r
 */\r
 \r
   this software.\r
 */\r
 \r
+#define  __INCLUDE_FROM_USB_DRIVER\r
+#include "../../HighLevel/USBMode.h"\r
+#if defined(USB_CAN_BE_DEVICE)\r
+\r
+#define  __INCLUDE_FROM_AUDIO_DRIVER\r
 #include "Audio.h"\r
 \r
 #include "Audio.h"\r
 \r
-void USB_Audio_ProcessControlPacket(USB_ClassInfo_Audio_t* AudioInterfaceInfo)\r
+void Audio_Device_ProcessControlRequest(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)\r
 {\r
        if (!(Endpoint_IsSETUPReceived()))\r
          return;\r
          \r
 {\r
        if (!(Endpoint_IsSETUPReceived()))\r
          return;\r
          \r
-       if (USB_ControlRequest.wIndex != AudioInterfaceInfo->StreamingInterfaceNumber)\r
+       if (USB_ControlRequest.wIndex != AudioInterfaceInfo->Config.StreamingInterfaceNumber)\r
          return;\r
 \r
        switch (USB_ControlRequest.bRequest)\r
          return;\r
 \r
        switch (USB_ControlRequest.bRequest)\r
@@ -45,115 +50,58 @@ void USB_Audio_ProcessControlPacket(USB_ClassInfo_Audio_t* AudioInterfaceInfo)
                        {\r
                                Endpoint_ClearSETUP();\r
                                \r
                        {\r
                                Endpoint_ClearSETUP();\r
                                \r
-                               AudioInterfaceInfo->InterfaceEnabled = (USB_ControlRequest.wValue != 0);\r
+                               AudioInterfaceInfo->State.InterfaceEnabled = ((USB_ControlRequest.wValue & 0xFF) != 0);\r
                                  \r
                                  \r
-                               while (!(Endpoint_IsINReady()));\r
-                               Endpoint_ClearIN();\r
+                               Endpoint_ClearStatusStage();\r
                        }\r
 \r
                        break;\r
        }\r
 }\r
 \r
                        }\r
 \r
                        break;\r
        }\r
 }\r
 \r
-bool USB_Audio_ConfigureEndpoints(USB_ClassInfo_Audio_t* AudioInterfaceInfo)\r
+bool Audio_Device_ConfigureEndpoints(USB_ClassInfo_Audio_Device_t* AudioInterfaceInfo)\r
 {\r
 {\r
-       if (AudioInterfaceInfo->DataINEndpointNumber)\r
+       memset(&AudioInterfaceInfo->State, 0x00, sizeof(AudioInterfaceInfo->State));\r
+\r
+       if (AudioInterfaceInfo->Config.DataINEndpointNumber)\r
        {\r
        {\r
-               if (!(Endpoint_ConfigureEndpoint(AudioInterfaceInfo->DataINEndpointNumber, EP_TYPE_ISOCHRONOUS,\r
-                                                                                ENDPOINT_DIR_IN, AudioInterfaceInfo->DataINEndpointSize,\r
+               if (!(Endpoint_ConfigureEndpoint(AudioInterfaceInfo->Config.DataINEndpointNumber, EP_TYPE_ISOCHRONOUS,\r
+                                                                                ENDPOINT_DIR_IN, AudioInterfaceInfo->Config.DataINEndpointSize,\r
                                                                                 ENDPOINT_BANK_DOUBLE)))\r
                {\r
                        return false;\r
                }\r
        }\r
 \r
                                                                                 ENDPOINT_BANK_DOUBLE)))\r
                {\r
                        return false;\r
                }\r
        }\r
 \r
-       if (AudioInterfaceInfo->DataOUTEndpointNumber)\r
+       if (AudioInterfaceInfo->Config.DataOUTEndpointNumber)\r
        {\r
        {\r
-               if (!(Endpoint_ConfigureEndpoint(AudioInterfaceInfo->DataOUTEndpointNumber, EP_TYPE_ISOCHRONOUS,\r
-                                                                                ENDPOINT_DIR_OUT, AudioInterfaceInfo->DataOUTEndpointSize,\r
+               if (!(Endpoint_ConfigureEndpoint(AudioInterfaceInfo->Config.DataOUTEndpointNumber, EP_TYPE_ISOCHRONOUS,\r
+                                                                                ENDPOINT_DIR_OUT, AudioInterfaceInfo->Config.DataOUTEndpointSize,\r
                                                                                 ENDPOINT_BANK_DOUBLE)))\r
                {\r
                        return false;\r
                }\r
        }\r
                                                                                 ENDPOINT_BANK_DOUBLE)))\r
                {\r
                        return false;\r
                }\r
        }\r
-\r
+       \r
        return true;\r
 }\r
 \r
        return true;\r
 }\r
 \r
-void USB_Audio_USBTask(USB_ClassInfo_Audio_t* AudioInterfaceInfo)\r
+bool Audio_Device_IsSampleReceived(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)\r
 {\r
 {\r
-\r
-}\r
-\r
-int8_t USB_Audio_ReadSample8(void)\r
-{\r
-       int8_t Sample;\r
-\r
-       Sample = Endpoint_Read_Byte();\r
-\r
-       if (!(Endpoint_IsReadWriteAllowed()))\r
-         Endpoint_ClearOUT();\r
+       if ((USB_DeviceState != DEVICE_STATE_Configured) || !(AudioInterfaceInfo->State.InterfaceEnabled))\r
+         return false;\r
        \r
        \r
-       return Sample;\r
-}\r
-\r
-int16_t USB_Audio_ReadSample16(void)\r
-{\r
-       int16_t Sample;\r
-\r
-       Sample = (int16_t)Endpoint_Read_Word_LE();\r
-                 \r
-       if (!(Endpoint_IsReadWriteAllowed()))\r
-         Endpoint_ClearOUT();\r
-\r
-       return Sample;\r
-}\r
-\r
-int32_t USB_Audio_ReadSample24(void)\r
-{\r
-       int32_t Sample;\r
-\r
-       Sample = (((uint32_t)Endpoint_Read_Byte() << 16) | Endpoint_Read_Word_LE());\r
-                 \r
-       if (!(Endpoint_IsReadWriteAllowed()))\r
-         Endpoint_ClearOUT();\r
-\r
-       return Sample;\r
-}\r
-\r
-void USB_Audio_WriteSample8(int8_t Sample)\r
-{\r
-       Endpoint_Write_Byte(Sample);\r
-\r
-       if (!(Endpoint_IsReadWriteAllowed()))\r
-         Endpoint_ClearIN();\r
-}\r
-\r
-void USB_Audio_WriteSample16(int16_t Sample)\r
-{\r
-       Endpoint_Write_Word_LE(Sample);\r
-\r
-       if (!(Endpoint_IsReadWriteAllowed()))\r
-         Endpoint_ClearIN();\r
-}\r
-\r
-void USB_Audio_WriteSample24(int32_t Sample)\r
-{\r
-       Endpoint_Write_Byte(Sample >> 16);\r
-       Endpoint_Write_Word_LE(Sample);\r
-\r
-       if (!(Endpoint_IsReadWriteAllowed()))\r
-         Endpoint_ClearIN();\r
-}\r
-\r
-bool USB_Audio_IsSampleReceived(USB_ClassInfo_Audio_t* AudioInterfaceInfo)\r
-{\r
-       Endpoint_SelectEndpoint(AudioInterfaceInfo->DataOUTEndpointNumber);\r
+       Endpoint_SelectEndpoint(AudioInterfaceInfo->Config.DataOUTEndpointNumber);      \r
        return Endpoint_IsOUTReceived();\r
 }\r
 \r
        return Endpoint_IsOUTReceived();\r
 }\r
 \r
-bool USB_Audio_IsReadyForNextSample(USB_ClassInfo_Audio_t* AudioInterfaceInfo)\r
+bool Audio_Device_IsReadyForNextSample(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)\r
 {\r
 {\r
-       Endpoint_SelectEndpoint(AudioInterfaceInfo->DataINEndpointNumber);\r
+       if ((USB_DeviceState != DEVICE_STATE_Configured) || !(AudioInterfaceInfo->State.InterfaceEnabled))\r
+         return false;\r
+       \r
+       Endpoint_SelectEndpoint(AudioInterfaceInfo->Config.DataINEndpointNumber);\r
        return Endpoint_IsINReady();\r
 }\r
        return Endpoint_IsINReady();\r
 }\r
+\r
+#endif
\ No newline at end of file