1/* 2 * Copyright (c) 2003 Apple Computer, Inc. All rights reserved. 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#include <IOKit/IOBufferMemoryDescriptor.h> 27#include "IOHIDEventQueue.h" 28#include "IOHIDTestDriver.h" 29 30#undef super 31#define super IOHIDDevice 32OSDefineMetaClassAndStructors( IOHIDTestDriver, IOHIDDevice ) 33 34void IOHIDTestDriver::free() 35{ 36 if ( _timerSource ) 37 { 38 _timerSource->cancelTimeout(); 39 _timerSource->release(); 40 _timerSource = 0; 41 } 42 43 if ( _workLoop ) 44 { 45 _workLoop->release(); 46 _workLoop = 0; 47 } 48 49 super::free(); 50} 51 52static void generateFakeReport(OSObject * owner, IOTimerEventSource * sender) 53{ 54 ((IOHIDTestDriver *) owner)->issueFakeReport(); 55 56 sender->setTimeoutMS(1000); 57} 58 59void IOHIDTestDriver::handleStop( IOService * provider ) 60{ 61 if ( _timerSource ) _timerSource->cancelTimeout(); 62 63 super::handleStop(provider); 64} 65 66bool IOHIDTestDriver::handleStart( IOService * provider ) 67{ 68 if ( super::handleStart(provider) == false ) 69 return false; 70 71 _workLoop = IOWorkLoop::workLoop(); 72 if ( _workLoop == 0 ) 73 return false; 74 75 _timerSource = IOTimerEventSource::timerEventSource( 76 this, 77 (IOTimerEventSource::Action) &generateFakeReport ); 78 if ( _timerSource == 0) 79 return false; 80 81 if ( _workLoop->addEventSource( _timerSource ) != kIOReturnSuccess ) 82 return false; 83 84 _timerSource->setTimeoutMS(1000); 85 86 return true; 87} 88 89//--------------------------------------------------------------------------- 90// Report fake report descriptor and report data. 91 92IOReturn IOHIDTestDriver::newReportDescriptor(IOMemoryDescriptor ** desc) const 93{ 94#if 0 95 // Keyboard 96 char report[] = { 0x05, 0x01, 97 0x09, 0x06, 98 0xA1, 0x01, 99 0x05, 0x07, 100 0x19, 0xE0, 101 0x29, 0xE7, 102 0x15, 0x00, 103 0x25, 0x01, 104 0x75, 0x01, 105 0x95, 0x08, 106 0x81, 0x02, 107 0x95, 0x01, 108 0x75, 0x08, 109 0x81, 0x01, 110 0x95, 0x05, 111 0x75, 0x01, 112 0x05, 0x08, 113 0x19, 0x01, 114 0x29, 0x05, 115 0x91, 0x02, 116 0x95, 0x01, 117 0x75, 0x03, 118 0x91, 0x01, 119 0x95, 0x06, 120 0x75, 0x08, 121 0x15, 0x00, 122 0x25, 0x65, 123 0x05, 0x07, 124 0x19, 0x00, 125 0x29, 0x65, 126 0x81, 0x00, 0xC0 }; 127 128 // macally joystick 129 char report[] = { 130 0x05, 0x01, 0x09, 0x04, 0xA1, 0x01, 0x09, 0x01, 131 0xA1, 0x00, 0x05, 0x01, 0x09, 0x30, 0x09, 0x31, 132 0x15, 0x00, 0x25, 0x7F, 0x35, 0x00, 0x46, 0xFF, 133 0x00, 0x66, 0x00, 0x00, 0x75, 0x08, 0x95, 0x02, 134 0x81, 0x02, 0x75, 0x08, 0x95, 0x01, 0x81, 0x01, 135 0x09, 0x39, 0x15, 0x01, 0x25, 0x08, 0x36, 0x00, 136 0x00, 0x46, 0x3B, 0x01, 0x65, 0x14, 0x75, 0x08, 137 0x95, 0x01, 0x81, 0x02, 0x05, 0x09, 0x19, 0x01, 138 0x29, 0x04, 0x15, 0x00, 0x25, 0x01, 0x35, 0x00, 139 0x45, 0x01, 0x75, 0x01, 0x95, 0x04, 0x81, 0x02, 140 0x95, 0x01, 0x75, 0x04, 0x81, 0x01, 0xC0, 0x05, 141 0x01, 0x09, 0x36, 0x15, 0x00, 0x26, 0xFF, 0x00, 142 0x35, 0x00, 0x46, 0xFF, 0x00, 0x75, 0x08, 0x66, 143 0x00, 0x00, 0x95, 0x01, 0x81, 0x02, 0xC0, 0x00, 144 0x00, 0x00 145 }; 146 147 // macally gamepad 148 char report[] = { 149 0x05, 0x01, 0x09, 0x05, 0xA1, 0x01, 0x09, 0x01, 150 0xA1, 0x00, 0x05, 0x01, 0x09, 0x30, 0x09, 0x31, 151 0x09, 0x35, 0x09, 0x36, 0x15, 0x00, 0x25, 0x7F, 152 0x35, 0x00, 0x46, 0xFF, 0x00, 0x65, 0x00, 0x75, 153 0x08, 0x95, 0x04, 0x81, 0x02, 0x05, 0x09, 0x19, 154 0x01, 0x29, 0x14, 0x15, 0x00, 0x25, 0x01, 0x35, 155 0x00, 0x45, 0x01, 0x75, 0x01, 0x95, 0x14, 0x81, 156 0x02, 0x75, 0x01, 0x95, 0x04, 0x81, 0x01, 0xC0, 157 0xC0 158 }; 159 160 // gravis gamepad 161 char report[] = { 162 0x05, 0x01, 0x09, 0x05, 0xA1, 0x01, 0x05, 0x01, 163 0x09, 0x01, 0xA1, 0x00, 0x09, 0x30, 0x09, 0x31, 164 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75, 0x08, 0x95, 165 0x02, 0x81, 0x02, 0xC0, 0x05, 0x09, 0x19, 0x01, 166 0x29, 0x0A, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 167 0x95, 0x0A, 0x81, 0x02, 0x95, 0x01, 0x75, 0x06, 168 0x81, 0x01, 0xC0 169 }; 170 171 // sidewinder gamepad 172 char report[] = { 173 0x05, 0x01, 0x09, 0x05, 0xA1, 0x01, 0x09, 0x01, 174 0xA1, 0x00, 0x05, 0x01, 0x09, 0x30, 0x09, 0x31, 175 0x15, 0x00, 0x25, 0x7F, 0x35, 0x00, 0x45, 0x7F, 176 0x66, 0x00, 0x00, 0x75, 0x08, 0x95, 0x02, 0x81, 177 0x02, 0xC0, 0x05, 0x09, 0x19, 0x01, 0x29, 0x06, 178 0x15, 0x00, 0x25, 0x01, 0x35, 0x00, 0x45, 0x01, 179 0x75, 0x01, 0x95, 0x06, 0x81, 0x02, 0x95, 0x02, 180 0x81, 0x01, 0xC0 181 }; 182 183 // Xterminator 184 char report[] = { 185 0x05, 0x01, 0x09, 0x04, 0xA1, 0x01, 0x09, 0x01, 186 0xA1, 0x00, 0x05, 0x01, 0x09, 0x30, 0x09, 0x31, 187 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75, 0x08, 0x95, 188 0x02, 0x81, 0x02, 0xC0, 0x05, 0x01, 0x09, 0x35, 189 0x15, 0x00, 0x26, 0xFF, 0x00, 0x35, 0x00, 0x46, 190 0xFF, 0x00, 0x75, 0x08, 0x95, 0x01, 0x81, 0x02, 191 0x09, 0x37, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x35, 192 0x00, 0x46, 0xFF, 0x00, 0x75, 0x08, 0x95, 0x01, 193 0x81, 0x02, 0x09, 0x32, 0x15, 0x00, 0x26, 0xFF, 194 0x00, 0x35, 0x00, 0x46, 0xFF, 0x00, 0x75, 0x08, 195 0x95, 0x01, 0x81, 0x02, 0x05, 0x01, 0x09, 0x39, 196 0x15, 0x01, 0x25, 0x08, 0x75, 0x08, 0x95, 0x01, 197 0x81, 0x42, 0x05, 0x09, 0x19, 0x01, 0x29, 0x09, 198 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x09, 199 0x81, 0x02, 0x75, 0x01, 0x95, 0x07, 0x81, 0x01, 200 0xC0 201 }; 202 203 // Thrustmaster 204 char report[] = { 205 0x05, 0x01, 0x09, 0x04, 0xA1, 0x01, 0x09, 0x01, 206 0xA1, 0x00, 0x09, 0x30, 0x09, 0x31, 0x15, 0x80, 207 0x25, 0x7F, 0x35, 0x00, 0x46, 0xFF, 0x00, 0x75, 208 0x08, 0x95, 0x02, 0x81, 0x02, 0xC0, 0x09, 0x39, 209 0x15, 0x01, 0x25, 0x08, 0x35, 0x00, 0x46, 0x3B, 210 0x01, 0x66, 0x14, 0x00, 0x75, 0x04, 0x95, 0x01, 211 0x81, 0x42, 0x05, 0x09, 0x15, 0x00, 0x25, 0x01, 212 0x35, 0x00, 0x45, 0x01, 0x19, 0x01, 0x29, 0x04, 213 0x75, 0x01, 0x95, 0x04, 0x81, 0x02, 0x75, 0x08, 214 0x95, 0x01, 0x81, 0x01, 0xC0 215 }; 216 217 // macally gamepad 218 char report[] = { 219 0x05, 0x01, 0x09, 0x05, 0xA1, 0x01, 0x09, 0x01, 220 0xA1, 0x00, 0x05, 0x01, 0x09, 0x30, 0x09, 0x31, 221 0x09, 0x35, 0x09, 0x36, 0x15, 0x00, 0x25, 0x7F, 222 0x35, 0x00, 0x46, 0xFF, 0x00, 0x65, 0x00, 0x75, 223 0x08, 0x95, 0x04, 0x81, 0x02, 0x05, 0x09, 0x19, 224 0x01, 0x29, 0x14, 0x15, 0x00, 0x25, 0x01, 0x35, 225 0x00, 0x45, 0x01, 0x75, 0x01, 0x95, 0x14, 0x81, 226 0x02, 0x75, 0x01, 0x95, 0x04, 0x81, 0x01, 0xC0, 227 0xC0 228 }; 229#endif 230 231 // EIZO HID-controllable monitors 232 char report[] = { 233 0x05, 0x80, 0x09, 0x01, 0xA1, 0x01, 0x75, 0x08, 0x95, 0x80, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x85, 234 0x01, 0x09, 0x02, 0xB2, 0x02, 0x01, 0x05, 0x82, 0x75, 0x10, 0x95, 0x01, 0x25, 0x78, 0x85, 0x20, 235 0x09, 0x12, 0x81, 0x02, 0x09, 0x12, 0xB1, 0x02, 0x26, 0xC8, 0x00, 0x85, 0x21, 0x09, 0x10, 0x81, 236 0x02, 0x09, 0x10, 0xB1, 0x02, 0x26, 0xFF, 0x00, 0x85, 0x22, 0x09, 0x16, 0x81, 0x02, 0x09, 0x16, 237 0xB1, 0x02, 0x85, 0x23, 0x09, 0x18, 0x81, 0x02, 0x09, 0x18, 0xB1, 0x02, 0x85, 0x24, 0x09, 0x1A, 238 0x81, 0x02, 0x09, 0x1A, 0xB1, 0x02, 0x26, 0xFF, 0x01, 0x85, 0x30, 0x09, 0x20, 0x81, 0x02, 0x09, 239 0x20, 0xB1, 0x02, 0x26, 0xFF, 0x00, 0x85, 0x38, 0x09, 0x30, 0x81, 0x02, 0x09, 0x30, 0xB1, 0x02, 240 0x75, 0x20, 0x27, 0x40, 0x0D, 0x03, 0x00, 0x85, 0x10, 0x09, 0xAC, 0x81, 0x02, 0x09, 0xAC, 0xB1, 241 0x02, 0x75, 0x10, 0x26, 0x20, 0x4E, 0x09, 0xAE, 0x81, 0x02, 0x09, 0xAE, 0xB1, 0x02, 0x75, 0x02, 242 0x15, 0x01, 0x25, 0x02, 0x85, 0x02, 0x09, 0x60, 0xA1, 0x02, 0x05, 0x81, 0x09, 0x01, 0x09, 0x02, 243 0x81, 0x00, 0xC0, 0x75, 0x06, 0x81, 0x03, 0x05, 0x82, 0x75, 0x02, 0x09, 0x60, 0xA1, 0x02, 0x05, 244 0x81, 0x09, 0x01, 0x09, 0x02, 0xB1, 0x00, 0xC0, 0x75, 0x06, 0xB1, 0x03, 0x05, 0x82, 0x75, 0x02, 245 0x85, 0x18, 0x09, 0xB0, 0xA1, 0x02, 0x05, 0x81, 0x09, 0x01, 0x09, 0x02, 0xB1, 0x00, 0xC0, 0x75, 246 0x06, 0xB1, 0x03, 0x06, 0x00, 0xFF, 0x75, 0x10, 0x95, 0x01, 0x15, 0x00, 0x27, 0xFF, 0xFF, 0x00, 247 0x00, 0x85, 0x50, 0x09, 0x09, 0x81, 0x02, 0x09, 0x09, 0xB1, 0x02, 0x85, 0x51, 0x09, 0x30, 0xB1, 248 0x02, 0x85, 0x52, 0x09, 0x31, 0xB1, 0x02, 0x75, 0x20, 0x27, 0xFF, 0xFF, 0xFF, 0x00, 0x85, 0x53, 249 0x09, 0x32, 0xB1, 0x02, 0x75, 0x08, 0x26, 0xFF, 0x00, 0x85, 0x54, 0x09, 0x33, 0xB1, 0x02, 0x95, 250 0x80, 0x85, 0x55, 0x09, 0x34, 0xB2, 0x02, 0x01, 0x75, 0x10, 0x95, 0x01, 0x25, 0x06, 0x85, 0x56, 251 0x09, 0xBC, 0x81, 0x02, 0x09, 0xBC, 0xB1, 0x02, 0x75, 0x08, 0x95, 0x10, 0x26, 0xFF, 0x00, 0x85, 252 0x57, 0x09, 0x35, 0xB2, 0x02, 0x01, 0x95, 0x03, 0x85, 0x58, 0x09, 0x37, 0xB1, 0x02, 0x95, 0x11, 253 0x85, 0x59, 0x09, 0x36, 0xB2, 0x02, 0x01, 0x95, 0x21, 0x85, 0x5A, 0x09, 0x38, 0xB2, 0x02, 0x01, 254 0x85, 0x5B, 0x09, 0x39, 0xB2, 0x02, 0x01, 0x85, 0x5C, 0x09, 0x3A, 0xB2, 0x02, 0x01, 0x95, 0x11, 255 0x85, 0x5D, 0x09, 0x3B, 0xB2, 0x02, 0x01, 0x95, 0x01, 0x25, 0x01, 0x85, 0x5E, 0x09, 0xBF, 0xB1, 256 0x02, 0x85, 0x5F, 0x09, 0xBD, 0xB1, 0x02, 0x95, 0x04, 0x26, 0xFF, 0x00, 0x85, 0x60, 0x09, 0xBE, 257 0xB1, 0x02, 0x95, 0x01, 0x25, 0x01, 0x85, 0x61, 0x09, 0xB8, 0x81, 0x02, 0x09, 0xB8, 0xB1, 0x02, 258 0x75, 0x08, 0x25, 0x27, 0x85, 0x62, 0x09, 0x3D, 0xB1, 0x02, 0x75, 0x08, 0x95, 0x80, 0x26, 0xFF, 259 0x00, 0x85, 0x63, 0x09, 0x3E, 0xB2, 0x02, 0x01, 0x75, 0x10, 0x95, 0x01, 0x25, 0x01, 0x85, 0x81, 260 0x09, 0xC1, 0x81, 0x02, 0x09, 0xC1, 0xB1, 0x02, 0x25, 0x1F, 0x85, 0x82, 0x09, 0xC5, 0x81, 0x02, 261 0x75, 0x08, 0x95, 0x02, 0x25, 0x40, 0x85, 0x84, 0x09, 0xC7, 0xB1, 0x02, 0x75, 0x10, 0x95, 0x28, 262 0x27, 0xFF, 0xFF, 0x00, 0x00, 0x85, 0x85, 0x09, 0xC8, 0xB1, 0x02, 0x95, 0x01, 0x25, 0x77, 0x85, 263 0x83, 0x09, 0xC6, 0xB1, 0x02, 0x75, 0x08, 0x25, 0x02, 0x85, 0x86, 0x09, 0xC9, 0xB1, 0x02, 0x75, 264 0x10, 0x25, 0x0B, 0x85, 0x90, 0x09, 0xE1, 0xB1, 0x02, 0x75, 0x08, 0x25, 0x01, 0x85, 0x91, 0x09, 265 0xE2, 0xB1, 0x02, 0x95, 0x80, 0x26, 0xFF, 0x00, 0x85, 0x92, 0x09, 0xE3, 0xB2, 0x02, 0x01, 0x95, 266 0x01, 0x75, 0x10, 0x85, 0xA0, 0x09, 0xA7, 0x81, 0x02, 0x09, 0xA7, 0xB1, 0x02, 0x85, 0xA1, 0x09, 267 0x83, 0x81, 0x02, 0x09, 0x83, 0xB1, 0x02, 0x85, 0xA2, 0x09, 0x84, 0x81, 0x02, 0x09, 0x84, 0xB1, 268 0x02, 0x85, 0xA3, 0x09, 0x85, 0x81, 0x02, 0x09, 0x85, 0xB1, 0x02, 0x25, 0x3F, 0x85, 0xA4, 0x09, 269 0x86, 0x81, 0x02, 0x09, 0x86, 0xB1, 0x02, 0x85, 0xA5, 0x09, 0x87, 0x81, 0x02, 0x09, 0x87, 0xB1, 270 0x02, 0x85, 0xA6, 0x09, 0x88, 0x81, 0x02, 0x09, 0x88, 0xB1, 0x02, 0x26, 0xFF, 0x00, 0x85, 0xA7, 271 0x09, 0x89, 0x81, 0x02, 0x09, 0x89, 0xB1, 0x02, 0x85, 0xA8, 0x09, 0x8A, 0x81, 0x02, 0x09, 0x8A, 272 0xB1, 0x02, 0x85, 0xA9, 0x09, 0x8B, 0x81, 0x02, 0x09, 0x8B, 0xB1, 0x02, 0x85, 0xAA, 0x09, 0x8C, 273 0x81, 0x02, 0x09, 0x8C, 0xB1, 0x02, 0x26, 0x00, 0x05, 0x16, 0x40, 0x01, 0x85, 0xB0, 0x09, 0xA2, 274 0x81, 0x02, 0x09, 0xA2, 0xB1, 0x02, 0x85, 0xB1, 0x09, 0xCA, 0x81, 0x02, 0x09, 0xCA, 0xB1, 0x02, 275 0x26, 0x00, 0x04, 0x16, 0xC8, 0x00, 0x85, 0xB8, 0x09, 0xA3, 0x81, 0x02, 0x09, 0xA3, 0xB1, 0x02, 276 0x85, 0xB9, 0x09, 0xCB, 0x81, 0x02, 0x09, 0xCB, 0xB1, 0x02, 0x25, 0x06, 0x15, 0x00, 0x85, 0xC0, 277 0x09, 0x10, 0x81, 0x02, 0x09, 0x10, 0xB1, 0x02, 0x16, 0x00, 0x80, 0x26, 0xFF, 0x7F, 0x85, 0xC2, 278 0x09, 0x0F, 0x81, 0x02, 0x09, 0x0F, 0xB1, 0x02, 0x15, 0x00, 0x25, 0x07, 0x85, 0xC3, 0x09, 0x15, 279 0x81, 0x02, 0x09, 0x15, 0xB1, 0x02, 0x15, 0x00, 0x25, 0x01, 0x85, 0xC4, 0x09, 0xA8, 0x81, 0x02, 280 0x09, 0xA8, 0xB1, 0x02, 0x25, 0x17, 0x85, 0xC5, 0x09, 0xAA, 0x81, 0x02, 0x09, 0xAA, 0xB1, 0x02, 281 0x25, 0x02, 0x85, 0xC6, 0x09, 0xA5, 0x81, 0x02, 0x09, 0xA5, 0xB1, 0x02, 0x25, 0x04, 0x85, 0xC7, 282 0x09, 0xAB, 0x81, 0x02, 0x09, 0xAB, 0xB1, 0x02, 0x25, 0x01, 0x85, 0xCA, 0x09, 0x80, 0x81, 0x02, 283 0x09, 0x80, 0xB1, 0x02, 0x26, 0xFE, 0x0F, 0x16, 0x40, 0x01, 0x85, 0xCB, 0x09, 0xA0, 0x81, 0x02, 284 0x09, 0xA0, 0xB1, 0x02, 0x25, 0x1F, 0x15, 0x00, 0x85, 0xCC, 0x09, 0xA1, 0x81, 0x02, 0x09, 0xA1, 285 0xB1, 0x02, 0x25, 0x07, 0x85, 0xCD, 0x09, 0x81, 0x81, 0x02, 0x09, 0x81, 0xB1, 0x02, 0x26, 0xFF, 286 0x00, 0x85, 0xCE, 0x09, 0xC4, 0xB1, 0x02, 0x85, 0xCF, 0x09, 0x82, 0x81, 0x02, 0x09, 0x82, 0xB1, 287 0x02, 0x26, 0x10, 0x27, 0x95, 0x02, 0x85, 0xD0, 0x09, 0xAD, 0x81, 0x02, 0x09, 0xAD, 0xB1, 0x02, 288 0x85, 0xD1, 0x09, 0xAE, 0x81, 0x02, 0x09, 0xAE, 0xB1, 0x02, 0x85, 0xD2, 0x09, 0xAF, 0x81, 0x02, 289 0x09, 0xAF, 0xB1, 0x02, 0x85, 0xD3, 0x09, 0xB0, 0x81, 0x02, 0x09, 0xB0, 0xB1, 0x02, 0x95, 0x01, 290 0x26, 0x70, 0x17, 0x85, 0xD5, 0x09, 0xB2, 0x81, 0x02, 0x09, 0xB2, 0xB1, 0x02, 0x25, 0x0F, 0x85, 291 0xD6, 0x09, 0x07, 0x81, 0x02, 0x09, 0x07, 0xB1, 0x02, 0x25, 0x20, 0x85, 0xD7, 0x09, 0xB3, 0x81, 292 0x02, 0x09, 0xB3, 0xB1, 0x02, 0x85, 0xE8, 0x09, 0x6D, 0x81, 0x02, 0x09, 0x6D, 0xB1, 0x02, 0x85, 293 0xE9, 0x09, 0x6E, 0x81, 0x02, 0x09, 0x6E, 0xB1, 0x02, 0x85, 0xEA, 0x09, 0x6F, 0x81, 0x02, 0x09, 294 0x6F, 0xB1, 0x02, 0x85, 0xEB, 0x09, 0x70, 0x81, 0x02, 0x09, 0x70, 0xB1, 0x02, 0x85, 0xEC, 0x09, 295 0x71, 0x81, 0x02, 0x09, 0x71, 0xB1, 0x02, 0x85, 0xED, 0x09, 0x72, 0x81, 0x02, 0x09, 0x72, 0xB1, 296 0x02, 0x25, 0x28, 0x85, 0xD8, 0x09, 0xB4, 0x81, 0x02, 0x09, 0xB4, 0xB1, 0x02, 0x85, 0xE2, 0x09, 297 0x67, 0x81, 0x02, 0x09, 0x67, 0xB1, 0x02, 0x85, 0xE3, 0x09, 0x68, 0x81, 0x02, 0x09, 0x68, 0xB1, 298 0x02, 0x85, 0xE4, 0x09, 0x69, 0x81, 0x02, 0x09, 0x69, 0xB1, 0x02, 0x85, 0xE5, 0x09, 0x6A, 0x81, 299 0x02, 0x09, 0x6A, 0xB1, 0x02, 0x85, 0xE6, 0x09, 0x6B, 0x81, 0x02, 0x09, 0x6B, 0xB1, 0x02, 0x85, 300 0xE7, 0x09, 0x6C, 0x81, 0x02, 0x09, 0x6C, 0xB1, 0x02, 0x25, 0x08, 0x85, 0xD4, 0x09, 0x66, 0x81, 301 0x02, 0x09, 0x66, 0xB1, 0x02, 0x26, 0xFF, 0x00, 0x85, 0xD9, 0x09, 0xB5, 0x81, 0x02, 0x09, 0xB5, 302 0xB1, 0x02, 0x85, 0xDA, 0x09, 0xB6, 0x81, 0x02, 0x09, 0xB6, 0xB1, 0x02, 0x85, 0xDB, 0x09, 0xB7, 303 0x81, 0x02, 0x09, 0xB7, 0xB1, 0x02, 0x26, 0x10, 0x27, 0x95, 0x02, 0x85, 0xDE, 0x09, 0x9C, 0x81, 304 0x02, 0x09, 0x9C, 0xB1, 0x02, 0x85, 0xDF, 0x09, 0x9D, 0x81, 0x02, 0x09, 0x9D, 0xB1, 0x02, 0x85, 305 0xE0, 0x09, 0x9E, 0x81, 0x02, 0x09, 0x9E, 0xB1, 0x02, 0x85, 0xE1, 0x09, 0x9F, 0x81, 0x02, 0x09, 306 0x9F, 0xB1, 0x02, 0x75, 0x08, 0x95, 0x07, 0x26, 0xFF, 0x00, 0x85, 0x80, 0x09, 0xC3, 0xB2, 0x02, 307 0x01, 0x75, 0x08, 0x95, 0x12, 0x26, 0xFF, 0x00, 0x85, 0xEF, 0x09, 0x3F, 0xB2, 0x02, 0x01, 0x75, 308 0x10, 0x95, 0x02, 0x15, 0x00, 0x27, 0xFF, 0xFF, 0x00, 0x00, 0x85, 0x64, 0x09, 0x2F, 0xB1, 0x02, 309 0x75, 0x08, 0x95, 0x04, 0x26, 0xFF, 0x00, 0x85, 0x65, 0x09, 0x41, 0xB1, 0x02, 0x96, 0x00, 0x02, 310 0x85, 0x66, 0x09, 0x42, 0xB1, 0x02, 0x95, 0x10, 0x85, 0x67, 0x09, 0x43, 0xB1, 0x02, 0x95, 0x02, 311 0x85, 0x68, 0x09, 0x48, 0xB1, 0x02, 0xC0 312 }; 313 314 *desc = IOBufferMemoryDescriptor::withBytes( report, 315 sizeof(report), 316 kIODirectionNone ); 317 318 return kIOReturnSuccess; 319} 320 321void IOHIDTestDriver::issueFakeReport() 322{ 323 UInt8 report[][7] = { 324 { 0x44, 0x3B, 0x49, 0x43, 0x80, 0x00, 0x00 }, 325 { 0x44, 0x3B, 0x49, 0x43, 0x00, 0x00, 0x00 }, 326 { 0x44, 0x3B, 0x49, 0x43, 0x20, 0x00, 0x00 }, 327 { 0x44, 0x3B, 0x49, 0x43, 0x00, 0x00, 0x00 }, 328 { 0x44, 0x3B, 0x49, 0x43, 0x10, 0x00, 0x00 }, 329 { 0x44, 0x3B, 0x49, 0x43, 0x00, 0x00, 0x00 }, 330 { 0x44, 0x3B, 0x49, 0x43, 0x00, 0x80, 0x00 }, 331 { 0x44, 0x3B, 0x49, 0x43, 0x00, 0x00, 0x00 }, 332 { 0x44, 0x36, 0x49, 0x43, 0x00, 0x00, 0x00 }, 333 { 0x48, 0x19, 0x49, 0x43, 0x00, 0x00, 0x00 }, 334 { 0x48, 0x15, 0x49, 0x43, 0x00, 0x00, 0x00 }, 335 { 0x4C, 0x11, 0x49, 0x43, 0x00, 0x00, 0x00 } }; 336 337 const UInt32 reportCount = sizeof(report)/sizeof(report[0]); 338 static UInt32 reportIndex = 0; 339 340 IOMemoryDescriptor * desc = IOMemoryDescriptor::withAddress( 341 report[reportIndex], 342 sizeof(report[0]), 343 kIODirectionNone ); 344 345 if (desc) 346 { 347 handleReport( desc ); 348 desc->release(); 349 } 350 351 if ( ++reportIndex >= reportCount ) 352 reportIndex = 0; 353} 354 355//--------------------------------------------------------------------------- 356// Dummy properties. 357 358OSString * IOHIDTestDriver::newTransportString() const 359{ 360 return OSString::withCStringNoCopy("USB"); 361} 362 363OSString * IOHIDTestDriver::newManufacturerString() const 364{ 365 return OSString::withCStringNoCopy("ACME"); 366} 367 368OSString * IOHIDTestDriver::newProductString() const 369{ 370 return OSString::withCStringNoCopy("AxisStick"); 371} 372 373OSNumber * IOHIDTestDriver::newVendorIDNumber() const 374{ 375 return OSNumber::withNumber(64443, 32); 376} 377 378OSNumber * IOHIDTestDriver::newProductIDNumber() const 379{ 380 return OSNumber::withNumber(0xffff, 32); 381} 382 383OSNumber * IOHIDTestDriver::newVersionNumber() const 384{ 385 return OSNumber::withNumber(256, 32); 386} 387 388OSNumber * IOHIDTestDriver::newSerialNumber() const 389{ 390 return OSNumber::withNumber(0x1234, 32); 391} 392 393OSNumber * IOHIDTestDriver::newPrimaryUsageNumber() const 394{ 395 return OSNumber::withNumber(4, 32); 396} 397 398OSNumber * IOHIDTestDriver::newPrimaryUsagePageNumber() const 399{ 400 return OSNumber::withNumber(1, 32); 401} 402