/* Copyright (C) 2007-2008 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. */ #ifndef _android_charmap_h #define _android_charmap_h #include "android/keycode.h" #include "android/keycode-array.h" /* this defines a structure used to describe an Android keyboard charmap */ typedef struct AKeyEntry { unsigned short code; unsigned short base; unsigned short caps; unsigned short fn; unsigned short caps_fn; unsigned short number; } AKeyEntry; /* Defines size of name buffer in AKeyCharmap entry. */ #define AKEYCHARMAP_NAME_SIZE 32 typedef struct AKeyCharmap { const AKeyEntry* entries; int num_entries; char name[ AKEYCHARMAP_NAME_SIZE ]; } AKeyCharmap; /* Extracts charmap name from .kcm file name. * Charmap name, extracted by this routine is a name of the kcm file, trimmed * of file name extension, and shrinked (if necessary) to fit into the name * buffer. Here are examples on how this routine extracts charmap name: * /a/path/to/kcmfile.kcm -> kcmfile * /a/path/to/kcmfile.ext.kcm -> kcmfile.ext * /a/path/to/kcmfile -> kcmfile * /a/path/to/.kcmfile -> kcmfile * /a/path/to/.kcmfile.kcm -> .kcmfile * kcm_file_path - Path to key charmap file to extract charmap name from. * charmap_name - Buffer, where to save extracted charname. * max_len - charmap_name buffer size. */ void kcm_extract_charmap_name(const char* kcm_file_path, char* charmap_name, int max_len); /* Gets a pointer to the default hard-coded charmap */ const AKeyCharmap* android_get_default_charmap(void); /* Parse a charmap file and add it to our list. * Key charmap array always contains two maps: one for qwerty, and * another for qwerty2 keyboard layout. However, a custom layout can * be requested with -charmap option. In tha case kcm_file_path * parameter contains path to a .kcm file that defines that custom * layout, and as the result, key charmap array will contain another * entry built from that file. If -charmap option was not specified, * kcm_file_path is NULL and final key charmap array will contain only * two default entries. * Returns a zero value on success, or -1 on failure. * * Note: on success, the charmap will be returned by android_get_charmap() */ int android_charmap_setup(const char* kcm_file_path); /* Cleanups initialization performed in android_charmap_setup routine. */ void android_charmap_done(void); /* Gets charmap descriptor by its name. * This routine tries to find a charmap by name. This will compare the * name to the default charmap's name, or any charmap loaded with * android_charmap_setup(). Returns NULL on failure. */ const AKeyCharmap* android_get_charmap_by_name(const char* name); /* Maps given unicode key character into a keycode and adds mapped keycode into * keycode array. This routine uses charmap passed as cmap parameter to do the * translation, and 'down' parameter to generate appropriate ('down' or 'up') * keycode. */ int android_charmap_reverse_map_unicode(const AKeyCharmap* cmap, unsigned int unicode, int down, AKeycodeBuffer* keycodes); /* Return a pointer to the active charmap. If android_charmap_setup() was * called succesfully, this corresponds to the newly loaded charmap. * * Otherwise, return a pointer to the default charmap. */ const AKeyCharmap* android_get_charmap(void); /* Return the name of the charmap to be used. Same as * android_get_charmap()->name */ const char* android_get_charmap_name(void); #endif /* _android_charmap_h */