send noti to sensord when sdb is booting up submit/tizen_2.2/20130704.052118
authoryoonki.park <yoonki.park@samsung.com>
Thu, 4 Jul 2013 05:17:44 +0000 (14:17 +0900)
committeryoonki.park <yoonki.park@samsung.com>
Thu, 4 Jul 2013 05:20:16 +0000 (14:20 +0900)
Change-Id: I5c4df395196bc2126bb7db755b431a9b6d3fac0b
Signed-off-by: yoonki.park <yoonki.park@samsung.com>
packaging/sdbd.spec
src/sdb.c
src/sdb.h
src/services.c
src/transport_local.c
src/usb_linux_client.c
src/utils.c

index 79519bdd9a525c412fcaa14c4c052a25da585fa7..dddcf147b8b1ce2c75fcbd88a77f148d71528291 100644 (file)
@@ -1,6 +1,6 @@
 Name:       sdbd
 Summary:    SDB daemon
-Version:    2.2.6
+Version:    2.2.7
 Release:    0
 Group:      TO_BE/FILLED_IN
 License:    TO BE FILLED IN
index ce73274f732323acc24f9b4ca497ca79291263f0..563dd18bf6e6403b9e8b0f6b613355420aae385f 100644 (file)
--- a/src/sdb.c
+++ b/src/sdb.c
@@ -43,6 +43,14 @@ SDB_MUTEX_DEFINE( D_lock );
 
 int HOST = 0;
 
