* Copyright 2009, Michael Lotz, mmlr@mlotz.ch.
* Distributed under the terms of the MIT License.
*/
#ifndef HID_REPORT_H
#define HID_REPORT_H
#include "HIDParser.h"
#include "util/Vector.h"
#ifndef USERLAND_HID
#include <condition_variable.h>
#endif
#define HID_REPORT_TYPE_INPUT 0x01
#define HID_REPORT_TYPE_OUTPUT 0x02
#define HID_REPORT_TYPE_FEATURE 0x04
#define HID_REPORT_TYPE_ANY 0x07
class HIDCollection;
class HIDReportItem;
class HIDReport {
public:
HIDReport(HIDParser *parser, uint8 type,
uint8 id);
~HIDReport();
uint8 Type() { return fType; };
uint8 ID() { return fReportID; };
size_t ReportSize() { return (fReportSize + 7) / 8; };
HIDParser * Parser() { return fParser; };
HIDDevice * Device() { return fParser->Device(); };
void AddMainItem(global_item_state &globalState,
local_item_state &localState,
main_item_data &mainData,
HIDCollection *collection);
void SetReport(status_t status, uint8 *report,
size_t length);
uint8 * CurrentReport() { return fCurrentReport; };
#ifndef USERLAND_HID
status_t SendReport();
#endif
uint32 CountItems() { return fItems.Count(); };
HIDReportItem * ItemAt(uint32 index);
HIDReportItem * FindItem(uint16 usagePage, uint16 usageID);
uint32 * Usages();
uint32 CountUsages() { return fUsages.Count(); };
#ifndef USERLAND_HID
status_t WaitForReport(bigtime_t timeout);
void DoneProcessing();
#endif
void PrintToStream();
private:
void _SignExtend(uint32 &minimum, uint32 &maximum);
HIDParser * fParser;
uint8 fType;
uint8 fReportID;
uint32 fReportSize;
Vector<HIDReportItem *> fItems;
status_t fReportStatus;
uint8 * fCurrentReport;
int32 fBusyCount;
Vector<uint32> fUsages;
#ifndef USERLAND_HID
ConditionVariable fConditionVariable;
#endif
};
#endif