1 Building and Installing 2 ----------------------- 3 4 See the "INSTALL" file. 5 6 7 Initiator and Responder 8 ----------------------- 9 10 libmtp implements an MTP initiator, which means it initiate 11 MTP sessions with devices. The devices responding are known 12 as MTP responders. libmtp runs on something with a USB host 13 controller interface, using libusb to access the host 14 controller. 15 16 If you're more interested in the MTP responders, gadgets like 17 MP3 players, mobile phones etc, look into: 18 - MeeGo:s Buteo Sync: 19 https://github.com/nemomobile/buteo-mtp 20 https://wiki.merproject.org/wiki/Buteo/MTP 21 - Android has an MTP responder implementation: 22 https://android.googlesource.com/platform/frameworks/base/+/master/media/jni/ 23 - Ubuntu/Ricardo Salveti has mtp-server and libmtp-server going: 24 https://code.launchpad.net/~phablet-team/mtp/trunk 25 http://bazaar.launchpad.net/~phablet-team/mtp/trunk/files 26 27 Heritage 28 -------- 29 30 libmtp is based on several ancestors: 31 32 * libptp2 by Mariusz Woloszyn was the starting point used 33 by Richard A. Low for the initial starter port. You can 34 find it at http://libptp.sourceforge.net/ 35 36 * libgphoto2 by Mariusz Woloszyn and Marcus Meissner was 37 used at a later stage since it was (is) more actively 38 maintained. libmtp tracks the PTP implementation in 39 libgphoto2 and considers it an upstream project. We will 40 try to submit anything generally useful back to libgphoto2 41 and not make double efforts. In practice this means we 42 use ptp.c, ptp.h and ptp-pack.c verbatim from the libgphoto2 43 source code. If you need to change things in these files, 44 make sure it is so general that libgphoto2 will want to 45 merge it to their codebase too. You find libgphoto2 as part 46 of gPhoto: http://gphoto.sourceforge.net/ 47 48 * libnjb was a project that Richard and Linus were working 49 on before libmtp. When Linus took Richards initial port 50 and made an generic C API he re-used the philosophy and 51 much code from libnjb. Many of the sample programs are for 52 example taken quite literally from libnjb. You find it here: 53 http://libnjb.sourceforge.net/ 54 55 56 Contacting and Contributing 57 --------------------------- 58 59 See the project page at http://libmtp.sourceforge.net/ 60 We always need your help. There is a mailinglist and a 61 bug report system there. 62 63 People who want to discuss MTP devices in fora seem to 64 hang out on the forums at AnythingbutiPod: 65 http://www.anythingbutipod.com/forum/ 66 67 68 Compiling programs for libmtp 69 ----------------------------- 70 71 libmtp has support for the pkg-config script by adding a libmtp.pc 72 entry in $(prefix)/lib/pkgconfig. To compile a libmtp program, 73 "just" write: 74 75 gcc -o foo `pkg-config --cflags --libs libmtp` foo.c 76 77 This also simplifies compilation using autoconf and pkg-config: just 78 write e.g. 79 80 PKG_CHECK_MODULES(MTP, libmtp) 81 AC_SUBST(MTP_CFLAGS) 82 AC_SUBST(MTP_LIBS) 83 84 To have libmtp LIBS and CFLAGS defined. Needless to say, this will 85 only work if you have pkgconfig installed on your system, but most 86 people have nowadays. 87 88 If your library is installed in e.g. /usr/local you may have to tell 89 this to pkgconfig by setting the PKG_CONFIG_PATH thus: 90 91 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig 92 93 94 Documentation 95 ------------- 96 97 Read the API documentation that can be generated with doxygen. 98 It will be output in doc/html if you have Doxygen properly 99 installed. (It will not be created unless you have Doxygen!) 100 101 For information about the Media Transfer Protocol, see: 102 http://en.wikipedia.org/wiki/Media_Transfer_Protocol 103 104 The official 1.0 specification for MTP was released by the 105 USB Implementers Forum in may, 2008. Prior to this, only a 106 proprietary Microsoft version was available, and quite a few 107 devices out there still use some aspects of the Microsoft 108 version, which deviates from the specified standard. You can 109 find the official specification here: 110 http://www.usb.org/developers/devclass_docs/MTP_1.0.zip 111 112 113 The Examples 114 ------------ 115 116 In the subdirectory "examples" you find a number of 117 command-line tools, illustrating the use of libmtp in very 118 simple terms. 119 120 Please do not complain about the usability or documentation 121 of these examples, they look like they do for two reasons: 122 123 1. They are examples, not tools. If they were intended for 124 day-to-day usage by commandline freaks, I would have 125 called them "tools" not "examples". 126 127 2. The MTP usage paradigm is that a daemon should hook 128 the device upon connection, and that it should be 129 released by unplugging. GUI tools utilizing HAL (hald) 130 and D-Bus do this much better than any commandline 131 program ever can. (See below on bugs.) Specificationwise 132 this is a bug, however it is present in many, many 133 devices. 134 135 That said, if you want to pick up and maintain the examples, 136 please volunteer. 137 138 139 FAQ: Common Problems 140 -------------------- 141 142 Some MTP devices have strange pecularities. We try to work around 143 these whenever we can, sometimes we cannot work around it or we 144 cannot test your solution. 145 146 * Android locked screen: some devices just report zero files 147 and no storages when the device screen is locked, it looks like 148 so: 149 150 mtp-detect 151 Device 0 (VID=04e8 and PID=6860) is a Samsung Galaxy models (MTP). 152 Attempting to connect device(s) 153 Error 1: Get Storage information failed. 154 Device: SHV-E210K 155 LIBMTP_Get_Storage(): No data available 156 OK. 157 158 This is probably so as not to allow the MTP access to be used 159 as a "backdoor" into the device. Unlock the device before listing 160 files, set the autolock to some large value or disabled if it 161 disturbs you, you are causing this to yourself, or should we say 162 that your vendor is prioritizing security and privacy over 163 ease-of-use. (You may talk to your vendor about this.) 164 165 * mtp-* tools doesn't work because someone else is already hogging 166 the device 167 168 This is a common problem, the most common case could be that 169 gphoto2 (which can also talk PTP/MTP) is taking over the device 170 as soon as it's plugged in. Some distributions are configured that 171 way. Counter it like this: 172 173 gvfs-mount -s gphoto2 174 175 Then re-attach the device. 176 177 Sometimes some gvfs daemons are running on the 178 system and hogging the device, try stopping them 179 with something like these commands: 180 181 killall gvfs-mtp-volume-monitor 182 killall gvfs-gphoto2-volume-monitor 183 184 Then plug in the device and issue "mtp-detect" to figure out if 185 this may be the case. 186 187 * Generic MTP/PTP disconnect misbehaviour: we have noticed that 188 Windows Media Player apparently never close the session to an MTP 189 device. There is a daemon in Windows that "hooks" the device 190 by opening a PTP session to any MTP device, whenever it is 191 plugged in. This daemon proxies any subsequent transactions 192 to/from the device and will never close the session, thus 193 Windows simply does not close sessions at all. 194 195 For example this means that a device may work the first time 196 you run some command-line example like "mtp-detect" while 197 subsequent runs fail. 198 199 Typical sign of this illness: broken pipes on closing sessions, 200 on the main transfer pipes(s) or the interrupt pipe: 201 202 Closing session 203 usb_clear_halt() on INTERRUPT endpoint: Broken pipe 204 OK. 205 206 This means that device manufacturers doesn't notice any problems 207 with devices that do not correctly handle closing PTP/MTP 208 sessions, since Windows never do it. The proper way of closing 209 a session in Windows is to unplug the device, simply put. 210 211 Since libmtp actually tries to close sessions, some devices 212 may fail since the close session functionality has never been 213 properly tested, and "it works with Windows" is sort of the 214 testing criteria at some companies. 215 216 You can get Windows-like behaviour on Linux by running a udev-aware 217 libmtp GUI client like Rhythmbox or Gnomad2, which will "hook" 218 the device when you plug it in, and "release" it if you unplug 219 it, and you start/end you transfer sessions by plugging/unplugging 220 the USB cable. 221 222 The "Unix way" of running small programs that open the device, 223 do something, then close the device, isn't really working with 224 such devices and you cannot expect to have command line tools 225 like the mtp examples work with them. You could implement new 226 example programs that just call to a mediating daemon like the 227 Windows MTP stack does. (And change all programs using libmtp 228 directly today.) 229 230 If this bug in your device annoys you, contact your device 231 manufacturer and ask them to test their product with some libmtp 232 program. 233 234 * Samsung Android 2.3.x devices: these have a special MTP stack 235 with some specific bugs that we have maybe nailed down now. 236 It suffers from an "immediate connect" syndrome, i.e. you have 237 to connect to the device within 7 seconds of plugging in, or it 238 will go numb. This also goes for command-line activity with 239 the example programs, so this device is better used with a 240 GUI tool like Rhythmbox, gnomad2... 241 242 * Generic USB misbehaviour: some devices behave badly under MTP 243 and USB mass storage alike, even down to the lowest layers 244 of USB. You can always discuss such issues at the linux-usb 245 mailing list if you're using Linux: 246 http://www.linux-usb.org/mailing.html 247 248 If you have a problem specific to USB mass storage mode, there 249 is a list of strange behaving devices in the Linux kernel: 250 http://lxr.linux.no/linux/drivers/usb/storage/unusual_devs.h 251 You can discuss this too on the mentioned list, for understanding 252 the quirks, see: 253 http://www2.one-eyed-alien.net/~mdharm/linux-usb/target_offenses.txt 254 255 * Generic certificate misbehaviour. All devices are actually 256 required to support a device certificate to be able to 257 encrypt Windows Media (WMA/WMV) files. However there are 258 obviously a lot of devices out there which doesn't support 259 this at all but instead crash. Typical printout: 260 261 Error 2: PTP Layer error 02ff: get_device_unicode_property(): failed 262 to get unicode property. 263 264 This should only affect "mtp-detect", there is no other 265 application currently retrieveing the certificate (not that we 266 know anyway). 267 268 * Kernel bug on Linux. Linux 2.6.16 is generally speaking required 269 to use any MTP device under USB 2.0. This is because the EHCI 270 driver previously did not support zero-length writes to endpoints. 271 It should work in most cases however, or if you connect it 272 to an UHCI/OHCI port instead (yielding lower speed). But 273 please just use a recent kernel. 274 275 * Zen models AVI file seeking problem: the Zens cannot parse the 276 files for the runlength metadata. Do not transfer file with e.g. 277 mtp-sendfile, use mtp-sendtr and set the length of the track to 278 the apropriate number of seconds and it will work. In graphical 279 clients, use a "track transfer" function to send these AVI files, 280 the Zens need the metadata associated with tracks to play back 281 movies properly. Movies are considered "tracks" in the MTP world. 282 283 * Some devices that disregard the metadata sent with the MTP 284 commands will parse the files for e.g. ID3 metadata. Some still 285 of these devices expect only ID3v2.3 metadata and will fail with 286 a modern ID3v2,4 tag writer, like many of those found in Linux 287 applications. Windows Media Player use ID3v2.3 only, so many 288 manufacturers only test this version. 289 290 * The Zen Vision:M (possibly more Creative Zens) has a firmware bug 291 that makes it drop the last two characters off a playlist name. 292 It is fixed in later firmware. 293 294 * For Creative Technology devices, there are hard limits on how 295 many files can be put onto the device. For a 30 GiB device (like 296 the Zen Xtra) the limit is 6000, for a 60 GiB device the limit 297 is 15000 files. For further Creative pecularities, see the 298 FAQ sections at www.nomadness.net. 299 300 * Sandisk sansa c150 and probably several other Sandisk devices 301 (and possibly devices from other manufacturers) have a dual 302 mode with MTP and USB mass storage. The device will initially 303 claim to be mass storage so udev will capture is and make the 304 use of MTP mode impossible. One way of avoiding it could be to 305 be to blacklist the "usb-storage" module in 306 /etc/modprobe.c/blacklist with a row like this: 307 "blacklist usb-storage". Some have even removed the 308 "usb-storage.ko" (kernel module file) to avoid loading. 309 310 * Sandisk Sansa Fuze has three modes: auto, MTP or mass storage 311 (MSC). Please set it to MTP to avoid problems with libmtp. 312 313 * The iriver devices (possibly all of them) cannot handle the 314 enhanced GetObjectPropList MTP command (0x9805) properly. So 315 they have been banned from using it. 316 317 * iriver devices have problems with older versions of libmtp and 318 with new devices libmtp does not know of as of yet, since it 319 has an oldstyle USB device controller that cannot handle zero 320 writes. (Register your device with us!) All their devices are 321 likely to need a special device flag in the src/libusb-glue.c 322 database. 323 324 * The Samsung Yepp T9 has several strange characteristics, some 325 that we've managed to work around. (For example it will return 326 multiple PTP packages in a single transaction.) 327 328 * The early firmware for Philips HDD players is known to be 329 problematic. Please upgrade to as new firmware as you can get. 330 (Yes this requires some kind of Windows Installation I think.) 331 332 * Philips HDD 1630/16 or 1630/17 etc may lock themselves up, 333 turning inresponsive due to internal corruption. This typically 334 gives an error in opening the PTP session. Apparently you can 335 do a "repair" with the firmware utility (Windows only) which 336 will often fix this problem and make the device responsive 337 again. 338 339 * Some devices that implement GetObjectPropList (0x9805) will 340 not return the entire object list if you request a list for object 341 0xffffffffu. (But they should.) So they may need the special 342 DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL. 343 344 * Some (smaller) subset of devices cannot even get all the 345 properties for a single object in one go, these need the 346 DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST. Currently only the 347 iriver devices seem to have this bug. 348 349 * The Toshiba Gigabeat S (and probably its sibling the 350 Microsoft Zune and other Toshiba devices) will only display 351 album information tags for a song in case there is also 352 an abstract album (created with the album interface) with 353 the exact same name. 354 355 * The Zen Vision:M has an older firmware which is very corrupt, 356 it is incompatible with the Linux USB stack altogether. The 357 kernel dmesg will look something like this, and you have to 358 upgrade the firmware using Windows: 359 usb 4-5: new high speed USB device using ehci_hcd and address 5 360 usb 4-5: configuration #1 chosen from 1 choice 361 usb 4-5: can't set config #1, error -110 362 363 * The Sirus Stiletto does not seem to allow you to copy any files 364 off the device. This may be someone's idea of copy protection. 365 366 * The Samsung P2 assigns parent folder ID 0 to all unknown file 367 types.(i.e. moves them to the root folder) 368 369 * The Sandisk Sansa Clip+ needs a firmware upgrade in earlier 370 versions in order to work properly. 371 372 373 New Devices 374 ----------- 375 376 If you happen upon a device which libmtp claims it cannot 377 autodetect, please submit the vendor ID and device ID 378 (these can be obtained from the "lsusb" and "lsusb -n" 379 commands run as root) as a bug, patch or feature request 380 on the Sourceforge bug tracker at our homepage. If it 381 gives a sensible output from "mtp-detect" then please attach 382 the result as well as it teach us some stuff about your 383 device. If you've done some additional hacking, join our 384 mailinglist and post your experiences there. 385 386 If you want to be able to hack some more and you're not 387 afraid of C hacking, add an entry for your device's 388 vendor/product ID and a descriptive string to the database 389 in the file src/music-players.h. 390 391 If you want to poke around to see if your device has some 392 special pecularities, you can test some special device 393 flags (defined in src/device-flags.h) by inserting them 394 together with your device entry in src/music-players.h. 395 Flags can be tested in isolation or catenated with "|" 396 (binary OR). If relatives to your device use a certain 397 flag, chances are high that a new device will need it 398 too, typically from the same manufacturer. 399 400 The most common flag that needs to be set is the 401 DEVICE_FLAG_UNLOAD_DRIVER that detach any Linux kernel 402 drivers that may have attached to the device making 403 MTP access impossible. This is however not expected to 404 really work: this is a problem being tracked as of 405 now (2007-08-04). See the "last resort" solutions below 406 if you really need to get your dual-mode device to work 407 with MTP. 408 409 Another flag which is easy to identify is the 410 DEVICE_FLAG_NO_ZERO_READS, which remedies connection 411 timeouts when getting files, and some timeouts on e.g. 412 successive "mtp-connect" calls. 413 414 If your device is very problematic we are curious of how it 415 works under Windows, so we enjoy reading USB packet sniffs 416 that reveal the low-level traffic carried out between 417 Windows Media Player and your device. This can be done 418 using e.g.: 419 420 * USBsnoop: 421 http://benoit.papillault.free.fr/usbsnoop/ 422 423 * The trial version of HHD Softwares software-only 424 USB monitor. You need to get a copy of version 2.37 since 425 the newer trial versions won't let you carry out the 426 needed packet sniffs. (As of 2007-03-10 a copy can be found 427 at: http://www.cobbleware.com/files/usb-monitor-237.exe) 428 429 There are other USB monitors as well, some more expensive 430 alternatives use hardware and even measure electronic 431 characteristics of the traffic (which is far too much 432 detail for us). 433 434 Device sniffs are an easy read since the PTP/MTP protocol 435 is nicely structured. All commands will have a structure such 436 as this in the log, we examplify with a object list request: 437 438 PTP REQEUST: 439 000120: Bulk or Interrupt Transfer (UP), 03.09.2007 12:49:25.9843750 +0.0 440 Pipe Handle: 0x863ce234 (Endpoint Address: 0x2) 441 Send 0x20 bytes to the device: 442 20 00 00 00 01 00 05 98 23 00 00 00 27 03 00 10 ......?#...'... 443 Length TYPE CMD Trans# Param1 444 445 00 00 00 00 02 DC 00 00 00 00 00 00 00 00 00 00 ............... 446 Param2 Param3 Param4 Param5 447 448 [OPTIONAL] DATA PHASE: 449 000121: Bulk or Interrupt Transfer (UP), 03.09.2007 12:49:26.0 +0.0156250 450 Pipe Handle: 0x863ce214 (Endpoint Address: 0x81) 451 Get 0x1a bytes from the device: 452 1A 00 00 00 02 00 05 98 23 00 00 00 01 00 00 00 .......?#....... 453 Length TYPE CMD Trans# DATA 454 455 27 03 00 10 02 DC 04 00 00 30 '.......0 456 457 RESPONSE: 458 000122: Bulk or Interrupt Transfer (UP), 03.09.2007 12:49:26.0 +0.0 459 Pipe Handle: 0x863ce214 (Endpoint Address: 0x81) 460 Get 0xc bytes from the device: 461 0C 00 00 00 03 00 01 20 23 00 00 00 ....... #... 462 Length TYPE CODE Trans# 463 464 * One send (OUT to the device), two reads (IN from the device). 465 466 * All three byte chunks commands are 467 sent/recieved/recieeved by the function ptp_transaction() 468 in the file ptp.c. 469 470 * It boils down to ptp_usb_sendreq(), optionally ptp_usb_senddata() 471 or ptp_usb_getdata() and finally ptp_usb_getresp() in the file 472 libusb-glue.c. Notice ptp_usb_sendreq() and ptp_usb_getresp() 473 are ALWAYS called. The TYPE field correspond to this, so the 474 TYPES in this case are "COMMAND" (0x0001), "DATA" (0x0002), 475 and "RESPONSE" (0x0003). 476 477 * Notice that the byte order is little endian, so you need to read 478 each field from right to left. 479 480 * This COMMAND has: 481 CMD 0x99805, we see in ptp.h that this is PTP_OC_MTP_GetObjPropList. 482 Transaction# 0x00000023. 483 REQUEST parameters 0x10000327, 0x00000000, 0x0000DC02, 0x00000000 484 0x00000000, in this case it means "get props for object 0x10000327", 485 "any format", "property 0xDC02" (PTP_OPC_ObjectFormat), then two 486 parameters that are always zero (no idea what they mean or their 487 use). 488 489 * The DATA has: 490 CMD 0x99805, we see in ptp.h that this is PTP_OC_MTP_GetObjPropList. 491 Transaction# 0x00000023. 492 Then comes data 0x00000001, 0x10000327, 0xDC02, 0x0004, 0x3000 493 Which means in this case, (and this is the tricky part) "here 494 you have 1 property", "for object 0x10000327", "it is property 495 0xDC02" (PTP_OPC_ObjectFormat), "which is of type 0x0004" 496 (PTP_DTC_UINT16), "and set to 0x3000" (PTP_OFC_Undefined, it 497 is perfectly valid to have undefined object formats, since it 498 is a legal value defining this). 499 500 * This RESPONSE has: 501 CMD 0x99805, we see in ptp.h that this is PTP_OC_MTP_GetObjPropList. 502 Return Code ("RC") = 0x2001, PTP_RC_OK, all went fine. 503 Transaction# 0x00000023. 504 505 If you want to compare the Windows behaviour with a similar 506 operation using libmtp you can go into the src/libusb-glue.c 507 file and uncomment the row that reads: 508 509 //#define ENABLE_USB_BULK_DEBUG 510 511 (I.e. remove the two //.) 512 513 This will make libmtp print out a hex dump of every bulk USB 514 transaction. The bulk transactions contain all the PTP/MTP layer 515 data, which is usually where the problems appear. 516 517 518 Notes to assist with debugging new devices: 519 ------------------------------------------- 520 521 In debugging new hardware, we highly recommend that you only 522 use the example mtp-* applications that come with libmtp, as other 523 applications may have their own bugs that may interfere with your 524 new device working correctly. Using another application instead of 525 those that come with libmtp just adds another point of failure. 526 527 For debugging, there are 3 main options: 528 529 1. Use the env variable: LIBMTP_DEBUG to increase the 530 verboseness of the debugging output for any application using 531 libmtp. Relevant codes are: 532 * 0x00 [0000 0000] : no debug (default) 533 * 0x01 [0000 0001] : PTP debug 534 * 0x02 [0000 0010] : Playlist debug 535 * 0x04 [0000 0100] : USB debug 536 * 0x08 [0000 1000] : USB data debug 537 // Codes are hex and binary respectively. Simple add them togther 538 // to get your desired level of output. 539 540 (Assuming bash) 541 eg: 542 $ export LIBMTP_DEBUG=12 543 $ mtp-detect 544 // To get USB debug and USB data debug information. 545 546 $ export LIBMTP_DEBUG=2 547 $ mtp-detect 548 // To get Playlist debug information. 549 550 Also note, an application may also use the LIBMTP_debug() API 551 function to achieve the same options as listed above. 552 553 2. Use "strace" on the various mtp-* commands to see where/what 554 is falling over or getting stuck at. 555 * On Solaris and FreeBSD, use "truss" or "dtrace" instead on "strace". 556 * On Mac OS X, use "ktrace" or "dtrace" instead of "strace". 557 * On OpenBSD and NetBSD, use "ktrace" instead of "strace". 558 559 This will at least help pinpoint where the application is failing, or 560 a device is reporting incorrect information. (This is extremely helpful 561 with devices that have odd disconnection requirements). 562 563 The use of these tools may also pinpoint issues with libusb as 564 implemented by each OS vendor or issues with the MTP implementation 565 on the new device as well, so please be prepared for either case. 566 567 3. Use "gdb" or similar debugger to step through the code as it is 568 run. This is time consuming, and not needed just to pinpoint where 569 the fault is. 570 571 The use of gdb or another debugger may also miss or actually cause 572 command and data timing issues with some devices, leading to false 573 information. So please consider this a last resort option. 574 575 Also please read the "It's Not Our Bug!" section below, as it does 576 contain some useful information that may assist with your device. 577 578 579 Dual-mode devices does not work - last resort: 580 ---------------------------------------------- 581 582 Some devices that are dual-mode are simply impossible to get 583 to work under Linux because the usb-storage(.ko) kernel 584 module hook them first, and refuse to release them, even 585 when we specify the DEVICE_FLAG_UNLOAD_DRIVER flag. (Maybe 586 it DOES release it but the device will immediately be probed 587 at the USB mass storage interface AGAIN because it 588 enumerates.) 589 590 Here is what some people do: 591 592 1. Plug in the device. 593 2. USB-mass storage folder will open automatically. 594 3. Unmount the device. 595 4. Run mtp-detect. It will most likely fail the first time. 596 5. Run mtp-detect again, it might work this time, or fail. Keep running 597 till it works. 99% it works by the third try. 598 6. Once mtp-detect gives you an "Ok", open either Rhythmbox or Gnomad2, 599 everything should work. 600 601 Linux: Try this, if you have a recent Linux kernel, 602 add the file (as root): 603 604 /etc/modprobe.d/no-usb-storage.conf 605 606 With the contents: 607 608 options usb-storage quirks=1234:4321:i 609 610 This will tell usb-storage to ignore this device when it's inserted 611 so it is not hogged by the mass storage interfaces. Remove and re-insert 612 the device and see if it works. Usually this does the trick. 613 614 For older systems, or as a bigger hammer, run (as root) something 615 like: 616 617 > rmmod usb_storage ; mtp-detect 618 619 You can run most any command or a client like gnomad2 or 620 Amarok immediately after the rmmod command. This works 621 sometimes. Another even more brutal approach is this: 622 623 * Edit /etc/modprobe.d/blacklist 624 * Add the line "blacklist usb-storage" 625 * Reboot. 626 627 Now none of you USB disks, flash memory sticks etc will be 628 working (you just disabled them all). However you *can* try 629 your device, and it might have started working because there 630 is no longer a USB mass storage driver that tries to hook onto 631 the mass storage interface of your device. 632 633 If not even blacklisting works (check with 634 "lsmod | grep usb-storage"), there is some problem with 635 something else and you may need to remove or rename the file 636 /lib/modules/<VERSION>/kernel/drivers/usb/storage/usb-storage.ko 637 manually. 638 639 If you find the PerfectSolution(TM) to this dilemma, so you 640 can properly switch for individual devices whether to use it 641 as USB mass storage or not, please tell us how you did it. We 642 know we cannot use udev, because udev is called after-the-fact: 643 the device is already configured for USB mass storage when 644 udev is called. 645 646 On Mac OS there is another ugly hack: 647 648 1. Open up a terminal window 649 2. Type: 650 sudo mv /System/Library/Extensions/IOUSBMassStorageClass.kext 651 /System/Library/Extensions/IOUSBMassStorageClass.kext.disabled 652 653 and when prompted enter your password. 654 655 3. Restart. 656 657 To reverse this change, just reverse the filenames: 658 659 sudo mv /System/Library/Extensions/ 660 IOUSBMassStorageClass.kext.disabled /System/Library/Extensions/ 661 IOUSBMassStorageClass.kext 662 663 and restart. 664 665 666 Calendar and contact support: 667 ----------------------------- 668 669 The Creative Zen series can read VCALENDAR2 (.ics) files 670 and VCard (.vcf) files from programs like for example 671 Evolution with the following limitations/conditions: 672 673 - The file must be in DOS (CR/LF) format, use the unix2dos 674 program to convert if needed 675 676 - Repeat events in calendar files do not seem to be supported, 677 entries will only appear once. 678 679 - Calendar (.ics) files should be stored in the folder "My Organizer" 680 when sent to the device (this directory should be autodetected 681 for use with calendar files, otherwise use the option 682 -f "My Organizer" to sendfile for this) Apparently this file can 683 also contain tasklists. 684 685 - Contact (.vcf) files should be stored in the folder "My Contacts" 686 when sent to the device. (-f "My Contacts") 687 688 - Some devices are picky about the name of the calendar and 689 contact files. For example the Zen Microphoto wants: 690 691 Calendar: My Organizer/6651416.ics 692 Contacts: My Organizer/6651416.vcf 693 694 695 Syncing in with Evolution and Creative Devices 696 ---------------------------------------------- 697 698 Evolution can easily export .ics an .vcf files, but you currently 699 need some command-line hacking to get you stuff copied over in 700 one direction host -> device. The examples/ directory contains a script 701 created for the Creative Zen Microphoto by Nicolas Tetreault. 702 703 704 Lost symbols 705 ------------ 706 707 Shared libraries can be troublesome to users not experienced with 708 them. The following is a condensed version of a generic question 709 that has appeared on the libmtp mailing list from time to time. 710 711 > PTP: Opening session 712 > Queried Creative Zen Vision:M 713 > gnomad2: relocation error: gnomad2: undefined symbol: 714 > LIBMTP_Get_Storageinfo 715 > (...) 716 > Are these type of errors related to libmtp or something else? 717 718 The problem is of a generic nature, and related to dynamic library 719 loading. It is colloquially known as "dependency hell". 720 (http://en.wikipedia.org/wiki/Dependency_hell) 721 722 The gnomad2 application calls upon the dynamic linker in Linux to 723 resolve the symbol "LIBMTP_Get_Storageinfo" or any other symbol 724 (ELF symbol, or link point or whatever you want to call them, a 725 symbol is a label on a memory address that the linker shall 726 resolve from label to actual address.) 727 For generic information on this subject see the INSTALL file and 728 this Wikipedia page: 729 730 http://en.wikipedia.org/wiki/Library_(computing) 731 732 When Linux /lib/ld-linux.so.X is called to link the symbols compiled 733 into gnomad2 (or any other executable using libmtp), it examines the 734 ELF file for the libmtp.so.X file it finds first and cannot resolve 735 the symbol "LIBMTP_Get_Storageinfo" (or whichever symbol you have a 736 problem witj) from it, since it's probably not there. There are many 737 possible causes of this symbol breakage: 738 739 1) You installed precompiled libmtp and gnomad2 packages (RPMs, debs 740 whatever) that do not match up. Typical cause: your gnomad2 package was 741 built against a newer version of libmtp than what's installed on your 742 machine. Another typical cause: you installed a package you found on 743 the web, somewhere, the dependency resolution system did not protest 744 properly (as it should) or you forced it to install anyway, ignoring 745 some warnings. 746 747 2) You compiled libmtp and/or gnomad2 from source, installing both or 748 either in /usr/local/lib and /usr/local/bin. This means at compile-time 749 gnomad2 finds the libmtp library in /usr/local/lib but at runtime, it 750 depends on the Linux system wide library loader (/lib/ld-linux.so.X) in 751 order to resolve the symbols. This loader will look into the file 752 /etc/ld.so.conf and/or the folder /etc/ld.so.conf.d in order to find 753 paths to libraries to be used for resolving the symbols. If you have 754 some older version of libmtp in e.g. /usr/lib (typically installed by a 755 package manager) it will take precedence over the new version you just 756 installed in /usr/local/lib and the newly compiled library in 757 /usr/local/lib will *not* be used, resulting in this error message. 758 759 3) You really did install the very latest versions (as of writing libmtp 760 0.1.5 and gnomad2 2.8.11) from source and there really is no 761 pre-installed package of either on your machine. In that case I'm 762 totally lost, I have no idea what's causing this. 763 764 Typical remedies: 765 766 1) If you don't want to mess around with your system and risk these 767 situations, only use pre-packaged software that came with the 768 distribution or its official support channels. If it still breaks, 769 blame your distribution, they're not packaging correctly. Relying on 770 properly packaged software and not installing things yourself *is* the 771 Linux solution to the "dependency hell" problem. 772 773 2) Read about dynamically linked library handling until the stuff I wrote 774 about in the previous list sounds like music to your ears, inspect 775 your /lib, /usr/lib, /usr/local/lib, /etc/ld.so.conf and the 776 /etc/ld.so.conf.d, remove all pre-packed versions using RPM, APT, 777 YaST or whatever your distribution uses, compile libmtp and gnomad2 778 (or whatever) from source only and you will be enlighted. 779 780 I don't know if this helps you, it's the best answer we can give. 781 782 783 API is obscure - I want plain files! 784 ------------------------------------ 785 786 PTP/MTP devices does not actually contain "files", they contain 787 objects. These objects have file names, but that is actually 788 just a name tag on the object. 789 790 Folders/directories aren't really such entities: they are just 791 objects too, albeit objects that can act as parent to other 792 objects. They are called "associations" and are created in atomic 793 fashion and even though there is an MTP command to get all the 794 associations of a certain object, this command is optional 795 so it is perfectly possible (and most common, actually) to create 796 devices where the "folders" (which are actually associations) have 797 no idea whatsoever of what files they are associated as parents to 798 (i.e. which files they contain). This is very easy for device 799 manufacturers to implement, all the association (i.e. finding out 800 which files are in a certain folder) has to be done by the MTP 801 Initiator / host computer. 802 803 Moving a file to a new folder is for example very simple in a 804 "real" file system. In PTP/MTP devices it is often not even possible, 805 some devices *may* be able to do that, if they support command 806 0x1019 "Move Object", but actually the only reliable way of executing 807 file movement is to upload the file to the host, download it with 808 the new parent, then delete the old file. We have played with the 809 idea of implementing this time consuming function as a fallback 810 in case the device does not support command 0x1019, perhaps one day 811 we will do that. (Some devices also support command 0x101a 812 "Copy Object".) 813 814 Then the issue that in PTP/MTP it is legal for two files to have 815 exactly the same path as long as their object IDs differ. A 816 folder/association can contain two files with the exact same name. 817 (And on the Creative devices this even works, too, though most devices 818 implicitly fail at this.) Perhaps one could add some custom hook for 819 handling that, so they become /Foo.mp3 and /Foo.mp3(1) or something 820 similar, but it's really a bit kludgy. 821 822 Playlists and albums aren't really files, thinking about 823 them as files like the hacks in libgphoto2 is really backwards. They are 824 called associations and are more like a symbolic link that links in a 825 star-shaped pattern to all the files that are part of the album/playlist. 826 Some devices (Samsung) thought that was too complicated and have a 827 different way of storing playlists in an UTF-16 encoded .spl-like file 828 instead! This is why playlists/albums must have their own structs and 829 functions. 830 831 Plain file access also assumes to be able to write files of an 832 undetermined size, which is simply not possible in a transactional 833 file system like PTP/MTP. (See further below.) 834 835 836 I Want Streaming! 837 ----------------- 838 839 Streaming reads is easy. Just connect the output file descriptor from 840 LIBMTP_Get_File_To_File_Descriptor() (and a similar function for tracks) 841 wherever you want. 842 843 People have connected this to TCP sockets for streaming web servers 844 etc, works like a charm. Some devices will even survive if the callback 845 functions return non-zero and cancel the download. Some devices will 846 lock up and even require a reset if you do that. Devices are poorly 847 implemented so that's life. If you want to stream off a device, the 848 best idea is always to stream the entire file and discard the stuff 849 at the end you don't want. It will incur a delay if you e.g. want to 850 skip between tracks, sadly. 851 852 Then we get to the complicated things: streaming WRITES... 853 854 There is a function: 855 LIBMTP_Send_File_From_File_Descriptor() (and similar for tracks) 856 which will write a file to a device from a file descriptor, which may 857 be a socket or whatever. 858 859 HOWEVER: this requires a piece of metadata with the .filesize properly 860 set first. 861 862 This is not because we think it is funny to require that, the protocol 863 requires it. The reason is that PTP/MTP is a transactional file system 864 and it wants to be able to deny file transfer if the file won't fit on 865 the device, so the transaction never even starts, it's impossible to 866 start a transaction without giving file length. 867 868 People really want streaming so I tried a lot of hacks to see if they 869 would work, such as setting file size to 0xffffffffU or something other 870 unnaturally big and then aborting the file transfer when the stream ends. 871 It doesn't work: either the device crashes or the file simply disappears 872 since the device rolls back all failed transactions. 873 874 So this is an inherent limitation of the PTP/MTP protocol. 875 876 877 I want to remote control my device! 878 ----------------------------------- 879 880 I have both good and bad news for you. 881 882 The good news is that the MTP protocol has well-defined commands to play 883 back content on a device. Operation 0xD411 (PTP_DPC_MTP_PlaybackObject) 884 will start playing back a file on the device (whatever that may mean if 885 this is not a music or video file), and operation 0xD403 can set the 886 playback volume to save your ears. Then there are operations to 887 determine how far into the current file you currently are, so as to 888 support say progress bars. 889 890 Since these commands have been around since the dawn of the MTP protocol 891 and since it was developed in cooperation with Creative Technology, this 892 is probably a requested feature from the Creative people who already had 893 support for playback on their devices using the PDE protocol back then. 894 895 Anyway, here are the bad news: 896 [logs]$ grep d411 * 897 mtp-detect-trekstor-vibez.txt: 0xd411: Playback Object 898 899 Aha there is only one known device in the world which actually supports 900 playback on the device. So either you go buy the Trekstor Vibez, or you 901 can forget about this. You could always try asking your hardware vendor 902 of choice to go implement this. 903 904 Since none of the core developers of libmtp has the Trekstor device, this 905 is not yet implemented in libmtp. 906 907 908 I make MTP devices! 909 ------------------- 910 911 If you are a device vendor there is a lot you can do for libmtp: 912 913 * Please consider assigning one of your employees as a contact person 914 for libmtp, have them sign up to the libmtp development list and answer 915 questions and post new device ID:s as they are released to our 916 mailing list. 917 918 * If you want to help even more, assign someone to look deeper into 919 error reports on your specific devices, understand why your firmware 920 may require some special device flags and what can be done about it. 921 922 * Do you have spare devices you can give us? Send them to Richard (Mac 923 support) or Linus (Linux support). (So far nobody did that except for 924 Microsoft who sent us a Zune by proxy!) 925 926 Vendors do need help from libmtp too, especially we want to help 927 vendors improve their MTP stacks, because they all suffer from the 928 same problem: the lack of a proper conformance test has made many devices 929 incompliant with the MTP specification as it is published today: most 930 devices are just compliant with the Windows MTP stack, and don't work 931 out-of-the-box with libmtp. We need someone on the inside to help in 932 bug reporting vendors MTP stacks internally so these issues are raised. 933 A good way to go toward better MTP compliance is to test with an 934 alternative implementation of the stack. In e.g. IETF standardization 935 it is compulsory for an RFC to have atleast two independent implementations 936 for it to reach the status as standard. 937 938 Being compliant with libmtp is also more and more important for 939 vendors: libmtp is being deployed in some embedded systems like 940 set-top-boxes etc. It will be very irritating for customers if a device 941 will not dock properly with some home entertainment equipment just because 942 it is based on Linux and libmtp and not the Windows MTP stack. 943 944 Autodetect with gudev 945 --------------------- 946 947 Previously you would use HAL to detect devices being plugged in. Nowadays 948 we use udev directly, or though the GNOME libgudev library. LIBMTPs 949 default udev rules export the proper properties to detect any MTP device 950 automatically, here is a verbose example derived from gnomad2: 951 952 #define G_UDEV_API_IS_SUBJECT_TO_CHANGE 953 #include <gudev/gudev.h> 954 const char * const gudev_subsystems[] = { "usb", NULL }; 955 GUdevClient *gudev_client; 956 guint uevent_id; 957 guint uevent_bus_hooked = 0; 958 guint uevent_device_hooked = 0; 959 960 961 static void uevent_cb(GUdevClient *client, const char *action, GUdevDevice *device, void *data) 962 { 963 guint64 devicenum; 964 guint vendor; 965 guint model; 966 guint busnum; 967 guint devnum; 968 guint mtpdevice; 969 970 devicenum = (guint64) g_udev_device_get_device_number(device); 971 g_print("%s event for %s (%"G_GINT64_MODIFIER"x)", action, 972 g_udev_device_get_sysfs_path (device), devicenum); 973 974 /* get device info */ 975 vendor = get_property_as_int(device, "ID_VENDOR_ID", 16); 976 model = get_property_as_int(device, "ID_MODEL_ID", 16); 977 busnum = get_property_as_int(device, "BUSNUM", 10); 978 devnum = get_property_as_int(device, "DEVNUM", 10); 979 mtpdevice = get_property_as_int(device, "ID_MTP_DEVICE", 10); 980 981 if (vendor == 0 || model == 0) { 982 g_print("couldn't get vendor or model ID for device at (%x:%x)\n", 983 busnum, devnum); 984 return; 985 } else { 986 g_print("vendor = %x, model = %x, bus = %x, device = %x\n", 987 vendor, model, busnum, devnum); 988 } 989 990 if (mtpdevice) { 991 g_print("device is MTP compliant\n"); 992 993 if (g_str_equal(action, "add") && 994 uevent_bus_hooked == 0 && 995 uevent_device_hooked == 0) { 996 g_print(MTP device plugged in!\n"); 997 uevent_bus_hooked = busnum; 998 uevent_device_hooked = devnum; 999 scan_jukebox(NULL); 1000 } else if (g_str_equal (action, "remove") && 1001 uevent_bus_hooked == busnum && 1002 uevent_device_hooked == devnum) { 1003 g_print("MTP device removed!\n"); 1004 uevent_bus_hooked = 0; 1005 uevent_device_hooked = 0; 1006 } 1007 } 1008 } 1009 1010 1011 1012 (...) 1013 /* 1014 * Monitor udev device events - we're only really interested in events 1015 * for USB devices. 1016 */ 1017 gudev_client = g_udev_client_new(gudev_subsystems); 1018 uevent_id = g_signal_connect_object(gudev_client, 1019 "uevent", 1020 G_CALLBACK(uevent_cb), 1021 NULL, 0); 1022 1023 SKETCH OF AN OVERVIEW 1024 --------------------- 1025 1026 Draft agenda for a talk on MTP devices submitted for the Android 1027 builders summit, might come to recycle this: 1028 1029 - Protocol overview 1030 - Transactional filesystem - no corruption due to unplugged cables! 1031 - The host and the device can access the files simultaneously, the 1032 device will always "own" the physical file system and proxy the 1033 host (MTP initiator). 1034 - libmtp interface 1035 - relation to libgphoto2 1036 - User expectations fall short: 1037 - Not really a mountable filesystem. 1038 - Streaming does not work. (Size needs to be known beforehand due to 1039 transactional nature.) 1040 - GVFS MTP backend to the rescue. 1041 - Device sins 1042 - Using the same VID/PID for several modes, some of which are not MTP. 1043 HTC Zopo, HD2, Bird (0x0bb4/0x0c02). Thanks for that, now we cannot 1044 detect the protocol from just VID+PID but have to examine the interfaces. 1045 - Android bugs 1046 - Samsungs special Android MTP stack 1047 - SonyEricsson Aricent stack for Xperia Androids pre 4.0, broken headers! 1048 - Flat access model vs hierarchical, how Android uses MTP as an hierachical 1049 file system while it was previously a flat database. 1050 - Old paradigm: scan the entire non-hierarchical storage for all content, 1051 build a cache to speed up the (USB 1.1!) link. Usually all files were 1052 stored in the root folder or a single folder named "/Music" or similar. 1053 - Android introduced deeply nested folder hierarchies, not seen before 1054 on MTP devices. 1055 - Microsoft not using the complete metadata dump feature of the MTP 1056 protocol (once introduced by creative) instead they walk directories 1057 separately. 1058 - So caching a big device will take long time and/or timeout. 1059 - Go-MTPFS (FUSE) and GVFS MTP - doing the partial directory walk rather 1060 than caching all files. 1061 - Especially Android devices nowadays assume that 1062 you want to index a folder at the time, whereas older MTP devices (such 1063 as those from Creative) would assume that you wanted to index the entire 1064 device as it was plugged in, and device firmware is now ever more tailored 1065 toward per-folder filetree walking. This makes it harder for the library 1066 to provide the right abstractions: do we provide an API for indexing the 1067 whole device which is unacceptably slow on new devices, or do we provide 1068 an API for indexing a directory at the time which will somehow work on 1069 older devices too? Shall we deprecate the older API? 1070 - Detecting from vendor extension, can fix in newer extensions! 1071 - Autoprobing on Linux 1072 - Color devices do not like autoprobing 1073 - Devices need different PIDs for every alternative interface due to 1074 the Windows USB stack. 1075 - Multimode USB - one PID for each mode due to Windows limitations not 1076 applicable to Linux, SONY devices have ~5 different PIDs for a single 1077 device. 1078 - Mode switch devices? Maybe we do this wrong. 1079 - MTPZ, came and went. Apparently deprecated by Microsoft with Windows 1080 Phone 8. 1081 - Ideas?? 1082 1083