]> gitweb.factorcode.org Git - factor.git/blob - extra/iokit/iokit.factor
Merge OneEyed's patch
[factor.git] / extra / iokit / iokit.factor
1 USING: alien.syntax alien.c-types core-foundation
2 core-foundation.bundles core-foundation.dictionaries system
3 combinators kernel sequences debugger io accessors ;
4 IN: iokit
5
6 <<
7     os macosx?
8     [ "/System/Library/Frameworks/IOKit.framework" load-framework ]
9     when
10 >>
11
12 CONSTANT: kIOKitBuildVersionKey   "IOKitBuildVersion"
13 CONSTANT: kIOKitDiagnosticsKey   "IOKitDiagnostics"
14  
15 CONSTANT: kIORegistryPlanesKey   "IORegistryPlanes"
16 CONSTANT: kIOCatalogueKey    "IOCatalogue"
17
18 CONSTANT: kIOServicePlane    "IOService"
19 CONSTANT: kIOPowerPlane    "IOPower"
20 CONSTANT: kIODeviceTreePlane   "IODeviceTree"
21 CONSTANT: kIOAudioPlane    "IOAudio"
22 CONSTANT: kIOFireWirePlane   "IOFireWire"
23 CONSTANT: kIOUSBPlane    "IOUSB"
24
25 CONSTANT: kIOServiceClass    "IOService"
26
27 CONSTANT: kIOResourcesClass   "IOResources"
28
29 CONSTANT: kIOClassKey    "IOClass"
30 CONSTANT: kIOProbeScoreKey   "IOProbeScore"
31 CONSTANT: kIOKitDebugKey    "IOKitDebug"
32
33 CONSTANT: kIOProviderClassKey   "IOProviderClass"
34 CONSTANT: kIONameMatchKey    "IONameMatch"
35 CONSTANT: kIOPropertyMatchKey   "IOPropertyMatch"
36 CONSTANT: kIOPathMatchKey    "IOPathMatch"
37 CONSTANT: kIOLocationMatchKey   "IOLocationMatch"
38 CONSTANT: kIOParentMatchKey   "IOParentMatch"
39 CONSTANT: kIOResourceMatchKey   "IOResourceMatch"
40 CONSTANT: kIOMatchedServiceCountKey  "IOMatchedServiceCountMatch"
41
42 CONSTANT: kIONameMatchedKey   "IONameMatched"
43
44 CONSTANT: kIOMatchCategoryKey   "IOMatchCategory"
45 CONSTANT: kIODefaultMatchCategoryKey  "IODefaultMatchCategory"
46
47 CONSTANT: kIOUserClientClassKey   "IOUserClientClass"
48
49 CONSTANT: kIOUserClientCrossEndianKey   "IOUserClientCrossEndian"
50 CONSTANT: kIOUserClientCrossEndianCompatibleKey  "IOUserClientCrossEndianCompatible"
51 CONSTANT: kIOUserClientSharedInstanceKey   "IOUserClientSharedInstance"
52
53 CONSTANT: kIOPublishNotification   "IOServicePublish"
54 CONSTANT: kIOFirstPublishNotification  "IOServiceFirstPublish"
55 CONSTANT: kIOMatchedNotification   "IOServiceMatched"
56 CONSTANT: kIOFirstMatchNotification  "IOServiceFirstMatch"
57 CONSTANT: kIOTerminatedNotification  "IOServiceTerminate"
58
59 CONSTANT: kIOGeneralInterest   "IOGeneralInterest"
60 CONSTANT: kIOBusyInterest    "IOBusyInterest"
61 CONSTANT: kIOAppPowerStateInterest  "IOAppPowerStateInterest"
62 CONSTANT: kIOPriorityPowerStateInterest  "IOPriorityPowerStateInterest"
63
64 CONSTANT: kIOPlatformDeviceMessageKey "IOPlatformDeviceMessage"
65
66 CONSTANT: kIOCFPlugInTypesKey   "IOCFPlugInTypes"
67
68 CONSTANT: kIOCommandPoolSizeKey         "IOCommandPoolSize"
69
70 CONSTANT: kIOMaximumBlockCountReadKey "IOMaximumBlockCountRead"
71 CONSTANT: kIOMaximumBlockCountWriteKey "IOMaximumBlockCountWrite"
72 CONSTANT: kIOMaximumByteCountReadKey "IOMaximumByteCountRead"
73 CONSTANT: kIOMaximumByteCountWriteKey "IOMaximumByteCountWrite"
74 CONSTANT: kIOMaximumSegmentCountReadKey "IOMaximumSegmentCountRead"
75 CONSTANT: kIOMaximumSegmentCountWriteKey "IOMaximumSegmentCountWrite"
76 CONSTANT: kIOMaximumSegmentByteCountReadKey "IOMaximumSegmentByteCountRead"
77 CONSTANT: kIOMaximumSegmentByteCountWriteKey "IOMaximumSegmentByteCountWrite"
78 CONSTANT: kIOMinimumSegmentAlignmentByteCountKey "IOMinimumSegmentAlignmentByteCount"
79 CONSTANT: kIOMaximumSegmentAddressableBitCountKey "IOMaximumSegmentAddressableBitCount"
80
81 CONSTANT: kIOIconKey "IOIcon"
82 CONSTANT: kIOBundleResourceFileKey "IOBundleResourceFile"
83
84 CONSTANT: kIOBusBadgeKey "IOBusBadge"
85 CONSTANT: kIODeviceIconKey "IODeviceIcon"
86
87 CONSTANT: kIOPlatformSerialNumberKey  "IOPlatformSerialNumber" 
88
89 CONSTANT: kIOPlatformUUIDKey  "IOPlatformUUID" 
90
91 CONSTANT: kIONVRAMDeletePropertyKey  "IONVRAM-DELETE-PROPERTY"
92 CONSTANT: kIODTNVRAMPanicInfoKey   "aapl,panic-info"
93
94 CONSTANT: kIOBootDeviceKey "IOBootDevice"  
95 CONSTANT: kIOBootDevicePathKey "IOBootDevicePath" 
96 CONSTANT: kIOBootDeviceSizeKey "IOBootDeviceSize" 
97
98 CONSTANT: kOSBuildVersionKey   "OS Build Version"
99
100 CONSTANT: kNilOptions 0
101
102 TYPEDEF: uint mach_port_t
103 TYPEDEF: int kern_return_t
104 TYPEDEF: int boolean_t
105 TYPEDEF: mach_port_t io_object_t
106 TYPEDEF: io_object_t io_iterator_t
107 TYPEDEF: io_object_t io_registry_entry_t
108 TYPEDEF: io_object_t io_service_t
109 TYPEDEF: char[128] io_name_t
110 TYPEDEF: char[512] io_string_t
111 TYPEDEF: kern_return_t IOReturn
112
113 TYPEDEF: uint IOOptionBits
114
115 CONSTANT: MACH_PORT_NULL 0
116 CONSTANT: KERN_SUCCESS 0
117
118 FUNCTION: IOReturn IOMasterPort ( mach_port_t bootstrap, mach_port_t* master ) ;
119
120 FUNCTION: CFDictionaryRef IOServiceMatching ( char* name ) ;
121 FUNCTION: CFDictionaryRef IOServiceNameMatching ( char* name ) ;
122 FUNCTION: CFDictionaryRef IOBSDNameMatching ( char* name ) ;
123
124 FUNCTION: IOReturn IOObjectRetain ( io_object_t o ) ;
125 FUNCTION: IOReturn IOObjectRelease ( io_object_t o ) ;
126
127 FUNCTION: IOReturn IOServiceGetMatchingServices ( mach_port_t master, CFDictionaryRef matchingDict, io_iterator_t* iterator ) ;
128
129 FUNCTION: io_object_t IOIteratorNext ( io_iterator_t i ) ;
130 FUNCTION: void IOIteratorReset ( io_iterator_t i ) ;
131 FUNCTION: boolean_t IOIteratorIsValid ( io_iterator_t i ) ;
132
133 FUNCTION: IOReturn IORegistryEntryGetPath ( io_registry_entry_t entry, io_name_t plane, io_string_t path ) ;
134
135 FUNCTION: IOReturn IORegistryEntryCreateCFProperties ( io_registry_entry_t entry, CFMutableDictionaryRef properties, CFAllocatorRef allocator, IOOptionBits options ) ;
136
137 FUNCTION: char* mach_error_string ( IOReturn error ) ;
138
139 TUPLE: mach-error error-code ;
140 C: <mach-error> mach-error
141
142 M: mach-error error.
143     "IOKit call failed: " print error-code>> mach_error_string print ;
144
145 : mach-error ( return -- )
146     dup KERN_SUCCESS = [ drop ] [ <mach-error> throw ] if ;
147
148 : master-port ( -- port )
149     MACH_PORT_NULL 0 <uint> [ IOMasterPort mach-error ] keep *uint ;
150
151 : io-services-matching-dictionary ( nsdictionary -- iterator )
152     master-port swap 0 <uint>
153     [ IOServiceGetMatchingServices mach-error ] keep
154     *uint ;
155
156 : io-services-matching-service ( service -- iterator )
157     IOServiceMatching io-services-matching-dictionary ;
158 : io-services-matching-service-name ( service-name -- iterator )
159     IOServiceNameMatching io-services-matching-dictionary ;
160 : io-services-matching-bsd-name ( bsd-name -- iterator )
161     IOBSDNameMatching io-services-matching-dictionary ;
162
163 : retain-io-object ( o -- o )
164     [ IOObjectRetain mach-error ] keep ;
165 : release-io-object ( o -- )
166     IOObjectRelease mach-error ;
167
168 : io-objects-from-iterator* ( i -- i array )
169     [ dup IOIteratorNext dup MACH_PORT_NULL = not ] [ ] produce nip ;
170
171 : io-objects-from-iterator ( i -- array )
172     io-objects-from-iterator* [ release-io-object ] dip ;
173     
174 : properties-from-io-object ( o -- o nsdictionary )
175     dup f <void*> [
176         kCFAllocatorDefault kNilOptions
177         IORegistryEntryCreateCFProperties mach-error
178     ]
179     keep *void* ;
180