libptp2 (c)2001-2006 Mariusz Woloszyn <emsi@ipartners.pl>
ptpcam  (c)2001-2006 Mariusz Woloszyn <emsi@ipartners.pl>

=====================
*About this software*
=====================

You may find new versions of this software at:
http://libptp.sf.net/

The ./src folder contains following code:
ptp.c		- the main libptp2 code
ptp.h		- libptp2 header files
ptp-pack.c	- this file is included into ptp.c (internal code)
ptpcam.h	- ptpcam header file
ptpcam.c	- the software to manipulate PTP cameras;
		  it does things that you can't do with gphoto2

The libptp2 library is under development yet, but is considered to be
functional and quite stable.
It was written to be used with gphoto2, but can be easily used with any other
software.

==============
*Requirements*
==============

Currently this package requires libusb to build ptpcam.
The libptp2 library itself is transport layer independent and does not require
libusb, however no other transport layer has been tested due to lack
of PTP non-USB devices.
You can obtain libusb at http://libusb.sf.net/
BE AWARE THAT libusb-0.1.10 contained bugs that might affect your camera!
Use newer version or libusb-0.1.8 instead.
If you want to build this library (for test purposes) on a box without
libusb pass --disable-ptpcam option to configure script.
A PTP camera seems to be required also to take full advantage of this package.


==================
*What is libptp2?*
==================

libptp2 is a library used to communicate with PTP devices like still
imaging cameras.
At the current stage you may use ptpcam tool boundled with libptp2 to perform
some basic operations like downloading photos or setting camera properties.
For other operations and GUI you might consider using libgphoto2
(which contains forked version of libptp2 code), gphoto2 and gtkam; 
see http://www.gphoto.org.


===================
*Supported Cameras*
===================

The list of PTP cameras is constantly growing. Most (if not all) USB still
cameras designed after 2002 are PTP compliant. Below is the list of vendors
implementing PTP in their cameras:

* Kodak
* HP
* Nikon
* Canon
* Panasonic
* Olympus
* Konika
* Minolta
* Fuji
* Ricoh
* Sony

Note that for some HP, Nikon, Canon, Sony and possibly other cameras
you have to switch them to PTP mode as in most cases the camera is dual mode:
PTP and USB Mass Storage or PTP and native.
For some cameras it even changes the Product ID number, so don't panic 
just switch the mode.
Don't ask me how to do it. Refer to camera documentation.

Please note that if your camera is supporting PTP it does NOT mean that
it is capable of performing all PTP operations (like triggering capture,
uploading files or tweaking properties). Sony cameras are good example of
poor PTP implementation where the only thing you can do is downloading files.

=============
*Quick Start*
=============

First of all you need kernel USB support. Please refer to your OS
documentation for more info!
For Linux users you need "Preliminary USB device filesystem" and "USB Host
Controller" (the one for your hardware: EHCI, OHCI or UHCI) support in your
kernel.
CAUTION: there was a bug in Linux Kernel 2.4.18 UHCI driver so make sure you
use more recent kernel!
If you got a kernel support, make sure that your usbdevfs is mounted under
/proc/bus/usb. In my case the fstab entry looks like this:

usb     /proc/bus/usb   usbdevfs        defaults,user 0 0

