From df7abac1a645949ded76418759236bc3b14f107e Mon Sep 17 00:00:00 2001 From: Ethan Yonker Date: Mon, 29 Dec 2014 10:48:17 -0600 Subject: Do not toggle USB ID during MTP startup if not needed In most cases MTP is enabled so it is better to start our init.rc with MTP enabled and try not to toggle USB IDs during TWRP boot so that we can keep adb running to make debugging easier. Change-Id: Idf122c5ad4deeef7e1ed775d495989c502ddfb19 --- etc/init.rc | 6 +++--- partitionmanager.cpp | 55 +++++++++++++++++++++++++++++----------------------- twrp.cpp | 15 ++++++-------- 3 files changed, 40 insertions(+), 36 deletions(-) diff --git a/etc/init.rc b/etc/init.rc index 8a12b7cfd..e8106f391 100644 --- a/etc/init.rc +++ b/etc/init.rc @@ -42,9 +42,9 @@ on fs write /sys/class/android_usb/android0/enable 0 write /sys/class/android_usb/android0/idVendor 18D1 - write /sys/class/android_usb/android0/idProduct D002 + write /sys/class/android_usb/android0/idProduct 4EE2 write /sys/class/android_usb/android0/f_ffs/aliases adb - write /sys/class/android_usb/android0/functions adb + write /sys/class/android_usb/android0/functions mtp,adb write /sys/class/android_usb/android0/iManufacturer ${ro.product.manufacturer} write /sys/class/android_usb/android0/iProduct ${ro.product.model} write /sys/class/android_usb/android0/iSerial ${ro.serialno} @@ -86,7 +86,7 @@ on property:sys.storage.ums_enabled=1 on property:sys.storage.ums_enabled=0 write /sys/class/android_usb/android0/enable 0 - write /sys/class/android_usb/android0/functions adb + write /sys/class/android_usb/android0/functions ${sys.usb.config} write /sys/class/android_usb/android0/enable ${service.adb.root} on property:sys.usb.config=none diff --git a/partitionmanager.cpp b/partitionmanager.cpp index ea61d57d7..5d0fb018e 100644 --- a/partitionmanager.cpp +++ b/partitionmanager.cpp @@ -1903,8 +1903,6 @@ bool TWPartitionManager::Enable_MTP(void) { } //Launch MTP Responder LOGINFO("Starting MTP\n"); - char vendor[PROPERTY_VALUE_MAX]; - char product[PROPERTY_VALUE_MAX]; int count = 0; int mtppipe[2]; @@ -1914,14 +1912,20 @@ bool TWPartitionManager::Enable_MTP(void) { return false; } - property_set("sys.usb.config", "none"); - property_get("usb.vendor", vendor, "18D1"); - property_get("usb.product.mtpadb", product, "4EE2"); - string vendorstr = vendor; - string productstr = product; - TWFunc::write_file("/sys/class/android_usb/android0/idVendor", vendorstr); - TWFunc::write_file("/sys/class/android_usb/android0/idProduct", productstr); - property_set("sys.usb.config", "mtp,adb"); + char old_value[PROPERTY_VALUE_MAX]; + property_get("sys.usb.config", old_value, "error"); + if (strcmp(old_value, "error") != 0 && strcmp(old_value, "mtp,adb") != 0) { + char vendor[PROPERTY_VALUE_MAX]; + char product[PROPERTY_VALUE_MAX]; + property_set("sys.usb.config", "none"); + property_get("usb.vendor", vendor, "18D1"); + property_get("usb.product.mtpadb", product, "4EE2"); + string vendorstr = vendor; + string productstr = product; + TWFunc::write_file("/sys/class/android_usb/android0/idVendor", vendorstr); + TWFunc::write_file("/sys/class/android_usb/android0/idProduct", productstr); + property_set("sys.usb.config", "mtp,adb"); + } std::vector::iterator iter; /* To enable MTP debug, use the twrp command line feature to * twrp set tw_mtp_debug 1 @@ -1960,17 +1964,21 @@ bool TWPartitionManager::Enable_MTP(void) { } bool TWPartitionManager::Disable_MTP(void) { + char old_value[PROPERTY_VALUE_MAX]; + property_get("sys.usb.config", old_value, "error"); + if (strcmp(old_value, "adb") != 0) { + char vendor[PROPERTY_VALUE_MAX]; + char product[PROPERTY_VALUE_MAX]; + property_set("sys.usb.config", "none"); + property_get("usb.vendor", vendor, "18D1"); + property_get("usb.product.adb", product, "D002"); + string vendorstr = vendor; + string productstr = product; + TWFunc::write_file("/sys/class/android_usb/android0/idVendor", vendorstr); + TWFunc::write_file("/sys/class/android_usb/android0/idProduct", productstr); + usleep(2000); + } #ifdef TW_HAS_MTP - char vendor[PROPERTY_VALUE_MAX]; - char product[PROPERTY_VALUE_MAX]; - property_set("sys.usb.config", "none"); - property_get("usb.vendor", vendor, "18D1"); - property_get("usb.product.adb", product, "D002"); - string vendorstr = vendor; - string productstr = product; - TWFunc::write_file("/sys/class/android_usb/android0/idVendor", vendorstr); - TWFunc::write_file("/sys/class/android_usb/android0/idProduct", productstr); - usleep(2000); if (mtppid) { LOGINFO("Disabling MTP\n"); int status; @@ -1981,14 +1989,13 @@ bool TWPartitionManager::Disable_MTP(void) { close(mtp_write_fd); mtp_write_fd = -1; } +#endif property_set("sys.usb.config", "adb"); +#ifdef TW_HAS_MTP DataManager::SetValue("tw_mtp_enabled", 0); return true; -#else - LOGERR("MTP support not included\n"); - DataManager::SetValue("tw_mtp_enabled", 0); - return false; #endif + return false; } TWPartition* TWPartitionManager::Find_Partition_By_MTP_Storage_ID(unsigned int Storage_ID) { diff --git a/twrp.cpp b/twrp.cpp index 53aab7f66..e0b335975 100644 --- a/twrp.cpp +++ b/twrp.cpp @@ -311,26 +311,23 @@ int main(int argc, char **argv) { property_get("mtp.crash_check", mtp_crash_check, "0"); if (strcmp(mtp_crash_check, "0") == 0) { property_set("mtp.crash_check", "1"); - if (DataManager::GetIntValue(TW_IS_ENCRYPTED) != 0) { - if (DataManager::GetIntValue(TW_IS_DECRYPTED) != 0 && DataManager::GetIntValue("tw_mtp_enabled") == 1) { - LOGINFO("Enabling MTP during startup\n"); - if (!PartitionManager.Enable_MTP()) - PartitionManager.Disable_MTP(); - else - gui_print("MTP Enabled\n"); - } - } else if (DataManager::GetIntValue("tw_mtp_enabled") == 1) { + if (DataManager::GetIntValue("tw_mtp_enabled") == 1 && ((DataManager::GetIntValue(TW_IS_ENCRYPTED) != 0 && DataManager::GetIntValue(TW_IS_DECRYPTED) != 0) || DataManager::GetIntValue(TW_IS_ENCRYPTED) == 0)) { LOGINFO("Enabling MTP during startup\n"); if (!PartitionManager.Enable_MTP()) PartitionManager.Disable_MTP(); else gui_print("MTP Enabled\n"); + } else { + PartitionManager.Disable_MTP(); } property_set("mtp.crash_check", "0"); } else { gui_print_color("warning", "MTP Crashed, not starting MTP on boot.\n"); DataManager::SetValue("tw_mtp_enabled", 0); + PartitionManager.Disable_MTP(); } +#else + PartitionManager.Disable_MTP(); #endif // Launch the main GUI -- cgit v1.2.3