Home | History | Annotate | only in /external/libmtp
Up to higher level directory
NameDateSize
.gitignore06-Dec-2017227
.travis-translate-pkgs06-Dec-20171K
.travis.yml06-Dec-2017783
AUTHORS06-Dec-20171.6K
autogen.sh06-Dec-20171.9K
ChangeLog06-Dec-201796.9K
configure.ac06-Dec-20177K
COPYING06-Dec-201725.8K
doc/06-Dec-2017
examples/06-Dec-2017
hotplug.sh.in06-Dec-20174.9K
INSTALL06-Dec-201711K
libmtp.pc.in06-Dec-2017353
libmtp.sh.in06-Dec-20171.2K
logs/06-Dec-2017
m4/06-Dec-2017
Makefile.am06-Dec-2017778
README06-Dec-201743.2K
README.windows.txt06-Dec-20172.8K
src/06-Dec-2017
sync-usbids.sh06-Dec-2017365
TODO06-Dec-20175.1K
util/06-Dec-2017

README

      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 

README.windows.txt

      1 This file was created by James Ravenscroft <ravenscroftj (a] gmail.com> as a direct revision of Farooq Zaman's work with LibMTP on Windows.
      2 
      3  CHANGELOG
      4 ----------------
      5 14th January 2009: Created the first revision of this file taking information from the work of Farooq Zaman.
      6 
      7  1.0 Compilation of LibMTP on Windows 2000/XP/NT 
      8 -----------------------------------------------------------
      9 LibMTP currently compiles under Windows using MingW/MSys. The source relies upon the __WIN32__ macro which is defined by MinGW by default.
     10 
     11 Libraries:
     12 LibMTP currently depends on LibUSB and libiconv. There are currently projects that port both of these libraries to Windows. Binary files can be
     13 obtained from:
     14 
     15 LibUSB Win32 - http://libusb-win32.sourceforge.net/
     16 
     17 LibIconv - http://gnuwin32.sourceforge.net/packages/libiconv.htm
     18 
     19 With both of these libraries extracted and placed in MinGW's search path, you can compile the library by opening the Msys prompt, navigating to
     20 the path where the extracted LibMTP source files can be found and typing:
     21 
     22 ./configure
     23 make all
     24 make install
     25 
     26 
     27 
     28  2.0 LibUSB and Driver Issues for Windows
     29 ----------------------------------------------
     30 
     31 Unfortunately, Windows does not have abstract USB support and depends upon specific drivers for each and every device you use. Fortunately, 
     32 LibUSB-Win32 provide a solution to this problem. LibMTP takes advantage of the LibUSB-Win32 Device Driver package.
     33 
     34 1. Download the latest device driver binary package (libusb-win32-device-bin-x.x.x.x.tar.gz) from http://sourceforge.net/project/showfiles.php?group_id=78138
     35 2. Upon extraction, plug in your music device and run bin/inf-wizard.exe. Selecting your device and saving the inf file in the project root directory.
     36 3. Copy the files "bin/libusb0.dll" and "libusb0.sys" or "libusb0_x64.dll" and "libusb0_x64.sys" for 32-bit or 64-bit operating systems respectively.
     37 4. Goto Start -> Run, type "devmgmt.msc" and press "ok".
     38 5. Select your music device from the list and click Action -> Update Driver, Choose "No, not this time" if prompted to connect to microsoft.
     39 6. Choose "Install from a list or specific location".
     40 7.  Choose "Don't search, I will choose the driver to install
     41 8. Click the "Have Disk..." button in the bottom right corner of the prompt
     42 9. Browse to your .inf file and select it. Press Ok 
     43 10. The name of your music device should appear in the prompt, click it and click "Next>" (Ignore any prompts about Driver Signing, continuing 
     44 installation of the selected driver).
     45 11. Click finish to end the driver install process.
     46 
     47 To get your old driver back:
     48 
     49 1. Goto Start -> Run, type "devmgmt.msc" and press "ok".
     50 2. Select your music device, right click on it and click "Properties"
     51 3. Go to the "Driver" pane and select "Roll Back Driver".
     52 
     53  3.0 
     54 ----------------------------------------------
     55