diff options
author | Vladimir Chtchetkine <vchtchetkine@google.com> | 2011-08-10 12:21:03 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-08-10 12:21:03 -0700 |
commit | 3e7bfaede6e6604b643c3692d3f465c13ba73db2 (patch) | |
tree | 8ce229c475f1d71be5e5e92762335be7d1028337 | |
parent | 70e8110fcf2c35d1ac67f0eb4a2702014a16719b (diff) | |
parent | abe471909d749c7430409c00bdbc39bbf8ff0c43 (diff) | |
download | libhardware-3e7bfaede6e6604b643c3692d3f465c13ba73db2.tar.gz |
am abe47190: am 079ff13b: Merge "Enable connection to QEMUD via pipe."
* commit 'abe471909d749c7430409c00bdbc39bbf8ff0c43':
Enable connection to QEMUD via pipe.
-rw-r--r-- | include/hardware/qemu_pipe.h | 2 | ||||
-rw-r--r-- | include/hardware/qemud.h | 55 |
2 files changed, 32 insertions, 25 deletions
diff --git a/include/hardware/qemu_pipe.h b/include/hardware/qemu_pipe.h index 570af705..930228e8 100644 --- a/include/hardware/qemu_pipe.h +++ b/include/hardware/qemu_pipe.h @@ -20,8 +20,6 @@ #include <unistd.h> #include <fcntl.h> #include <sys/mman.h> -#include <hardware/qemud.h> -#include <hardware/qemu_pipe.h> #include <pthread.h> /* for pthread_once() */ #include <stdlib.h> #include <stdio.h> diff --git a/include/hardware/qemud.h b/include/hardware/qemud.h index 874a32f2..5c39f9c9 100644 --- a/include/hardware/qemud.h +++ b/include/hardware/qemud.h @@ -18,10 +18,12 @@ #define ANDROID_INCLUDE_HARDWARE_QEMUD_H #include <cutils/sockets.h> +#include "qemu_pipe.h" /* the following is helper code that is used by the QEMU-specific * hardware HAL modules to communicate with the emulator program - * through the 'qemud' multiplexing daemon. + * through the 'qemud' multiplexing daemon, or through the qemud + * pipe. * * see the documentation comments for details in * development/emulator/qemud/qemud.c @@ -64,30 +66,37 @@ qemud_channel_open(const char* name) int fd; int namelen = strlen(name); char answer[2]; + char pipe_name[256]; - /* connect to qemud control socket */ - fd = socket_local_client( "qemud", - ANDROID_SOCKET_NAMESPACE_RESERVED, - SOCK_STREAM ); + /* First, try to connect to the pipe. */ + snprintf(pipe_name, sizeof(pipe_name), "qemud:%s", name); + fd = qemu_pipe_open(pipe_name); if (fd < 0) { - D("no qemud control socket: %s", strerror(errno)); - return -1; - } - - /* send service name to connect */ - if (qemud_fd_write(fd, name, namelen) != namelen) { - D("can't send service name to qemud: %s", - strerror(errno)); - close(fd); - return -1; - } - - /* read answer from daemon */ - if (qemud_fd_read(fd, answer, 2) != 2 || - answer[0] != 'O' || answer[1] != 'K') { - D("cant' connect to %s service through qemud", name); - close(fd); - return -1; + D("QEMUD pipe is not available for %s: %s", name, strerror(errno)); + /* If pipe is not available, connect to qemud control socket */ + fd = socket_local_client( "qemud", + ANDROID_SOCKET_NAMESPACE_RESERVED, + SOCK_STREAM ); + if (fd < 0) { + D("no qemud control socket: %s", strerror(errno)); + return -1; + } + + /* send service name to connect */ + if (qemud_fd_write(fd, name, namelen) != namelen) { + D("can't send service name to qemud: %s", + strerror(errno)); + close(fd); + return -1; + } + + /* read answer from daemon */ + if (qemud_fd_read(fd, answer, 2) != 2 || + answer[0] != 'O' || answer[1] != 'K') { + D("cant' connect to %s service through qemud", name); + close(fd); + return -1; + } } return fd; } |