#ifndef _IOKIT_IOHIDUSERCLIENT_H
#define _IOKIT_IOHIDUSERCLIENT_H
#include <libkern/c++/OSContainers.h>
#include <IOKit/IOUserClient.h>
#include "IOHIDSystem.h"
#include "IOHIDEventServiceQueue.h"
class IOHIDUserClient : public IOUserClient
{
OSDeclareDefaultStructors(IOHIDUserClient)
private:
IOHIDSystem *owner;
public:
virtual IOReturn clientClose( void );
virtual IOService * getService( void );
virtual IOReturn registerNotificationPort(
mach_port_t port, UInt32 type, UInt32 refCon );
virtual IOReturn connectClient( IOUserClient * client );
virtual IOReturn clientMemoryForType( UInt32 type,
UInt32 * flags, IOMemoryDescriptor ** memory );
virtual IOExternalMethod * getTargetAndMethodForIndex(
IOService ** targetP, UInt32 index );
virtual bool start( IOService * provider );
virtual IOReturn setProperties( OSObject * properties );
IOReturn extGetUserHidActivityState(void*,void*,void*,void*,void*,void*);
};
class IOHIDParamUserClient : public IOUserClient
{
OSDeclareDefaultStructors(IOHIDParamUserClient)
private:
IOHIDSystem *owner;
public:
virtual IOService * getService( void );
virtual IOExternalMethod * getTargetAndMethodForIndex(
IOService ** targetP, UInt32 index );
virtual bool start( IOService * provider );
virtual IOReturn setProperties( OSObject * properties );
IOReturn extGetUserHidActivityState(void*,void*,void*,void*,void*,void*);
private:
virtual IOReturn extPostEvent(void*,void*,void*,void*,void*,void*);
};
class IOHIDStackShotUserClient : public IOUserClient
{
OSDeclareDefaultStructors(IOHIDStackShotUserClient)
private:
IOHIDSystem * owner;
task_t client;
public:
virtual bool initWithTask(task_t owningTask, void * security_id, UInt32 type );
virtual IOReturn clientClose( void );
virtual IOService * getService( void );
virtual IOReturn registerNotificationPort(
mach_port_t port,
UInt32 type,
UInt32 refCon );
virtual bool start( IOService * provider );
};
class IOHIDEventSystemUserClient : public IOUserClient
{
OSDeclareDefaultStructors(IOHIDEventSystemUserClient)
private:
IOHIDSystem * owner;
task_t client;
IOHIDEventServiceQueue * kernelQueue;
OSSet * userQueues;
static void initialize(void);
static UInt32 createIDForDataQueue(IODataQueue * eventQueue);
static void removeIDForDataQueue(IODataQueue * eventQueue);
static IODataQueue * copyDataQueueWithID(UInt32 queueID);
public:
virtual bool initWithTask(task_t owningTask, void * security_id, UInt32 type );
void free();
virtual IOReturn clientClose( void );
virtual IOExternalMethod * getTargetAndMethodForIndex(IOService ** targetP, UInt32 index );
virtual IOReturn createEventQueue(void*,void*,void*,void*,void*,void*);
virtual IOReturn destroyEventQueue(void*,void*,void*,void*,void*,void*);
virtual IOReturn tickle(void*,void*,void*,void*,void*,void*);
virtual IOReturn registerNotificationPort(mach_port_t port, UInt32 type, UInt32 refCon );
virtual IOReturn clientMemoryForType( UInt32 type, UInt32 * flags, IOMemoryDescriptor ** memory );
virtual IOService * getService( void );
virtual bool start( IOService * provider );
};
#endif