46int au_parsing_descriptors(
UAC_DEV_T *audev);
54 if(g_au_dev[i].udev ==
NULL)
56 memset((
char *)&g_au_dev[i], 0,
sizeof(
UAC_DEV_T));
60 memset((
char *)&g_uac_info[i], 0,
sizeof(UAC_INFO_T));
61 g_au_dev[i].
priv = (
void *)&g_uac_info[i];
68static void free_au_device(
UAC_DEV_T *audev)
82 if(g_au_dev[i].udev == udev)
96 if(&g_au_dev[i] == hdev)
112 if((ifd->bInterfaceSubClass != SUBCLS_AUDIOCONTROL) &&
113 (ifd->bInterfaceSubClass != SUBCLS_AUDIOSTREAMING))
115 printf(
"Does not support audio sub-class %x\n", ifd->bInterfaceSubClass);
120 ifnum = ifd->bInterfaceNumber;
122 audev = find_as_deivce_by_udev(dev);
125 audev = alloc_as_device();
133 USBAS_DBGMSG(
"au_probe called for ifnum %d\n", ifnum);
135 if(ifd->bInterfaceSubClass == SUBCLS_AUDIOSTREAMING)
138 for(i = 0; i < dev->ep_list_cnt; i++)
140 if((dev->ep_list[i].ifnum == ifnum) &&
141 ((dev->ep_list[i].bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_ISOC))
143 ep_info = &dev->ep_list[i];
144 USBAS_DBGMSG(
"Isochronous Endpoint 0x%x found.\n", ep_info->bEndpointAddress);
149 USBAS_DBGMSG(
"couldn't find isochronous endpoints\n");
153 if((ep_info->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
157 USBAS_DBGMSG(
"Audio in stream interface is %d\n", ifnum);
163 USBAS_DBGMSG(
"Audio out stream interface is %d\n", ifnum);
169 USBAS_DBGMSG(
"Audio control interface is %d\n", ifnum);
175 if(g_audev_list ==
NULL)
176 g_audev_list = audev;
184 return uac_config_parser(audev);
193 USBAS_DBGMSG(
"Audio Class device disconnected!\n");
195 audev = find_as_deivce_by_udev(dev);
220 if(audev == g_audev_list)
221 g_audev_list = g_audev_list->
next;
224 for(p = g_audev_list; p !=
NULL; p = p->
next)
233 free_au_device(audev);
237static USB_DEV_ID_T au_id_table[] =
239 USB_DEVICE_ID_MATCH_INT_CLASS,
247static USB_DRIVER_T au_driver =
249 "audio class driver",
267 memset((
char *)&g_au_dev[0], 0,
sizeof(g_au_dev));
#define CONFIG_AU_MAX_DEV
#define UAC_RET_DRV_NOT_SUPPORTED
void UAC_Init(void)
Initialize this USB Audio Class driver.
URB_T * urbout[ISO_OUT_URB_CNT]
UAC_DEV_T * UAC_GetDeviceList(void)
Get a list of currently connected USB Audio Class devices.
URB_T * urbin[ISO_IN_URB_CNT]
int32_t USBH_RegisterDriver(USB_DRIVER_T *new_driver)
Register a device driver to USB Host Core driver.
int32_t USBH_UnlinkUrb(URB_T *urb)
Cancel an URB which has been submit to USB core.
void USBH_FreeUrb(URB_T *)
Free the URB allocated from USBH_AllocUrb()
USB Host core driver header file.
HIDDEN_SYMBOLS struct usb_device USB_DEV_T