(NO, the entry in fstab isn't enough, you have to type: mount /proc/bus/usb).
If you want to run ptpcam as regular user read this:
http://gphoto.sourceforge.net/doc/manual/permissions-usb.html
although I suggest performing all tests as root unless you're security
paranoid.

If you have a PTP camera connected to your computer it should be detected by
invoking "ptpcam --list-devices".
In my case the output looks like this:

root@emsi(chroot):~# ptpcam --list-devices
Listing devices...
bus/dev vendorID/prodID device model
002/035 0x040A/0x0400   Kodak mc3
002/036 0x040A/0x0500   DX3500 Digital Camera
001/027 0x040A/0x0160   DC4800 Zoom Digital Camera

If you get something like this:

emsi@emsi(chroot):~> ptpcam --list-devices
Listing devices...
bus/dev vendorID/prodID device model
ERROR: Could not open session!
Try to reset the camera.

it means that you did not read carefully what I wrote above about running
ptpcam as regular user or your camera has stalled (needs reset).

If you need some more debug try --verbose or --verbose=2 thus increasing the
verbose level.

What if you get "Found no PTP devices"?
If you're sure that your camera is a PTP camera please check your OS usb
config. In case of Linux make sure that you have usbdevfs mounted under
/proc/bus/usb. If so read the output of 'cat /proc/bus/usb/devices' and check
if your camera is listed there.
It might be that your camera is not in PTP mode. To verify so, issue:

cat /proc/bus/usb/devices | grep "Cls=06"

If you find something like this:

I:  If#= 0 Alt= 0 #EPs= 3 Cls=06(still) Sub=01 Prot=01 Driver=(none)
                          ^^^^^^^^^^^^^
that means that your camera is in PTP mode and should be detected.
If there is no interface of Class 6 refer to camera documentation to find
how to switch it into PTP mode.

You may also try to use --force option while listing cameras or talking to
it, but don't use it unless you really know what you are doing!!!
--force forces ptpcam to talk to non PTP devices [which makes sense only in
case of PTP device with interface class other than 6 (PTP), like Kodak DC240
with PTP firmware]. BE AWARE that talking PTPish to non PTP devices may
cause harmful damage!!!


============
*What next?*
============

I guess that you'd like to download images or tweak camera properties? ;)

Use "ptpcam --get-all-files" to download all images from your camera.
By default all images are copied to local folder and filename and creation
time is preserved. By default the download operation skips a file if it
finds one with the same name in local folder. This enables you to do
quick-sync downloading only the newly captured files. Of course you can
request to overwrite existing files passin --overwrite on command line.
You may also download a specific file using --get-file=HANDLE providing object
handle as a parameter (you can find it with --list-files).
If ptpcam detects more than one camera you need to pass --bus=BUS-NUMBER and,
or --dev=DEV-NUMBER arguments otherwise ptpcam tries to talk to first detected
camera. If you specify only bus or dev number ptpcam talks to first matching
camera.

To list all available camera properties use "ptpcam --list-properties"
Unfortunately if you have bought a high-end camera or a very expensive PTP
camera it DOES NOT mean that it supports setting any properties. The problem
is that manufacturers do not specify in documentation what properties or
operations are supported by the given camera. In most cases you never know
until you buy the camera. [I'll try to provide a list of supported camera
properties and operations on libptp.sf.net]

Let's say that you get something like this:

root@emsi(chroot):~# ptpcam --list-properties
Listing properties...
Querying: DX3500 Digital Camera
0x5001 : Battery Level

It means that your camera (in this case DX3500 Digital Camera) supports only
one property, which is "Battery Level" (property number 0x5001). Not much,
but you still can try to list its value:

root@emsi(chroot):~# ptpcam --show-property=5001
Camera: DX3500 Digital Camera
Property 'Battery Level'
Current value is 100
Factory default value is 100
The property is read only, enumerated. Allowed values are:
0
10
100

As you can see --show-property argument does not require 0x, that's for your
convenience. ;)
The output of this command is quite verbose. It tells you about Current value,
Factory default value and the property type. The property type may vary among
different cameras! In this camera 'Battery Level' is read only and
enumerated. Allowed values are 0, 10 and 100 which (more or less) means:
0 - low battery lever (may shut down immediately), 10 - medium battery
level, 100 - full battery level. However for a different camera this
property may be defined as range of 1 to 100 with step of 1.
That's just an example.

Now let's look at the list of properties of another camera:

