/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef HIDUTIL_HIDDEFS_H_
#define HIDUTIL_HIDDEFS_H_
namespace HidUtil {
// HID specification constants definition
//
// Definitions are from HID specification v1.11, which can be obtained from http://www.usb.org
//
// Preferred namespace for namespace restriction than enum class as enum class has strong type
// which is inconvenient in a parser, in which input binary values has to be compared with these
// definitions frequnetly.
namespace HidDef {
// Hid spec 6.2.2.3
namespace TagType {
enum {
MAIN,
GLOBAL,
LOCAL,
RESERVED
};
} // namespace TagType
// HID spec 6.2.2.4
namespace ReportFlag {
enum {
DATA_CONST = 1,
ARRAY_VARIABLE = 2,
WRAP = 4,
NONLINEAR = 8,
NO_PREFERRED = 0x10,
NULL_STATE = 0x20,
VOLATILE = 0x40,
// bit 7 reserved
BUFFERED_BYTES = 0x100
};
} // namespace ReportFlag
// HID spec 6.2.2.5
namespace MainTag {
enum {
INPUT = 8,
OUTPUT = 9,
COLLECTION = 10,
FEATURE = 11,
END_COLLECTION = 12,
LONG_ITEM = 15,
};
} // namespace MainTag
// HID spec 6.2.2.6
namespace CollectionType {
enum {
PHYSICAL = 0,
APPLICATION,
LOGICAL,
REPORT,
NAMED_ARRAY,
USAGE_SWITCH,
USAGE_MODIFIER
};
} // namespace CollectionType
// HID spec 6.2.2.7
namespace GlobalTag {
enum {
USAGE_PAGE,
LOGICAL_MINIMUM,
LOGICAL_MAXIMUM,
PHYSICAL_MINIMUM,
PHYSICAL_MAXIMUM,
UNIT_EXPONENT,
UNIT,
REPORT_SIZE,
REPORT_ID,
REPORT_COUNT,
PUSH,
POP
};
} //namespace GlobalTag
// HID spec 6.2.2.8
namespace LocalTag {
enum HidLocalTag {
USAGE,
USAGE_MINIMUM,
USAGE_MAXIMUM,
DESIGNATOR_INDEX,
DESIGNATOR_MINIMUM,
DESIGNATOR_MAXIMUM,
// there is a hole here in the spec
STRING_INDEX = 7,
STRING_MINIMUM,
STRING_MAXIMUM,
DELIMITOR
};
} // namespace LocalTag
} //namespace HidDef
} //namespace HidUtil
#endif // HIDUTIL_HIDDEFS_H_