Mercurial > sdl-ios-xcode
comparison src/joystick/darwin/10.3.9-FIX/IOHIDLib.h @ 4104:e3945f84427f SDL-1.2
Fixed fatbuild.sh script for building on Mac OS X 10.5
The minimum PPC SDK is 10.3.9
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Fri, 28 Dec 2007 20:39:31 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
4103:9df8136abec0 | 4104:e3945f84427f |
---|---|
1 /* *INDENT-OFF* */ | |
2 /* | |
3 * | |
4 * @APPLE_LICENSE_HEADER_START@ | |
5 * | |
6 * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. | |
7 * | |
8 * This file contains Original Code and/or Modifications of Original Code | |
9 * as defined in and that are subject to the Apple Public Source License | |
10 * Version 2.0 (the 'License'). You may not use this file except in | |
11 * compliance with the License. Please obtain a copy of the License at | |
12 * http://www.opensource.apple.com/apsl/ and read it before using this | |
13 * file. | |
14 * | |
15 * The Original Code and all software distributed under the License are | |
16 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER | |
17 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, | |
18 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
19 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. | |
20 * Please see the License for the specific language governing rights and | |
21 * limitations under the License. | |
22 * | |
23 * @APPLE_LICENSE_HEADER_END@ | |
24 */ | |
25 | |
26 #ifndef _IOKIT_HID_IOHIDLIB_H_ | |
27 #define _IOKIT_HID_IOHIDLIB_H_ | |
28 | |
29 #include <sys/cdefs.h> | |
30 | |
31 __BEGIN_DECLS | |
32 #include <CoreFoundation/CoreFoundation.h> | |
33 #if COREFOUNDATION_CFPLUGINCOM_SEPARATE | |
34 #include <CoreFoundation/CFPlugInCOM.h> | |
35 #endif | |
36 | |
37 #include <IOKit/IOTypes.h> | |
38 #include <IOKit/IOReturn.h> | |
39 | |
40 #include <IOKit/hid/IOHIDKeys.h> | |
41 | |
42 struct IOHIDEventStruct | |
43 { | |
44 IOHIDElementType type; | |
45 IOHIDElementCookie elementCookie; | |
46 SInt32 value; | |
47 AbsoluteTime timestamp; | |
48 UInt32 longValueSize; | |
49 void * longValue; | |
50 }; | |
51 typedef struct IOHIDEventStruct IOHIDEventStruct; | |
52 | |
53 /* FA12FA38-6F1A-11D4-BA0C-0005028F18D5 */ | |
54 #define kIOHIDDeviceUserClientTypeID CFUUIDGetConstantUUIDWithBytes(NULL, \ | |
55 0xFA, 0x12, 0xFA, 0x38, 0x6F, 0x1A, 0x11, 0xD4, \ | |
56 0xBA, 0x0C, 0x00, 0x05, 0x02, 0x8F, 0x18, 0xD5) | |
57 | |
58 /* 13AA9C44-6F1B-11D4-907C-0005028F18D5 */ | |
59 #define kIOHIDDeviceFactoryID CFUUIDGetConstantUUIDWithBytes(NULL, \ | |
60 0x13, 0xAA, 0x9C, 0x44, 0x6F, 0x1B, 0x11, 0xD4, \ | |
61 0x90, 0x7C, 0x00, 0x05, 0x02, 0x8F, 0x18, 0xD5) | |
62 | |
63 /* 78BD420C-6F14-11D4-9474-0005028F18D5 */ | |
64 /*! @defined kIOHIDDeviceInterfaceID | |
65 @discussion Interface ID for the IOHIDDeviceInterface. Corresponds to an | |
66 available HID device. */ | |
67 #define kIOHIDDeviceInterfaceID CFUUIDGetConstantUUIDWithBytes(NULL, \ | |
68 0x78, 0xBD, 0x42, 0x0C, 0x6F, 0x14, 0x11, 0xD4, \ | |
69 0x94, 0x74, 0x00, 0x05, 0x02, 0x8F, 0x18, 0xD5) | |
70 | |
71 /* 7D0B510E-16D5-11D7-9E9B-000393992E38 */ | |
72 /*! @defined kIOHIDDeviceInterfaceID121 | |
73 @discussion Interface ID for the IOHIDDeviceInterface121. Corresponds to | |
74 an available HID device that includes methods from | |
75 IOHIDDeviceInterface. This interface is available on | |
76 IOHIDLib 1.2.1 and Mac OS X 10.2.3 or later.*/ | |
77 #define kIOHIDDeviceInterfaceID121 CFUUIDGetConstantUUIDWithBytes(NULL, \ | |
78 0x7d, 0xb, 0x51, 0xe, 0x16, 0xd5, 0x11, 0xd7, \ | |
79 0x9e, 0x9b, 0x0, 0x3, 0x93, 0x99, 0x2e, 0x38) | |
80 | |
81 /* B70ABF31-16D5-11D7-AB35-000393992E38 */ | |
82 /*! @defined kIOHIDDeviceInterfaceID122 | |
83 @discussion Interface ID for the IOHIDDeviceInterface122. Corresponds to | |
84 an available HID device that includes methods from | |
85 IOHIDDeviceInterface and IOHIDDeviceInterface121. This | |
86 interface is available on IOHIDLib 1.2.2 and Mac OS X 10.3 | |
87 or later.*/ | |
88 #define kIOHIDDeviceInterfaceID122 CFUUIDGetConstantUUIDWithBytes(NULL, \ | |
89 0xb7, 0xa, 0xbf, 0x31, 0x16, 0xd5, 0x11, 0xd7, \ | |
90 0xab, 0x35, 0x0, 0x3, 0x93, 0x99, 0x2e, 0x38) | |
91 | |
92 /* 8138629E-6F14-11D4-970E-0005028F18D5 */ | |
93 /*! @defined kIOHIDQueueInterfaceID | |
94 @discussion Interface ID for the kIOHIDQueueInterfaceID. Corresponds to a | |
95 queue for a specific HID device. */ | |
96 #define kIOHIDQueueInterfaceID CFUUIDGetConstantUUIDWithBytes(NULL, \ | |
97 0x81, 0x38, 0x62, 0x9E, 0x6F, 0x14, 0x11, 0xD4, \ | |
98 0x97, 0x0E, 0x00, 0x05, 0x02, 0x8F, 0x18, 0xD5) | |
99 | |
100 /* 80CDCC00-755D-11D4-8E0F-0005028F18D5 */ | |
101 /*! @defined kIOHIDOutputTransactionInterfaceID | |
102 @discussion Interface ID for the kIOHIDOutputTransactionInterfaceID. | |
103 Corresponds to an output transaction for one or more report IDs | |
104 on a specific device. */ | |
105 #define kIOHIDOutputTransactionInterfaceID CFUUIDGetConstantUUIDWithBytes(NULL,\ | |
106 0x80, 0xCD, 0xCC, 0x00, 0x75, 0x5D, 0x11, 0xD4, \ | |
107 0x80, 0xEF, 0x00, 0x05, 0x02, 0x8F, 0x18, 0xD5) | |
108 | |
109 /*! @typedef IOHIDCallbackFunction | |
110 @discussion Type and arguments of callout C function that is used when a | |
111 completion routine is called, see | |
112 IOHIDLib.h:setRemovalCallback(). | |
113 @param target void * pointer to your data, often a pointer to an object. | |
114 @param result Completion result of desired operation. | |
115 @param refcon void * pointer to more data. | |
116 @param sender Interface instance sending the completion routine. | |
117 */ | |
118 typedef void (*IOHIDCallbackFunction) | |
119 (void * target, IOReturn result, void * refcon, void * sender); | |
120 | |
121 /*! @typedef IOHIDElementCallbackFunction | |
122 @discussion Type and arguments of callout C function that is used when a | |
123 completion routine is called, see IOHIDLib.h:setElementValue(). | |
124 @param target void * pointer to your data, often a pointer to an object. | |
125 @param result Completion result of desired operation. | |
126 @param refcon void * pointer to more data. | |
127 @param sender Interface instance sending the completion routine. | |
128 @param elementCookie Element within interface instance sending completion. | |
129 */ | |
130 typedef void (*IOHIDElementCallbackFunction) | |
131 (void * target, | |
132 IOReturn result, | |
133 void * refcon, | |
134 void * sender, | |
135 IOHIDElementCookie elementCookie); | |
136 | |
137 /*! @typedef IOHIDReportCallbackFunction | |
138 @discussion Type and arguments of callout C function that is used when a | |
139 completion routine is called, see IOHIDLib.h:setReport(). | |
140 @param target void * pointer to your data, often a pointer to an object. | |
141 @param result Completion result of desired operation. | |
142 @param refcon void * pointer to more data. | |
143 @param sender Interface instance sending the completion routine. | |
144 @param bufferSize Size of the buffer received upon completion. | |
145 */ | |
146 typedef void (*IOHIDReportCallbackFunction) | |
147 (void * target, | |
148 IOReturn result, | |
149 void * refcon, | |
150 void * sender, | |
151 UInt32 bufferSize); | |
152 | |
153 | |
154 /* Forward declarations of the queue and output transaction interfaces */ | |
155 struct IOHIDQueueInterface; | |
156 struct IOHIDOutputTransactionInterface; | |
157 typedef struct IOHIDQueueInterface IOHIDQueueInterface; | |
158 typedef struct IOHIDOutputTransactionInterface IOHIDOutputTransactionInterface; | |
159 | |
160 // | |
161 // IOHIDDeviceInterface Functions available in version 1.0 (10.0) and higher of Mac OS X | |
162 // | |
163 #define IOHIDDEVICEINTERFACE_FUNCS_100 \ | |
164 IOReturn (*createAsyncEventSource)(void * self, CFRunLoopSourceRef * source); \ | |
165 CFRunLoopSourceRef (*getAsyncEventSource)(void * self); \ | |
166 IOReturn (*createAsyncPort)(void * self, mach_port_t * port); \ | |
167 mach_port_t (*getAsyncPort)(void * self); \ | |
168 IOReturn (*open)(void * self, UInt32 flags); \ | |
169 IOReturn (*close)(void * self); \ | |
170 IOReturn (*setRemovalCallback)(void * self, IOHIDCallbackFunction removalCallback, \ | |
171 void * removalTarget, void * removalRefcon); \ | |
172 IOReturn (*getElementValue)(void * self, IOHIDElementCookie elementCookie, \ | |
173 IOHIDEventStruct * valueEvent); \ | |
174 IOReturn (*setElementValue)(void * self, IOHIDElementCookie elementCookie, \ | |
175 IOHIDEventStruct * valueEvent, UInt32 timeoutMS, \ | |
176 IOHIDElementCallbackFunction callback, \ | |
177 void * callbackTarget, void * callbackRefcon); \ | |
178 IOReturn (*queryElementValue)(void * self, IOHIDElementCookie elementCookie, \ | |
179 IOHIDEventStruct * valueEvent, UInt32 timeoutMS, \ | |
180 IOHIDElementCallbackFunction callback, \ | |
181 void * callbackTarget, void * callbackRefcon); \ | |
182 IOReturn (*startAllQueues)(void * self); \ | |
183 IOReturn (*stopAllQueues)(void * self); \ | |
184 IOHIDQueueInterface ** (*allocQueue) (void *self); \ | |
185 IOHIDOutputTransactionInterface ** (*allocOutputTransaction) (void *self) | |
186 | |
187 // | |
188 // IOHIDDeviceInterface Functions available in version 1.2.1 (10.2.3) and higher of Mac OS X | |
189 // | |
190 #define IOHIDDEVICEINTERFACE_FUNCS_121 \ | |
191 IOReturn (*setReport)(void * self, IOHIDReportType reportType, UInt32 reportID, \ | |
192 void * reportBuffer, UInt32 reportBufferSize, \ | |
193 UInt32 timeoutMS, IOHIDReportCallbackFunction callback, \ | |
194 void * callbackTarget, void * callbackRefcon); \ | |
195 IOReturn (*getReport)(void * self, IOHIDReportType reportType, \ | |
196 UInt32 reportID, void * reportBuffer, \ | |
197 UInt32 * reportBufferSize, UInt32 timeoutMS, \ | |
198 IOHIDReportCallbackFunction callback, \ | |
199 void * callbackTarget, void * callbackRefcon) | |
200 | |
201 // | |
202 // IOHIDDeviceInterface Functions available in version 1.2.2 (10.3) and higher of Mac OS X | |
203 // | |
204 #define IOHIDDEVICEINTERFACE_FUNCS_122 \ | |
205 IOReturn (*copyMatchingElements)(void * self, CFDictionaryRef matchingDict, \ | |
206 CFArrayRef * elements); \ | |
207 IOReturn (*setInterruptReportHandlerCallback)(void * self, void * reportBuffer, \ | |
208 UInt32 reportBufferSize, \ | |
209 IOHIDReportCallbackFunction callback, \ | |
210 void * callbackTarget, void * callbackRefcon) | |
211 | |
212 typedef struct IOHIDDeviceInterface | |
213 { | |
214 IUNKNOWN_C_GUTS; | |
215 IOHIDDEVICEINTERFACE_FUNCS_100; | |
216 IOHIDDEVICEINTERFACE_FUNCS_121; | |
217 } IOHIDDeviceInterface; | |
218 | |
219 typedef struct IOHIDDeviceInterface121 | |
220 { | |
221 IUNKNOWN_C_GUTS; | |
222 IOHIDDEVICEINTERFACE_FUNCS_100; | |
223 IOHIDDEVICEINTERFACE_FUNCS_121; | |
224 } IOHIDDeviceInterface121; | |
225 | |
226 typedef struct IOHIDDeviceInterface122 | |
227 { | |
228 IUNKNOWN_C_GUTS; | |
229 IOHIDDEVICEINTERFACE_FUNCS_100; | |
230 IOHIDDEVICEINTERFACE_FUNCS_121; | |
231 IOHIDDEVICEINTERFACE_FUNCS_122; | |
232 } IOHIDDeviceInterface122; | |
233 | |
234 | |
235 // | |
236 // IOHIDQueueInterface Functions available in version 1.0 (10.0) and higher of Mac OS X | |
237 // | |
238 #define IOHIDQUEUEINTERFACE_FUNCS_100 \ | |
239 IOReturn (*createAsyncEventSource)(void * self, CFRunLoopSourceRef * source); \ | |
240 CFRunLoopSourceRef (*getAsyncEventSource)(void * self); \ | |
241 IOReturn (*createAsyncPort)(void * self, mach_port_t * port); \ | |
242 mach_port_t (*getAsyncPort)(void * self); \ | |
243 IOReturn (*create)(void * self, UInt32 flags, UInt32 depth); \ | |
244 IOReturn (*dispose)(void * self); \ | |
245 IOReturn (*addElement)(void * self, IOHIDElementCookie elementCookie, UInt32 flags);\ | |
246 IOReturn (*removeElement)(void * self, IOHIDElementCookie elementCookie); \ | |
247 Boolean (*hasElement)(void * self, IOHIDElementCookie elementCookie); \ | |
248 IOReturn (*start)(void * self); \ | |
249 IOReturn (*stop)(void * self); \ | |
250 IOReturn (*getNextEvent)(void * self, IOHIDEventStruct * event, \ | |
251 AbsoluteTime maxTime, UInt32 timeoutMS); \ | |
252 IOReturn (*setEventCallout)(void * self, IOHIDCallbackFunction callback, \ | |
253 void * callbackTarget, void * callbackRefcon); \ | |
254 IOReturn (*getEventCallout)(void * self, IOHIDCallbackFunction * outCallback, \ | |
255 void ** outCallbackTarget, void ** outCallbackRefcon) | |
256 | |
257 struct IOHIDQueueInterface | |
258 { | |
259 IUNKNOWN_C_GUTS; | |
260 IOHIDQUEUEINTERFACE_FUNCS_100; | |
261 }; | |
262 | |
263 // | |
264 // IOHIDOutputTransactionInterface Functions available in version 1.2 (10.2) and higher of Mac OS X | |
265 // | |
266 #define IOHIDOUTPUTTRANSACTIONINTERFACE_FUNCS_120 \ | |
267 IOReturn (*createAsyncEventSource)(void * self, CFRunLoopSourceRef * source); \ | |
268 CFRunLoopSourceRef (*getAsyncEventSource)(void * self); \ | |
269 IOReturn (*createAsyncPort)(void * self, mach_port_t * port); \ | |
270 mach_port_t (*getAsyncPort)(void * self); \ | |
271 IOReturn (*create)(void * self); \ | |
272 IOReturn (*dispose)(void * self); \ | |
273 IOReturn (*addElement)(void * self, IOHIDElementCookie elementCookie); \ | |
274 IOReturn (*removeElement)(void * self, IOHIDElementCookie elementCookie); \ | |
275 Boolean (*hasElement)(void * self, IOHIDElementCookie elementCookie); \ | |
276 IOReturn (*setElementDefault)(void *self, IOHIDElementCookie elementCookie, \ | |
277 IOHIDEventStruct * valueEvent); \ | |
278 IOReturn (*getElementDefault)(void * self, IOHIDElementCookie elementCookie, \ | |
279 IOHIDEventStruct * outValueEvent); \ | |
280 IOReturn (*setElementValue)(void * self, IOHIDElementCookie elementCookie, \ | |
281 IOHIDEventStruct * valueEvent); \ | |
282 IOReturn (*getElementValue)(void * self, IOHIDElementCookie elementCookie, \ | |
283 IOHIDEventStruct * outValueEvent); \ | |
284 IOReturn (*commit)(void * self, UInt32 timeoutMS, IOHIDCallbackFunction callback, \ | |
285 void * callbackTarget, void * callbackRefcon); \ | |
286 IOReturn (*clear)(void * self) | |
287 | |
288 struct IOHIDOutputTransactionInterface | |
289 { | |
290 IUNKNOWN_C_GUTS; | |
291 IOHIDOUTPUTTRANSACTIONINTERFACE_FUNCS_120; | |
292 }; | |
293 | |
294 | |
295 // | |
296 // BEGIN READABLE STRUCTURE DEFINITIONS | |
297 // | |
298 // This portion of uncompiled code provides a more reader friendly representation of | |
299 // the CFPlugin methods defined above. | |
300 | |
301 #if 0 | |
302 /*! @class IOHIDDeviceInterface | |
303 @discussion CFPlugin object subclass which provides the primary interface to | |
304 HID devices. | |
305 */ | |
306 typedef struct IOHIDDeviceInterface | |
307 { | |
308 | |
309 IUNKNOWN_C_GUTS; | |
310 | |
311 /*! @function createAsyncEventSource | |
312 @abstract Creates async eventsource. | |
313 @discussion This method will create an async mach port, if one | |
314 has not already been created. | |
315 @param source Reference to CFRunLoopSourceRef that is created. | |
316 @result Returns an IOReturn code. | |
317 */ | |
318 IOReturn (*createAsyncEventSource)(void * self, | |
319 CFRunLoopSourceRef * source); | |
320 | |
321 /*! @function getAsyncEventSource | |
322 @abstract Gets the created async event source. | |
323 @result Returns a CFRunLoopSourceRef. | |
324 */ | |
325 CFRunLoopSourceRef (*getAsyncEventSource)(void * self); | |
326 | |
327 /*! @function createAsyncPort | |
328 @abstract Creates an async port. | |
329 @discussion The port must be created before any callbacks can be used. | |
330 @param port Reference to mach port that is created. | |
331 @result Returns an IOReturn code. | |
332 */ | |
333 IOReturn (*createAsyncPort)(void * self, mach_port_t * port); | |
334 | |
335 /*! @function getAsyncPort | |
336 @abstract Gets the current async port. | |
337 @result Returns a mach_port_t. | |
338 */ | |
339 mach_port_t (*getAsyncPort)(void * self); | |
340 | |
341 /*! @function open | |
342 @abstract Opens the device. | |
343 @param flags Flags to be passed down to the user client. | |
344 @result Returns an IOReturn code. | |
345 */ | |
346 IOReturn (*open)(void * self, UInt32 flags); | |
347 | |
348 /*! @function close | |
349 @abstract Closes the device. | |
350 @result Returns an IOReturn code. | |
351 */ | |
352 IOReturn (*close)(void * self); | |
353 | |
354 /*! @function setRemovalCallback | |
355 @abstract Sets callback to be used when device is removed. | |
356 @param removalCallback Called when the device is removed. | |
357 @param removeTarget Passed to the callback. | |
358 @param removalRefcon Passed to the callback. | |
359 @result Returns an IOReturn code. | |
360 */ | |
361 IOReturn (*setRemovalCallback)(void * self, | |
362 IOHIDCallbackFunction removalCallback, | |
363 void * removalTarget, | |
364 void * removalRefcon); | |
365 | |
366 /*! @function getElementValue | |
367 @abstract Obtains the most recent value of an element. | |
368 @discussion This call is most useful for interrupt driven elements, | |
369 such as input type elements. Since feature type element values | |
370 need to be polled from the device, it is recommended to use the | |
371 queryElementValue method to obtain the current value. The | |
372 timestamp field in the event details the last time the element | |
373 value was altered. | |
374 @param elementCookie The element of interest. | |
375 @param valueEvent The event that will be filled. If a long value is | |
376 present, it is up to the caller to deallocate it. | |
377 @result Returns an IOReturn code. | |
378 */ | |
379 IOReturn (*getElementValue)(void * self, | |
380 IOHIDElementCookie elementCookie, | |
381 IOHIDEventStruct * valueEvent); | |
382 | |
383 /*! @function setElementValue | |
384 @abstract Sets an element value on the device. | |
385 @discussion This call is most useful for feature type elements. It is | |
386 recommended to use IOOutputTransaction for output type elements. | |
387 @param elementCookie The element of interest. | |
388 @param valueEvent The event that will be filled. If a long value is | |
389 present, it will be copied. | |
390 @param timeoutMS UNSUPPORTED. | |
391 @param callback UNSUPPORTED. | |
392 @param callbackTarget UNSUPPORTED. | |
393 @param callbackRefcon UNSUPPORTED. | |
394 @result Returns an IOReturn code. | |
395 */ | |
396 IOReturn (*setElementValue)(void * self, | |
397 IOHIDElementCookie elementCookie, | |
398 IOHIDEventStruct * valueEvent, | |
399 UInt32 timeoutMS, | |
400 IOHIDElementCallbackFunction callback, | |
401 void * callbackTarget, | |
402 void * callbackRefcon); | |
403 | |
404 /*! @function queryElementValue | |
405 @abstract Obtains the current value of an element. | |
406 @discussion This call is most useful for feature type elements. This | |
407 method will poll the device for the current element value. | |
408 @param elementCookie The element of interest. | |
409 @param valueEvent The event that will be filled. If a long value is | |
410 present, it is up to the caller to deallocate it. | |
411 @param timeoutMS UNSUPPORTED. | |
412 @param callback UNSUPPORTED. | |
413 @param callbackTarget UNSUPPORTED. | |
414 @param callbackRefcon UNSUPPORTED. | |
415 @result Returns an IOReturn code. | |
416 */ | |
417 IOReturn (*queryElementValue)(void * self, | |
418 IOHIDElementCookie elementCookie, | |
419 IOHIDEventStruct * valueEvent, | |
420 UInt32 timeoutMS, | |
421 IOHIDElementCallbackFunction callback, | |
422 void * callbackTarget, | |
423 void * callbackRefcon); | |
424 | |
425 /*! @function startAllQueues | |
426 @abstract Starts data delivery on all queues for this device. | |
427 @result Returns an IOReturn code. | |
428 */ | |
429 IOReturn (*startAllQueues)(void * self); | |
430 | |
431 /*! @function stopAllQueues | |
432 @abstract Stops data delivery on all queues for this device. | |
433 @result Returns an IOReturn code. | |
434 */ | |
435 IOReturn (*stopAllQueues)(void * self); | |
436 | |
437 /*! @function allocQueue | |
438 @abstract Wrapper to return instances of the IOHIDQueueInterface. | |
439 @result Returns the created IOHIDQueueInterface. | |
440 */ | |
441 IOHIDQueueInterface ** (*allocQueue) (void *self); | |
442 | |
443 /*! @function allocOutputTransaction | |
444 @abstract Wrapper to return instances of the IOHIDOutputTransactionInterface. | |
445 @result Returns the created IOHIDOutputTransactionInterface. | |
446 */ | |
447 IOHIDOutputTransactionInterface ** (*allocOutputTransaction) (void *self); | |
448 | |
449 } IOHIDDeviceInterface; | |
450 | |
451 /*! @class IOHIDDeviceInterface121 | |
452 @discussion CFPlugin object subclass which provides the primary interface to | |
453 HID devices. This class is a subclass of IOHIDDeviceInterface. | |
454 */ | |
455 typedef struct IOHIDDeviceInterface121 | |
456 { | |
457 | |
458 IUNKNOWN_C_GUTS; | |
459 IOHIDDEVICEINTERFACE_FUNCS_100; | |
460 | |
461 /*! @function setReport | |
462 @abstract Sends a report to the device. | |
463 @param reportType The report type. | |
464 @param reportID The report id. | |
465 @param reportBuffer Pointer to a preallocated buffer. | |
466 @param reportBufferSize Size of the reportBuffer in bytes. | |
467 @param timeoutMS | |
468 @param callback If null, this method will behave synchronously. | |
469 @param callbackTarget The callback target passed to the callback. | |
470 @param callbackRefcon The callback refcon passed to the callback. | |
471 @result Returns an IOReturn code. | |
472 */ | |
473 IOReturn (*setReport) (void * self, | |
474 IOHIDReportType reportType, | |
475 UInt32 reportID, | |
476 void * reportBuffer, | |
477 UInt32 reportBufferSize, | |
478 UInt32 timeoutMS, | |
479 IOHIDReportCallbackFunction callback, | |
480 void * callbackTarget, | |
481 void * callbackRefcon); | |
482 | |
483 /*! @function getReport | |
484 @abstract Obtains a report from the device. | |
485 @param reportType The report type. | |
486 @param reportID The report ID. | |
487 @param reportBuffer Pointer to a preallocated buffer. | |
488 @param reportBufferSize Size of the reportBuffer in bytes. | |
489 When finished, will contain the actual size of the report. | |
490 @param timeoutMS | |
491 @param callback If null, this method will behave synchronously. | |
492 @param callbackTarget The callback target passed to the callback. | |
493 @param callbackRefcon The callback refcon passed to the callback. | |
494 @result Returns an IOReturn code. | |
495 */ | |
496 IOReturn (*getReport) (void * self, | |
497 IOHIDReportType reportType, | |
498 UInt32 reportID, | |
499 void * reportBuffer, | |
500 UInt32 * reportBufferSize, | |
501 UInt32 timeoutMS, | |
502 IOHIDReportCallbackFunction callback, | |
503 void * callbackTarget, | |
504 void * callbackRefcon); | |
505 | |
506 }IOHIDDeviceInterface121; | |
507 | |
508 /*! @class IOHIDDeviceInterface122 | |
509 @discussion CFPlugin object subclass which provides the primary interface to | |
510 HID devices. This class is a subclass of IOHIDDeviceInterface121. | |
511 */ | |
512 typedef struct IOHIDDeviceInterface122 | |
513 { | |
514 | |
515 IUNKNOWN_C_GUTS; | |
516 IOHIDDEVICEINTERFACE_FUNCS_100; | |
517 IOHIDDEVICEINTERFACE_FUNCS_121; | |
518 | |
519 /*! @function copyMatchingElements | |
520 @abstract Obtains specific elements defined by the device. | |
521 @discussion Using keys defined in IOHIDKeys.h for elements, create a | |
522 matching dictonary containing items that you wish to search for. | |
523 A null array indicates that no elements matching that criteria | |
524 were found. Each item in the array is a reference to the same | |
525 dictionary item that represents each element in the I/O Registry. | |
526 It is up to the caller to release the returned array of elements. | |
527 @param matchingDict Dictionary containg key/value pairs to match on. Pass | |
528 a null value to match on all elements. | |
529 @param elements Pointer to a CFArrayRef that will be returned by this | |
530 method. It is up to the caller to release it when finished. | |
531 @result Returns an IOReturn code. | |
532 */ | |
533 IOReturn (*copyMatchingElements)(void * self, | |
534 CFDictionaryRef matchingDict, | |
535 CFArrayRef * elements); | |
536 | |
537 /*! @function setInterruptReportHandlerCallback | |
538 @abstract Sets the report handler callout to be called when the data | |
539 is received from the Interrupt-In pipe. | |
540 @discussion In order for this to work correctly, you must call | |
541 createAsyncPort and createAsyncEventSource. | |
542 @param reportBuffer Pointer to a preallocated buffer. | |
543 @param reportBufferSize Size of the reportBuffer in bytes. | |
544 @param callback If non-NULL, is a callback to be called when data | |
545 is received from the device. | |
546 @param callbackTarget The callback target passed to the callback | |
547 @param callbackRefcon The callback refcon passed to the callback. | |
548 @result Returns an IOReturn code. | |
549 */ | |
550 IOReturn (*setInterruptReportHandlerCallback)( | |
551 void * self, | |
552 void * reportBuffer, | |
553 UInt32 reportBufferSize, | |
554 IOHIDReportCallbackFunction callback, | |
555 void * callbackTarget, | |
556 void * callbackRefcon); | |
557 | |
558 }IOHIDDeviceInterface122; | |
559 | |
560 /*! @class IOHIDQueueInterface | |
561 @discussion CFPlugin object subclass which provides an interface for input | |
562 queues from HID devices. Created by an IOHIDDeviceInterface | |
563 object. | |
564 */ | |
565 typedef struct IOHIDQueueInterface | |
566 { | |
567 | |
568 IUNKNOWN_C_GUTS; | |
569 | |
570 /*! @function createAsyncEventSource | |
571 @abstract Creates an async event source. | |
572 @discussion This will be used with setEventCallout. | |
573 @param source The newly created event source. | |
574 @result Returns an IOReturn code. | |
575 */ | |
576 IOReturn (*createAsyncEventSource)(void * self, | |
577 CFRunLoopSourceRef * source); | |
578 | |
579 /*! @function getAsyncEventSource | |
580 @abstract Obtains the current event source. | |
581 @result Returns a CFRunLoopSourceRef. | |
582 */ | |
583 CFRunLoopSourceRef (*getAsyncEventSource)(void * self); | |
584 | |
585 /*! @function createAsyncPort | |
586 @abstract Creates an async port. | |
587 @discussion This will be used with createAsyncEventSource. | |
588 @param port The newly created async port. | |
589 @result Returns an IOReturn code. | |
590 */ | |
591 IOReturn (*createAsyncPort)(void * self, mach_port_t * port); | |
592 | |
593 /*! @function getAsyncPort | |
594 @abstract Obtains the current async port. | |
595 @result Returns a mach_port_t. | |
596 */ | |
597 mach_port_t (*getAsyncPort)(void * self); | |
598 | |
599 /*! @function create | |
600 @abstract Creates the current queue. | |
601 @param flags | |
602 @param depth The maximum number of elements in the queue | |
603 before the oldest elements in the queue begin to be lost. | |
604 @result Returns an IOReturn code. | |
605 */ | |
606 IOReturn (*create)(void * self, | |
607 UInt32 flags, | |
608 UInt32 depth); | |
609 | |
610 /*! @function create | |
611 @abstract Disposes of the current queue. | |
612 @result Returns an IOReturn code. | |
613 */ | |
614 IOReturn (*dispose)(void * self); | |
615 | |
616 /*! @function addElement | |
617 @abstract Adds an element to the queue. | |
618 @discussion If the element has already been added to queue, | |
619 an error will be returned. | |
620 @param elementCookie The element of interest. | |
621 @param flags | |
622 @result Returns an IOReturn code. | |
623 */ | |
624 IOReturn (*addElement)(void * self, | |
625 IOHIDElementCookie elementCookie, | |
626 UInt32 flags); | |
627 | |
628 /*! @function removeElement | |
629 @abstract Removes an element from the queue. | |
630 @discussion If the element has not been added to queue, | |
631 an error will be returned. | |
632 @param elementCookie The element of interest. | |
633 @result Returns an IOReturn code. | |
634 */ | |
635 IOReturn (*removeElement)(void * self, IOHIDElementCookie elementCookie); | |
636 | |
637 /*! @function hasElement | |
638 @abstract Checks whether an element has been added to | |
639 the queue. | |
640 @discussion Will return true if present, otherwise will return false. | |
641 @param elementCookie The element of interest. | |
642 @result Returns a Boolean value. | |
643 */ | |
644 Boolean (*hasElement)(void * self, IOHIDElementCookie elementCookie); | |
645 | |
646 /*! @function start | |
647 @abstract Starts event delivery to the queue. | |
648 @result Returns an IOReturn code. | |
649 */ | |
650 IOReturn (*start)(void * self); | |
651 | |
652 /*! @function stop | |
653 @abstract Stops event delivery to the queue. | |
654 @result Returns an IOReturn code. | |
655 */ | |
656 IOReturn (*stop)(void * self); | |
657 | |
658 /*! @function getNextEvent | |
659 @abstract Reads next event from the queue. | |
660 @param event The event that will be filled. If a long value is | |
661 present, it is up to the caller to deallocate it. | |
662 @param maxtime UNSUPPORTED. If non-zero, limits read events to | |
663 those that occured on or before maxTime. | |
664 @param timoutMS UNSUPPORTED. The timeout in milliseconds, a zero | |
665 timeout will cause this call to be non-blocking (returning | |
666 queue empty) if there is a NULL callback, and blocking forever | |
667 until the queue is non-empty if there is a valid callback. | |
668 @result Returns an IOReturn code. | |
669 */ | |
670 IOReturn (*getNextEvent)(void * self, | |
671 IOHIDEventStruct * event, | |
672 AbsoluteTime maxTime, | |
673 UInt32 timeoutMS); | |
674 | |
675 /*! @function setEventCallout | |
676 @abstract Sets the event callout to be called when the queue | |
677 transitions to non-empty. | |
678 @discussion In order for this to work correctly, you must call | |
679 createAsyncPort and createAsyncEventSource. | |
680 @param callback if non-NULL is a callback to be called when data | |
681 is inserted to the queue | |
682 @param callbackTarget The callback target passed to the callback | |
683 @param callbackRefcon The callback refcon passed to the callback. | |
684 @result Returns an IOReturn code. | |
685 */ | |
686 IOReturn (*setEventCallout)(void * self, | |
687 IOHIDCallbackFunction callback, | |
688 void * callbackTarget, | |
689 void * callbackRefcon); | |
690 | |
691 /*! @function getEventCallout | |
692 @abstract Gets the event callout. | |
693 @discussion This callback will be called the queue transitions | |
694 to non-empty. | |
695 @param callback if non-NULL is a callback to be called when data | |
696 is inserted to the queue | |
697 @param callbackTarget The callback target passed to the callback | |
698 @param callbackRefcon The callback refcon passed to the callback | |
699 @result Returns an IOReturn code. | |
700 */ | |
701 IOReturn (*getEventCallout)(void * self, | |
702 IOHIDCallbackFunction * outCallback, | |
703 void ** outCallbackTarget, | |
704 void ** outCallbackRefcon); | |
705 } IOHIDQueueInterface; | |
706 | |
707 /*! @class IOHIDOutputTransactionInterface | |
708 @discussion CFPlugin object subclass which privides interface for output | |
709 transactions to HID devices. Created by a IOHIDDeviceInterface | |
710 object. */ | |
711 | |
712 typedef struct IOHIDOutputTransactionInterface | |
713 { | |
714 IUNKNOWN_C_GUTS; | |
715 | |
716 /*! @function createAsyncEventSource | |
717 @abstract Creates an async event source. | |
718 @discussion This will be used with setEventCallout. | |
719 @param source The newly created event source | |
720 @result Returns an IOReturn code. | |
721 */ | |
722 IOReturn (*createAsyncEventSource)(void * self, | |
723 CFRunLoopSourceRef * source); | |
724 | |
725 /*! @function getAsyncEventSource | |
726 @abstract Obtains the current event source. | |
727 @result Returns a CFRunLoopSourceRef. | |
728 */ | |
729 CFRunLoopSourceRef (*getAsyncEventSource)(void * self); | |
730 | |
731 /*! @function createAsyncPort | |
732 @abstract Creates an async port. | |
733 @discussion This will be used with createAsyncEventSource. | |
734 @param port The newly created async port. | |
735 @result Returns an IOReturn code. | |
736 */ | |
737 IOReturn (*createAsyncPort)(void * self, mach_port_t * port); | |
738 | |
739 /*! @function getAsyncPort | |
740 @abstract Obtains the current async port. | |
741 @result Returns a mach_port_t. | |
742 */ | |
743 mach_port_t (*getAsyncPort)(void * self); | |
744 | |
745 /*! @function create | |
746 @abstract Creates the current transaction. | |
747 @discussion This method will free any memory that has been | |
748 allocated for this transaction. | |
749 @result Returns an IOReturn code. | |
750 */ | |
751 IOReturn (*create)(void * self); | |
752 | |
753 /*! @function dispose | |
754 @abstract Disposes of the current transaction. | |
755 @discussion The transaction will have to be recreated, in order | |
756 to perform any operations on the transaction. | |
757 @result Returns an IOReturn code. | |
758 */ | |
759 IOReturn (*dispose)(void * self); | |
760 | |
761 /*! @function addElement | |
762 @abstract Adds an element to the transaction. | |
763 @discussion If the element has already been added to transaction, | |
764 an error will be returned. | |
765 @param elementCookie The element of interest. | |
766 @result Returns an IOReturn code. | |
767 */ | |
768 IOReturn (*addElement) (void * self, IOHIDElementCookie elementCookie); | |
769 | |
770 /*! @function removeElement | |
771 @abstract Removes an element from the transaction. | |
772 @discussion If the element has not been added to transaction, | |
773 an error will be returned. | |
774 @param elementCookie The element of interest. | |
775 @result Returns an IOReturn code. | |
776 */ | |
777 IOReturn (*removeElement) (void * self, IOHIDElementCookie elementCookie); | |
778 | |
779 /*! @function hasElement | |
780 @abstract Checks whether an element has been added to | |
781 the transaction. | |
782 @discussion Will return true if present, otherwise will return false. | |
783 @param elementCookie The element of interest. | |
784 @result Returns a Boolean value. | |
785 */ | |
786 Boolean (*hasElement) (void * self, IOHIDElementCookie elementCookie); | |
787 | |
788 /*! @function setElementDefault | |
789 @abstract Sets the default value of an element in a | |
790 transaction. | |
791 @discussion An error will be returned if the element has not been | |
792 added to the transaction. | |
793 @param elementCookie The element of interest. | |
794 @param valueEvent The event that will be filled. If a long value is | |
795 present, it will be copied. | |
796 @result Returns an IOReturn code. | |
797 */ | |
798 IOReturn (*setElementDefault)(void * self, | |
799 IOHIDElementCookie elementCookie, | |
800 IOHIDEventStruct * valueEvent); | |
801 | |
802 /*! @function getElementDefault | |
803 @abstract Obtains the default value of an element in a | |
804 transaction. | |
805 @discussion An error will be returned if the element has not been | |
806 added to the transaction. | |
807 @param elementCookie The element of interest. | |
808 @param outValueEvent The event that will be filled. If a long value is | |
809 present, it is up to the caller to deallocate it. | |
810 @result Returns an IOReturn code. | |
811 */ | |
812 IOReturn (*getElementDefault)(void * self, | |
813 IOHIDElementCookie elementCookie, | |
814 IOHIDEventStruct * outValueEvent); | |
815 | |
816 /*! @function setElementValue | |
817 @abstract Sets the value of an element in a transaction. | |
818 @discussion An error will be returned if the element has not been | |
819 added to the transaction. | |
820 @param elementCookie The element of interest. | |
821 @param valueEvent The event that will be filled. If a long value is | |
822 present, it will be copied. | |
823 @result Returns an IOReturn code. | |
824 */ | |
825 IOReturn (*setElementValue)(void * self, | |
826 IOHIDElementCookie elementCookie, | |
827 IOHIDEventStruct * valueEvent); | |
828 | |
829 /*! @function getElementValue | |
830 @abstract Obtains the value of an element in a transaction. | |
831 @discussion An error will be returned if the element has not been | |
832 added to the transaction. | |
833 @param elementCookie The element of interest. | |
834 @param outValueEvent The event that will be filled. If a long value is | |
835 present, it is up to the caller to deallocate it. | |
836 @result Returns an IOReturn code. | |
837 */ | |
838 IOReturn (*getElementValue)(void * self, | |
839 IOHIDElementCookie elementCookie, | |
840 IOHIDEventStruct * outValueEvent); | |
841 | |
842 /*! @function commit | |
843 @abstract Commits the transaction. | |
844 @discussion Transaction element values, if set, will be sent to the | |
845 device. Otherwise, the default element value will be used. If | |
846 neither are set, that element will be omitted from the commit. | |
847 After a transaction is committed, transaction element values | |
848 will be cleared. Default values will be preserved. | |
849 @param timeoutMS UNSUPPORTED | |
850 @param callback UNSUPPORTED | |
851 @param callbackTarget UNSUPPORTED | |
852 @param callbackRefcon UNSUPPORTED | |
853 @result Returns an IOReturn code. | |
854 */ | |
855 IOReturn (*commit)(void * self, | |
856 UInt32 timeoutMS, | |
857 IOHIDCallbackFunction callback, | |
858 void * callbackTarget, | |
859 void * callbackRefcon); | |
860 | |
861 /*! @function clear | |
862 @abstract Clears the transaction. | |
863 @discussion Transaction element values will cleared. Default | |
864 values will be preserved. | |
865 @result Returns an IOReturn code. | |
866 */ | |
867 IOReturn (*clear)(void * self); | |
868 } IOHIDOutputTransactionInterface; | |
869 | |
870 #endif | |
871 | |
872 __END_DECLS | |
873 | |
874 #endif /* !_IOKIT_HID_IOHIDLIB_H_ */ |