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_VIRTUAL_KEY_MAP_H 185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#define _LIBINPUT_VIRTUAL_KEY_MAP_H 195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <stdint.h> 215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 225912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <input/Input.h> 235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/Errors.h> 245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/KeyedVector.h> 255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/Tokenizer.h> 265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/String8.h> 275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <utils/Unicode.h> 285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownnamespace android { 305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/* Describes a virtual key. */ 325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownstruct VirtualKeyDefinition { 335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t scanCode; 345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // configured position data, specified in display coords 365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t centerX; 375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t centerY; 385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t width; 395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t height; 405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown}; 415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/** 445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Describes a collection of virtual keys on a touch screen in terms of 455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * virtual scan codes and hit rectangles. 465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * This object is immutable after it has been loaded. 485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownclass VirtualKeyMap { 505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownpublic: 515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ~VirtualKeyMap(); 525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown static status_t load(const String8& filename, VirtualKeyMap** outMap); 545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline const Vector<VirtualKeyDefinition>& getVirtualKeys() const { 565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown return mVirtualKeys; 575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownprivate: 605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown class Parser { 615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown VirtualKeyMap* mMap; 625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Tokenizer* mTokenizer; 635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown public: 655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Parser(VirtualKeyMap* map, Tokenizer* tokenizer); 665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ~Parser(); 675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown status_t parse(); 685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown private: 705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown bool consumeFieldDelimiterAndSkipWhitespace(); 715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown bool parseNextIntField(int32_t* outValue); 725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown }; 735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Vector<VirtualKeyDefinition> mVirtualKeys; 755912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 765912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown VirtualKeyMap(); 775912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown}; 785912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 795912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} // namespace android 805912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 815912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#endif // _LIBINPUT_KEY_CHARACTER_MAP_H 82