IOHIDEventServiceUserClient.h [plain text]
#ifndef _IOKIT_IOHIDEVENTSERVICEUSERCLIENT_H
#define _IOKIT_IOHIDEVENTSERVICEUSERCLIENT_H
#define kIOHIDEventServiceUserClientType 'HIDD'
enum IOHIDEventServiceUserClientCommandCodes {
kIOHIDEventServiceUserClientOpen,
kIOHIDEventServiceUserClientClose,
kIOHIDEventServiceUserClientCopyEvent,
kIOHIDEventServiceUserClientSetElementValue,
kIOHIDEventServiceUserClientNumCommands
};
#ifdef KERNEL
#include <IOKit/IOUserClient.h>
#include "IOHIDEventService.h"
#include <IOKit/IOCommandGate.h>
class IOHIDEventServiceQueue;
class IOHIDEventServiceUserClient : public IOUserClient
{
OSDeclareDefaultStructors(IOHIDEventServiceUserClient)
private:
typedef struct ExternalMethodGatedArguments {
uint32_t selector;
IOExternalMethodArguments * arguments;
IOExternalMethodDispatch * dispatch;
OSObject * target;
void * reference;
} ExternalMethodGatedArguments;
static const IOExternalMethodDispatch
sMethods[kIOHIDEventServiceUserClientNumCommands];
IOHIDEventService * _owner;
IOHIDEventServiceQueue * _queue;
IOOptionBits _options;
IOCommandGate * _commandGate;
uint32_t _state;
uint64_t _lastEventTime;
uint32_t _lastEventType;
uint32_t _droppedEventCount;
uint64_t _lastDroppedEventTime;
uint64_t _eventCount;
void eventServiceCallback( IOHIDEventService * sender,
void * context,
IOHIDEvent * event,
IOOptionBits options);
static IOReturn _open( IOHIDEventServiceUserClient * target,
void * reference,
IOExternalMethodArguments * arguments);
static IOReturn _close( IOHIDEventServiceUserClient * target,
void * reference,
IOExternalMethodArguments * arguments);
static IOReturn _copyEvent(
IOHIDEventServiceUserClient * target,
void * reference,
IOExternalMethodArguments * arguments);
static IOReturn _setElementValue(
IOHIDEventServiceUserClient * target,
void * reference,
IOExternalMethodArguments * arguments);
void enqueueEventGated( IOHIDEvent * event);
bool serializeDebugState(void * ref, OSSerialize * serializer);
protected:
virtual IOReturn clientClose( void );
virtual void stop( IOService * provider );
virtual IOService * getService( void );
virtual IOReturn registerNotificationPort(
mach_port_t port,
UInt32 type,
UInt32 refCon );
virtual IOReturn clientMemoryForType(
UInt32 type,
IOOptionBits * options,
IOMemoryDescriptor ** memory );
IOReturn clientMemoryForTypeGated(
IOOptionBits * options,
IOMemoryDescriptor ** memory );
virtual IOReturn externalMethod(
uint32_t selector,
IOExternalMethodArguments * arguments,
IOExternalMethodDispatch * dispatch,
OSObject * target,
void * reference);
IOReturn externalMethodGated(ExternalMethodGatedArguments *arguments);
public:
virtual bool initWithTask(task_t owningTask, void * security_id, UInt32 type);
virtual bool start( IOService * provider );
virtual bool didTerminate(IOService *provider, IOOptionBits options, bool *defer);
virtual void free();
virtual IOReturn setProperties( OSObject * properties );
virtual IOReturn open(IOOptionBits options);
virtual IOReturn close();
virtual IOHIDEvent * copyEvent(IOHIDEventType type, IOHIDEvent * matching, IOOptionBits options = 0);
virtual IOReturn setElementValue(UInt32 usagePage, UInt32 usage, UInt32 value);
};
#endif
#endif