demo/hid: Change the license validity period & some unreasonable LOG print. example/hid: Added the Vendor Report output support.
257 lines
12 KiB
C
257 lines
12 KiB
C
// Copyright 2017-2018 Espressif Systems (Shanghai) PTE 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.
|
|
|
|
#ifndef HID_DEV_H__
|
|
#define HID_DEV_H__
|
|
|
|
#include "hidd_le_prf_int.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
/* HID Report type */
|
|
#define HID_TYPE_INPUT 1
|
|
#define HID_TYPE_OUTPUT 2
|
|
#define HID_TYPE_FEATURE 3
|
|
|
|
// HID Keyboard/Keypad Usage IDs (subset of the codes available in the USB HID Usage Tables spec)
|
|
#define HID_KEY_RESERVED 0 // No event inidicated
|
|
#define HID_KEY_A 4 // Keyboard a and A
|
|
#define HID_KEY_B 5 // Keyboard b and B
|
|
#define HID_KEY_C 6 // Keyboard c and C
|
|
#define HID_KEY_D 7 // Keyboard d and D
|
|
#define HID_KEY_E 8 // Keyboard e and E
|
|
#define HID_KEY_F 9 // Keyboard f and F
|
|
#define HID_KEY_G 10 // Keyboard g and G
|
|
#define HID_KEY_H 11 // Keyboard h and H
|
|
#define HID_KEY_I 12 // Keyboard i and I
|
|
#define HID_KEY_J 13 // Keyboard j and J
|
|
#define HID_KEY_K 14 // Keyboard k and K
|
|
#define HID_KEY_L 15 // Keyboard l and L
|
|
#define HID_KEY_M 16 // Keyboard m and M
|
|
#define HID_KEY_N 17 // Keyboard n and N
|
|
#define HID_KEY_O 18 // Keyboard o and O
|
|
#define HID_KEY_P 19 // Keyboard p and p
|
|
#define HID_KEY_Q 20 // Keyboard q and Q
|
|
#define HID_KEY_R 21 // Keyboard r and R
|
|
#define HID_KEY_S 22 // Keyboard s and S
|
|
#define HID_KEY_T 23 // Keyboard t and T
|
|
#define HID_KEY_U 24 // Keyboard u and U
|
|
#define HID_KEY_V 25 // Keyboard v and V
|
|
#define HID_KEY_W 26 // Keyboard w and W
|
|
#define HID_KEY_X 27 // Keyboard x and X
|
|
#define HID_KEY_Y 28 // Keyboard y and Y
|
|
#define HID_KEY_Z 29 // Keyboard z and Z
|
|
#define HID_KEY_1 30 // Keyboard 1 and !
|
|
#define HID_KEY_2 31 // Keyboard 2 and @
|
|
#define HID_KEY_3 32 // Keyboard 3 and #
|
|
#define HID_KEY_4 33 // Keyboard 4 and %
|
|
#define HID_KEY_5 34 // Keyboard 5 and %
|
|
#define HID_KEY_6 35 // Keyboard 6 and ^
|
|
#define HID_KEY_7 36 // Keyboard 7 and &
|
|
#define HID_KEY_8 37 // Keyboard 8 and *
|
|
#define HID_KEY_9 38 // Keyboard 9 and (
|
|
#define HID_KEY_0 39 // Keyboard 0 and )
|
|
#define HID_KEY_RETURN 40 // Keyboard Return (ENTER)
|
|
#define HID_KEY_ESCAPE 41 // Keyboard ESCAPE
|
|
#define HID_KEY_DELETE 42 // Keyboard DELETE (Backspace)
|
|
#define HID_KEY_TAB 43 // Keyboard Tab
|
|
#define HID_KEY_SPACEBAR 44 // Keyboard Spacebar
|
|
#define HID_KEY_MINUS 45 // Keyboard - and (underscore)
|
|
#define HID_KEY_EQUAL 46 // Keyboard = and +
|
|
#define HID_KEY_LEFT_BRKT 47 // Keyboard [ and {
|
|
#define HID_KEY_RIGHT_BRKT 48 // Keyboard ] and }
|
|
#define HID_KEY_BACK_SLASH 49 // Keyboard \ and |
|
|
#define HID_KEY_SEMI_COLON 51 // Keyboard ; and :
|
|
#define HID_KEY_SGL_QUOTE 52 // Keyboard ' and "
|
|
#define HID_KEY_GRV_ACCENT 53 // Keyboard Grave Accent and Tilde
|
|
#define HID_KEY_COMMA 54 // Keyboard , and <
|
|
#define HID_KEY_DOT 55 // Keyboard . and >
|
|
#define HID_KEY_FWD_SLASH 56 // Keyboard / and ?
|
|
#define HID_KEY_CAPS_LOCK 57 // Keyboard Caps Lock
|
|
#define HID_KEY_F1 58 // Keyboard F1
|
|
#define HID_KEY_F2 59 // Keyboard F2
|
|
#define HID_KEY_F3 60 // Keyboard F3
|
|
#define HID_KEY_F4 61 // Keyboard F4
|
|
#define HID_KEY_F5 62 // Keyboard F5
|
|
#define HID_KEY_F6 63 // Keyboard F6
|
|
#define HID_KEY_F7 64 // Keyboard F7
|
|
#define HID_KEY_F8 65 // Keyboard F8
|
|
#define HID_KEY_F9 66 // Keyboard F9
|
|
#define HID_KEY_F10 67 // Keyboard F10
|
|
#define HID_KEY_F11 68 // Keyboard F11
|
|
#define HID_KEY_F12 69 // Keyboard F12
|
|
#define HID_KEY_PRNT_SCREEN 70 // Keyboard Print Screen
|
|
#define HID_KEY_SCROLL_LOCK 71 // Keyboard Scroll Lock
|
|
#define HID_KEY_PAUSE 72 // Keyboard Pause
|
|
#define HID_KEY_INSERT 73 // Keyboard Insert
|
|
#define HID_KEY_HOME 74 // Keyboard Home
|
|
#define HID_KEY_PAGE_UP 75 // Keyboard PageUp
|
|
#define HID_KEY_DELETE_FWD 76 // Keyboard Delete Forward
|
|
#define HID_KEY_END 77 // Keyboard End
|
|
#define HID_KEY_PAGE_DOWN 78 // Keyboard PageDown
|
|
#define HID_KEY_RIGHT_ARROW 79 // Keyboard RightArrow
|
|
#define HID_KEY_LEFT_ARROW 80 // Keyboard LeftArrow
|
|
#define HID_KEY_DOWN_ARROW 81 // Keyboard DownArrow
|
|
#define HID_KEY_UP_ARROW 82 // Keyboard UpArrow
|
|
#define HID_KEY_NUM_LOCK 83 // Keypad Num Lock and Clear
|
|
#define HID_KEY_DIVIDE 84 // Keypad /
|
|
#define HID_KEY_MULTIPLY 85 // Keypad *
|
|
#define HID_KEY_SUBTRACT 86 // Keypad -
|
|
#define HID_KEY_ADD 87 // Keypad +
|
|
#define HID_KEY_ENTER 88 // Keypad ENTER
|
|
#define HID_KEYPAD_1 89 // Keypad 1 and End
|
|
#define HID_KEYPAD_2 90 // Keypad 2 and Down Arrow
|
|
#define HID_KEYPAD_3 91 // Keypad 3 and PageDn
|
|
#define HID_KEYPAD_4 92 // Keypad 4 and Lfet Arrow
|
|
#define HID_KEYPAD_5 93 // Keypad 5
|
|
#define HID_KEYPAD_6 94 // Keypad 6 and Right Arrow
|
|
#define HID_KEYPAD_7 95 // Keypad 7 and Home
|
|
#define HID_KEYPAD_8 96 // Keypad 8 and Up Arrow
|
|
#define HID_KEYPAD_9 97 // Keypad 9 and PageUp
|
|
#define HID_KEYPAD_0 98 // Keypad 0 and Insert
|
|
#define HID_KEYPAD_DOT 99 // Keypad . and Delete
|
|
#define HID_KEY_MUTE 127 // Keyboard Mute
|
|
#define HID_KEY_VOLUME_UP 128 // Keyboard Volume up
|
|
#define HID_KEY_VOLUME_DOWN 129 // Keyboard Volume down
|
|
#define HID_KEY_LEFT_CTRL 224 // Keyboard LeftContorl
|
|
#define HID_KEY_LEFT_SHIFT 225 // Keyboard LeftShift
|
|
#define HID_KEY_LEFT_ALT 226 // Keyboard LeftAlt
|
|
#define HID_KEY_LEFT_GUI 227 // Keyboard LeftGUI
|
|
#define HID_KEY_RIGHT_CTRL 228 // Keyboard LeftContorl
|
|
#define HID_KEY_RIGHT_SHIFT 229 // Keyboard LeftShift
|
|
#define HID_KEY_RIGHT_ALT 230 // Keyboard LeftAlt
|
|
#define HID_KEY_RIGHT_GUI 231 // Keyboard RightGUI
|
|
typedef uint8_t keyboard_cmd_t;
|
|
|
|
#define HID_MOUSE_LEFT 253
|
|
#define HID_MOUSE_MIDDLE 254
|
|
#define HID_MOUSE_RIGHT 255
|
|
typedef uint8_t mouse_cmd_t;
|
|
|
|
// HID Consumer Usage IDs (subset of the codes available in the USB HID Usage Tables spec)
|
|
#define HID_CONSUMER_POWER 48 // Power
|
|
#define HID_CONSUMER_RESET 49 // Reset
|
|
#define HID_CONSUMER_SLEEP 50 // Sleep
|
|
|
|
#define HID_CONSUMER_MENU 64 // Menu
|
|
#define HID_CONSUMER_SELECTION 128 // Selection
|
|
#define HID_CONSUMER_ASSIGN_SEL 129 // Assign Selection
|
|
#define HID_CONSUMER_MODE_STEP 130 // Mode Step
|
|
#define HID_CONSUMER_RECALL_LAST 131 // Recall Last
|
|
#define HID_CONSUMER_QUIT 148 // Quit
|
|
#define HID_CONSUMER_HELP 149 // Help
|
|
#define HID_CONSUMER_CHANNEL_UP 156 // Channel Increment
|
|
#define HID_CONSUMER_CHANNEL_DOWN 157 // Channel Decrement
|
|
|
|
#define HID_CONSUMER_PLAY 176 // Play
|
|
#define HID_CONSUMER_PAUSE 177 // Pause
|
|
#define HID_CONSUMER_RECORD 178 // Record
|
|
#define HID_CONSUMER_FAST_FORWARD 179 // Fast Forward
|
|
#define HID_CONSUMER_REWIND 180 // Rewind
|
|
#define HID_CONSUMER_SCAN_NEXT_TRK 181 // Scan Next Track
|
|
#define HID_CONSUMER_SCAN_PREV_TRK 182 // Scan Previous Track
|
|
#define HID_CONSUMER_STOP 183 // Stop
|
|
#define HID_CONSUMER_EJECT 184 // Eject
|
|
#define HID_CONSUMER_RANDOM_PLAY 185 // Random Play
|
|
#define HID_CONSUMER_SELECT_DISC 186 // Select Disk
|
|
#define HID_CONSUMER_ENTER_DISC 187 // Enter Disc
|
|
#define HID_CONSUMER_REPEAT 188 // Repeat
|
|
#define HID_CONSUMER_STOP_EJECT 204 // Stop/Eject
|
|
#define HID_CONSUMER_PLAY_PAUSE 205 // Play/Pause
|
|
#define HID_CONSUMER_PLAY_SKIP 206 // Play/Skip
|
|
|
|
#define HID_CONSUMER_VOLUME 224 // Volume
|
|
#define HID_CONSUMER_BALANCE 225 // Balance
|
|
#define HID_CONSUMER_MUTE 226 // Mute
|
|
#define HID_CONSUMER_BASS 227 // Bass
|
|
#define HID_CONSUMER_VOLUME_UP 233 // Volume Increment
|
|
#define HID_CONSUMER_VOLUME_DOWN 234 // Volume Decrement
|
|
typedef uint8_t consumer_cmd_t;
|
|
|
|
#define HID_CC_RPT_MUTE 1
|
|
#define HID_CC_RPT_POWER 2
|
|
#define HID_CC_RPT_LAST 3
|
|
#define HID_CC_RPT_ASSIGN_SEL 4
|
|
#define HID_CC_RPT_PLAY 5
|
|
#define HID_CC_RPT_PAUSE 6
|
|
#define HID_CC_RPT_RECORD 7
|
|
#define HID_CC_RPT_FAST_FWD 8
|
|
#define HID_CC_RPT_REWIND 9
|
|
#define HID_CC_RPT_SCAN_NEXT_TRK 10
|
|
#define HID_CC_RPT_SCAN_PREV_TRK 11
|
|
#define HID_CC_RPT_STOP 12
|
|
|
|
#define HID_CC_RPT_CHANNEL_UP 0x01
|
|
#define HID_CC_RPT_CHANNEL_DOWN 0x03
|
|
#define HID_CC_RPT_VOLUME_UP 0x40
|
|
#define HID_CC_RPT_VOLUME_DOWN 0x80
|
|
|
|
// HID Consumer Control report bitmasks
|
|
#define HID_CC_RPT_NUMERIC_BITS 0xF0
|
|
#define HID_CC_RPT_CHANNEL_BITS 0xCF
|
|
#define HID_CC_RPT_VOLUME_BITS 0x3F
|
|
#define HID_CC_RPT_BUTTON_BITS 0xF0
|
|
#define HID_CC_RPT_SELECTION_BITS 0xCF
|
|
|
|
|
|
// Macros for the HID Consumer Control 2-byte report
|
|
#define HID_CC_RPT_SET_NUMERIC(s, x) (s)[0] &= HID_CC_RPT_NUMERIC_BITS; \
|
|
(s)[0] = (x)
|
|
#define HID_CC_RPT_SET_CHANNEL(s, x) (s)[0] &= HID_CC_RPT_CHANNEL_BITS; \
|
|
(s)[0] |= ((x) & 0x03) << 4
|
|
#define HID_CC_RPT_SET_VOLUME_UP(s) (s)[0] &= HID_CC_RPT_VOLUME_BITS; \
|
|
(s)[0] |= 0x40
|
|
#define HID_CC_RPT_SET_VOLUME_DOWN(s) (s)[0] &= HID_CC_RPT_VOLUME_BITS; \
|
|
(s)[0] |= 0x80
|
|
#define HID_CC_RPT_SET_BUTTON(s, x) (s)[1] &= HID_CC_RPT_BUTTON_BITS; \
|
|
(s)[1] |= (x)
|
|
#define HID_CC_RPT_SET_SELECTION(s, x) (s)[1] &= HID_CC_RPT_SELECTION_BITS; \
|
|
(s)[1] |= ((x) & 0x03) << 4
|
|
|
|
|
|
// HID report mapping table
|
|
typedef struct
|
|
{
|
|
uint16_t handle; // Handle of report characteristic
|
|
uint16_t cccdHandle; // Handle of CCCD for report characteristic
|
|
uint8_t id; // Report ID
|
|
uint8_t type; // Report type
|
|
uint8_t mode; // Protocol mode (report or boot)
|
|
} hid_report_map_t;
|
|
|
|
// HID dev configuration structure
|
|
typedef struct
|
|
{
|
|
uint32_t idleTimeout; // Idle timeout in milliseconds
|
|
uint8_t hidFlags; // HID feature flags
|
|
|
|
} hid_dev_cfg_t;
|
|
|
|
void hid_dev_register_reports(uint8_t num_reports, hid_report_map_t *p_report);
|
|
|
|
void hid_dev_send_report(esp_gatt_if_t gatts_if, uint16_t conn_id,
|
|
uint8_t id, uint8_t type, uint8_t length, uint8_t *data);
|
|
|
|
void hid_consumer_build_report(uint8_t *buffer, consumer_cmd_t cmd);
|
|
|
|
void hid_keyboard_build_report(uint8_t *buffer, keyboard_cmd_t cmd);
|
|
|
|
void hid_mouse_build_report(uint8_t *buffer, mouse_cmd_t cmd);
|
|
|
|
#endif /* HID_DEV_H__ */
|
|
|