/*!@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 <sys/types.h>
/*
* 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
syntax highlighted by Code2HTML, v. 0.9.1