/****************************************************************************** | |
* @file HIDReportData.h | |
* | |
* @brief for TLSR chips | |
* | |
* @author public@telink-semi.com; | |
* @date Sep. 30, 2010 | |
* | |
* @attention | |
* | |
* Copyright (C) 2019-2020 Telink Semiconductor (Shanghai) Co., Ltd. | |
* | |
* 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. | |
* | |
*****************************************************************************/ | |
#pragma once | |
#define HID_RPT_DATA_SIZE_MASK (0x03) | |
#define HID_RPT_TYPE_MASK (0x0C) | |
#define HID_RPT_TAG_MASK (0xF0) | |
#define HID_RPT_TYPE_MAIN (0x00) | |
#define HID_RPT_TYPE_GLOBAL (0x04) | |
#define HID_RPT_TYPE_LOCAL (0x08) | |
#define HID_RPT_DATA_BITS_0 (0x00) | |
#define HID_RPT_DATA_BITS_8 (0x01) | |
#define HID_RPT_DATA_BITS_16 (0x02) | |
#define HID_RPT_DATA_BITS_32 (0x03) | |
#define HID_RPT_DATA_BITS(Data_bits) HID_RPT_DATA_BITS_##Data_bits | |
#define _HID_RPT_DATA_ENCODE_0(Data) | |
#define _HID_RPT_DATA_ENCODE_8(Data) , (Data & 0xFF) | |
#define _HID_RPT_DATA_ENCODE_16(Data) _HID_RPT_DATA_ENCODE_8(Data) _HID_RPT_DATA_ENCODE_8(Data>>8) | |
#define _HID_RPT_DATA_ENCODE_32(Data) _HID_RPT_DATA_ENCODE_16(Data) _HID_RPT_DATA_ENCODE_16(Data>>16) | |
#define _HID_RPT_DATA_ENCODE(Data_bits, ...) _HID_RPT_DATA_ENCODE_##Data_bits(__VA_ARGS__) | |
#define _HID_RPT_DATA_ENTRY(Type, Tag, Data_bits, ...) \ | |
(Type | Tag | HID_RPT_DATA_BITS(Data_bits)) _HID_RPT_DATA_ENCODE(Data_bits, (__VA_ARGS__)) | |
#define HID_IOF_CONSTANT BIT(0) | |
#define HID_IOF_DATA (0<<0) | |
#define HID_IOF_VARIABLE BIT(1) | |
#define HID_IOF_ARRAY (0<<1) | |
#define HID_IOF_RELATIVE BIT(2) | |
#define HID_IOF_ABSOLUTE (0<<2) | |
#define HID_IOF_WRAP BIT(3) | |
#define HID_IOF_NO_WRAP (0<<3) | |
#define HID_IOF_NON_LINEAR BIT(4) | |
#define HID_IOF_LINEAR (0<<4) | |
#define HID_IOF_NO_PREFERRED_STATE BIT(5) | |
#define HID_IOF_PREFERRED_STATE (0<<5) | |
#define HID_IOF_NULLSTATE BIT(6) | |
#define HID_IOF_NO_NULL_POSITION (0<<6) | |
#define HID_IOF_VOLATILE BIT(7) | |
#define HID_IOF_NON_VOLATILE (0<<7) | |
#define HID_IOF_BUFFERED_BYTES BIT(8) | |
#define HID_IOF_BITFIELD (0<<8) | |
#define HID_RPT_INPUT(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_MAIN , \ | |
0x80, Data_bits, __VA_ARGS__) | |
#define HID_RPT_OUTPUT(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_MAIN , \ | |
0x90, Data_bits, __VA_ARGS__) | |
#define HID_RPT_COLLECTION(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_MAIN , \ | |
0xA0, Data_bits, __VA_ARGS__) | |
#define HID_RPT_FEATURE(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_MAIN , \ | |
0xB0, Data_bits, __VA_ARGS__) | |
#define HID_RPT_END_COLLECTION(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_MAIN , \ | |
0xC0, Data_bits, __VA_ARGS__) | |
#define HID_RPT_USAGE_PAGE(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_GLOBAL, \ | |
0x00, Data_bits, __VA_ARGS__) | |
#define HID_RPT_LOGICAL_MINIMUM(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_GLOBAL, \ | |
0x10, Data_bits, __VA_ARGS__) | |
#define HID_RPT_LOGICAL_MAXIMUM(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_GLOBAL, \ | |
0x20, Data_bits, __VA_ARGS__) | |
#define HID_RPT_PHYSICAL_MINIMUM(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_GLOBAL, \ | |
0x30, Data_bits, __VA_ARGS__) | |
#define HID_RPT_PHYSICAL_MAXIMUM(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_GLOBAL, \ | |
0x40, Data_bits, __VA_ARGS__) | |
#define HID_RPT_UNIT_EXPONENT(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_GLOBAL, \ | |
0x50, Data_bits, __VA_ARGS__) | |
#define HID_RPT_UNIT(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_GLOBAL, \ | |
0x60, Data_bits, __VA_ARGS__) | |
#define HID_RPT_REPORT_SIZE(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_GLOBAL, \ | |
0x70, Data_bits, __VA_ARGS__) | |
#define HID_RPT_REPORT_ID(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_GLOBAL, \ | |
0x80, Data_bits, __VA_ARGS__) | |
#define HID_RPT_REPORT_COUNT(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_GLOBAL, \ | |
0x90, Data_bits, __VA_ARGS__) | |
#define HID_RPT_PUSH(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_GLOBAL, \ | |
0xA0, Data_bits, __VA_ARGS__) | |
#define HID_RPT_POP(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_GLOBAL, \ | |
0xB0, Data_bits, __VA_ARGS__) | |
#define HID_RPT_USAGE(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_LOCAL , \ | |
0x00, Data_bits, __VA_ARGS__) | |
#define HID_RPT_USAGE_MINIMUM(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_LOCAL , \ | |
0x10, Data_bits, __VA_ARGS__) | |
#define HID_RPT_USAGE_MAXIMUM(Data_bits, ...) _HID_RPT_DATA_ENTRY(HID_RPT_TYPE_LOCAL , \ | |
0x20, Data_bits, __VA_ARGS__) | |