- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 MacOS 下使用 IOKit 确定虚拟串口的 BSD 名称。
我有一个看起来像虚拟串行端口的 USB CDC 设备,我想获取 BSD 设备路径,以便我可以执行 fopen("/dev/tty.usbmodem123")。我有一个程序,它接受 VID 和 PID 并等待设备插入,然后我想使用 BSD 名称写入设备。该设备在每个系统上的安装方式不同,我试图将其用作教学工具,因此我需要在写入之前搜索该设备,而无需手动检查/dev/tty.* 以了解设备的安装位置。
我有3个问题。
首先,可以使用CFSTR(kIOBSDNameKey)
来获取虚拟串口的BSD名称吗? ?IORegistryEntrySearchCFProperty()
和 FindProp()
总是返回“空”。有谁知道非块设备是否可以返回 BSD 名称?
我目前正在这样做:bsdName = IORegistryEntrySearchCFProperty(p_usb_ref, kIOServicePlane, CFSTR(kIOBSDNameKey), kCFAllocatorDefault, kIORegistryIterateRecursively );
其次,我已经能够获得服务平面名称:
IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/OHC1@4/AppleUSBOHCI/Intro to Electronics@4100000
这对应于一个挂载点:/dev/tty.usbmodem411
有谁知道如何将服务平面名称转换为开发树名称?
第三,我是否让这太复杂了?我已经知道设备 io 句柄,有没有办法使用它向设备写入数据?我只需要发送几个 ASCII 字节来使一些 LED 闪烁。
任何建议将不胜感激。EDIT:
花了一些时间查看这个之后,我发现我的问题是我在加载 CDC 驱动程序之前查询了 BSD 名称。我目前正在获取 BSD 名称,然后整理出 VID 和 PID。
上面解决了我的问题的代码是:
matchingDictionary = IOServiceMatching(kIOSerialBSDServiceValue);
CFDictionarySetValue(matchingDictionary, CFSTR(kIOSerialBSDTypeKey), CFSTR(kIOSerialBSDModemType));
kernResult = IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDictionary, &iter);
iter
找到具有正确 ID 的设备。
最佳答案
这是我在添加 USB 串行设备时与 IONotification 一起使用的内容:
在 10.11 下,它是空的。在尝试了很多事情之后,这是我的解决方案:
while ((usbDevice = IOIteratorNext(iterator)))
{
//when hotplugging under OSX 10.11:
sleep(1);//otherwise the property will be empty.
CFStringRef deviceBSDName_cf = (CFStringRef) IORegistryEntrySearchCFProperty (usbDevice,
kIOServicePlane,
CFSTR (kIOCalloutDeviceKey),
kCFAllocatorDefault,
kIORegistryIterateRecursively );
NSLog(@"device path: %@", deviceBSDName_cf);
}
关于macos - 使用 IOKit 获取 USB 设备的 BSD 名称以写入设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14841279/
所以一切都很好,然后我决定开始在 XCode 5 DP3 和 iOS7 上开发 在升级之前,我的项目在我的 iPhone 3GS 上编译并运行良好(我做了一个小软电话应用程序);然而,它没有在我的 i
我是 IOKit 的新手,并且注意到我认为是沙箱导致它失败。 这是我正在尝试的测试(在 Pascal 中),它在沙箱外运行良好,但当我启用它时,IOServiceOpen 每次都会返回错误 kIORe
我有 IOKit 基础驱动程序,它是非硬件触发的并且派生自 IOResources。它还使用 IOServiceOpen 向用户空间客户端类提供,但我认为这与我的问题无关......主驱动程序具有 I
我是一名开发人员,正在开发一个非常大的内存密集型 32 位应用程序。耗尽虚拟地址空间(内存)对我们来说是一个问题。在调查最近的一些问题时,我注意到有一大块内存被 IOKit (512MB) 保留。该内
如何使用 IOKit 获取 Mac 上的当前电源? 我想查看 Mac 是通过内置电池还是通过电源适配器运行。 最佳答案 IOPowerSources.h中的函数(具体来说,IOPSGetProvidi
我正在尝试掌握 IOKit,我觉得我已经很接近了,但还没有达到目标。所以请原谅我的困惑。 我已经成功编写了检测我的 USB 设备的代码(USB 电缆末端的一个简单按钮,有 Windows 驱动程序,但
我将尝试使用 IOKit 在 OS X 上为我的应用程序编写 USB 驱动程序。我选择了用户空间路线而不是开发 kext,因为它更容易调试等,但我在弄清楚如何测试驱动我的开发时遇到了困难。 如果可能,
我使用 IOKit API 检索 iOS 设备电池的原始数据。当我将我的 iPhone 更新到 iOS 10 测试版时,我发现它无法正常工作。只能显示电池电压,没有其他数据如maxCapacity、c
我正在使用:IOServiceGetMatchingServices kr = IOServiceGetMatchingServices(kIOMasterPortDefault, IOService
我正在使用 IOKit 框架通过用户空间客户端的 IOConnectCallMethod 和驱动程序端的 IOExternalMethodDispatch 与我的驱动程序通信。 到目前为止,我能够发送
我发现了几个出现相同问题的主题,但它们很老,而且大多数都没有明确的答案,或者答案仅适用于 iOS。还有一些消息来源说这是被禁止的,而其他人则不同意。 例如,here或 here about iOS .
我一直在尝试在添加或删除特定 USB 设备时收到通知。我已阅读“从应用程序访问硬件”文档,并有一个简单的演示应用程序,主要基于该文档中提供的代码。 第一次添加或删除设备时它会起作用,但此后我的回调永远
我目前正在 10.6.7 上开发一个应用程序,当插入新的 USB 设备时,该应用程序应该收到通知。我发现有一个 IOKit 函数可以处理“IOServiceAddMatchingNotificatio
我在使用 IOPowerSources 及其文档时遇到了非常困难的事情。 我的问题是,好吧,我无法弄清楚 IOPowerSources 的该死导入。我正在阅读: http://developer.ap
在编译基于 IOKit 的内核扩展时,c++ 编译器无法识别关键字 decltype。 int f = 123; int (*f_ptr)() = 0; f_ptr = (decltype(f_pt
我正在尝试了解 IOKit 以及它如何允许我访问 Swift 程序中的串行端口。 我现在正在操作的类如下: import Foundation import Cocoa import IOKit.se
我目前正在学习如何编写 os x 内核扩展(在 Xcode 中),如果我有任何错误,我深表歉意。我正在寻找一个示例,说明如何编写一个 IOKit 驱动程序,该驱动程序可以在系统中注册一个虚拟存储设备(
我编写了一个 Objective-C POS,它需要与许多以太网设备(如条形码扫描仪、燃油泵、现金抽屉等)交互。我知道我可能必须为每个设备用 C++ 编写驱动程序。问题是我不知道如何编写以太网设备驱动
我正在开发一个使用 IOKit 获取电池信息的调整,但它无法构建。 Undefined symbols for architecture armv7: "_IOPSCopyPowerSources
我正在为我的 Mac 应用程序使用沙盒。我需要像这样为 IOKit 设置一个属性, IORegistryEntrySetCFProperty(reg, CFSTR("IORequestIdle"),
我是一名优秀的程序员,十分优秀!