+int is_emulator(void) {
+    if (access(USB_NODE_FILE, F_OK) == 0) {
+        return 0;
+    } else {
+        return 1;
+    }
+}
+
 void handle_sig_term(int sig) {
 #ifdef SDB_PIDPATH
     if (access(SDB_PIDPATH, F_OK) == 0)
@@ -50,7 +58,7 @@ void handle_sig_term(int sig) {
 #endif
     //kill(getpgid(getpid()),SIGTERM);
     //killpg(getpgid(getpid()),SIGTERM);
-    if (access("/dev/samsung_sdb", F_OK) == 0) {
+    if (!is_emulator()) {
         exit(0);
     } else {
        // do nothing on a emulator
@@ -1143,7 +1151,7 @@ int sdb_main(int is_daemon, int server_port)
         }
     }
 
-    if (access("/dev/samsung_sdb", F_OK) == 0) {
+    if (!is_emulator()) {
         // listen on USB
         usb_init();
         // listen on tcp
index 0f30e0f475de79c4cccd4446a56a5ae67629e6df..958fc4078c4d1190fc85b6b0abf36e5e31abd7ca 100644 (file)
--- a/src/sdb.h
+++ b/src/sdb.h
@@ -486,6 +486,8 @@ extern int SHELL_EXIT_NOTIFY_FD;
 int sendfailmsg(int fd, const char *reason);
 int handle_host_request(char *service, transport_type ttype, char* serial, int reply_fd, asocket *s);
 
+int is_emulator(void);
+
 #if SDB_HOST /* tizen-specific */
 #define DEVICEMAP_SEPARATOR ":"
 #define DEVICENAME_MAX 256
@@ -496,3 +498,5 @@ int get_devicename_from_shdmem(int port, char *device_name);
 int read_line(const int fd, char* ptr, const size_t maxlen);
 #endif
 #endif
+
+#define USB_NODE_FILE "/dev/samsung_sdb"
index 3a6588e8ee5d09f57960770276cbddf1d14aab4e..dfc2735a025b110784793ff57cb8eed2603a2221 100644 (file)
@@ -491,7 +491,7 @@ static int create_subproc_thread(const char *name)
     D("create_subprocess() ret_fd=%d pid=%d\n", ret_fd, pid);
 
     if (ret_fd < 0) {
-        printf("cannot create service thread\n");
+        D("cannot create service thread\n");
         return -1;
     }
     sti = malloc(sizeof(stinfo));
@@ -503,7 +503,7 @@ static int create_subproc_thread(const char *name)
     if(sdb_thread_create( &t, service_bootstrap_func, sti)){
         free(sti);
         sdb_close(ret_fd);
-        printf("cannot create service thread\n");
+        D("cannot create service thread\n");
         return -1;
     }
 
index 23d5bc3638e4fe2e7dd78fd573c1fc0f07cf71a8..6811f61b8e8a57c86b5c6635d90c7a1b541286d7 100644 (file)
@@ -421,31 +421,44 @@ static int get_str_cmdline(char *src, char *dest, char str[], int str_size) {
     return len;
 }
 
-static void notify_sdbd_startup() {
+static int send_msg_to_localhost_from_guest(int local_port, char *request, int sock_type) {
     int                  ret, s;
     struct sockaddr_in   server;
-    char                 buffer[1024];
-    char                 request[1024];
-    int                  len;
 
     memset( &server, 0, sizeof(server) );
     server.sin_family      = AF_INET;
-    server.sin_port        = htons(DEFAULT_SDB_PORT);
+    server.sin_port        = htons(local_port);
     server.sin_addr.s_addr = inet_addr(QEMU_FORWARD_IP);
 
-    s = socket(AF_INET, SOCK_STREAM, 0);
+    if (sock_type == 0) {
+        s = socket(AF_INET, SOCK_STREAM, 0);
+    } else {
+        s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+    }
     if (s < 0) {
         D("could not create socket\n");
-        return;
+        return -1;
     }
-    ret = connect( s, (struct sockaddr*) &server, sizeof(server) );
+    ret = connect(s, (struct sockaddr*) &server, sizeof(server));
     if (ret < 0) {
         D("could not connect to server\n");
         sdb_close(s);
-        return;
+        return -1;
+    }
+    if (sdb_write(s, request, strlen(request)) < 0) {
+        D("could not send sdbd noti request\n");
     }
 
-    // send the request
+    sdb_close(s);
+    return 0;
+}
+
+static void notify_sdbd_startup() {
+    int                  ret;
+    char                 buffer[512];
+    char                 request[512];
+
+    // send the request to sdbserver
     char cmdline[512];
     int fd = unix_open("/proc/cmdline", O_RDONLY);
     char *port_str = "sdb_port=";
@@ -454,7 +467,7 @@ static void notify_sdbd_startup() {
     char vm_name[256]={0,};
 
     if (fd < 0) {
-        sdb_close(s);
+        D("fail to read /proc/cmdline\n");
         return;
     }
     if(read_line(fd, cmdline, sizeof(cmdline))) {
@@ -463,7 +476,6 @@ static void notify_sdbd_startup() {
         if (ret < 1) {
             D("could not get port from cmdline\n");
             sdb_close(fd);
-            sdb_close(s);
             return;
         }
         // FIXME: remove comma!
@@ -473,20 +485,28 @@ static void notify_sdbd_startup() {
         if (ret < 1) {
             D("could not get port from cmdline\n");
             sdb_close(fd);
-            sdb_close(s);
             return;
         }
         int base_port = strtol(port, NULL, 10);
         snprintf(request, sizeof request, "host:emulator:%d:%s",base_port + 1, vm_name);
 
-        len = snprintf( buffer, sizeof buffer, "%04x%s", strlen(request), request );
+        snprintf( buffer, sizeof buffer, "%04x%s", strlen(request), request );
         D("[%s]\n", buffer);
-        if (sdb_write(s, buffer, len) < 0) {
+        if (send_msg_to_localhost_from_guest(DEFAULT_SDB_PORT, buffer, 0) <0) {
             D("could not send sdbd noti request\n");
+            sdb_close(fd);
+            return;
+        }
+        // send to sensord with udp
+        char sensord_buf[16];
+        snprintf(sensord_buf, sizeof sensord_buf, "2\n");
+        if (send_msg_to_localhost_from_guest(base_port + 3, sensord_buf, 1) < 0) {
+            D("could not send senserd noti request\n");
+            sdb_close(fd);
+            return;
         }
     }
     sdb_close(fd);
-    sdb_close(s);
 }
 
 void local_init(int port)
index 12d57c858c26a82ff33c71d2d35f70fc4c264733..96a3f7562d5ef6e7b3f53e8a05edc1d6b804f362 100644 (file)
@@ -57,11 +57,11 @@ static void *usb_open_thread(void *x)
         D("[ usb_thread - opening device ]\n");
         do {
             /* XXX use inotify? */
-            fd = unix_open("/dev/samsung_sdb", O_RDWR); /* tizen-specific */
+            fd = unix_open(USB_NODE_FILE, O_RDWR); /* tizen-specific */
             if (fd < 0) {
                 // to support older kernels
                 //fd = unix_open("/dev/android", O_RDWR);
-                D("[ opening /dev/samsung_sdb device failed ]\n");
+                D("[ opening %s device failed ]\n", USB_NODE_FILE);
             }
             if (fd < 0) {
                 sdb_sleep_ms(1000);
index 3cea57c776b6104875570fe10e25f932f32e8822..d8ba6514291c23e52e51569eb9a907220bcdf793 100644 (file)
@@ -18,6 +18,7 @@
 #include <stdarg.h>
 #include <stdio.h>
 #include <string.h>
+
 #define STRING_MAXLEN 1024
 char*
 buff_addc (char*  buff, char*  buffEnd, int  c)