We have developed a Kernel Extension based on SCSI Architecture Model Family for External USB Mass Storage devices which deals with IOSCSIBlockCommandsDevice, IOSCSIPeripheralDeviceType00 and IOBlockStorageService. This driver extends class IOSCSIPeripheralDeviceType00 and its provider class is: IOSCSIPeripheralDeviceNub.
Now apple has released USBDriverKit so we have developed alternative DEXT which is based on BOT (Bulk-Only-Transfer) protocol. This newly developed DEXT works fine and we are able to communicate with storage device. We use IOUSBHostInterface as provider. We are able to get BOT Interface and setup Pipes to communicate with interface's end points and IOUSBHostPipe->IO call to send/receive data/response from/to device.
Only issue we are facing is that storage device volume is not getting mounted. Also device is not getting listed in Disk Utility.
In USBDriverKit documentation (https://developer.apple.com/documentation/usbdriverkit/iousbhostinterface)), it's specified that Open call gives exclusive device access to device when called in Start method and so we are doing this and Close called in Stop. But, in this scenario, even though driver works fine, device volume is not mounting. We have also tried without calling Open in Start but IOUSBHostPipe->IO api fails with error: kIOReturnNotReady
Below are my queries related to USBDriverKit:
Does USBDriverKit supports storage devices?
Do we have to call IOUSBHostInterface->Open in Start and IOUSBHostInterface->Close in Stop??
Do we have to call IOUSBHostInterface->Open before sending command to device and IOUSBHostInterface->Close after command completion?
If we claim Device Interface then how to release it and when??
If someone have pointers on how to resolve this issue, It would be helpful.
Thanks in advance.
Now apple has released USBDriverKit so we have developed alternative DEXT which is based on BOT (Bulk-Only-Transfer) protocol. This newly developed DEXT works fine and we are able to communicate with storage device. We use IOUSBHostInterface as provider. We are able to get BOT Interface and setup Pipes to communicate with interface's end points and IOUSBHostPipe->IO call to send/receive data/response from/to device.
Only issue we are facing is that storage device volume is not getting mounted. Also device is not getting listed in Disk Utility.
In USBDriverKit documentation (https://developer.apple.com/documentation/usbdriverkit/iousbhostinterface)), it's specified that Open call gives exclusive device access to device when called in Start method and so we are doing this and Close called in Stop. But, in this scenario, even though driver works fine, device volume is not mounting. We have also tried without calling Open in Start but IOUSBHostPipe->IO api fails with error: kIOReturnNotReady
Below are my queries related to USBDriverKit:
Does USBDriverKit supports storage devices?
Do we have to call IOUSBHostInterface->Open in Start and IOUSBHostInterface->Close in Stop??
Do we have to call IOUSBHostInterface->Open before sending command to device and IOUSBHostInterface->Close after command completion?
If we claim Device Interface then how to release it and when??
If someone have pointers on how to resolve this issue, It would be helpful.
Thanks in advance.