root@emsi(chroot):~# ptpcam --list-properties
Listing properties...
Querying: DC4800 Zoom Digital Camera
0x5001 : Battery Level
0x5003 : Image Size
0x5004 : Compression Setting
0x5005 : White Balance
0x5006 : RGB Gain
0x5007 : F-Number
0x5008 : Focal Length
0x5009 : Focus Distance
0x500a : Focus Mode
0x500b : Exposure Metering Mode
0x500c : Flash Mode
0x500d : Exposure Time
0x500e : Exposure Program Mode
0x500f : Exposure Index (film speed ISO)
0x5010 : Exposure Bias Compensation
0x5011 : Date Time
0x5013 : Still Capture Mode
0x5015 : Sharpness
0x5016 : Digital Zoom
0x5017 : Effect Mode
0x5018 : Burst Number
0x501c : Focus Metering Mode
0xd001 : EK Color Temperature
0xd002 : EK Date Time Stamp Format
0xd003 : EK Beep Mode
0xd004 : EK Video Out
0xd005 : EK Power Saving
0xd006 : EK UI Language

All properties of numbers starting with 0x50 are standard PTP properties,
although for many of them the type (enumerated or range) and value meaning
are NOT specified by the PTP standard and may vary among different cameras!
The properties starting with 0xd0 are PTP extension (in this case EK means
Eastman Kodak extension) and in most cases are not known to public at all.
Probably you will have to reverse-engineer their meaning (I'm eager to
receive a feedback from you in such case! ;).


==========================
* Setting property values*
==========================

For example if you'd like to change the 'Image Size' property you have to do
that in two steps. First display the property using --show-property switch.
Determine whether the property is settable, what is the type of value
(a number or string) and which values are supported!
Keep in mind that some properties are settable only in certain camera
states or modes. Also the valid values may vary depending on current camera
state!
OK. Let's get back to our example. To display property 'Image Size',
which number is 0x5003 you have to type:

root@emsi(chroot):~# ptpcam --show-property=5003
Camera: DC4800 Zoom Digital Camera
Property 'Image Size'
Data type is 0xffff
Current value is "2160x1440"
Factory default value is "2160x1440"
The property is settable, enumerated. Allowed values are:
"2160x1440"
"1800x1200"
"1536x1024"
"1080x720"

As you can see, this camera supports four different image sizes. The
property value is a string (values are printed within quotation marks).
To change 'Image Size' property pass --val=VALUE option to ptpcam while still
specifying the property with --set-property=PROPERTY_NUMBER.
Note that only certain values are allowed.

In our example let it look like this:

root@emsi(chroot):~# ptpcam --set-property=5003 --val=1080x720
Camera: DC4800 Zoom Digital Camera
Property 'Image Size'
Data type is 0xffff
Current value is "2160x1440"
Factory default value is "2160x1440"
The property is settable, enumerated. Allowed values are:
"2160x1440"
"1800x1200"
"1536x1024"
"1080x720"
Setting property value to '1080x720'

If everything goes OK, no error is displayed. You may verify, of course,
if the property value was set properly.
If you get something like this:

PTP: Invalid Device Prop Value

it indicates that the property value was not set due to invalid values.

Keep in mind that in most cases changing one property may cause another one
property to change! That happens especially in any Automated modes!!!

FIXME: The device should report that another property was changed issuing
DevicePropChanged event! We may catch that and report to user.

=================
*Common problems*
=================

Sometimes it might happen that the device claims to support given property
but does not respond to --show-property request. In most cases it's because of
improper PTP implementation on the camera side.
Sometimes the list of supported properties might vary while changing
camera mode.
Moreover, given property may not have any meaning in a certain camera state.
For example setting or getting 'Focus Distance' property may not be allowed
in automated camera mode! In such case try to switch the camera to manual
mode.
For example my Kodak DC4800 fails over --show-property=5006
(which is "RGB Gain") if RGB Gain is not set. It looks like this:

root@emsi(chroot):~# ptpcam --show-property=5006
Camera: DC4800 Zoom Digital Camera
Property 'RGB Gain'
ERROR: Could not get device property description!
Try to reset the camera.

In such a case you need to issue a --reset request to the camera:

root@emsi(chroot):~# ptpcam --reset
Resetting input pipe!
Device status OK

It's a good practice to verify whether the reset went OK issuing
--list-devices. Sometimes one or two more reset may be needed to properly
reset the camera.


