root/src/add-ons/kernel/drivers/input/hid_shared/HIDReportItem.h
/*
 * Copyright 2009-2011, Michael Lotz, mmlr@mlotz.ch.
 * Distributed under the terms of the MIT License.
 */
#ifndef HID_REPORT_ITEM_H
#define HID_REPORT_ITEM_H

#include <SupportDefs.h>

class HIDReport;

class HIDReportItem {
public:
                                                                HIDReportItem(HIDReport *report,
                                                                        uint32 bitOffset, uint8 bitLength,
                                                                        bool hasData, bool isArray, bool isRelative,
                                                                        uint32 minimum, uint32 maximum,
                                                                        uint32 usage);

                HIDReport *                             Report() { return fReport; };

                bool                                    HasData() { return fHasData; };
                bool                                    Relative() { return fRelative; };
                bool                                    Array() { return fArray; };
                bool                                    Signed() { return fMinimum > fMaximum; };
                uint32                                  Minimum() { return fMinimum; }

                uint16                                  UsagePage();
                uint16                                  UsageID();

                uint32                                  Usage() { return fUsage; };

                status_t                                Extract();
                status_t                                Insert();

                status_t                                SetData(uint32 data);
                uint32                                  Data() { return fData; };

                uint32                                  ScaledData(uint8 scaleToBits, bool toBeSigned);
                uint32                                  ScaledRangeData(uint32 minimum, uint32 maximum);
                float                                   ScaledFloatData();

                bool                                    Valid() { return fValid; };

                void                                    PrintToStream(uint32 indentLevel = 0);
private:
                HIDReport *                             fReport;
                uint32                                  fByteOffset;
                uint8                                   fShift;
                uint32                                  fMask;
                uint8                                   fBitCount;
                uint8                                   fByteCount;
                bool                                    fHasData;
                bool                                    fArray;
                bool                                    fRelative;
                uint32                                  fMinimum;
                uint32                                  fMaximum;
                uint32                                  fUsage;

                uint32                                  fData;
                bool                                    fValid;
};

#endif // HID_REPORT_ITEM_H