xref: /haiku/src/add-ons/kernel/drivers/input/hid_shared/HIDCollection.h (revision 1deede7388b04dbeec5af85cae7164735ea9e70d)
1 /*
2  * Copyright 2009-2011, Michael Lotz, mmlr@mlotz.ch.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef HID_COLLECTION_H
6 #define HID_COLLECTION_H
7 
8 #include "HIDParser.h"
9 
10 class HIDReport;
11 class HIDReportItem;
12 
13 class HIDCollection {
14 public:
15 								HIDCollection(HIDCollection *parent,
16 									uint8 type, local_item_state &localState);
17 								~HIDCollection();
18 
19 		uint8					Type() { return fType; };
20 
21 		uint16					UsagePage();
22 		uint16					UsageID();
23 
24 		HIDCollection *			Parent() { return fParent; };
25 
26 		status_t				AddChild(HIDCollection *child);
27 		uint32					CountChildren() { return fChildCount; };
28 		HIDCollection *			ChildAt(uint32 index);
29 
30 		uint32					CountChildrenFlat(uint8 type);
31 		HIDCollection *			ChildAtFlat(uint8 type, uint32 index);
32 
33 		void					AddItem(HIDReportItem *item);
34 		uint32					CountItems() { return fItemCount; };
35 		HIDReportItem *			ItemAt(uint32 index);
36 
37 		uint32					CountItemsFlat();
38 		HIDReportItem *			ItemAtFlat(uint32 index);
39 
40 		void					BuildReportList(uint8 reportType,
41 									HIDReport **reportList,
42 									uint32 &reportCount);
43 
44 		void					PrintToStream(uint32 indentLevel = 0);
45 
46 private:
47 		HIDCollection *			_ChildAtFlat(uint8 type, uint32 &index);
48 		HIDReportItem *			_ItemAtFlat(uint32 &index);
49 
50 		HIDCollection *			fParent;
51 
52 		uint8					fType;
53 		uint32					fUsage;
54 		uint8					fStringID;
55 		uint8					fPhysicalID;
56 
57 		uint32					fChildCount;
58 		HIDCollection **		fChildren;
59 
60 		uint32					fItemCount;
61 		uint32					fItemsAllocated;
62 		HIDReportItem **		fItems;
63 };
64 
65 #endif // HID_COLLECTION_H
66