/* * 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 * 2015 Eaton, Arnaud Quette (Update MAX_REPORT) * * 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 #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 500 /* 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 /* Usage Pages */ /* For more details, please see docs/hid-subdrivers.txt */ #define PAGE_POWER_DEVICE 0x84 #define PAGE_BATTERY_SYSTEM 0x85 /* Usage within Power Device page */ #define USAGE_POW_UNDEFINED 0x00840000 #define USAGE_POW_I_NAME 0x00840001 #define USAGE_POW_PRESENT_STATUS 0x00840002 #define USAGE_POW_CHANGED_STATUS 0x00840003 #define USAGE_POW_UPS 0x00840004 #define USAGE_POW_POWER_SUPPLY 0x00840005 #define USAGE_POW_PERIPHERAL_DEVICE 0x00840006 #define USAGE_POW_BATTERY_SYSTEM 0x00840010 #define USAGE_POW_BATTERY_SYSTEM_ID 0x00840011 #define USAGE_POW_BATTERY 0x00840012 #define USAGE_POW_BATTERY_ID 0x00840013 #define USAGE_POW_CHARGER 0x00840014 #define USAGE_POW_CHARGER_ID 0x00840015 #define USAGE_POW_POWER_CONVERTER 0x00840016 #define USAGE_POW_POWER_CONVERTER_ID 0x00840017 #define USAGE_POW_OUTLET_SYSTEM 0x00840018 #define USAGE_POW_OUTLET_SYSTEM_ID 0x00840019 #define USAGE_POW_INPUT 0x0084001A #define USAGE_POW_INPUT_ID 0x0084001B #define USAGE_POW_OUTPUT 0x0084001C #define USAGE_POW_OUTPUT_ID 0x0084001D #define USAGE_POW_FLOW 0x0084001E #define USAGE_POW_FLOW_ID 0x0084001F #define USAGE_POW_OUTLET 0x00840020 #define USAGE_POW_OUTLET_ID 0x00840021 #define USAGE_POW_GANG 0x00840022 #define USAGE_POW_GANG_ID 0x00840023 #define USAGE_POW_POWER_SUMMARY 0x00840024 #define USAGE_POW_POWER_SUMMARY_ID 0x00840025 #define USAGE_POW_VOLTAGE 0x00840030 #define USAGE_POW_CURRENT 0x00840031 #define USAGE_POW_FREQUENCY 0x00840032 #define USAGE_POW_APPARENT_POWER 0x00840033 #define USAGE_POW_ACTIVE_POWER 0x00840034 #define USAGE_POW_PERCENT_LOAD 0x00840035 #define USAGE_POW_TEMPERATURE 0x00840036 #define USAGE_POW_HUMIDITY 0x00840037 #define USAGE_POW_BAD_COUNT 0x00840038 #define USAGE_POW_CONFIG_VOLTAGE 0x00840040 #define USAGE_POW_CONFIG_CURRENT 0x00840041 #define USAGE_POW_CONFIG_FREQUENCY 0x00840042 #define USAGE_POW_CONFIG_APPARENT_POWER 0x00840043 #define USAGE_POW_CONFIG_ACTIVE_POWER 0x00840044 #define USAGE_POW_CONFIG_PERCENT_LOAD 0x00840045 #define USAGE_POW_CONFIG_TEMPERATURE 0x00840046 #define USAGE_POW_CONFIG_HUMIDITY 0x00840047 #define USAGE_POW_SWITCH_ON_CONTROL 0x00840050 #define USAGE_POW_SWITCH_OFF_CONTROL 0x00840051 #define USAGE_POW_TOGGLE_CONTROL 0x00840052 #define USAGE_POW_LOW_VOLTAGE_TRANSFER 0x00840053 #define USAGE_POW_HIGH_VOLTAGE_TRANSFER 0x00840054 #define USAGE_POW_DELAY_BEFORE_REBOOT 0x00840055 #define USAGE_POW_DELAY_BEFORE_STARTUP 0x00840056 #define USAGE_POW_DELAY_BEFORE_SHUTDOWN 0x00840057 #define USAGE_POW_TEST 0x00840058 #define USAGE_POW_MODULE_RESET 0x00840059 #define USAGE_POW_AUDIBLE_ALARM_CONTROL 0x0084005A #define USAGE_POW_PRESENT 0x00840060 #define USAGE_POW_GOOD 0x00840061 #define USAGE_POW_INTERNAL_FAILURE 0x00840062 #define USAGE_POW_VOLTAGE_OUT_OF_RANGE 0x00840063 #define USAGE_POW_FREQUENCY_OUT_OF_RANGE 0x00840064 #define USAGE_POW_OVERLOAD 0x00840065 #define USAGE_POW_OVER_CHARGED 0x00840066 #define USAGE_POW_OVER_TEMPERATURE 0x00840067 #define USAGE_POW_SHUTDOWN_REQUESTED 0x00840068 #define USAGE_POW_SHUTDOWN_IMMINENT 0x00840069 #define USAGE_POW_SWITCH_ON_OFF 0x0084006B #define USAGE_POW_SWITCHABLE 0x0084006C #define USAGE_POW_USED 0x0084006D #define USAGE_POW_BOOST 0x0084006E #define USAGE_POW_BUCK 0x0084006F #define USAGE_POW_INITIALIZED 0x00840070 #define USAGE_POW_TESTED 0x00840071 #define USAGE_POW_AWAITING_POWER 0x00840072 #define USAGE_POW_COMMUNICATION_LOST 0x00840073 #define USAGE_POW_I_MANUFACTURER 0x008400FD #define USAGE_POW_I_PRODUCT 0x008400FE #define USAGE_POW_I_SERIAL_NUMBER 0x008400FF /* Usage within Battery System page */ #define USAGE_BAT_UNDEFINED 0x00850000 #define USAGE_BAT_SMB_BATTERY_MODE 0x00850001 #define USAGE_BAT_SMB_BATTERY_STATUS 0x00850002 #define USAGE_BAT_SMB_ALARM_WARNING 0x00850003 #define USAGE_BAT_SMB_CHARGER_MODE 0x00850004 #define USAGE_BAT_SMB_CHARGER_STATUS 0x00850005 #define USAGE_BAT_SMB_CHARGER_SPEC_INFO 0x00850006 #define USAGE_BAT_SMB_SELECTOR_STATE 0x00850007 #define USAGE_BAT_SMB_SELECTOR_PRESETS 0x00850008 #define USAGE_BAT_SMB_SELECTOR_INFO 0x00850009 #define USAGE_BAT_OPTIONAL_MFG_FUNCTION_1 0x00850010 #define USAGE_BAT_OPTIONAL_MFG_FUNCTION_2 0x00850011 #define USAGE_BAT_OPTIONAL_MFG_FUNCTION_3 0x00850012 #define USAGE_BAT_OPTIONAL_MFG_FUNCTION_4 0x00850013 #define USAGE_BAT_OPTIONAL_MFG_FUNCTION_5 0x00850014 #define USAGE_BAT_CONNECTION_TO_SMBUS 0x00850015 #define USAGE_BAT_OUTPUT_CONNECTION 0x00850016 #define USAGE_BAT_CHARGER_CONNECTION 0x00850017 #define USAGE_BAT_BATTERY_INSERTION 0x00850018 #define USAGE_BAT_USE_NEXT 0x00850019 #define USAGE_BAT_OK_TO_USE 0x0085001A #define USAGE_BAT_BATTERY_SUPPORTED 0x0085001B #define USAGE_BAT_SELECTOR_REVISION 0x0085001C #define USAGE_BAT_CHARGING_INDICATOR 0x0085001D #define USAGE_BAT_MANUFACTURER_ACCESS 0x00850028 #define USAGE_BAT_REMAINING_CAPACITY_LIMIT 0x00850029 #define USAGE_BAT_REMAINING_TIME_LIMIT 0x0085002A #define USAGE_BAT_AT_RATE 0x0085002B #define USAGE_BAT_CAPACITY_MODE 0x0085002C #define USAGE_BAT_BROADCAST_TO_CHARGER 0x0085002D #define USAGE_BAT_PRIMARY_BATTERY 0x0085002E #define USAGE_BAT_CHARGE_CONTROLLER 0x0085002F #define USAGE_BAT_TERMINATE_CHARGE 0x00850040 #define USAGE_BAT_TERMINATE_DISCHARGE 0x00850041 #define USAGE_BAT_BELOW_REMAINING_CAPACITY_LIMIT 0x00850042 #define USAGE_BAT_REMAINING_TIME_LIMIT_EXPIRED 0x00850043 #define USAGE_BAT_CHARGING 0x00850044 #define USAGE_BAT_DISCHARGING 0x00850045 #define USAGE_BAT_FULLY_CHARGED 0x00850046 #define USAGE_BAT_FULLY_DISCHARGED 0x00850047 #define USAGE_BAT_CONDITIONING_FLAG 0x00850048 #define USAGE_BAT_AT_RATE_OK 0x00850049 #define USAGE_BAT_SMB_ERROR_CODE 0x0085004A #define USAGE_BAT_NEED_REPLACEMENT 0x0085004B #define USAGE_BAT_AT_RATE_TIME_TO_FULL 0x00850060 #define USAGE_BAT_AT_RATE_TIME_TO_EMPTY 0x00850061 #define USAGE_BAT_AVERAGE_CURRENT 0x00850062 #define USAGE_BAT_MAX_ERROR 0x00850063 #define USAGE_BAT_RELATIVE_STATE_OF_CHARGE 0x00850064 #define USAGE_BAT_ABSOLUTE_STATE_OF_CHARGE 0x00850065 #define USAGE_BAT_REMAINING_CAPACITY 0x00850066 #define USAGE_BAT_FULL_CHARGE_CAPACITY 0x00850067 #define USAGE_BAT_RUN_TIME_TO_EMPTY 0x00850068 #define USAGE_BAT_AVERAGE_TIME_TO_EMPTY 0x00850069 #define USAGE_BAT_AVERAGE_TIME_TO_FULL 0x0085006A #define USAGE_BAT_CYCLE_COUNT 0x0085006B #define USAGE_BAT_BATT_PACK_MODEL_LEVEL 0x00850080 #define USAGE_BAT_INTERNAL_CHARGE_CONTROLLER 0x00850081 #define USAGE_BAT_PRIMARY_BATTERY_SUPPORT 0x00850082 #define USAGE_BAT_DESIGN_CAPACITY 0x00850083 #define USAGE_BAT_SPECIFICATION_INFO 0x00850084 #define USAGE_BAT_MANUFACTURER_DATE 0x00850085 #define USAGE_BAT_SERIAL_NUMBER 0x00850086 #define USAGE_BAT_I_MANUFACTURER_NAME 0x00850087 #define USAGE_BAT_I_DEVICE_NAME 0x00850088 #define USAGE_BAT_I_DEVICE_CHEMISTRY 0x00850089 #define USAGE_BAT_MANUFACTURER_DATA 0x0085008A #define USAGE_BAT_RECHARGEABLE 0x0085008B #define USAGE_BAT_WARNING_CAPACITY_LIMIT 0x0085008C #define USAGE_BAT_CAPACITY_GRANULARITY_1 0x0085008D #define USAGE_BAT_CAPACITY_GRANULARITY_2 0x0085008E #define USAGE_BAT_I_OEMINFORMATION 0x0085008F #define USAGE_BAT_INHIBIT_CHARGE 0x008500C0 #define USAGE_BAT_ENABLE_POLLING 0x008500C1 #define USAGE_BAT_RESET_TO_ZERO 0x008500C2 #define USAGE_BAT_AC_PRESENT 0x008500D0 #define USAGE_BAT_BATTERY_PRESENT 0x008500D1 #define USAGE_BAT_POWER_FAIL 0x008500D2 #define USAGE_BAT_ALARM_INHIBITED 0x008500D3 #define USAGE_BAT_THERMISTOR_UNDER_RANGE 0x008500D4 #define USAGE_BAT_THERMISTOR_HOT 0x008500D5 #define USAGE_BAT_THERMISTOR_COLD 0x008500D6 #define USAGE_BAT_THERMISTOR_OVER_RANGE 0x008500D7 #define USAGE_BAT_VOLTAGE_OUT_OF_RANGE 0x008500D8 #define USAGE_BAT_CURRENT_OUT_OF_RANGE 0x008500D9 #define USAGE_BAT_CURRENT_NOT_REGULATED 0x008500DA #define USAGE_BAT_VOLTAGE_NOT_REGULATED 0x008500DB #define USAGE_BAT_MASTER_MODE 0x008500DC #define USAGE_BAT_CHARGER_SELECTOR_SUPPORT 0x008500F0 #define USAGE_BAT_CHARGER_SPEC 0x008500F1 #define USAGE_BAT_LEVEL_2 0x008500F2 #define USAGE_BAT_LEVEL_3 0x008500F3 /* * 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 { size_t nitems; /* number of items in descriptor */ HIDData_t *item; /* list of items */ size_t replen[256]; /* list of report lengths, in byte */ } HIDDesc_t; #ifdef __cplusplus /* *INDENT-OFF* */ } /* extern "C" */ /* *INDENT-ON* */ #endif /* __cplusplus */ #endif /* HIDTYPES_H */