Linus Walleij | e8c5464 | 2006-03-28 09:45:00 +0000 | [diff] [blame] | 1 | TODO file: |
| 2 | ---------- |
| 3 | |
Linus Walleij | 7f2c3e3 | 2007-08-04 18:11:38 +0000 | [diff] [blame] | 4 | COMPATIBILITY fixes: |
| 5 | |
| 6 | 1. COMPATIBILITY: dual-mode devices, i.e. devices exposing both an MTP |
| 7 | and a USB Mass Storage Device Class (flashdrive) interface are and |
| 8 | have always been problematic. We must find a way to get this to work, |
| 9 | eventually. The problem is that the in-kernel mass storage driver hogs |
| 10 | the device before the MTP mode gets a chance of being used, whereas |
| 11 | the Windows kernel driver apparently does it the other way around, |
| 12 | trying the MTP mode first and then not fall back on mass storage if |
| 13 | MTP is available. (For some more explanations se src/libusb-glue.h.) |
Linus Walleij | e80d6bd | 2008-06-23 23:11:42 +0000 | [diff] [blame] | 14 | This may involve kernel modifications. Perhaps it is only necessary |
| 15 | to tweak the udev config not to load USB mass storage support for |
| 16 | these devices. Dunno. |
Linus Walleij | 7f2c3e3 | 2007-08-04 18:11:38 +0000 | [diff] [blame] | 17 | |
| 18 | 2. COMPATIBILITY: several devices tend to "hang" after disconnect, |
| 19 | needing to be unplugged and replugged before they can be used again. |
| 20 | We don't know why, it may be related to low-level USB behaviour that |
Linus Walleij | 849dccc | 2007-10-22 08:53:35 +0000 | [diff] [blame] | 21 | is not exposed in the logs we read. On some devices it appear that |
| 22 | avoiding to release the USB interface after closing the PTP/MTP |
| 23 | session solves this, and might be a hint at how the Windows MTP stack |
| 24 | works: perhaps the Windows MTP daemon grabs the interface once the |
Linus Walleij | e80d6bd | 2008-06-23 23:11:42 +0000 | [diff] [blame] | 25 | device is plugged in, created a session and NEVER release it. |
| 26 | Thus only unplug or shutdown ends the session. This behaviour can be |
| 27 | emulated (sort of) by DEVICE_FLAG_NO_RELEASE_INTERFACE which will |
| 28 | make the device not release the USB low-level interface, though it'll |
| 29 | still close the session. But is it really desireable to have |
Linus Walleij | 849dccc | 2007-10-22 08:53:35 +0000 | [diff] [blame] | 30 | as default? Not unless we run an MTP daemon as well, probably, and |
| 31 | the behaviour is questionable from an USB interoperability point |
| 32 | of view. |
Linus Walleij | 0558ac5 | 2006-09-07 06:55:03 +0000 | [diff] [blame] | 33 | |
Linus Walleij | 8a0a0db | 2007-08-16 07:34:16 +0000 | [diff] [blame] | 34 | |
Linus Walleij | d5ad885 | 2006-11-30 23:17:31 +0000 | [diff] [blame] | 35 | SPEEDUP fixes: |
Linus Walleij | c374349 | 2006-09-04 17:37:19 +0000 | [diff] [blame] | 36 | |
Linus Walleij | 7e3b307 | 2009-01-19 22:51:17 +0000 | [diff] [blame] | 37 | None known. libmtp is fast :-) |
Linus Walleij | 849dccc | 2007-10-22 08:53:35 +0000 | [diff] [blame] | 38 | |
Linus Walleij | c374349 | 2006-09-04 17:37:19 +0000 | [diff] [blame] | 39 | |
Linus Walleij | d5ad885 | 2006-11-30 23:17:31 +0000 | [diff] [blame] | 40 | FEATURE fixes: |
| 41 | |
Linus Walleij | 849dccc | 2007-10-22 08:53:35 +0000 | [diff] [blame] | 42 | 1. FEATURE: Support playback and volume setting on devices that have it. |
Linus Walleij | ee73ef2 | 2006-08-27 19:56:00 +0000 | [diff] [blame] | 43 | (I don't have one that does - Linus.) |
Linus Walleij | cf223e6 | 2006-06-19 09:31:53 +0000 | [diff] [blame] | 44 | |
Linus Walleij | 849dccc | 2007-10-22 08:53:35 +0000 | [diff] [blame] | 45 | 2. FEATURE: Support relevant events. MTP devices seen in existance provide |
Linus Walleij | d5ad885 | 2006-11-30 23:17:31 +0000 | [diff] [blame] | 46 | events for "object added" and "object deleted". These should result in |
Linus Walleij | e80d6bd | 2008-06-23 23:11:42 +0000 | [diff] [blame] | 47 | atleast a call to the cache update function. |
Linus Walleij | a29ed2a | 2007-02-25 22:01:37 +0000 | [diff] [blame] | 48 | |
Linus Walleij | e80d6bd | 2008-06-23 23:11:42 +0000 | [diff] [blame] | 49 | 3. FEATURE: Mechanism to retrieve the device icon device property, else if not |
Linus Walleij | e1d774b | 2010-11-30 23:49:36 +0000 | [diff] [blame] | 50 | present, look for DevIcon.fil (Windows ICO format) and |
Linus Walleij | 7f2c3e3 | 2007-08-04 18:11:38 +0000 | [diff] [blame] | 51 | DevLogo.fil (PNG Format) images from the device (if available). |
| 52 | |
Linus Walleij | e80d6bd | 2008-06-23 23:11:42 +0000 | [diff] [blame] | 53 | 4. FEATURE: Shared device access so that multiple client applications can have |
Linus Walleij | 7f2c3e3 | 2007-08-04 18:11:38 +0000 | [diff] [blame] | 54 | an open connection to the device at the same time via a handle. For example, |
Linus Walleij | e1d774b | 2010-11-30 23:49:36 +0000 | [diff] [blame] | 55 | it should be somehow possible to run mtp-detect at the same time as amarok or |
Linus Walleij | 7f2c3e3 | 2007-08-04 18:11:38 +0000 | [diff] [blame] | 56 | mtpfs is connected to a device. This would require some form of resource |
| 57 | sharing. |
Linus Walleij | a29ed2a | 2007-02-25 22:01:37 +0000 | [diff] [blame] | 58 | |
Linus Walleij | e80d6bd | 2008-06-23 23:11:42 +0000 | [diff] [blame] | 59 | 5. FEATURE: Implement an OpenSync backend for devices which have |
Linus Walleij | d78694d | 2007-11-05 11:51:03 +0000 | [diff] [blame] | 60 | calendaring, contact etc support. http://opensync.org/ |
| 61 | |
Linus Walleij | e1d774b | 2010-11-30 23:49:36 +0000 | [diff] [blame] | 62 | 6. FEATURE: program to autoprobe device interfaces on connection. |
Linus Walleij | 971914e | 2007-04-20 08:15:22 +0000 | [diff] [blame] | 63 | |
Linus Walleij | a29ed2a | 2007-02-25 22:01:37 +0000 | [diff] [blame] | 64 | THOSE ARE ALREADY DONE: |
| 65 | |
| 66 | 1. FEATURE: Make an API that can return several devices and let the user |
| 67 | choose which one to operate, not just connect to the first one... |
Linus Walleij | f0bf437 | 2007-07-01 21:47:38 +0000 | [diff] [blame] | 68 | |
| 69 | 2. SPEED: Cache the object info for all items on the device. |
| 70 | Right now, ptp_getobjectinfo() is called repeatedly on the same |
| 71 | objects during startup, track listing, file listing, playlist listing, |
| 72 | album listing and whatever we implement tomorrow. A lot of useless |
| 73 | communication can be saved by cacheing this info. Notice that this |
| 74 | needs to be updated whenever flush_handles() is called too. |
| 75 | (This came from libgphoto2 implementing it!) |
Linus Walleij | 338ade4 | 2007-07-03 20:44:08 +0000 | [diff] [blame] | 76 | |
| 77 | 3. SPEED: Cache track metadata, file metadata etc in params->proplist. |
| 78 | |
tsaarni | a3eb60a | 2007-07-06 17:41:30 +0000 | [diff] [blame] | 79 | 4. SPEED: Whenever we add an object (file, track, playlist...) we |
| 80 | should only need to update the cache with relevant data. Atleast for |
| 81 | speedup caches. |
Linus Walleij | 849dccc | 2007-10-22 08:53:35 +0000 | [diff] [blame] | 82 | |
| 83 | 5. COMPATIBILITY: account for different step sizes and intervals on some |
| 84 | numeric properties we set, make the functions round off when possible. |
| 85 | |
| 86 | 6. SPEED: Cache the supported object properties at first read/startup. |
| 87 | then use the cache to check for supported props instead of calling |
| 88 | out to PTP with ptp_mtp_getobjectpropssupported() every time. |
| 89 | The cache would be an array of size params->deviceinfo.ImageFormats_len |
| 90 | with a list for each format of the properties it will support. Notice |
| 91 | that this needs to be updated whenever flush_handles() is called too. |
| 92 | THIS HAS BEEN DISCARDED, TERO IMPLEMENTED IT BUT IT DOESN'T SEEM TO |
| 93 | YIELD MUCH. |
| 94 | |
| 95 | 7. FEATURE: Make abstract playlists really become size -1 when created as |
| 96 | the ones created on the device instead of the current 1 byte size. |
| 97 | (Is this possible using enhanced commands? See TODO remarks in |
| 98 | the create_abstract_entity() function) |
| 99 | |
| 100 | 8. FEATURE: Integrate libmtp with HAL / D-Bus so applications can dynamically |
| 101 | know when a device has been plugged in or removed. Need a mechanism to |
| 102 | connect a specific hal UDI. |
Linus Walleij | 7e3b307 | 2009-01-19 22:51:17 +0000 | [diff] [blame] | 103 | |
| 104 | 9. SPEEDUP: The recursive function that builds the folder tree is |
| 105 | O(n^2)! Atleast remove all non-folders (PTP associations) from the |
| 106 | list before we start sorting and building that tree. We walk the |
| 107 | entire list for each group of siblings right now! |