IOHIDNXEventRouter.h [plain text]
#ifndef _IOKIT_IOHIDNXEVENTROUTER_H
#define _IOKIT_IOHIDNXEVENTROUTER_H
#include <dispatch/dispatch.h>
#include <IOKit/hid/IOHIDServicePlugIn.h>
#include <IOKit/IODataQueueClient.h>
#include "IOHIDIUnknown.h"
#include <IOKit/hid/IOHIDEventQueue.h>
class IOHIDNXEventRouter : public IOHIDIUnknown
{
private:
IOHIDNXEventRouter(IOHIDNXEventRouter &src);
void operator =(IOHIDNXEventRouter &src);
protected:
IOHIDNXEventRouter();
virtual ~IOHIDNXEventRouter();
static IOCFPlugInInterface sIOCFPlugInInterfaceV1;
static IOHIDServiceInterface2 sIOHIDServiceInterface2;
struct InterfaceMap _hidService;
io_service_t _service;
bool _isOpen;
mach_port_t _asyncPort;
dispatch_source_t _asyncEventSource;
CFMutableDictionaryRef _serviceProperties;
CFMutableDictionaryRef _servicePreferences;
IOHIDServiceEventCallback _eventCallback;
void * _eventTarget;
void * _eventRefcon;
dispatch_queue_t _dispatchQueue;
IOHIDEventQueueRef queue_;
static inline IOHIDNXEventRouter *getThis(void *self) { return (IOHIDNXEventRouter *)((InterfaceMap *) self)->obj; };
static IOReturn _probe(void *self, CFDictionaryRef propertyTable, io_service_t service, SInt32 *order);
static IOReturn _start(void *self, CFDictionaryRef propertyTable, io_service_t service);
static IOReturn _stop(void *self);
static boolean_t _open(void *self, IOOptionBits options);
static void _close(void *self, IOOptionBits options);
static CFTypeRef _copyProperty(void *self, CFStringRef key);
static boolean_t _setProperty(void *self, CFStringRef key, CFTypeRef property);
static IOHIDEventRef _copyEvent(void *self, IOHIDEventType type, IOHIDEventRef matching, IOOptionBits options);
static IOReturn _setOutputEvent(void *self, IOHIDEventRef event);
static void _setEventCallback(void *self, IOHIDServiceEventCallback callback, void * target, void * refcon);
static void _scheduleWithDispatchQueue(void *self, dispatch_queue_t queue);
static void _unscheduleFromDispatchQueue(void *self, dispatch_queue_t queue);
static void _queueEventSourceCallback(void * info);
void dispatchHIDEvent(IOHIDEventRef event, IOOptionBits options=0);
static void _queueCallback (void * info);
public:
static IOCFPlugInInterface **alloc();
virtual HRESULT queryInterface(REFIID iid, void **ppv);
virtual IOReturn probe(CFDictionaryRef propertyTable, io_service_t service, SInt32 * order);
virtual IOReturn start(CFDictionaryRef propertyTable, io_service_t service);
virtual IOReturn stop();
virtual boolean_t open(IOOptionBits options);
virtual void close(IOOptionBits options);
virtual CFTypeRef copyProperty(CFStringRef key);
virtual boolean_t setProperty(CFStringRef key, CFTypeRef property);
virtual IOHIDEventRef copyEvent(IOHIDEventType type, IOHIDEventRef matching, IOOptionBits options);
virtual IOReturn setOutputEvent(IOHIDEventRef event);
virtual void setEventCallback(IOHIDServiceEventCallback callback, void * target, void * refcon);
virtual void scheduleWithDispatchQueue(dispatch_queue_t queue);
virtual void unscheduleFromDispatchQueue(dispatch_queue_t queue);
};
#endif