| Commit message (Collapse) | Author | Files | Lines |
|
This update splits old MTP code and new MTP code from Google
into two trees, legacy and ffs. Depending on the SDK level,
the build system will select the correct version. The reason
for separating the versions out are due to older android trees
not supporting the updated MTP code from Google.
Most MTP code is from Google, with additions needed from
implementing the Java functions in C++ for TWRP and FFS.
We assume if you are in android-9.0 or above, your kernel
has support for FFS over MTP. Verify that your init.rc
is mounting the MTP FFS driver to the proper location.
Change-Id: I4b107b239bd9bc5699527f9c8c77d9079f264a7e
|
|
Building in 9.0 may require you to add a flag to your twrp fstab
with the fileencryption details like:
fileencryption=ice:aes-256-heh
Verify this against your device's stock fstab of course.
Change-Id: If9286f5d5787280814daca9fbc8f5191ff26a839
|
|
Auto detect and support both the v1 and v2 fstab formats
Support putting TWRP style flags in a separate /etc/twrp.flags file
twrp.flags format is the same as twrp.fstab (v1 with TWRP flags)
Support using a wildcard in a block device and find all partitions:
/usb-otg vfat /dev/block/sda*
Support using sysfs entries (voldmanaged) and read uevents and scan for
wildcard partitions from uevent data. (twvold?)
May not be complete for some of the newer flags found in fstabs in newer
build trees and there is a slim chance of a crash if the user removes a
removable device while TWRP is performing actions. May need to add some
kind of mutex to prevent the 2 threads from causing this crash. We need
to start somewhere though and this change is pretty innocuous when not
using a v2 fstab.
Change-Id: I617d97c7db332cbe671a9d2b8ad98b3d9c4f03cc
|
|
Change-Id: I8c8a9734adbf36c33463123844fa6e078934ae34
|
|
Change-Id: I8cf8b32d5a98ac2470386cbaf70cfc87f44e94f6
|
|
Change-Id: I7f807a2f140068181524d8e868d029b4d94c70e8
|
|
Change-Id: I6376920775ddabb4d4af505fffd86e404403a64a
|
|
Change-Id: I5deef665ab374491c0f498b498971abd525d1111
|
|
-Detects, decrypts, and mounts an adopted SD card if a
secondary block device is defined (usually mmcblk1)
-Handles unified storage
-Displays the adopted storage in MTP along with internal
-Factory Reset - wiped just like a data media device, we
retain the keys folder and the storage.xml during a
factory reset
-Backup / Restore
-Disable mass storage when adopted storage is present
-Read storage nickname from storage.xml and apply it to
display names in the GUI
-Read storage.xml and determine what storage location is in
use for /sdcard and remap accordingly
libgpt_twrp is source code mostly kanged from an efimanager
project. It is GPL v2 or higher, so we will opt for GPL v3.
Change-Id: Ieda0030bec5155ba8d2b9167dc0016cebbf39d55
|
|
Change-Id: I8344d270ddb601694b5fef0fa7b22ea437030728
|
|
* Move default value of debug_enabled to declaration
* Set more-correct fake values for MtpProperty sets
Change-Id: Ife3c15ac6c908848c16a609e8e505336e53c19d8
|
|
Change-Id: I571e906173c9e70de97e3cfefd10da5137dba4d4
|
|
Change-Id: I60ce40bd08e2ce9b04beb5dc4876b86f3688861b
|
|
Set up a loop to keep trying to open / read the MTP device so that
MTP will work even if the device is unplugged during boot or
unplugged and replugged in.
Change-Id: I0d3a3b7c91ce84a8cbed16caa4b15efee35b3641
|
|
Change-Id: I3450fd2334a441c3d9d40a856128a3cc932cb7f3
|
|
Change-Id: Iaa91eaac8269f02783c904d890641861ec747d11
|
|
Some devices are very slow to respond to the sysfs requests. To
prevent delaying the main GUI from booting during TWRP startup, we
move the sleep delay to just before we open the MTP device and
into the MTP thread so that it does not hold up the main TWRP
thread.
Change-Id: Ic931ef317d0fb7ef4dfdef46a32f68a014ff62c0
|
|
Attempting to add a storage ID of 0 was causing a seg fault.
Change-Id: If8797186405be36ee70dbca63bd1063a62ba2812
|
|
Unless MTP debug logging is enabled, you will miss the error and
will not know that something went wrong in the log.
Change-Id: I51f4758b415eb38e808ec8b1c9788b505bf88c65
|
|
Change-Id: Iac7852a4fb2add5744d5ea424d6ad5a82828f102
|
|
Implement a pipe between TWRP and MTP to allow TWRP to tell MTP
to remove storage partitions as they become unavailable (e.g.
during a wipe, unmount, etc) instead of disabling MTP completely.
This includes some fixes and improvements in destructors to
properly remove / delete various items. This also means that we
will not be toggling adb off and on quite as often.
I do not like that we had to add another thread, but we were
unable to use select() on the mtp_usb character device because
this device does not support polling. Select always returned
indicating that the mtp file descriptor was ready to be read and
the resulting read would block. The read block prevented us from
being able to include reading of the pipe between TWRP and MTP in
the main MTP thread.
We might want to add a return pipe letting TWRP know if the
removal of the storage device was successful, but I am not sure
how we want to implement this. It would invovle timeouts in both
TWRP and MTP to ensure that we returned a failure indicator in a
timely manner to TWRP and prevent deleting the storage device in
the case of a failure. Right now we make no attempt to ensure that
an MTP operation is underway like a large file transfer, but we
were not doing anything like this in the past. In some respects we
have limited control over what happens. If the user installs a
zip that unmounts a storage partition, we will not know about the
change in storage status anyway. Regular Android does not have
these troubles because partitions rarely get unmounted like in
recovery. At some point, we have to hold the user accountable for
performing actions that may remove a storage partition while they
are using MTP anyway.
Ideally we do not want to toggle the USB IDs and thus toggle adb
off and on during early boot, but I am not sure what the best way
to handle that at this time.
Change-Id: I9343e5396bf6023d3b994de1bf01ed91d129bc14
|
|
Files and folders that we create during backups, copy log, or MTP
operations often do not have the proper uid/gid/contexts assigned.
We will attempt to read the proper contexts from the settings
storage path and assign those same contexts to any files or dirs
that we create.
Change-Id: I769f9479854122b49b499de2175e6e2d026f8afd
|
|
Change-Id: If8114b5eac741db6c512fb35cb48e3825c2ff098
|
|
Originally the inotify_init() call was part of a separate thread
which would occasionally allow the readDirs function to run and
start trying to add watches before inotify_fd was init'ed properly
and result in the add watch failing. This patch set relocates the
inotify_init call to happen outside and before starting the
separate thread to ensure that inotify_fd is set properly.
Change-Id: I8748c23473b60b57887df9d692834f3d2b249802
|
|
Change-Id: Ic9509b0dc7f71ae64f64cc891868a2543eee4321
|
|
The requested file might be on another storage.
Change-Id: Ia71525058b616a28a8ea2b4ab48ebac1c790757e
|
|
- use std::map instead of linked list
- read directories on demand
- fix writing zip files to storage root
- fix creating directories
- lots of minor fixes
- simplify generation of storage IDs and make them spec compliant
Change-Id: I2137c27549ddbdc58466f2e3aeda464fac70a3c5
|
|
Change-Id: I828bc473a263868bd82b042c4009701d09a77a1f
|
|
Change-Id: I570bb1c1387ec16fb062d7844af12b24c74e3755
|
|
Change-Id: Iacd8a38d21e9c8b0dfafefbeb646f46cd3ba02a1
|
|
Change-Id: Ic19ec61dc6cb08df00eb1326d96262b46bb93bfb
|
|
Still doesn't fix the bug of copying zip files to the root of
storage in Windows.
Change-Id: Iddec66a49c17cf48cbd1c67ad6679349ece8e05c
|
|
Change-Id: I0a66a69b68d975389302ae4361c9c106eb722538
|
|
Change-Id: I95cf6f4def0c86f40c775738f0712323f0a0f146
|
|
Do some error checking of lstat calls and better handle those
errors.
Use lstat instead of dirent to check if an item is a directory
because dirent does not return the correct item type when using
exfat-fuse.
Change-Id: I0d008aff55a0e0b4fbeae24cf8d0c04453b7b77e
|
|
Change-Id: Ieef2fc16aac1da3d03908cfb285895954b42a14a
|
|
Change-Id: Ice23fef31439a6c88d0a12380688eccd8dc3a71c
|
|
Change-Id: Ie1388a8acadf714a29721dd90c7f9a8aa38a860d
|
|
Change-Id: I02f1984d02a85d9fd42450cc3772e88a43d9e9ff
|
|
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
|
|
Change-Id: I9395481dd8d9cbd3346fe6682557236b48b4d6cd
|
|
Big thanks to Dees_Troy for helping with the implementation.
Change-Id: I6c9c522b9c9de5dc139e2ecb0141008182ba07f0
|