blob: 2a3aef7b52e688c70fa832a93e0b3f7677828cea [file] [log] [blame]
/******************************************************************************
* @file usbkeyboard.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 VK_NONE 0x00
// function key bitmap
#define VK_MSK_CTRL 0x01
#define VK_MSK_SHIFT 0x02
#define VK_MSK_ALT 0x04
#define VK_MSK_WIN 0x08
#define VK_MSK_LCTRL 0x01
#define VK_MSK_LSHIFT 0x02
#define VK_MSK_LALT 0x04
#define VK_MSK_LWIN 0x08
#define VK_MSK_RCTRL 0x10
#define VK_MSK_RSHIFT 0x20
#define VK_MSK_RALT 0x40
#define VK_MSK_RWIN 0x80
// ordinary keys
#define VK_A 0x04
#define VK_B 0x05
#define VK_C 0x06
#define VK_D 0x07
#define VK_E 0x08
#define VK_F 0x09
#define VK_G 0x0a
#define VK_H 0x0b
#define VK_I 0x0c
#define VK_J 0x0d
#define VK_K 0x0e
#define VK_L 0x0f
#define VK_M 0x10
#define VK_N 0x11
#define VK_O 0x12
#define VK_P 0x13
#define VK_Q 0x14
#define VK_R 0x15
#define VK_S 0x16
#define VK_T 0x17
#define VK_U 0x18
#define VK_V 0x19
#define VK_W 0x1a
#define VK_X 0x1b
#define VK_Y 0x1c
#define VK_Z 0x1d
#define VK_1 0x1e
#define VK_2 0x1f
#define VK_3 0x20
#define VK_4 0x21
#define VK_5 0x22
#define VK_6 0x23
#define VK_7 0x24
#define VK_8 0x25
#define VK_9 0x26
#define VK_0 0x27
#define VK_ENTER 0x28
#define VK_ESC 0x29
#define VK_BACKSPACE 0x2a
#define VK_TAB 0x2b
#define VK_SPACE 0x2c
#define VK_MINUS 0x2d
#define VK_EQUAL 0x2e
#define VK_LBRACE 0x2f
#define VK_RBRACE 0x30
#define VK_BACKSLASH 0x31
#define VK_NUMBER 0x32
#define VK_SEMICOLON 0x33
#define VK_QUOTE 0x34
#define VK_TILDE 0x35
#define VK_COMMA 0x36
#define VK_PERIOD 0x37
#define VK_SLASH 0x38
#define VK_CAPITAL 0x39
#define VK_F1 0x3a
#define VK_F2 0x3b
#define VK_F3 0x3c
#define VK_F4 0x3d
#define VK_F5 0x3e
#define VK_F6 0x3f
#define VK_F7 0x40
#define VK_F8 0x41
#define VK_F9 0x42
#define VK_F10 0x43
#define VK_F11 0x44
#define VK_F12 0x45
#define VK_PRINTSCREEN 0x46
#define VK_SCR_LOCK 0x47
#define VK_PAUSE 0x48
#define VK_INSERT 0x49
#define VK_HOME 0x4a
#define VK_PAGE_UP 0x4b
#define VK_DELETE 0x4c
#define VK_END 0x4d
#define VK_PAGE_DOWN 0x4e
#define VK_RIGHT 0x4f
#define VK_LEFT 0x50
#define VK_DOWN 0x51
#define VK_UP 0x52
#define VK_NUM_LOCK 0x53
#define VKPAD_SLASH 0x54
#define VKPAD_ASTERIX 0x55
#define VKPAD_MINUS 0x56
#define VKPAD_PLUS 0x57
#define VKPAD_ENTER 0x58
#define VKPAD_1 0x59
#define VKPAD_2 0x5a
#define VKPAD_3 0x5b
#define VKPAD_4 0x5c
#define VKPAD_5 0x5d
#define VKPAD_6 0x5e
#define VKPAD_7 0x5f
#define VKPAD_8 0x60
#define VKPAD_9 0x61
#define VKPAD_0 0x62
#define VKPAD_PERIOD 0x63
#define VK_K45 0x64
#define VK_APP 0x65
// below KEY is for ELAN's application matrix
#define VK_C9R1 0xf0 //C9R1 00
#define VK_C9R6 0xf1 //C9R6 000
#define VK_RMB 0xf2 //C7R3
#define VK_EURO 0xf3 //C0R2
#define VK_MMODE 0xf4 //C9R4
#define VK_K107 0x85 //ok
#define VK_K56 0x87 //ok
#define VK_ROMA 0x88 //ok
#define VK_K14 0x89 //ok
#define VK_CHG 0x8a //ok
#define VK_NCHG 0x8b //ok
#define VK_KCR 0x90 //ok,K151
#define VK_KCL 0x91 //ok,K150
// NOT standard, use these reserved code to distinguish ctrol keys
#ifndef CTRL_SHIFT_E0E7
#define CTRL_SHIFT_E0E7 1
#endif
#if CTRL_SHIFT_E0E7
#define VK_CTRL 0xe0
#define VK_SHIFT 0xe1
#define VK_ALT 0xe2
#define VK_WIN 0xe3
#define VK_RCTRL 0xe4
#define VK_RSHIFT 0xe5
#define VK_RALT 0xe6
#define VK_RWIN 0xe7
#else
#define VK_CTRL 0x90
#define VK_SHIFT 0x91
#define VK_ALT 0x92
#define VK_WIN 0x93
#define VK_RCTRL 0x94
#define VK_RSHIFT 0x95
#define VK_RALT 0x96
#define VK_RWIN 0x97
#endif
enum{
VK_EXT_START = 0xa0,
VK_SYS_START = VK_EXT_START, //0xa0
VK_SLEEP = VK_SYS_START, //0xa0, sleep
VK_POWER, //0xa1, power
VK_WAKEUP, //0xa2, wake-up
// VK_MCE_STR, //0xa3
// VK_MY_MUSIC, //0xa4
VK_SYS_END, //0xa3
VK_SYS_CNT = (VK_SYS_END - VK_SYS_START),//0xa3-0xa0=0x03
VK_MEDIA_START = VK_SYS_END, //0xa3
VK_W_SRCH = VK_MEDIA_START, //0xa3
VK_WEB, //0xa4
VK_W_BACK,
VK_W_FORWRD,
VK_W_STOP,
VK_W_REFRESH,
VK_W_FAV, //0xa9
VK_MEDIA,
VK_MAIL,
VK_CAL,
VK_MY_COMP,
VK_NEXT_TRK,
VK_PREV_TRK,
VK_STOP, //b0
VK_PLAY_PAUSE,
VK_W_MUTE,
VK_VOL_UP,
VK_VOL_DN,
VK_MEDIA_END,
VK_EXT_END = VK_MEDIA_END,
VK_MEDIA_CNT = (VK_MEDIA_END - VK_MEDIA_START),//0xb5-0xa3=0x12
VK_ZOOM_IN = (VK_MEDIA_END + 1),//0xb6
VK_ZOOM_OUT , //0xb7
//special key,do it later
VK_CH_UP = 0xf0,
VK_CH_DN = 0xf1,
VK_FAST_FORWARD = 0xf2,
VK_FAST_BACKWARD = 0xf3,
VK_W_SHOPPING = 0xf4,
VK_W_APP_STORE = 0xf5,
VK_MY_FAVORIT = 0xf6,
VK_MENU = 0xf7,
VK_EXIT = 0xf8,
VK_CONFIRM = 0xf9,
VK_RETURN = 0xfa,
VK_VOICE_SEARCH = 0xfb,
VK_PROGRAM = 0xfc,
VK_LOW_BATT = 0xfd,
VK_TV_PLUS = 0xfe,
VK_TV_MINUS = 0xff,
VK_IN_OUTPUT = 0xef,
VK_TV_POWER = 0xee,
VK_STB_POWER = 0xed,
};
#define VK_FN 0xff
#define VK_EXT_LEN 2
typedef struct{
unsigned char val[VK_EXT_LEN];
}vk_ext_t;
// mulit-byte keycode for media keys, cannot used directly in c code..for reference
#define VK_POWER_V 0x01
#define VK_SLEEP_V 0x02
#define VK_WAKEUP_V 0x04
#define VK_W_SRCH_V {0x21,0x02}
#define VK_HOME_V {0x23,0x02}
#define VK_W_BACK_V {0x24,0x02}
#define VK_W_FORWRD_V {0x25,0x02}
#define VK_W_STOP_V {0x26,0x02}
#define VK_W_REFRESH_V {0x27,0x02}
// favorite
#define VK_W_FAV_V {0x2a,0x02}
#define VK_MEDIA_V {0x83,0x01}
#define VK_MAIL_V {0x8a,0x01}
// calculator
#define VK_CAL_V {0x92,0x01}
#define VK_MY_COMP_V {0x94,0x01}
// next track -- 01(mosue-ep/USB_EDP_MOUSE) 05(len) 03(kb-report-id/USB_HID_KB_MEDIA)
// b5(val) 00 00 00
#define VK_MENU_V {0x40,0x00}
#define VK_MENU_PICK_V {0x41,0x00}
#define VK_MENU_UP_V {0x42,0x00}
#define VK_MENU_DN_V {0x43,0x00}
#define VK_MENU_LEFT_V {0x44,0x00}
#define VK_MENU_RIGHT_V {0x45,0x00}
#define VK_CHN_UP_V {0x9c,0x00}
#define VK_CHN_DN_V {0x9d,0x00}
#define VK_PLAY_V {0xb0,0x00}
#define VK_PAUSE_V {0xb1,0x00}
#define VK_RECORD_V {0xb2,0x00}
#define VK_FAST_FORWARD_V {0xb3,0x00}
#define VK_REWIND_V {0xb4,0x00}
#define VK_NEXT_TRK_V {0xb5,0x00}
#define VK_PREV_TRK_V {0xb6,0x00}
#define VK_STOP_V {0xb7,0x00}
#define VK_PLAY_PAUSE_V {0xcd,0x00}
#define VK_W_MUTE_V {0xe2,0x00}
#define VK_VOL_UP_V {0xe9,0x00}
#define VK_VOL_DN_V {0xea,0x00}
// media key, consumer key
//reference: <<HID Usage Tables>> Consumer Page(0x0C)
typedef enum {
MKEY_POWER = 0x0030,
MKEY_RESET = 0x0031,
MKEY_SLEEP = 0x0032,
MKEY_MENU = 0x0040,
MKEY_MENU_PICK = 0x0041,
MKEY_MENU_UP = 0x0042,
MKEY_MENU_DN = 0x0043,
MKEY_MENU_LEFT = 0x0044,
MKEY_MENU_RIGHT = 0x0045,
MKEY_CHN_UP = 0x009c,
MKEY_CHN_DN = 0x009d,
MKEY_PLAY = 0x00b0,
MKEY_PAUSE = 0x00b1,
MKEY_RECORD = 0x00b2,
MKEY_FAST_FORWARD = 0x00b3,
MKEY_REWIND = 0x00b4,
MKEY_NEXT_TRK = 0x00b5,
MKEY_PREV_TRK = 0x00b6,
MKEY_STOP = 0x00b7,
MKEY_EJECT = 0x00b8,
MKEY_PLAY_PAUSE = 0x00cd,
MKEY_PLAY_SKIP = 0x00ce,
MKEY_VOLUME = 0x00e0,
MKEY_BALANCE = 0x00e1,
MKEY_MUTE = 0x00e2,
MKEY_VOL_UP = 0x00e9,
MKEY_VOL_DN = 0x00ea,
MKEY_AC_SEARCH = 0x0221,
MKEY_AC_GOTO = 0x0222,
MKEY_AC_HOME = 0x0223,
MKEY_AC_BACK = 0x0224,
MKEY_AC_FORWARD = 0x0225,
MKEY_AC_STOP = 0x0226,
MKEY_AC_REFRESH = 0x0227,
MKEY_AC_BOOKMARK = 0x022a,
MKEY_AC_HISTORY = 0x022b,
MKEY_AC_ZOOM_IN = 0x022d,
MKEY_AC_ZOOM_OUT = 0x022e,
MKEY_AC_ZOOM = 0x022f,
} media_key_t;
// media key, consumer key
//reference: <<HID Usage Tables>> Consumer Page(0x0C)
typedef enum {
G00GLE_MKEY_YOUTUBE = 0x0077,
G00GLE_MKEY_NETFLIX = 0x0078,
G00GLE_MKEY_DISNEY = 0x0079,
G00GLE_MKEY_HBOMAX = 0x007A,
G00GLE_MKEY_UP = 0x0042,
G00GLE_MKEY_DN = 0x0043,
G00GLE_MKEY_LEFT = 0x0044,
G00GLE_MKEY_RIGHT = 0x0045,
G00GLE_MKEY_CENTER = 0x0041,
G00GLE_MKEY_HOME = 0x0223,
G00GLE_MKEY_BACK = 0x0224,
G00GLE_MKEY_POWER = 0x0030,
G00GLE_MKEY_VOL_MUTE = 0X00E2,
G00GLE_MKEY_CHN_UP = 0x009C,
G00GLE_MKEY_CHN_DN = 0x009D,
G00GLE_MKEY_GUIDE = 0x008D,
G00GLE_MKEY_BOOKMARK = 0x022a,
G00GLE_MKEY_ASSIST = 0x0221,
G00GLE_MKEY_INPUT = 0x01bb,
G00GLE_MKEY_DASHBOARD = 0x0096,
} google_media_key_t;