Gain user-space access to hardware devices and drivers using IOKit.

Posts under IOKit tag

200 Posts

Post

Replies

Boosts

Views

Activity

Enumerating HID devices triggers "Input Monitoring" alert.
Using IOHIDManagerCopyDevices to get a list of keyboards and mice attached to Mac, triggers the user facing "Input Monitoring" request. Because I'm NOT monitoring the users input, the result of the user selection makes no difference to the result, but the privacy warning dialog makes my app look suspicious. All it is doing is checking to make sure that the customer has a non-Bluetooth keyboard or mouse, before they click the button to disable Bluetooth. Is there a way a safe way (no private API please) to enumerate HID devices without this warning, or should I file a feedback asking Apple to reconsider what triggers this dialog?
0
0
1k
Aug ’23
Can I tell if a system is awake/asleep?
macOS, really, so there are a bunch of things that may be running during various types of sleep. I know I can get notifications from IOKit about the system going to sleep or waking up, but if I've got a daemon that crashed, and is then relaunched automatically, can I tell whether the machine is awake, or in some sort of sleep state other than hibernation?
0
0
795
Aug ’23
kIOMessageDeviceWillPowerOff notification doesn't work as expected
Hello, I try to get notifications when the display is turned off (not the screensaver). I've tried the following code (part of it), but it don't work at all (the callback is never called).. I don't get where I did something wrong. Any help or relevant documentation link would be very appreciated .. Thank, volfo io_object_t disp_notifierObject; void* disp_refCon = NULL; kern_return_t disp_registerCode; notifyPortRef = IONotificationPortCreate(kIOMainPortDefault); display_wrangler = IOServiceGetMatchingService( kIOMainPortDefault, IOServiceNameMatching("IODisplayWrangler")); // register to receive display sleep notifications disp_registerCode = IOServiceAddInterestNotification( notifyPortRef, display_wrangler, kIOGeneralInterest, CBDisplaySleep, NULL, &disp_notifierObject); if ( disp_registerCode != kIOReturnSuccess ) { printf("IOServiceAddInterestNotification failed\n"); return 2; } CFRunLoopAddSource( CFRunLoopGetCurrent(), IONotificationPortGetRunLoopSource(notifyPortRef), kCFRunLoopCommonModes ); IOObjectRelease (display_wrangler);
2
0
1k
Aug ’23
IOPSCopyPowerSourcesInfo → kIOPSBatteryHealthKey returning incorrect value
IOPSCopyPowerSourcesInfo → kIOPSBatteryHealthKey returning incorrect value Background: I write software to monitor computer system health. I'm having problems getting battery health information on my new M2 notebook. Given the following Objective-C program: #include <Foundation/NSObjCRuntime.h> #include <IOKit/ps/IOPSKeys.h> #include <IOKit/ps/IOPowerSources.h> #include <assert.h> int main() { CFTypeRef psInfo = IOPSCopyPowerSourcesInfo(); assert(psInfo != NULL); CFArrayRef list = IOPSCopyPowerSourcesList(psInfo); assert(list != NULL); long count = CFArrayGetCount(list); for(long i = 0; i < count; i++) { CFDictionaryRef ps = IOPSGetPowerSourceDescription( psInfo, CFArrayGetValueAtIndex(list, i)); assert(ps != NULL); CFStringRef deviceName = (CFStringRef)CFDictionaryGetValue( ps, CFSTR(kIOPSNameKey)); assert(deviceName != NULL); CFStringRef serialNumber = (CFStringRef)CFDictionaryGetValue( ps, CFSTR(kIOPSHardwareSerialNumberKey)); assert(serialNumber != NULL); CFStringRef health = (CFStringRef)CFDictionaryGetValue( ps, CFSTR(kIOPSBatteryHealthKey)); assert(health != NULL); NSLog(@"\nName=\"%@\"\nSerialNumber=\"%@\"\n" "BatteryHealth=\"%@\"\n", (__bridge NSString*)deviceName, (__bridge NSString*)serialNumber, (__bridge NSString*)health); } CFRelease(list); CFRelease(psInfo); return 0; } and looking at the IOPSKeys.h header, I expect to get one of "Poor", "Fair", or "Good" for the value of kIOPSBatteryHealthKey. https://opensource.apple.com/source/IOKitUser/IOKitUser-1845.81.1/ps.subproj/IOPSKeys.h.auto.html Instead, on my 2022 M2 Macbook Air running 13.2.1 (22D68), I get the following output: Name="InternalBattery-0" SerialNumber="F8Y2422145S10X2A7" BatteryHealth="Check Battery" At the same time, the "System Information app says "Condition: Normal". Am I missing something? This seems to be a bug, right? Should I look into filing a Technical Support Incident?
2
0
1.7k
Aug ’23
Usage of IOS Private APIs such as IOKit Framework
Hi, I am developping an app for IOS using React Native. I want to write a native modules in Swift and use Objective C to bridge the React Native JS functions with native component. In particular, i want to use IOKit framework to access such information as Battery Temperature and Battery Level. I read in many stackoverflow articles and in ChatGPT that the usage of IOS Private APIs are forbidden andd Apple will reject the app from AppStore and block the account. Is it true? Is there any legal way to use low level APIs and avoid to be rejected or blocked by Apple? The official Apple Technical Support is not responding me. I would really appreciate your help and support. Best Regards, Kamran
3
1
4.1k
Aug ’23
Get /dev file name from IOreg?
Hi. I have a class-compliant usb device which announces its serial number as m4121095, as per its kUSBSerialNumberString property. However, the file name it is provided is tty.usbmodemm41210951 – it's the serial number with an additional 1 at the end. What is the meaning of this appendage? (I'm tempted to believe that the 1 at the end is there in the unlikely case another device with the same SN is connected, but there's no way to test this possibility). In the end, I would like to obtain a filename that is guaranteed to be representing a connection to exactly this device. Can I assume that the filename of a device that follows the same protocol of serial numbering will be consistently appended with a number that can in some way be inferred? Thank you.
5
0
2.1k
Jul ’23
importing HID Driver Kit Framework
Hi everyone, I am fairly new to Apple development. I have been working on a project where I need Mac to interface with an HID device (custom device). I have successfully communicated with the device using IOKit, Core Foundation and Driver Kit frameworks by simply importing these frameworks in the project and making use of their APIs. However, my client is now asking that I develop the communication explicitly using HID Driver Kit. Bear in mind that I have not purchased the apple developer certificate nor do I have any provisional signing certificates and without any of these, Xcode was allowing me to use frameworks like IOKit, DriverKit etc. Now, when I tried importing HIDDriverKit into the project, I am not able to find this framework in the "Frameworks and Libraries" tab. How do I import this framework into my project? Do I have to purchase apple developer ID or get the provisional signing certificates or any other formalities are required? Please let me know what can be done. Any pointers or suggestions are welcome. Best, Vishnu
3
0
1.6k
Jul ’23
Does DriverKit work on iPads with M2 or newer Apple Silicon chipsets?
In Apple Developer Documentation / DriverKit, Notes that "The base DriverKit framework is available ... and iPadOS for devices with an M1 processor.", There is no mention of the M2 and subsequent Apple Silicon chipsets, Does DriverKit work on iPads with M2 and subsequent Apple Silicon chipsets? Apple Developer Documentation / DriverKit : https://developer.apple.com/documentation/driverkit
1
0
1.3k
Jul ’23
Interaction between iPhone and Mac/PC via USB - How?
I'm interested in exploring the idea of connecting an iPhone to a Mac/PC. The initial idea is to allow a computer to access/use the iPhones camera and microphone, but I guess I would also be interested in knowing more about how the communication between an iPhone and Mac/PC could work in a general sense too. There are many posts talking about an iPhone integrating with external hardware devices and MFI is mentioned as well as Redpark cables - but I'm not sure if these same things apply when working with a Mac/PC. So, some questions: What protocols, technologies or frameworks would I use send audio and video from an iPhone and a Mac using a USB cable (if the type of cable matters or makes a difference (ie USB-C vs USB-A), please call it out - but I think it's very likely the type of cable wouldn't make any difference) What protocols, technologies or frameworks would I use to send commands from a Mac to the iPhone using USB so that it can be handled by the iOS app It appears that developers are not able to send raw USB protocol/messages/packets unless the developer is a part of MFI, is that correct? Is there another way to achieve this communication? E.g. with some type of "middle-man" (ie a Redpark cable? some other device?) I've seen iOS applications that turn your phone into a webcam (they usually offer connectivity over USB and over the network (NDI)) - these applications require additional downloads on the Mac/PC. My assumption is that the iOS application is sending messages/packets to the Mac/PC application, and the Mac/PC application is then handling all the work to expose that video/auidio stream as a "camera" device to the system. Would this be the only way to achieve this functionality? Could you expose an iOS application as a camera to a Mac (ignoring PC for now) in a native way, so that it would work the same way it does when you plug in a webcam? Is this possible with MFI alone, or is this possible with a third party device (cable/hardware) in between the iPhone and Mac?
14
0
7.5k
May ’23
Release ExclusiveAccess to an usb device taken by another application?
Seems like both Dropbox and Google Drive has a pretty sad implementation/bug that acquire exclusive access to USB devices that expose MTP (media transfer protocol). The way google and dropbox did it is just wrong as they 1) should ask for permission for reading data on new devices, 2) not open the usb device in exclusive mode... 3) make use of MTP's Multi-Session mode. Well, as it will take them about 4.5 years to correct this, I wonder if there is a way for a app-store/user-space application in macOS 11/12/13 (big sur, monterey, ventura) to do the following: Detect if there is another app that has exclusive lock to a specific usb device Get the name of the app so that an alert could say, "please quit google-drive for this to work..." Release the exclusive lock, i.e. hand over the usb peripheral to my application
0
0
1.6k
Apr ’23
In macOS 13.1, how to communicate with USB billboard device
In macOS 13.1 environment, all IOUSBDevice devices in the current system can be found via the IOServiceAddMatchingNotification function. In the registered callback function, properties such as idVendor, idProduct, and locationID of the device can be read. However, when calling the IOCreatePlugInInterfaceForService function, for USB HID and USB HID devices, a successful status of 0x00000000(kIOReturnSuccess) is returned, but for usb billboard device(type-c ,only have control pipe), an error of 0xe00002be(kIOReturnNoResources) is always returned. Thanks a lot !
1
0
1.8k
Apr ’23
Cannot retrieve the information from iPad device
I am working on an iOS application for internal corporate iPad usage, and I am facing some challenges in getting certain device information programmatically. I was hoping someone could provide me with some guidance or advice on the following coding topics: How can I obtain the "Cellular Data and WiFi Signal Strength" in iPad programmatically, since there is no Apple API provided for this purpose? What is the method to retrieve the "Cellular Network Provider Name" in iPad programmatically after iOS 16 as CTCarrier is deprecated ? Is there a way to obtain the "Monthly Cellular Network Usage" in iPad programmatically, considering that the Network usage count keeps resetting on restart? How can I obtain the "Battery Health Status" in iPad programmatically, since no Apple API is provided for this purpose? Any help or suggestions on these topics would be greatly appreciated. Thank you in advance for your assistance.
1
0
853
Apr ’23
macos 13.3 get usb hid device, interface is 0, is not right
when I upgrade my mac os to version 13.3. I found the usb device interface number is always 0(error ,the right is non-0) when I use kUSBInterfaceNumber from hidapi library(https://github.com/libusb/hidapi). is anyone cause this problem .who can help me. thank you . static int32_t get_int_property(IOHIDDeviceRef device, CFStringRef key) { CFTypeRef ref; int32_t value; ref = IOHIDDeviceGetProperty(device, key); if (ref) { if (CFGetTypeID(ref) == CFNumberGetTypeID()) { CFNumberGetValue((CFNumberRef) ref, kCFNumberSInt32Type, &amp;value); return value; } else { printf("\nCFGetTypeID not equal!\n"); } } else { printf("\nref=%p\n",ref); } return 0; } cur_dev-&gt;interface_number = get_int_property(dev, CFSTR(kUSBInterfaceNumber));
1
3
1.7k
Apr ’23
Command line IOUserClient: C++, MacOS
Hi colleagues, I am trying to learn macOS kext programming. After some researches I've made a very simple IOKit kext which works. Now I want to try to make a command line client that could communicate with this kext. I created a new project in XCode as a C++ "Command Line Tool" and "HelloWorld" example compiles and builds fine. But, when I add #include <IOKit/IOLib.h>, I immediately got an error "File not found". I have added IOKit.framework to the "Frameworks and Libraries" but have no idea what to do next. Please help. I'd also appreciate any links with examples and/or documentation about how to make a simple kext and client for it. Thank you
1
0
1.3k
Mar ’23
Capturing USB traffic
Hi, I want to capture the USB traffic for my app running on High Sierra. I brought the if XHC20 up and can capture the traffic using Wireshark nightly builds. But I only see incoming traffic (from device to host) but not the other direction. Any ideas what is going wrong here?Starting the IF:&gt; sudo ifconfig XHC20 upAfter that I can select the IF in Wireshark and start capturing packets. I can see incoming traffic from attached devices but not the outbound messages.
8
0
16k
Mar ’23
Correct way to read out information about current energy usage battery&charger/adapter
I'm looking for a way to read out the current energy drain of various macOS devices that should be backwards compatible at least to macOS 12. So far I already had a couple of good idea – well initially I thought so – to get that data from ioreg or IOKit, reading out AppleSmartBattery object. I'm trying to write a small program in Rust that collects the energy usage of our companies macOS devices and record this how much happened while in the office and how much on the road. Therefore I need to consider cases where the battery is charging as well as the battery is full and energy is drawn from the power adapter or usb-c connected display directly via PD. So far I was able to read the desired data out via ioreg with plist output and parse the information into a struct. The issue I have testing this out that my 1st approach of going for PowerTelemetryData which would be perfect is only available on macOS 13+ systems. The second approach reading out the subobjects of BatterData and PowerOutDetails seem to only be available on macOS 12 devices now and then. Any suggestions or hints?
1
0
1.3k
Feb ’23
stop charging while plugged in
Is it possible to change the internal operating system of apple's charging methods? So if I want to make an app or some code to make a MacBook stop charging at a certain percentage while it's still plugged in and then let the battery drain until 20%, it automatically starts charging again to 80%. All while it's plugged in. Does apple allow this? to make something like this?
2
0
1.3k
Feb ’23
Reading EDID data on Apple M1 devices
Is there any way to read EDID data in new Apple M1 devices since the below code snippet does not work in M1 machines however it works in Intel based Mac. io_object_t object = -1;       io_iterator_t iterator;     CFMutableDictionaryRef matching = IOServiceMatching("IODisplayConnect");     kern_return_t kernResult = IOServiceGetMatchingServices(kIOMasterPortDefault, matching, &amp;amp;iterator);       if (KERN_SUCCESS == kernResult &amp;amp;&amp;amp; iterator != 0) {           object = IOIteratorNext(iterator);           while (object != 0) {               CFDictionaryRef dict = IODisplayCreateInfoDictionary(object, kIODisplayOnlyPreferredName);       /*        process data here        */               object = IOIteratorNext(iterator);     }     IOObjectRelease(iterator);   } Also tried replacing "IODisplayConnect" by "IODPDevice" but still get an empty iterator.
5
0
5.8k
Feb ’23
Improving battery reading when the machine wakes.
I am using the CFProperty "AppleRawCurrentCapacity" value from IOServiceGetMathcingService( kIOMainPortDefault, IOServiceMatching( "AppleSmartBattery" ) ) to obtain the mAh value of the MacBook's battery. Once when the app receives the NSWorkspace notification of display sleep, and once again when receiving the NSWorkspace notification of display wake. I then calculate how much battery was expended during sleep by deducting the pre value from post value. The results can wildly vary, from it using 16 mAh per hour, to gaining 10 mAh an hour (without being plugged in). Sometimes a 10 hour sleep doesn't use any mAh... Which is clearly wrong. When my app detects the key kIOPMPSInvalidWakeSecondsKey is present, I set a timer for that period + 3 seconds and attempt to read the battery values again. Yet the results can still wildly vary. I see on Intel Macs there is a kIOPMPSMaxErrKey (set to 9 on a 2019 16"), however I don't see this on M1, and don't know how it can help, if it does exist. Can anyone give me any pointers as to what I am doing wrong, or in the direction of obtaining reliable mAh values? I like mAh as it's more precise that the standard integer values of 0 - 100, but I don't have to stick with mAh, I'd just don't like reporting that a 16 hour sleep didn't use any battery, when I know it's not true. Thanks
1
0
1.4k
Jan ’23
iPad 10th Gen and IOKitLib/IOHIDManager
I'm creating an iPad room information app which needs to communicate over USB with an LED light strip. The USB controller is HID class, vendor ID is 0x20a0 and product ID is 0x41e5. It requires sending a simple feature report to control the LEDs. I've got it working on the Mac using IOKit, and compiling on the 10th gen USB C iPad using copied headers and bridging IOKitLib and IOHIDManager, but sandboxing prevents the code executing on the iPad (IOServiceOpen failed: 0xe00002e2). Is joining the MFi program really the only way to get this to get the necessary entitlements? At our current scale, we don't need to distribute in the App Store.
0
0
1.8k
Jan ’23
Enumerating HID devices triggers "Input Monitoring" alert.
Using IOHIDManagerCopyDevices to get a list of keyboards and mice attached to Mac, triggers the user facing "Input Monitoring" request. Because I'm NOT monitoring the users input, the result of the user selection makes no difference to the result, but the privacy warning dialog makes my app look suspicious. All it is doing is checking to make sure that the customer has a non-Bluetooth keyboard or mouse, before they click the button to disable Bluetooth. Is there a way a safe way (no private API please) to enumerate HID devices without this warning, or should I file a feedback asking Apple to reconsider what triggers this dialog?
Replies
0
Boosts
0
Views
1k
Activity
Aug ’23
Can I tell if a system is awake/asleep?
macOS, really, so there are a bunch of things that may be running during various types of sleep. I know I can get notifications from IOKit about the system going to sleep or waking up, but if I've got a daemon that crashed, and is then relaunched automatically, can I tell whether the machine is awake, or in some sort of sleep state other than hibernation?
Replies
0
Boosts
0
Views
795
Activity
Aug ’23
kIOMessageDeviceWillPowerOff notification doesn't work as expected
Hello, I try to get notifications when the display is turned off (not the screensaver). I've tried the following code (part of it), but it don't work at all (the callback is never called).. I don't get where I did something wrong. Any help or relevant documentation link would be very appreciated .. Thank, volfo io_object_t disp_notifierObject; void* disp_refCon = NULL; kern_return_t disp_registerCode; notifyPortRef = IONotificationPortCreate(kIOMainPortDefault); display_wrangler = IOServiceGetMatchingService( kIOMainPortDefault, IOServiceNameMatching("IODisplayWrangler")); // register to receive display sleep notifications disp_registerCode = IOServiceAddInterestNotification( notifyPortRef, display_wrangler, kIOGeneralInterest, CBDisplaySleep, NULL, &disp_notifierObject); if ( disp_registerCode != kIOReturnSuccess ) { printf("IOServiceAddInterestNotification failed\n"); return 2; } CFRunLoopAddSource( CFRunLoopGetCurrent(), IONotificationPortGetRunLoopSource(notifyPortRef), kCFRunLoopCommonModes ); IOObjectRelease (display_wrangler);
Replies
2
Boosts
0
Views
1k
Activity
Aug ’23
IOPSCopyPowerSourcesInfo → kIOPSBatteryHealthKey returning incorrect value
IOPSCopyPowerSourcesInfo → kIOPSBatteryHealthKey returning incorrect value Background: I write software to monitor computer system health. I'm having problems getting battery health information on my new M2 notebook. Given the following Objective-C program: #include <Foundation/NSObjCRuntime.h> #include <IOKit/ps/IOPSKeys.h> #include <IOKit/ps/IOPowerSources.h> #include <assert.h> int main() { CFTypeRef psInfo = IOPSCopyPowerSourcesInfo(); assert(psInfo != NULL); CFArrayRef list = IOPSCopyPowerSourcesList(psInfo); assert(list != NULL); long count = CFArrayGetCount(list); for(long i = 0; i < count; i++) { CFDictionaryRef ps = IOPSGetPowerSourceDescription( psInfo, CFArrayGetValueAtIndex(list, i)); assert(ps != NULL); CFStringRef deviceName = (CFStringRef)CFDictionaryGetValue( ps, CFSTR(kIOPSNameKey)); assert(deviceName != NULL); CFStringRef serialNumber = (CFStringRef)CFDictionaryGetValue( ps, CFSTR(kIOPSHardwareSerialNumberKey)); assert(serialNumber != NULL); CFStringRef health = (CFStringRef)CFDictionaryGetValue( ps, CFSTR(kIOPSBatteryHealthKey)); assert(health != NULL); NSLog(@"\nName=\"%@\"\nSerialNumber=\"%@\"\n" "BatteryHealth=\"%@\"\n", (__bridge NSString*)deviceName, (__bridge NSString*)serialNumber, (__bridge NSString*)health); } CFRelease(list); CFRelease(psInfo); return 0; } and looking at the IOPSKeys.h header, I expect to get one of "Poor", "Fair", or "Good" for the value of kIOPSBatteryHealthKey. https://opensource.apple.com/source/IOKitUser/IOKitUser-1845.81.1/ps.subproj/IOPSKeys.h.auto.html Instead, on my 2022 M2 Macbook Air running 13.2.1 (22D68), I get the following output: Name="InternalBattery-0" SerialNumber="F8Y2422145S10X2A7" BatteryHealth="Check Battery" At the same time, the "System Information app says "Condition: Normal". Am I missing something? This seems to be a bug, right? Should I look into filing a Technical Support Incident?
Replies
2
Boosts
0
Views
1.7k
Activity
Aug ’23
Usage of IOS Private APIs such as IOKit Framework
Hi, I am developping an app for IOS using React Native. I want to write a native modules in Swift and use Objective C to bridge the React Native JS functions with native component. In particular, i want to use IOKit framework to access such information as Battery Temperature and Battery Level. I read in many stackoverflow articles and in ChatGPT that the usage of IOS Private APIs are forbidden andd Apple will reject the app from AppStore and block the account. Is it true? Is there any legal way to use low level APIs and avoid to be rejected or blocked by Apple? The official Apple Technical Support is not responding me. I would really appreciate your help and support. Best Regards, Kamran
Replies
3
Boosts
1
Views
4.1k
Activity
Aug ’23
Get /dev file name from IOreg?
Hi. I have a class-compliant usb device which announces its serial number as m4121095, as per its kUSBSerialNumberString property. However, the file name it is provided is tty.usbmodemm41210951 – it's the serial number with an additional 1 at the end. What is the meaning of this appendage? (I'm tempted to believe that the 1 at the end is there in the unlikely case another device with the same SN is connected, but there's no way to test this possibility). In the end, I would like to obtain a filename that is guaranteed to be representing a connection to exactly this device. Can I assume that the filename of a device that follows the same protocol of serial numbering will be consistently appended with a number that can in some way be inferred? Thank you.
Replies
5
Boosts
0
Views
2.1k
Activity
Jul ’23
importing HID Driver Kit Framework
Hi everyone, I am fairly new to Apple development. I have been working on a project where I need Mac to interface with an HID device (custom device). I have successfully communicated with the device using IOKit, Core Foundation and Driver Kit frameworks by simply importing these frameworks in the project and making use of their APIs. However, my client is now asking that I develop the communication explicitly using HID Driver Kit. Bear in mind that I have not purchased the apple developer certificate nor do I have any provisional signing certificates and without any of these, Xcode was allowing me to use frameworks like IOKit, DriverKit etc. Now, when I tried importing HIDDriverKit into the project, I am not able to find this framework in the "Frameworks and Libraries" tab. How do I import this framework into my project? Do I have to purchase apple developer ID or get the provisional signing certificates or any other formalities are required? Please let me know what can be done. Any pointers or suggestions are welcome. Best, Vishnu
Replies
3
Boosts
0
Views
1.6k
Activity
Jul ’23
Does DriverKit work on iPads with M2 or newer Apple Silicon chipsets?
In Apple Developer Documentation / DriverKit, Notes that "The base DriverKit framework is available ... and iPadOS for devices with an M1 processor.", There is no mention of the M2 and subsequent Apple Silicon chipsets, Does DriverKit work on iPads with M2 and subsequent Apple Silicon chipsets? Apple Developer Documentation / DriverKit : https://developer.apple.com/documentation/driverkit
Replies
1
Boosts
0
Views
1.3k
Activity
Jul ’23
Interaction between iPhone and Mac/PC via USB - How?
I'm interested in exploring the idea of connecting an iPhone to a Mac/PC. The initial idea is to allow a computer to access/use the iPhones camera and microphone, but I guess I would also be interested in knowing more about how the communication between an iPhone and Mac/PC could work in a general sense too. There are many posts talking about an iPhone integrating with external hardware devices and MFI is mentioned as well as Redpark cables - but I'm not sure if these same things apply when working with a Mac/PC. So, some questions: What protocols, technologies or frameworks would I use send audio and video from an iPhone and a Mac using a USB cable (if the type of cable matters or makes a difference (ie USB-C vs USB-A), please call it out - but I think it's very likely the type of cable wouldn't make any difference) What protocols, technologies or frameworks would I use to send commands from a Mac to the iPhone using USB so that it can be handled by the iOS app It appears that developers are not able to send raw USB protocol/messages/packets unless the developer is a part of MFI, is that correct? Is there another way to achieve this communication? E.g. with some type of "middle-man" (ie a Redpark cable? some other device?) I've seen iOS applications that turn your phone into a webcam (they usually offer connectivity over USB and over the network (NDI)) - these applications require additional downloads on the Mac/PC. My assumption is that the iOS application is sending messages/packets to the Mac/PC application, and the Mac/PC application is then handling all the work to expose that video/auidio stream as a "camera" device to the system. Would this be the only way to achieve this functionality? Could you expose an iOS application as a camera to a Mac (ignoring PC for now) in a native way, so that it would work the same way it does when you plug in a webcam? Is this possible with MFI alone, or is this possible with a third party device (cable/hardware) in between the iPhone and Mac?
Replies
14
Boosts
0
Views
7.5k
Activity
May ’23
Release ExclusiveAccess to an usb device taken by another application?
Seems like both Dropbox and Google Drive has a pretty sad implementation/bug that acquire exclusive access to USB devices that expose MTP (media transfer protocol). The way google and dropbox did it is just wrong as they 1) should ask for permission for reading data on new devices, 2) not open the usb device in exclusive mode... 3) make use of MTP's Multi-Session mode. Well, as it will take them about 4.5 years to correct this, I wonder if there is a way for a app-store/user-space application in macOS 11/12/13 (big sur, monterey, ventura) to do the following: Detect if there is another app that has exclusive lock to a specific usb device Get the name of the app so that an alert could say, "please quit google-drive for this to work..." Release the exclusive lock, i.e. hand over the usb peripheral to my application
Replies
0
Boosts
0
Views
1.6k
Activity
Apr ’23
In macOS 13.1, how to communicate with USB billboard device
In macOS 13.1 environment, all IOUSBDevice devices in the current system can be found via the IOServiceAddMatchingNotification function. In the registered callback function, properties such as idVendor, idProduct, and locationID of the device can be read. However, when calling the IOCreatePlugInInterfaceForService function, for USB HID and USB HID devices, a successful status of 0x00000000(kIOReturnSuccess) is returned, but for usb billboard device(type-c ,only have control pipe), an error of 0xe00002be(kIOReturnNoResources) is always returned. Thanks a lot !
Replies
1
Boosts
0
Views
1.8k
Activity
Apr ’23
Cannot retrieve the information from iPad device
I am working on an iOS application for internal corporate iPad usage, and I am facing some challenges in getting certain device information programmatically. I was hoping someone could provide me with some guidance or advice on the following coding topics: How can I obtain the "Cellular Data and WiFi Signal Strength" in iPad programmatically, since there is no Apple API provided for this purpose? What is the method to retrieve the "Cellular Network Provider Name" in iPad programmatically after iOS 16 as CTCarrier is deprecated ? Is there a way to obtain the "Monthly Cellular Network Usage" in iPad programmatically, considering that the Network usage count keeps resetting on restart? How can I obtain the "Battery Health Status" in iPad programmatically, since no Apple API is provided for this purpose? Any help or suggestions on these topics would be greatly appreciated. Thank you in advance for your assistance.
Replies
1
Boosts
0
Views
853
Activity
Apr ’23
macos 13.3 get usb hid device, interface is 0, is not right
when I upgrade my mac os to version 13.3. I found the usb device interface number is always 0(error ,the right is non-0) when I use kUSBInterfaceNumber from hidapi library(https://github.com/libusb/hidapi). is anyone cause this problem .who can help me. thank you . static int32_t get_int_property(IOHIDDeviceRef device, CFStringRef key) { CFTypeRef ref; int32_t value; ref = IOHIDDeviceGetProperty(device, key); if (ref) { if (CFGetTypeID(ref) == CFNumberGetTypeID()) { CFNumberGetValue((CFNumberRef) ref, kCFNumberSInt32Type, &amp;value); return value; } else { printf("\nCFGetTypeID not equal!\n"); } } else { printf("\nref=%p\n",ref); } return 0; } cur_dev-&gt;interface_number = get_int_property(dev, CFSTR(kUSBInterfaceNumber));
Replies
1
Boosts
3
Views
1.7k
Activity
Apr ’23
Command line IOUserClient: C++, MacOS
Hi colleagues, I am trying to learn macOS kext programming. After some researches I've made a very simple IOKit kext which works. Now I want to try to make a command line client that could communicate with this kext. I created a new project in XCode as a C++ "Command Line Tool" and "HelloWorld" example compiles and builds fine. But, when I add #include <IOKit/IOLib.h>, I immediately got an error "File not found". I have added IOKit.framework to the "Frameworks and Libraries" but have no idea what to do next. Please help. I'd also appreciate any links with examples and/or documentation about how to make a simple kext and client for it. Thank you
Replies
1
Boosts
0
Views
1.3k
Activity
Mar ’23
Capturing USB traffic
Hi, I want to capture the USB traffic for my app running on High Sierra. I brought the if XHC20 up and can capture the traffic using Wireshark nightly builds. But I only see incoming traffic (from device to host) but not the other direction. Any ideas what is going wrong here?Starting the IF:&gt; sudo ifconfig XHC20 upAfter that I can select the IF in Wireshark and start capturing packets. I can see incoming traffic from attached devices but not the outbound messages.
Replies
8
Boosts
0
Views
16k
Activity
Mar ’23
Correct way to read out information about current energy usage battery&charger/adapter
I'm looking for a way to read out the current energy drain of various macOS devices that should be backwards compatible at least to macOS 12. So far I already had a couple of good idea – well initially I thought so – to get that data from ioreg or IOKit, reading out AppleSmartBattery object. I'm trying to write a small program in Rust that collects the energy usage of our companies macOS devices and record this how much happened while in the office and how much on the road. Therefore I need to consider cases where the battery is charging as well as the battery is full and energy is drawn from the power adapter or usb-c connected display directly via PD. So far I was able to read the desired data out via ioreg with plist output and parse the information into a struct. The issue I have testing this out that my 1st approach of going for PowerTelemetryData which would be perfect is only available on macOS 13+ systems. The second approach reading out the subobjects of BatterData and PowerOutDetails seem to only be available on macOS 12 devices now and then. Any suggestions or hints?
Replies
1
Boosts
0
Views
1.3k
Activity
Feb ’23
stop charging while plugged in
Is it possible to change the internal operating system of apple's charging methods? So if I want to make an app or some code to make a MacBook stop charging at a certain percentage while it's still plugged in and then let the battery drain until 20%, it automatically starts charging again to 80%. All while it's plugged in. Does apple allow this? to make something like this?
Replies
2
Boosts
0
Views
1.3k
Activity
Feb ’23
Reading EDID data on Apple M1 devices
Is there any way to read EDID data in new Apple M1 devices since the below code snippet does not work in M1 machines however it works in Intel based Mac. io_object_t object = -1;       io_iterator_t iterator;     CFMutableDictionaryRef matching = IOServiceMatching("IODisplayConnect");     kern_return_t kernResult = IOServiceGetMatchingServices(kIOMasterPortDefault, matching, &amp;amp;iterator);       if (KERN_SUCCESS == kernResult &amp;amp;&amp;amp; iterator != 0) {           object = IOIteratorNext(iterator);           while (object != 0) {               CFDictionaryRef dict = IODisplayCreateInfoDictionary(object, kIODisplayOnlyPreferredName);       /*        process data here        */               object = IOIteratorNext(iterator);     }     IOObjectRelease(iterator);   } Also tried replacing "IODisplayConnect" by "IODPDevice" but still get an empty iterator.
Replies
5
Boosts
0
Views
5.8k
Activity
Feb ’23
Improving battery reading when the machine wakes.
I am using the CFProperty "AppleRawCurrentCapacity" value from IOServiceGetMathcingService( kIOMainPortDefault, IOServiceMatching( "AppleSmartBattery" ) ) to obtain the mAh value of the MacBook's battery. Once when the app receives the NSWorkspace notification of display sleep, and once again when receiving the NSWorkspace notification of display wake. I then calculate how much battery was expended during sleep by deducting the pre value from post value. The results can wildly vary, from it using 16 mAh per hour, to gaining 10 mAh an hour (without being plugged in). Sometimes a 10 hour sleep doesn't use any mAh... Which is clearly wrong. When my app detects the key kIOPMPSInvalidWakeSecondsKey is present, I set a timer for that period + 3 seconds and attempt to read the battery values again. Yet the results can still wildly vary. I see on Intel Macs there is a kIOPMPSMaxErrKey (set to 9 on a 2019 16"), however I don't see this on M1, and don't know how it can help, if it does exist. Can anyone give me any pointers as to what I am doing wrong, or in the direction of obtaining reliable mAh values? I like mAh as it's more precise that the standard integer values of 0 - 100, but I don't have to stick with mAh, I'd just don't like reporting that a 16 hour sleep didn't use any battery, when I know it's not true. Thanks
Replies
1
Boosts
0
Views
1.4k
Activity
Jan ’23
iPad 10th Gen and IOKitLib/IOHIDManager
I'm creating an iPad room information app which needs to communicate over USB with an LED light strip. The USB controller is HID class, vendor ID is 0x20a0 and product ID is 0x41e5. It requires sending a simple feature report to control the LEDs. I've got it working on the Mac using IOKit, and compiling on the 10th gen USB C iPad using copied headers and bridging IOKitLib and IOHIDManager, but sandboxing prevents the code executing on the iPad (IOServiceOpen failed: 0xe00002e2). Is joining the MFi program really the only way to get this to get the necessary entitlements? At our current scale, we don't need to distribute in the App Store.
Replies
0
Boosts
0
Views
1.8k
Activity
Jan ’23