summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Chtchetkine <vchtchetkine@google.com>2011-08-10 12:21:03 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-08-10 12:21:03 -0700
commit3e7bfaede6e6604b643c3692d3f465c13ba73db2 (patch)
tree8ce229c475f1d71be5e5e92762335be7d1028337
parent70e8110fcf2c35d1ac67f0eb4a2702014a16719b (diff)
parentabe471909d749c7430409c00bdbc39bbf8ff0c43 (diff)
downloadlibhardware-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.h2
-rw-r--r--include/hardware/qemud.h55
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;
}