#ifndef _IOKIT_HID_IOHIDEVENTQUEUE_H
#define _IOKIT_HID_IOHIDEVENTQUEUE_H
#include <IOKit/IOSharedDataQueue.h>
#include <IOKit/IOLocks.h>
#include "IOHIDKeys.h"
#include "IOHIDElementPrivate.h"
#include "IOHIDLibUserClient.h"
enum {
kHIDQueueStarted = 0x01,
kHIDQueueDisabled = 0x02
};
#define HID_QUEUE_HEADER_SIZE (sizeof(IOHIDElementValue)) // 24b
#define HID_QUEUE_CAPACITY_MIN 16384 // 16k
#define HID_QUEUE_CAPACITY_MAX 131072 // 128k
#define HID_QUEUE_CAPACITY_MAX_ENTITLED 3145728 // 3mb
class IOHIDEventQueue: public IOSharedDataQueue
{
OSDeclareDefaultStructors( IOHIDEventQueue )
protected:
UInt32 _numEntries;
UInt32 _entrySize;
IOOptionBits _state;
IOHIDQueueOptionsType _options;
UInt64 _enqueueErrorCount;
public:
static IOHIDEventQueue *withCapacity(UInt32 size);
static IOHIDEventQueue *withEntries(UInt32 numEntries, UInt32 entrySize);
virtual Boolean enqueue(void *data, UInt32 dataSize);
inline virtual void setOptions(IOHIDQueueOptionsType flags) { _options = flags; }
inline virtual IOHIDQueueOptionsType getOptions() { return _options; }
inline virtual void start() { _state |= kHIDQueueStarted; }
inline virtual void stop() { _state &= ~kHIDQueueStarted; }
inline virtual void enable() { _state &= ~kHIDQueueDisabled; }
inline virtual void disable() { _state |= kHIDQueueDisabled; }
virtual bool serialize(OSSerialize * serializer) const;
};
#endif