OSDN Git Service

Enable QEMUD pipe connection
authorVladimir Chtchetkine <vchtchetkine@google.com>
Thu, 4 Aug 2011 21:03:07 +0000 (14:03 -0700)
committerVladimir Chtchetkine <vchtchetkine@google.com>
Fri, 5 Aug 2011 17:18:40 +0000 (10:18 -0700)
Change-Id: I8cdeda261ebaf203310262951e8253cb8a42c8c6

reference-ril/reference-ril.c
rild/rild.c

index 633ad8b..bdb8945 100644 (file)
@@ -33,6 +33,7 @@
 #include <sys/socket.h>
 #include <cutils/sockets.h>
 #include <termios.h>
+#include "hardware/qemu_pipe.h"
 
 #define LOG_TAG "RIL"
 #include <utils/Log.h>
@@ -63,7 +64,7 @@ typedef enum {
     SIM_PIN = 3,
     SIM_PUK = 4,
     SIM_NETWORK_PERSONALIZATION = 5
-} SIM_Status; 
+} SIM_Status;
 
 static void onRequest (int request, void *data, size_t datalen, RIL_Token t);
 static RIL_RadioState currentState();
@@ -1573,7 +1574,7 @@ setRadioState(RIL_RadioState newState)
 }
 
 /** Returns SIM_NOT_READY on error */
-static SIM_Status 
+static SIM_Status
 getSIMStatus()
 {
     ATResponse *p_response = NULL;
@@ -2011,21 +2012,28 @@ mainLoop(void *param)
                 fd = socket_loopback_client(s_port, SOCK_STREAM);
             } else if (s_device_socket) {
                 if (!strcmp(s_device_path, "/dev/socket/qemud")) {
-                    /* Qemu-specific control socket */
-                    fd = socket_local_client( "qemud",
-                                              ANDROID_SOCKET_NAMESPACE_RESERVED,
-                                              SOCK_STREAM );
-                    if (fd >= 0 ) {
-                        char  answer[2];
-
-                        if ( write(fd, "gsm", 3) != 3 ||
-                             read(fd, answer, 2) != 2 ||
-                             memcmp(answer, "OK", 2) != 0)
-                        {
-                            close(fd);
-                            fd = -1;
-                        }
-                   }
+                    /* Before trying to connect to /dev/socket/qemud (which is
+                     * now another "legacy" way of communicating with the
+                     * emulator), we will try to connecto to gsm service via
+                     * qemu pipe. */
+                    fd = qemu_pipe_open("qemud:gsm");
+                    if (fd < 0) {
+                        /* Qemu-specific control socket */
+                        fd = socket_local_client( "qemud",
+                                                  ANDROID_SOCKET_NAMESPACE_RESERVED,
+                                                  SOCK_STREAM );
+                        if (fd >= 0 ) {
+                            char  answer[2];
+
+                            if ( write(fd, "gsm", 3) != 3 ||
+                                 read(fd, answer, 2) != 2 ||
+                                 memcmp(answer, "OK", 2) != 0)
+                            {
+                                close(fd);
+                                fd = -1;
+                            }
+                       }
+                    }
                 }
                 else
                     fd = socket_local_client( s_device_path,
index 8ee3569..18ff671 100644 (file)
@@ -33,6 +33,7 @@
 #include <linux/prctl.h>
 
 #include <private/android_filesystem_config.h>
+#include "hardware/qemu_pipe.h"
 
 #define LIB_PATH_PROPERTY   "rild.libpath"
 #define LIB_ARGS_PROPERTY   "rild.libargs"
@@ -175,11 +176,13 @@ int main(int argc, char **argv)
 
                 sleep(1);
 
-                fd = socket_local_client(
-                            QEMUD_SOCKET_NAME,
-                            ANDROID_SOCKET_NAMESPACE_RESERVED,
-                            SOCK_STREAM );
-
+                fd = qemu_pipe_open("qemud:gsm");
+                if (fd < 0) {
+                    fd = socket_local_client(
+                                QEMUD_SOCKET_NAME,
+                                ANDROID_SOCKET_NAMESPACE_RESERVED,
+                                SOCK_STREAM );
+                }
                 if (fd >= 0) {
                     close(fd);
                     snprintf( arg_device, sizeof(arg_device), "%s/%s",