From e07f010963b247e21da3f1c0cfe023be2e1219fd Mon Sep 17 00:00:00 2001 From: Matt Mower Date: Thu, 23 Feb 2017 17:40:00 -0600 Subject: Fix handling of USB config during MTP switching The property set of sys.usb.config was not part of the original 'Only change USB mode to mtp when ready for MTP' commit. Further, it adds an additional USB off/on toggle to the MTP startup routine, potentially confusing the host computer. The default init.recovery.usb.rc already sets the usb functions to 'adb' during 'on fs'. It is possible that devices could run into issues with MTP startup due to sys.usb.config not yet being set. This is actually due to a poor design decision in Enable_MTP(), where sys.usb.config would not be configured for mtp if sys.usb.config had never been set. It is not necessary to check for a previous value, just set it. Fix the USB PID for adb-only mode in Disable_MTP(). Change-Id: I21b5e64c9bdcd3104372a8b4eb8ea50cf4561892 --- partitionmanager.cpp | 8 ++++---- twrp.cpp | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/partitionmanager.cpp b/partitionmanager.cpp index bc4d8e136..ea8693f52 100644 --- a/partitionmanager.cpp +++ b/partitionmanager.cpp @@ -2092,8 +2092,8 @@ bool TWPartitionManager::Enable_MTP(void) { } 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) { + property_get("sys.usb.config", old_value, ""); + if (strcmp(old_value, "mtp,adb") != 0) { char vendor[PROPERTY_VALUE_MAX]; char product[PROPERTY_VALUE_MAX]; property_set("sys.usb.config", "none"); @@ -2147,13 +2147,13 @@ void TWPartitionManager::Add_All_MTP_Storage(void) { bool TWPartitionManager::Disable_MTP(void) { char old_value[PROPERTY_VALUE_MAX]; - property_get("sys.usb.config", old_value, "error"); + property_get("sys.usb.config", old_value, ""); 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"); + property_get("usb.product.adb", product, "D001"); string vendorstr = vendor; string productstr = product; TWFunc::write_file("/sys/class/android_usb/android0/idVendor", vendorstr); diff --git a/twrp.cpp b/twrp.cpp index 3d0a375a3..9ea6ba62e 100644 --- a/twrp.cpp +++ b/twrp.cpp @@ -308,7 +308,6 @@ 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"); - property_set("sys.usb.config", "adb"); // At first boot, should be adb-only 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()) -- cgit v1.2.3