usb_funcfs: Check descriptors received from systemd 47/176347/2 accepted/tizen/unified/20180426.145755 submit/tizen/20180426.060340
authorPaweł Szewczyk <p.szewczyk@samsung.com>
Wed, 18 Apr 2018 13:09:51 +0000 (15:09 +0200)
committerManish Rathod <manish.r@samsung.com>
Thu, 26 Apr 2018 05:52:20 +0000 (05:52 +0000)
Change-Id: I178e04a49f4691923455066572f1e26396c65af4
Signed-off-by: Paweł Szewczyk <p.szewczyk@samsung.com>
src/usb_funcfs_client.c

index 94f56f4..a7cee7d 100644 (file)
@@ -138,13 +138,29 @@ error:
 static void *usb_open_thread(void *x)
 {
     struct usb_handle *usb = (struct usb_handle *)x;
+    int maxfd = sd_listen_fds(0) + SD_LISTEN_FDS_START;
+    int fd;
+    int ep[3];
+    int received;
+
+    usb->control = -1;
+    usb->bulk_in = -1;
+    usb->bulk_out = -1;
+
+    received = 0;
+    for (fd = SD_LISTEN_FDS_START; fd < maxfd; ++fd) {
+        if (sd_is_special(fd, NULL) > 0) {
+            ep[received++] = fd;
+        }
+    }
 
     /* Endpoints are received from sytemd */
-    if (sd_listen_fds(0) >= 3) {
+    if (received == 3) {
+        D("Using functionfs socket activation\n");
         sdb_mutex_lock(&usb->control_lock);
-        usb->control = SD_LISTEN_FDS_START + 0;
-        usb->bulk_out = SD_LISTEN_FDS_START + 1;
-        usb->bulk_in = SD_LISTEN_FDS_START + 2;
+        usb->control = ep[0];
+        usb->bulk_out = ep[1];
+        usb->bulk_in = ep[2];
         sdb_cond_signal(&usb->control_notify);
         sdb_mutex_unlock(&usb->control_lock);
     } else {