Add -p option to mtptest program to run in PTP mode instead of MTP

Change-Id: Idbd1437756daab8d6141db49b07d4eb0814c9e7e
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/media/mtp/f_mtp.h b/media/mtp/f_mtp.h
index 7307d74..82015a0 100644
--- a/media/mtp/f_mtp.h
+++ b/media/mtp/f_mtp.h
@@ -18,6 +18,11 @@
 #ifndef __LINUX_USB_F_MTP_H
 #define __LINUX_USB_F_MTP_H
 
+/* Constants for MTP_SET_INTERFACE_MODE */
+#define MTP_INTERFACE_MODE_MTP  0
+#define MTP_INTERFACE_MODE_PTP  1
+
+
 struct mtp_file_range {
 	/* path for file to transfer */
 	const char	*path;
@@ -35,5 +40,7 @@
  * The file is created if it does not exist.
  */
 #define MTP_RECEIVE_FILE           _IOW('M', 1, struct mtp_file_range)
+/* Sets the driver mode to either MTP or PTP */
+#define MTP_SET_INTERFACE_MODE     _IOW('M', 2, int)
 
 #endif /* __LINUX_USB_F_MTP_H */
diff --git a/media/mtp/mtptest.cpp b/media/mtp/mtptest.cpp
index 89aa622..0d9d45a 100644
--- a/media/mtp/mtptest.cpp
+++ b/media/mtp/mtptest.cpp
@@ -21,9 +21,11 @@
 #include <stdlib.h>
 #include <sys/types.h>
 #include <fcntl.h>
+#include <sys/ioctl.h>
 
 #include "MtpServer.h"
 #include "MtpStorage.h"
+#include "f_mtp.h"
 
 using namespace android;
 
@@ -40,10 +42,13 @@
     close(fd);
 }
 
-int main() {
-    // first disable UMS and enable MTP USB functions
-    enable_usb_function("usb_mass_storage", false);
-    enable_usb_function("mtp", true);
+int main(int argc, char* argv[]) {
+    bool usePTP = false;
+
+    for (int i = 1; i < argc; i++) {
+        if (!strcmp(argv[i], "-p"))
+            usePTP = true;
+    }
 
     int fd = open("/dev/mtp_usb", O_RDWR);
     printf("open returned %d\n", fd);
@@ -52,6 +57,19 @@
         return -1;
     }
 
+    if (usePTP) {
+        // set driver mode to PTP
+        int ret = ioctl(fd, MTP_SET_INTERFACE_MODE, MTP_INTERFACE_MODE_PTP);
+        if (ret) {
+            fprintf(stderr, "MTP_SET_INTERFACE_MODE failed\n");
+            return -1;
+        }
+    }
+
+    // disable UMS and enable MTP USB functions
+    enable_usb_function("usb_mass_storage", false);
+    enable_usb_function("mtp", true);
+
     MtpServer   server(fd, "/data/data/mtp/mtp.db");
     server.addStorage("/sdcard");
     server.scanStorage();