/*!@file *@brief HID parser type definitions * * Header GPL * @todo Properly tag all files with GPL (as appropriate) */ #ifndef TYPE_H #define TYPE_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include /* * Types */ #if !AIX typedef unsigned char uchar; #endif #if HPUX || __APPLE__ || __FreeBSD__ typedef unsigned long ulong; #endif typedef short wchar; /* * Constants */ #define PATH_SIZE 10 /*!< maximum depth for Path */ #define USAGE_TAB_SIZE 50 /*!< Size of usage stack */ /*! Including FEATURE, INPUT and OUTPUT */ #define MAX_REPORT 300 /*! Size max of Report Descriptor */ #define REPORT_DSC_SIZE 6144 /* * Items * -------------------------------------------------------------------------- */ #define SIZE_0 0x00 #define SIZE_1 0x01 #define SIZE_2 0x02 #define SIZE_4 0x03 #define SIZE_MASK 0x03 #define TYPE_MAIN 0x00 #define TYPE_GLOBAL 0x04 #define TYPE_LOCAL 0x08 #define TYPE_MASK 0x0C /* Main items */ #define ITEM_COLLECTION 0xA0 #define ITEM_END_COLLECTION 0xC0 #define ITEM_FEATURE 0xB0 #define ITEM_INPUT 0x80 #define ITEM_OUTPUT 0x90 /* Global items */ #define ITEM_UPAGE 0x04 #define ITEM_LOG_MIN 0x14 #define ITEM_LOG_MAX 0x24 #define ITEM_PHY_MIN 0x34 #define ITEM_PHY_MAX 0x44 #define ITEM_UNIT_EXP 0x54 #define ITEM_UNIT 0x64 #define ITEM_REP_SIZE 0x74 #define ITEM_REP_ID 0x84 #define ITEM_REP_COUNT 0x94 /* Local items */ #define ITEM_USAGE 0x08 #define ITEM_STRING 0x78 /* Long item */ #define ITEM_LONG 0xFC #define ITEM_MASK 0xFC /* Attribute Flags */ #define ATTR_DATA_CST 0x01 #define ATTR_NVOL_VOL 0x80 /*! * Describe a HID Path point */ typedef struct { ushort UPage; ushort Usage; } HIDNode; /*! * Describe a HID Path */ typedef struct { uchar Size; /*!< HID Path size */ HIDNode Node[PATH_SIZE]; /*!< HID Path */ } HIDPath; /*! * Describe a HID Data with its location in report */ typedef struct { long Value; /*!< HID Object Value */ HIDPath Path; /*!< HID Path */ uchar ReportID; /*!< Report ID, (from incoming report) ??? */ uchar Offset; /*!< Offset of data in report */ uchar Size; /*!< Size of data in bit */ uchar Type; /*!< Type : FEATURE / INPUT / OUTPUT */ uchar Attribute; /*!< Report field attribute */ ulong Unit; /*!< HID Unit */ char UnitExp; /*!< Unit exponent */ long LogMin; /*!< Logical Min */ long LogMax; /*!< Logical Max */ long PhyMin; /*!< Physical Min */ long PhyMax; /*!< Physical Max */ } HIDData; /* -------------------------------------------------------------------------- */ typedef struct { uchar ReportDesc[REPORT_DSC_SIZE]; /*!< Store Report Descriptor */ ushort ReportDescSize; /*!< Size of Report Descriptor */ ushort Pos; /*!< Store current pos in descriptor */ uchar Item; /*!< Store current Item */ long Value; /*!< Store current Value */ HIDData Data; /*!< Store current environment */ uchar OffsetTab[MAX_REPORT][3]; /*!< Store ID, type & offset of report*/ uchar ReportCount; /*!< Store Report Count */ uchar Count; /*!< Store local report count */ ushort UPage; /*!< Global UPage */ HIDNode UsageTab[USAGE_TAB_SIZE]; /*!< Usage stack */ uchar UsageSize; /*!< Design number of usage used */ uchar nObject; /*!< Count objects in Report Descriptor */ uchar nReport; /*!< Count reports in Report Descriptor */ } HIDParser; #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ #endif