#ifndef _IOHIDSYSTEM_H
#define _IOHIDSYSTEM_H
#include <TargetConditionals.h>
#include <IOKit/IOTimerEventSource.h>
#include <IOKit/IOInterruptEventSource.h>
#include <IOKit/IOService.h>
#include <IOKit/IOMessage.h>
#include <IOKit/IOUserClient.h>
#include <IOKit/IOCommandGate.h>
#include <IOKit/IOBufferMemoryDescriptor.h>
#include <IOKit/pwr_mgt/IOPM.h>
#include "IOHIDWorkLoop.h"
#if TARGET_OS_EMBEDDED
class IOGraphicsDevice;
#else
#include <IOKit/graphics/IOGraphicsDevice.h>
#endif
#include <IOKit/hidsystem/IOHIDevice.h>
#include <IOKit/hidsystem/IOHIDShared.h>
#include <IOKit/hidsystem/IOHIDTypes.h>
#include <IOKit/hidsystem/IOLLEvent.h>
#include <IOKit/IODataQueue.h>
#include <IOKit/hidsystem/ev_keymap.h>
#include <IOKit/IOReporter.h>
#ifndef sub_iokit_hidsystem
#define sub_iokit_hidsystem err_sub(14)
#endif
#define kIOHIDSystem508MouseClickMessage iokit_family_msg(sub_iokit_hidsystem, 1)
#define kIOHIDSystemDeviceSeizeRequestMessage iokit_family_msg(sub_iokit_hidsystem, 2)
#define kIOHIDSystem508SpecialKeyDownMessage iokit_family_msg(sub_iokit_hidsystem, 3)
#define kIOHIDSystemActivityTickle iokit_family_msg(sub_iokit_hidsystem, 5)
#define kIOHIDSystemUserHidActivity iokit_family_msg(sub_iokit_hidsystem, 6)
#define kKeyboardChannelID_15_30 IOREPORT_MAKEID('K', '0', '1', '5', '-', '0', '3', '0')
#define kKeyboardChannelID_30_60 IOREPORT_MAKEID('K', '0', '3', '0', '-', '0', '6', '0')
#define kKeyboardChannelID_60_120 IOREPORT_MAKEID('K', '0', '6', '0', '-', '1', '2', '0')
#define kKeyboardChannelID_120_240 IOREPORT_MAKEID('K', '1', '2', '0', '-', '2', '4', '0')
#define kKeyboardChannelID_240_360 IOREPORT_MAKEID('K', '2', '4', '0', '-', '3', '6', '0')
#define kKeyboardChannelID_360_480 IOREPORT_MAKEID('K', '3', '6', '0', '-', '4', '8', '0')
#define kKeyboardChannelID_480_600 IOREPORT_MAKEID('K', '4', '8', '0', '-', '6', '0', '0')
#define kKeyboardChannelID_600_INF IOREPORT_MAKEID('K', '6', '0', '0', '-', '<', 'x', '>')
#define kPointingChannelID_15_30 IOREPORT_MAKEID('P', '0', '1', '5', '-', '0', '3', '0')
#define kPointingChannelID_30_60 IOREPORT_MAKEID('P', '0', '3', '0', '-', '0', '6', '0')
#define kPointingChannelID_60_120 IOREPORT_MAKEID('P', '0', '6', '0', '-', '1', '2', '0')
#define kPointingChannelID_120_240 IOREPORT_MAKEID('P', '1', '2', '0', '-', '2', '4', '0')
#define kPointingChannelID_240_360 IOREPORT_MAKEID('P', '2', '4', '0', '-', '3', '6', '0')
#define kPointingChannelID_360_480 IOREPORT_MAKEID('P', '3', '6', '0', '-', '4', '8', '0')
#define kPointingChannelID_480_600 IOREPORT_MAKEID('P', '4', '8', '0', '-', '6', '0', '0')
#define kPointingChannelID_600_INF IOREPORT_MAKEID('P', '6', '0', '0', '-', '<', 'x', '>')
#define kCombinedChannelID_15_30 IOREPORT_MAKEID('C', '0', '1', '5', '-', '0', '3', '0')
#define kCombinedChannelID_30_60 IOREPORT_MAKEID('C', '0', '3', '0', '-', '0', '6', '0')
#define kCombinedChannelID_60_120 IOREPORT_MAKEID('C', '0', '6', '0', '-', '1', '2', '0')
#define kCombinedChannelID_120_240 IOREPORT_MAKEID('C', '1', '2', '0', '-', '2', '4', '0')
#define kCombinedChannelID_240_360 IOREPORT_MAKEID('C', '2', '4', '0', '-', '3', '6', '0')
#define kCombinedChannelID_360_480 IOREPORT_MAKEID('C', '3', '6', '0', '-', '4', '8', '0')
#define kCombinedChannelID_480_600 IOREPORT_MAKEID('C', '4', '8', '0', '-', '6', '0', '0')
#define kCombinedChannelID_600_INF IOREPORT_MAKEID('C', '6', '0', '0', '-', '<', 'x', '>')
#define kKeyboardTotalChannelID_15_30 IOREPORT_MAKEID('k', '0', '1', '5', '-', '0', '3', '0')
#define kKeyboardTotalChannelID_30_60 IOREPORT_MAKEID('k', '0', '3', '0', '-', '0', '6', '0')
#define kKeyboardTotalChannelID_60_120 IOREPORT_MAKEID('k', '0', '6', '0', '-', '1', '2', '0')
#define kKeyboardTotalChannelID_120_240 IOREPORT_MAKEID('k', '1', '2', '0', '-', '2', '4', '0')
#define kKeyboardTotalChannelID_240_360 IOREPORT_MAKEID('k', '2', '4', '0', '-', '3', '6', '0')
#define kKeyboardTotalChannelID_360_480 IOREPORT_MAKEID('k', '3', '6', '0', '-', '4', '8', '0')
#define kKeyboardTotalChannelID_480_600 IOREPORT_MAKEID('k', '4', '8', '0', '-', '6', '0', '0')
#define kKeyboardTotalChannelID_600_INF IOREPORT_MAKEID('k', '6', '0', '0', '-', '<', 'x', '>')
#define kPointingTotalChannelID_15_30 IOREPORT_MAKEID('p', '0', '1', '5', '-', '0', '3', '0')
#define kPointingTotalChannelID_30_60 IOREPORT_MAKEID('p', '0', '3', '0', '-', '0', '6', '0')
#define kPointingTotalChannelID_60_120 IOREPORT_MAKEID('p', '0', '6', '0', '-', '1', '2', '0')
#define kPointingTotalChannelID_120_240 IOREPORT_MAKEID('p', '1', '2', '0', '-', '2', '4', '0')
#define kPointingTotalChannelID_240_360 IOREPORT_MAKEID('p', '2', '4', '0', '-', '3', '6', '0')
#define kPointingTotalChannelID_360_480 IOREPORT_MAKEID('p', '3', '6', '0', '-', '4', '8', '0')
#define kPointingTotalChannelID_480_600 IOREPORT_MAKEID('p', '4', '8', '0', '-', '6', '0', '0')
#define kPointingTotalChannelID_600_INF IOREPORT_MAKEID('p', '6', '0', '0', '-', '<', 'x', '>')
#define kCombinedTotalChannelID_15_30 IOREPORT_MAKEID('c', '0', '1', '5', '-', '0', '3', '0')
#define kCombinedTotalChannelID_30_60 IOREPORT_MAKEID('c', '0', '3', '0', '-', '0', '6', '0')
#define kCombinedTotalChannelID_60_120 IOREPORT_MAKEID('c', '0', '6', '0', '-', '1', '2', '0')
#define kCombinedTotalChannelID_120_240 IOREPORT_MAKEID('c', '1', '2', '0', '-', '2', '4', '0')
#define kCombinedTotalChannelID_240_360 IOREPORT_MAKEID('c', '2', '4', '0', '-', '3', '6', '0')
#define kCombinedTotalChannelID_360_480 IOREPORT_MAKEID('c', '3', '6', '0', '-', '4', '8', '0')
#define kCombinedTotalChannelID_480_600 IOREPORT_MAKEID('c', '4', '8', '0', '-', '6', '0', '0')
#define kCombinedTotalChannelID_600_INF IOREPORT_MAKEID('c', '6', '0', '0', '-', '<', 'x', '>')
#define kChannelName_15_30 "Idle 15 - 30s"
#define kChannelName_30_60 "Idle 30 - 60s"
#define kChannelName_60_120 "Idle 60 - 120s"
#define kChannelName_120_240 "Idle 120 - 240s"
#define kChannelName_240_360 "Idle 240 - 360s"
#define kChannelName_360_480 "Idle 360 - 480s"
#define kChannelName_480_600 "Idle 480 - 600s"
#define kChannelName_600_INF "Idle 600 - ...s"
#define kChannelTotalName_15_30 "Total 15 - 30s"
#define kChannelTotalName_30_60 "Total 30 - 60s"
#define kChannelTotalName_60_120 "Total 60 - 120s"
#define kChannelTotalName_120_240 "Total 120 - 240s"
#define kChannelTotalName_240_360 "Total 240 - 360s"
#define kChannelTotalName_360_480 "Total 360 - 480s"
#define kChannelTotalName_480_600 "Total 480 - 600s"
#define kChannelTotalName_600_INF "Total 600 - ...s"
class IOHIDKeyboardDevice;
class IOHIDPointingDevice;
class IOHIDEvent;
class IOFixedPoint64;
class IOHIDSystem : public IOService
{
OSDeclareDefaultStructors(IOHIDSystem);
friend class IOHIDUserClient;
friend class IOHIDParamUserClient;
friend class IOHIDEventSystemUserClient;
private:
IOHIDWorkLoop * workLoop;
IOTimerEventSource *periodicES;
IOInterruptEventSource * eventConsumerES;
IOInterruptEventSource * keyboardEQES;
IOCommandGate * cmdGate;
IOUserClient * serverConnect;
IOUserClient * paramConnect;
IONotifier * eventPublishNotify;
IONotifier * eventTerminateNotify;
IONotifier * publishNotify;
IONotifier * terminateNotify;
OSArray * ioHIDevices;
OSSet * touchEventPosters;
mach_port_t eventPort; mach_port_t stackShotPort;
mach_port_t _specialKeyPort[NX_NUM_SCANNED_SPECIALKEYS]; void *eventMsg; void *stackShotMsg;
IOBufferMemoryDescriptor * globalMemory;
uintptr_t shmem_addr; vm_size_t shmem_size;
volatile void *evs; volatile EvGlobals *evg; int lleqSize;
vm_size_t evScreenSize; void *evScreen; volatile void *lastShmemPtr; int screens; UInt32 cursorScreens; UInt32 cursorPinScreen; IOGBounds cursorPin; IOGBounds workSpace; struct ExpansionData;
ExpansionData *_privateData;
IOGPoint clickLoc; IOGPoint clickSpaceThresh;
int clickState;
bool evOpenCalled; bool evInitialized; bool evStateChanging; bool eventsOpen; bool cursorStarted; bool cursorEnabled; bool cursorCoupled; bool cursorPinned;
short leftENum; short rightENum;
uint64_t clickTime; uint64_t clickTimeThresh;
uint64_t lastEventTime;
uint64_t lastUndimEvent;
bool needToKickEventConsumer;
IOService * displayManager; IOPMPowerFlags displayState;
IOService * rootDomain;
AbsoluteTime rootDomainStateChangeDeadline;
AbsoluteTime displayStateChangeDeadline;
AbsoluteTime displaySleepWakeupDeadline;
bool displaySleepDrivenByPM;
OSDictionary * savedParameters;
const char * registryName; UInt32 maxWaitCursorFrame; UInt32 firstWaitCursorFrame;
int cachedEventFlags;
OSArray * cachedButtonStates;
OSArray * systemInfo;
IOHIDPointingDevice * _hidPointingDevice;
IOHIDKeyboardDevice * _hidKeyboardDevice;
OSArray * consumedKeys;
OSObject * lastSender;
UInt32 scrollZoomMask;
bool setParamPropertiesInProgress;
OSSet * dataQueueSet;
private:
UInt8 getSubtypeForSender(OSObject * sender);
void updateMouseEventForSender(OSObject * sender, NXEventData * evData);
void updateMouseMoveEventForSender(OSObject * sender, NXEventData * evData);
void updateScrollEventForSender(OSObject * sender, NXEventData * evData);
inline short getUniqueEventNum();
virtual IOReturn powerStateDidChangeTo( IOPMPowerFlags, unsigned long, IOService * );
static IOReturn powerStateHandler( void *target, void *refCon,
UInt32 messageType, IOService *service, void *messageArgument, vm_size_t argSize );
void _resetMouseParameters();
void _setScrollCountParameters(OSDictionary *newSettings = NULL);
void initShmem(bool clean);
void postEvent( int what,
IOFixedPoint64 * location,
AbsoluteTime ts,
NXEventData * myData,
OSObject * sender = 0,
UInt32 extPID = 0,
bool processKEQ = true);
void evDispatch(
EvCmd evcmd);
void evSpecialKeyMsg(unsigned key,
unsigned dir,
unsigned f,
unsigned l);
void kickEventConsumer();
void sendStackShotMessage(UInt32 flavor);
OSDictionary * createFilteredParamPropertiesForService(IOService * service, OSDictionary * dict);
static void _periodicEvents(IOHIDSystem * self,
IOTimerEventSource *timer);
static void doSpecialKeyMsg(IOHIDSystem * self,
struct evioSpecialKeyMsg *msg);
static void doKickEventConsumer(IOHIDSystem * self);
static void doProcessKeyboardEQ(IOHIDSystem * self);
static void processKeyboardEQ(IOHIDSystem * self, AbsoluteTime * deadline = 0);
void doProcessNotifications();
bool genericNotificationHandler(void * ref, IOService * newService, IONotifier * notifier );
static bool handlePublishNotification( void * target, IOService * newService );
static bool handlePublishNotificationGated( void * target, IOService * newService );
static bool handleTerminateNotification( void * target, IOService * service );
static bool handleTerminateNotificationGated( void * target, IOService * newService );
static void makeNumberParamProperty( OSDictionary * dict, const char * key,
unsigned long long number, unsigned int bits );
static void makeInt32ArrayParamProperty( OSDictionary * dict, const char * key,
UInt32 * array, unsigned int count );
private:
void scheduleNextPeriodicEvent();
void periodicEvents(IOTimerEventSource *timer);
bool startCursor();
bool resetCursor();
void showWaitCursor();
void hideWaitCursor();
void animateWaitCursor();
void changeCursor(int frame);
int pointToScreen(IOGPoint * p);
inline void showCursor();
inline void hideCursor();
inline void moveCursor();
void enableContinuousCursor();
void disableContinuousCursor();
void _onScreenCursorPin();
void attachDefaultEventSources();
void detachEventSources();
bool registerEventSource(IOService * source);
void setCursorPosition(IOGPoint * newLoc, bool external, OSObject * sender=0);
void _setButtonState(int buttons,
AbsoluteTime ts,
OSObject * sender);
void _setCursorPosition(bool external = false, bool proximityChange = false, OSObject * sender=0);
static bool _idleTimeSerializerCallback(void * target, void * ref, OSSerialize *s);
static bool _displaySerializerCallback(void * target, void * ref, OSSerialize *s);
void _postMouseMoveEvent(int what,
AbsoluteTime theClock,
OSObject * sender);
void createParameters( void );
public:
static IOHIDSystem * instance();
static void scaleLocationToCurrentScreen(IOGPoint *location, IOGBounds *bounds);
virtual bool init(OSDictionary * properties = 0);
virtual IOHIDSystem * probe(IOService * provider,
SInt32 * score);
virtual bool start(IOService * provider);
virtual IOReturn message(UInt32 type, IOService * provider,
void * argument);
virtual void free();
virtual bool attach( IOService * provider );
virtual void detach( IOService * provider );
virtual IOWorkLoop *getWorkLoop() const;
virtual IOReturn evOpen(void);
virtual IOReturn evClose(void);
virtual IOReturn setProperties( OSObject * properties );
virtual IOReturn setParamProperties(OSDictionary * dict);
virtual IOReturn createShmem(void*,void*,void*,void*,void*,void*);
virtual IOReturn registerEventQueue(IODataQueue * queue);
virtual IOReturn unregisterEventQueue(IODataQueue * queue);
virtual void setEventPort(mach_port_t port);
void setDisplaySleepDrivenByPM(bool val);
bool initReporters();
virtual IOReturn configureReport(IOReportChannelList *channels,
IOReportConfigureAction action,
void *result,
void *destination);
virtual IOReturn updateReport(IOReportChannelList *channels,
IOReportUpdateAction action,
void *result,
void *destination);
private:
static IOReturn doSetEventPort(IOHIDSystem *self, void *port_void, void *arg1, void *arg2, void *arg3);
void setEventPortGated(mach_port_t port);
public:
virtual IOReturn setSpecialKeyPort(
int special_key,
mach_port_t key_port);
virtual mach_port_t specialKeyPort(int special_key);
virtual IOReturn newUserClient(task_t owningTask,
void * security_id,
UInt32 type,
OSDictionary * properties,
IOUserClient ** handler);
public:
virtual void relativePointerEvent(int buttons,
int dx,
int dy,
AbsoluteTime ts);
virtual void absolutePointerEvent(int buttons,
IOGPoint * newLoc,
IOGBounds *bounds,
bool proximity,
int pressure,
int stylusAngle,
AbsoluteTime ts);
virtual void scrollWheelEvent(short deltaAxis1,
short deltaAxis2,
short deltaAxis3,
AbsoluteTime ts);
virtual void tabletEvent(NXEventData *tabletData,
AbsoluteTime ts);
virtual void proximityEvent(NXEventData *proximityData,
AbsoluteTime ts);
public:
virtual void keyboardEvent(unsigned eventType,
unsigned flags,
unsigned key,
unsigned charCode,
unsigned charSet,
unsigned origCharCode,
unsigned origCharSet,
unsigned keyboardType,
bool repeat,
AbsoluteTime ts);
virtual void keyboardSpecialEvent( unsigned eventType,
unsigned flags,
unsigned key,
unsigned flavor,
UInt64 guid,
bool repeat,
AbsoluteTime ts);
virtual void updateEventFlags(unsigned flags);
private:
void _scaleLocationToCurrentScreen(IOFixedPoint64 &location, IOGBounds *bounds);
static void _relativePointerEvent(IOHIDSystem * self,
int buttons,
int dx,
int dy,
AbsoluteTime ts,
OSObject * sender,
void * refcon);
static void _absolutePointerEvent(IOHIDSystem * self,
int buttons,
IOGPoint * newLoc,
IOGBounds *bounds,
bool proximity,
int pressure,
int stylusAngle,
AbsoluteTime ts,
OSObject * sender,
void * refcon);
static void _scrollWheelEvent( IOHIDSystem *self,
short deltaAxis1,
short deltaAxis2,
short deltaAxis3,
IOFixed fixedDelta1,
IOFixed fixedDelta2,
IOFixed fixedDelta3,
SInt32 pointDeltaAxis1,
SInt32 pointDeltaAxis2,
SInt32 pointDeltaAxis3,
UInt32 options,
AbsoluteTime ts,
OSObject * sender,
void * refcon);
static void _tabletEvent( IOHIDSystem *self,
NXEventData *tabletData,
AbsoluteTime ts,
OSObject * sender,
void * refcon);
static void _proximityEvent( IOHIDSystem *self,
NXEventData *proximityData,
AbsoluteTime ts,
OSObject * sender,
void * refcon);
static void _keyboardEvent( IOHIDSystem * self,
unsigned eventType,
unsigned flags,
unsigned key,
unsigned charCode,
unsigned charSet,
unsigned origCharCode,
unsigned origCharSet,
unsigned keyboardType,
bool repeat,
AbsoluteTime ts,
OSObject * sender,
void * refcon);
static void _keyboardSpecialEvent(IOHIDSystem * self,
unsigned eventType,
unsigned flags,
unsigned key,
unsigned flavor,
UInt64 guid,
bool repeat,
AbsoluteTime ts,
OSObject * sender,
void * refcon);
static void _updateEventFlags( IOHIDSystem * self,
unsigned flags,
OSObject * sender,
void * refcon);
public:
virtual IOReturn setEventsEnable(void*,void*,void*,void*,void*,void*);
virtual IOReturn setCursorEnable(void*,void*,void*,void*,void*,void*);
virtual IOReturn extPostEvent(void*,void*,void*,void*,void*,void*);
virtual IOReturn extSetMouseLocation(void*,void*,void*,void*,void*,void*);
virtual IOReturn extGetButtonEventNum(void*,void*,void*,void*,void*,void*);
IOReturn extSetBounds(void*,void*,void*,void*,void*,void*);
IOReturn extSetOnScreenBounds(void*,void*,void*,void*,void*,void*);
IOReturn setBounds(IOGBounds * bounds, IOGPoint * screenPoint, bool onScreen);
IOReturn extGetStateForSelector(void*,void*,void*,void*,void*,void*);
IOReturn extSetStateForSelector(void*,void*,void*,void*,void*,void*);
IOReturn extRegisterVirtualDisplay(void*,void*,void*,void*,void*,void*);
IOReturn extUnregisterVirtualDisplay(void*,void*,void*,void*,void*,void*);
IOReturn extSetVirtualDisplayBounds(void*,void*,void*,void*,void*,void*);
IOReturn extGetUserHidActivityState(void*,void*,void*,void*,void*,void*);
IOReturn setContinuousCursorEnable(void*,void*,void*,void*,void*,void*);
public:
virtual int registerScreen(IOGraphicsDevice * instance,
IOGBounds * bp,
IOGBounds * vbp);
private:
static IOReturn doRegisterScreen(IOHIDSystem *self, IOGraphicsDevice *io_gd, IOGBounds *bp, IOGBounds * vbp, void *arg3);
IOReturn registerScreenGated(IOGraphicsDevice *io_gd, IOGBounds *bp, IOGBounds * vbp, SInt32 *index);
public:
virtual void unregisterScreen(int index);
public:
virtual IOGBounds * workspaceBounds();
private:
void relativePointerEvent( int buttons,
int dx,
int dy,
AbsoluteTime ts,
OSObject * sender);
void absolutePointerEvent( int buttons,
IOGPoint * newLoc,
IOGBounds *bounds,
bool proximity,
int pressure,
int stylusAngle,
AbsoluteTime ts,
OSObject * sender);
void scrollWheelEvent( short deltaAxis1,
short deltaAxis2,
short deltaAxis3,
IOFixed fixedDelta1,
IOFixed fixedDelta2,
IOFixed fixedDelta3,
SInt32 pointDeltaAxis1,
SInt32 pointDeltaAxis2,
SInt32 pointDeltaAxis3,
UInt32 options,
AbsoluteTime ts,
OSObject * sender);
void tabletEvent( NXEventData * tabletData,
AbsoluteTime ts,
OSObject * sender);
void proximityEvent( NXEventData * proximityData,
AbsoluteTime ts,
OSObject * sender);
void keyboardEvent(unsigned eventType,
unsigned flags,
unsigned key,
unsigned charCode,
unsigned charSet,
unsigned origCharCode,
unsigned origCharSet,
unsigned keyboardType,
bool repeat,
AbsoluteTime ts,
OSObject * sender);
void keyboardSpecialEvent( unsigned eventType,
unsigned flags,
unsigned key,
unsigned flavor,
UInt64 guid,
bool repeat,
AbsoluteTime ts,
OSObject * sender);
void updateEventFlags(unsigned flags, OSObject * sender);
bool addConsumedKey(unsigned key);
bool removeConsumedKey(unsigned key);
static IOReturn doEvClose (IOHIDSystem *self);
IOReturn evCloseGated (void);
static IOReturn doSetEventsEnablePre (IOHIDSystem *self, void *p1);
IOReturn setEventsEnablePreGated (void *p1);
static IOReturn doSetEventsEnablePost (IOHIDSystem *self, void *p1);
IOReturn setEventsEnablePostGated (void *p1);
static IOReturn doUnregisterScreen (IOHIDSystem *self, void * arg0, void *arg1);
IOReturn unregisterScreenGated (int index, bool internal);
static IOReturn doSetDisplayBounds (IOHIDSystem *self, void * arg0, void * arg1);
IOReturn setDisplayBoundsGated (UInt32 index, IOGBounds *bounds);
static IOReturn doCreateShmem (IOHIDSystem *self, void * arg0);
IOReturn createShmemGated (void * p1);
static IOReturn doRegisterEventQueue (IOHIDSystem *self, void * arg0);
IOReturn registerEventQueueGated (void * p1);
static IOReturn doUnregisterEventQueue (IOHIDSystem *self, void * arg0);
IOReturn unregisterEventQueueGated (void * p1);
static IOReturn doRelativePointerEvent (IOHIDSystem *self, void * args);
void relativePointerEventGated(int buttons,
int dx,
int dy,
SInt64 ts,
OSObject * sender);
static IOReturn doAbsolutePointerEvent (IOHIDSystem *self, void * args);
void absolutePointerEventGated (int buttons,
IOGPoint * newLoc,
IOGBounds *bounds,
bool proximity,
int pressure,
int stylusAngle,
AbsoluteTime ts,
OSObject * sender);
static IOReturn doScrollWheelEvent(IOHIDSystem *self, void * args);
void scrollWheelEventGated (short deltaAxis1,
short deltaAxis2,
short deltaAxis3,
IOFixed fixedDelta1,
IOFixed fixedDelta2,
IOFixed fixedDelta3,
SInt32 pointDeltaAxis1,
SInt32 pointDeltaAxis2,
SInt32 pointDeltaAxis3,
UInt32 options,
AbsoluteTime ts,
OSObject * sender);
static IOReturn doTabletEvent (IOHIDSystem *self, void * arg0, void * arg1, void * arg2);
void tabletEventGated ( NXEventData *tabletData,
AbsoluteTime ts,
OSObject * sender);
static IOReturn doProximityEvent (IOHIDSystem *self, void * arg0, void * arg1, void * arg2);
void proximityEventGated ( NXEventData *proximityData,
AbsoluteTime ts,
OSObject * sender);
static IOReturn doKeyboardEvent (IOHIDSystem *self, void * args);
void keyboardEventGated (unsigned eventType,
unsigned flags,
unsigned key,
unsigned charCode,
unsigned charSet,
unsigned origCharCode,
unsigned origCharSet,
unsigned keyboardType,
bool repeat,
AbsoluteTime ts,
OSObject * sender);
static IOReturn doKeyboardSpecialEvent (IOHIDSystem *self, void * args);
void keyboardSpecialEventGated (
unsigned eventType,
unsigned flags,
unsigned key,
unsigned flavor,
UInt64 guid,
bool repeat,
AbsoluteTime ts,
OSObject * sender);
static IOReturn doUpdateEventFlags (IOHIDSystem *self, void * args);
void updateEventFlagsGated (unsigned flags, OSObject * sender);
static IOReturn doNewUserClient (IOHIDSystem *self, void * args);
IOReturn newUserClientGated (task_t owningTask,
void * security_id,
UInt32 type,
OSDictionary * properties,
IOUserClient ** handler);
static IOReturn doSetCursorEnable (IOHIDSystem *self, void * arg0);
IOReturn setCursorEnableGated (void * p1);
static IOReturn doSetContinuousCursorEnable (IOHIDSystem *self, void * arg0);
IOReturn setContinuousCursorEnableGated (void * p1);
static IOReturn doExtPostEvent(IOHIDSystem *self, void * arg0, void * arg1, void * arg2, void * arg3);
IOReturn extPostEventGated (void * p1, void * p2, void * p3);
static IOReturn doExtSetMouseLocation (IOHIDSystem *self, void * args);
IOReturn extSetMouseLocationGated (void * args);
static IOReturn doExtGetButtonEventNum (IOHIDSystem *self, void * arg0, void * arg1);
IOReturn extGetButtonEventNumGated (void * p1, void * p2);
static IOReturn doSetParamPropertiesPre (IOHIDSystem *self, void * arg0, void * arg1);
IOReturn setParamPropertiesPreGated (OSDictionary * dict, OSIterator ** pOpenIter);
static IOReturn doSetParamPropertiesPost (IOHIDSystem *self, void * arg0);
IOReturn setParamPropertiesPostGated (OSDictionary * dict);
IOReturn updateParamPropertiesGated(IOService * source);
static IOReturn doExtGetStateForSelector (IOHIDSystem *self, void *p1, void *p2);
static IOReturn doExtSetStateForSelector (IOHIDSystem *self, void *p1, void *p2);
IOReturn getCapsLockState(unsigned int *state_O);
IOReturn setCapsLockState(unsigned int state_I);
IOReturn getNumLockState(unsigned int *state_O);
IOReturn setNumLockState(unsigned int state_I);
public:
virtual void setStackShotPort(mach_port_t port);
virtual UInt32 eventFlags();
virtual void dispatchEvent(IOHIDEvent *event, IOOptionBits options=0);
void updateHidActivity();
void hidActivityChecker();
static void reportUserHidActivity(IOHIDSystem *self, void *args );
void reportUserHidActivityGated(void *args );
static IOReturn getUserHidActivityState(IOHIDSystem *self, void *arg0);
IOReturn getUserHidActivityStateGated(void *state);
void updateIdleReporters(uint32_t mask, AbsoluteTime ts);
};
#endif