fi
EMULATOR_DATA_PATH="$EMULATOR_BIN_PATH/data"
-EMULATOR_SKIN_PATH="$EMULATOR_BIN_PATH/skins"
EMULATOR_KERNEL_PATH="${EMULATOR_DATA_PATH}/kernel-img"
EMULATOR_KERNEL_NAME_ARM="zImage_arm"
EMULATOR_KERNEL_NAME_X86="bzImage"
echo "\t\t Run emulator with gdb"
echo "\t --ddd-kernel"
echo "\t\t Run emulator with DDD(Data Display Debugger)"
- echo "\t --q | --quick-start"
- echo "\t\t quick start of emulator without showing option window"
echo "\t --t [new image] | --target [new image]"
echo "\t\t Run emulator with new image"
echo "\t --h | --help"
while [ "$1" != "" ]
do
case $1 in
- disk*)
- BOOT_OPTION="--disk"
- shift ;;
nfs*)
BOOT_OPTION="--target"
shift ;;
ulimit -c 0
emul_opts="--no-dump $emul_opts"
shift ;;
- --q|--quick-start)
- quick_start=1
- shift;;
--t|--target)
while echo "$2" | grep "^[^-]"
do
set_user_env () {
test -e "/dev/kvm" && kvm_opt="-enable-kvm"
- quick_start=0
set_terminal_type
parse_input_params $@
echo "Running from build directory"
EMULATOR_BIN_PATH="$build_dir"
-# test -h "$build_dir/skins" || ln -s "$build_dir/../skins" "$build_dir/skins"
-
case ${TARGET_ARCH} in
*arm)
+ test -d "$build_dir/../etc" || mkdir "$build_dir/../etc"
+ test -f "$build_dir/../etc/DEBUGCH" || cp "$build_dir/DEBUGCH" "$build_dir/../etc/"
+ test -d "$build_dir/../arm" || mkdir "$build_dir/../arm"
+ test -h "$build_dir/../arm/conf" || ln -s "$build_dir/../conf" "$build_dir/../arm/conf"
+ test -h "$build_dir/../arm/data" || ln -s "$build_dir/../data" "$build_dir/../arm/data"
+ test -d "$build_dir/../arm/VMs" || mkdir "$build_dir/../arm/VMs"
+ test -d "$build_dir/../arm/VMs/default" || mkdir "$build_dir/../arm/VMs/default"
+ test -d "$build_dir/../arm/VMs/default/logs" || mkdir "$build_dir/../arm/VMs/default/logs"
+ test -f "$build_dir/../arm/VMs/default/config.ini" || cp "$build_dir/config_dbg_arm.ini" "$build_dir/../arm/VMs/default/config.ini"
+
# find the target path
test "$BOOT_OPTION" = "--disk" && TARGET_PATH="$EMULATOR_BIN_PATH/../../emulator-image/$TARGET_NAME"
+
# fine the kernel image
- EMULATOR_KERNEL_LINK="$EMULATOR_BIN_PATH/../../../kernel/linux-current"
- if test -h "$EMULATOR_KERNEL_LINK" -a -d "$EMULATOR_KERNEL_LINK/arch/arm/boot"
- then
- EMULATOR_KERNEL_PATH="$EMULATOR_KERNEL_LINK/arch/arm/boot"
- EMULATOR_KERNEL_NAME_ARM="zImage"
- if test "$DDD" != ""
- then
- DDD="$DDD --debugger /usr/bin/arm-linux/bin/arm-linux-gdb $EMULATOR_KERNEL_PATH/../../../vmlinux"
- fi
- elif test -d "$EMULATOR_BIN_PATH/../../../kernel/linux-2.6.32/arch/arm/boot"
+ if test -d "$EMULATOR_BIN_PATH/../../../kernel/linux-2.6.32/arch/arm/boot"
then
EMULATOR_KERNEL_PATH="$EMULATOR_BIN_PATH/../../../kernel/linux-2.6.32/arch/arm/boot"
EMULATOR_KERNEL_NAME_ARM="zImage"
;;
*86)
test -d "$build_dir/../etc" || mkdir "$build_dir/../etc"
+ test -f "$build_dir/../etc/DEBUGCH" || cp "$build_dir/DEBUGCH" "$build_dir/../etc/"
test -d "$build_dir/../x86" || mkdir "$build_dir/../x86"
test -h "$build_dir/../x86/conf" || ln -s "$build_dir/../conf" "$build_dir/../x86/conf"
test -h "$build_dir/../x86/data" || ln -s "$build_dir/../data" "$build_dir/../x86/data"
test -d "$build_dir/../x86/VMs" || mkdir "$build_dir/../x86/VMs"
test -d "$build_dir/../x86/VMs/default" || mkdir "$build_dir/../x86/VMs/default"
test -d "$build_dir/../x86/VMs/default/logs" || mkdir "$build_dir/../x86/VMs/default/logs"
- test -f "$build_dir/../x86/VMs/default/config.ini" || cp "$build_dir/config_dbg.ini" "$build_dir/../x86/VMs/default/config.ini"
+ test -f "$build_dir/../x86/VMs/default/config.ini" || cp "$build_dir/config_dbg_x86.ini" "$build_dir/../x86/VMs/default/config.ini"
# find the target path
test "$BOOT_OPTION" = "--disk" && TARGET_PATH="$EMULATOR_BIN_PATH/../../../../emulator-image/$TARGET_NAME"
# fine the kernel image
- EMULATOR_KERNEL_LINK="$EMULATOR_BIN_PATH/../../../emulator-kernel"
- if test -h "$EMULATOR_KERNEL_LINK" -a -d "$EMULATOR_KERNEL_LINK/arch/x86/boot"
- then
- EMULATOR_KERNEL_PATH="$EMULATOR_KERNEL_LINK/arch/x86/boot"
- if test "$DDD" != ""
- then
- DDD="$DDD $EMULATOR_KERNEL_PATH/../../../vmlinux"
- fi
- elif test -d "$EMULATOR_BIN_PATH/../../../emulator-kernel/arch/x86/boot"
+ if test -d "$EMULATOR_BIN_PATH/../../../emulator-kernel/arch/x86/boot"
then
EMULATOR_KERNEL_PATH="$EMULATOR_BIN_PATH/../../../emulator-kernel/arch/x86/boot"
if test "$DDD" != ""
;;
esac
- # find the skins
- if test -d "$EMULATOR_BIN_PATH/../skins"
- then
- EMULATOR_SKIN_PATH="$EMULATOR_BIN_PATH/../skins"
- echo "Found skins in $EMULATOR_SKIN_PATH"
- fi
-
# find the bios path
if test -d "$EMULATOR_BIN_PATH/../data/pc-bios"
then
}
set_emulator_options () {
- if test \! -d "$EMULATOR_SKIN_PATH"
- then
- echo "No emulator skins found..." >> $STDERR_LOGFILE
- exit 1
- fi
-
- target_conf="$TARGET_PATH/TargetInfo.conf"
- if test -f "$target_conf"
- then
- skin=`grep "^EmulatorSkinPath=" "$target_conf" | cut -f2 -d=`
- case "$skin" in
- /*)
- ;;
- skin*)
- skin="$EMULATOR_SKIN_PATH/../$skin"
- ;;
- *)
- skin="$EMULATOR_SKIN_PATH/$skin"
- ;;
- esac
- fi
-
- # no skin, search for one
- if test "$skin" = ""
- then
- skin="$EMULATOR_SKIN_PATH/emul_480x800/default.dbi"
- fi
- if test \! -f "$skin"
- then
- echo "No skin file found" >> $STDERR_LOGFILE
- exit 1
- fi
-
- export EMULATOR_SKIN_PATH
-
- case ${TARGET_ARCH} in
- *arm)
- #qemu_skin
- emul_opts="$emul_opts --skin $skin"
-
- #quick_start
- emul_opts="$emul_opts --quick-start $quick_start"
- ;;
- esac
-
#disable dump
if test EMUL_DUMP = 0
then
DGLES2_BACKEND='env DGLES2_BACKEND=osmesa'
# export DGLES2_BACKEND="osmesa"
exec $GDB $DGLES2_BACKEND "${EMULATOR_BIN_PATH}/emulator-arm" \
- $BOOT_OPTION "$TARGET_PATH" \
$emul_opts -- $qemu_arm_opts $qemu_common_opts $debug_ports
;;
*86)
$BOOT_OPTION "$TARGET_PATH" \
$emul_opts -- $qemu_x86_opts $qemu_common_opts $debug_ports $kvm_opt 1>> $EMUL_LOGFILE 2> stderr.log
else
- exec $GDB "${EMULATOR_BIN_PATH}/emulator-x86" --vtm default \
- $BOOT_OPTION "$TARGET_PATH" \
+ exec $GDB "${EMULATOR_BIN_PATH}/emulator-x86" \
$emul_opts -- $qemu_x86_opts $qemu_common_opts $debug_ports $kvm_opt
fi
;;
#include "utils.h"
#include "tools.h"
#include "debug_ch.h"
-#include <sys/utsname.h>
//DEFAULT_DEBUG_CHANNEL(tizen);
MULTI_DEBUG_CHANNEL(tizen, event_handler);
static int gui_keysym;
static kbd_layout_t *kbd_layout = NULL;
extern multi_touch_state qemu_mts;
-extern struct utsname host_uname_buf;
+
static uint8_t gtk_keyevent_to_keycode_generic(const GdkEventKey *event)
{
static void gtk_process_key(GdkEventKey *event)
{
- int keycode, v;
- int i;
+ static guint ev_state = 0;
+ static GdkEventKey prev_event ;
+ int keycode;
if (event->keyval == GDK_Pause) {
/* specific case */
- v = 0;
-
- if (event->type == GDK_KEY_RELEASE)
- v |= 0x80;
+ int v = (event->type == GDK_KEY_RELEASE) ? 0x80 : 0;
kbd_put_keycode(0xe1);
kbd_put_keycode(0x1d | v);
kbd_put_keycode(0x45 | v);
- return;
+
+ prev_event = *event; return;
}
if (kbd_layout)
case 0x00:
/* sent when leaving window: reset the modifiers state */
reset_keys();
- return;
+ prev_event = *event; return;
+ case 0x2a: /* Left Shift */
+ case 0x36: /* Right Shift */
case 0x1d: /* Left CTRL */
if (event->type == GDK_KEY_RELEASE) {
qemu_mts.multitouch_enable = 0;
if (qemu_mts.finger_cnt > 0) {
+ int i;
for (i = 0; i < qemu_mts.finger_cnt; i++) {
kbd_mouse_event(qemu_mts.finger_slot[i].dx, qemu_mts.finger_slot[i].dy, i, 0);
}
} else {
qemu_mts.multitouch_enable = 1;
}
+
case 0x9d: /* Right CTRL */
- case 0x2a: /* Left Shift */
- case 0x36: /* Right Shift */
case 0x38: /* Left ALT */
case 0xb8: /* Right ALT */
if (event->type == GDK_KEY_RELEASE)
else
modifiers_state[keycode] = 1;
break;
- case 0x45: /* num lock */
- case 0x3a: /* caps lock */
- /* GTK does send the key up event, so we dont generate it */
- /*kbd_put_keycode(keycode);
- kbd_put_keycode(keycode | 0x80);
- return;*/
+ case 0x45: /* Num Lock */
+ if (event->type == GDK_KEY_RELEASE)
+ ev_state ^= GDK_MOD2_MASK;
+ break;
+ case 0x3a: /* Caps Lock */
+ if (event->type == GDK_KEY_RELEASE)
+ ev_state ^= GDK_LOCK_MASK;
break;
}
- /* now send the key code */
+// fprintf(stderr, "input key = %02x %s\n", keycode, (event->type == GDK_KEY_PRESS)? "press":"release");
- if (keycode & 0x80) {
- kbd_put_keycode(0xe0);
- }
+ if (event->type == GDK_KEY_PRESS) {
+ /* Put release keycode of previous pressed key becuase GTK doesn't generate release event of long-pushed key */
+ if (prev_event.type == GDK_KEY_PRESS &&
+ prev_event.state == event->state &&
+ prev_event.hardware_keycode == event->hardware_keycode) {
+ if (keycode & 0x80)
+ kbd_put_keycode(0xe0);
+ kbd_put_keycode(keycode | 0x80);
+ }
+ else {
+ /* synchronize state of Num Lock to host's event->state */
+ if ((event->state ^ ev_state) & GDK_MOD2_MASK) {
+ ev_state ^= GDK_MOD2_MASK;
+ kbd_put_keycode(0x45 & 0x7f);
+ kbd_put_keycode(0x45 | 0x80);
+ }
- if (event->type == GDK_KEY_RELEASE) {
- kbd_put_keycode(keycode | 0x80);
+ /* synchronize state of Caps Lock to host's event->state */
+ if ((event->state ^ ev_state) & GDK_LOCK_MASK) {
+ ev_state ^= GDK_LOCK_MASK;
+ kbd_put_keycode(0x3a & 0x7f);
+ kbd_put_keycode(0x3a | 0x80);
+ }
+ }
}
- else {
- kbd_put_keycode(keycode & 0x7f);
- }
+ /* now send the key code */
+ if (keycode & 0x80)
+ kbd_put_keycode(0xe0);
+ kbd_put_keycode((event->type == GDK_KEY_RELEASE) ? (keycode | 0x80) : (keycode & 0x7f));
+
+ prev_event = *event; return;
}
*/
gboolean configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data)
{
- // Ubuntu 11.10 configure_event bug work-around
- if (strcmp(host_uname_buf.release, "3.0.0-12-generic") == 0 && event->x == 0 && event->y == 0) {
- return TRUE;
- }
-
/* just save new values in configuration structure */
+
configuration.main_x = event->x;
configuration.main_y = event->y;
- INFO("configure_event x=%d, y=%d", event->x, event->y);
return TRUE;
}