| OLD | NEW |
| 1 Building and Installing | 1 Building and Installing |
| 2 ----------------------- | 2 ----------------------- |
| 3 | 3 |
| 4 See the "INSTALL" file. | 4 See the "INSTALL" file. |
| 5 | 5 |
| 6 | 6 |
| 7 Initiator and Responder | 7 Initiator and Responder |
| 8 ----------------------- | 8 ----------------------- |
| 9 | 9 |
| 10 libmtp implements an MTP initiator, which means it initiate | 10 libmtp implements an MTP initiator, which means it initiate |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 as soon as it's plugged in. Some distributions are configured that | 146 as soon as it's plugged in. Some distributions are configured that |
| 147 way. Counter it like this: | 147 way. Counter it like this: |
| 148 | 148 |
| 149 gvfs-mount -s gphoto2 | 149 gvfs-mount -s gphoto2 |
| 150 | 150 |
| 151 Then re-attach the device. | 151 Then re-attach the device. |
| 152 | 152 |
| 153 Sometimes the "gvfs-gphoto2-volume-monitor" is running on the | 153 Sometimes the "gvfs-gphoto2-volume-monitor" is running on the |
| 154 system and hogging the device, try something like: | 154 system and hogging the device, try something like: |
| 155 | 155 |
| 156 pkill gfvs-gphoto2-volume-monitor && mtp-detect | 156 pkill gfvs-gphoto2-volume-monitor |
| 157 | 157 |
| 158 to figure out if this may be the case. | 158 Then plug in the device and issue "mtp-detect" to figure out if |
| 159 this may be the case. |
| 159 | 160 |
| 160 * Generic MTP/PTP disconnect misbehaviour: we have noticed that | 161 * Generic MTP/PTP disconnect misbehaviour: we have noticed that |
| 161 Windows Media Player apparently never close the session to an MTP | 162 Windows Media Player apparently never close the session to an MTP |
| 162 device. There is a daemon in Windows that "hooks" the device | 163 device. There is a daemon in Windows that "hooks" the device |
| 163 by opening a PTP session to any MTP device, whenever it is | 164 by opening a PTP session to any MTP device, whenever it is |
| 164 plugged in. This daemon proxies any subsequent transactions | 165 plugged in. This daemon proxies any subsequent transactions |
| 165 to/from the device and will never close the session, thus | 166 to/from the device and will never close the session, thus |
| 166 Windows simply does not close sessions at all. | 167 Windows simply does not close sessions at all. |
| 167 | 168 |
| 168 For example this means that a device may work the first time | 169 For example this means that a device may work the first time |
| (...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 753 ------------------------------------ | 754 ------------------------------------ |
| 754 | 755 |
| 755 PTP/MTP devices does not actually contain "files", they contain | 756 PTP/MTP devices does not actually contain "files", they contain |
| 756 objects. These objects have file names, but that is actually | 757 objects. These objects have file names, but that is actually |
| 757 just a name tag on the object. | 758 just a name tag on the object. |
| 758 | 759 |
| 759 Folders/directories aren't really such entities: they are just | 760 Folders/directories aren't really such entities: they are just |
| 760 objects too, albeit objects that can act as parent to other | 761 objects too, albeit objects that can act as parent to other |
| 761 objects. They are called "associations" and are created in atomic | 762 objects. They are called "associations" and are created in atomic |
| 762 fashion and even though there is an MTP command to get all the | 763 fashion and even though there is an MTP command to get all the |
| 763 associations of a certain association, this command is optional | 764 associations of a certain object, this command is optional |
| 764 so it is perfectly possible (and most common, actually) to create | 765 so it is perfectly possible (and most common, actually) to create |
| 765 devices where the "folders" (which are actually associations) have | 766 devices where the "folders" (which are actually associations) have |
| 766 no idea whatsoever of what files they are associated as parents to | 767 no idea whatsoever of what files they are associated as parents to |
| 767 (i.e. which files they contain). This is very easy for device | 768 (i.e. which files they contain). This is very easy for device |
| 768 manufacturers to implement, all the association (i.e. finding out | 769 manufacturers to implement, all the association (i.e. finding out |
| 769 which files are in a certain folder) has to be done by the MTP | 770 which files are in a certain folder) has to be done by the MTP |
| 770 Initiator / host computer. | 771 Initiator / host computer. |
| 771 | 772 |
| 772 Moving a file to a new folder is for example very simple in a | 773 Moving a file to a new folder is for example very simple in a |
| 773 "real" file system. In PTP/MTP devices it is often not even possible, | 774 "real" file system. In PTP/MTP devices it is often not even possible, |
| 774 some devices *may* be able to do that. But actually the only | 775 some devices *may* be able to do that, if they support command |
| 775 reliable way of doing that is to upload the file to the host, | 776 0x1019 "Move Object", but actually the only reliable way of executing |
| 776 download it with the new parent, then delete the old file. | 777 file movement is to upload the file to the host, download it with |
| 777 We have played with the idea of implementing this time consuming | 778 the new parent, then delete the old file. We have played with the |
| 778 function, perhaps we will. | 779 idea of implementing this time consuming function as a fallback |
| 780 in case the device does not support command 0x1019, perhaps one day |
| 781 we will do that. (Some devices also support command 0x101a |
| 782 "Copy Object".) |
| 779 | 783 |
| 780 Then the issue that in PTP/MTP it is legal for two files to have | 784 Then the issue that in PTP/MTP it is legal for two files to have |
| 781 exactly the same path as long as their object IDs differ. A | 785 exactly the same path as long as their object IDs differ. A |
| 782 folder/association can contain two files with the exact same name. | 786 folder/association can contain two files with the exact same name. |
| 783 (And on the Creative devices this even works, too, though most devices | 787 (And on the Creative devices this even works, too, though most devices |
| 784 implicitly fail at this.) Perhaps one could add some custom hook for | 788 implicitly fail at this.) Perhaps one could add some custom hook for |
| 785 handling that, so they become /Foo.mp3 and /Foo.mp3(1) or something | 789 handling that, so they become /Foo.mp3 and /Foo.mp3(1) or something |
| 786 similar, but it's really a bit kludgy. | 790 similar, but it's really a bit kludgy. |
| 787 | 791 |
| 788 Playlists and albums aren't really files, thinking about | 792 Playlists and albums aren't really files, thinking about |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 986 G_CALLBACK(uevent_cb), | 990 G_CALLBACK(uevent_cb), |
| 987 NULL, 0); | 991 NULL, 0); |
| 988 | 992 |
| 989 SKETCH OF AN OVERVIEW | 993 SKETCH OF AN OVERVIEW |
| 990 --------------------- | 994 --------------------- |
| 991 | 995 |
| 992 Draft agenda for a talk on MTP devices submitted for the Android | 996 Draft agenda for a talk on MTP devices submitted for the Android |
| 993 builders summit, might come to recycle this: | 997 builders summit, might come to recycle this: |
| 994 | 998 |
| 995 - Protocol overview | 999 - Protocol overview |
| 1000 - Transactional filesystem - no corruption due to unplugged cables! |
| 996 - libmtp interface | 1001 - libmtp interface |
| 997 - relation to libgphoto2 | 1002 - relation to libgphoto2 |
| 1003 - User expectations fall short: |
| 1004 - Not really a mountable filesystem. |
| 1005 - Streaming does not work. (Size needs to be known beforehand due to |
| 1006 transactional nature.) |
| 998 - Device sins | 1007 - Device sins |
| 999 - Android bugs | 1008 - Android bugs |
| 1000 - Samsungs special Android MTP stack | 1009 - Samsungs special Android MTP stack |
| 1001 - SonyEricsson Aricent stack for Xperia Androids pre 4.0, broken headers! | 1010 - SonyEricsson Aricent stack for Xperia Androids pre 4.0, broken headers! |
| 1011 - Flat access model vs hierarchical, how Android uses MTP as an hierachical |
| 1012 file system while it was previously a flat database. |
| 1002 - Detecting from vendor extension, can fix in newer extensions! | 1013 - Detecting from vendor extension, can fix in newer extensions! |
| 1003 - Autoprobing on Linux | 1014 - Autoprobing on Linux |
| 1004 - Color devices do not like autoprobing | 1015 - Color devices do not like autoprobing |
| 1016 - Devices need different PIDs for every alternative interface due to |
| 1017 the Windows USB stack. |
| 1018 - Multimode USB - one PID for each mode due to Windows limitations not |
| 1019 applicable to Linux, SONY devices have ~5 different PIDs for a single |
| 1020 device. |
| 1021 - Mode switch devices? |
| 1022 - MTPZ |
| 1005 - Ideas?? | 1023 - Ideas?? |
| 1006 - Mode switch devices? | 1024 |
| 1007 - MTPZ | |
| OLD | NEW |