~ubuntu-branches/ubuntu/karmic/libsdl1.2/karmic

« back to all changes in this revision

Viewing changes to src/joystick/darwin/10.3.9-FIX/IOHIDLib.h

  • Committer: Bazaar Package Importer
  • Author(s): Steve Kowalik
  • Date: 2008-01-05 14:10:45 UTC
  • mto: (2.1.3 lenny)
  • mto: This revision was merged to the branch mainline in revision 16.
  • Revision ID: james.westby@ubuntu.com-20080105141045-mjdg2rp09mamme4a
Tags: upstream-1.2.13
ImportĀ upstreamĀ versionĀ 1.2.13

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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_ */