Hi, does anyone know if IOUSBDeviceInterface187 and IOUSBInterfaceInterface190 interfaces will be available on application level next years and there is no any deprecation plans ?
Common Recommendations are to use USBDriverKit, but is there a real need to complicate USB communication in this way?
Post
Replies
Boosts
Views
Activity
I did it with older OSX versions, but can't do on Ventura
Vendor and product IDS are defined in DeviceMatchingInfo.plist:
<key>usb</key>
<dict>
<key>IOUSBDevice</key>
<array>
<dict>
<key>Product Identification</key>
<string>TravelScan Pro</string>
<key>device events</key>
<array>
<string>scan</string>
</array>
<key>device type</key>
<string>scanner</string>
<key>idProduct</key>
<integer>18455</integer>
<key>idVendor</key>
<integer>7628</integer>
</dict>
</array>
</dict>
There is also DeviceInfo.plist with scanner properties.
Additionally I tried to insert following keys into the project info.plist:
<key>IOKitPersonalities</key>
<dict>
<key>travelscanpro</key>
<dict>
<key>IOClass</key>
<string>travelscanpro</string>
<key>IOProviderClass</key>
<string>IOUSBDevicxe</string>
<key>idProduct</key>
<string>0x4817</string>
<key>idVendor</key>
<string>0x1DCC</string>
</dict>
</dict>
as well as com.apple.developer.driverkit.transport.usb key with Vendor ID into entitlemens file, but no changes, the scanner is not shown in ImageCapture.app.
There are log messages on scanner connect:
icdd default Device DB | Creating local devices icdd
<Missing Description> default Sandbox: icdd(549) allow file-read-data /Library/Image Capture/Devices kernel
<Missing Description> default Sandbox: icdd(549) allow file-read-data /Library/Image Capture/Devices/AbcTr.app/Contents/Resources/DeviceMatchingInfo.plist kernel
<Missing Description> default Sandbox: icdd(549) allow file-read-data /Library/Image Capture/Devices/AbcTr.app/Contents/Resources/DeviceInfo.plist kernel
icdd default Device DB | Creating bonjour devices icdd
<Missing Description> default Sandbox: icdd(549) allow file-read-data /Library/Image Capture/Devices kernel
<Missing Description> default Sandbox: icdd(549) allow file-read-data /Library/Image Capture/Devices/AbcTr.app/Contents/Resources/DeviceMatchingInfo.plist kernel
icdd default => [Matching] | [ 0x00,0x00,0x00 ] icdd
icdd default Added | 0x10000007 - [USB][ TravelScan Pro ] ( 0, 0, 0) @ 0x2400000 | icdd
icdd default Autolaunch | 00000000-0000-0000-0000-000000000030 => (null) icdd
ccid error Failed to find AppleUSBAlternateServiceRegistryID. com.apple.ifdreader
What does mean the last message ? I could not find any useful info.
The application can be launched manually
In my old scanner driver I filled gICDScannerCallbackFunctions structure with callback links and then called ICD_ScannerMain(..)
Now I'm trying to rebuild the driver as driverkit extension, but it looks like ICADevices framework is not available here.
What API should the driver implement to communicate with the application and how to register it?
I have XCode 15.0 project with system extension target (c++), and can't include some standard headers, like or . Compilation error: __debug file not found.
Base SDK and Supported platforms: DriverKit.
Reinstallation of XCode didn't help, as well as manual copy of __debug file into framework include folder.
No problems with other C++ targets (command line tools, etc)
Please reply if you have identical projects, but without compilation errors. May be that is my system configuration problem and not common DriverKit feature ?
I'm trying to open project from XCode 15 with XCode 14.
Project format is set to XCode 14.0, but that doesn't help.
Many thanks for any advices
I'm trying to find extension by name with following code:
static const char* dextIdentifier = "someDextName";
CFMutableDictionaryRef cfd = IOServiceNameMatching(dextIdentifier);
int nMatch = (int)CFDictionaryGetCount(cfd);
printf("nMatch=%d\n",nMatch);
const void *keys[nMatch], *values[nMatch];
CFDictionaryGetKeysAndValues(cfd, keys, values);
for(int e=0; e < nMatch; e++) {
char key[100] = "", value[100] = "";
if(CFStringGetCString(reinterpret_cast<CFStringRef>(keys[e]), key, sizeof(key), kCFStringEncodingASCII)) {
printf("Key: %s\n",key);
}
if(CFStringGetCString(reinterpret_cast<CFStringRef>(values[e]), value, sizeof(value), kCFStringEncodingASCII)) {
printf("Value: %s\n",key);
}
}
Regardless of dextIdentifier value IOServiceNameMatching always returns
single record (nMatch = 1), where key = "IONameMatch" and
value =
It doesn't matter whether the specified extension name exists or not
There is the single extension in the system, according to 'systemextensionsctl list' command
I'm working on dext project (c++), Base SDK and Supported Platforms are set to DriverKit.
#include causes errors:
error "The iostreams library is not supported since libc++ has been configured without support for localization."
error "<locale.h> is not supported since libc++ has been configured without support for localization."
Also it's not possible to define custom log object: undeclared identifier 'os_log_create'. <os/log.h> included and os_log function is compiled correct.
macOS as additional SDK did not help. Thanks a lot for any hint.
May be trivial question, but I can't find a clear answer.
What interface should ICA (scanner) driver implement to communicate with the application ?
i.e. to receive acquisition request with parameters and transfer image[s].
Thanks
I'm trying to build C project with XCode 15.0, but always get error 'assert.h' file not found. I tried to clean and restart XCode, reinstall XCode and reboot, set different framework versions and project formats.
I found all entries of stdarg.h with Finder and made sure, that all directories, containing stdarg.h, contain also assert.h, but stdarg.h includes are resolved, assert.h - not. How could this be ? Many thanks for any help.
Ventura 13.6, M2, Command line tools version 2397