StikJIT/Sources/ProcessInfo+TXM.swift
2026-08-18 11:03:43 -06:00

42 lines
1.1 KiB
Swift

import Foundation
@_implementationOnly import StikJITIOKit
enum TXMPresence {
case present
case absent
case unknown
init(isPresent: Bool?) {
guard let isPresent else {
self = .unknown
return
}
self = isPresent ? .present : .absent
}
var isPresent: Bool? {
switch self {
case .present: return true
case .absent: return false
case .unknown: return nil
}
}
}
extension ProcessInfo {
var txmPresence: TXMPresence {
let memoryMap = IORegistryEntryFromPath(kIOMainPortDefault, "IODeviceTree:/chosen/memory-map")
guard memoryMap != 0 else { return .unknown }
let keysCF = IORegistryEntryCreateCFProperty(
memoryMap,
kIORegistryEntryPropertyKeysKey as CFString,
kCFAllocatorDefault,
0
)?.takeRetainedValue()
IOObjectRelease(memoryMap)
guard let keys = keysCF as? [String] else { return .unknown }
return keys.contains("TXM") ? .present : .absent
}
}