Allow toggle of MTP debug

Via command line in TWRP:
twrp set tw_mtp_debug 1

This will enable debugging for MTP. You will need to disable and
re-enable MTP in order to see the debug logging.

Change-Id: Ia7bb0c584e10a4322b65ecf80a67ed7ee836b38e
diff --git a/mtp/MtpDebug.cpp b/mtp/MtpDebug.cpp
index c3a3d8a..47834ab 100755
--- a/mtp/MtpDebug.cpp
+++ b/mtp/MtpDebug.cpp
@@ -21,20 +21,20 @@
 #include <stdio.h>
 
 #define MTP_DEBUG_BUFFER_SIZE 2048
-//#define MTP_DEBUG 1
+static int debug_enabled = 0;
 
 extern "C" void mtpdebug(const char *fmt, ...)
 {
-#ifdef MTP_DEBUG
-	char buf[MTP_DEBUG_BUFFER_SIZE];		// We're going to limit a single request to 512 bytes
+	if (debug_enabled) {
+		char buf[MTP_DEBUG_BUFFER_SIZE];		// We're going to limit a single request to 512 bytes
 
-	va_list ap;
-	va_start(ap, fmt);
-	vsnprintf(buf, MTP_DEBUG_BUFFER_SIZE, fmt, ap);
-	va_end(ap);
+		va_list ap;
+		va_start(ap, fmt);
+		vsnprintf(buf, MTP_DEBUG_BUFFER_SIZE, fmt, ap);
+		va_end(ap);
 
-	fputs(buf, stdout);
-#endif
+		fputs(buf, stdout);
+	}
 }
 
 struct CodeEntry {
@@ -417,3 +417,8 @@
 		return "NONE";
 	return getCodeName(code, sDevicePropCodes);
 }
+
+void MtpDebug::enableDebug(void) {
+	debug_enabled = 1;
+	MTPD("MTP debug logging enabled\n");
+}
diff --git a/mtp/MtpDebug.h b/mtp/MtpDebug.h
index 12a23cc..b572b3b 100755
--- a/mtp/MtpDebug.h
+++ b/mtp/MtpDebug.h
@@ -43,6 +43,7 @@
 	static const char* getFormatCodeName(MtpObjectFormat code);
 	static const char* getObjectPropCodeName(MtpPropertyCode code);
 	static const char* getDevicePropCodeName(MtpPropertyCode code);
+	static void enableDebug();
 };
 
 
diff --git a/mtp/twrpMtp.cpp b/mtp/twrpMtp.cpp
index ff58f79..6fe0ee3 100755
--- a/mtp/twrpMtp.cpp
+++ b/mtp/twrpMtp.cpp
@@ -68,7 +68,9 @@
 }
 #endif //def TWRPMTP
 
-twrpMtp::twrpMtp() {
+twrpMtp::twrpMtp(int debug_enabled = 0) {
+	if (debug_enabled)
+		MtpDebug::enableDebug();
 	mtpstorages = new storages;
 }
 
diff --git a/mtp/twrpMtp.hpp b/mtp/twrpMtp.hpp
index 2dd56a2..bed81c0 100755
--- a/mtp/twrpMtp.hpp
+++ b/mtp/twrpMtp.hpp
@@ -33,7 +33,7 @@
 
 class twrpMtp {
 	public:
-		twrpMtp();
+		twrpMtp(int debug_enabled /* = 0 */);
 		pthread_t runserver(void);
 		void addStorage(std::string display, std::string path, int mtpid);
 	private:
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index 59451e3..a8b61c3 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -2171,7 +2171,10 @@
 	TWFunc::write_file("/sys/class/android_usb/android0/idProduct", productstr);
 	property_set("sys.usb.config", "mtp,adb");
 	std::vector<TWPartition*>::iterator iter;
-	twrpMtp *mtp = new twrpMtp();
+	/* To enable MTP debug, use the twrp command line feature to
+	 * twrp set tw_mtp_debug 1
+	 */
+	twrpMtp *mtp = new twrpMtp(DataManager::GetIntValue("tw_mtp_debug"));
 	for (iter = Partitions.begin(); iter != Partitions.end(); iter++) {
 		if ((*iter)->Is_Storage && (*iter)->Is_Present && (*iter)->Mount(false)) {
 			printf("twrp mtpid: %d\n", (*iter)->mtpid);