15912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/* 25912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Copyright (C) 2010 The Android Open Source Project 35912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 45912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 55912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * you may not use this file except in compliance with the License. 65912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * You may obtain a copy of the License at 75912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 85912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * http://www.apache.org/licenses/LICENSE-2.0 95912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Unless required by applicable law or agreed to in writing, software 115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * See the License for the specific language governing permissions and 145912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * limitations under the License. 155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#ifndef _LIBINPUT_KEYBOARD_H 185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#define _LIBINPUT_KEYBOARD_H 195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <input/Input.h> 215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <input/InputDevice.h> 22872db4f11e407accccba9d37c335ef7e3597eba4Michael Wright#include <input/InputEventLabels.h> 235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/Errors.h> 245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/String8.h> 255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/PropertyMap.h> 265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownnamespace android { 285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownenum { 305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Device id of the built in keyboard. */ 315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown DEVICE_ID_BUILT_IN_KEYBOARD = 0, 325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown /* Device id of a generic virtual keyboard with a full layout that can be used 345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * to synthesize key events. */ 355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown DEVICE_ID_VIRTUAL_KEYBOARD = -1, 365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown}; 375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownclass KeyLayoutMap; 395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownclass KeyCharacterMap; 405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/** 425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Loads the key layout map and key character map for a keyboard device. 435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownclass KeyMap { 455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownpublic: 465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown String8 keyLayoutFile; 475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown sp<KeyLayoutMap> keyLayoutMap; 485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown String8 keyCharacterMapFile; 505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown sp<KeyCharacterMap> keyCharacterMap; 515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown KeyMap(); 535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ~KeyMap(); 545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t load(const InputDeviceIdentifier& deviceIdenfier, 565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const PropertyMap* deviceConfiguration); 575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline bool haveKeyLayout() const { 595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown return !keyLayoutFile.isEmpty(); 605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline bool haveKeyCharacterMap() const { 635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown return !keyCharacterMapFile.isEmpty(); 645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline bool isComplete() const { 675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown return haveKeyLayout() && haveKeyCharacterMap(); 685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownprivate: 715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown bool probeKeyMap(const InputDeviceIdentifier& deviceIdentifier, const String8& name); 725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t loadKeyLayout(const InputDeviceIdentifier& deviceIdentifier, const String8& name); 735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t loadKeyCharacterMap(const InputDeviceIdentifier& deviceIdentifier, 745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const String8& name); 755912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown String8 getPath(const InputDeviceIdentifier& deviceIdentifier, 765912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const String8& name, InputDeviceConfigurationFileType type); 775912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown}; 785912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 795912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/** 805912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Returns true if the keyboard is eligible for use as a built-in keyboard. 815912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 825912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownextern bool isEligibleBuiltInKeyboard(const InputDeviceIdentifier& deviceIdentifier, 835912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const PropertyMap* deviceConfiguration, const KeyMap* keyMap); 845912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 855912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/** 865912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Updates a meta state field when a key is pressed or released. 875912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 885912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownextern int32_t updateMetaState(int32_t keyCode, bool down, int32_t oldMetaState); 895912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 905912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/** 915912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Returns true if a key is a meta key like ALT or CAPS_LOCK. 925912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 935912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownextern bool isMetaKey(int32_t keyCode); 945912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 955912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} // namespace android 965912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 975912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#endif // _LIBINPUT_KEYBOARD_H 98