Error enumerating multiple devices connected at startup

55 views
Skip to first unread message

mor...@invisiblewrench.com

unread,
Jul 10, 2020, 4:56:11 PM7/10/20
to android-midi
Hi all.

I'm facing an issue where class compliant USB MIDI devices are not listed correctly by the AlsaMidi sub system, if they are connected at system boot time. If they are attached after boot up, they appear correctly.

The platform I'm running is an Android 7.1.2 based SBC, with a USB host port, to which I have connected a USB hub, to which my MIDI devices are connected.

Looking at LogCat, this is logged with a couple of USB MIDI devices attached at power up:

2020-06-19 10:06:11.972 463-692/system_process D/UsbHostManager: Added device UsbDevice[mName=/dev/bus/usb/002/007,mVendorId=1410,mProductId=360,mClass=0,mSubclass=0,mProtocol=0,mManufacturerName=Roland,mProductName=UM-ONE,mVersion=1.16,mSerialNumber=null,mConfigurations=[
    UsbConfiguration[mId=1,mName=null,mAttributes=128,mMaxPower=35,mInterfaces=[
    UsbInterface[mId=0,mAlternateSetting=0,mName=null,mClass=1,mSubclass=1,mProtocol=0,mEndpoints=[]
    UsbInterface[mId=1,mAlternateSetting=0,mName=null,mClass=1,mSubclass=3,mProtocol=0,mEndpoints=[
    UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=64,mInterval=0]
    UsbEndpoint[mAddress=129,mAttributes=2,mMaxPacketSize=64,mInterval=0]]]]
2020-06-19 10:06:11.972 463-692/system_process W/ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:877 com.android.server.usb.UsbSettingsManager.deviceAttached:739 com.android.server.usb.UsbHostManager.endUsbDeviceAdded:225 com.android.server.usb.UsbHostManager.monitorUsbHostBus:-2 com.android.server.usb.UsbHostManager.-wrap0:-1 
2020-06-19 10:06:11.975 463-692/system_process I/UsbAlsaManager: USB Audio Device Added: UsbAudioDevice: [card: 1, device: 0, name: USB-Audio - Source Audio One Series, hasPlayback: false, hasCapture: false, class: 0x80000002]
2020-06-19 10:06:11.975 463-692/system_process D/UsbMidiDeviceJNI: subdevices_count: 1
2020-06-19 10:06:11.987 463-692/system_process D/UsbHostManager: Added device UsbDevice[mName=/dev/bus/usb/002/006,mVendorId=10660,mProductId=768,mClass=239,mSubclass=2,mProtocol=1,mManufacturerName=Source Audio LLC,mProductName=Source Audio One Series    ,mVersion=2.0,mSerialNumber=null,mConfigurations=[
    UsbConfiguration[mId=1,mName=Source Audio One Series    ,mAttributes=192,mMaxPower=50,mInterfaces=[
    UsbInterface[mId=0,mAlternateSetting=0,mName=null,mClass=1,mSubclass=1,mProtocol=0,mEndpoints=[]
    UsbInterface[mId=1,mAlternateSetting=0,mName=null,mClass=1,mSubclass=3,mProtocol=0,mEndpoints=[
    UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=64,mInterval=0]
    UsbEndpoint[mAddress=130,mAttributes=2,mMaxPacketSize=64,mInterval=0]]
    UsbInterface[mId=2,mAlternateSetting=0,mName=null,mClass=3,mSubclass=0,mProtocol=0,mEndpoints=[
    UsbEndpoint[mAddress=129,mAttributes=3,mMaxPacketSize=38,mInterval=1]
    UsbEndpoint[mAddress=1,mAttributes=3,mMaxPacketSize=38,mInterval=1]]]]
2020-06-19 10:06:11.987 463-692/system_process W/ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:877 com.android.server.usb.UsbSettingsManager.deviceAttached:739 com.android.server.usb.UsbHostManager.endUsbDeviceAdded:225 com.android.server.usb.UsbHostManager.monitorUsbHostBus:-2 com.android.server.usb.UsbHostManager.-wrap0:-1 
2020-06-19 10:06:11.995 463-692/system_process I/UsbAlsaManager: USB Audio Device Added: UsbAudioDevice: [card: 1, device: 0, name: USB-Audio - Source Audio One Series, hasPlayback: false, hasCapture: false, class: 0x80000002]
2020-06-19 10:06:11.995 463-692/system_process D/UsbMidiDeviceJNI: subdevices_count: 1

And when the USB MIDI devices are attached after boot up (and listed correctly) this is the log:

2020-06-19 10:17:45.310 463-538/system_process D/UsbAlsaManager: Adding ALSA device AlsaDevice: [card: 1, device: 0, type: 3]
2020-06-19 10:17:45.318 463-692/system_process D/UsbHostManager: Added device UsbDevice[mName=/dev/bus/usb/002/010,mVendorId=10660,mProductId=768,mClass=239,mSubclass=2,mProtocol=1,mManufacturerName=Source Audio LLC,mProductName=Source Audio One Series    ,mVersion=2.0,mSerialNumber=null,mConfigurations=[
    UsbConfiguration[mId=1,mName=Source Audio One Series    ,mAttributes=192,mMaxPower=50,mInterfaces=[
    UsbInterface[mId=0,mAlternateSetting=0,mName=null,mClass=1,mSubclass=1,mProtocol=0,mEndpoints=[]
    UsbInterface[mId=1,mAlternateSetting=0,mName=null,mClass=1,mSubclass=3,mProtocol=0,mEndpoints=[
    UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=64,mInterval=0]
    UsbEndpoint[mAddress=130,mAttributes=2,mMaxPacketSize=64,mInterval=0]]
    UsbInterface[mId=2,mAlternateSetting=0,mName=null,mClass=3,mSubclass=0,mProtocol=0,mEndpoints=[
    UsbEndpoint[mAddress=129,mAttributes=3,mMaxPacketSize=38,mInterval=1]
    UsbEndpoint[mAddress=1,mAttributes=3,mMaxPacketSize=38,mInterval=1]]]]
2020-06-19 10:17:45.320 463-692/system_process W/ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:877 com.android.server.usb.UsbSettingsManager.deviceAttached:739 com.android.server.usb.UsbHostManager.endUsbDeviceAdded:225 com.android.server.usb.UsbHostManager.monitorUsbHostBus:-2 com.android.server.usb.UsbHostManager.-wrap0:-1 
2020-06-19 10:17:45.345 463-692/system_process I/UsbAlsaManager: USB Audio Device Added: UsbAudioDevice: [card: 1, device: 0, name: USB-Audio - Source Audio One Series, hasPlayback: false, hasCapture: false, class: 0x80000002]
2020-06-19 10:17:45.346 463-692/system_process D/UsbMidiDeviceJNI: subdevices_count: 1
2020-06-19 10:17:45.517 463-692/system_process D/UsbHostManager: Added device UsbDevice[mName=/dev/bus/usb/002/011,mVendorId=1410,mProductId=360,mClass=0,mSubclass=0,mProtocol=0,mManufacturerName=Roland,mProductName=UM-ONE,mVersion=1.16,mSerialNumber=null,mConfigurations=[
    UsbConfiguration[mId=1,mName=null,mAttributes=128,mMaxPower=35,mInterfaces=[
    UsbInterface[mId=0,mAlternateSetting=0,mName=null,mClass=1,mSubclass=1,mProtocol=0,mEndpoints=[]
    UsbInterface[mId=1,mAlternateSetting=0,mName=null,mClass=1,mSubclass=3,mProtocol=0,mEndpoints=[
    UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=64,mInterval=0]
    UsbEndpoint[mAddress=129,mAttributes=2,mMaxPacketSize=64,mInterval=0]]]]
2020-06-19 10:17:45.518 463-692/system_process W/ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:877 com.android.server.usb.UsbSettingsManager.deviceAttached:739 com.android.server.usb.UsbHostManager.endUsbDeviceAdded:225 com.android.server.usb.UsbHostManager.monitorUsbHostBus:-2 com.android.server.usb.UsbHostManager.-wrap0:-1 
2020-06-19 10:17:45.526 463-538/system_process D/UsbAlsaManager: Adding ALSA device AlsaDevice: [card: 2, device: 0, type: 3]
2020-06-19 10:17:45.532 463-692/system_process I/UsbAlsaManager: USB Audio Device Added: UsbAudioDevice: [card: 2, device: 0, name: USB-Audio - UM-ONE, hasPlayback: false, hasCapture: false, class: 0x80000002]
2020-06-19 10:17:45.533 463-692/system_process D/UsbMidiDeviceJNI: subdevices_count: 1

What I'm noticing is that in the first case the UsbAlsaManager registers the same device and card twice, even though it is two different physical USB devices:
UsbDevice[mName=/dev/bus/usb/002/007,mVendorId=1410,mProductId=360,mClass=0,mSubclass=0,mProtocol=0,mManufacturerName=Roland,mProductName=UM-ONE...
and 
UsbDevice[mName=/dev/bus/usb/002/006,mVendorId=10660,mProductId=768,mClass=239,mSubclass=2,mProtocol=1,mManufacturerName=Source Audio LLC,mProductName=Source Audio One Series...
both registers as
I/UsbAlsaManager: USB Audio Device Added: UsbAudioDevice: [card: 1, device: 0, name: USB-Audio - Source Audio One Series...

The MIDI device that gets registered changes with the order in which they are connected to the USB hub, so I'm guessing the system only looks at the first device found, and uses that throughout.

Have you seen this before? I'm experiencing this on several different (SBC) systems.
Is It possible to restart the Alsa system and device enumeration after system boot?

Thanks.
Morten


Reply all
Reply to author
Forward
0 new messages