blob: 05385f44b722b3e16c77063a83d4bc63946903b7 [file] [log] [blame]
Linus Walleij0dd71e92006-05-04 18:47:07 +00001Building and Installing
2-----------------------
Linus Walleij6fd2f082006-03-28 07:19:22 +00003
Linus Walleij0dd71e92006-05-04 18:47:07 +00004See the "INSTALL" file.
5
6
7Heritage
8--------
9
10libmtp is based on several ancestors:
11
12* libptp2 by Mariusz Woloszyn was the starting point used
13 by Richard A. Low for the initial starter port. You can
14 find it at http://libptp.sourceforge.net/
15
16* libgphoto2 by Mariusz Woloszyn and Marcus Meissner was
17 used at a later stage since it was (is) more actively
18 maintained. libmtp tracks the PTP implementation in
19 libgphoto2 and considers it an upstream project. We will
20 try to submit anything generally useful back to libgphoto2
21 and not make double efforts. In practice this means we
22 use ptp.c, ptp.h and ptp-pack.c verbatim from the libgphoto2
23 source code. If you need to change things in these files,
24 make sure it is so general that libgphoto2 will want to
25 merge it to their codebase too. You find libgphoto2 as part
26 of gPhoto: http://gphoto.sourceforge.net/
27
28* libnjb was a project that Richard and Linus were working
Linus Walleijfcf88912006-06-05 13:23:33 +000029 on before libmtp. When Linus took Richards initial port
Linus Walleij0dd71e92006-05-04 18:47:07 +000030 and made an generic C API he re-used the philosophy and
31 much code from libnjb. Many of the sample programs are for
32 example taken quite literally from libnjb. You find it here:
33 http://libnjb.sourceforge.net/
34
35
36Compiling programs for libmtp
37-----------------------------
38
39libmtp has support for the pkg-config script by adding a libmtp.pc
40entry in $(prefix)/lib/pkgconfig. To compile a libmtp program,
41"just" write:
42
43gcc -o foo `pkg-config --cflags --libs libmtp` foo.c
44
45This also simplifies compilation using autoconf and pkg-config: just
46write e.g.
47
48PKG_CHECK_MODULES(MTP, libmtp)
49AC_SUBST(MTP_CFLAGS)
50AC_SUBST(MTP_LIBS)
51
52To have libmtp LIBS and CFLAGS defined. Needless to say, this will
53only work if you have pkgconfig installed on your system, but most
54people have nowadays.
55
56If your library is installed in e.g. /usr/local you may have to tell
57this to pkgconfig by setting the PKG_CONFIG_PATH thus:
58
59export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
60
61
62Documentation
63-------------
64
65Read the API documentation that can be generated with doxygen.
66It will be output in doc/html if you have Doxygen properly
67installed. (It will not be created unless you have Doxygen!)
68
69For information about the Media Transfer Protocol, see:
70http://en.wikipedia.org/wiki/Media_Transfer_Protocol
71
72
73Contributing
74------------
75
76See the project page at http://libmtp.sourceforge.net/
Linus Walleijee73ef22006-08-27 19:56:00 +000077We always need your help. There is a mailinglist and a
78bug report system there.
Linus Walleij6fd2f082006-03-28 07:19:22 +000079
Linus Walleijfcf88912006-06-05 13:23:33 +000080If you happen upon a device which libmtp claims it cannot
81autodetect, please submit the vendor ID and device ID
82as a bug, patch or feature request on the Sourceforge
Linus Walleijda558be2007-03-10 21:42:25 +000083bug tracker at our homepage. If it gives a sensible
84output from "mtp-detect" then please attach the result as
85well as it teach us some stuff about your device.
86
87If your device is problematic we are curious of how it
88works under Windows, so we enjoy reading USB packet sniffs
89that reveal the low-level traffic carried out between
90Windows Media Player and your device. This can be done
91using the trial version of HHD Softwares software-only
92USB monitor. You need to get a copy of version 2.37 since
93the newer trial versions won't let you carry out the
94needed packet sniffs. (As of 2007-03-10 a copy can be found
95at: http://www.cobbleware.com/files/usb-monitor-237.exe)
96There are other USB monitors as well, some more expensive
97alternatives use hardware and even measure electronic
98characteristics of the traffic (which is far too much
99detail for us).
100
101If you want to poke around to see if your device has some
102special pecularities, you can test some special device
103flags (defined in src/libusb-glue.h) by inserting them
104together with your device entry in src/libusb-glue.c.
105Flags can be tested in isolation or catenated with "|"
106(binary OR). If relatives to your device use a certain
107flag, chances are high that a new device will need it
108too, typically from the same manufacturer.
Linus Walleijfcf88912006-06-05 13:23:33 +0000109
Linus Walleij6fd2f082006-03-28 07:19:22 +0000110
Linus Walleij15def332006-09-19 14:27:02 +0000111Calendar and contact support:
112-----------------------------
Linus Walleijd3bdf762006-02-20 22:21:56 +0000113
Linus Walleij3c16fe42006-04-30 07:53:41 +0000114The Creative Zen series can read VCALENDAR2 (.ics) files
Linus Walleij15def332006-09-19 14:27:02 +0000115and VCard (.vcf) files from programs like for example
116Evolution with the following limitations/conditions:
Linus Walleijd3bdf762006-02-20 22:21:56 +0000117
Linus Walleij3c16fe42006-04-30 07:53:41 +0000118- The file must be in DOS (CR/LF) format, use the unix2dos
119 program to convert if needed
Linus Walleij15def332006-09-19 14:27:02 +0000120
121- Repeat events in calendar files do not seem to be supported,
122 entries will only appear once.
123
124- Calendar (.ics) files should be stored in the folder "My Organizer"
125 when sent to the device (this directory should be autodetected
Linus Walleij80b2c722006-06-22 17:57:17 +0000126 for use with calendar files, otherwise use the option
Linus Walleij15def332006-09-19 14:27:02 +0000127 -f "My Organizer" to sendfile for this) Apparently this file can
128 also contain tasklists.
129
130- Contact (.vcf) files should be stored in the folder "My Contacts"
131 when sent to the device. (-f "My Contacts")
132
133- Some devices are picky about the name of the calendar and
134 contact files. For example the Zen Microphoto wants:
135
Linus Walleijb1318d12006-09-25 14:59:26 +0000136 Calendar: My Organizer/6651416.ics
137 Contacts: My Organizer/6651416.vcf
138
139
140Syncing in with Evolution and Creative Devices
141----------------------------------------------
142
143Evolution can easily export .ics an .vcf files, but you currently
144need some command-line hacking to get you stuff copied over in
145one direction host -> device. The examples/ directory contains a script
146created for the Creative Zen Microphoto by Nicolas Tetreault.
147
Linus Walleij6e8cef42006-12-03 20:45:04 +0000148
149It's Not Our Bug!
150-----------------
151
152Some MTP devices have strange pecularities. We try to work around
153these whenever we can, sometimes we cannot work around it or we
154cannot test your solution.
155
156* The Zen Vision:M (possibly more Creative Zens) has a firmware bug
157 that makes it drop the last two characters off a playlist name.
158 It is fixed in later firmware.
159
Linus Walleijd24a7ab2007-03-07 21:48:43 +0000160* Sandisk sansa c150 and probably several other Sandisk devices
161 (and possibly devices from other manufacturers) have a dual
162 mode with MTP and USB mass storage. The device will initially
163 claim to be mass storage so udev will capture is and make the
Linus Walleijda558be2007-03-10 21:42:25 +0000164 use of MTP mode impossible. One way of avoiding it could be to
Linus Walleijd24a7ab2007-03-07 21:48:43 +0000165 be to blacklist the "usb-storage" module in
166 /etc/modprobe.c/blacklist with a row like this:
Linus Walleijda558be2007-03-10 21:42:25 +0000167 "blacklist usb-storage". Some have even removed the
168 "usb-storage.ko" (kernel module file) to avoid loading.
Linus Walleijd24a7ab2007-03-07 21:48:43 +0000169
Linus Walleijda558be2007-03-10 21:42:25 +0000170* The iriver devices (possibly all of them) cannot handle the
Linus Walleij6e8cef42006-12-03 20:45:04 +0000171 enhanced GetObjectPropList MTP command (0x9805) properly. So
172 they have been banned from using it.
173
Linus Walleijda558be2007-03-10 21:42:25 +0000174* iriver devices have problems with older versions of libmtp and
Linus Walleij82265222007-03-04 19:47:08 +0000175 with new devices libmtp does not know of as of yet, since it
176 has an oldstyle USB device controller that cannot handle zero
Linus Walleijda558be2007-03-10 21:42:25 +0000177 writes. (Register your device with us!) All their devices are
178 likely to need a special device flag in the src/libusb-glue.c
179 database.
Linus Walleij82265222007-03-04 19:47:08 +0000180
Linus Walleij6e8cef42006-12-03 20:45:04 +0000181* The Samsung Yepp T9 has several strange characteristics, some
182 that we've managed to work around. (For example it will return
183 multiple PTP packages in a single transaction.)
184
Linus Walleijf2711b32007-02-26 20:18:40 +0000185* The early firmware for Philips HDD players is known to be
186 problematic. Please upgrade to as new firmware as you can get.
187 (Yes this requires some kind of Windows Installation I think.)
188
Linus Walleij6e8cef42006-12-03 20:45:04 +0000189* Very few devices that implement GetObjectPropList (0x9805) will
190 return the entire object list if you request a list for object
191 0xffffffffu. (But they should.) So we're currently not using
192 that feature.