| /* Copyright (C) 2009-2015 The Android Open Source Project |
| ** |
| ** This software is licensed under the terms of the GNU General Public |
| ** License version 2, as published by the Free Software Foundation, and |
| ** may be copied, distributed, and modified under those terms. |
| ** |
| ** 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. |
| */ |
| |
| #pragma once |
| |
| #include "android/utils/compiler.h" |
| #include "android/skin/android_keycodes.h" |
| #include "android/skin/linux_keycodes.h" |
| |
| #include <stdbool.h> |
| #include <stdint.h> |
| |
| ANDROID_BEGIN_HEADER |
| |
| /* Define layout-independent key codes. Think of it as "the user pressed |
| * the key that corresponds to Q on a US QWERTY keyboard". |
| * |
| * The values here must match the Linux keycodes since they are sent |
| * to the guest kernel directly. |
| */ |
| |
| /* Keep it consistent with linux/input.h */ |
| typedef enum { |
| kKeyCodeSoftLeft = KEY_SOFT1, |
| kKeyCodeSoftRight = KEY_SOFT2, |
| kKeyCodeHome = KEY_HOME, |
| kKeyCodeHomePage = KEY_HOMEPAGE, |
| kKeyCodeBack = KEY_BACK, |
| kKeyCodeCall = KEY_SEND, |
| kKeyCodeEndCall = KEY_END, |
| kKeyCode0 = KEY_0, |
| kKeyCode1 = KEY_1, |
| kKeyCode2 = KEY_2, |
| kKeyCode3 = KEY_3, |
| kKeyCode4 = KEY_4, |
| kKeyCode5 = KEY_5, |
| kKeyCode6 = KEY_6, |
| kKeyCode7 = KEY_7, |
| kKeyCode8 = KEY_8, |
| kKeyCode9 = KEY_9, |
| kKeyCodeStar = KEY_STAR, |
| kKeyCodePound = KEY_SHARP, |
| kKeyCodeDpadUp = KEY_UP, |
| kKeyCodeDpadDown = KEY_DOWN, |
| kKeyCodeDpadLeft = KEY_LEFT, |
| kKeyCodeDpadRight = KEY_RIGHT, |
| kKeyCodeDpadCenter = KEY_CENTER, |
| kKeyCodeVolumeUp = KEY_VOLUMEUP, |
| kKeyCodeVolumeDown = KEY_VOLUMEDOWN, |
| kKeyCodePower = KEY_POWER, |
| kKeyCodeCamera = KEY_CAMERA, |
| kKeyCodeClear = KEY_CLEAR, |
| kKeyCodeA = KEY_A, |
| kKeyCodeB = KEY_B, |
| kKeyCodeC = KEY_C, |
| kKeyCodeD = KEY_D, |
| kKeyCodeE = KEY_E, |
| kKeyCodeF = KEY_F, |
| kKeyCodeG = KEY_G, |
| kKeyCodeH = KEY_H, |
| kKeyCodeI = KEY_I, |
| kKeyCodeJ = KEY_J, |
| kKeyCodeK = KEY_K, |
| kKeyCodeL = KEY_L, |
| kKeyCodeM = KEY_M, |
| kKeyCodeN = KEY_N, |
| kKeyCodeO = KEY_O, |
| kKeyCodeP = KEY_P, |
| kKeyCodeQ = KEY_Q, |
| kKeyCodeR = KEY_R, |
| kKeyCodeS = KEY_S, |
| kKeyCodeT = KEY_T, |
| kKeyCodeU = KEY_U, |
| kKeyCodeV = KEY_V, |
| kKeyCodeW = KEY_W, |
| kKeyCodeX = KEY_X, |
| kKeyCodeY = KEY_Y, |
| kKeyCodeZ = KEY_Z, |
| |
| kKeyCodeComma = KEY_COMMA, |
| kKeyCodePeriod = KEY_DOT, |
| kKeyCodeAltLeft = KEY_LEFTALT, |
| kKeyCodeAltRight = KEY_RIGHTALT, |
| kKeyCodeCapLeft = KEY_LEFTSHIFT, |
| kKeyCodeCapRight = KEY_RIGHTSHIFT, |
| kKeyCodeTab = KEY_TAB, |
| kKeyCodeSpace = KEY_SPACE, |
| kKeyCodeSym = KEY_COMPOSE, |
| kKeyCodeExplorer = KEY_WWW, |
| kKeyCodeEnvelope = KEY_MAIL, |
| kKeyCodeNewline = KEY_ENTER, |
| kKeyCodeDel = KEY_BACKSPACE, |
| kKeyCodeGrave = 399, |
| kKeyCodeMinus = KEY_MINUS, |
| kKeyCodeEquals = KEY_EQUAL, |
| kKeyCodeLeftBracket = KEY_LEFTBRACE, |
| kKeyCodeRightBracket = KEY_RIGHTBRACE, |
| kKeyCodeBackslash = KEY_BACKSLASH, |
| kKeyCodeSemicolon = KEY_SEMICOLON, |
| kKeyCodeApostrophe = KEY_APOSTROPHE, |
| kKeyCodeSlash = KEY_SLASH, |
| kKeyCodeAt = KEY_EMAIL, |
| kKeyCodeNum = KEY_NUM, |
| kKeyCodeHeadsetHook = KEY_HEADSETHOOK, |
| kKeyCodeFocus = KEY_FOCUS, |
| kKeyCodePlus = KEY_PLUS, |
| kKeyCodeMenu = KEY_SOFT1, |
| kKeyCodeNotification = KEY_NOTIFICATION, |
| kKeyCodeSearch = KEY_SEARCH, |
| kKeyCodeTV = KEY_TV, |
| kKeyCodeEPG = KEY_PROGRAM, |
| kKeyCodeDVR = KEY_PVR, |
| kKeyCodePrevious = KEY_PREVIOUS, |
| kKeyCodeNext = KEY_NEXT, |
| kKeyCodePlay = KEY_PLAY, |
| kKeyCodePlaypause = KEY_PLAYPAUSE, |
| kKeyCodePause = KEY_PAUSE, |
| kKeyCodeStop = KEY_STOP, |
| kKeyCodeRewind = KEY_REWIND, |
| kKeyCodeFastForward = KEY_FASTFORWARD, |
| kKeyCodeBookmarks = KEY_BOOKMARKS, |
| kKeyCodeCycleWindows = KEY_CYCLEWINDOWS, |
| kKeyCodeChannelUp = KEY_CHANNELUP, |
| kKeyCodeChannelDown = KEY_CHANNELDOWN, |
| kKeyCodeAppSwitch = KEY_APPSWITCH, |
| |
| } SkinKeyCode; |
| |
| /* This function is used to rotate D-Pad keycodes, while leaving other ones |
| * untouched. 'code' is the input keycode, which will be returned as is if |
| * it doesn't correspond to a D-Pad arrow. 'rotation' is the number of |
| * *clockwise* 90 degrees rotations to perform on D-Pad keys. |
| * |
| * Here are examples: |
| * skin_keycode_rotate( kKeyCodeDpadUp, 1 ) => kKeyCodeDpadRight |
| * skin_keycode_rotate( kKeyCodeDpadRight, 2 ) => kKeyCodeDpadLeft |
| * skin_keycode_rotate( kKeyCodeDpadDown, 3 ) => kKeyCodeDpadRight |
| * skin_keycode_rotate( kKeyCodeSpace, n ) => kKeyCodeSpace independent of n |
| */ |
| extern SkinKeyCode skin_keycode_rotate( SkinKeyCode code, int rotation ); |
| |
| extern int skin_key_code_count(void); |
| extern const char* skin_key_code_str(int index); |
| |
| |
| // Bit flag for key modifiers like Ctrl or Alt. |
| typedef enum { |
| kKeyModLCtrl = (1U << 0), // left-control key |
| kKeyModRCtrl = (1U << 1), // right-control |
| kKeyModLAlt = (1U << 2), // left-alt |
| kKeyModRAlt = (1U << 3), // right-alt |
| kKeyModLShift = (1U << 4), // left-shift |
| kKeyModRShift = (1U << 5), // right-shift |
| kKeyModNumLock = (1U << 6), // numlock |
| |
| } SkinKeyMod; |
| |
| // Convert a pair of (SkinKeyCode,SkinKeyMod) values into a human-readable |
| // string. Returns the address of a static string that is overwritten on |
| // each call. |
| // |keycode| is the layout-independent SkinKeyCode. |
| // |mod| is a set of SkinKeyMod bit flags. |
| extern const char* skin_key_pair_to_string(uint32_t keycode, uint32_t mod); |
| |
| // Convert a textual key description |str| (e.g. "Ctrl-K") into a pair |
| // if (SkinKeyCode,SkinKeyMod) values. On success, return true and sets |
| // |*keycode| and |*mod|. On failure, return false. |
| extern bool skin_key_pair_from_string(const char* str, |
| uint32_t* keycode, |
| uint32_t* mod); |
| |
| ANDROID_END_HEADER |