(Sorry for double or triple posting, somehow my post was deleted when I tried to edit)
I have a similar issue with an emulated audio device. Communication with default control endpoint is OK, but the ISO endpoint’s callback is only called once, then never again. Looks like something is blocking the queue, but I have no idea what.
Here is the configuration descriptor I use. This should be a simple stereo USB speaker with 16bit / 48 kHz plus volume and mute controls.
// Configuration Descriptor Type
0x9, // Descriptor Size
USB_CONFIGURATION_DESCRIPTOR_TYPE, // Configuration Descriptor Type
0x76, 0x00, // Length of this descriptor and all sub descriptors
0x02, // Number of interfaces
0x01, // Configuration number
0x00, // Configuration string index
0xA0, // Config characteristics - bus powered
0x32, // Max power consumption of device (in 2mA unit) : 0 ma
// Interface association descriptor
0x08, // Descriptor size
USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE, // Descriptor Type (Interface Association)
0x00, // bFirstInterface (number of first interface of the collection)
0x02, // bInterfaceCount (number of interfaces in the collection)
USB_DEVICE_CLASS_AUDIO, // bFunctionClass (Audio)
0x01, // bFunctionSubclass (Audio)
0x00, // bFunctionProtocol (None)
0x00, // iFunction
// Audio Interface descriptor (Control)
0x09, // Descriptor size
USB_INTERFACE_DESCRIPTOR_TYPE, // Descriptor type (Interface descriptor)
0x00, // bInterfaceNumber
0x00, // bAlternateSetting
0x00, // bNumEndpoints
USB_DEVICE_CLASS_AUDIO, // bInterfaceClass (Audio)
0x01, // bInterfaceSubClass (Control)
0x00, // bInterfaceProtocol
0x00, // iInterface
// AudioControl Interface Descriptor (Header)
0x09, // Descriptor size
0x24, // bDescriptorType (CS Interface)
0x01, // bDescriptorSubType (HEADER)
0x00, 0x01, // bdcADC
0x28, 0x00, // wTotalLength
0x01, // bInCollection
0x01, // baInterfaceNr
// AudioControl Interface Descriptor (Input Terminal)
0x0C, // Descriptor size
0x24, // bDescriptorType (CS Interface)
0x02, // bDescriptorSubType (Input Terminal)
0x01, // bTerminalID
0x01, 0x01, // wTerminalType (USB Streaming)
0x00, // bAssocTerminal
0x02, // bNrChannels
0x03, 0x00, // wChannelConfig
0x00, // iChannelNames
0x00, // iTerminal
// AudioControl Interface Descriptor (Feature Unit)
0x0A, // Descriptor size
0x24, // bDescriptorType (CS Interface)
0x06, // bDescriptorSubType (Feature Unit)
0x02, // bUnitID
0x01, // bSourceID
0x01, // bControlSize
0x03, // bmaControls (Mute, Volume)
0x00, // bmaControls (1)
0x00, // bmaControls (2)
0x00, // iFeature
// AudioControl Interface Descriptor (Output Terminal)
0x09, // Descriptor size
0x24, // bDescriptorType (Class specific interface)
0x03, // bDescriptorSubType (Output Terminal)
0x03, // bTerminalID
0x01, 0x03, // wTerminalType (Speaker)
0x00, // bAssocTerminal
0x02, // bSourceID
0x00, // iTerminal
// Audio Interface descriptor (Streaming)
0x9, // Descriptor size
USB_INTERFACE_DESCRIPTOR_TYPE, // Interface Association Descriptor Type
0x01, // bInterfaceNumber
0x00, // bAlternateSetting
0x00, // bNumEndpoints
0x01, // bInterfaceClass (Audio)
0x02, // bInterfaceSubClass (Streaming)
0x00, // bInterfaceProtocol
0x00, // iInterface
// Audio Interface descriptor (Streaming)
0x9, // Descriptor size
USB_INTERFACE_DESCRIPTOR_TYPE, // Interface Association Descriptor Type
0x01, // bInterfaceNumber
0x01, // bAlternateSetting
0x01, // bNumEndpoints
0x01, // bInterfaceClass (Audio)
0x02, // bInterfaceSubClass (Streaming)
0x00, // bInterfaceProtocol
0x00, // iInterface
// Audio Streaming interface descriptor
0x07, // Descriptor size
0x24, // Descriptor type
0x1, // bDescriptorSubType
0x1, // bTerminalLink
0x0, // bDelay
0x01, 0x00, // wFormatTag (PCM)
// Audio Streaming interface descriptor
0x0B, // Descriptor size
0x24, // Descriptor type
0x02, // Descriptor subtype (FORMAT_TYPE)
0x01, // bFormatType
0x02, // bNrChannels
0x02, // bSubFrameSize
0x10, // bBitResolution (16)
0x01, // bSamFreqType
0x80, 0xBB, 0x00, // tSamFreq 48000
// Endpoint Descriptor :
0x9, // Descriptor size
USB_ENDPOINT_DESCRIPTOR_TYPE, // Descriptor type (endpoint)
0x01, // Endpoint address
0x9, // bmAttributes (Iso, Adaptive, Data)
0xc0, 0x00, // wMaxPacketSize (192 bytes)
0x4, // bInterval (8 microframes = 1 millisecond)
0x0, // bRefresh
0x0, // bSynchAddress
// AudioStreaming Endpoint descriptor
0x7, // bLength
0x25, // bDescriptorType
0x1, // bDescriptorSubType (EP General)
0x00, // bmAttributes
0x0, // bLockDelayUnits
0x00, 0x00 // wLockDelay