=========================
*Standard PTP Properties*
=========================


Below I am providing a short list of properties and their meaning values
according to PTP specification.

0x5001 : Battery Level
	 DataType: UINT8
	 Forms: Enum, Range
	 PTP standard does not define any special values, however for number
	 of Kodak devices 0 means no power (alternative power source), 10
	 means medium battery lever and 100 means full battery.

0x5002 : Functional Mode
	 DataType: UINT16
	 Forms: Enum
	 This property indicates whether the device is in an alternate mode
	 that provides a different set of capabilities (i.e. supported
	 operations, properties, events, etc.). If the device supports only
	 one mode, this value should always be zero.
	 PTP standard specifies following values:
	 0x0000 - Standard Mode
	 0x0001 - Sleep State
	 All other values with bit 15 set to 0 are Reserved.
	 All values with bit 15 set to 1 are Vendor Specific.

0x5003 : Image Size
	 DataType: String
	 Forms: Enum, Range
	 "This property describes the height and width of the image that will 
	 be captured in pixels supported by the device." The string is of the
	 format "WxH" where the W represents the width and the H represents
	 the height represented as unsigned integers.

0x5004 : Compression Setting
	 DataType: UINT8
	 Forms: Enum, Range
	 Quoted from PTP (PIMA 15740) specs:
	 "Compression setting is a property intended to be as close as is
	 possible to being linear with respect to perceived image quality
	 over a broad range of scene content, and is represented by either a
	 range or an enumeration of integers. Low integers are used to
	 represent low quality (i.e. maximum compression) while high
	 integers are used to represent high quality (i.e. minimum
	 compression). No attempt is made in this standard (PTP) to assign
	 specific values of this property with any absolute benchmark, so
	 any available settings on a device are relative to that device only
	 and are therefore device-specific."

0x5005 : White Balance
	 DataType: UINT16
	 Forms: Enum
	 PTP standard specifies following values:
	 0x0000 - Undefined
	 0x0001 - Manual
	 0x0002 - Automatic
	 0x0003 - One-push Automatic
	 0x0004 - Daylight
	 0x0005 - Fluorescent
	 0x0006 - Tungsten
	 0x0007 - Flash
	 All other values with bit 15 set to zero are reserved.
	 All values with bit 15 set to 1 are vendor-defined.

	 Manual means that white balance is set directly using the RGB Gain
	 (0x5006) property.
	 Automatic indicates that the device sets this property using some
	 kind of automatic mechanism.
	 One-push Automatic means that the user must press the capture
	 button while pointing objective at a white field, at which time the
	 device determines the white balance setting.
	 Daylight means that the device sets the white balance to a value
	 that is suitable for daylight use.
	 Tungsten means that the device sets the white balance to a value
	 that is suitable for use with a tungsten light source.
	 Flash means that the white balance is set to a value that is
	 suitable for flash conditions.

0x5006 : RGB Gain
	 DataType: String
	 Forms: Enum, Range
	 This property takes the form of a string that is parsed as follows:
	 "R:G:B" where the R represents the red gain, the G represents the
	 green gain, and the B represents the blue gain. For example, for
	 an RGB ratio of red=2, green=3 and blue=4, the RGB string could be
	 "2:3:4" or "200:300:400". Each part of the RGB string is in decimal
	 form of UINT16 integer.

0x5007 : F-Number
	 DataType: UINT16
	 Forms: Enum
	 This property represents the aperture of the lens. The units are
	 equal to the F-Number scaled by 100.
	 Example values are: 280 (2.8), 560 (5.6), 800 (8), etc.

0x5008 : Focal Length
	 DataType: UINT32
	 Forms: Enum, Range
	 This property represents the 35mm equivalent focal length. The
	 units are equal to focal length in millimeters multiplied by 100.

0x5009 : Focus Distance
	 DataType: UINT16
	 Forms: Enum, Range
	 Value of this property represents the focus distance in
	 millimeters. A value of 0xFFFF means infinity.

