SDL-1.2.14
[sdl_omap.git] / src / joystick / darwin / 10.3.9-FIX / IOHIDLib.h
CommitLineData
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
42struct IOHIDEventStruct
43{
44 IOHIDElementType type;
45 IOHIDElementCookie elementCookie;
46 SInt32 value;
47 AbsoluteTime timestamp;
48 UInt32 longValueSize;
49 void * longValue;
50};
51typedef 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*/
118typedef 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*/
130typedef 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*/
146typedef 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 */
155struct IOHIDQueueInterface;
156struct IOHIDOutputTransactionInterface;
157typedef struct IOHIDQueueInterface IOHIDQueueInterface;
158typedef 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
212typedef struct IOHIDDeviceInterface
213{
214 IUNKNOWN_C_GUTS;
215 IOHIDDEVICEINTERFACE_FUNCS_100;
216 IOHIDDEVICEINTERFACE_FUNCS_121;
217} IOHIDDeviceInterface;
218
219typedef struct IOHIDDeviceInterface121
220{
221 IUNKNOWN_C_GUTS;
222 IOHIDDEVICEINTERFACE_FUNCS_100;
223 IOHIDDEVICEINTERFACE_FUNCS_121;
224} IOHIDDeviceInterface121;
225
226typedef 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
257struct 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
288struct 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*/
306typedef 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*/
455typedef 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*/
512typedef 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*/
565typedef 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
712typedef 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_ */