1/* 2 * Copyright 2009, Michael Lotz, mmlr@mlotz.ch. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef HID_REPORT_H 6#define HID_REPORT_H 7 8#include "HIDParser.h" 9 10#ifndef USERLAND_HID 11#include <condition_variable.h> 12#endif 13 14#define HID_REPORT_TYPE_INPUT 0x01 15#define HID_REPORT_TYPE_OUTPUT 0x02 16#define HID_REPORT_TYPE_FEATURE 0x04 17#define HID_REPORT_TYPE_ANY 0x07 18 19class HIDCollection; 20class HIDReportItem; 21 22class HIDReport { 23public: 24 HIDReport(HIDParser *parser, uint8 type, 25 uint8 id); 26 ~HIDReport(); 27 28 uint8 Type() { return fType; }; 29 uint8 ID() { return fReportID; }; 30 size_t ReportSize() { return (fReportSize + 7) / 8; }; 31 32 HIDParser * Parser() { return fParser; }; 33 HIDDevice * Device() { return fParser->Device(); }; 34 35 void AddMainItem(global_item_state &globalState, 36 local_item_state &localState, 37 main_item_data &mainData, 38 HIDCollection *collection); 39 40 void SetReport(status_t status, uint8 *report, 41 size_t length); 42 uint8 * CurrentReport() { return fCurrentReport; }; 43 44#ifndef USERLAND_HID 45 status_t SendReport(); 46#endif 47 48 uint32 CountItems() { return fItemsUsed; }; 49 HIDReportItem * ItemAt(uint32 index); 50 HIDReportItem * FindItem(uint16 usagePage, uint16 usageID); 51 52#ifndef USERLAND_HID 53 status_t WaitForReport(bigtime_t timeout); 54 void DoneProcessing(); 55#endif 56 57 void PrintToStream(); 58 59private: 60 void _SignExtend(uint32 &minimum, uint32 &maximum); 61 62 HIDParser * fParser; 63 64 uint8 fType; 65 uint8 fReportID; 66 uint32 fReportSize; 67 68 uint32 fItemsUsed; 69 uint32 fItemsAllocated; 70 HIDReportItem ** fItems; 71 72 status_t fReportStatus; 73 uint8 * fCurrentReport; 74 int32 fBusyCount; 75 76#ifndef USERLAND_HID 77 ConditionVariable fConditionVariable; 78#endif 79}; 80 81#endif // HID_REPORT_H 82