0x500a : Focus Mode
	 DataType: UINT16
	 Forms: Enum
	 PTP standard specifies following values:
	 0x0000 - Undefined
	 0x0001 - Manual
	 0x0002 - Automatic
	 0x0003 - Automatic Macro (close-up)
	 All other values with bit 15 set to zero are reserver.
	 All values with bit 15 set to 1 are vendor-defined.

0x500b : Exposure Metering Mode
	 DataType: UINT16
	 Forms: Enum
	 PTP standard specifies following values:
	 0x0000 - Undefined
	 0x0001 - Average
	 0x0002 - Center-weighted-average
	 0x0003 - Multi-spot
	 0x0004 - Center-spot
	 All other values with bit 15 set to zero are reserved.
	 All values with bit 15 set to 1 are vendor-defined.

0x500c : Flash Mode
	 DataType: UINT16
	 Forms: Enum
	 PTP standard specifies following values:
	 0x0000 - Undefined
	 0x0001 - Auto flash
	 0x0002 - Flash off
	 0x0003 - Fill flash
	 0x0004 - Red eye auto
	 0x0005 - Red eye fill
	 0x0006 - External flash
	 All other values with bit 15 set to zero are reserved.
	 All values with bit 15 set to 1 are vendor-defined.

0x500d : Exposure Time
	 DataType: UINT32
	 Forms: Enum, Range
	 This property represents the shutter speed. It has units of seconds
	 scaled by 10000.
	 For example:
	 40 means 1/250 sec.
	 80 means 1/125 sec.
	 160 means 1/62.5 sec. and so on.

0x500e : Exposure Program Mode
	 DataType: UINT16
	 Forms: Enum
	 PTP standard specifies following values:
	 0x0000 - Undefined
	 0x0001 - Manual
	 0x0002 - Automatic
	 0x0003 - Aperture Priority
	 0x0004 - Shutter Priority
	 0x0005 - Program Creative (greater depth of field)
	 0x0006 - Program Action (faster shutter speed)
	 0x0007 - Portrait
	 All other values with bit 15 set to zero are reserved.
	 All values with bit 15 set to 1 are vendor-defined.

0x500f : Exposure Index (film speed ISO)
	 DataType: UINT16
	 Forms: Enum, Range
	 Value of this property represents the emulation of film speed
	 setting. The setting corresponds to the ISO designations. A value of
	 0xFFFF means automatic ISO setting.

0x5010 : Exposure Bias Compensation
	 DataType: INT16
	 Forms: Enum, Range
	 Value of this property represents the exposure compensation. The
	 units are in "stops" scaled by 1000. The setting values are in
	 APEX.
	 For example the value of -2000 (means 4X less energy on sensor)
	 two stops less exposure (darker image). The value of 1500 means
	 one and a half stops more exposure (2.25X more energy on sensors).

0x5011 : Date Time
	 DataType: String
	 Forms: none
	 Value of this property represents the device date and time in ISO
	 8601 format. It's a string of "YYYYMMDDThhmmss.s", where YYYY
	 represents the year, MM represents the month (01-12), DD is the day
	 of the month (01-31), T is a constant character, hh represents the
	 hour since midnight (00-23), mm is the minutes (00-59) past the
	 hour and ss.s is the seconds past the minute, with the ".s" being
	 optional tenth of second past the second. The string can be
	 optionally appended with Z to indicate UTC, or +/-hhmm to indicate
	 that time is relative to a time zone.
	 
0x5012 : Pre-Capture Delay
	 DataType: UINT32
	 Forms: Enum, Range
	 Value of this property represents the amount of time delay that
	 should be inserted between the capture trigger and the initiation
	 of the data capture. This value shall be interpreted as
	 milliseconds. 
	 It has nothing to do with the "0x5019 : Burst Interval" and the
	 "0x501b : Timelapse Interval"!

0x5013 : Still Capture Mode
	 DataType: UINT16
	 Forms: Enum
	 PTP standard specifies following values:
	 0x0000 - Undefined
	 0x0001 - Normal
	 0x0002 - Burst
	 0x0003 - Timelapse
	 All other values with bit 15 set to zero are reserved.
	 All values with bit 15 set to 1 are vendor-defined.

