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