#ifndef _IOKIT_IOHIDUSERCLIENT_H
#define _IOKIT_IOHIDUSERCLIENT_H
#include <libkern/c++/OSContainers.h>
#include <IOKit/IOUserClient.h>
#include "IOHIDSystem.h"
#include "IOHIDEventServiceQueue.h"
#define MAX_SCREENS 32 // same as EV_MAX_SCREENS in HIDSystem
class IOHIDUserClient : public IOUserClient
{
OSDeclareDefaultStructors(IOHIDUserClient)
private:
IOHIDSystem *owner;
int _screenTokens[MAX_SCREENS];
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 initWithTask(task_t owningTask, void * , UInt32 );
virtual bool start( IOService * provider ) APPLE_KEXT_OVERRIDE;
virtual void stop( IOService * provider ) APPLE_KEXT_OVERRIDE;
virtual IOReturn close( void );
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 clientClose(void) APPLE_KEXT_OVERRIDE;
virtual IOReturn extPostEvent(void*,void*,void*,void*,void*,void*);
};
class IOHIDEventSystemUserClient : public IOUserClient
{
OSDeclareDefaultStructors(IOHIDEventSystemUserClient)
private:
IOHIDSystem * owner;
IOHIDEventServiceQueue * kernelQueue;
IOCommandGate * commandGate;
mach_port_t _port;
IOReturn registerNotificationPortGated(mach_port_t port, UInt32 type, UInt32 refCon);
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 createEventQueueGated(void*p1,void*p2,void*p3, void*);
virtual IOReturn destroyEventQueue(void*,void*,void*,void*,void*,void*);
virtual IOReturn destroyEventQueueGated(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 );
IOReturn clientMemoryForTypeGated( UInt32 type, UInt32 * flags, IOMemoryDescriptor ** memory );
virtual IOService * getService( void );
virtual bool start( IOService * provider );
virtual void stop ( IOService * provider );
};
#endif