1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
/*
* types.h: HID Parser types definitions
*
* This file is part of the MGE UPS SYSTEMS HID Parser
*
* Copyright (C)
* 1998-2003 MGE UPS SYSTEMS, Luc Descotils
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* -------------------------------------------------------------------------- */
#ifndef HIDTYPES_H
#define HIDTYPES_H
#ifdef __cplusplus
/* *INDENT-OFF* */
extern "C" {
/* *INDENT-ON* */
#endif /* __cplusplus */
#include <sys/types.h>
#include "nut_stdint.h"
/*
* Constants
* -------------------------------------------------------------------------- */
#define PATH_SIZE 10 /* Deep max for Path */
#define USAGE_TAB_SIZE 50 /* Size of usage stack */
#define MAX_REPORT 300 /* Including FEATURE, INPUT and OUTPUT */
#define REPORT_DSC_SIZE 6144 /* Size max of Report Descriptor */
#define MAX_REPORT_TS 3 /* Max time validity of a report */
/*
* 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
/*
* HIDNode_t struct
*
* Describe a HID Path point: Usage = bits 0..15, UPage = bits 16..31
* -------------------------------------------------------------------------- */
typedef uint32_t HIDNode_t;
/*
* HIDPath struct
*
* Describe a HID Path
* -------------------------------------------------------------------------- */
typedef struct {
uint8_t Size; /* HID Path size */
HIDNode_t Node[PATH_SIZE]; /* HID Path */
} HIDPath_t;
/*
* HIDData struct
*
* Describe a HID Data with its location in report
* -------------------------------------------------------------------------- */
typedef struct {
HIDPath_t Path; /* HID Path */
uint8_t ReportID; /* Report ID */
uint8_t Offset; /* Offset of data in report */
uint8_t Size; /* Size of data in bit */
uint8_t Type; /* Type : FEATURE / INPUT / OUTPUT */
uint8_t Attribute; /* Report field attribute */
long Unit; /* HID Unit */
int8_t UnitExp; /* Unit exponent */
long LogMin; /* Logical Min */
long LogMax; /* Logical Max */
long PhyMin; /* Physical Min */
long PhyMax; /* Physical Max */
int8_t have_PhyMin; /* Physical Min defined? */
int8_t have_PhyMax; /* Physical Max defined? */
} HIDData_t;
/*
* HIDDesc struct
*
* Holds a parsed report descriptor
* -------------------------------------------------------------------------- */
typedef struct {
int nitems; /* number of items in descriptor */
HIDData_t *item; /* list of items */
int replen[256]; /* list of report lengths, in byte */
} HIDDesc_t;
#ifdef __cplusplus
/* *INDENT-OFF* */
} /* extern "C" */
/* *INDENT-ON* */
#endif /* __cplusplus */
#endif /* HIDTYPES_H */
|