• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/IOKitUser-1050.1.21/hid.subproj/

Lines Matching defs:device

49 static Boolean              __IOHIDUserDeviceSetupAsyncSupport(IOHIDUserDeviceRef device);
50 static IOReturn __IOHIDUserDeviceStartDevice(IOHIDUserDeviceRef device, IOOptionBits options);
134 IOHIDUserDeviceRef device = NULL;
140 device = (IOHIDUserDeviceRef)_CFRuntimeCreateInstance(allocator, IOHIDUserDeviceGetTypeID(), size, NULL);
142 if (!device)
145 offset = device;
148 device->options = options;
150 return device;
158 IOHIDUserDeviceRef device = (IOHIDUserDeviceRef)object;
160 if ( device->queue.data )
163 vm_address_t mappedMem = (vm_address_t)device->queue.data;
165 mach_vm_address_t mappedMem = (mach_vm_address_t)device->queue.data;
167 IOConnectUnmapMemory ( device->connect,
171 device->queue.data = NULL;
174 if ( device->queue.dispatchSource ) {
175 dispatch_release(device->queue.dispatchSource);
176 device->queue.dispatchSource = NULL;
179 if ( device->queue.source ) {
180 CFRelease(device->queue.source);
181 device->queue.source = NULL;
184 if ( device->queue.port ) {
185 mach_port_t port = CFMachPortGetPort(device->queue.port);
187 CFMachPortInvalidate(device->queue.port);
188 CFRelease(device->queue.port);
195 device->queue.port = NULL;
198 if ( device->async.port ) {
199 IONotificationPortDestroy(device->async.port);
200 device->async.port = NULL;
203 if ( device->properties ) {
204 CFRelease(device->properties);
205 device->properties = NULL;
208 if ( device->connect ) {
209 IOObjectRelease(device->connect);
210 device->connect = 0;
213 if ( device->service ) {
214 IOObjectRelease(device->service);
215 device->service = 0;
234 IOReturn __IOHIDUserDeviceStartDevice(IOHIDUserDeviceRef device, IOOptionBits options)
240 data = IOCFSerialize(device->properties, 0);
243 kr = IOConnectCallMethod(device->connect, kIOHIDResourceDeviceUserClientMethodCreate, &input, 1, CFDataGetBytePtr(data), CFDataGetLength(data), NULL, NULL, NULL, NULL);
269 IOHIDUserDeviceRef device = NULL;
275 device = __IOHIDUserDeviceCreate(allocator, NULL, options);
276 require(device, error);
278 device->properties = CFDictionaryCreateCopy(allocator, properties);
279 require(device->properties, error);
281 device->service = IOServiceGetMatchingService(__masterPort, IOServiceMatching("IOHIDResource"));
282 require(device->service, error);
284 kr = IOServiceOpen(device->service, mach_task_self(), kIOHIDResourceUserClientTypeDevice, &device->connect);
287 if ( (device->options & kIOHIDUserDeviceCreateOptionStartWhenScheduled) == 0 ) {
288 kr = __IOHIDUserDeviceStartDevice(device, device->options);
292 result = device;
297 if ( device )
298 CFRelease(device);
306 Boolean __IOHIDUserDeviceSetupAsyncSupport(IOHIDUserDeviceRef device)
310 if ( !device->queue.data ) {
320 ret = IOConnectMapMemory(device->connect, 0, mach_task_self(), &address, &size, kIOMapAnywhere);
323 device->queue.data =(IODataQueueMemory * )address;
326 if ( !device->queue.port ) {
330 CFMachPortContext context = {0, device, NULL, NULL, NULL};
332 device->queue.port = CFMachPortCreateWithPort(CFGetAllocator(device), port, __IOHIDUserDeviceQueueCallback, &context, FALSE);
335 require_action(device->queue.port, exit, result=false);
337 if ( !device->async.port ) {
338 device->async.port = IONotificationPortCreate(kIOMasterPortDefault);
341 require_action(device->async.port, exit, result=false);
353 void IOHIDUserDeviceScheduleWithRunLoop(IOHIDUserDeviceRef device, CFRunLoopRef runLoop, CFStringRef runLoopMode)
355 if ( !__IOHIDUserDeviceSetupAsyncSupport(device) )
358 if ( !device->queue.source ) {
359 device->queue.source = CFMachPortCreateRunLoopSource(CFGetAllocator(device), device->queue.port, 0);
360 if ( !device->queue.source )
364 if ( !device->async.source ) {
365 device->async.source = IONotificationPortGetRunLoopSource(device->async.port);
366 if ( !device->async.source )
370 CFRunLoopAddSource(runLoop, device->async.source, runLoopMode);
371 CFRunLoopAddSource(runLoop, device->queue.source, runLoopMode);
372 IOConnectSetNotificationPort(device->connect, 0, CFMachPortGetPort(device->queue.port), (uintptr_t)NULL);
374 if ( device->options & kIOHIDUserDeviceCreateOptionStartWhenScheduled ) {
375 __IOHIDUserDeviceStartDevice(device, device->options);
383 void IOHIDUserDeviceUnscheduleFromRunLoop(IOHIDUserDeviceRef device, CFRunLoopRef runLoop, CFStringRef runLoopMode)
385 if ( !device->queue.port )
388 IOConnectSetNotificationPort(device->connect, 0, MACH_PORT_NULL, (uintptr_t)NULL);
389 CFRunLoopRemoveSource(runLoop, device->queue.source, runLoopMode);
390 CFRunLoopRemoveSource(runLoop, device->async.source, runLoopMode);
396 void IOHIDUserDeviceScheduleWithDispatchQueue(IOHIDUserDeviceRef device, dispatch_queue_t queue)
398 if ( !__IOHIDUserDeviceSetupAsyncSupport(device) )
401 if ( !device->queue.dispatchSource ) {
402 device->queue.dispatchSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_MACH_RECV, CFMachPortGetPort(device->queue.port), 0, queue);
404 if ( !device->queue.dispatchSource )
407 dispatch_source_set_event_handler(device->queue.dispatchSource, ^{
408 CFRetain(device);
410 mach_msg_header_t *msg = (mach_msg_header_t *)CFAllocatorAllocate(CFGetAllocator(device), size, 0);
414 msg->msgh_local_port = CFMachPortGetPort(device->queue.port);
417 kern_return_t ret = mach_msg(msg, MACH_RCV_MSG|MACH_RCV_LARGE|MACH_RCV_TRAILER_TYPE(MACH_MSG_TRAILER_FORMAT_0)|MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_AV), 0, msg->msgh_size, CFMachPortGetPort(device->queue.port), 0, MACH_PORT_NULL);
421 msg = CFAllocatorReallocate(CFGetAllocator(device), msg, newSize, 0);
425 __IOHIDUserDeviceQueueCallback(device->queue.port, msg, msg->msgh_size, device);
429 CFRelease(device);
433 IONotificationPortSetDispatchQueue(device->async.port, queue);
435 dispatch_resume(device->queue.dispatchSource);
436 IOConnectSetNotificationPort(device->connect, 0, CFMachPortGetPort(device->queue.port), (uintptr_t)NULL);
438 device->dispatchQueue = queue;
440 if ( device->options & kIOHIDUserDeviceCreateOptionStartWhenScheduled ) {
441 __IOHIDUserDeviceStartDevice(device, device->options);
449 void IOHIDUserDeviceUnscheduleFromDispatchQueue(IOHIDUserDeviceRef device, dispatch_queue_t queue)
451 if ( !device->queue.port || device->dispatchQueue != queue)
454 IOConnectSetNotificationPort(device->connect, 0, MACH_PORT_NULL, (uintptr_t)NULL);
456 if ( device->queue.dispatchSource ) {
457 dispatch_release(device->queue.dispatchSource);
458 device->queue.dispatchSource = NULL;
461 if ( device->async.port ) {
462 IONotificationPortDestroy(device->async.port);
463 device->async.port = NULL;
470 void IOHIDUserDeviceRegisterGetReportCallback(IOHIDUserDeviceRef device, IOHIDUserDeviceReportCallback callback, void * refcon)
472 device->getReport.callback = callback;
473 device->getReport.refcon = refcon;
479 void IOHIDUserDeviceRegisterGetReportWithReturnLengthCallback(IOHIDUserDeviceRef device, IOHIDUserDeviceReportWithReturnLengthCallback callback, void * refcon)
481 device->getReportWithReturnLength.callback = callback;
482 device->getReportWithReturnLength.refcon = refcon;
489 void IOHIDUserDeviceRegisterSetReportCallback(IOHIDUserDeviceRef device, IOHIDUserDeviceReportCallback callback, void * refcon)
491 device->setReport.callback = callback;
492 device->setReport.refcon = refcon;
504 IOHIDUserDeviceRef device = (IOHIDUserDeviceRef)info;
506 if ( !device->queue.data )
514 while ((nextEntry = IODataQueuePeek(device->queue.data))) {
526 if ( device->setReport.callback )
527 response[kIOHIDResourceUserClientResponseIndexResult] = (*device->setReport.callback)(device->setReport.refcon, header->type, header->reportID, report, reportLength);
537 if ( device->getReport.callback )
538 response[kIOHIDResourceUserClientResponseIndexResult] = (*device->getReport.callback)(device->getReport.refcon, header->type, header->reportID, responseReport, responseLength);
540 if ( device->getReportWithReturnLength.callback )
541 response[kIOHIDResourceUserClientResponseIndexResult] = (*device->getReportWithReturnLength.callback)(device->getReportWithReturnLength.refcon, header->type, header->reportID, responseReport, &responseLength);
545 IOConnectCallMethod(device->connect, kIOHIDResourceDeviceUserClientMethodPostReportResponse, response, sizeof(response)/sizeof(uint64_t), responseReport, responseLength, NULL, NULL, NULL, NULL);
552 IODataQueueDequeue(device->queue.data, NULL, &dataSize);
573 IOReturn IOHIDUserDeviceHandleReportAsyncWithTimeStamp(IOHIDUserDeviceRef device, uint64_t timestamp, uint8_t *report, CFIndex reportLength, IOHIDUserDeviceHandleReportAsyncCallback callback, void * refcon)
586 wakePort = IONotificationPortGetMachPort(device->async.port);
591 return IOConnectCallAsyncMethod(device->connect, kIOHIDResourceDeviceUserClientMethodHandleReport, wakePort, asyncRef, kOSAsyncRef64Count, &timestamp, 1, report, reportLength, NULL, NULL, NULL, NULL);
597 IOReturn IOHIDUserDeviceHandleReportWithTimeStamp(IOHIDUserDeviceRef device, uint64_t timestamp, uint8_t * report, CFIndex reportLength)
599 return IOConnectCallMethod(device->connect, kIOHIDResourceDeviceUserClientMethodHandleReport, &timestamp, 1, report, reportLength, NULL, NULL, NULL, NULL);
605 IOReturn IOHIDUserDeviceHandleReport(IOHIDUserDeviceRef device, uint8_t * report, CFIndex reportLength)
607 return IOHIDUserDeviceHandleReportWithTimeStamp(device, mach_absolute_time(), report, reportLength);
613 IOReturn IOHIDUserDeviceHandleReportAsync(IOHIDUserDeviceRef device, uint8_t * report, CFIndex reportLength, IOHIDUserDeviceHandleReportAsyncCallback callback, void * refcon)
615 return IOHIDUserDeviceHandleReportAsyncWithTimeStamp(device, mach_absolute_time(), report, reportLength, callback, refcon);