aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2011-08-11 17:36:34 -0700
committerXavier Ducrohet <xav@android.com>2011-08-11 18:03:19 -0700
commitcccd28ca5064a7bd14282cd774ee5bb7126d5845 (patch)
treef0a4eaf1afbbe1d3fd2eac93ea6b9a8e018cb942
parentf490aee025b3bab5bcdb065e5fc1b1abecf16b97 (diff)
downloadexternal_qemu-cccd28ca5064a7bd14282cd774ee5bb7126d5845.zip
external_qemu-cccd28ca5064a7bd14282cd774ee5bb7126d5845.tar.gz
external_qemu-cccd28ca5064a7bd14282cd774ee5bb7126d5845.tar.bz2
Revert "Merge c80340 from master to r13: Move charmap to hardware properties". do not merge.
This reverts commit f490aee025b3bab5bcdb065e5fc1b1abecf16b97. Change-Id: I59a0b2aebc8ab2b788a820a206c6eb4fc6e6e6d2
-rw-r--r--android/avd/hardware-properties.ini12
-rw-r--r--android/avd/info.c19
-rw-r--r--android/avd/info.h6
-rw-r--r--android/main-common.c5
-rw-r--r--android/main.c25
-rw-r--r--android/qemulator.c12
-rw-r--r--android/skin/keyboard.c30
-rw-r--r--android/skin/keyboard.h5
-rw-r--r--hw/goldfish_events_device.c21
9 files changed, 62 insertions, 73 deletions
diff --git a/android/avd/hardware-properties.ini b/android/avd/hardware-properties.ini
index 0e650bb..dabf166 100644
--- a/android/avd/hardware-properties.ini
+++ b/android/avd/hardware-properties.ini
@@ -83,18 +83,6 @@ default = yes
abstract = Keyboard lid support
description = Whether the QWERTY keyboard can be opened/closed.
-# The name of the hardware charmap for this device.
-#
-# NOTE: This should always be the default 'qwerty2' unless you have
-# modified the system image accordingly. This name is sent to
-# the kernel at boot time. Using an incorrect name will result
-# in an unusable machine.
-name = hw.keyboard.charmap
-type = string
-default = qwerty2
-abstract = Keyboard charmap name
-description = Name of the system keyboard charmap file.
-
# DPad keys
name = hw.dPad
type = boolean
diff --git a/android/avd/info.c b/android/avd/info.c
index b8160a8..1ab066c 100644
--- a/android/avd/info.c
+++ b/android/avd/info.c
@@ -1162,22 +1162,3 @@ avdInfo_getSkinInfo( AvdInfo* i, char** pSkinName, char** pSkinDir )
AFREE(skinPath);
return;
}
-
-char*
-avdInfo_getCharmapFile( AvdInfo* i, const char* charmapName )
-{
- char fileNameBuff[PATH_MAX];
- const char* fileName;
-
- if (charmapName == NULL || charmapName[0] == '\0')
- return NULL;
-
- if (strstr(charmapName, ".kcm") == NULL) {
- snprintf(fileNameBuff, sizeof fileNameBuff, "%s.kcm", charmapName);
- fileName = fileNameBuff;
- } else {
- fileName = charmapName;
- }
-
- return _avdInfo_getContentOrSdkFilePath(i, fileName);
-}
diff --git a/android/avd/info.h b/android/avd/info.h
index 5cb3872..2469f68 100644
--- a/android/avd/info.h
+++ b/android/avd/info.h
@@ -215,12 +215,6 @@ const char* avdInfo_getContentPath( AvdInfo* i );
*/
void avdInfo_getSkinInfo( AvdInfo* i, char** pSkinName, char** pSkinDir );
-/* Find a charmap file named <charmapName>.kcm for this AVD.
- * Returns the path of the file on success, or NULL if not found.
- * The result string must be freed by the caller.
- */
-char* avdInfo_getCharmapFile( AvdInfo* i, const char* charmapName );
-
/* Returns TRUE iff in the Android build system */
int avdInfo_inAndroidBuild( AvdInfo* i );
diff --git a/android/main-common.c b/android/main-common.c
index 1b9e26c..94accf7 100644
--- a/android/main-common.c
+++ b/android/main-common.c
@@ -335,6 +335,9 @@ static const struct {
{ NULL, NULL }
};
+/* this is used by hw/events_device.c to send the charmap name to the system */
+const char* android_skin_keycharmap = NULL;
+
void
parse_skin_files(const char* skinDirPath,
const char* skinName,
@@ -560,6 +563,8 @@ init_sdl_ui(AConfig* skinConfig,
exit(1);
}
+ android_skin_keycharmap = skin_keyboard_charmap_name(qemulator_get()->keyboard);
+
/* add an onion overlay image if needed */
if (opts->onion) {
SkinImage* onion = skin_image_find_simple( opts->onion );
diff --git a/android/main.c b/android/main.c
index e71301c..ec7ea61 100644
--- a/android/main.c
+++ b/android/main.c
@@ -1031,30 +1031,9 @@ int main(int argc, char **argv)
args[n++] = opts->http_proxy;
}
- if (!opts->charmap) {
- /* Try to find a valid charmap name */
- char* charmap = avdInfo_getCharmapFile(avd, hw->hw_keyboard_charmap);
- if (charmap != NULL) {
- D("autoconfig: -charmap %s", charmap);
- opts->charmap = charmap;
- }
- }
-
if (opts->charmap) {
- char charmap_name[AKEYCHARMAP_NAME_SIZE];
-
- if (!path_exists(opts->charmap)) {
- derror("Charmap file does not exist: %s", opts->charmap);
- exit(1);
- }
- /* We need to store the charmap name in the hardware configuration.
- * However, the charmap file itself is only used by the UI component
- * and doesn't need to be set to the emulation engine.
- */
- kcm_extract_charmap_name(opts->charmap, charmap_name,
- sizeof(charmap_name));
- AFREE(hw->hw_keyboard_charmap);
- hw->hw_keyboard_charmap = ASTRDUP(charmap_name);
+ args[n++] = "-charmap";
+ args[n++] = opts->charmap;
}
if (opts->memcheck) {
diff --git a/android/qemulator.c b/android/qemulator.c
index 35587ff..9e88356 100644
--- a/android/qemulator.c
+++ b/android/qemulator.c
@@ -137,7 +137,17 @@ qemulator_init( QEmulator* emulator,
emulator->aconfig = aconfig;
emulator->layout_file = skin_file_create_from_aconfig(aconfig, basepath);
emulator->layout = emulator->layout_file->layouts;
- emulator->keyboard = skin_keyboard_create(opts->charmap, opts->raw_keys);
+ // If we have a custom charmap use it to initialize keyboard.
+ // Otherwise initialize keyboard from configuration settings.
+ // Another way to configure keyboard to use a custom charmap would
+ // be saving a custom charmap name into AConfig's keyboard->charmap
+ // property, and calling single skin_keyboard_create_from_aconfig
+ // routine to initialize keyboard.
+ if (NULL != opts->charmap) {
+ emulator->keyboard = skin_keyboard_create_from_kcm(opts->charmap, opts->raw_keys);
+ } else {
+ emulator->keyboard = skin_keyboard_create_from_aconfig(aconfig, opts->raw_keys);
+ }
emulator->window = NULL;
emulator->win_x = x;
emulator->win_y = y;
diff --git a/android/skin/keyboard.c b/android/skin/keyboard.c
index 3371799..3ee3366 100644
--- a/android/skin/keyboard.c
+++ b/android/skin/keyboard.c
@@ -72,6 +72,15 @@ skin_keyboard_set_keyset( SkinKeyboard* keyboard, SkinKeyset* kset )
}
+const char*
+skin_keyboard_charmap_name( SkinKeyboard* keyboard )
+{
+ if (keyboard && keyboard->charmap)
+ return keyboard->charmap->name;
+
+ return DEFAULT_ANDROID_CHARMAP;
+}
+
void
skin_keyboard_set_rotation( SkinKeyboard* keyboard,
SkinRotation rotation )
@@ -530,18 +539,25 @@ skin_keyboard_create_from_charmap_name(const char* charmap_name,
}
SkinKeyboard*
-skin_keyboard_create( const char* kcm_file_path, int use_raw_keys )
+skin_keyboard_create_from_aconfig( AConfig* aconfig, int use_raw_keys )
{
- const char* charmap_name = DEFAULT_ANDROID_CHARMAP;
- char cmap_buff[AKEYCHARMAP_NAME_SIZE];
-
- if (kcm_file_path != NULL) {
- kcm_extract_charmap_name(kcm_file_path, cmap_buff, sizeof cmap_buff);
- charmap_name = cmap_buff;
+ const char* charmap_name = DEFAULT_ANDROID_CHARMAP;
+ AConfig* node = aconfig_find( aconfig, "keyboard" );
+ if (node != NULL) {
+ charmap_name = aconfig_str(node, "charmap", charmap_name);
}
return skin_keyboard_create_from_charmap_name(charmap_name, use_raw_keys);
}
+SkinKeyboard*
+skin_keyboard_create_from_kcm( const char* kcm_file_path, int use_raw_keys )
+{
+ char charmap_name[AKEYCHARMAP_NAME_SIZE];
+ kcm_extract_charmap_name(kcm_file_path, charmap_name,
+ sizeof(charmap_name));
+ return skin_keyboard_create_from_charmap_name(charmap_name, use_raw_keys);
+}
+
void
skin_keyboard_free( SkinKeyboard* keyboard )
{
diff --git a/android/skin/keyboard.h b/android/skin/keyboard.h
index 1c3b088..a86b132 100644
--- a/android/skin/keyboard.h
+++ b/android/skin/keyboard.h
@@ -24,8 +24,9 @@ typedef void (*SkinKeyCommandFunc)( void* opaque, SkinKeyCommand command, int
typedef void (*SkinKeyEventFunc)( void* opaque, AndroidKeyCode code, int down );
-/* If kcm_file_path is NULL, create a keyboard using the default built-in qwerty2 charmap */
-extern SkinKeyboard* skin_keyboard_create( const char* kcm_file_path, int use_raw_keys );
+extern SkinKeyboard* skin_keyboard_create_from_aconfig( AConfig* aconfig, int use_raw_keys );
+
+extern SkinKeyboard* skin_keyboard_create_from_kcm( const char* kcm_file_path, int use_raw_keys );
extern void skin_keyboard_set_keyset( SkinKeyboard* keyboard, SkinKeyset* kset );
diff --git a/hw/goldfish_events_device.c b/hw/goldfish_events_device.c
index a5b2a21..3072e3b 100644
--- a/hw/goldfish_events_device.c
+++ b/hw/goldfish_events_device.c
@@ -102,6 +102,8 @@ static int events_state_load(QEMUFile* f, void* opaque, int version_id)
return qemu_get_struct(f, events_state_fields, s);
}
+extern const char* android_skin_keycharmap;
+
static void enqueue_event(events_state *s, unsigned int type, unsigned int code, int value)
{
int enqueued = s->last - s->first;
@@ -167,11 +169,22 @@ static unsigned dequeue_event(events_state *s)
return n;
}
+static const char*
+get_charmap_name(events_state *s)
+{
+ if (s->name != NULL)
+ return s->name;
+
+ s->name = android_get_charmap_name();
+ return s->name;
+}
+
+
static int get_page_len(events_state *s)
{
int page = s->page;
if (page == PAGE_NAME) {
- const char* name = s->name;
+ const char* name = get_charmap_name(s);
return strlen(name);
} if (page >= PAGE_EVBITS && page <= PAGE_EVBITS + EV_MAX)
return s->ev_bits[page - PAGE_EVBITS].len;
@@ -187,7 +200,7 @@ static int get_page_data(events_state *s, int offset)
if (offset > page_len)
return 0;
if (page == PAGE_NAME) {
- const char* name = s->name;
+ const char* name = get_charmap_name(s);
return name[offset];
} if (page >= PAGE_EVBITS && page <= PAGE_EVBITS + EV_MAX)
return s->ev_bits[page - PAGE_EVBITS].bits[offset];
@@ -334,6 +347,9 @@ void events_dev_init(uint32_t base, qemu_irq irq)
s = (events_state *) qemu_mallocz(sizeof(events_state));
+ // charmap name will be determined on demand
+ s->name = NULL;
+
/* now set the events capability bits depending on hardware configuration */
/* apparently, the EV_SYN array is used to indicate which other
* event classes to consider.
@@ -498,7 +514,6 @@ void events_dev_init(uint32_t base, qemu_irq irq)
s->first = 0;
s->last = 0;
s->state = STATE_INIT;
- s->name = qemu_strdup(config->hw_keyboard_charmap);
/* This function migh fire buffered events to the device, so
* ensure that it is called after initialization is complete