USBDeviceOpen fails with error code kIOReturnExclusiveAccess for DFU Device

Hi All,


I am working on firmware update of a USB BT Dongle. It is CSR chipset based dongle. After the dongle is switched to dfu mode, the USBDeviceOpen always fails with error kIOReturnExclusiveAccess. From ioreg tool I can see the following interfaces.


Interfaces available in Normal Mode

+-o USB Link@14600000 <class AppleUSBDevice, id 0x1000012d2, registered, matched, active, busy 0 (5 ms), retain 22>

| | | | +-o AppleUSBInterface@0 <class AppleUSBInterface, id 0x1000012e0, registered, matched, active, busy 0 (0 ms), retain 5>

| | | | +-o AppleUSBInterface@1 <class AppleUSBInterface, id 0x1000012e3, registered, matched, active, busy 0 (0 ms), retain 5>

| | | | +-o AppleUSBInterface@2 <class AppleUSBInterface, id 0x1000012e5, registered, matched, active, busy 0 (0 ms), retain 5>

| | | | +-o AppleUSBInterface@3 <class AppleUSBInterface, id 0x1000012e6, registered, matched, active, busy 0 (1 ms), retain 5>

| | | | +-o AppleUSBInterface@4 <class AppleUSBInterface, id 0x1000012ea, registered, matched, active, busy 0 (0 ms), retain 5>

| | | | +-o AppleUSBInterface@5 <class AppleUSBInterface, id 0x1000012ef, registered, matched, active, busy 0 (0 ms), retain 5>


Interfaces available in DFU Mode

+-o USB Link@14600000 <class AppleUSBDevice, id 0x100001298, registered, matched, active, busy 0 (0 ms), retain 17>

| | | | +-o AppleUSBInterface@0 <class AppleUSBInterface, id 0x1000012a6, !registered, !matched, active, busy 0, retain 4>

| | | | +-o AppleUSBInterface@1 <class AppleUSBInterface, id 0x1000012a7, !registered, !matched, active, busy 0, retain 4>

| | | | +-o AppleUSBInterface@2 <class AppleUSBInterface, id 0x1000012a8, !registered, !matched, active, busy 0, retain 4>


From dfu-util in dfu mode

$ ./dfu-util -l 74 ↵

dfu-util 0.9


Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.

Copyright 2010-2020 Tormod Volden and Stefan Schmidt

This program is Free Software and has ABSOLUTELY NO WARRANTY

Please report bugs to http://sourceforge.net/p/dfu-util/tickets/


device not found: Operation timed out

Found Runtime: [xxxx:xxxx] ver=0033, devnum=54, cfg=1, intf=2, path="20-11", alt=0, name="UNKNOWN", serial="0000000123456789"


Why is the dongle in dfu mode always returns kIOReturnExclusiveAccess? How to know which process has seized access to the device?


Regards,

Rashmi

Replies

Hi,


The device is being seized by the KEXT IOBluetoothHostControllerUSBTransport. Is there a way to make sure that this KEXT would not take control of the device.

Attempt to access the device by unloading this kext. I am able to successuly open the device with USBDeviceOpen. But fails for API "SetAlternateInterface" on the device interface with error "0xe0005000". Any information on this error code.


Thanks,

Rashmi