swift - 如何读取屏幕EDID数据?

标签 swift macos

我正在尝试解析屏幕 EDID 信息。不幸的是,它不是任何常见的编码数据。 您是否知道如何将“IODisplayEDID”中的数据转换为可读的内容?也许是“字典”?

这是我的代码:

    var object : io_object_t
    var serialPortIterator = io_iterator_t()
    let matching = IOServiceMatching("IODisplayConnect")

    let kernResult = IOServiceGetMatchingServices(kIOMasterPortDefault,
                                                  matching,
                                                  &serialPortIterator)
    if KERN_SUCCESS == kernResult && serialPortIterator != 0 {
        repeat {
            object = IOIteratorNext(serialPortIterator)
            let info = IODisplayCreateInfoDictionary(object, UInt32(kIODisplayOnlyPreferredName)).takeRetainedValue() as NSDictionary as! [String:AnyObject]

            if let displayEDID = info["IODisplayEDID"] as? Data {

                print(displayEDID) // <-- How do I parse this data correctly?
            }

        } while object != 0
    }
    IOObjectRelease(serialPortIterator)

最佳答案

好吧,基本上我使用了评论中提供的 wiki 引用 Eric Aya。我按照指定的顺序读取8-9个字节,以提取字母表字母的树号。在我的 Mac 上,结果显示为“APP”,我猜这意味着制造商是 Apple。

            if let displayEDID = info["IODisplayEDID"] as? Data {

                let array = Array(displayEDID)

                var bits : UInt16 = UInt16(array[8])
                bits = bits << 8  + UInt16(array[9])

                let thirdLetterIndex = Int(bits & 31)
                let secondLetterIndex = Int(bits >> 5 & 31)
                let firsLetterIndex = Int(bits >> 10 & 31)


                let chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters.flatMap { $0.description }
                let manufactorer = chars[firsLetterIndex - 1] + chars[secondLetterIndex - 1] + chars[thirdLetterIndex - 1]


                print(manufactorer) // Result for my mac is "APP"
            }

关于swift - 如何读取屏幕EDID数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45100439/

相关文章:

ios - 在 UISplitViewController 应用程序中从 DetailViewController 获取 MasterViewController

ios - NSDateFormatter 在 iOS 7 上失败,适用于更高版本

ios - NS_Deprecated 等效于 3rd 方框架

macos - 在 shell 脚本中执行 Vim 命令

ios - 为什么除非我将此函数的结果分配给类变量,否则不会调用此回调

ios - 如何以模态方式呈现透明的 UINavigationController + root?

ios - 按钮角半径在 iOS 中不起作用

macos - 如何增加Neo4j图形数据库的最大打开文件Mac OSX 10.6?

macos - 将基于 View 的 NSOutlineView 绑定(bind)到 Core Data

objective-c - 如何在 Lion 中自动隐藏 NSScroller?