179 lines
6.4 KiB
Factor
Executable File
179 lines
6.4 KiB
Factor
Executable File
USING: alien.syntax alien.c-types core-foundation
|
|
core-foundation.bundles core-foundation.dictionaries system
|
|
combinators kernel sequences io accessors ;
|
|
IN: iokit
|
|
|
|
<<
|
|
os macosx?
|
|
[ "/System/Library/Frameworks/IOKit.framework" load-framework ]
|
|
when
|
|
>>
|
|
|
|
CONSTANT: kIOKitBuildVersionKey "IOKitBuildVersion"
|
|
CONSTANT: kIOKitDiagnosticsKey "IOKitDiagnostics"
|
|
|
|
CONSTANT: kIORegistryPlanesKey "IORegistryPlanes"
|
|
CONSTANT: kIOCatalogueKey "IOCatalogue"
|
|
|
|
CONSTANT: kIOServicePlane "IOService"
|
|
CONSTANT: kIOPowerPlane "IOPower"
|
|
CONSTANT: kIODeviceTreePlane "IODeviceTree"
|
|
CONSTANT: kIOAudioPlane "IOAudio"
|
|
CONSTANT: kIOFireWirePlane "IOFireWire"
|
|
CONSTANT: kIOUSBPlane "IOUSB"
|
|
|
|
CONSTANT: kIOServiceClass "IOService"
|
|
|
|
CONSTANT: kIOResourcesClass "IOResources"
|
|
|
|
CONSTANT: kIOClassKey "IOClass"
|
|
CONSTANT: kIOProbeScoreKey "IOProbeScore"
|
|
CONSTANT: kIOKitDebugKey "IOKitDebug"
|
|
|
|
CONSTANT: kIOProviderClassKey "IOProviderClass"
|
|
CONSTANT: kIONameMatchKey "IONameMatch"
|
|
CONSTANT: kIOPropertyMatchKey "IOPropertyMatch"
|
|
CONSTANT: kIOPathMatchKey "IOPathMatch"
|
|
CONSTANT: kIOLocationMatchKey "IOLocationMatch"
|
|
CONSTANT: kIOParentMatchKey "IOParentMatch"
|
|
CONSTANT: kIOResourceMatchKey "IOResourceMatch"
|
|
CONSTANT: kIOMatchedServiceCountKey "IOMatchedServiceCountMatch"
|
|
|
|
CONSTANT: kIONameMatchedKey "IONameMatched"
|
|
|
|
CONSTANT: kIOMatchCategoryKey "IOMatchCategory"
|
|
CONSTANT: kIODefaultMatchCategoryKey "IODefaultMatchCategory"
|
|
|
|
CONSTANT: kIOUserClientClassKey "IOUserClientClass"
|
|
|
|
CONSTANT: kIOUserClientCrossEndianKey "IOUserClientCrossEndian"
|
|
CONSTANT: kIOUserClientCrossEndianCompatibleKey "IOUserClientCrossEndianCompatible"
|
|
CONSTANT: kIOUserClientSharedInstanceKey "IOUserClientSharedInstance"
|
|
|
|
CONSTANT: kIOPublishNotification "IOServicePublish"
|
|
CONSTANT: kIOFirstPublishNotification "IOServiceFirstPublish"
|
|
CONSTANT: kIOMatchedNotification "IOServiceMatched"
|
|
CONSTANT: kIOFirstMatchNotification "IOServiceFirstMatch"
|
|
CONSTANT: kIOTerminatedNotification "IOServiceTerminate"
|
|
|
|
CONSTANT: kIOGeneralInterest "IOGeneralInterest"
|
|
CONSTANT: kIOBusyInterest "IOBusyInterest"
|
|
CONSTANT: kIOAppPowerStateInterest "IOAppPowerStateInterest"
|
|
CONSTANT: kIOPriorityPowerStateInterest "IOPriorityPowerStateInterest"
|
|
|
|
CONSTANT: kIOPlatformDeviceMessageKey "IOPlatformDeviceMessage"
|
|
|
|
CONSTANT: kIOCFPlugInTypesKey "IOCFPlugInTypes"
|
|
|
|
CONSTANT: kIOCommandPoolSizeKey "IOCommandPoolSize"
|
|
|
|
CONSTANT: kIOMaximumBlockCountReadKey "IOMaximumBlockCountRead"
|
|
CONSTANT: kIOMaximumBlockCountWriteKey "IOMaximumBlockCountWrite"
|
|
CONSTANT: kIOMaximumByteCountReadKey "IOMaximumByteCountRead"
|
|
CONSTANT: kIOMaximumByteCountWriteKey "IOMaximumByteCountWrite"
|
|
CONSTANT: kIOMaximumSegmentCountReadKey "IOMaximumSegmentCountRead"
|
|
CONSTANT: kIOMaximumSegmentCountWriteKey "IOMaximumSegmentCountWrite"
|
|
CONSTANT: kIOMaximumSegmentByteCountReadKey "IOMaximumSegmentByteCountRead"
|
|
CONSTANT: kIOMaximumSegmentByteCountWriteKey "IOMaximumSegmentByteCountWrite"
|
|
CONSTANT: kIOMinimumSegmentAlignmentByteCountKey "IOMinimumSegmentAlignmentByteCount"
|
|
CONSTANT: kIOMaximumSegmentAddressableBitCountKey "IOMaximumSegmentAddressableBitCount"
|
|
|
|
CONSTANT: kIOIconKey "IOIcon"
|
|
CONSTANT: kIOBundleResourceFileKey "IOBundleResourceFile"
|
|
|
|
CONSTANT: kIOBusBadgeKey "IOBusBadge"
|
|
CONSTANT: kIODeviceIconKey "IODeviceIcon"
|
|
|
|
CONSTANT: kIOPlatformSerialNumberKey "IOPlatformSerialNumber"
|
|
|
|
CONSTANT: kIOPlatformUUIDKey "IOPlatformUUID"
|
|
|
|
CONSTANT: kIONVRAMDeletePropertyKey "IONVRAM-DELETE-PROPERTY"
|
|
CONSTANT: kIODTNVRAMPanicInfoKey "aapl,panic-info"
|
|
|
|
CONSTANT: kIOBootDeviceKey "IOBootDevice"
|
|
CONSTANT: kIOBootDevicePathKey "IOBootDevicePath"
|
|
CONSTANT: kIOBootDeviceSizeKey "IOBootDeviceSize"
|
|
|
|
CONSTANT: kOSBuildVersionKey "OS Build Version"
|
|
|
|
CONSTANT: kNilOptions 0
|
|
|
|
TYPEDEF: uint mach_port_t
|
|
TYPEDEF: int kern_return_t
|
|
TYPEDEF: int boolean_t
|
|
TYPEDEF: mach_port_t io_object_t
|
|
TYPEDEF: io_object_t io_iterator_t
|
|
TYPEDEF: io_object_t io_registry_entry_t
|
|
TYPEDEF: io_object_t io_service_t
|
|
TYPEDEF: char[128] io_name_t
|
|
TYPEDEF: char[512] io_string_t
|
|
TYPEDEF: kern_return_t IOReturn
|
|
|
|
TYPEDEF: uint IOOptionBits
|
|
|
|
CONSTANT: MACH_PORT_NULL 0
|
|
CONSTANT: KERN_SUCCESS 0
|
|
|
|
FUNCTION: IOReturn IOMasterPort ( mach_port_t bootstrap, mach_port_t* master ) ;
|
|
|
|
FUNCTION: CFDictionaryRef IOServiceMatching ( char* name ) ;
|
|
FUNCTION: CFDictionaryRef IOServiceNameMatching ( char* name ) ;
|
|
FUNCTION: CFDictionaryRef IOBSDNameMatching ( char* name ) ;
|
|
|
|
FUNCTION: IOReturn IOObjectRetain ( io_object_t o ) ;
|
|
FUNCTION: IOReturn IOObjectRelease ( io_object_t o ) ;
|
|
|
|
FUNCTION: IOReturn IOServiceGetMatchingServices ( mach_port_t master, CFDictionaryRef matchingDict, io_iterator_t* iterator ) ;
|
|
|
|
FUNCTION: io_object_t IOIteratorNext ( io_iterator_t i ) ;
|
|
FUNCTION: void IOIteratorReset ( io_iterator_t i ) ;
|
|
FUNCTION: boolean_t IOIteratorIsValid ( io_iterator_t i ) ;
|
|
|
|
FUNCTION: IOReturn IORegistryEntryGetPath ( io_registry_entry_t entry, io_name_t plane, io_string_t path ) ;
|
|
|
|
FUNCTION: IOReturn IORegistryEntryCreateCFProperties ( io_registry_entry_t entry, CFMutableDictionaryRef properties, CFAllocatorRef allocator, IOOptionBits options ) ;
|
|
|
|
FUNCTION: char* mach_error_string ( IOReturn error ) ;
|
|
|
|
TUPLE: mach-error error-code error-string ;
|
|
: <mach-error> ( code -- error )
|
|
dup mach_error_string \ mach-error boa ;
|
|
|
|
: mach-error ( return -- )
|
|
dup KERN_SUCCESS = [ drop ] [ <mach-error> throw ] if ;
|
|
|
|
: master-port ( -- port )
|
|
MACH_PORT_NULL 0 <uint> [ IOMasterPort mach-error ] keep *uint ;
|
|
|
|
: io-services-matching-dictionary ( nsdictionary -- iterator )
|
|
master-port swap 0 <uint>
|
|
[ IOServiceGetMatchingServices mach-error ] keep
|
|
*uint ;
|
|
|
|
: io-services-matching-service ( service -- iterator )
|
|
IOServiceMatching io-services-matching-dictionary ;
|
|
: io-services-matching-service-name ( service-name -- iterator )
|
|
IOServiceNameMatching io-services-matching-dictionary ;
|
|
: io-services-matching-bsd-name ( bsd-name -- iterator )
|
|
IOBSDNameMatching io-services-matching-dictionary ;
|
|
|
|
: retain-io-object ( o -- o )
|
|
[ IOObjectRetain mach-error ] keep ;
|
|
: release-io-object ( o -- )
|
|
IOObjectRelease mach-error ;
|
|
|
|
: io-objects-from-iterator* ( i -- i array )
|
|
[ dup IOIteratorNext dup MACH_PORT_NULL = not ] [ ] produce nip ;
|
|
|
|
: io-objects-from-iterator ( i -- array )
|
|
io-objects-from-iterator* [ release-io-object ] dip ;
|
|
|
|
: properties-from-io-object ( o -- o nsdictionary )
|
|
dup f <void*> [
|
|
kCFAllocatorDefault kNilOptions
|
|
IORegistryEntryCreateCFProperties mach-error
|
|
]
|
|
keep *void* ;
|
|
|