0x5014 : Contrast
	 DataType: UINT8
	 Forms: Enum, Range
	 Value of this property represents the contrast of a captured image.
	 The minimum supported value is used to represent the least
	 contrast, while the maximum value represents the most contrast.

0x5015 : Sharpness
	 DataType: UINT8
	 Forms: Enum, Range
	 Value of this property represents the sharpness of a captured
	 image. The minimum value is used to represent the least amount of
	 sharpness, while the maximum value represents highest sharpness.

0x5016 : Digital Zoom
	 DataType: UINT8
	 Forms: Enum, Range
	 Value of this property represents the effective zoom ratio of
	 digital camera's acquired image scaled by a factor of 10.
	 No digital zoom (1) represents the value of 10. The minimum value
	 represents minimum digital zoom (no digital zoom), typically
	 10, while the maximum value represents the maximum digital zoom.

0x5017 : Effect Mode
	 DataType: UINT16
	 Forms: Enum
	 PTP standard specifies following values:
	 0x0000 - Undefined
	 0x0001 - Standard (color)
	 0x0002 - Black & White
	 0x0003 - Sepia
	 All other values with bit 15 set to zero are reserved.
	 All values with bit 15 set to 1 are vendor-defined.

0x5018 : Burst Number
	 DataType: UINT16
	 Forms: Enum, Range
	 Value of this property specifies the number of images that the
	 device will attempt to capture upon initiation of a burst capture.

0x5019 : Burst Interval
	 Data Type: UINT16
	 Forms: Enum, Range
	 Value of this property represents the delay between captures upon
	 initialization of a burst captures. This value is expressed in
	 milliseconds.

0x501a : Timelapse Number
	 DataType: UINT16
	 Forms: Enum, Range
	 Value of this property represents the number of images that the
	 device will attempt to capture upon initiation of a time-lapse
	 capture.

0x501b : Timelapse Interval
	 DataType: UINT32
	 Forms: Enum, Range
	 Value of this property represents the delay between captures upon
	 initialization of a time-lapse capture. This value is expressed in
	 milliseconds

0x501c : Focus Metering Mode
	 DataType: UINT16
	 Forms: Enum
	 PTP standard specifies following values:
	 0x0000 - Undefined
	 0x0001 - Center-spot
	 0x0002 - Multi-spot
	 All other values with bit 15 set to zero are reserved.
	 All values with bit 15 set to 1 are vendor-defined.

0x501d : UploadURL
	 DataType: String
	 Forms: none
	 This property describes the URL that the receiver may use to upload
	 images.

0x501e : Artist
	 DataType: string
	 Forms: none
	 The name of the author of pictures.
	 This property is intended to populate the Artist field of an EXIF
	 images.

0x501f : Copyright
	 DataType: string
	 Forms: none
	 Copyright notification.
	 This property is intended to populate the Copyright field of an
	 EXIF images.


===================
* Camera abilities*
===================

A couple of random camera abilities:

0.048332 PTP/library.c(2): Device info:
0.048347 PTP/library.c(2): Manufacturer: Nikon Corporation
0.048359 PTP/library.c(2):   model: E2500
0.048370 PTP/library.c(2):   device version: E2500v1.0
0.048380 PTP/library.c(2): Vendor extension description: Nikon PTP Extensions
0.048391 PTP/library.c(2): Supported operations:
0.048402 PTP/library.c(2):   0x1001
0.048413 PTP/library.c(2):   0x1002
0.048424 PTP/library.c(2):   0x1003
0.048435 PTP/library.c(2):   0x1004
0.048446 PTP/library.c(2):   0x1005
0.048457 PTP/library.c(2):   0x1006
0.048468 PTP/library.c(2):   0x1007
0.048479 PTP/library.c(2):   0x1008
0.048490 PTP/library.c(2):   0x1009
0.048500 PTP/library.c(2):   0x100a
0.048511 PTP/library.c(2):   0x100b
0.048522 PTP/library.c(2):   0x101b


