Keyboard.h revision 5912f95d26f77d2b6df13e1f2672e48e3f9b871c
13399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi/* 23399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * Copyright (C) 2010 The Android Open Source Project 33399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * 43399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * Licensed under the Apache License, Version 2.0 (the "License"); 53399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * you may not use this file except in compliance with the License. 63399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * You may obtain a copy of the License at 73399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * 83399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * http://www.apache.org/licenses/LICENSE-2.0 93399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * 103399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * Unless required by applicable law or agreed to in writing, software 113399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * distributed under the License is distributed on an "AS IS" BASIS, 123399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * See the License for the specific language governing permissions and 143399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * limitations under the License. 153399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi */ 163399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi 17bdddc659a941afdb7f4958f582c6901c07246097Daniel Lam#ifndef _LIBINPUT_KEYBOARD_H 180c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi#define _LIBINPUT_KEYBOARD_H 193399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi 203399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi#include <input/Input.h> 213399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi#include <input/InputDevice.h> 223399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi#include <utils/Errors.h> 230c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi#include <utils/String8.h> 240c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi#include <utils/PropertyMap.h> 253399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi 2688c3c4acb13a93209b3572fecd585099defec184Mathias Agopiannamespace android { 2788c3c4acb13a93209b3572fecd585099defec184Mathias Agopian 281a2fafbaa36390a06cc9a066fcbe147c8c47ea77Pannag Sanketienum { 290c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi /* Device id of the built in keyboard. */ 303399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi DEVICE_ID_BUILT_IN_KEYBOARD = 0, 313399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi 321a2952aee048ca7b1765e2bc09ebe9aeddaeafa3Mathias Agopian /* Device id of a generic virtual keyboard with a full layout that can be used 33df712ea86e6350f7005a02ab0e1c60c28a343ed0Mathias Agopian * to synthesize key events. */ 34df712ea86e6350f7005a02ab0e1c60c28a343ed0Mathias Agopian DEVICE_ID_VIRTUAL_KEYBOARD = -1, 35df712ea86e6350f7005a02ab0e1c60c28a343ed0Mathias Agopian}; 363399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi 373399b7267185646c69b04352211fca4fad9d7547Pannag Sanketiclass KeyLayoutMap; 383399b7267185646c69b04352211fca4fad9d7547Pannag Sanketiclass KeyCharacterMap; 393399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi 40f1d5aa162c02a16b7195a43a9bcea4d592600ac4James Dong/** 410c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi * Loads the key layout map and key character map for a keyboard device. 423399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi */ 433399b7267185646c69b04352211fca4fad9d7547Pannag Sanketiclass KeyMap { 443399b7267185646c69b04352211fca4fad9d7547Pannag Sanketipublic: 453399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi String8 keyLayoutFile; 463399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi sp<KeyLayoutMap> keyLayoutMap; 473399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi 483399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi String8 keyCharacterMapFile; 493399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi sp<KeyCharacterMap> keyCharacterMap; 500c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi 513399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi KeyMap(); 523399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi ~KeyMap(); 530c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi 540c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi status_t load(const InputDeviceIdentifier& deviceIdenfier, 550c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi const PropertyMap* deviceConfiguration); 560c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi 570c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi inline bool haveKeyLayout() const { 580c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi return !keyLayoutFile.isEmpty(); 590c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi } 600c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi 610c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi inline bool haveKeyCharacterMap() const { 620c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi return !keyCharacterMapFile.isEmpty(); 633856b090cd04ba5dd4a59a12430ed724d5995909Steve Block } 640c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi 650c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi inline bool isComplete() const { 660c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi return haveKeyLayout() && haveKeyCharacterMap(); 670c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi } 680c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi 690c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketiprivate: 700c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi bool probeKeyMap(const InputDeviceIdentifier& deviceIdentifier, const String8& name); 710c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi status_t loadKeyLayout(const InputDeviceIdentifier& deviceIdentifier, const String8& name); 720c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi status_t loadKeyCharacterMap(const InputDeviceIdentifier& deviceIdentifier, 730c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi const String8& name); 740c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi String8 getPath(const InputDeviceIdentifier& deviceIdentifier, 750c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi const String8& name, InputDeviceConfigurationFileType type); 760c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi}; 770c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi 780c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi/** 790c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi * Returns true if the keyboard is eligible for use as a built-in keyboard. 800c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi */ 810c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketiextern bool isEligibleBuiltInKeyboard(const InputDeviceIdentifier& deviceIdentifier, 820c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi const PropertyMap* deviceConfiguration, const KeyMap* keyMap); 830c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi 840c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi/** 850c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi * Gets a key code by its short form label, eg. "HOME". 860c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi * Returns 0 if unknown. 870c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi */ 880c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketiextern int32_t getKeyCodeByLabel(const char* label); 890c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi 900c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi/** 910c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi * Gets a key flag by its short form label, eg. "WAKE". 920c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi * Returns 0 if unknown. 930c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi */ 940c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketiextern uint32_t getKeyFlagByLabel(const char* label); 95a6195decfe4f9021bbbd7deb050495c33371366bJeff Brown 960c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi/** 970c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi * Gets a axis by its short form label, eg. "X". 980c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi * Returns -1 if unknown. 990c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi */ 1000c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketiextern int32_t getAxisByLabel(const char* label); 1010c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi 1020c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi/** 1030c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi * Gets a axis label by its id. 1040c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi * Returns NULL if unknown. 1050c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi */ 1060c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketiextern const char* getAxisLabel(int32_t axisId); 1070c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi 1080c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi/** 1090c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi * Updates a meta state field when a key is pressed or released. 1100c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi */ 1113856b090cd04ba5dd4a59a12430ed724d5995909Steve Blockextern int32_t updateMetaState(int32_t keyCode, bool down, int32_t oldMetaState); 1128ba01021b573889802e67e029225a96f0dfa471aAndy McFadden 113bdddc659a941afdb7f4958f582c6901c07246097Daniel Lam/** 1141a2952aee048ca7b1765e2bc09ebe9aeddaeafa3Mathias Agopian * Returns true if a key is a meta key like ALT or CAPS_LOCK. 11521fcf0830c8b4fb544a09467bc96a8d0463ad966Pannag Sanketi */ 1160c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketiextern bool isMetaKey(int32_t keyCode); 11721fcf0830c8b4fb544a09467bc96a8d0463ad966Pannag Sanketi 11821fcf0830c8b4fb544a09467bc96a8d0463ad966Pannag Sanketi} // namespace android 1190c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi 1200c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi#endif // _LIBINPUT_KEYBOARD_H 1210c5c7d2b119d2350c186ae9902919bcf28c3e277Pannag Sanketi