Hi,
I have a usb composite device with multiple interfaces that support cdc-acm UARTs.
My custom driver (.dext) loads and works for single channel usb-cdcccm device with these entries in the info.plist:
<key>bInterfaceNumber</key> <integer>1</integer>
But there is no option to define multiple "bInterfaceNumber" key.
I tried bInterfaceClass also, as given below, but no success.
Option-1:
<key>bInterfaceClass</key> <integer>10</integer> <key>bInterfaceSubClass</key> <integer>0</integer> <key>bInterfaceProtocol</key> <integer>0</integer>
Option-2: <key>bInterfaceClass</key> <integer>10</integer> <key>bInterfaceSubClass</key> <integer>0</integer> <key>bInterfaceProtocol</key> <integer>0</integer>
Both the above options yield no result.
But as I said in the beginning:
<key>IOProviderClass</key>
<string>IOUSBHostInterface</string>
<key>IOClass</key>
<string>IOUserSerial</string>
<key>IOResourceMatch</key>
<string>IOKit</string>
<key>IOUserClass</key>
<string>MyDriver</string>
<key>IOUserServerName</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>idVendor</key>
<integer>VENDORID</integer>
<key>idProduct</key>
<integer>PRODUCTID</integer>
<key>bInterfaceNumber</key>
<integer>1</integer>
<key>bConfigurationValue</key>
<integer>1</integer>
"MyDriver" loads for interface-1 and works fine. The default AppleCDCACM driver loads for the 2nd channel. I want the same driver load for both the channels.
Any help/suggestions \is very much appreciated.
Thank you.
you are right, you can't define multiple interface numbers within one IOKitPersonality. But you can define multiple IOKitPersonalities.
IOKitPersonalities is a dictionary of dictionaries. The keys are strings (which can be anything meaningful to you, the OS doesn't care what they are), each value is a dictionary. Copy your dictionary which matches against bInterfaceNumber=1, and modify it to match against bInterfaceNumber=2.
I believe the rules outlined still apply.