0.309772 PTP/library.c(2): Device info:
0.309976 PTP/library.c(2): Manufacturer: Canon Inc.
0.310211 PTP/library.c(2):   model: Canon DIGITAL IXUS 400
0.310427 PTP/library.c(2):   device version:
0.310634 PTP/library.c(2): Vendor extension description: (null)
0.310861 PTP/library.c(2): Supported operations:
0.311066 PTP/library.c(2):   0x1001
0.311260 PTP/library.c(2):   0x1002
0.311455 PTP/library.c(2):   0x1003
0.311650 PTP/library.c(2):   0x1004
0.311844 PTP/library.c(2):   0x1005
0.312039 PTP/library.c(2):   0x1006
0.312233 PTP/library.c(2):   0x1007
0.312476 PTP/library.c(2):   0x1008
0.312674 PTP/library.c(2):   0x1009
0.312869 PTP/library.c(2):   0x100a
0.313064 PTP/library.c(2):   0x100b
0.313259 PTP/library.c(2):   0x100c
0.313457 PTP/library.c(2):   0x100d
0.313651 PTP/library.c(2):   0x100e
0.313846 PTP/library.c(2):   0x100f
0.314039 PTP/library.c(2):   0x1012
0.314233 PTP/library.c(2):   0x1014
0.321675 PTP/library.c(2):   0x1015
0.322120 PTP/library.c(2):   0x1016
0.322321 PTP/library.c(2):   0x101b
0.322518 PTP/library.c(2):   0x9001
0.322713 PTP/library.c(2):   0x9002
0.322909 PTP/library.c(2):   0x9003
0.323103 PTP/library.c(2):   0x9006
0.323299 PTP/library.c(2):   0x9008
0.323493 PTP/library.c(2):   0x9009
0.323689 PTP/library.c(2):   0x900a
0.323883 PTP/library.c(2):   0x900b
0.324079 PTP/library.c(2):   0x900c
0.324273 PTP/library.c(2):   0x900d
0.324583 PTP/library.c(2):   0x900e
0.324789 PTP/library.c(2):   0x900f
0.324985 PTP/library.c(2):   0x9010
0.325181 PTP/library.c(2):   0x9011
0.325377 PTP/library.c(2):   0x9012
0.325573 PTP/library.c(2):   0x9013
0.325767 PTP/library.c(2):   0x9014
0.325966 PTP/library.c(2):   0x9015
0.326162 PTP/library.c(2):   0x9018
0.326357 PTP/library.c(2):   0x9019
0.326554 PTP/library.c(2):   0x901a
0.326750 PTP/library.c(2):   0x901b
0.326945 PTP/library.c(2):   0x901c
0.327142 PTP/library.c(2):   0x901d
0.327337 PTP/library.c(2):   0x901e
0.327533 PTP/library.c(2):   0x901f
0.327729 PTP/library.c(2):   0x9020
0.327925 PTP/library.c(2):   0x9021
0.555111 PTP2/library.c(2): Events Supported:
0.555118 PTP2/library.c(2):   0x4001
0.555125 PTP2/library.c(2):   0x4002
0.555132 PTP2/library.c(2):   0x4003
0.555138 PTP2/library.c(2):   0x4004
0.555145 PTP2/library.c(2):   0x4005
0.555152 PTP2/library.c(2):   0x4006
0.555159 PTP2/library.c(2):   0x4008
0.555165 PTP2/library.c(2):   0x400a
0.555172 PTP2/library.c(2):   0x400c
0.555179 PTP2/library.c(2):   0x400d
0.555185 PTP2/library.c(2):   0xc001
0.555192 PTP2/library.c(2):   0xc005
0.555199 PTP2/library.c(2):   0xc006
0.555206 PTP2/library.c(2):   0xc007
0.555212 PTP2/library.c(2):   0xc008
0.555219 PTP2/library.c(2):   0xc009
0.555226 PTP2/library.c(2):   0xc00a
0.555233 PTP2/library.c(2):   0xc00b
0.555239 PTP2/library.c(2):   0xc00c
0.555246 PTP2/library.c(2):   0xc00d
0.555253 PTP2/library.c(2): Device Properties Supported:
0.555260 PTP2/library.c(2):   0xd001
0.555267 PTP2/library.c(2):   0xd002
0.555273 PTP2/library.c(2):   0xd003
0.555280 PTP2/library.c(2):   0xd02c
0.555287 PTP2/library.c(2):   0xd02d
0.555294 PTP2/library.c(2):   0xd02e
0.555300 PTP2/library.c(2):   0xd02f
0.555307 PTP2/library.c(2):   0xd030
0.555314 PTP2/library.c(2):   0xd031
0.555320 PTP2/library.c(2):   0xd032
0.555327 PTP2/library.c(2):   0xd033
0.555334 PTP2/library.c(2):   0xd034
0.555341 PTP2/library.c(2):   0xd045
0.555347 PTP2/library.c(2):   0xd046
0.555354 PTP2/library.c(2):   0xd047
0.555361 PTP2/library.c(2):   0xd048
0.555368 PTP2/library.c(2):   0xd049

