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