[alsa-devel] USB audio2.0 status interrupt endpoint
Hello all,
I am using the uac2 kernel driver(drivers/usb/gadget/f_uac2.c) having kernel version 3.10.31 for an embedded board.
The board is presented as a USB device to a Linux PC having USB host controller in it.
I have added an interrupt endpoint in the uac2 kernel driver to support the status interrupt endpoint request as per usb audio 2.0 specification.
For the interrupt transfer to happen, I prepared the interrupt packet structure as per audio 2.0 specification and queued the endpoint to transfer it to the host driver. The interrupt structure is prepared as follows: bInfo : 0 (Interface request) bAttribute : 0x1 (CUR request) wValue : 0x200 (VOLUME feature unit control selector) wIndex : 0x700 (FEATURE UNIT ID)
As per my understanding, when the above interrupt endpoint is transferred to host in response to Interrupt IN request, the host should send me a GET CUR volume class-specific request to further qualify the cause of interrupt.
However, I am not getting any class-specific request from host in response to the status interrupt transferred to host.
My query is do i need to implement a mixer interface in the uac2 kernel driver to get the request or i am doing something wrong in the process.
I am stuck onto this and cannot proceed further.
Thanks Puneet
Puneet Sharma wrote:
As per my understanding, when the above interrupt endpoint is transferred to host in response to Interrupt IN request, the host should send me a GET CUR volume class-specific request to further qualify the cause of interrupt.
However, I am not getting any class-specific request from host in response to the status interrupt transferred to host.
My query is do i need to implement a mixer interface in the uac2 kernel driver to get the request or i am doing something wrong in the process.
You must not send a notification for a unit ID that does not exist, so you must implement the mixer interface.
And you will get a request to read the control's current volume only if some application that cares about the value (e.g., alsamixer) actually happens to be running on the host.
Regards, Clemens
On Thu, Mar 3, 2016 at 6:37 PM, Clemens Ladisch clemens@ladisch.de wrote:
Puneet Sharma wrote:
As per my understanding, when the above interrupt endpoint is transferred to host in response to Interrupt IN request, the host should send me a
GET
CUR volume class-specific request to further qualify the cause of
interrupt.
However, I am not getting any class-specific request from host in
response
to the status interrupt transferred to host.
My query is do i need to implement a mixer interface in the uac2 kernel driver to get the request or i am doing something wrong in the process.
You must not send a notification for a unit ID that does not exist, so you must implement the mixer interface.
I have used a feature unit descriptor in the gadget driver with volume control. The Feature unit is inserted between Input and output terminal having a unique Unit ID.
And you will get a request to read the control's current volume only if some application that cares about the value (e.g., alsamixer) actually happens to be running on the host.
Yes, I understand your point now.
After running alsamixer on host, I am able to send volume request to device as well get volume request from host in response to status interrupt.
Regards, Clemens
participants (2)
-
Clemens Ladisch
-
Puneet Sharma