e14743d1 |
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_ */ |