0.509050 PTP/library.c(2): Device info:
0.509067 PTP/library.c(2): Manufacturer: Canon Inc.
0.509072 PTP/library.c(2):   model: Canon DIGITAL IXUS II
0.509077 PTP/library.c(2):   device version: 
0.509082 PTP/library.c(2): Vendor extension description: (null)
0.509091 PTP/library.c(2): Supported operations:
0.509096 PTP/library.c(2):   0x1001
0.509101 PTP/library.c(2):   0x1002
0.509106 PTP/library.c(2):   0x1003
0.509110 PTP/library.c(2):   0x1004
0.509114 PTP/library.c(2):   0x1005
0.509119 PTP/library.c(2):   0x1006
0.509142 PTP/library.c(2):   0x1007
0.509147 PTP/library.c(2):   0x1008
0.509152 PTP/library.c(2):   0x1009
0.509156 PTP/library.c(2):   0x100a
0.509160 PTP/library.c(2):   0x100b
0.509165 PTP/library.c(2):   0x100c
0.509169 PTP/library.c(2):   0x100d
0.509173 PTP/library.c(2):   0x100e
0.509178 PTP/library.c(2):   0x100f
0.509182 PTP/library.c(2):   0x1012
0.509186 PTP/library.c(2):   0x1014
0.509191 PTP/library.c(2):   0x1015
0.509195 PTP/library.c(2):   0x1016
0.509199 PTP/library.c(2):   0x101b
0.509203 PTP/library.c(2):   0x9001
0.509208 PTP/library.c(2):   0x9002
0.509212 PTP/library.c(2):   0x9003
0.509216 PTP/library.c(2):   0x9006
0.509221 PTP/library.c(2):   0x9008
0.509225 PTP/library.c(2):   0x9009
0.509229 PTP/library.c(2):   0x900a
0.509234 PTP/library.c(2):   0x900b
0.509238 PTP/library.c(2):   0x900c
0.509242 PTP/library.c(2):   0x900d
0.509247 PTP/library.c(2):   0x900e
0.509251 PTP/library.c(2):   0x900f
0.509255 PTP/library.c(2):   0x9010
0.509259 PTP/library.c(2):   0x9011
0.509264 PTP/library.c(2):   0x9012
0.509268 PTP/library.c(2):   0x9013
0.509272 PTP/library.c(2):   0x9014
0.509277 PTP/library.c(2):   0x9015
0.509281 PTP/library.c(2):   0x9018
0.509285 PTP/library.c(2):   0x9019
0.509290 PTP/library.c(2):   0x901a
0.509294 PTP/library.c(2):   0x901b
0.509298 PTP/library.c(2):   0x901c
0.509303 PTP/library.c(2):   0x901d
0.509307 PTP/library.c(2):   0x901e
0.509311 PTP/library.c(2):   0x901f
0.509316 PTP/library.c(2):   0x9020
0.509320 PTP/library.c(2):   0x9021

