"Fossies" - the Fresh Open Source Software Archive

Member "libgphoto2-2.5.27/camlibs/ptp2/ptp.h" (14 Feb 2021, 198744 Bytes) of package /linux/privat/libgphoto2-2.5.27.tar.bz2:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "ptp.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 2.5.26_vs_2.5.27.

    1 /* ptp.h
    2  *
    3  * Copyright (C) 2001 Mariusz Woloszyn <emsi@ipartners.pl>
    4  * Copyright (C) 2003-2020 Marcus Meissner <marcus@jet.franken.de>
    5  * Copyright (C) 2006-2008 Linus Walleij <triad@df.lth.se>
    6  *
    7  * This library is free software; you can redistribute it and/or
    8  * modify it under the terms of the GNU Lesser General Public
    9  * License as published by the Free Software Foundation; either
   10  * version 2 of the License, or (at your option) any later version.
   11  *
   12  * This library is distributed in the hope that it will be useful,
   13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   15  * Lesser General Public License for more details.
   16  *
   17  * You should have received a copy of the GNU Lesser General Public
   18  * License along with this library; if not, write to the
   19  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
   20  * Boston, MA  02110-1301  USA
   21  */
   22 
   23 #ifndef __PTP_H__
   24 #define __PTP_H__
   25 
   26 #include <stdarg.h>
   27 #include <time.h>
   28 #include <sys/time.h>
   29 #if defined(HAVE_ICONV) && defined(HAVE_LANGINFO_H)
   30 #include <iconv.h>
   31 #endif
   32 #include "gphoto2-endian.h"
   33 #include "device-flags.h"
   34 
   35 #ifdef __cplusplus
   36 extern "C" {
   37 #endif /* __cplusplus */
   38 
   39 /* PTP datalayer byteorder */
   40 
   41 #define PTP_DL_BE           0xF0
   42 #define PTP_DL_LE           0x0F
   43 
   44 /* USB interface class */
   45 #ifndef USB_CLASS_PTP
   46 #define USB_CLASS_PTP           6
   47 #endif
   48 
   49 /* PTP request/response/event general PTP container (transport independent) */
   50 
   51 struct _PTPContainer {
   52     uint16_t Code;
   53     uint32_t SessionID;
   54     uint32_t Transaction_ID;
   55     /* params  may be of any type of size less or equal to uint32_t */
   56     uint32_t Param1;
   57     uint32_t Param2;
   58     uint32_t Param3;
   59     /* events can only have three parameters */
   60     uint32_t Param4;
   61     uint32_t Param5;
   62     /* the number of meaningfull parameters */
   63     uint8_t  Nparam;
   64 };
   65 typedef struct _PTPContainer PTPContainer;
   66 
   67 /* PTP USB Bulk-Pipe container */
   68 /* USB bulk max packet length for high speed endpoints */
   69 /* The max packet is set to 512 bytes. The spec says
   70  * "end of data transfers are signaled by short packets or NULL
   71  * packets". It never says anything about 512, but current
   72  * implementations seem to have chosen this value, which also
   73  * happens to be the size of an USB 2.0 HS endpoint, even though
   74  * this is not necessary.
   75  *
   76  * Previously we had this as 4096 for MTP devices. We have found
   77  * and fixed the bugs that made this necessary and it can be 512 again.
   78  *
   79  * USB 3.0 has now 1024 byte EPs.
   80  */
   81 #define PTP_USB_BULK_HS_MAX_PACKET_LEN_WRITE    512
   82 #define PTP_USB_BULK_HS_MAX_PACKET_LEN_READ   512
   83 #define PTP_USB_BULK_SS_MAX_PACKET_LEN_WRITE    1024
   84 #define PTP_USB_BULK_SS_MAX_PACKET_LEN_READ   1024
   85 #define PTP_USB_BULK_HDR_LEN        (2*sizeof(uint32_t)+2*sizeof(uint16_t))
   86 #define PTP_USB_BULK_PAYLOAD_LEN_WRITE  (PTP_USB_BULK_SS_MAX_PACKET_LEN_WRITE-PTP_USB_BULK_HDR_LEN)
   87 #define PTP_USB_BULK_PAYLOAD_LEN_READ   (PTP_USB_BULK_SS_MAX_PACKET_LEN_READ-PTP_USB_BULK_HDR_LEN)
   88 #define PTP_USB_BULK_REQ_LEN    (PTP_USB_BULK_HDR_LEN+5*sizeof(uint32_t))
   89 
   90 struct _PTPUSBBulkContainer {
   91     uint32_t length;
   92     uint16_t type;
   93     uint16_t code;
   94     uint32_t trans_id;
   95     union {
   96         struct {
   97             uint32_t param1;
   98             uint32_t param2;
   99             uint32_t param3;
  100             uint32_t param4;
  101             uint32_t param5;
  102         } params;
  103        /* this must be set to the maximum of PTP_USB_BULK_PAYLOAD_LEN_WRITE
  104         * and PTP_USB_BULK_PAYLOAD_LEN_READ */
  105         unsigned char data[PTP_USB_BULK_PAYLOAD_LEN_READ];
  106     } payload;
  107 };
  108 typedef struct _PTPUSBBulkContainer PTPUSBBulkContainer;
  109 
  110 /* PTP USB Asynchronous Event Interrupt Data Format */
  111 struct _PTPUSBEventContainer {
  112     uint32_t length;
  113     uint16_t type;
  114     uint16_t code;
  115     uint32_t trans_id;
  116     uint32_t param1;
  117     uint32_t param2;
  118     uint32_t param3;
  119 };
  120 typedef struct _PTPUSBEventContainer PTPUSBEventContainer;
  121 
  122 struct _PTPCanon_directtransfer_entry {
  123     uint32_t    oid;
  124     char        *str;
  125 };
  126 typedef struct _PTPCanon_directtransfer_entry PTPCanon_directtransfer_entry;
  127 
  128 /* USB container types */
  129 
  130 #define PTP_USB_CONTAINER_UNDEFINED     0x0000
  131 #define PTP_USB_CONTAINER_COMMAND       0x0001
  132 #define PTP_USB_CONTAINER_DATA          0x0002
  133 #define PTP_USB_CONTAINER_RESPONSE      0x0003
  134 #define PTP_USB_CONTAINER_EVENT         0x0004
  135 
  136 /* PTP/IP definitions */
  137 #define PTPIP_INIT_COMMAND_REQUEST  1
  138 #define PTPIP_INIT_COMMAND_ACK      2
  139 #define PTPIP_INIT_EVENT_REQUEST    3
  140 #define PTPIP_INIT_EVENT_ACK        4
  141 #define PTPIP_INIT_FAIL         5
  142 #define PTPIP_CMD_REQUEST       6
  143 #define PTPIP_CMD_RESPONSE      7
  144 #define PTPIP_EVENT         8
  145 #define PTPIP_START_DATA_PACKET     9
  146 #define PTPIP_DATA_PACKET       10
  147 #define PTPIP_CANCEL_TRANSACTION    11
  148 #define PTPIP_END_DATA_PACKET       12
  149 #define PTPIP_PING          13
  150 #define PTPIP_PONG          14
  151 
  152 struct _PTPIPHeader {
  153     uint32_t    length;
  154     uint32_t    type;
  155 };
  156 typedef struct _PTPIPHeader PTPIPHeader;
  157 
  158 /* Vendor IDs */
  159 /* List is linked from here: http://www.imaging.org/site/IST/Standards/PTP_Standards.aspx */
  160 #define PTP_VENDOR_EASTMAN_KODAK        0x00000001
  161 #define PTP_VENDOR_SEIKO_EPSON          0x00000002
  162 #define PTP_VENDOR_AGILENT          0x00000003
  163 #define PTP_VENDOR_POLAROID         0x00000004
  164 #define PTP_VENDOR_AGFA_GEVAERT         0x00000005
  165 #define PTP_VENDOR_MICROSOFT            0x00000006
  166 #define PTP_VENDOR_EQUINOX          0x00000007
  167 #define PTP_VENDOR_VIEWQUEST            0x00000008
  168 #define PTP_VENDOR_STMICROELECTRONICS       0x00000009
  169 #define PTP_VENDOR_NIKON            0x0000000A
  170 #define PTP_VENDOR_CANON            0x0000000B
  171 #define PTP_VENDOR_FOTONATION           0x0000000C
  172 #define PTP_VENDOR_PENTAX           0x0000000D
  173 #define PTP_VENDOR_FUJI             0x0000000E
  174 #define PTP_VENDOR_NDD_MEDICAL_TECHNOLOGIES 0x00000012
  175 #define PTP_VENDOR_SAMSUNG          0x0000001a
  176 #define PTP_VENDOR_PARROT           0x0000001b
  177 #define PTP_VENDOR_PANASONIC            0x0000001c
  178 /* not from standards papers, but from traces: */
  179 #define PTP_VENDOR_SONY             0x00000011 /* observed in the A900 */
  180 
  181 /* Vendor extension ID used for MTP (occasionally, usually 6 is used) */
  182 #define PTP_VENDOR_MTP          0xffffffff
  183 
  184 /* gphoto overrides */
  185 #define PTP_VENDOR_GP_OLYMPUS          0x0000fffe
  186 #define PTP_VENDOR_GP_OLYMPUS_OMD      0x0000fffd
  187 #define PTP_VENDOR_GP_LEICA            0x0000fffc
  188 
  189 
  190 /* Operation Codes */
  191 
  192 /* PTP v1.0 operation codes */
  193 #define PTP_OC_Undefined                0x1000
  194 #define PTP_OC_GetDeviceInfo            0x1001
  195 #define PTP_OC_OpenSession              0x1002
  196 #define PTP_OC_CloseSession             0x1003
  197 #define PTP_OC_GetStorageIDs            0x1004
  198 #define PTP_OC_GetStorageInfo           0x1005
  199 #define PTP_OC_GetNumObjects            0x1006
  200 #define PTP_OC_GetObjectHandles         0x1007
  201 #define PTP_OC_GetObjectInfo            0x1008
  202 #define PTP_OC_GetObject                0x1009
  203 #define PTP_OC_GetThumb                 0x100A
  204 #define PTP_OC_DeleteObject             0x100B
  205 #define PTP_OC_SendObjectInfo           0x100C
  206 #define PTP_OC_SendObject               0x100D
  207 #define PTP_OC_InitiateCapture          0x100E
  208 #define PTP_OC_FormatStore              0x100F
  209 #define PTP_OC_ResetDevice              0x1010
  210 #define PTP_OC_SelfTest                 0x1011
  211 #define PTP_OC_SetObjectProtection      0x1012
  212 #define PTP_OC_PowerDown                0x1013
  213 #define PTP_OC_GetDevicePropDesc        0x1014
  214 #define PTP_OC_GetDevicePropValue       0x1015
  215 #define PTP_OC_SetDevicePropValue       0x1016
  216 #define PTP_OC_ResetDevicePropValue     0x1017
  217 #define PTP_OC_TerminateOpenCapture     0x1018
  218 #define PTP_OC_MoveObject               0x1019
  219 #define PTP_OC_CopyObject               0x101A
  220 #define PTP_OC_GetPartialObject         0x101B
  221 #define PTP_OC_InitiateOpenCapture      0x101C
  222 /* PTP v1.1 operation codes */
  223 #define PTP_OC_StartEnumHandles     0x101D
  224 #define PTP_OC_EnumHandles      0x101E
  225 #define PTP_OC_StopEnumHandles      0x101F
  226 #define PTP_OC_GetVendorExtensionMaps   0x1020
  227 #define PTP_OC_GetVendorDeviceInfo  0x1021
  228 #define PTP_OC_GetResizedImageObject    0x1022
  229 #define PTP_OC_GetFilesystemManifest    0x1023
  230 #define PTP_OC_GetStreamInfo        0x1024
  231 #define PTP_OC_GetStream        0x1025
  232 
  233 /* Eastman Kodak extension Operation Codes */
  234 #define PTP_OC_EK_GetSerial     0x9003
  235 #define PTP_OC_EK_SetSerial     0x9004
  236 #define PTP_OC_EK_SendFileObjectInfo    0x9005
  237 #define PTP_OC_EK_SendFileObject    0x9006
  238 #define PTP_OC_EK_SetText       0x9008
  239 
  240 /* Canon extension Operation Codes */
  241 #define PTP_OC_CANON_GetPartialObjectInfo   0x9001
  242 /* 9002 - sends 2 uint32, nothing back  */
  243 #define PTP_OC_CANON_SetObjectArchive       0x9002
  244 #define PTP_OC_CANON_KeepDeviceOn       0x9003
  245 #define PTP_OC_CANON_LockDeviceUI       0x9004
  246 #define PTP_OC_CANON_UnlockDeviceUI     0x9005
  247 #define PTP_OC_CANON_GetObjectHandleByName  0x9006
  248 /* no 9007 observed yet */
  249 #define PTP_OC_CANON_InitiateReleaseControl 0x9008
  250 #define PTP_OC_CANON_TerminateReleaseControl    0x9009
  251 #define PTP_OC_CANON_TerminatePlaybackMode  0x900A
  252 #define PTP_OC_CANON_ViewfinderOn       0x900B
  253 #define PTP_OC_CANON_ViewfinderOff      0x900C
  254 #define PTP_OC_CANON_DoAeAfAwb          0x900D
  255 
  256 /* 900e - send nothing, gets 5 uint16t in 32bit entities back in 20byte datablob */
  257 #define PTP_OC_CANON_GetCustomizeSpec       0x900E
  258 #define PTP_OC_CANON_GetCustomizeItemInfo   0x900F
  259 #define PTP_OC_CANON_GetCustomizeData       0x9010
  260 #define PTP_OC_CANON_SetCustomizeData       0x9011
  261 #define PTP_OC_CANON_GetCaptureStatus       0x9012
  262 #define PTP_OC_CANON_CheckEvent         0x9013
  263 #define PTP_OC_CANON_FocusLock          0x9014
  264 #define PTP_OC_CANON_FocusUnlock        0x9015
  265 #define PTP_OC_CANON_GetLocalReleaseParam   0x9016
  266 #define PTP_OC_CANON_SetLocalReleaseParam   0x9017
  267 #define PTP_OC_CANON_AskAboutPcEvf      0x9018
  268 #define PTP_OC_CANON_SendPartialObject      0x9019
  269 #define PTP_OC_CANON_InitiateCaptureInMemory    0x901A
  270 #define PTP_OC_CANON_GetPartialObjectEx     0x901B
  271 #define PTP_OC_CANON_SetObjectTime      0x901C
  272 #define PTP_OC_CANON_GetViewfinderImage     0x901D
  273 #define PTP_OC_CANON_GetObjectAttributes    0x901E
  274 #define PTP_OC_CANON_ChangeUSBProtocol      0x901F
  275 #define PTP_OC_CANON_GetChanges         0x9020
  276 #define PTP_OC_CANON_GetObjectInfoEx        0x9021
  277 #define PTP_OC_CANON_InitiateDirectTransfer 0x9022
  278 #define PTP_OC_CANON_TerminateDirectTransfer    0x9023
  279 #define PTP_OC_CANON_SendObjectInfoByPath   0x9024
  280 #define PTP_OC_CANON_SendObjectByPath       0x9025
  281 #define PTP_OC_CANON_InitiateDirectTansferEx    0x9026
  282 #define PTP_OC_CANON_GetAncillaryObjectHandles  0x9027
  283 #define PTP_OC_CANON_GetTreeInfo        0x9028
  284 #define PTP_OC_CANON_GetTreeSize        0x9029
  285 #define PTP_OC_CANON_NotifyProgress         0x902A
  286 #define PTP_OC_CANON_NotifyCancelAccepted   0x902B
  287 /* 902c: no parms, read 3 uint32 in data, no response parms */
  288 #define PTP_OC_CANON_902C           0x902C
  289 #define PTP_OC_CANON_GetDirectory       0x902D
  290 #define PTP_OC_CANON_902E           0x902E
  291 #define PTP_OC_CANON_902F           0x902F  /* used during camera init */
  292 
  293 #define PTP_OC_CANON_SetPairingInfo     0x9030
  294 #define PTP_OC_CANON_GetPairingInfo     0x9031
  295 #define PTP_OC_CANON_DeletePairingInfo      0x9032
  296 #define PTP_OC_CANON_GetMACAddress      0x9033 /* no args */
  297 /*
  298 0000  12 00 00 00 02 00 33 90-1a 00 00 00 2c 9e fc c8  ......3.....,...
  299 0010  33 e3                  -                         3.
  300  */
  301 
  302 /* 9034: 1 param, no parms returned */
  303 #define PTP_OC_CANON_SetDisplayMonitor      0x9034
  304 #define PTP_OC_CANON_PairingComplete        0x9035
  305 #define PTP_OC_CANON_GetWirelessMAXChannel  0x9036
  306 
  307 #define PTP_OC_CANON_GetWebServiceSpec      0x9068 /* no args */
  308 /* data returned:
  309 0000  1e 00 00 00 02 00 68 90-1a 00 00 00 00 01 08 00  ......h.........
  310 0010  14 00 bc ce 00 00 78 00-78 00 00 14 00 00        ......x.x.....
  311 */
  312 
  313 #define PTP_OC_CANON_GetWebServiceData      0x9069 /* no args */
  314 #define PTP_OC_CANON_SetWebServiceData      0x906A
  315 #define PTP_OC_CANON_DeleteWebServiceData   0x906B
  316 #define PTP_OC_CANON_GetRootCertificateSpec 0x906C /* no args */
  317 /*
  318 0000  12 00 00 00 02 00 6c 90-1a 00 00 00 00 01 6c 30  ......l.......l0
  319 0010  00 00                  -                         ..
  320 */
  321 #define PTP_OC_CANON_GetRootCertificateData 0x906D /* no args */
  322 #define PTP_OC_CANON_SetRootCertificateData 0x906E
  323 #define PTP_OC_CANON_DeleteRootCertificateData  0x906F
  324 #define PTP_OC_CANON_GetGpsMobilelinkObjectInfo 0x9075 /* 2 args: utcstart, utcend */
  325 #define PTP_OC_CANON_SendGpsTagInfo     0x9076 /* 1 arg: oid */
  326 #define PTP_OC_CANON_GetTranscodeApproxSize 0x9077 /* 1 arg: oid? */
  327 #define PTP_OC_CANON_RequestTranscodeStart  0x9078 /* 1 arg: oid? */
  328 #define PTP_OC_CANON_RequestTranscodeCancel 0x9079 /* 1 arg: oid? */
  329 
  330 #define PTP_OC_CANON_SetRemoteShootingMode  0x9086
  331 
  332 /* 9101: no args, 8 byte data (01 00 00 00 00 00 00 00), no resp data. */
  333 #define PTP_OC_CANON_EOS_GetStorageIDs      0x9101
  334 /* 9102: 1 arg (0)
  335  * 0x28 bytes of data:
  336     00000000: 34 00 00 00 02 00 02 91 0a 00 00 00 04 00 03 00
  337     00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  338     00000020: 00 00 ff ff ff ff 03 43 00 46 00 00 00 03 41 00
  339     00000030: 3a 00 00 00
  340  * no resp args
  341  */
  342 #define PTP_OC_CANON_EOS_GetStorageInfo     0x9102
  343 #define PTP_OC_CANON_EOS_GetObjectInfo      0x9103
  344 #define PTP_OC_CANON_EOS_GetObject      0x9104
  345 #define PTP_OC_CANON_EOS_DeleteObject       0x9105
  346 #define PTP_OC_CANON_EOS_FormatStore        0x9106
  347 #define PTP_OC_CANON_EOS_GetPartialObject   0x9107
  348 #define PTP_OC_CANON_EOS_GetDeviceInfoEx    0x9108
  349 
  350 /* sample1:
  351  * 3 cmdargs: 1,0xffffffff,00 00 10 00;
  352  * data:
  353     00000000: 48 00 00 00 02 00 09 91 12 00 00 00 01 00 00 00
  354     00000010: 38 00 00 00 00 00 00 30 01 00 00 00 01 30 00 00
  355     00000020: 01 00 00 00 10 00 00 00 00 00 00 00 00 00 00 20
  356     00000030: 00 00 00 30 44 43 49 4d 00 00 00 00 00 00 00 00   DCIM
  357     00000040: 00 00 00 00 cc c3 01 46
  358  * 2 respargs: 0x0, 0x3c
  359  *
  360  * sample2:
  361  *
  362     00000000: 18 00 00 00 01 00 09 91 15 00 00 00 01 00 00 00
  363     00000010: 00 00 00 30 00 00 10 00
  364 
  365     00000000: 48 00 00 00 02 00 09 91 15 00 00 00 01 00 00 00
  366     00000010: 38 00 00 00 00 00 9c 33 01 00 00 00 01 30 00 00
  367     00000020: 01 00 00 00 10 00 00 00 00 00 00 00 00 00 00 30
  368     00000030: 00 00 9c 33 32 33 31 43 41 4e 4f 4e 00 00 00 00    231CANON
  369     00000040: 00 00 00 00 cc c3 01 46
  370 
  371  */
  372 #define PTP_OC_CANON_EOS_GetObjectInfoEx    0x9109
  373 #define PTP_OC_CANON_EOS_GetThumbEx     0x910A
  374 #define PTP_OC_CANON_EOS_SendPartialObject  0x910B
  375 #define PTP_OC_CANON_EOS_SetObjectAttributes    0x910C
  376 #define PTP_OC_CANON_EOS_GetObjectTime      0x910D
  377 #define PTP_OC_CANON_EOS_SetObjectTime      0x910E
  378 
  379 /* 910f: no args, no data, 1 response arg (0). */
  380 #define PTP_OC_CANON_EOS_RemoteRelease      0x910F
  381 /* Marcus: looks more like "Set DeviceProperty" in the trace.
  382  *
  383  * no cmd args
  384  * data phase (0xc, 0xd11c, 0x1)
  385  * no resp args
  386  */
  387 #define PTP_OC_CANON_EOS_SetDevicePropValueEx   0x9110
  388 #define PTP_OC_CANON_EOS_GetRemoteMode      0x9113
  389 /* 9114: 1 arg (0x1), no data, no resp data. */
  390 #define PTP_OC_CANON_EOS_SetRemoteMode      0x9114
  391 /* 9115: 1 arg (0x1), no data, no resp data. */
  392 #define PTP_OC_CANON_EOS_SetEventMode       0x9115
  393 /* 9116: no args, data phase, no resp data. */
  394 #define PTP_OC_CANON_EOS_GetEvent       0x9116
  395 #define PTP_OC_CANON_EOS_TransferComplete   0x9117
  396 #define PTP_OC_CANON_EOS_CancelTransfer     0x9118
  397 #define PTP_OC_CANON_EOS_ResetTransfer      0x9119
  398 
  399 /* 911a: 3 args (0xfffffff7, 0x00001000, 0x00000001), no data, no resp data. */
  400 /* 911a: 3 args (0x001dfc60, 0x00001000, 0x00000001), no data, no resp data. */
  401 #define PTP_OC_CANON_EOS_PCHDDCapacity      0x911A
  402 
  403 /* 911b: no cmd args, no data, no resp args */
  404 #define PTP_OC_CANON_EOS_SetUILock      0x911B
  405 /* 911c: no cmd args, no data, no resp args */
  406 #define PTP_OC_CANON_EOS_ResetUILock        0x911C
  407 #define PTP_OC_CANON_EOS_KeepDeviceOn       0x911D /* no arg */
  408 #define PTP_OC_CANON_EOS_SetNullPacketMode  0x911E /* 1 param */
  409 #define PTP_OC_CANON_EOS_UpdateFirmware     0x911F
  410 #define PTP_OC_CANON_EOS_TransferCompleteDT 0x9120
  411 #define PTP_OC_CANON_EOS_CancelTransferDT   0x9121
  412 #define PTP_OC_CANON_EOS_SetWftProfile      0x9122
  413 #define PTP_OC_CANON_EOS_GetWftProfile      0x9123 /* 2 args: setnum, configid */
  414 #define PTP_OC_CANON_EOS_SetProfileToWft    0x9124
  415 #define PTP_OC_CANON_EOS_BulbStart      0x9125
  416 #define PTP_OC_CANON_EOS_BulbEnd        0x9126
  417 #define PTP_OC_CANON_EOS_RequestDevicePropValue 0x9127
  418 
  419 /* 0x9128 args (0x1/0x2, 0x0), no data, no resp args */
  420 #define PTP_OC_CANON_EOS_RemoteReleaseOn    0x9128
  421 /* 0x9129 args (0x1/0x2), no data, no resp args */
  422 #define PTP_OC_CANON_EOS_RemoteReleaseOff   0x9129
  423 
  424 #define PTP_OC_CANON_EOS_RegistBackgroundImage  0x912A
  425 #define PTP_OC_CANON_EOS_ChangePhotoStudioMode  0x912B
  426 #define PTP_OC_CANON_EOS_GetPartialObjectEx 0x912C
  427 #define PTP_OC_CANON_EOS_ResetMirrorLockupState 0x9130 /* no args */
  428 #define PTP_OC_CANON_EOS_PopupBuiltinFlash  0x9131
  429 #define PTP_OC_CANON_EOS_EndGetPartialObjectEx  0x9132
  430 #define PTP_OC_CANON_EOS_MovieSelectSWOn    0x9133 /* no args */
  431 #define PTP_OC_CANON_EOS_MovieSelectSWOff   0x9134 /* no args */
  432 #define PTP_OC_CANON_EOS_GetCTGInfo     0x9135
  433 #define PTP_OC_CANON_EOS_GetLensAdjust      0x9136
  434 #define PTP_OC_CANON_EOS_SetLensAdjust      0x9137
  435 #define PTP_OC_CANON_EOS_ReadyToSendMusic   0x9138
  436 /* 3 paramaeters, no data, OFC, size, unknown */
  437 #define PTP_OC_CANON_EOS_CreateHandle       0x9139
  438 #define PTP_OC_CANON_EOS_SendPartialObjectEx    0x913A
  439 #define PTP_OC_CANON_EOS_EndSendPartialObjectEx 0x913B
  440 #define PTP_OC_CANON_EOS_SetCTGInfo     0x913C
  441 #define PTP_OC_CANON_EOS_SetRequestOLCInfoGroup 0x913D
  442 #define PTP_OC_CANON_EOS_SetRequestRollingPitchingLevel 0x913E /* 1 arg: onoff? */
  443 /* 3 args, 0x21201020, 0x110, 0x1000000 (potentially reverse order) */
  444 
  445 /* EOS M6 Mark2:    opargs: 0x01000000, 0x000001020, 0 (supportkind, modelid ?),
  446             response args: 0x00000811, 0x00000001 */
  447 
  448 #define PTP_OC_CANON_EOS_GetCameraSupport   0x913F
  449 #define PTP_OC_CANON_EOS_SetRating      0x9140 /* 2 args, objectid, rating? */
  450 #define PTP_OC_CANON_EOS_RequestInnerDevelopStart   0x9141 /* 2 args: 1 type, 1 object? */
  451 #define PTP_OC_CANON_EOS_RequestInnerDevelopParamChange 0x9142
  452 #define PTP_OC_CANON_EOS_RequestInnerDevelopEnd     0x9143
  453 #define PTP_OC_CANON_EOS_GpsLoggingDataMode     0x9144 /* 1 arg */
  454 #define PTP_OC_CANON_EOS_GetGpsLogCurrentHandle     0x9145
  455 #define PTP_OC_CANON_EOS_SetImageRecoveryData       0x9146 /* sends data? */
  456 #define PTP_OC_CANON_EOS_GetImageRecoveryList       0x9147
  457 #define PTP_OC_CANON_EOS_FormatImageRecoveryData    0x9148
  458 #define PTP_OC_CANON_EOS_GetPresetLensAdjustParam   0x9149 /* no arg */
  459 #define PTP_OC_CANON_EOS_GetRawDispImage        0x914A /* ? 2 args ? */
  460 #define PTP_OC_CANON_EOS_SaveImageRecoveryData      0x914B
  461 #define PTP_OC_CANON_EOS_RequestBLE         0x914C /* 2? args? */
  462 #define PTP_OC_CANON_EOS_DrivePowerZoom         0x914D /* 1 arg */
  463 
  464 #define PTP_OC_CANON_EOS_GetIptcData        0x914F
  465 #define PTP_OC_CANON_EOS_SetIptcData        0x9150 /* sends data? */
  466 #define PTP_OC_CANON_EOS_InitiateViewfinder 0x9151  /* no arg */
  467 #define PTP_OC_CANON_EOS_TerminateViewfinder    0x9152
  468 /* EOS M2 wlan: 2 params, 0x00200000 0x01000000 */
  469 #define PTP_OC_CANON_EOS_GetViewFinderData  0x9153
  470 #define PTP_OC_CANON_EOS_DoAf           0x9154
  471 #define PTP_OC_CANON_EOS_DriveLens      0x9155
  472 #define PTP_OC_CANON_EOS_DepthOfFieldPreview    0x9156 /* 1 arg */
  473 #define PTP_OC_CANON_EOS_ClickWB        0x9157 /* 2 args: x,y */
  474 #define PTP_OC_CANON_EOS_Zoom           0x9158 /* 1 arg: zoom */
  475 #define PTP_OC_CANON_EOS_ZoomPosition       0x9159 /* 2 args: x,y */
  476 #define PTP_OC_CANON_EOS_SetLiveAfFrame     0x915A /* sends data? */
  477 #define PTP_OC_CANON_EOS_TouchAfPosition    0x915B /* 3 args: type,x,y */
  478 #define PTP_OC_CANON_EOS_SetLvPcFlavoreditMode  0x915C /* 1 arg */
  479 #define PTP_OC_CANON_EOS_SetLvPcFlavoreditParam 0x915D /* 1 arg */
  480 #define PTP_OC_CANON_EOS_RequestSensorCleaning  0x915E /* 1 arg? */
  481 #define PTP_OC_CANON_EOS_AfCancel       0x9160
  482 #define PTP_OC_CANON_EOS_SetImageRecoveryDataEx 0x916B
  483 #define PTP_OC_CANON_EOS_GetImageRecoveryListEx 0x916C
  484 #define PTP_OC_CANON_EOS_CompleteAutoSendImages 0x916D
  485 #define PTP_OC_CANON_EOS_NotifyAutoTransferStatus   0x916E
  486 #define PTP_OC_CANON_EOS_GetReducedObject   0x916F
  487 #define PTP_OC_CANON_EOS_GetObjectInfo64    0x9170  /* 1 arg: oid */
  488 #define PTP_OC_CANON_EOS_GetObject64        0x9171  /* 1 arg: oid */
  489 #define PTP_OC_CANON_EOS_GetPartialObject64 0x9172  /* args: oid, offset, maxbyte */
  490 #define PTP_OC_CANON_EOS_GetObjectInfoEx64  0x9173  /* 2 args: storageid, oid  ? */
  491 #define PTP_OC_CANON_EOS_GetPartialObjectEX64   0x9174  /* args: oid, offset 64bit, maxbyte */
  492 #define PTP_OC_CANON_EOS_CreateHandle64     0x9175
  493 #define PTP_OC_CANON_EOS_NotifySaveComplete 0x9177
  494 #define PTP_OC_CANON_EOS_GetTranscodedBlock 0x9178
  495 #define PTP_OC_CANON_EOS_TransferCompleteTranscodedBlock    0x9179
  496 #define PTP_OC_CANON_EOS_NotifyEstimateNumberofImport       0x9182 /* 1 arg: importnumber */
  497 #define PTP_OC_CANON_EOS_NotifyNumberofImported 0x9183 /* 1 arg: importnumber */
  498 #define PTP_OC_CANON_EOS_NotifySizeOfPartialDataTransfer    0x9184 /* 4 args: filesizelow, filesizehigh, downloadsizelow, downloadsizehigh */
  499 #define PTP_OC_CANON_EOS_NotifyFinish       0x9185 /* 1 arg: reason */
  500 #define PTP_OC_CANON_EOS_GetWFTData     0x9186
  501 #define PTP_OC_CANON_EOS_SetWFTData     0x9187
  502 #define PTP_OC_CANON_EOS_ChangeWFTSettingNumber 0x9188
  503 #define PTP_OC_CANON_EOS_GetPictureStylePCFlavorParam   0x9189
  504 #define PTP_OC_CANON_EOS_SetPictureStylePCFlavorParam   0x918A
  505 #define PTP_OC_CANON_EOS_GetObjectURL       0x91AB
  506 #define PTP_OC_CANON_EOS_SetCAssistMode     0x91AC
  507 #define PTP_OC_CANON_EOS_GetCAssistPresetThumb  0x91AD
  508 #define PTP_OC_CANON_EOS_SetFELock      0x91B9
  509 #define PTP_OC_CANON_EOS_DeleteWFTSettingNumber 0x91BA
  510 #define PTP_OC_CANON_EOS_SetDefaultCameraSetting        0x91BE
  511 #define PTP_OC_CANON_EOS_GetAEData      0x91BF
  512 #define PTP_OC_CANON_EOS_SendHostInfo       0x91E4 /* https://research.checkpoint.com/say-cheese-ransomware-ing-a-dslr-camera/ */
  513 #define PTP_OC_CANON_EOS_NotifyNetworkError 0x91E8 /* 1 arg: errorcode */
  514 #define PTP_OC_CANON_EOS_AdapterTransferProgress        0x91E9
  515 #define PTP_OC_CANON_EOS_TransferCompleteFTP    0x91F0
  516 #define PTP_OC_CANON_EOS_CancelTransferFTP  0x91F1
  517 #define PTP_OC_CANON_EOS_NotifyBtStatus     0x91F9 /* https://research.checkpoint.com/say-cheese-ransomware-ing-a-dslr-camera/ */
  518 #define PTP_OC_CANON_EOS_SetAdapterBatteryReport        0x91FD /* https://research.checkpoint.com/say-cheese-ransomware-ing-a-dslr-camera/ */
  519 #define PTP_OC_CANON_EOS_FAPIMessageTX      0x91FE
  520 #define PTP_OC_CANON_EOS_FAPIMessageRX      0x91FF
  521 
  522 /* A1E8 ... also seen? is an error code? */
  523 
  524 /* Nikon extension Operation Codes */
  525 #define PTP_OC_NIKON_GetProfileAllData  0x9006
  526 #define PTP_OC_NIKON_SendProfileData    0x9007
  527 #define PTP_OC_NIKON_DeleteProfile  0x9008
  528 #define PTP_OC_NIKON_SetProfileData 0x9009
  529 #define PTP_OC_NIKON_AdvancedTransfer   0x9010
  530 #define PTP_OC_NIKON_GetFileInfoInBlock 0x9011
  531 #define PTP_OC_NIKON_InitiateCaptureRecInSdram      0x90C0  /* 1 param,   no data */
  532 #define PTP_OC_NIKON_AfDrive        0x90C1  /* no params, no data */
  533 #define PTP_OC_NIKON_ChangeCameraMode   0x90C2  /* 1 param,  no data */
  534 #define PTP_OC_NIKON_DelImageSDRAM  0x90C3  /* 1 param (0x0: all, others: cancel this image) ,  no data */
  535 #define PTP_OC_NIKON_GetLargeThumb  0x90C4
  536 #define PTP_OC_NIKON_CurveDownload  0x90C5  /* 1 param,   data in */
  537 #define PTP_OC_NIKON_CurveUpload    0x90C6  /* 1 param,   data out */
  538 #define PTP_OC_NIKON_GetEvent       0x90C7  /* no params, data in */
  539 #define PTP_OC_NIKON_DeviceReady    0x90C8  /* no params, no data */
  540 #define PTP_OC_NIKON_SetPreWBData   0x90C9  /* 3 params,  data out */
  541 #define PTP_OC_NIKON_GetVendorPropCodes 0x90CA  /* 0 params, data in */
  542 #define PTP_OC_NIKON_AfCaptureSDRAM 0x90CB  /* no params, no data */
  543 #define PTP_OC_NIKON_GetPictCtrlData    0x90CC  /* 2 params, data in */
  544 #define PTP_OC_NIKON_SetPictCtrlData    0x90CD  /* 2 params, data out */
  545 #define PTP_OC_NIKON_DelCstPicCtrl  0x90CE  /* 1 param, no data */
  546 #define PTP_OC_NIKON_GetPicCtrlCapability   0x90CF  /* 1 param, data in */
  547 
  548 /* Nikon Liveview stuff */
  549 #define PTP_OC_NIKON_GetPreviewImg  0x9200
  550 #define PTP_OC_NIKON_StartLiveView  0x9201  /* no params */
  551 #define PTP_OC_NIKON_EndLiveView    0x9202  /* no params */
  552 #define PTP_OC_NIKON_GetLiveViewImg 0x9203  /* no params, data in */
  553 #define PTP_OC_NIKON_MfDrive        0x9204  /* 2 params */
  554 #define PTP_OC_NIKON_ChangeAfArea   0x9205  /* 2 params */
  555 #define PTP_OC_NIKON_AfDriveCancel  0x9206  /* no params */
  556 /* 2 params:
  557  * 0xffffffff == No AF before,  0xfffffffe == AF before capture
  558  * sdram=1, card=0
  559  */
  560 #define PTP_OC_NIKON_InitiateCaptureRecInMedia  0x9207  /* 1 params */
  561 
  562 #define PTP_OC_NIKON_GetVendorStorageIDs    0x9209  /* no params, data in */
  563 
  564 #define PTP_OC_NIKON_StartMovieRecInCard    0x920a  /* no params, no data */
  565 #define PTP_OC_NIKON_EndMovieRec        0x920b  /* no params, no data */
  566 
  567 #define PTP_OC_NIKON_TerminateCapture       0x920c  /* 2 params */
  568 #define PTP_OC_NIKON_GetFhdPicture      0x920f  /* param: objecthandle. returns (at most) 1920x1028 picture */
  569 
  570 #define PTP_OC_NIKON_GetDevicePTPIPInfo 0x90E0
  571 
  572 #define PTP_OC_NIKON_GetPartialObjectHiSpeed    0x9400  /* 3 params, p1: object handle, p2: 32bit transfer size, p3: terminate after transfer. DATA in, Reuslt: r1: 32bit number sent, r2: before offset low 32bit , r3: before offset high 32bit */
  573 #define PTP_OC_NIKON_StartSpotWb        0x9402
  574 #define PTP_OC_NIKON_EndSpotWb          0x9403
  575 #define PTP_OC_NIKON_ChangeSpotWbArea       0x9404
  576 #define PTP_OC_NIKON_MeasureSpotWb      0x9405
  577 #define PTP_OC_NIKON_EndSpotWbResultDisp    0x9406
  578 #define PTP_OC_NIKON_CancelImagesInSDRAM    0x940c
  579 #define PTP_OC_NIKON_GetSBHandles       0x9414
  580 #define PTP_OC_NIKON_GetSBAttrDesc      0x9415
  581 #define PTP_OC_NIKON_GetSBAttrValue     0x9416
  582 #define PTP_OC_NIKON_SetSBAttrValue     0x9417
  583 #define PTP_OC_NIKON_GetSBGroupAttrDesc     0x9418
  584 #define PTP_OC_NIKON_GetSBGroupAttrValue    0x9419
  585 #define PTP_OC_NIKON_SetSBGroupAttrValue    0x941a
  586 #define PTP_OC_NIKON_TestFlash          0x941b
  587 #define PTP_OC_NIKON_GetEventEx         0x941c  /* can do multiparameter events, compared to GetEvent */
  588 #define PTP_OC_NIKON_MirrorUpCancel     0x941d
  589 #define PTP_OC_NIKON_PowerZoomByFocalLength 0x941e
  590 #define PTP_OC_NIKON_ActiveSelectionControl 0x941f
  591 #define PTP_OC_NIKON_SaveCameraSetting      0x9420
  592 #define PTP_OC_NIKON_GetObjectSize      0x9421  /* param: objecthandle, returns 64bit objectsize as DATA */
  593 #define PTP_OC_NIKON_ChangeMonitorOff       0x9422
  594 #define PTP_OC_NIKON_GetLiveViewCompressedSize  0x9423
  595 #define PTP_OC_NIKON_StartTracking      0x9424
  596 #define PTP_OC_NIKON_EndTracking        0x9425
  597 #define PTP_OC_NIKON_ChangeAELock       0x9426
  598 #define PTP_OC_NIKON_GetLiveViewImageEx     0x9428
  599 #define PTP_OC_NIKON_GetPartialObjectEx     0x9431  /* p1: objecthandle, p2: offset lower 32bit, p3: offset higher 32bit, p4: maxsize lower 32bit, p5: maxsize upper 32bit, response is r1: lower 32bit, r2: higher 32bit */
  600 #define PTP_OC_NIKON_GetManualSettingLensData   0x9432
  601 #define PTP_OC_NIKON_InitiatePixelMapping   0x9433
  602 #define PTP_OC_NIKON_GetObjectsMetaData     0x9434
  603 #define PTP_OC_NIKON_ChangeApplicationMode  0x9435
  604 #define PTP_OC_NIKON_ResetMenu          0x9436
  605 
  606 
  607 /* From Nikon V1 Trace */
  608 #define PTP_OC_NIKON_GetDevicePropEx        0x9504  /* gets device prop data */
  609 
  610 
  611 /* Casio EX-F1 (from http://code.google.com/p/exf1ctrl/ ) */
  612 #define PTP_OC_CASIO_STILL_START    0x9001
  613 #define PTP_OC_CASIO_STILL_STOP     0x9002
  614 
  615 #define PTP_OC_CASIO_FOCUS      0x9007
  616 #define PTP_OC_CASIO_CF_PRESS       0x9009
  617 #define PTP_OC_CASIO_CF_RELEASE     0x900A
  618 #define PTP_OC_CASIO_GET_OBJECT_INFO    0x900C
  619 
  620 #define PTP_OC_CASIO_SHUTTER        0x9024
  621 #define PTP_OC_CASIO_GET_STILL_HANDLES  0x9027
  622 #define PTP_OC_CASIO_STILL_RESET    0x9028
  623 #define PTP_OC_CASIO_HALF_PRESS     0x9029
  624 #define PTP_OC_CASIO_HALF_RELEASE   0x902A
  625 #define PTP_OC_CASIO_CS_PRESS       0x902B
  626 #define PTP_OC_CASIO_CS_RELEASE     0x902C
  627 
  628 #define PTP_OC_CASIO_ZOOM       0x902D
  629 #define PTP_OC_CASIO_CZ_PRESS       0x902E
  630 #define PTP_OC_CASIO_CZ_RELEASE     0x902F
  631 
  632 #define PTP_OC_CASIO_MOVIE_START    0x9041
  633 #define PTP_OC_CASIO_MOVIE_STOP     0x9042
  634 #define PTP_OC_CASIO_MOVIE_PRESS    0x9043
  635 #define PTP_OC_CASIO_MOVIE_RELEASE  0x9044
  636 #define PTP_OC_CASIO_GET_MOVIE_HANDLES  0x9045
  637 #define PTP_OC_CASIO_MOVIE_RESET    0x9046
  638 
  639 #define PTP_OC_CASIO_GET_OBJECT     0x9025
  640 #define PTP_OC_CASIO_GET_THUMBNAIL  0x9026
  641 
  642 /* Sony stuff */
  643 /* 9201:
  644  *  3 params: 1,0,0 ; IN: data 8 bytes all 0
  645  * or:
  646  *  3 params: 2,0,0 ; IN: data 8 bytes all 0
  647  * or
  648  *  3 params: 3,0,0,: IN: data 8 bytes all 0
  649  */
  650 #define PTP_OC_SONY_SDIOConnect         0x9201
  651 /* 9202: 1 param, 0xc8; IN data:
  652  * 16 bit: 0xc8
  653  * ptp array 32 bit: index, 16 bit values of propcodes  */
  654 #define PTP_OC_SONY_GetSDIOGetExtDeviceInfo 0x9202
  655 
  656 #define PTP_OC_SONY_GetDevicePropdesc       0x9203
  657 #define PTP_OC_SONY_GetDevicePropertyValue  0x9204
  658 /* 1 param, 16bit propcode, SEND DATA: propvalue */
  659 #define PTP_OC_SONY_SetControlDeviceA       0x9205
  660 #define PTP_OC_SONY_GetControlDeviceDesc    0x9206
  661 /* 1 param, 16bit propcode, SEND DATA: propvalue */
  662 #define PTP_OC_SONY_SetControlDeviceB       0x9207
  663 /* get all device property data at once */
  664 #define PTP_OC_SONY_GetAllDevicePropData    0x9209  /* gets a 4126 byte blob of device props ?*/
  665 
  666 #define PTP_OC_SONY_QX_SetExtPictureProfile 0x96F2
  667 #define PTP_OC_SONY_QX_GetExtPictureProfile 0x96F3
  668 #define PTP_OC_SONY_QX_GetExtLensInfo       0x96F4
  669 #define PTP_OC_SONY_QX_SendUpdateFile       0x96F5
  670 #define PTP_OC_SONY_QX_GetAllDevicePropData 0x96F6
  671 #define PTP_OC_SONY_QX_SetControlDeviceB    0x96F8 /* ControlDevice */
  672 #define PTP_OC_SONY_QX_SetControlDeviceA    0x96FA /* SetExtDevicePropValue */
  673 #define PTP_OC_SONY_QX_GetSDIOGetExtDeviceInfo  0x96FD
  674 #define PTP_OC_SONY_QX_Connect          0x96FE
  675 
  676 /* Microsoft / MTP extension codes */
  677 
  678 #define PTP_OC_MTP_GetObjectPropsSupported  0x9801
  679 #define PTP_OC_MTP_GetObjectPropDesc        0x9802
  680 #define PTP_OC_MTP_GetObjectPropValue       0x9803
  681 #define PTP_OC_MTP_SetObjectPropValue       0x9804
  682 #define PTP_OC_MTP_GetObjPropList       0x9805
  683 #define PTP_OC_MTP_SetObjPropList       0x9806
  684 #define PTP_OC_MTP_GetInterdependendPropdesc    0x9807
  685 #define PTP_OC_MTP_SendObjectPropList       0x9808
  686 #define PTP_OC_MTP_GetObjectReferences      0x9810
  687 #define PTP_OC_MTP_SetObjectReferences      0x9811
  688 #define PTP_OC_MTP_UpdateDeviceFirmware     0x9812
  689 #define PTP_OC_MTP_Skip             0x9820
  690 
  691 /*
  692  * Windows Media Digital Rights Management for Portable Devices
  693  * Extension Codes (microsoft.com/WMDRMPD: 10.1)
  694  */
  695 #define PTP_OC_MTP_WMDRMPD_GetSecureTimeChallenge   0x9101
  696 #define PTP_OC_MTP_WMDRMPD_GetSecureTimeResponse    0x9102
  697 #define PTP_OC_MTP_WMDRMPD_SetLicenseResponse   0x9103
  698 #define PTP_OC_MTP_WMDRMPD_GetSyncList      0x9104
  699 #define PTP_OC_MTP_WMDRMPD_SendMeterChallengeQuery  0x9105
  700 #define PTP_OC_MTP_WMDRMPD_GetMeterChallenge    0x9106
  701 #define PTP_OC_MTP_WMDRMPD_SetMeterResponse     0x9107
  702 #define PTP_OC_MTP_WMDRMPD_CleanDataStore       0x9108
  703 #define PTP_OC_MTP_WMDRMPD_GetLicenseState      0x9109
  704 #define PTP_OC_MTP_WMDRMPD_SendWMDRMPDCommand   0x910A
  705 #define PTP_OC_MTP_WMDRMPD_SendWMDRMPDRequest   0x910B
  706 
  707 /*
  708  * Windows Media Digital Rights Management for Portable Devices
  709  * Extension Codes (microsoft.com/WMDRMPD: 10.1)
  710  * Below are operations that have no public documented identifier
  711  * associated with them "Vendor-defined Command Code"
  712  */
  713 #define PTP_OC_MTP_WMDRMPD_SendWMDRMPDAppRequest    0x9212
  714 #define PTP_OC_MTP_WMDRMPD_GetWMDRMPDAppResponse    0x9213
  715 #define PTP_OC_MTP_WMDRMPD_EnableTrustedFilesOperations 0x9214
  716 #define PTP_OC_MTP_WMDRMPD_DisableTrustedFilesOperations 0x9215
  717 #define PTP_OC_MTP_WMDRMPD_EndTrustedAppSession     0x9216
  718 /* ^^^ guess ^^^ */
  719 
  720 /*
  721  * Microsoft Advanced Audio/Video Transfer
  722  * Extensions (microsoft.com/AAVT: 1.0)
  723  */
  724 #define PTP_OC_MTP_AAVT_OpenMediaSession        0x9170
  725 #define PTP_OC_MTP_AAVT_CloseMediaSession       0x9171
  726 #define PTP_OC_MTP_AAVT_GetNextDataBlock        0x9172
  727 #define PTP_OC_MTP_AAVT_SetCurrentTimePosition      0x9173
  728 
  729 /*
  730  * Windows Media Digital Rights Management for Network Devices
  731  * Extensions (microsoft.com/WMDRMND: 1.0) MTP/IP?
  732  */
  733 #define PTP_OC_MTP_WMDRMND_SendRegistrationRequest  0x9180
  734 #define PTP_OC_MTP_WMDRMND_GetRegistrationResponse  0x9181
  735 #define PTP_OC_MTP_WMDRMND_GetProximityChallenge    0x9182
  736 #define PTP_OC_MTP_WMDRMND_SendProximityResponse    0x9183
  737 #define PTP_OC_MTP_WMDRMND_SendWMDRMNDLicenseRequest    0x9184
  738 #define PTP_OC_MTP_WMDRMND_GetWMDRMNDLicenseResponse    0x9185
  739 
  740 /*
  741  * Windows Media Player Portiable Devices
  742  * Extension Codes (microsoft.com/WMPPD: 11.1)
  743  */
  744 #define PTP_OC_MTP_WMPPD_ReportAddedDeletedItems    0x9201
  745 #define PTP_OC_MTP_WMPPD_ReportAcquiredItems            0x9202
  746 #define PTP_OC_MTP_WMPPD_PlaylistObjectPref     0x9203
  747 
  748 /*
  749  * Undocumented Zune Operation Codes
  750  * maybe related to WMPPD extension set?
  751  */
  752 #define PTP_OC_MTP_ZUNE_GETUNDEFINED001             0x9204
  753 
  754 /* WiFi Provisioning MTP Extension Codes (microsoft.com/WPDWCN: 1.0) */
  755 #define PTP_OC_MTP_WPDWCN_ProcessWFCObject      0x9122
  756 
  757 /* Olympus OMD series commands */
  758 #define PTP_OC_OLYMPUS_OMD_Capture          0x9481
  759 #define PTP_OC_OLYMPUS_GetLiveViewImage         0x9484  /* liveview */
  760 #define PTP_OC_OLYMPUS_OMD_GetImage         0x9485  /* gets an JPEG image (from the capture? SDRAM style?) */
  761 #define PTP_OC_OLYMPUS_OMD_ChangedProperties        0x9486
  762 #define PTP_OC_OLYMPUS_OMD_MFDrive          0x9487
  763 #define PTP_OC_OLYMPUS_OMD_SetProperties        0x9489 /* Sends to the device a PTP list of all 16 bit device properties , count 32bit, then 16bit vals */
  764 /* 948C: Record Video? */
  765 /* 9482: Set One Touch WB Gain */
  766 /* 9483: Set / Start Magnifying Live View Point */
  767 /* 9488: Change Magnifying Live View Area */
  768 /* 9493: Start Driving Zoom Lens For Direction / Focal Length  / Stop Driving zoom
  769  * start direction:         x1=1,x2=0,x3= STEPS?, x4=1 or 2 (near / far ? )
  770  * start to focallength:    x1=1,x2=3,x3= VALUE? ,x4=4 (potentially more)
  771  * stop:            x1=2,x2=0,x3=0,x4=0
  772  * unclear:         x1=4,x2=0,x3=0,x4=0
  773  */
  774 /* 9495: Set / Clear Auto Focus Point? */
  775 /* 94a0: Set / Clear Auto Exposure Point? */
  776 /* 94b7 or 94bf: Set Focus Adjust Pulse */
  777 /* 94A1: Detect One Touch WB Gain */
  778 /* 94A2: AdjustLevelGauge? */
  779 /* 94A4: Get Direct Item Buffer */
  780 /* 94A5: Get Direct Item Info */
  781 /* 94B7: Get Recording Folder List? */
  782 /* 94BA / 94a1: Pixel Mapping? */
  783 /* 94ba: TransferModeStartStop */
  784 /* 94bb: Get Un Transfer List */
  785 /* 94bc: GetLocalObject info? */
  786 /* 94bd: GetLocalObject? */
  787 /* 94be: delete local object? */
  788 /* 94c0 / 94b9 : Set Comment String */
  789 /* 94bf: Set Connect Pc Info? */
  790 /* 94c0: Get Connect Pc Info? */
  791 /* 94c1: Clear Connect Pc Info? */
  792 /* 94c4: Get Camera Af Target Frames? */
  793 /* 94c3: Start Station Mode */
  794 /* 94c3: End Station Mode */
  795 /* 911c: Get Firmware Update Mode? */
  796 /* 9121: Firmware Check? */
  797 /* 9122: Get Firmware Status? */
  798 /* 9123: Firmware Update Initiate? */
  799 /* 9124: Get Firmware Language? */
  800 /* 9125: Get Firmware Status? */
  801 /* 9126: Trans Firmware? */
  802 
  803 /* Olympus E series commands */
  804 
  805 #define PTP_OC_OLYMPUS_Capture              0x9101
  806 #define PTP_OC_OLYMPUS_SelfCleaning         0x9103
  807 #define PTP_OC_OLYMPUS_SetRGBGain           0x9106
  808 #define PTP_OC_OLYMPUS_SetPresetMode            0x9107
  809 #define PTP_OC_OLYMPUS_SetWBBiasAll         0x9108
  810 #define PTP_OC_OLYMPUS_GetCameraControlMode     0x910a
  811 #define PTP_OC_OLYMPUS_SetCameraControlMode     0x910b
  812 #define PTP_OC_OLYMPUS_SetWBRGBGain         0x910c
  813 #define PTP_OC_OLYMPUS_GetDeviceInfo            0x9301
  814 #define PTP_OC_OLYMPUS_OpenSession          0x9302
  815 #define PTP_OC_OLYMPUS_SetDateTime          0x9402
  816 #define PTP_OC_OLYMPUS_GetDateTime          0x9482
  817 #define PTP_OC_OLYMPUS_SetCameraID          0x9501
  818 #define PTP_OC_OLYMPUS_GetCameraID          0x9581
  819 
  820 
  821 /* Android Random I/O Extensions Codes */
  822 #define PTP_OC_ANDROID_GetPartialObject64       0x95C1
  823 #define PTP_OC_ANDROID_SendPartialObject        0x95C2
  824 #define PTP_OC_ANDROID_TruncateObject           0x95C3
  825 #define PTP_OC_ANDROID_BeginEditObject          0x95C4
  826 #define PTP_OC_ANDROID_EndEditObject            0x95C5
  827 
  828 /* Leica opcodes, from Lightroom tether plugin */
  829 /* also from:
  830  * https://alexhude.github.io/2019/01/24/hacking-leica-m240.html */
  831 #define PTP_OC_LEICA_SetCameraSettings          0x9001  /* image shuttle */
  832 #define PTP_OC_LEICA_GetCameraSettings          0x9002
  833 #define PTP_OC_LEICA_GetLensParameter           0x9003  /* lrplugin */
  834 /* probably 2 arguments.
  835  * generic: releaseStage, stepSize
  836  * Release(releasestage) = (releasestage,0)
  837  * Release() = (0,0)
  838  * AEStart() = (1,0)
  839  * Autofocusrelease() = (2,0)
  840  * AutofocusPush() = (1,0) ... same as AEStart?
  841  * KeepCameraActive() = (0xe,0)
  842  */
  843 #define PTP_OC_LEICA_LEReleaseStages            0x9004  /* lrplugin seeing 1 (push af control), 2 (release af control), 0x0c (continuous start), 0x0d (continuous end) as potential arguments */
  844 #define PTP_OC_LEICA_LEOpenSession          0x9005  /* lrplugin one argument, possible 0 is ok? */
  845 #define PTP_OC_LEICA_LECloseSession         0x9006  /* lrplugin */
  846 #define PTP_OC_LEICA_RequestObjectTransferReady     0x9007
  847 #define PTP_OC_LEICA_GetGeoTrackingData         0x9008
  848 #define PTP_OC_LEICA_OpenDebugSession           0x900a
  849 #define PTP_OC_LEICA_CloseDebugSession          0x900b
  850 #define PTP_OC_LEICA_GetDebugBuffer         0x900c
  851 #define PTP_OC_LEICA_DebugCommandString         0x900d
  852 #define PTP_OC_LEICA_GetDebugRoute          0x900e
  853 #define PTP_OC_LEICA_SetIPTCData            0x900f
  854 #define PTP_OC_LEICA_GetIPTCData            0x9010
  855 #define PTP_OC_LEICA_LEControlAutoFocus         0x9016  /* lr plugin */
  856 #define PTP_OC_LEICA_LEControlBulbExposure      0x9019  /* seen in lr plugin ... similar to 9004 and 901a release/press shutter */
  857 #define PTP_OC_LEICA_LEControlContinuousExposure    0x901a  /* seen in lr plugin ... similar to 9004 and 9019 release/press shutter */
  858 #define PTP_OC_LEICA_901b               0x901b  /* seen in lr plugin ... related to release not listed in debugprint */
  859 #define PTP_OC_LEICA_LEControlPhotoLiveView     0x901c  /* seen in lr plugin ... */
  860 #define PTP_OC_LEICA_LEKeepSessionActive        0x901d  /* seen in lr plugin ... */
  861 #define PTP_OC_LEICA_LEMoveLens             0x901e  /* seen in image shuttle ... 1? arg */
  862 #define PTP_OC_LEICA_Get3DAxisData          0x9020
  863 #define PTP_OC_LEICA_LESetZoomMode          0x9021  /* lr plugin */
  864 #define PTP_OC_LEICA_LESetFocusCrossPosition        0x9022  /* lr plugin */
  865 #define PTP_OC_LEICA_LESetDisplayWindowPosition     0x9024  /* lr plugin */
  866 #define PTP_OC_LEICA_LEGetStreamData            0x9025  /* lr plugin */
  867 #define PTP_OC_LEICA_OpenLiveViewSession        0x9030
  868 #define PTP_OC_LEICA_CloseLiveViewSession       0x9031
  869 #define PTP_OC_LEICA_LESetDateTime          0x9036  /* lr plugin */
  870 #define PTP_OC_LEICA_GetObjectPropListPaginated     0x9037
  871 #define PTP_OC_LEICA_OpenProductionSession      0x9100
  872 #define PTP_OC_LEICA_CloseProductionSession     0x9101
  873 #define PTP_OC_LEICA_UpdateFirmware         0x9102
  874 #define PTP_OC_LEICA_OpenOSDSession         0x9103
  875 #define PTP_OC_LEICA_CloseOSDSession            0x9104
  876 #define PTP_OC_LEICA_GetOSDData             0x9105
  877 #define PTP_OC_LEICA_GetFirmwareStruct          0x9106
  878 #define PTP_OC_LEICA_GetDebugMenu           0x910b
  879 #define PTP_OC_LEICA_SetDebugMenu           0x910c
  880 #define PTP_OC_LEICA_OdinMessage            0x910d
  881 #define PTP_OC_LEICA_GetDebugObjectHandles      0x910e
  882 #define PTP_OC_LEICA_GetDebugObject         0x910f
  883 #define PTP_OC_LEICA_DeleteDebugObject          0x9110
  884 #define PTP_OC_LEICA_GetDebugObjectInfo         0x9111
  885 #define PTP_OC_LEICA_WriteDebugObject           0x9112
  886 #define PTP_OC_LEICA_CreateDebugObject          0x9113
  887 #define PTP_OC_LEICA_Calibrate3DAxis            0x9114
  888 #define PTP_OC_LEICA_MagneticCalibration        0x9115
  889 #define PTP_OC_LEICA_GetViewFinderData          0x9116
  890 
  891 #define PTP_OC_PARROT_GetSunshineValues     0x9201
  892 #define PTP_OC_PARROT_GetTemperatureValues  0x9202
  893 #define PTP_OC_PARROT_GetAngleValues        0x9203
  894 #define PTP_OC_PARROT_GetGpsValues      0x9204
  895 #define PTP_OC_PARROT_GetGyroscopeValues    0x9205
  896 #define PTP_OC_PARROT_GetAccelerometerValues    0x9206
  897 #define PTP_OC_PARROT_GetMagnetometerValues 0x9207
  898 #define PTP_OC_PARROT_GetImuValues      0x9208
  899 #define PTP_OC_PARROT_GetStatusMask     0x9209
  900 #define PTP_OC_PARROT_EjectStorage      0x920A
  901 #define PTP_OC_PARROT_StartMagnetoCalib     0x9210
  902 #define PTP_OC_PARROT_StopMagnetoCalib      0x9211
  903 #define PTP_OC_PARROT_MagnetoCalibStatus    0x9212
  904 #define PTP_OC_PARROT_SendFirmwareUpdate    0x9213
  905 
  906 #define PTP_OC_PANASONIC_9101           0x9101
  907 #define PTP_OC_PANASONIC_OpenSession        0x9102  /* opensession (1 arg, seems to be storage id 0x00010001)*/
  908 #define PTP_OC_PANASONIC_CloseSession       0x9103  /* closesession (no arg) */
  909 #define PTP_OC_PANASONIC_9104           0x9104  /* get ext device id (1 arg?) */
  910 /* 9104 gets this data:
  911 0000  24 00 00 00 02 00 04 91-04 00 00 00 01 00 01 00  $...............
  912 0010  01 00 e1 07 10 00 00 00-00 00 00 00 00 00 00 00  ................
  913 0020  00 00 00 00            -                         ....
  914 */
  915 
  916 #define PTP_OC_PANASONIC_9107           0x9107  /* getsize? */
  917 #define PTP_OC_PANASONIC_ListProperty       0x9108
  918 #define PTP_OC_PANASONIC_9110           0x9110  /* Get_Object infos */
  919 #define PTP_OC_PANASONIC_9112           0x9112  /* Get Partial Object , 4 args */
  920 #define PTP_OC_PANASONIC_9113           0x9113  /* Skip Objects Transfer , 1 arg */
  921 
  922 #define PTP_OC_PANASONIC_9401           0x9401
  923 #define PTP_OC_PANASONIC_GetProperty        0x9402
  924 #define PTP_OC_PANASONIC_SetProperty        0x9403
  925 #define PTP_OC_PANASONIC_InitiateCapture    0x9404  /* Rec Ctrl Release */
  926 #define PTP_OC_PANASONIC_9405           0x9405  /* Rec Ctrl AF AE */
  927 #define PTP_OC_PANASONIC_9406           0x9406  /* Setup Ctrl various functions: Format, Sensor Cleaning, Menu Save, firmware update? */
  928 #define PTP_OC_PANASONIC_9408           0x9408
  929 #define PTP_OC_PANASONIC_9409           0x9409  /* 1 arg */
  930 #define PTP_OC_PANASONIC_GetCaptureTarget   0x940A  /* 1 arg, e.g. 0x08000010 */
  931 #define PTP_OC_PANASONIC_SetCaptureTarget   0x940B  /* 1 arg, e.g. 0x08000010 */
  932 #define PTP_OC_PANASONIC_MovieRecControl    0x940C  /* 07000011 start, 07000012 stop, 0700013 still capture */
  933 #define PTP_OC_PANASONIC_PowerControl       0x940D  /* 1 arg: 0x0A000011 power off, 0x0a00012 device reset, 0x0a00013 device restart */
  934 #define PTP_OC_PANASONIC_PlayControl        0x940E  /* 2 arg? 0x05000011 current=0, next=1, prev=0xffffffff */
  935 #define PTP_OC_PANASONIC_PlayControlPlay    0x940F  /* 0x05000020 */
  936 #define PTP_OC_PANASONIC_9410           0x9410  /* Rec Ctrl Other */
  937 #define PTP_OC_PANASONIC_SetGPSDataInfo     0x9411
  938 #define PTP_OC_PANASONIC_Liveview       0x9412  /* 0d000010 start, 0d000011 stop */
  939 #define PTP_OC_PANASONIC_PollEvents     0x9414  /* ? 1 arg e.g 12000020 */
  940 #define PTP_OC_PANASONIC_GetLiveViewParameters  0x9414  /* either all formats 0x0d800012 or current format 0x0d800011 */
  941 #define PTP_OC_PANASONIC_SetLiveViewParameters  0x9415  /* current format 0x0d800011 */
  942 #define PTP_OC_PANASONIC_ManualFocusDrive   0x9416  /* Rec Ctrl Mf Assist, Rec Ctrl Backup Req ... 1 arg */
  943 
  944 #define PTP_OC_PANASONIC_ChangeEvent        0x9603  /* 2 args ... e.g. 0x4002, new (change object added event) */
  945 #define PTP_OC_PANASONIC_GetFromEventInfo   0x9605  /* 1 arg, e.g. 0x41000013 , 15c00021: setup exec menu save comp, 15c00022: setup exec pixel refresh comp */
  946 #define PTP_OC_PANASONIC_SendDataInfo       0x9606  /* no args? used during firmware update */
  947 #define PTP_OC_PANASONIC_StartSendData      0x9607  /* no args? used during firmware update */
  948 
  949 #define PTP_OC_PANASONIC_9703           0x9703  /* Mnt_GetInfo_GetVersion  ... 1 arg? */
  950 #define PTP_OC_PANASONIC_9704           0x9704  /* Set USB Mode ... 80040001 */
  951 #define PTP_OC_PANASONIC_9705           0x9705  /* Ctrl Liveview */
  952 #define PTP_OC_PANASONIC_LiveviewImage      0x9706  /* Get Liveview Data */
  953 #define PTP_OC_PANASONIC_9707           0x9707  /* 4k6k cutting get stream */
  954 
  955 /* Samsung NX:
  956  * 9002 send check event
  957  * 9003 send get event
  958  * 9004 require capture exec
  959  * 9005 capture exec
  960  * 9006 liveview info
  961  * 9007 liveview exec / check get file
  962  * 9008 set focus position
  963  * 9009 get focus position
  964  * 900a reset device
  965  * 900b format device
  966  * 900d get tick
  967  * 900e set tick
  968  * 900f set hidden command
  969  * 9010 get record status
  970  * 9011 file transfer
  971  * 9012 set enlarge
  972  * 9013 movie complete exec / movie transfer
  973  * 9014 set record pause
  974  * 9015 set record resume
  975  * 9017 set live view
  976  * 9018 image transfer
  977  * 9019 set imge receive complete
  978  * 901a set dev prop value
  979  * 901b get dev unique id / get dev mode index / get dev prop desc
  980  * 901d get dev unique id
  981  * 9020 set live receive complete
  982  * 9021 sensor cleaning device
  983  * 9022 interval capture stop
  984  * 9023 display save mode wakeup
  985  * 9024 movie cancel
  986  * 9025 get capture count
  987  * 9026 control touch af
  988  * 9027 get image path
  989  * 9028 tracking af stop
  990  * 902a connect try ptp/ip
  991  * 902b connect confirm ptp/ip
  992  * 90fe firmware update
  993  */
  994 
  995 /* These opcodes are probably FUJI Wifi only (but not USB) */
  996 #define PTP_OC_FUJI_InitiateMovieCapture        0x9020
  997 #define PTP_OC_FUJI_TerminateMovieCapture       0x9021
  998 #define PTP_OC_FUJI_GetCapturePreview           0x9022
  999 #define PTP_OC_FUJI_SetFocusPoint           0x9026  /* LockS1Lock */
 1000 #define PTP_OC_FUJI_ResetFocusPoint         0x9027  /* UnlockS1Lock */
 1001 #define PTP_OC_FUJI_GetDeviceInfo           0x902B
 1002 #define PTP_OC_FUJI_SetShutterSpeed         0x902C  /* StepShutterSpeed */
 1003 #define PTP_OC_FUJI_SetAperture             0x902D  /* StepFNumber */
 1004 #define PTP_OC_FUJI_SetExposureCompensation     0x902E  /* StepExposureBias */
 1005 #define PTP_OC_FUJI_CancelInitiateCapture       0x9030
 1006 #define PTP_OC_FUJI_FmSendObjectInfo            0x9040
 1007 #define PTP_OC_FUJI_FmSendObject            0x9041
 1008 #define PTP_OC_FUJI_FmSendPartialObject         0x9042
 1009 
 1010 /* Proprietary vendor extension operations mask */
 1011 #define PTP_OC_EXTENSION_MASK           0xF000
 1012 #define PTP_OC_EXTENSION                0x9000
 1013 
 1014 
 1015 /* Response Codes */
 1016 
 1017 /* PTP v1.0 response codes */
 1018 #define PTP_RC_Undefined                0x2000
 1019 #define PTP_RC_OK                       0x2001
 1020 #define PTP_RC_GeneralError             0x2002
 1021 #define PTP_RC_SessionNotOpen           0x2003
 1022 #define PTP_RC_InvalidTransactionID     0x2004
 1023 #define PTP_RC_OperationNotSupported    0x2005
 1024 #define PTP_RC_ParameterNotSupported    0x2006
 1025 #define PTP_RC_IncompleteTransfer       0x2007
 1026 #define PTP_RC_InvalidStorageId         0x2008
 1027 #define PTP_RC_InvalidObjectHandle      0x2009
 1028 #define PTP_RC_DevicePropNotSupported   0x200A
 1029 #define PTP_RC_InvalidObjectFormatCode  0x200B
 1030 #define PTP_RC_StoreFull                0x200C
 1031 #define PTP_RC_ObjectWriteProtected     0x200D
 1032 #define PTP_RC_StoreReadOnly            0x200E
 1033 #define PTP_RC_AccessDenied             0x200F
 1034 #define PTP_RC_NoThumbnailPresent       0x2010
 1035 #define PTP_RC_SelfTestFailed           0x2011
 1036 #define PTP_RC_PartialDeletion          0x2012
 1037 #define PTP_RC_StoreNotAvailable        0x2013
 1038 #define PTP_RC_SpecificationByFormatUnsupported         0x2014
 1039 #define PTP_RC_NoValidObjectInfo        0x2015
 1040 #define PTP_RC_InvalidCodeFormat        0x2016
 1041 #define PTP_RC_UnknownVendorCode        0x2017
 1042 #define PTP_RC_CaptureAlreadyTerminated 0x2018
 1043 #define PTP_RC_DeviceBusy               0x2019
 1044 #define PTP_RC_InvalidParentObject      0x201A
 1045 #define PTP_RC_InvalidDevicePropFormat  0x201B
 1046 #define PTP_RC_InvalidDevicePropValue   0x201C
 1047 #define PTP_RC_InvalidParameter         0x201D
 1048 #define PTP_RC_SessionAlreadyOpened     0x201E
 1049 #define PTP_RC_TransactionCanceled      0x201F
 1050 #define PTP_RC_SpecificationOfDestinationUnsupported            0x2020
 1051 /* PTP v1.1 response codes */
 1052 #define PTP_RC_InvalidEnumHandle    0x2021
 1053 #define PTP_RC_NoStreamEnabled      0x2022
 1054 #define PTP_RC_InvalidDataSet       0x2023
 1055 
 1056 /* Eastman Kodak extension Response Codes */
 1057 #define PTP_RC_EK_FilenameRequired  0xA001
 1058 #define PTP_RC_EK_FilenameConflicts 0xA002
 1059 #define PTP_RC_EK_FilenameInvalid   0xA003
 1060 
 1061 /* Nikon specific response codes */
 1062 #define PTP_RC_NIKON_HardwareError      0xA001
 1063 #define PTP_RC_NIKON_OutOfFocus         0xA002
 1064 #define PTP_RC_NIKON_ChangeCameraModeFailed 0xA003
 1065 #define PTP_RC_NIKON_InvalidStatus      0xA004
 1066 #define PTP_RC_NIKON_SetPropertyNotSupported    0xA005
 1067 #define PTP_RC_NIKON_WbResetError       0xA006
 1068 #define PTP_RC_NIKON_DustReferenceError     0xA007
 1069 #define PTP_RC_NIKON_ShutterSpeedBulb       0xA008
 1070 #define PTP_RC_NIKON_MirrorUpSequence       0xA009
 1071 #define PTP_RC_NIKON_CameraModeNotAdjustFNumber 0xA00A
 1072 #define PTP_RC_NIKON_NotLiveView        0xA00B
 1073 #define PTP_RC_NIKON_MfDriveStepEnd     0xA00C
 1074 #define PTP_RC_NIKON_MfDriveStepInsufficiency   0xA00E
 1075 #define PTP_RC_NIKON_NoFullHDPresent        0xA00F
 1076 #define PTP_RC_NIKON_StoreError         0xA021
 1077 #define PTP_RC_NIKON_StoreUnformatted       0xA022  /* from z6 sdk */
 1078 #define PTP_RC_NIKON_AdvancedTransferCancel 0xA022  /* dup from me*/
 1079 #define PTP_RC_NIKON_Bulb_Release_Busy      0xA200
 1080 #define PTP_RC_NIKON_Silent_Release_Busy    0xA201
 1081 #define PTP_RC_NIKON_MovieFrame_Release_Busy    0xA202
 1082 #define PTP_RC_NIKON_Shutter_Speed_Time     0xA204
 1083 #define PTP_RC_NIKON_Waiting_2ndRelease     0xA207
 1084 #define PTP_RC_NIKON_MirrorUpCapture_Already_Start      0xA208
 1085 #define PTP_RC_NIKON_Invalid_SBAttribute_Value  0xA209
 1086 
 1087 /* Canon specific response codes */
 1088 #define PTP_RC_CANON_UNKNOWN_COMMAND        0xA001
 1089 #define PTP_RC_CANON_OPERATION_REFUSED      0xA005
 1090 #define PTP_RC_CANON_LENS_COVER         0xA006
 1091 #define PTP_RC_CANON_BATTERY_LOW        0xA101
 1092 #define PTP_RC_CANON_NOT_READY          0xA102
 1093 
 1094 #define PTP_RC_CANON_A009           0xA009
 1095 
 1096 #define PTP_RC_CANON_EOS_UnknownCommand     0xA001
 1097 #define PTP_RC_CANON_EOS_OperationRefused   0xA005
 1098 #define PTP_RC_CANON_EOS_LensCoverClosed    0xA006
 1099 #define PTP_RC_CANON_EOS_LowBattery     0xA101
 1100 #define PTP_RC_CANON_EOS_ObjectNotReady     0xA102
 1101 #define PTP_RC_CANON_EOS_CannotMakeObject   0xA104
 1102 #define PTP_RC_CANON_EOS_MemoryStatusNotReady   0xA106
 1103 
 1104 
 1105 /* Microsoft/MTP specific codes */
 1106 #define PTP_RC_MTP_Undefined            0xA800
 1107 #define PTP_RC_MTP_Invalid_ObjectPropCode   0xA801
 1108 #define PTP_RC_MTP_Invalid_ObjectProp_Format    0xA802
 1109 #define PTP_RC_MTP_Invalid_ObjectProp_Value 0xA803
 1110 #define PTP_RC_MTP_Invalid_ObjectReference  0xA804
 1111 #define PTP_RC_MTP_Invalid_Dataset      0xA806
 1112 #define PTP_RC_MTP_Specification_By_Group_Unsupported       0xA807
 1113 #define PTP_RC_MTP_Specification_By_Depth_Unsupported       0xA808
 1114 #define PTP_RC_MTP_Object_Too_Large     0xA809
 1115 #define PTP_RC_MTP_ObjectProp_Not_Supported 0xA80A
 1116 
 1117 /* Microsoft Advanced Audio/Video Transfer response codes
 1118 (microsoft.com/AAVT 1.0) */
 1119 #define PTP_RC_MTP_Invalid_Media_Session_ID 0xA170
 1120 #define PTP_RC_MTP_Media_Session_Limit_Reached  0xA171
 1121 #define PTP_RC_MTP_No_More_Data         0xA172
 1122 
 1123 /* WiFi Provisioning MTP Extension Error Codes (microsoft.com/WPDWCN: 1.0) */
 1124 #define PTP_RC_MTP_Invalid_WFC_Syntax       0xA121
 1125 #define PTP_RC_MTP_WFC_Version_Not_Supported    0xA122
 1126 
 1127 /* libptp2 extended ERROR codes */
 1128 #define PTP_ERROR_NODEVICE      0x02F9
 1129 #define PTP_ERROR_TIMEOUT       0x02FA
 1130 #define PTP_ERROR_CANCEL        0x02FB
 1131 #define PTP_ERROR_BADPARAM      0x02FC
 1132 #define PTP_ERROR_RESP_EXPECTED     0x02FD
 1133 #define PTP_ERROR_DATA_EXPECTED     0x02FE
 1134 #define PTP_ERROR_IO            0x02FF
 1135 
 1136 /* PTP Event Codes */
 1137 
 1138 #define PTP_EC_Undefined        0x4000
 1139 #define PTP_EC_CancelTransaction    0x4001
 1140 #define PTP_EC_ObjectAdded      0x4002
 1141 #define PTP_EC_ObjectRemoved        0x4003
 1142 #define PTP_EC_StoreAdded       0x4004
 1143 #define PTP_EC_StoreRemoved     0x4005
 1144 #define PTP_EC_DevicePropChanged    0x4006
 1145 #define PTP_EC_ObjectInfoChanged    0x4007
 1146 #define PTP_EC_DeviceInfoChanged    0x4008
 1147 #define PTP_EC_RequestObjectTransfer    0x4009
 1148 #define PTP_EC_StoreFull        0x400A
 1149 #define PTP_EC_DeviceReset      0x400B
 1150 #define PTP_EC_StorageInfoChanged   0x400C
 1151 #define PTP_EC_CaptureComplete      0x400D
 1152 #define PTP_EC_UnreportedStatus     0x400E
 1153 
 1154 /* Canon extension Event Codes */
 1155 #define PTP_EC_CANON_ExtendedErrorcode      0xC005  /* ? */
 1156 #define PTP_EC_CANON_ObjectInfoChanged      0xC008
 1157 #define PTP_EC_CANON_RequestObjectTransfer  0xC009
 1158 #define PTP_EC_CANON_ShutterButtonPressed0  0xC00B
 1159 #define PTP_EC_CANON_CameraModeChanged      0xC00C
 1160 #define PTP_EC_CANON_ShutterButtonPressed1  0xC00E
 1161 
 1162 #define PTP_EC_CANON_StartDirectTransfer    0xC011
 1163 #define PTP_EC_CANON_StopDirectTransfer     0xC013
 1164 
 1165 #define PTP_EC_CANON_TranscodeProgress      0xC01B /* EOS ? */
 1166 
 1167 /* Canon EOS events */
 1168 #define PTP_EC_CANON_EOS_RequestGetEvent        0xc101
 1169 #define PTP_EC_CANON_EOS_RequestCancelTransferMA    0xc180
 1170 #define PTP_EC_CANON_EOS_ObjectAddedEx          0xc181
 1171 #define PTP_EC_CANON_EOS_ObjectRemoved          0xc182
 1172 #define PTP_EC_CANON_EOS_RequestGetObjectInfoEx     0xc183
 1173 #define PTP_EC_CANON_EOS_StorageStatusChanged       0xc184
 1174 #define PTP_EC_CANON_EOS_StorageInfoChanged     0xc185
 1175 #define PTP_EC_CANON_EOS_RequestObjectTransfer      0xc186
 1176 #define PTP_EC_CANON_EOS_ObjectInfoChangedEx        0xc187
 1177 #define PTP_EC_CANON_EOS_ObjectContentChanged       0xc188
 1178 #define PTP_EC_CANON_EOS_PropValueChanged       0xc189
 1179 #define PTP_EC_CANON_EOS_AvailListChanged       0xc18a
 1180 #define PTP_EC_CANON_EOS_CameraStatusChanged        0xc18b
 1181 #define PTP_EC_CANON_EOS_WillSoonShutdown       0xc18d
 1182 #define PTP_EC_CANON_EOS_ShutdownTimerUpdated       0xc18e
 1183 #define PTP_EC_CANON_EOS_RequestCancelTransfer      0xc18f
 1184 #define PTP_EC_CANON_EOS_RequestObjectTransferDT    0xc190
 1185 #define PTP_EC_CANON_EOS_RequestCancelTransferDT    0xc191
 1186 #define PTP_EC_CANON_EOS_StoreAdded         0xc192
 1187 #define PTP_EC_CANON_EOS_StoreRemoved           0xc193
 1188 #define PTP_EC_CANON_EOS_BulbExposureTime       0xc194
 1189 #define PTP_EC_CANON_EOS_RecordingTime          0xc195
 1190 #define PTP_EC_CANON_EOS_InnerDevelopParam      0xc196
 1191 #define PTP_EC_CANON_EOS_RequestObjectTransferDevelop   0xc197
 1192 #define PTP_EC_CANON_EOS_GPSLogOutputProgress       0xc198
 1193 #define PTP_EC_CANON_EOS_GPSLogOutputComplete       0xc199
 1194 #define PTP_EC_CANON_EOS_TouchTrans         0xc19a
 1195 #define PTP_EC_CANON_EOS_RequestObjectTransferExInfo    0xc19b
 1196 #define PTP_EC_CANON_EOS_PowerZoomInfoChanged       0xc19d
 1197 #define PTP_EC_CANON_EOS_RequestPushMode        0xc19f
 1198 #define PTP_EC_CANON_EOS_RequestObjectTransferTS    0xc1a2
 1199 #define PTP_EC_CANON_EOS_AfResult           0xc1a3
 1200 #define PTP_EC_CANON_EOS_CTGInfoCheckComplete       0xc1a4
 1201 #define PTP_EC_CANON_EOS_OLCInfoChanged         0xc1a5
 1202 #define PTP_EC_CANON_EOS_ObjectAddedEx64        0xc1a7
 1203 #define PTP_EC_CANON_EOS_ObjectInfoChangedEx64      0xc1a8
 1204 #define PTP_EC_CANON_EOS_RequestObjectTransfer64    0xc1a9
 1205 #define PTP_EC_CANON_EOS_RequestObjectTransferDT64  0xc1aa
 1206 #define PTP_EC_CANON_EOS_RequestObjectTransferFTP64 0xc1ab
 1207 #define PTP_EC_CANON_EOS_RequestObjectTransferInfoEx64  0xc1ac
 1208 #define PTP_EC_CANON_EOS_RequestObjectTransferMA64  0xc1ad
 1209 #define PTP_EC_CANON_EOS_ImportError            0xc1af
 1210 #define PTP_EC_CANON_EOS_BlePairing         0xc1b0
 1211 #define PTP_EC_CANON_EOS_RequestAutoSendImages      0xc1b1
 1212 #define PTP_EC_CANON_EOS_RequestTranscodedBlockTransfer 0xc1b2
 1213 #define PTP_EC_CANON_EOS_RequestCAssistImage        0xc1b4
 1214 #define PTP_EC_CANON_EOS_RequestObjectTransferFTP   0xc1f1
 1215 
 1216 /* Nikon extension Event Codes */
 1217 
 1218 /* Nikon extension Event Codes */
 1219 #define PTP_EC_Nikon_ObjectAddedInSDRAM     0xC101  /* e1: objecthandle */
 1220 #define PTP_EC_Nikon_CaptureCompleteRecInSdram  0xC102  /* no args */
 1221 /* Gets 1 parameter, objectid pointing to DPOF object */
 1222 #define PTP_EC_Nikon_AdvancedTransfer       0xC103
 1223 #define PTP_EC_Nikon_PreviewImageAdded      0xC104
 1224 #define PTP_EC_Nikon_MovieRecordInterrupted 0xC105  /* e1: errocode, e2: recordkind */
 1225 #define PTP_EC_Nikon_1stCaptureComplete     0xC106  /* 1st phase of mirror up is complete */
 1226 #define PTP_EC_Nikon_MirrorUpCancelComplete 0xC107  /* mirror up canceling is complete */
 1227 #define PTP_EC_Nikon_MovieRecordComplete    0xC108  /* e1: recordkind */
 1228 #define PTP_EC_Nikon_MovieRecordStarted     0xC10A  /* e1: recordkind */
 1229 #define PTP_EC_Nikon_PictureControlAdjustChanged    0xC10B  /* e1: picctrlitem e2: shootingmode */
 1230 #define PTP_EC_Nikon_LiveViewStateChanged   0xC10C  /* e1: liveview state */
 1231 #define PTP_EC_Nikon_ManualSettingsLensDataChanged  0xC10E  /* e1: lensnr */
 1232 #define PTP_EC_Nikon_ActiveSelectionInterrupted 0xC112  /* e1: errorcode */
 1233 #define PTP_EC_Nikon_SBAdded            0xC120  /* e1: sbhandle */
 1234 #define PTP_EC_Nikon_SBRemoved          0xC121  /* e1: sbhandle */
 1235 #define PTP_EC_Nikon_SBAttrChanged      0xC122  /* e1: sbhandle, e2: attrid */
 1236 #define PTP_EC_Nikon_SBGroupAttrChanged     0xC123  /* e1: sbgroupid, e2: groupattrid */
 1237 
 1238 /* Sony */
 1239 #define PTP_EC_Sony_ObjectAdded         0xC201
 1240 #define PTP_EC_Sony_ObjectRemoved       0xC202
 1241 #define PTP_EC_Sony_PropertyChanged     0xC203
 1242 
 1243 /* MTP Event codes */
 1244 #define PTP_EC_MTP_ObjectPropChanged        0xC801
 1245 #define PTP_EC_MTP_ObjectPropDescChanged    0xC802
 1246 #define PTP_EC_MTP_ObjectReferencesChanged  0xC803
 1247 
 1248 #define PTP_EC_PARROT_Status            0xC201
 1249 #define PTP_EC_PARROT_MagnetoCalibrationStatus  0xC202
 1250 
 1251 #define PTP_EC_PANASONIC_ObjectAdded        0xC108
 1252 #define PTP_EC_PANASONIC_ObjectAddedSDRAM   0xC109
 1253 
 1254 /* Olympus E series, PTP style in the 2018+ range (e1mark2 etc.) */
 1255 /* From olympus capture tool */
 1256 #define PTP_EC_Olympus_CreateRecView        0xC001
 1257 #define PTP_EC_Olympus_CreateRecView_New    0xC101
 1258 #define PTP_EC_Olympus_ObjectAdded      0xC002
 1259 #define PTP_EC_Olympus_ObjectAdded_New      0xC102
 1260 #define PTP_EC_Olympus_AF_Frame         0xC003
 1261 #define PTP_EC_Olympus_AF_Frame_New     0xC103
 1262 #define PTP_EC_Olympus_DirectStoreImage     0xC004
 1263 #define PTP_EC_Olympus_DirectStoreImage_New 0xC104
 1264 #define PTP_EC_Olympus_ComplateCameraControlOff     0xC005
 1265 #define PTP_EC_Olympus_ComplateCameraControlOff_New 0xC105
 1266 #define PTP_EC_Olympus_AF_Frame_Over_Info   0xC006
 1267 #define PTP_EC_Olympus_AF_Frame_Over_Info_New   0xC106
 1268 #define PTP_EC_Olympus_DevicePropChanged    0xC008
 1269 #define PTP_EC_Olympus_DevicePropChanged_New    0xC108
 1270 #define PTP_EC_Olympus_ImageTransferModeFinish  0xC00C
 1271 #define PTP_EC_Olympus_ImageTransferModeFinish_New  0xC10C
 1272 #define PTP_EC_Olympus_ImageRecordFinish    0xC00D
 1273 #define PTP_EC_Olympus_ImageRecordFinish_New    0xC10D
 1274 #define PTP_EC_Olympus_SlotStatusChange     0xC00E
 1275 #define PTP_EC_Olympus_SlotStatusChange_New 0xC10E
 1276 #define PTP_EC_Olympus_PrioritizeRecord     0xC00F
 1277 #define PTP_EC_Olympus_PrioritizeRecord_New 0xC10F
 1278 #define PTP_EC_Olympus_FailCombiningAfterShooting   0xC010
 1279 #define PTP_EC_Olympus_FailCombiningAfterShooting_New   0xC110
 1280 #define PTP_EC_Olympus_NotifyAFTargetFrame  0xC011
 1281 #define PTP_EC_Olympus_NotifyAFTargetFrame_New  0xC111
 1282 #define PTP_EC_Olympus_RawEditParamChanged  0xC112
 1283 #define PTP_EC_Olympus_OlyNotifyCreateDrawEdit  0xC113
 1284 
 1285 /* Used by the XML based E series driver */
 1286 #define PTP_EC_Olympus_PropertyChanged      0xC102
 1287 #define PTP_EC_Olympus_CaptureComplete      0xC103
 1288 
 1289 #define PTP_EC_FUJI_PreviewAvailable        0xC001
 1290 #define PTP_EC_FUJI_ObjectAdded         0xC004
 1291 
 1292 /* constants for GetObjectHandles */
 1293 #define PTP_GOH_ALL_STORAGE 0xffffffff
 1294 #define PTP_GOH_ALL_FORMATS 0x00000000
 1295 #define PTP_GOH_ALL_ASSOCS  0x00000000
 1296 #define PTP_GOH_ROOT_PARENT 0xffffffff
 1297 
 1298 /* PTP device info structure (returned by GetDevInfo) */
 1299 
 1300 struct _PTPDeviceInfo {
 1301     uint16_t StandardVersion;
 1302     uint32_t VendorExtensionID;
 1303     uint16_t VendorExtensionVersion;
 1304     char    *VendorExtensionDesc;
 1305     uint16_t FunctionalMode;
 1306     uint32_t OperationsSupported_len;
 1307     uint16_t *OperationsSupported;
 1308     uint32_t EventsSupported_len;
 1309     uint16_t *EventsSupported;
 1310     uint32_t DevicePropertiesSupported_len;
 1311     uint16_t *DevicePropertiesSupported;
 1312     uint32_t CaptureFormats_len;
 1313     uint16_t *CaptureFormats;
 1314     uint32_t ImageFormats_len;
 1315     uint16_t *ImageFormats;
 1316     char    *Manufacturer;
 1317     char    *Model;
 1318     char    *DeviceVersion;
 1319     char    *SerialNumber;
 1320 };
 1321 typedef struct _PTPDeviceInfo PTPDeviceInfo;
 1322 
 1323 /* PTP storageIDs structute (returned by GetStorageIDs) */
 1324 
 1325 struct _PTPStorageIDs {
 1326     uint32_t n;
 1327     uint32_t *Storage;
 1328 };
 1329 typedef struct _PTPStorageIDs PTPStorageIDs;
 1330 
 1331 /* PTP StorageInfo structure (returned by GetStorageInfo) */
 1332 struct _PTPStorageInfo {
 1333     uint16_t StorageType;
 1334     uint16_t FilesystemType;
 1335     uint16_t AccessCapability;
 1336     uint64_t MaxCapability;
 1337     uint64_t FreeSpaceInBytes;
 1338     uint32_t FreeSpaceInImages;
 1339     char    *StorageDescription;
 1340     char    *VolumeLabel;
 1341 };
 1342 typedef struct _PTPStorageInfo PTPStorageInfo;
 1343 
 1344 /* PTP Stream Info */
 1345 struct _PTPStreamInfo {
 1346     uint64_t    DatasetSize;
 1347     uint64_t    TimeResolution;
 1348     uint32_t    FrameHeaderSize;
 1349     uint32_t    FrameMaxSize;
 1350     uint32_t    PacketHeaderSize;
 1351     uint32_t    PacketMaxSize;
 1352     uint32_t    PacketAlignment;
 1353 };
 1354 typedef struct _PTPStreamInfo PTPStreamInfo;
 1355 
 1356 /* PTP objecthandles structure (returned by GetObjectHandles) */
 1357 
 1358 struct _PTPObjectHandles {
 1359     uint32_t n;
 1360     uint32_t *Handler;
 1361 };
 1362 typedef struct _PTPObjectHandles PTPObjectHandles;
 1363 
 1364 #define PTP_HANDLER_SPECIAL 0xffffffff
 1365 #define PTP_HANDLER_ROOT    0x00000000
 1366 
 1367 
 1368 /* PTP objectinfo structure (returned by GetObjectInfo) */
 1369 
 1370 struct _PTPObjectInfo {
 1371     uint32_t StorageID;
 1372     uint16_t ObjectFormat;
 1373     uint16_t ProtectionStatus;
 1374     /* In the regular objectinfo this is 32bit,
 1375      * but we keep the general object size here
 1376      * that also arrives via other methods and so
 1377      * use 64bit */
 1378     uint64_t ObjectCompressedSize;
 1379     uint16_t ThumbFormat;
 1380     uint32_t ThumbCompressedSize;
 1381     uint32_t ThumbPixWidth;
 1382     uint32_t ThumbPixHeight;
 1383     uint32_t ImagePixWidth;
 1384     uint32_t ImagePixHeight;
 1385     uint32_t ImageBitDepth;
 1386     uint32_t ParentObject;
 1387     uint16_t AssociationType;
 1388     uint32_t AssociationDesc;
 1389     uint32_t SequenceNumber;
 1390     char    *Filename;
 1391     time_t  CaptureDate;
 1392     time_t  ModificationDate;
 1393     char    *Keywords;
 1394 };
 1395 typedef struct _PTPObjectInfo PTPObjectInfo;
 1396 
 1397 struct _PTPObjectFilesystemInfo {
 1398     uint32_t ObjectHandle;
 1399     uint32_t StorageID;
 1400     uint16_t ObjectFormat;
 1401     uint16_t ProtectionStatus;
 1402     uint64_t ObjectCompressedSize64;
 1403     uint32_t ParentObject;
 1404     uint16_t AssociationType;
 1405     uint32_t AssociationDesc;
 1406     uint32_t SequenceNumber;
 1407     char    *Filename;
 1408     time_t  ModificationDate;
 1409 };
 1410 typedef struct _PTPObjectFilesystemInfo PTPObjectFilesystemInfo;
 1411 
 1412 /* max ptp string length INCLUDING terminating null character */
 1413 
 1414 #define PTP_MAXSTRLEN               255
 1415 
 1416 /* PTP Object Format Codes */
 1417 
 1418 /* ancillary formats */
 1419 #define PTP_OFC_Undefined           0x3000
 1420 #define PTP_OFC_Defined             0x3800
 1421 #define PTP_OFC_Association         0x3001
 1422 #define PTP_OFC_Script              0x3002
 1423 #define PTP_OFC_Executable          0x3003
 1424 #define PTP_OFC_Text                0x3004
 1425 #define PTP_OFC_HTML                0x3005
 1426 #define PTP_OFC_DPOF                0x3006
 1427 #define PTP_OFC_AIFF                0x3007
 1428 #define PTP_OFC_WAV             0x3008
 1429 #define PTP_OFC_MP3             0x3009
 1430 #define PTP_OFC_AVI             0x300A
 1431 #define PTP_OFC_MPEG                0x300B
 1432 #define PTP_OFC_ASF             0x300C
 1433 #define PTP_OFC_QT              0x300D /* guessing */
 1434 /* image formats */
 1435 #define PTP_OFC_EXIF_JPEG           0x3801
 1436 #define PTP_OFC_TIFF_EP             0x3802
 1437 #define PTP_OFC_FlashPix            0x3803
 1438 #define PTP_OFC_BMP             0x3804
 1439 #define PTP_OFC_CIFF                0x3805
 1440 #define PTP_OFC_Undefined_0x3806        0x3806
 1441 #define PTP_OFC_GIF             0x3807
 1442 #define PTP_OFC_JFIF                0x3808
 1443 #define PTP_OFC_PCD             0x3809
 1444 #define PTP_OFC_PICT                0x380A
 1445 #define PTP_OFC_PNG             0x380B
 1446 #define PTP_OFC_Undefined_0x380C        0x380C
 1447 #define PTP_OFC_TIFF                0x380D
 1448 #define PTP_OFC_TIFF_IT             0x380E
 1449 #define PTP_OFC_JP2             0x380F
 1450 #define PTP_OFC_JPX             0x3810
 1451 /* ptp v1.1 has only DNG new */
 1452 #define PTP_OFC_DNG             0x3811
 1453 /* Eastman Kodak extension ancillary format */
 1454 #define PTP_OFC_EK_M3U              0xb002
 1455 /* Canon extension */
 1456 #define PTP_OFC_CANON_CRW           0xb101
 1457 #define PTP_OFC_CANON_CRW3          0xb103
 1458 #define PTP_OFC_CANON_MOV           0xb104
 1459 #define PTP_OFC_CANON_MOV2          0xb105
 1460 #define PTP_OFC_CANON_CR3           0xb108
 1461 /* CHDK specific raw mode */
 1462 #define PTP_OFC_CANON_CHDK_CRW          0xb1ff
 1463 /* Sony */
 1464 #define PTP_OFC_SONY_RAW            0xb101
 1465 /* MTP extensions */
 1466 #define PTP_OFC_MTP_MediaCard           0xb211
 1467 #define PTP_OFC_MTP_MediaCardGroup      0xb212
 1468 #define PTP_OFC_MTP_Encounter           0xb213
 1469 #define PTP_OFC_MTP_EncounterBox        0xb214
 1470 #define PTP_OFC_MTP_M4A             0xb215
 1471 #define PTP_OFC_MTP_ZUNEUNDEFINED       0xb217 /* Unknown file type */
 1472 #define PTP_OFC_MTP_Firmware            0xb802
 1473 #define PTP_OFC_MTP_WindowsImageFormat      0xb881
 1474 #define PTP_OFC_MTP_UndefinedAudio      0xb900
 1475 #define PTP_OFC_MTP_WMA             0xb901
 1476 #define PTP_OFC_MTP_OGG             0xb902
 1477 #define PTP_OFC_MTP_AAC             0xb903
 1478 #define PTP_OFC_MTP_AudibleCodec        0xb904
 1479 #define PTP_OFC_MTP_FLAC            0xb906
 1480 #define PTP_OFC_MTP_SamsungPlaylist     0xb909
 1481 #define PTP_OFC_MTP_UndefinedVideo      0xb980
 1482 #define PTP_OFC_MTP_WMV             0xb981
 1483 #define PTP_OFC_MTP_MP4             0xb982
 1484 #define PTP_OFC_MTP_MP2             0xb983
 1485 #define PTP_OFC_MTP_3GP             0xb984
 1486 #define PTP_OFC_MTP_UndefinedCollection     0xba00
 1487 #define PTP_OFC_MTP_AbstractMultimediaAlbum 0xba01
 1488 #define PTP_OFC_MTP_AbstractImageAlbum      0xba02
 1489 #define PTP_OFC_MTP_AbstractAudioAlbum      0xba03
 1490 #define PTP_OFC_MTP_AbstractVideoAlbum      0xba04
 1491 #define PTP_OFC_MTP_AbstractAudioVideoPlaylist  0xba05
 1492 #define PTP_OFC_MTP_AbstractContactGroup    0xba06
 1493 #define PTP_OFC_MTP_AbstractMessageFolder   0xba07
 1494 #define PTP_OFC_MTP_AbstractChapteredProduction 0xba08
 1495 #define PTP_OFC_MTP_AbstractAudioPlaylist   0xba09
 1496 #define PTP_OFC_MTP_AbstractVideoPlaylist   0xba0a
 1497 #define PTP_OFC_MTP_AbstractMediacast       0xba0b
 1498 #define PTP_OFC_MTP_WPLPlaylist         0xba10
 1499 #define PTP_OFC_MTP_M3UPlaylist         0xba11
 1500 #define PTP_OFC_MTP_MPLPlaylist         0xba12
 1501 #define PTP_OFC_MTP_ASXPlaylist         0xba13
 1502 #define PTP_OFC_MTP_PLSPlaylist         0xba14
 1503 #define PTP_OFC_MTP_UndefinedDocument       0xba80
 1504 #define PTP_OFC_MTP_AbstractDocument        0xba81
 1505 #define PTP_OFC_MTP_XMLDocument         0xba82
 1506 #define PTP_OFC_MTP_MSWordDocument      0xba83
 1507 #define PTP_OFC_MTP_MHTCompiledHTMLDocument 0xba84
 1508 #define PTP_OFC_MTP_MSExcelSpreadsheetXLS   0xba85
 1509 #define PTP_OFC_MTP_MSPowerpointPresentationPPT 0xba86
 1510 #define PTP_OFC_MTP_UndefinedMessage        0xbb00
 1511 #define PTP_OFC_MTP_AbstractMessage     0xbb01
 1512 #define PTP_OFC_MTP_UndefinedContact        0xbb80
 1513 #define PTP_OFC_MTP_AbstractContact     0xbb81
 1514 #define PTP_OFC_MTP_vCard2          0xbb82
 1515 #define PTP_OFC_MTP_vCard3          0xbb83
 1516 #define PTP_OFC_MTP_UndefinedCalendarItem   0xbe00
 1517 #define PTP_OFC_MTP_AbstractCalendarItem    0xbe01
 1518 #define PTP_OFC_MTP_vCalendar1          0xbe02
 1519 #define PTP_OFC_MTP_vCalendar2          0xbe03
 1520 #define PTP_OFC_MTP_UndefinedWindowsExecutable  0xbe80
 1521 #define PTP_OFC_MTP_MediaCast           0xbe81
 1522 #define PTP_OFC_MTP_Section         0xbe82
 1523 
 1524 /* PTP Association Types */
 1525 #define PTP_AT_Undefined            0x0000
 1526 #define PTP_AT_GenericFolder            0x0001
 1527 #define PTP_AT_Album                0x0002
 1528 #define PTP_AT_TimeSequence         0x0003
 1529 #define PTP_AT_HorizontalPanoramic      0x0004
 1530 #define PTP_AT_VerticalPanoramic        0x0005
 1531 #define PTP_AT_2DPanoramic          0x0006
 1532 #define PTP_AT_AncillaryData            0x0007
 1533 
 1534 /* PTP Protection Status */
 1535 
 1536 #define PTP_PS_NoProtection         0x0000
 1537 #define PTP_PS_ReadOnly             0x0001
 1538 #define PTP_PS_MTP_ReadOnlyData         0x8002
 1539 #define PTP_PS_MTP_NonTransferableData      0x8003
 1540 
 1541 /* PTP Storage Types */
 1542 
 1543 #define PTP_ST_Undefined            0x0000
 1544 #define PTP_ST_FixedROM             0x0001
 1545 #define PTP_ST_RemovableROM         0x0002
 1546 #define PTP_ST_FixedRAM             0x0003
 1547 #define PTP_ST_RemovableRAM         0x0004
 1548 
 1549 /* PTP FilesystemType Values */
 1550 
 1551 #define PTP_FST_Undefined           0x0000
 1552 #define PTP_FST_GenericFlat         0x0001
 1553 #define PTP_FST_GenericHierarchical     0x0002
 1554 #define PTP_FST_DCF             0x0003
 1555 
 1556 /* PTP StorageInfo AccessCapability Values */
 1557 
 1558 #define PTP_AC_ReadWrite            0x0000
 1559 #define PTP_AC_ReadOnly             0x0001
 1560 #define PTP_AC_ReadOnly_with_Object_Deletion    0x0002
 1561 
 1562 /* Property Describing Dataset, Range Form */
 1563 
 1564 union _PTPPropertyValue {
 1565     char        *str;   /* common string, malloced */
 1566     uint8_t     u8;
 1567     int8_t      i8;
 1568     uint16_t    u16;
 1569     int16_t     i16;
 1570     uint32_t    u32;
 1571     int32_t     i32;
 1572     uint64_t    u64;
 1573     int64_t     i64;
 1574     /* XXXX: 128 bit signed and unsigned missing */
 1575     struct array {
 1576         uint32_t    count;
 1577         union _PTPPropertyValue *v; /* malloced, count elements */
 1578     } a;
 1579 };
 1580 
 1581 typedef union _PTPPropertyValue PTPPropertyValue;
 1582 
 1583 /* Metadata lists for MTP operations */
 1584 struct _MTPProperties {
 1585     uint16_t        property;
 1586     uint16_t        datatype;
 1587     uint32_t        ObjectHandle;
 1588     PTPPropertyValue    propval;
 1589 };
 1590 typedef struct _MTPProperties MTPProperties;
 1591 
 1592 struct _PTPPropDescRangeForm {
 1593     PTPPropertyValue    MinimumValue;
 1594     PTPPropertyValue    MaximumValue;
 1595     PTPPropertyValue    StepSize;
 1596 };
 1597 typedef struct _PTPPropDescRangeForm PTPPropDescRangeForm;
 1598 
 1599 /* Property Describing Dataset, Enum Form */
 1600 
 1601 struct _PTPPropDescEnumForm {
 1602     uint16_t        NumberOfValues;
 1603     PTPPropertyValue    *SupportedValue;    /* malloced */
 1604 };
 1605 typedef struct _PTPPropDescEnumForm PTPPropDescEnumForm;
 1606 
 1607 struct _PTPPropDescArrayLengthForm {
 1608     uint16_t        NumberOfValues;
 1609 };
 1610 typedef struct _PTPPropDescArrayLengthForm PTPPropDescArrayLengthForm;
 1611 
 1612 struct _PTPPropDescStringForm {
 1613     char            *String;
 1614 };
 1615 typedef struct _PTPPropDescStringForm PTPPropDescStringForm;
 1616 
 1617 /* Device Property Describing Dataset (DevicePropDesc) */
 1618 
 1619 struct _PTPDevicePropDesc {
 1620     uint16_t        DevicePropertyCode;
 1621     uint16_t        DataType;
 1622     uint8_t         GetSet;
 1623     PTPPropertyValue    FactoryDefaultValue;
 1624     PTPPropertyValue    CurrentValue;
 1625     uint8_t         FormFlag;
 1626     union   {
 1627         PTPPropDescEnumForm Enum;
 1628         PTPPropDescRangeForm    Range;
 1629     } FORM;
 1630 };
 1631 typedef struct _PTPDevicePropDesc PTPDevicePropDesc;
 1632 
 1633 /* Object Property Describing Dataset (DevicePropDesc) */
 1634 
 1635 struct _PTPObjectPropDesc {
 1636     uint16_t        ObjectPropertyCode;
 1637     uint16_t        DataType;
 1638     uint8_t         GetSet;
 1639     PTPPropertyValue    FactoryDefaultValue;
 1640     uint32_t        GroupCode;
 1641     uint8_t         FormFlag;
 1642     union   {
 1643         PTPPropDescEnumForm     Enum;
 1644         PTPPropDescRangeForm        Range;
 1645         PTPPropDescStringForm       DateTime;
 1646         PTPPropDescArrayLengthForm  FixedLengthArray;
 1647         PTPPropDescStringForm       RegularExpression;
 1648         PTPPropDescArrayLengthForm  ByteArray;
 1649         PTPPropDescStringForm       LongString;
 1650     } FORM;
 1651 };
 1652 typedef struct _PTPObjectPropDesc PTPObjectPropDesc;
 1653 
 1654 /* Canon filesystem's folder entry Dataset */
 1655 
 1656 #define PTP_CANON_FilenameBufferLen 13
 1657 #define PTP_CANON_FolderEntryLen    28
 1658 
 1659 struct _PTPCANONFolderEntry {
 1660     uint32_t    ObjectHandle;
 1661     uint16_t    ObjectFormatCode;
 1662     uint8_t     Flags;
 1663     uint32_t    ObjectSize;
 1664     time_t      Time;
 1665     char        Filename[PTP_CANON_FilenameBufferLen];
 1666 
 1667     uint32_t    StorageID;
 1668 };
 1669 typedef struct _PTPCANONFolderEntry PTPCANONFolderEntry;
 1670 
 1671 /* Nikon Tone Curve Data */
 1672 
 1673 #define PTP_NIKON_MaxCurvePoints 19
 1674 
 1675 struct _PTPNIKONCoordinatePair {
 1676     uint8_t     X;
 1677     uint8_t     Y;
 1678 };
 1679 
 1680 typedef struct _PTPNIKONCoordinatePair PTPNIKONCoordinatePair;
 1681 
 1682 struct _PTPNTCCoordinatePair {
 1683     uint8_t     X;
 1684     uint8_t     Y;
 1685 };
 1686 
 1687 typedef struct _PTPNTCCoordinatePair PTPNTCCoordinatePair;
 1688 
 1689 struct _PTPNIKONCurveData {
 1690     char            static_preamble[6];
 1691     uint8_t         XAxisStartPoint;
 1692     uint8_t         XAxisEndPoint;
 1693     uint8_t         YAxisStartPoint;
 1694     uint8_t         YAxisEndPoint;
 1695     uint8_t         MidPointIntegerPart;
 1696     uint8_t         MidPointDecimalPart;
 1697     uint8_t         NCoordinates;
 1698     PTPNIKONCoordinatePair  CurveCoordinates[PTP_NIKON_MaxCurvePoints];
 1699 };
 1700 
 1701 typedef struct _PTPNIKONCurveData PTPNIKONCurveData;
 1702 
 1703 struct _PTPEKTextParams {
 1704     char    *title;
 1705     char    *line[5];
 1706 };
 1707 typedef struct _PTPEKTextParams PTPEKTextParams;
 1708 
 1709 /* Nikon Wifi profiles */
 1710 
 1711 struct _PTPNIKONWifiProfile {
 1712     /* Values valid both when reading and writing profiles */
 1713     char      profile_name[17];
 1714     uint8_t   device_type;
 1715     uint8_t   icon_type;
 1716     char      essid[33];
 1717 
 1718     /* Values only valid when reading. Some of these are in the write packet,
 1719      * but are set automatically, like id, display_order and creation_date. */
 1720     uint8_t   id;
 1721     uint8_t   valid;
 1722     uint8_t   display_order;
 1723     char      creation_date[16];
 1724     char      lastusage_date[16];
 1725 
 1726     /* Values only valid when writing */
 1727     uint32_t  ip_address;
 1728     uint8_t   subnet_mask; /* first zero bit position, e.g. 24 for 255.255.255.0 */
 1729     uint32_t  gateway_address;
 1730     uint8_t   address_mode; /* 0 - Manual, 2-3 -  DHCP ad-hoc/managed*/
 1731     uint8_t   access_mode; /* 0 - Managed, 1 - Adhoc */
 1732     uint8_t   wifi_channel; /* 1-11 */
 1733     uint8_t   authentification; /* 0 - Open, 1 - Shared, 2 - WPA-PSK */
 1734     uint8_t   encryption; /* 0 - None, 1 - WEP 64bit, 2 - WEP 128bit (not supported: 3 - TKIP) */
 1735     uint8_t   key[64];
 1736     uint8_t   key_nr;
 1737 /*  char      guid[16]; */
 1738 };
 1739 
 1740 typedef struct _PTPNIKONWifiProfile PTPNIKONWifiProfile;
 1741 
 1742 enum _PTPCanon_changes_types {
 1743     PTP_CANON_EOS_CHANGES_TYPE_UNKNOWN,
 1744     PTP_CANON_EOS_CHANGES_TYPE_OBJECTINFO,
 1745     PTP_CANON_EOS_CHANGES_TYPE_OBJECTTRANSFER,
 1746     PTP_CANON_EOS_CHANGES_TYPE_PROPERTY,
 1747     PTP_CANON_EOS_CHANGES_TYPE_CAMERASTATUS,
 1748     PTP_CANON_EOS_CHANGES_TYPE_FOCUSINFO,
 1749     PTP_CANON_EOS_CHANGES_TYPE_FOCUSMASK,
 1750     PTP_CANON_EOS_CHANGES_TYPE_OBJECTREMOVED,
 1751     PTP_CANON_EOS_CHANGES_TYPE_OBJECTINFO_CHANGE,
 1752     PTP_CANON_EOS_CHANGES_TYPE_OBJECTCONTENT_CHANGE
 1753 };
 1754 
 1755 struct _PTPCanon_New_Object {
 1756     uint32_t    oid;
 1757     PTPObjectInfo   oi;
 1758 };
 1759 
 1760 struct _PTPCanon_changes_entry {
 1761     enum _PTPCanon_changes_types    type;
 1762     union {
 1763         struct _PTPCanon_New_Object object; /* TYPE_OBJECTINFO */
 1764         char                *info;
 1765         uint16_t            propid;
 1766         int             status;
 1767     } u;
 1768 };
 1769 typedef struct _PTPCanon_changes_entry PTPCanon_changes_entry;
 1770 
 1771 typedef struct _PTPCanon_Property {
 1772     uint32_t        size;
 1773     uint32_t        proptype;
 1774     unsigned char       *data;
 1775 
 1776     /* fill out for queries */
 1777     PTPDevicePropDesc   dpd;
 1778 } PTPCanon_Property;
 1779 
 1780 typedef struct _PTPCanonEOSDeviceInfo {
 1781     /* length */
 1782     uint32_t EventsSupported_len;
 1783     uint32_t *EventsSupported;
 1784 
 1785     uint32_t DevicePropertiesSupported_len;
 1786     uint32_t *DevicePropertiesSupported;
 1787 
 1788     uint32_t unk_len;
 1789     uint32_t *unk;
 1790 } PTPCanonEOSDeviceInfo;
 1791 
 1792 /* DataType Codes */
 1793 
 1794 #define PTP_DTC_UNDEF       0x0000
 1795 #define PTP_DTC_INT8        0x0001
 1796 #define PTP_DTC_UINT8       0x0002
 1797 #define PTP_DTC_INT16       0x0003
 1798 #define PTP_DTC_UINT16      0x0004
 1799 #define PTP_DTC_INT32       0x0005
 1800 #define PTP_DTC_UINT32      0x0006
 1801 #define PTP_DTC_INT64       0x0007
 1802 #define PTP_DTC_UINT64      0x0008
 1803 #define PTP_DTC_INT128      0x0009
 1804 #define PTP_DTC_UINT128     0x000A
 1805 
 1806 #define PTP_DTC_ARRAY_MASK  0x4000
 1807 
 1808 #define PTP_DTC_AINT8       (PTP_DTC_ARRAY_MASK | PTP_DTC_INT8)
 1809 #define PTP_DTC_AUINT8      (PTP_DTC_ARRAY_MASK | PTP_DTC_UINT8)
 1810 #define PTP_DTC_AINT16      (PTP_DTC_ARRAY_MASK | PTP_DTC_INT16)
 1811 #define PTP_DTC_AUINT16     (PTP_DTC_ARRAY_MASK | PTP_DTC_UINT16)
 1812 #define PTP_DTC_AINT32      (PTP_DTC_ARRAY_MASK | PTP_DTC_INT32)
 1813 #define PTP_DTC_AUINT32     (PTP_DTC_ARRAY_MASK | PTP_DTC_UINT32)
 1814 #define PTP_DTC_AINT64      (PTP_DTC_ARRAY_MASK | PTP_DTC_INT64)
 1815 #define PTP_DTC_AUINT64     (PTP_DTC_ARRAY_MASK | PTP_DTC_UINT64)
 1816 #define PTP_DTC_AINT128     (PTP_DTC_ARRAY_MASK | PTP_DTC_INT128)
 1817 #define PTP_DTC_AUINT128    (PTP_DTC_ARRAY_MASK | PTP_DTC_UINT128)
 1818 
 1819 #define PTP_DTC_STR     0xFFFF
 1820 
 1821 /* Device Properties Codes */
 1822 
 1823 /* PTP v1.0 property codes */
 1824 #define PTP_DPC_Undefined       0x5000
 1825 #define PTP_DPC_BatteryLevel        0x5001
 1826 #define PTP_DPC_FunctionalMode      0x5002
 1827 #define PTP_DPC_ImageSize       0x5003
 1828 #define PTP_DPC_CompressionSetting  0x5004
 1829 #define PTP_DPC_WhiteBalance        0x5005
 1830 #define PTP_DPC_RGBGain         0x5006
 1831 #define PTP_DPC_FNumber         0x5007
 1832 #define PTP_DPC_FocalLength     0x5008
 1833 #define PTP_DPC_FocusDistance       0x5009
 1834 #define PTP_DPC_FocusMode       0x500A
 1835 #define PTP_DPC_ExposureMeteringMode    0x500B
 1836 #define PTP_DPC_FlashMode       0x500C
 1837 #define PTP_DPC_ExposureTime        0x500D
 1838 #define PTP_DPC_ExposureProgramMode 0x500E
 1839 #define PTP_DPC_ExposureIndex       0x500F
 1840 #define PTP_DPC_ExposureBiasCompensation    0x5010
 1841 #define PTP_DPC_DateTime        0x5011
 1842 #define PTP_DPC_CaptureDelay        0x5012
 1843 #define PTP_DPC_StillCaptureMode    0x5013
 1844 #define PTP_DPC_Contrast        0x5014
 1845 #define PTP_DPC_Sharpness       0x5015
 1846 #define PTP_DPC_DigitalZoom     0x5016
 1847 #define PTP_DPC_EffectMode      0x5017
 1848 #define PTP_DPC_BurstNumber     0x5018
 1849 #define PTP_DPC_BurstInterval       0x5019
 1850 #define PTP_DPC_TimelapseNumber     0x501A
 1851 #define PTP_DPC_TimelapseInterval   0x501B
 1852 #define PTP_DPC_FocusMeteringMode   0x501C
 1853 #define PTP_DPC_UploadURL       0x501D
 1854 #define PTP_DPC_Artist          0x501E
 1855 #define PTP_DPC_CopyrightInfo       0x501F
 1856 /* PTP v1.1 property codes */
 1857 #define PTP_DPC_SupportedStreams    0x5020
 1858 #define PTP_DPC_EnabledStreams      0x5021
 1859 #define PTP_DPC_VideoFormat     0x5022
 1860 #define PTP_DPC_VideoResolution     0x5023
 1861 #define PTP_DPC_VideoQuality        0x5024
 1862 #define PTP_DPC_VideoFrameRate      0x5025
 1863 #define PTP_DPC_VideoContrast       0x5026
 1864 #define PTP_DPC_VideoBrightness     0x5027
 1865 #define PTP_DPC_AudioFormat     0x5028
 1866 #define PTP_DPC_AudioBitrate        0x5029
 1867 #define PTP_DPC_AudioSamplingRate   0x502A
 1868 #define PTP_DPC_AudioBitPerSample   0x502B
 1869 #define PTP_DPC_AudioVolume     0x502C
 1870 
 1871 /* Proprietary vendor extension device property mask */
 1872 #define PTP_DPC_EXTENSION_MASK      0xF000
 1873 #define PTP_DPC_EXTENSION       0xD000
 1874 
 1875 /* Zune extension device property codes */
 1876 #define PTP_DPC_MTP_ZUNE_UNKNOWN1   0xD181
 1877 #define PTP_DPC_MTP_ZUNE_UNKNOWN2   0xD132
 1878 #define PTP_DPC_MTP_ZUNE_UNKNOWN3   0xD215
 1879 #define PTP_DPC_MTP_ZUNE_UNKNOWN4   0xD216
 1880 
 1881 /* Eastman Kodak extension device property codes */
 1882 #define PTP_DPC_EK_ColorTemperature 0xD001
 1883 #define PTP_DPC_EK_DateTimeStampFormat  0xD002
 1884 #define PTP_DPC_EK_BeepMode     0xD003
 1885 #define PTP_DPC_EK_VideoOut     0xD004
 1886 #define PTP_DPC_EK_PowerSaving      0xD005
 1887 #define PTP_DPC_EK_UI_Language      0xD006
 1888 
 1889 /* Canon extension device property codes */
 1890 #define PTP_DPC_CANON_BeepMode      0xD001
 1891 #define PTP_DPC_CANON_BatteryKind   0xD002
 1892 #define PTP_DPC_CANON_BatteryStatus 0xD003
 1893 #define PTP_DPC_CANON_UILockType    0xD004
 1894 #define PTP_DPC_CANON_CameraMode    0xD005
 1895 #define PTP_DPC_CANON_ImageQuality  0xD006
 1896 #define PTP_DPC_CANON_FullViewFileFormat 0xD007
 1897 #define PTP_DPC_CANON_ImageSize     0xD008
 1898 #define PTP_DPC_CANON_SelfTime      0xD009
 1899 #define PTP_DPC_CANON_FlashMode     0xD00A
 1900 #define PTP_DPC_CANON_Beep      0xD00B
 1901 #define PTP_DPC_CANON_ShootingMode  0xD00C
 1902 #define PTP_DPC_CANON_ImageMode     0xD00D
 1903 #define PTP_DPC_CANON_DriveMode     0xD00E
 1904 #define PTP_DPC_CANON_EZoom     0xD00F
 1905 #define PTP_DPC_CANON_MeteringMode  0xD010
 1906 #define PTP_DPC_CANON_AFDistance    0xD011
 1907 #define PTP_DPC_CANON_FocusingPoint 0xD012
 1908 #define PTP_DPC_CANON_WhiteBalance  0xD013
 1909 #define PTP_DPC_CANON_SlowShutterSetting    0xD014
 1910 #define PTP_DPC_CANON_AFMode        0xD015
 1911 #define PTP_DPC_CANON_ImageStabilization    0xD016
 1912 #define PTP_DPC_CANON_Contrast      0xD017
 1913 #define PTP_DPC_CANON_ColorGain     0xD018
 1914 #define PTP_DPC_CANON_Sharpness     0xD019
 1915 #define PTP_DPC_CANON_Sensitivity   0xD01A
 1916 #define PTP_DPC_CANON_ParameterSet  0xD01B
 1917 #define PTP_DPC_CANON_ISOSpeed      0xD01C
 1918 #define PTP_DPC_CANON_Aperture      0xD01D
 1919 #define PTP_DPC_CANON_ShutterSpeed  0xD01E
 1920 #define PTP_DPC_CANON_ExpCompensation   0xD01F
 1921 #define PTP_DPC_CANON_FlashCompensation 0xD020
 1922 #define PTP_DPC_CANON_AEBExposureCompensation   0xD021
 1923 #define PTP_DPC_CANON_AvOpen        0xD023
 1924 #define PTP_DPC_CANON_AvMax     0xD024
 1925 #define PTP_DPC_CANON_FocalLength   0xD025
 1926 #define PTP_DPC_CANON_FocalLengthTele   0xD026
 1927 #define PTP_DPC_CANON_FocalLengthWide   0xD027
 1928 #define PTP_DPC_CANON_FocalLengthDenominator    0xD028
 1929 #define PTP_DPC_CANON_CaptureTransferMode   0xD029
 1930 #define CANON_TRANSFER_ENTIRE_IMAGE_TO_PC   0x0002
 1931 #define CANON_TRANSFER_SAVE_THUMBNAIL_TO_DEVICE 0x0004
 1932 #define CANON_TRANSFER_SAVE_IMAGE_TO_DEVICE 0x0008
 1933 /* we use those values: */
 1934 #define CANON_TRANSFER_MEMORY       (2|1)
 1935 #define CANON_TRANSFER_CARD     (8|4|1)
 1936 
 1937 #define PTP_DPC_CANON_Zoom      0xD02A
 1938 #define PTP_DPC_CANON_NamePrefix    0xD02B
 1939 #define PTP_DPC_CANON_SizeQualityMode   0xD02C
 1940 #define PTP_DPC_CANON_SupportedThumbSize    0xD02D
 1941 #define PTP_DPC_CANON_SizeOfOutputDataFromCamera    0xD02E
 1942 #define PTP_DPC_CANON_SizeOfInputDataToCamera       0xD02F
 1943 #define PTP_DPC_CANON_RemoteAPIVersion  0xD030
 1944 #define PTP_DPC_CANON_FirmwareVersion   0xD031
 1945 #define PTP_DPC_CANON_CameraModel   0xD032
 1946 #define PTP_DPC_CANON_CameraOwner   0xD033
 1947 #define PTP_DPC_CANON_UnixTime      0xD034
 1948 #define PTP_DPC_CANON_CameraBodyID  0xD035
 1949 #define PTP_DPC_CANON_CameraOutput  0xD036
 1950 #define PTP_DPC_CANON_DispAv        0xD037
 1951 #define PTP_DPC_CANON_AvOpenApex    0xD038
 1952 #define PTP_DPC_CANON_DZoomMagnification    0xD039
 1953 #define PTP_DPC_CANON_MlSpotPos     0xD03A
 1954 #define PTP_DPC_CANON_DispAvMax     0xD03B
 1955 #define PTP_DPC_CANON_AvMaxApex     0xD03C
 1956 #define PTP_DPC_CANON_EZoomStartPosition        0xD03D
 1957 #define PTP_DPC_CANON_FocalLengthOfTele 0xD03E
 1958 #define PTP_DPC_CANON_EZoomSizeOfTele   0xD03F
 1959 #define PTP_DPC_CANON_PhotoEffect   0xD040
 1960 #define PTP_DPC_CANON_AssistLight   0xD041
 1961 #define PTP_DPC_CANON_FlashQuantityCount    0xD042
 1962 #define PTP_DPC_CANON_RotationAngle 0xD043
 1963 #define PTP_DPC_CANON_RotationScene 0xD044
 1964 #define PTP_DPC_CANON_EventEmulateMode  0xD045
 1965 #define PTP_DPC_CANON_DPOFVersion   0xD046
 1966 #define PTP_DPC_CANON_TypeOfSupportedSlideShow  0xD047
 1967 #define PTP_DPC_CANON_AverageFilesizes  0xD048
 1968 #define PTP_DPC_CANON_ModelID       0xD049
 1969 
 1970 #define PTP_DPC_CANON_EOS_PowerZoomPosition 0xD055
 1971 #define PTP_DPC_CANON_EOS_StrobeSettingSimple   0xD056
 1972 #define PTP_DPC_CANON_EOS_ConnectTrigger    0xD058
 1973 #define PTP_DPC_CANON_EOS_ChangeCameraMode  0xD059
 1974 
 1975 /* From EOS 400D trace. */
 1976 #define PTP_DPC_CANON_EOS_Aperture      0xD101
 1977 #define PTP_DPC_CANON_EOS_ShutterSpeed      0xD102
 1978 #define PTP_DPC_CANON_EOS_ISOSpeed      0xD103
 1979 #define PTP_DPC_CANON_EOS_ExpCompensation   0xD104
 1980 #define PTP_DPC_CANON_EOS_AutoExposureMode  0xD105
 1981 #define PTP_DPC_CANON_EOS_DriveMode     0xD106
 1982 #define PTP_DPC_CANON_EOS_MeteringMode      0xD107
 1983 #define PTP_DPC_CANON_EOS_FocusMode     0xD108
 1984 #define PTP_DPC_CANON_EOS_WhiteBalance      0xD109
 1985 #define PTP_DPC_CANON_EOS_ColorTemperature  0xD10A
 1986 #define PTP_DPC_CANON_EOS_WhiteBalanceAdjustA   0xD10B
 1987 #define PTP_DPC_CANON_EOS_WhiteBalanceAdjustB   0xD10C
 1988 #define PTP_DPC_CANON_EOS_WhiteBalanceXA    0xD10D
 1989 #define PTP_DPC_CANON_EOS_WhiteBalanceXB    0xD10E
 1990 #define PTP_DPC_CANON_EOS_ColorSpace        0xD10F
 1991 #define PTP_DPC_CANON_EOS_PictureStyle      0xD110
 1992 #define PTP_DPC_CANON_EOS_BatteryPower      0xD111
 1993 #define PTP_DPC_CANON_EOS_BatterySelect     0xD112
 1994 #define PTP_DPC_CANON_EOS_CameraTime        0xD113
 1995 #define PTP_DPC_CANON_EOS_AutoPowerOff      0xD114
 1996 #define PTP_DPC_CANON_EOS_Owner         0xD115
 1997 #define PTP_DPC_CANON_EOS_ModelID       0xD116
 1998 #define PTP_DPC_CANON_EOS_PTPExtensionVersion   0xD119
 1999 #define PTP_DPC_CANON_EOS_DPOFVersion       0xD11A
 2000 #define PTP_DPC_CANON_EOS_AvailableShots    0xD11B
 2001 #define PTP_CANON_EOS_CAPTUREDEST_HD        4
 2002 #define PTP_DPC_CANON_EOS_CaptureDestination    0xD11C
 2003 #define PTP_DPC_CANON_EOS_BracketMode       0xD11D
 2004 #define PTP_DPC_CANON_EOS_CurrentStorage    0xD11E
 2005 #define PTP_DPC_CANON_EOS_CurrentFolder     0xD11F
 2006 #define PTP_DPC_CANON_EOS_ImageFormat       0xD120  /* file setting */
 2007 #define PTP_DPC_CANON_EOS_ImageFormatCF     0xD121  /* file setting CF */
 2008 #define PTP_DPC_CANON_EOS_ImageFormatSD     0xD122  /* file setting SD */
 2009 #define PTP_DPC_CANON_EOS_ImageFormatExtHD  0xD123  /* file setting exthd */
 2010 #define PTP_DPC_CANON_EOS_RefocusState      0xD124
 2011 #define PTP_DPC_CANON_EOS_CameraNickname    0xD125
 2012 #define PTP_DPC_CANON_EOS_StroboSettingExpCompositionControl    0xD126
 2013 #define PTP_DPC_CANON_EOS_ConnectStatus     0xD127
 2014 #define PTP_DPC_CANON_EOS_LensBarrelStatus  0xD128
 2015 #define PTP_DPC_CANON_EOS_SilentShutterSetting  0xD129
 2016 #define PTP_DPC_CANON_EOS_LV_AF_EyeDetect   0xD12C
 2017 #define PTP_DPC_CANON_EOS_AutoTransMobile   0xD12D
 2018 #define PTP_DPC_CANON_EOS_URLSupportFormat  0xD12E
 2019 #define PTP_DPC_CANON_EOS_SpecialAcc        0xD12F
 2020 #define PTP_DPC_CANON_EOS_CompressionS      0xD130
 2021 #define PTP_DPC_CANON_EOS_CompressionM1     0xD131
 2022 #define PTP_DPC_CANON_EOS_CompressionM2     0xD132
 2023 #define PTP_DPC_CANON_EOS_CompressionL      0xD133
 2024 #define PTP_DPC_CANON_EOS_IntervalShootSetting  0xD134
 2025 #define PTP_DPC_CANON_EOS_IntervalShootState    0xD135
 2026 #define PTP_DPC_CANON_EOS_PushMode      0xD136
 2027 #define PTP_DPC_CANON_EOS_LvCFilterKind     0xD137
 2028 #define PTP_DPC_CANON_EOS_AEModeDial        0xD138
 2029 #define PTP_DPC_CANON_EOS_AEModeCustom      0xD139
 2030 #define PTP_DPC_CANON_EOS_MirrorUpSetting   0xD13A
 2031 #define PTP_DPC_CANON_EOS_HighlightTonePriority 0xD13B
 2032 #define PTP_DPC_CANON_EOS_AFSelectFocusArea 0xD13C
 2033 #define PTP_DPC_CANON_EOS_HDRSetting        0xD13D
 2034 #define PTP_DPC_CANON_EOS_TimeShootSetting  0xD13E
 2035 #define PTP_DPC_CANON_EOS_NFCApplicationInfo    0xD13F
 2036 #define PTP_DPC_CANON_EOS_PCWhiteBalance1   0xD140
 2037 #define PTP_DPC_CANON_EOS_PCWhiteBalance2   0xD141
 2038 #define PTP_DPC_CANON_EOS_PCWhiteBalance3   0xD142
 2039 #define PTP_DPC_CANON_EOS_PCWhiteBalance4   0xD143
 2040 #define PTP_DPC_CANON_EOS_PCWhiteBalance5   0xD144
 2041 #define PTP_DPC_CANON_EOS_MWhiteBalance     0xD145
 2042 #define PTP_DPC_CANON_EOS_MWhiteBalanceEx   0xD146
 2043 #define PTP_DPC_CANON_EOS_PowerZoomSpeed    0xD149
 2044 #define PTP_DPC_CANON_EOS_NetworkServerRegion   0xD14A
 2045 #define PTP_DPC_CANON_EOS_GPSLogCtrl        0xD14B
 2046 #define PTP_DPC_CANON_EOS_GPSLogListNum     0xD14C
 2047 #define PTP_DPC_CANON_EOS_UnknownPropD14D   0xD14D  /*found in Canon EOS 5D M3*/
 2048 #define PTP_DPC_CANON_EOS_PictureStyleStandard  0xD150
 2049 #define PTP_DPC_CANON_EOS_PictureStylePortrait  0xD151
 2050 #define PTP_DPC_CANON_EOS_PictureStyleLandscape 0xD152
 2051 #define PTP_DPC_CANON_EOS_PictureStyleNeutral   0xD153
 2052 #define PTP_DPC_CANON_EOS_PictureStyleFaithful  0xD154
 2053 #define PTP_DPC_CANON_EOS_PictureStyleBlackWhite    0xD155
 2054 #define PTP_DPC_CANON_EOS_PictureStyleAuto  0xD156
 2055 #define PTP_DPC_CANON_EOS_PictureStyleExStandard    0xD157
 2056 #define PTP_DPC_CANON_EOS_PictureStyleExPortrait    0xD158
 2057 #define PTP_DPC_CANON_EOS_PictureStyleExLandscape   0xD159
 2058 #define PTP_DPC_CANON_EOS_PictureStyleExNeutral     0xD15A
 2059 #define PTP_DPC_CANON_EOS_PictureStyleExFaithful    0xD15B
 2060 #define PTP_DPC_CANON_EOS_PictureStyleExBlackWhite  0xD15C
 2061 #define PTP_DPC_CANON_EOS_PictureStyleExAuto        0xD15D
 2062 #define PTP_DPC_CANON_EOS_PictureStyleExFineDetail  0xD15E
 2063 #define PTP_DPC_CANON_EOS_PictureStyleUserSet1  0xD160
 2064 #define PTP_DPC_CANON_EOS_PictureStyleUserSet2  0xD161
 2065 #define PTP_DPC_CANON_EOS_PictureStyleUserSet3  0xD162
 2066 #define PTP_DPC_CANON_EOS_PictureStyleExUserSet1    0xD163
 2067 #define PTP_DPC_CANON_EOS_PictureStyleExUserSet2    0xD164
 2068 #define PTP_DPC_CANON_EOS_PictureStyleExUserSet3    0xD165
 2069 #define PTP_DPC_CANON_EOS_MovieAVModeFine   0xD166
 2070 #define PTP_DPC_CANON_EOS_ShutterReleaseCounter 0xD167  /* perhaps send a requestdeviceprop ex ? */
 2071 #define PTP_DPC_CANON_EOS_AvailableImageSize    0xD168
 2072 #define PTP_DPC_CANON_EOS_ErrorHistory      0xD169
 2073 #define PTP_DPC_CANON_EOS_LensExchangeHistory   0xD16A
 2074 #define PTP_DPC_CANON_EOS_StroboExchangeHistory 0xD16B
 2075 #define PTP_DPC_CANON_EOS_PictureStyleParam1    0xD170
 2076 #define PTP_DPC_CANON_EOS_PictureStyleParam2    0xD171
 2077 #define PTP_DPC_CANON_EOS_PictureStyleParam3    0xD172
 2078 #define PTP_DPC_CANON_EOS_MovieRecordVolumeLine 0xD174
 2079 #define PTP_DPC_CANON_EOS_NetworkCommunicationMode  0xD175
 2080 #define PTP_DPC_CANON_EOS_CanonLogGamma         0xD176
 2081 #define PTP_DPC_CANON_EOS_SmartphoneShowImageConfig 0xD177
 2082 #define PTP_DPC_CANON_EOS_HighISOSettingNoiseReduction  0xD178
 2083 #define PTP_DPC_CANON_EOS_MovieServoAF      0xD179
 2084 #define PTP_DPC_CANON_EOS_ContinuousAFValid 0xD17A
 2085 #define PTP_DPC_CANON_EOS_Attenuator        0xD17B
 2086 #define PTP_DPC_CANON_EOS_UTCTime       0xD17C
 2087 #define PTP_DPC_CANON_EOS_Timezone      0xD17D
 2088 #define PTP_DPC_CANON_EOS_Summertime        0xD17E
 2089 #define PTP_DPC_CANON_EOS_FlavorLUTParams   0xD17F
 2090 #define PTP_DPC_CANON_EOS_CustomFunc1       0xD180
 2091 #define PTP_DPC_CANON_EOS_CustomFunc2       0xD181
 2092 #define PTP_DPC_CANON_EOS_CustomFunc3       0xD182
 2093 #define PTP_DPC_CANON_EOS_CustomFunc4       0xD183
 2094 #define PTP_DPC_CANON_EOS_CustomFunc5       0xD184
 2095 #define PTP_DPC_CANON_EOS_CustomFunc6       0xD185
 2096 #define PTP_DPC_CANON_EOS_CustomFunc7       0xD186
 2097 #define PTP_DPC_CANON_EOS_CustomFunc8       0xD187
 2098 #define PTP_DPC_CANON_EOS_CustomFunc9       0xD188
 2099 #define PTP_DPC_CANON_EOS_CustomFunc10      0xD189
 2100 #define PTP_DPC_CANON_EOS_CustomFunc11      0xD18a
 2101 #define PTP_DPC_CANON_EOS_CustomFunc12      0xD18b
 2102 #define PTP_DPC_CANON_EOS_CustomFunc13      0xD18c
 2103 #define PTP_DPC_CANON_EOS_CustomFunc14      0xD18d
 2104 #define PTP_DPC_CANON_EOS_CustomFunc15      0xD18e
 2105 #define PTP_DPC_CANON_EOS_CustomFunc16      0xD18f
 2106 #define PTP_DPC_CANON_EOS_CustomFunc17      0xD190
 2107 #define PTP_DPC_CANON_EOS_CustomFunc18      0xD191
 2108 #define PTP_DPC_CANON_EOS_CustomFunc19      0xD192
 2109 #define PTP_DPC_CANON_EOS_CustomFunc19      0xD192
 2110 #define PTP_DPC_CANON_EOS_InnerDevelop      0xD193
 2111 #define PTP_DPC_CANON_EOS_MultiAspect       0xD194
 2112 #define PTP_DPC_CANON_EOS_MovieSoundRecord  0xD195
 2113 #define PTP_DPC_CANON_EOS_MovieRecordVolume 0xD196
 2114 #define PTP_DPC_CANON_EOS_WindCut       0xD197
 2115 #define PTP_DPC_CANON_EOS_ExtenderType      0xD198
 2116 #define PTP_DPC_CANON_EOS_OLCInfoVersion    0xD199
 2117 #define PTP_DPC_CANON_EOS_UnknownPropD19A   0xD19A /*found in Canon EOS 5D M3*/
 2118 #define PTP_DPC_CANON_EOS_UnknownPropD19C   0xD19C /*found in Canon EOS 5D M3*/
 2119 #define PTP_DPC_CANON_EOS_UnknownPropD19D   0xD19D /*found in Canon EOS 5D M3*/
 2120 #define PTP_DPC_CANON_EOS_GPSDeviceActive   0xD19F
 2121 #define PTP_DPC_CANON_EOS_CustomFuncEx      0xD1a0
 2122 #define PTP_DPC_CANON_EOS_MyMenu        0xD1a1
 2123 #define PTP_DPC_CANON_EOS_MyMenuList        0xD1a2
 2124 #define PTP_DPC_CANON_EOS_WftStatus     0xD1a3
 2125 #define PTP_DPC_CANON_EOS_WftInputTransmission  0xD1a4
 2126 #define PTP_DPC_CANON_EOS_HDDirectoryStructure  0xD1a5
 2127 #define PTP_DPC_CANON_EOS_BatteryInfo       0xD1a6
 2128 #define PTP_DPC_CANON_EOS_AdapterInfo       0xD1a7
 2129 #define PTP_DPC_CANON_EOS_LensStatus        0xD1a8
 2130 #define PTP_DPC_CANON_EOS_QuickReviewTime   0xD1a9
 2131 #define PTP_DPC_CANON_EOS_CardExtension     0xD1aa
 2132 #define PTP_DPC_CANON_EOS_TempStatus        0xD1ab
 2133 #define PTP_DPC_CANON_EOS_ShutterCounter    0xD1ac
 2134 #define PTP_DPC_CANON_EOS_SpecialOption     0xD1ad
 2135 #define PTP_DPC_CANON_EOS_PhotoStudioMode   0xD1ae
 2136 #define PTP_DPC_CANON_EOS_SerialNumber      0xD1af
 2137 #define PTP_DPC_CANON_EOS_EVFOutputDevice   0xD1b0
 2138 #define PTP_DPC_CANON_EOS_EVFMode       0xD1b1
 2139 #define PTP_DPC_CANON_EOS_DepthOfFieldPreview   0xD1b2
 2140 #define PTP_DPC_CANON_EOS_EVFSharpness      0xD1b3
 2141 #define PTP_DPC_CANON_EOS_EVFWBMode     0xD1b4
 2142 #define PTP_DPC_CANON_EOS_EVFClickWBCoeffs  0xD1b5
 2143 #define PTP_DPC_CANON_EOS_EVFColorTemp      0xD1b6
 2144 #define PTP_DPC_CANON_EOS_ExposureSimMode   0xD1b7
 2145 #define PTP_DPC_CANON_EOS_EVFRecordStatus   0xD1b8
 2146 #define PTP_DPC_CANON_EOS_LvAfSystem        0xD1ba
 2147 #define PTP_DPC_CANON_EOS_MovSize       0xD1bb
 2148 #define PTP_DPC_CANON_EOS_LvViewTypeSelect  0xD1bc
 2149 #define PTP_DPC_CANON_EOS_MirrorDownStatus  0xD1bd
 2150 #define PTP_DPC_CANON_EOS_MovieParam        0xD1be
 2151 #define PTP_DPC_CANON_EOS_MirrorLockupState 0xD1bf
 2152 #define PTP_DPC_CANON_EOS_FlashChargingState    0xD1C0
 2153 #define PTP_DPC_CANON_EOS_AloMode       0xD1C1
 2154 #define PTP_DPC_CANON_EOS_FixedMovie        0xD1C2
 2155 #define PTP_DPC_CANON_EOS_OneShotRawOn      0xD1C3
 2156 #define PTP_DPC_CANON_EOS_ErrorForDisplay   0xD1C4
 2157 #define PTP_DPC_CANON_EOS_AEModeMovie       0xD1C5
 2158 #define PTP_DPC_CANON_EOS_BuiltinStroboMode 0xD1C6
 2159 #define PTP_DPC_CANON_EOS_StroboDispState   0xD1C7
 2160 #define PTP_DPC_CANON_EOS_StroboETTL2Metering   0xD1C8
 2161 #define PTP_DPC_CANON_EOS_ContinousAFMode   0xD1C9
 2162 #define PTP_DPC_CANON_EOS_MovieParam2       0xD1CA
 2163 #define PTP_DPC_CANON_EOS_StroboSettingExpComposition       0xD1CB
 2164 #define PTP_DPC_CANON_EOS_MovieParam3       0xD1CC
 2165 #define PTP_DPC_CANON_EOS_MovieParam4       0xD1CD
 2166 #define PTP_DPC_CANON_EOS_LVMedicalRotate   0xD1CF
 2167 #define PTP_DPC_CANON_EOS_Artist        0xD1d0
 2168 #define PTP_DPC_CANON_EOS_Copyright     0xD1d1
 2169 #define PTP_DPC_CANON_EOS_BracketValue      0xD1d2
 2170 #define PTP_DPC_CANON_EOS_FocusInfoEx       0xD1d3
 2171 #define PTP_DPC_CANON_EOS_DepthOfField      0xD1d4
 2172 #define PTP_DPC_CANON_EOS_Brightness        0xD1d5
 2173 #define PTP_DPC_CANON_EOS_LensAdjustParams  0xD1d6
 2174 #define PTP_DPC_CANON_EOS_EFComp        0xD1d7
 2175 #define PTP_DPC_CANON_EOS_LensName      0xD1d8
 2176 #define PTP_DPC_CANON_EOS_AEB           0xD1d9
 2177 #define PTP_DPC_CANON_EOS_StroboSetting     0xD1da
 2178 #define PTP_DPC_CANON_EOS_StroboWirelessSetting 0xD1db
 2179 #define PTP_DPC_CANON_EOS_StroboFiring      0xD1dc
 2180 #define PTP_DPC_CANON_EOS_LensID        0xD1dd
 2181 #define PTP_DPC_CANON_EOS_LCDBrightness     0xD1de
 2182 #define PTP_DPC_CANON_EOS_CADarkBright      0xD1df
 2183 
 2184 #define PTP_DPC_CANON_EOS_CAssistPreset     0xD201
 2185 #define PTP_DPC_CANON_EOS_CAssistBrightness 0xD202
 2186 #define PTP_DPC_CANON_EOS_CAssistContrast   0xD203
 2187 #define PTP_DPC_CANON_EOS_CAssistSaturation 0xD204
 2188 #define PTP_DPC_CANON_EOS_CAssistColorBA    0xD205
 2189 #define PTP_DPC_CANON_EOS_CAssistColorMG    0xD206
 2190 #define PTP_DPC_CANON_EOS_CAssistMonochrome 0xD207
 2191 #define PTP_DPC_CANON_EOS_FocusShiftSetting 0xD208
 2192 #define PTP_DPC_CANON_EOS_MovieSelfTimer    0xD209
 2193 #define PTP_DPC_CANON_EOS_Clarity       0xD20B
 2194 #define PTP_DPC_CANON_EOS_2GHDRSetting      0xD20C
 2195 #define PTP_DPC_CANON_EOS_MovieParam5       0xD20D
 2196 #define PTP_DPC_CANON_EOS_HDRViewAssistModeRec  0xD20E
 2197 #define PTP_DPC_CANON_EOS_PropFinderAFFrame 0xD214
 2198 #define PTP_DPC_CANON_EOS_VariableMovieRecSetting   0xD215
 2199 #define PTP_DPC_CANON_EOS_PropAutoRotate    0xD216
 2200 #define PTP_DPC_CANON_EOS_MFPeakingSetting  0xD217
 2201 #define PTP_DPC_CANON_EOS_MovieSpatialOversampling  0xD218
 2202 #define PTP_DPC_CANON_EOS_MovieCropMode     0xD219
 2203 #define PTP_DPC_CANON_EOS_ShutterType       0xD21A
 2204 #define PTP_DPC_CANON_EOS_WFTBatteryPower   0xD21B
 2205 #define PTP_DPC_CANON_EOS_BatteryInfoEx     0xD21C
 2206 
 2207 /* Nikon extension device property codes */
 2208 #define PTP_DPC_NIKON_ShootingBank          0xD010
 2209 #define PTP_DPC_NIKON_ShootingBankNameA         0xD011
 2210 #define PTP_DPC_NIKON_ShootingBankNameB         0xD012
 2211 #define PTP_DPC_NIKON_ShootingBankNameC         0xD013
 2212 #define PTP_DPC_NIKON_ShootingBankNameD         0xD014
 2213 #define PTP_DPC_NIKON_ResetBank0            0xD015
 2214 #define PTP_DPC_NIKON_RawCompression            0xD016
 2215 #define PTP_DPC_NIKON_WhiteBalanceAutoBias      0xD017
 2216 #define PTP_DPC_NIKON_WhiteBalanceTungstenBias      0xD018
 2217 #define PTP_DPC_NIKON_WhiteBalanceFluorescentBias   0xD019
 2218 #define PTP_DPC_NIKON_WhiteBalanceDaylightBias      0xD01A
 2219 #define PTP_DPC_NIKON_WhiteBalanceFlashBias     0xD01B
 2220 #define PTP_DPC_NIKON_WhiteBalanceCloudyBias        0xD01C
 2221 #define PTP_DPC_NIKON_WhiteBalanceShadeBias     0xD01D
 2222 #define PTP_DPC_NIKON_WhiteBalanceColorTemperature  0xD01E
 2223 #define PTP_DPC_NIKON_WhiteBalancePresetNo      0xD01F
 2224 #define PTP_DPC_NIKON_WhiteBalancePresetName0       0xD020
 2225 #define PTP_DPC_NIKON_WhiteBalancePresetName1       0xD021
 2226 #define PTP_DPC_NIKON_WhiteBalancePresetName2       0xD022
 2227 #define PTP_DPC_NIKON_WhiteBalancePresetName3       0xD023
 2228 #define PTP_DPC_NIKON_WhiteBalancePresetName4       0xD024
 2229 #define PTP_DPC_NIKON_WhiteBalancePresetVal0        0xD025
 2230 #define PTP_DPC_NIKON_WhiteBalancePresetVal1        0xD026
 2231 #define PTP_DPC_NIKON_WhiteBalancePresetVal2        0xD027
 2232 #define PTP_DPC_NIKON_WhiteBalancePresetVal3        0xD028
 2233 #define PTP_DPC_NIKON_WhiteBalancePresetVal4        0xD029
 2234 #define PTP_DPC_NIKON_ImageSharpening           0xD02A
 2235 #define PTP_DPC_NIKON_ToneCompensation          0xD02B
 2236 #define PTP_DPC_NIKON_ColorModel            0xD02C
 2237 #define PTP_DPC_NIKON_HueAdjustment         0xD02D
 2238 #define PTP_DPC_NIKON_NonCPULensDataFocalLength     0xD02E
 2239 #define PTP_DPC_NIKON_FmmManualSetting          0xD02E  /* on z6, same as PTP_DPC_NIKON_NonCPULensDataFocalLength? */
 2240 #define PTP_DPC_NIKON_NonCPULensDataMaximumAperture 0xD02F
 2241 #define PTP_DPC_NIKON_F0ManualSetting           0xD02F  /* on z6, same as PTP_DPC_NIKON_NonCPULensDataMaximumAperture? */
 2242 #define PTP_DPC_NIKON_ShootingMode          0xD030  /* also Capture Area Crop on Z6 */
 2243 #define PTP_DPC_NIKON_CaptureAreaCrop           0xD030  /* on z6, (DX = 1/FX = 0 / 1:1=2, 16:9=3)*/
 2244 #define PTP_DPC_NIKON_JPEG_Compression_Policy       0xD031
 2245 #define PTP_DPC_NIKON_ColorSpace            0xD032
 2246 #define PTP_DPC_NIKON_AutoDXCrop            0xD033
 2247 #define PTP_DPC_NIKON_FlickerReduction          0xD034
 2248 #define PTP_DPC_NIKON_RemoteMode            0xD035
 2249 #define PTP_DPC_NIKON_VideoMode             0xD036
 2250 #define PTP_DPC_NIKON_EffectMode            0xD037
 2251 #define PTP_DPC_NIKON_1_Mode                0xD038
 2252 #define PTP_DPC_NIKON_WhiteBalancePresetName5       0xD038  /* z6 */
 2253 #define PTP_DPC_NIKON_WhiteBalancePresetName6       0xD039  /* z6 */
 2254 #define PTP_DPC_NIKON_WhiteBalanceTunePreset5       0xD03A  /* z6 */
 2255 #define PTP_DPC_NIKON_WhiteBalanceTunePreset6       0xD03B  /* z6 */
 2256 #define PTP_DPC_NIKON_WhiteBalancePresetProtect5    0xD03C  /* z6 */
 2257 #define PTP_DPC_NIKON_WhiteBalancePresetProtect6    0xD03D  /* z6 */
 2258 #define PTP_DPC_NIKON_WhiteBalancePresetValue5      0xD03E  /* z6 */
 2259 #define PTP_DPC_NIKON_WhiteBalancePresetValue6      0xD03F  /* z6 */
 2260 #define PTP_DPC_NIKON_CSMMenuBankSelect         0xD040
 2261 #define PTP_DPC_NIKON_MenuBankNameA         0xD041
 2262 #define PTP_DPC_NIKON_MenuBankNameB         0xD042
 2263 #define PTP_DPC_NIKON_MenuBankNameC         0xD043
 2264 #define PTP_DPC_NIKON_MenuBankNameD         0xD044
 2265 #define PTP_DPC_NIKON_ResetBank             0xD045
 2266 #define PTP_DPC_NIKON_AFStillLockOnAcross       0xD046
 2267 #define PTP_DPC_NIKON_AFStillLockOnMove         0xD047
 2268 #define PTP_DPC_NIKON_A1AFCModePriority         0xD048
 2269 #define PTP_DPC_NIKON_A2AFSModePriority         0xD049
 2270 #define PTP_DPC_NIKON_A3GroupDynamicAF          0xD04A
 2271 #define PTP_DPC_NIKON_A4AFActivation            0xD04B
 2272 #define PTP_DPC_NIKON_FocusAreaIllumManualFocus     0xD04C
 2273 #define PTP_DPC_NIKON_FocusAreaIllumContinuous      0xD04D
 2274 #define PTP_DPC_NIKON_FocusAreaIllumWhenSelected    0xD04E
 2275 #define PTP_DPC_NIKON_FocusAreaWrap         0xD04F /* area sel */
 2276 #define PTP_DPC_NIKON_FocusAreaSelect           0xD04F /* z6 */
 2277 #define PTP_DPC_NIKON_VerticalAFON          0xD050
 2278 #define PTP_DPC_NIKON_AFLockOn              0xD051
 2279 #define PTP_DPC_NIKON_FocusAreaZone         0xD052
 2280 #define PTP_DPC_NIKON_EnableCopyright           0xD053
 2281 #define PTP_DPC_NIKON_ISOAuto               0xD054
 2282 #define PTP_DPC_NIKON_EVISOStep             0xD055
 2283 #define PTP_DPC_NIKON_EVStep                0xD056 /* EV Step SS FN */
 2284 #define PTP_DPC_NIKON_EVStepExposureComp        0xD057
 2285 #define PTP_DPC_NIKON_ExposureCompensation      0xD058
 2286 #define PTP_DPC_NIKON_CenterWeightArea          0xD059  /* CenterweightedExRange */
 2287 #define PTP_DPC_NIKON_ExposureBaseMatrix        0xD05A
 2288 #define PTP_DPC_NIKON_ExposureBaseCenter        0xD05B
 2289 #define PTP_DPC_NIKON_ExposureBaseSpot          0xD05C
 2290 #define PTP_DPC_NIKON_LiveViewAFArea            0xD05D /* FIXME: AfAtLiveview? */
 2291 #define PTP_DPC_NIKON_AELockMode            0xD05E
 2292 #define PTP_DPC_NIKON_AELAFLMode            0xD05F
 2293 #define PTP_DPC_NIKON_LiveViewAFFocus           0xD061  /* AfModeAtLiveView */
 2294 #define PTP_DPC_NIKON_MeterOff              0xD062
 2295 #define PTP_DPC_NIKON_SelfTimer             0xD063
 2296 #define PTP_DPC_NIKON_MonitorOff            0xD064
 2297 #define PTP_DPC_NIKON_ImgConfTime           0xD065
 2298 #define PTP_DPC_NIKON_AutoOffTimers         0xD066
 2299 #define PTP_DPC_NIKON_AngleLevel            0xD067
 2300 #define PTP_DPC_NIKON_D1ShootingSpeed           0xD068 /* continuous speed low */
 2301 #define PTP_DPC_NIKON_D2MaximumShots            0xD069  /* BurstMaxNumer */
 2302 #define PTP_DPC_NIKON_ExposureDelayMode         0xD06A
 2303 #define PTP_DPC_NIKON_LongExposureNoiseReduction    0xD06B
 2304 #define PTP_DPC_NIKON_FileNumberSequence        0xD06C
 2305 #define PTP_DPC_NIKON_ControlPanelFinderRearControl 0xD06D
 2306 #define PTP_DPC_NIKON_ControlPanelFinderViewfinder  0xD06E
 2307 #define PTP_DPC_NIKON_D7Illumination            0xD06F
 2308 #define PTP_DPC_NIKON_NrHighISO             0xD070
 2309 #define PTP_DPC_NIKON_SHSET_CH_GUID_DISP        0xD071
 2310 #define PTP_DPC_NIKON_ArtistName            0xD072
 2311 #define PTP_DPC_NIKON_CopyrightInfo         0xD073
 2312 #define PTP_DPC_NIKON_FlashSyncSpeed            0xD074
 2313 #define PTP_DPC_NIKON_FlashShutterSpeed         0xD075  /* SB Low Limit */
 2314 #define PTP_DPC_NIKON_E3AAFlashMode         0xD076
 2315 #define PTP_DPC_NIKON_E4ModelingFlash           0xD077
 2316 #define PTP_DPC_NIKON_BracketSet            0xD078  /* Bracket Type? */
 2317 #define PTP_DPC_NIKON_E6ManualModeBracketing        0xD079  /* Bracket Factor? */
 2318 #define PTP_DPC_NIKON_BracketOrder          0xD07A
 2319 #define PTP_DPC_NIKON_E8AutoBracketSelection        0xD07B  /* Bracket Method? */
 2320 #define PTP_DPC_NIKON_BracketingSet         0xD07C
 2321 #define PTP_DPC_NIKON_AngleLevelPitching        0xD07D
 2322 #define PTP_DPC_NIKON_AngleLevelYawing          0xD07E
 2323 #define PTP_DPC_NIKON_ExtendShootingMenu        0xD07F
 2324 #define PTP_DPC_NIKON_F1CenterButtonShootingMode    0xD080
 2325 #define PTP_DPC_NIKON_CenterButtonPlaybackMode      0xD081
 2326 #define PTP_DPC_NIKON_F2Multiselector           0xD082
 2327 #define PTP_DPC_NIKON_F3PhotoInfoPlayback       0xD083  /* MultiSelector Dir */
 2328 #define PTP_DPC_NIKON_F4AssignFuncButton        0xD084  /* CMD Dial Rotate */
 2329 #define PTP_DPC_NIKON_F5CustomizeCommDials      0xD085  /* CMD Dial Change */
 2330 #define PTP_DPC_NIKON_ReverseCommandDial        0xD086  /* CMD Dial FN Set */
 2331 #define PTP_DPC_NIKON_ApertureSetting           0xD087  /* CMD Dial Active */
 2332 #define PTP_DPC_NIKON_MenusAndPlayback          0xD088  /* CMD Dial Active */
 2333 #define PTP_DPC_NIKON_F6ButtonsAndDials         0xD089  /* Universal Mode? */
 2334 #define PTP_DPC_NIKON_NoCFCard              0xD08A  /* Enable Shutter? */
 2335 #define PTP_DPC_NIKON_CenterButtonZoomRatio     0xD08B
 2336 #define PTP_DPC_NIKON_FunctionButton2           0xD08C
 2337 #define PTP_DPC_NIKON_AFAreaPoint           0xD08D
 2338 #define PTP_DPC_NIKON_NormalAFOn            0xD08E
 2339 #define PTP_DPC_NIKON_CleanImageSensor          0xD08F
 2340 #define PTP_DPC_NIKON_ImageCommentString        0xD090
 2341 #define PTP_DPC_NIKON_ImageCommentEnable        0xD091
 2342 #define PTP_DPC_NIKON_ImageRotation         0xD092
 2343 #define PTP_DPC_NIKON_ManualSetLensNo           0xD093
 2344 #define PTP_DPC_NIKON_RetractableLensWarning        0xD09C
 2345 #define PTP_DPC_NIKON_FaceDetection         0xD09D
 2346 #define PTP_DPC_NIKON_3DTrackingCaptureArea     0xD09E
 2347 #define PTP_DPC_NIKON_MatrixMetering            0xD09F
 2348 #define PTP_DPC_NIKON_MovScreenSize         0xD0A0
 2349 #define PTP_DPC_NIKON_MovVoice              0xD0A1
 2350 #define PTP_DPC_NIKON_MovMicrophone         0xD0A2
 2351 #define PTP_DPC_NIKON_MovFileSlot           0xD0A3
 2352 #define PTP_DPC_NIKON_MovRecProhibitCondition       0xD0A4
 2353 #define PTP_DPC_NIKON_ManualMovieSetting        0xD0A6
 2354 #define PTP_DPC_NIKON_MovQuality            0xD0A7
 2355 #define PTP_DPC_NIKON_MovRecordMicrophoneLevelValue 0xD0A8
 2356 #define PTP_DPC_NIKON_MovWindNoiseReduction     0xD0AA
 2357 #define PTP_DPC_NIKON_MovRecordingZone          0xD0AC
 2358 #define PTP_DPC_NIKON_MovISOAutoControl         0xD0AD
 2359 #define PTP_DPC_NIKON_MovISOAutoHighLimit       0xD0AE
 2360 #define PTP_DPC_NIKON_MovFileType           0xD0AF /* 0: mov, 1: mp4 */
 2361 #define PTP_DPC_NIKON_LiveViewScreenDisplaySetting  0xD0B2
 2362 #define PTP_DPC_NIKON_MonitorOffDelay           0xD0B3
 2363 #define PTP_DPC_NIKON_ExposureIndexEx           0xD0B4
 2364 #define PTP_DPC_NIKON_ISOControlSensitivity     0xD0B5
 2365 #define PTP_DPC_NIKON_RawImageSize          0xD0B6
 2366 #define PTP_DPC_NIKON_MultiBatteryInfo          0xD0B9
 2367 #define PTP_DPC_NIKON_FlickerReductionSetting       0xD0B7
 2368 #define PTP_DPC_NIKON_DiffractionCompensatipn       0xD0BA
 2369 #define PTP_DPC_NIKON_MovieLogOutput            0xD0BB
 2370 #define PTP_DPC_NIKON_MovieAutoDistortion       0xD0BC
 2371 #define PTP_DPC_NIKON_RemainingExposureTime     0xD0BE
 2372 #define PTP_DPC_NIKON_MovieLogSetting           0xD0BF
 2373 #define PTP_DPC_NIKON_Bracketing            0xD0C0
 2374 #define PTP_DPC_NIKON_AutoExposureBracketStep       0xD0C1
 2375 #define PTP_DPC_NIKON_AutoExposureBracketProgram    0xD0C2
 2376 #define PTP_DPC_NIKON_AutoExposureBracketCount      0xD0C3
 2377 #define PTP_DPC_NIKON_WhiteBalanceBracketStep       0xD0C4
 2378 #define PTP_DPC_NIKON_WhiteBalanceBracketProgram    0xD0C5
 2379 #define PTP_DPC_NIKON_ADLBracketingPattern      0xD0C6
 2380 #define PTP_DPC_NIKON_ADLBracketingStep         0xD0C7
 2381 #define PTP_DPC_NIKON_HDMIOutputDataDepth       0xD0CC
 2382 #define PTP_DPC_NIKON_LensID                0xD0E0
 2383 #define PTP_DPC_NIKON_LensSort              0xD0E1
 2384 #define PTP_DPC_NIKON_LensType              0xD0E2
 2385 #define PTP_DPC_NIKON_FocalLengthMin            0xD0E3
 2386 #define PTP_DPC_NIKON_FocalLengthMax            0xD0E4
 2387 #define PTP_DPC_NIKON_MaxApAtMinFocalLength     0xD0E5
 2388 #define PTP_DPC_NIKON_MaxApAtMaxFocalLength     0xD0E6
 2389 #define PTP_DPC_NIKON_LensTypeML            0xD0E7
 2390 #define PTP_DPC_NIKON_FinderISODisp         0xD0F0
 2391 #define PTP_DPC_NIKON_AutoOffPhoto          0xD0F2
 2392 #define PTP_DPC_NIKON_AutoOffMenu           0xD0F3
 2393 #define PTP_DPC_NIKON_AutoOffInfo           0xD0F4
 2394 #define PTP_DPC_NIKON_SelfTimerShootNum         0xD0F5
 2395 #define PTP_DPC_NIKON_VignetteCtrl          0xD0F7
 2396 #define PTP_DPC_NIKON_AutoDistortionControl     0xD0F8
 2397 #define PTP_DPC_NIKON_SceneMode             0xD0F9
 2398 #define PTP_DPC_NIKON_UserMode              0xD0FC
 2399 #define PTP_DPC_NIKON_SceneMode2            0xD0FD
 2400 #define PTP_DPC_NIKON_SelfTimerInterval         0xD0FE
 2401 #define PTP_DPC_NIKON_ExposureTime          0xD100  /* Shutter Speed */
 2402 #define PTP_DPC_NIKON_ACPower               0xD101
 2403 #define PTP_DPC_NIKON_WarningStatus         0xD102
 2404 #define PTP_DPC_NIKON_MaximumShots          0xD103 /* remain shots (in RAM buffer?) */
 2405 #define PTP_DPC_NIKON_AFLockStatus          0xD104
 2406 #define PTP_DPC_NIKON_AELockStatus          0xD105
 2407 #define PTP_DPC_NIKON_FVLockStatus          0xD106
 2408 #define PTP_DPC_NIKON_AutofocusLCDTopMode2      0xD107
 2409 #define PTP_DPC_NIKON_AutofocusArea         0xD108
 2410 #define PTP_DPC_NIKON_FlexibleProgram           0xD109
 2411 #define PTP_DPC_NIKON_LightMeter            0xD10A  /* Exposure Status */
 2412 #define PTP_DPC_NIKON_RecordingMedia            0xD10B  /* Card or SDRAM */
 2413 #define PTP_DPC_NIKON_USBSpeed              0xD10C
 2414 #define PTP_DPC_NIKON_CCDNumber             0xD10D
 2415 #define PTP_DPC_NIKON_CameraOrientation         0xD10E
 2416 #define PTP_DPC_NIKON_GroupPtnType          0xD10F
 2417 #define PTP_DPC_NIKON_FNumberLock           0xD110
 2418 #define PTP_DPC_NIKON_ExposureApertureLock      0xD111  /* shutterspeed lock*/
 2419 #define PTP_DPC_NIKON_TVLockSetting         0xD112
 2420 #define PTP_DPC_NIKON_AVLockSetting         0xD113
 2421 #define PTP_DPC_NIKON_IllumSetting          0xD114
 2422 #define PTP_DPC_NIKON_FocusPointBright          0xD115
 2423 #define PTP_DPC_NIKON_ExposureCompFlashUsed     0xD118
 2424 #define PTP_DPC_NIKON_ExternalFlashAttached     0xD120
 2425 #define PTP_DPC_NIKON_ExternalFlashStatus       0xD121
 2426 #define PTP_DPC_NIKON_ExternalFlashSort         0xD122
 2427 #define PTP_DPC_NIKON_ExternalFlashMode         0xD123
 2428 #define PTP_DPC_NIKON_ExternalFlashCompensation     0xD124
 2429 #define PTP_DPC_NIKON_NewExternalFlashMode      0xD125
 2430 #define PTP_DPC_NIKON_FlashExposureCompensation     0xD126
 2431 #define PTP_DPC_NIKON_ExternalFlashMultiFlashMode   0xD12D
 2432 #define PTP_DPC_NIKON_ConnectionPath            0xD12E
 2433 #define PTP_DPC_NIKON_HDRMode               0xD130
 2434 #define PTP_DPC_NIKON_HDRHighDynamic            0xD131
 2435 #define PTP_DPC_NIKON_HDRSmoothing          0xD132
 2436 #define PTP_DPC_NIKON_HDRSaveIndividualImages       0xD133
 2437 #define PTP_DPC_NIKON_VibrationReduction        0xD138
 2438 #define PTP_DPC_NIKON_OptimizeImage         0xD140
 2439 #define PTP_DPC_NIKON_WBAutoType            0xD141
 2440 #define PTP_DPC_NIKON_Saturation            0xD142
 2441 #define PTP_DPC_NIKON_BW_FillerEffect           0xD143
 2442 #define PTP_DPC_NIKON_BW_Sharpness          0xD144
 2443 #define PTP_DPC_NIKON_BW_Contrast           0xD145
 2444 #define PTP_DPC_NIKON_BW_Setting_Type           0xD146
 2445 #define PTP_DPC_NIKON_Slot2SaveMode         0xD148
 2446 #define PTP_DPC_NIKON_RawBitMode            0xD149
 2447 #define PTP_DPC_NIKON_ActiveDLighting           0xD14E /* was PTP_DPC_NIKON_ISOAutoTime */
 2448 #define PTP_DPC_NIKON_FlourescentType           0xD14F
 2449 #define PTP_DPC_NIKON_TuneColourTemperature     0xD150
 2450 #define PTP_DPC_NIKON_TunePreset0           0xD151
 2451 #define PTP_DPC_NIKON_TunePreset1           0xD152
 2452 #define PTP_DPC_NIKON_TunePreset2           0xD153
 2453 #define PTP_DPC_NIKON_TunePreset3           0xD154
 2454 #define PTP_DPC_NIKON_TunePreset4           0xD155
 2455 #define PTP_DPC_NIKON_PrimarySlot           0xD156
 2456 #define PTP_DPC_NIKON_WBPresetProtect1          0xD158
 2457 #define PTP_DPC_NIKON_WBPresetProtect2          0xD159
 2458 #define PTP_DPC_NIKON_WBPresetProtect3          0xD15A
 2459 #define PTP_DPC_NIKON_ActiveFolder          0xD15B
 2460 #define PTP_DPC_NIKON_WBPresetProtect4          0xD15C
 2461 #define PTP_DPC_NIKON_WhiteBalanceReset         0xD15D
 2462 #define PTP_DPC_NIKON_WhiteBalanceNaturalLightAutoBias  0xD15E /* Only encountered in D850, z6? */
 2463 #define PTP_DPC_NIKON_BeepOff               0xD160
 2464 #define PTP_DPC_NIKON_AutofocusMode         0xD161
 2465 #define PTP_DPC_NIKON_AFAssist              0xD163
 2466 #define PTP_DPC_NIKON_PADVPMode             0xD164  /* iso auto time */
 2467 #define PTP_DPC_NIKON_ISOAutoShutterTime        0xD164  /* z6 */
 2468 #define PTP_DPC_NIKON_ImageReview           0xD165
 2469 #define PTP_DPC_NIKON_AFAreaIllumination        0xD166
 2470 #define PTP_DPC_NIKON_FlashMode             0xD167
 2471 #define PTP_DPC_NIKON_FlashCommanderMode        0xD168
 2472 #define PTP_DPC_NIKON_FlashSign             0xD169
 2473 #define PTP_DPC_NIKON_ISO_Auto              0xD16A
 2474 #define PTP_DPC_NIKON_RemoteTimeout         0xD16B
 2475 #define PTP_DPC_NIKON_GridDisplay           0xD16C
 2476 #define PTP_DPC_NIKON_FlashModeManualPower      0xD16D
 2477 #define PTP_DPC_NIKON_FlashModeCommanderPower       0xD16E
 2478 #define PTP_DPC_NIKON_AutoFP                0xD16F
 2479 #define PTP_DPC_NIKON_DateImprintSetting        0xD170
 2480 #define PTP_DPC_NIKON_DateCounterSelect         0xD171
 2481 #define PTP_DPC_NIKON_DateCountData         0xD172
 2482 #define PTP_DPC_NIKON_DateCountDisplaySetting       0xD173
 2483 #define PTP_DPC_NIKON_RangeFinderSetting        0xD174
 2484 #define PTP_DPC_NIKON_LimitedAFAreaMode         0xD176
 2485 #define PTP_DPC_NIKON_AFModeRestrictions        0xD177
 2486 #define PTP_DPC_NIKON_LowLightAF            0xD17A
 2487 #define PTP_DPC_NIKON_ApplyLiveViewSetting      0xD17B
 2488 #define PTP_DPC_NIKON_MovieAfSpeed          0xD17C
 2489 #define PTP_DPC_NIKON_MovieAfSpeedWhenToApply       0xD17D
 2490 #define PTP_DPC_NIKON_MovieAfTrackingSensitivity    0xD17E
 2491 #define PTP_DPC_NIKON_CSMMenu               0xD180
 2492 #define PTP_DPC_NIKON_WarningDisplay            0xD181
 2493 #define PTP_DPC_NIKON_BatteryCellKind           0xD182
 2494 #define PTP_DPC_NIKON_ISOAutoHiLimit            0xD183
 2495 #define PTP_DPC_NIKON_DynamicAFArea         0xD184
 2496 #define PTP_DPC_NIKON_ContinuousSpeedHigh       0xD186
 2497 #define PTP_DPC_NIKON_InfoDispSetting           0xD187
 2498 #define PTP_DPC_NIKON_PreviewButton         0xD189
 2499 #define PTP_DPC_NIKON_PreviewButton2            0xD18A
 2500 #define PTP_DPC_NIKON_AEAFLockButton2           0xD18B
 2501 #define PTP_DPC_NIKON_IndicatorDisp         0xD18D
 2502 #define PTP_DPC_NIKON_CellKindPriority          0xD18E
 2503 #define PTP_DPC_NIKON_BracketingFramesAndSteps      0xD190
 2504 #define PTP_DPC_NIKON_MovieReleaseButton        0xD197
 2505 #define PTP_DPC_NIKON_FlashISOAutoHighLimit     0xD199
 2506 #define PTP_DPC_NIKON_LiveViewMode          0xD1A0
 2507 #define PTP_DPC_NIKON_LiveViewDriveMode         0xD1A1
 2508 #define PTP_DPC_NIKON_LiveViewStatus            0xD1A2
 2509 #define PTP_DPC_NIKON_LiveViewImageZoomRatio        0xD1A3
 2510 #define PTP_DPC_NIKON_LiveViewProhibitCondition     0xD1A4
 2511 #define PTP_DPC_NIKON_LiveViewExposurePreview       0xD1A5
 2512 #define PTP_DPC_NIKON_LiveViewSelector          0xD1A6
 2513 #define PTP_DPC_NIKON_LiveViewWhiteBalance      0xD1A7
 2514 #define PTP_DPC_NIKON_MovieShutterSpeed         0xD1A8
 2515 #define PTP_DPC_NIKON_MovieFNumber          0xD1A9
 2516 #define PTP_DPC_NIKON_MovieISO              0xD1AA
 2517 #define PTP_DPC_NIKON_MovieExposureBiasCompensation 0xD1AB
 2518 #define PTP_DPC_NIKON_LiveViewMovieMode         0xD1AC /* ? */
 2519 #define PTP_DPC_NIKON_LiveViewImageSize         0xD1AC /* d850 */
 2520 #define PTP_DPC_NIKON_LiveViewPhotography       0xD1AD
 2521 #define PTP_DPC_NIKON_MovieExposureMeteringMode     0xD1AF
 2522 #define PTP_DPC_NIKON_ExposureDisplayStatus     0xD1B0
 2523 #define PTP_DPC_NIKON_ExposureIndicateStatus        0xD1B1
 2524 #define PTP_DPC_NIKON_InfoDispErrStatus         0xD1B2
 2525 #define PTP_DPC_NIKON_ExposureIndicateLightup       0xD1B3
 2526 #define PTP_DPC_NIKON_ContinousShootingCount        0xD1B4
 2527 #define PTP_DPC_NIKON_MovieRecFrameCount        0xD1B7
 2528 #define PTP_DPC_NIKON_CameraLiveViewStatus      0xD1B8
 2529 #define PTP_DPC_NIKON_DetectionPeaking          0xD1B9
 2530 #define PTP_DPC_NIKON_LiveViewTFTStatus         0xD1BA
 2531 #define PTP_DPC_NIKON_LiveViewImageStatus       0xD1BB
 2532 #define PTP_DPC_NIKON_LiveViewImageCompression      0xD1BC
 2533 #define PTP_DPC_NIKON_LiveViewZoomArea          0xD1BD
 2534 #define PTP_DPC_NIKON_FlashOpen             0xD1C0
 2535 #define PTP_DPC_NIKON_FlashCharged          0xD1C1
 2536 #define PTP_DPC_NIKON_FlashMRepeatValue         0xD1D0
 2537 #define PTP_DPC_NIKON_FlashMRepeatCount         0xD1D1
 2538 #define PTP_DPC_NIKON_FlashMRepeatInterval      0xD1D2
 2539 #define PTP_DPC_NIKON_FlashCommandChannel       0xD1D3
 2540 #define PTP_DPC_NIKON_FlashCommandSelfMode      0xD1D4
 2541 #define PTP_DPC_NIKON_FlashCommandSelfCompensation  0xD1D5
 2542 #define PTP_DPC_NIKON_FlashCommandSelfValue     0xD1D6
 2543 #define PTP_DPC_NIKON_FlashCommandAMode         0xD1D7
 2544 #define PTP_DPC_NIKON_FlashCommandACompensation     0xD1D8
 2545 #define PTP_DPC_NIKON_FlashCommandAValue        0xD1D9
 2546 #define PTP_DPC_NIKON_FlashCommandBMode         0xD1DA
 2547 #define PTP_DPC_NIKON_FlashCommandBCompensation     0xD1DB
 2548 #define PTP_DPC_NIKON_FlashCommandBValue        0xD1DC
 2549 #define PTP_DPC_NIKON_ExternalRecordingControl      0xD1DE
 2550 #define PTP_DPC_NIKON_HighlightBrightness       0xD1DF
 2551 #define PTP_DPC_NIKON_SBWirelessMode            0xD1E2
 2552 #define PTP_DPC_NIKON_SBWirelessMultipleFlashMode   0xD1E3
 2553 #define PTP_DPC_NIKON_SBUsableGroup         0xD1E4
 2554 #define PTP_DPC_NIKON_WirelessCLSEntryMode      0xD1E5
 2555 #define PTP_DPC_NIKON_SBPINCode             0xD1E6
 2556 #define PTP_DPC_NIKON_RadioMultipleFlashChannel     0xD1E7
 2557 #define PTP_DPC_NIKON_OpticalMultipleFlashChannel   0xD1E8
 2558 #define PTP_DPC_NIKON_FlashRangeDisplay         0xD1E9
 2559 #define PTP_DPC_NIKON_AllTestFiringDisable      0xD1EA
 2560 #define PTP_DPC_NIKON_SBSettingMemberLock       0xD1EC
 2561 #define PTP_DPC_NIKON_SBIntegrationFlashReady       0xD1ED
 2562 #define PTP_DPC_NIKON_ApplicationMode           0xD1F0
 2563 #define PTP_DPC_NIKON_ExposureRemaining         0xD1F1
 2564 #define PTP_DPC_NIKON_ActiveSlot            0xD1F2
 2565 #define PTP_DPC_NIKON_ISOAutoShutterCorrectionTime  0xD1F4
 2566 #define PTP_DPC_NIKON_MirrorUpStatus            0xD1F6
 2567 #define PTP_DPC_NIKON_MirrorUpReleaseShootingCount  0xD1F7
 2568 #define PTP_DPC_NIKON_MovieAfAreaMode           0xD1F8
 2569 #define PTP_DPC_NIKON_MovieVibrationReduction       0xD1F9
 2570 #define PTP_DPC_NIKON_MovieFocusMode            0xD1FA
 2571 #define PTP_DPC_NIKON_RecordTimeCodes           0xD1FB
 2572 #define PTP_DPC_NIKON_CountUpMethod         0xD1FC
 2573 #define PTP_DPC_NIKON_TimeCodeOrigin            0xD1FD
 2574 #define PTP_DPC_NIKON_DropFrame             0xD1FE
 2575 #define PTP_DPC_NIKON_ActivePicCtrlItem         0xD200
 2576 #define PTP_DPC_NIKON_ChangePicCtrlItem         0xD201
 2577 #define PTP_DPC_NIKON_ElectronicFrontCurtainShutter 0xD20D
 2578 #define PTP_DPC_NIKON_MovieResetShootingMenu        0xD20E
 2579 #define PTP_DPC_NIKON_MovieCaptureAreaCrop      0xD20F
 2580 #define PTP_DPC_NIKON_MovieAutoDxCrop           0xD210
 2581 #define PTP_DPC_NIKON_MovieWbAutoType           0xD211
 2582 #define PTP_DPC_NIKON_MovieWbTuneAuto           0xD212
 2583 #define PTP_DPC_NIKON_MovieWbTuneIncandescent       0xD213
 2584 #define PTP_DPC_NIKON_MovieWbFlourescentType        0xD214
 2585 #define PTP_DPC_NIKON_MovieWbTuneFlourescent        0xD215
 2586 #define PTP_DPC_NIKON_MovieWbTuneSunny          0xD216
 2587 #define PTP_DPC_NIKON_MovieWbTuneCloudy         0xD218
 2588 #define PTP_DPC_NIKON_MovieWbTuneShade          0xD219
 2589 #define PTP_DPC_NIKON_MovieWbColorTemp          0xD21A
 2590 #define PTP_DPC_NIKON_MovieWbTuneColorTemp      0xD21B
 2591 #define PTP_DPC_NIKON_MovieWbPresetData0        0xD21C
 2592 #define PTP_DPC_NIKON_MovieWbPresetDataComment1     0xD21D
 2593 #define PTP_DPC_NIKON_MovieWbPresetDataComment2     0xD21E
 2594 #define PTP_DPC_NIKON_MovieWbPresetDataComment3     0xD21F
 2595 #define PTP_DPC_NIKON_MovieWbPresetDataComment4     0xD220
 2596 #define PTP_DPC_NIKON_MovieWbPresetDataComment5     0xD221
 2597 #define PTP_DPC_NIKON_MovieWbPresetDataComment6     0xD222
 2598 #define PTP_DPC_NIKON_MovieWbPresetDataValue1       0xD223
 2599 #define PTP_DPC_NIKON_MovieWbPresetDataValue2       0xD224
 2600 #define PTP_DPC_NIKON_MovieWbPresetDataValue3       0xD225
 2601 #define PTP_DPC_NIKON_MovieWbPresetDataValue4       0xD226
 2602 #define PTP_DPC_NIKON_MovieWbPresetDataValue5       0xD227
 2603 #define PTP_DPC_NIKON_MovieWbPresetDataValue6       0xD228
 2604 #define PTP_DPC_NIKON_MovieWbTunePreset1        0xD229
 2605 #define PTP_DPC_NIKON_MovieWbTunePreset2        0xD22A
 2606 #define PTP_DPC_NIKON_MovieWbTunePreset3        0xD22B
 2607 #define PTP_DPC_NIKON_MovieWbTunePreset4        0xD22C
 2608 #define PTP_DPC_NIKON_MovieWbTunePreset5        0xD22D
 2609 #define PTP_DPC_NIKON_MovieWbTunePreset6        0xD22E
 2610 #define PTP_DPC_NIKON_MovieWbPresetProtect1     0xD22F
 2611 #define PTP_DPC_NIKON_MovieWbPresetProtect2     0xD230
 2612 #define PTP_DPC_NIKON_MovieWbPresetProtect3     0xD231
 2613 #define PTP_DPC_NIKON_MovieWbPresetProtect4     0xD232
 2614 #define PTP_DPC_NIKON_MovieWbPresetProtect5     0xD233
 2615 #define PTP_DPC_NIKON_MovieWbPresetProtect6     0xD234
 2616 #define PTP_DPC_NIKON_MovieWhiteBalanceReset        0xD235
 2617 #define PTP_DPC_NIKON_MovieNrHighISO            0xD236
 2618 #define PTP_DPC_NIKON_MovieActivePicCtrlItem        0xD237
 2619 #define PTP_DPC_NIKON_MovieChangePicCtrlItem        0xD238
 2620 #define PTP_DPC_NIKON_ExposureBaseCompHighlight     0xD239
 2621 #define PTP_DPC_NIKON_MovieWhiteBalance         0xD23A
 2622 #define PTP_DPC_NIKON_MovieActiveDLighting      0xD23B
 2623 #define PTP_DPC_NIKON_MovieWbTuneNatural        0xD23C
 2624 #define PTP_DPC_NIKON_MovieAttenuator           0xD23D
 2625 #define PTP_DPC_NIKON_MovieVignetteControl      0xD23E
 2626 #define PTP_DPC_NIKON_MovieDiffractionCompensation  0xD23F
 2627 #define PTP_DPC_NIKON_UseDeviceStageFlag        0xD303
 2628 #define PTP_DPC_NIKON_MovieCaptureMode          0xD304
 2629 #define PTP_DPC_NIKON_SlowMotionMovieRecordScreenSize   0xD305
 2630 #define PTP_DPC_NIKON_HighSpeedStillCaptureRate     0xD306
 2631 #define PTP_DPC_NIKON_BestMomentCaptureMode     0xD307
 2632 #define PTP_DPC_NIKON_ActiveSelectionFrameSavedDefault  0xD308
 2633 #define PTP_DPC_NIKON_ActiveSelectionCapture40frameOver 0xD309
 2634 #define PTP_DPC_NIKON_ActiveSelectionOnReleaseRecord    0xD310
 2635 #define PTP_DPC_NIKON_ActiveSelectionSelectedPictures   0xD311
 2636 #define PTP_DPC_NIKON_ExposureRemainingInMovie      0xD312
 2637 #define PTP_DPC_NIKON_OpticalVR             0xD313
 2638 #define PTP_DPC_NIKON_ElectronicVR          0xD314
 2639 #define PTP_DPC_NIKON_SilentPhotography         0xD315
 2640 #define PTP_DPC_NIKON_FacePriority          0xD316
 2641 #define PTP_DPC_NIKON_LensTypeNikon1            0xD317
 2642 #define PTP_DPC_NIKON_ISONoiseReduction         0xD318
 2643 #define PTP_DPC_NIKON_MovieLoopLength           0xD323
 2644 
 2645 
 2646 /* Nikon V1 (or WU adapter?) Trace */
 2647 /* d241 - gets string "Nikon_WU2_0090B5123C61" */
 2648 #define PTP_DPC_NIKON_D241              0xD241
 2649 /* d244 - gets a single byte 0x00 */
 2650 #define PTP_DPC_NIKON_D244              0xD244
 2651 /* d247 - gets 3 bytes 0x01 0x00 0x00 */
 2652 #define PTP_DPC_NIKON_D247              0xD247
 2653 /* S9700 */
 2654 #define PTP_DPC_NIKON_GUID              0xD24F
 2655 /* d250 - gets a string "0000123C61" */
 2656 #define PTP_DPC_NIKON_D250              0xD250
 2657 /* d251 - gets a 0x0100000d */
 2658 #define PTP_DPC_NIKON_D251              0xD251
 2659 
 2660 /* this is irregular, as it should be -0x5000 or 0xD000 based */
 2661 #define PTP_DPC_NIKON_1_ISO             0xF002
 2662 #define PTP_DPC_NIKON_1_FNumber             0xF003
 2663 #define PTP_DPC_NIKON_1_ShutterSpeed            0xF004
 2664 #define PTP_DPC_NIKON_1_FNumber2            0xF006
 2665 #define PTP_DPC_NIKON_1_ShutterSpeed2           0xF007
 2666 #define PTP_DPC_NIKON_1_ImageCompression        0xF009
 2667 #define PTP_DPC_NIKON_1_ImageSize           0xF00A
 2668 #define PTP_DPC_NIKON_1_WhiteBalance            0xF00C
 2669 #define PTP_DPC_NIKON_1_LongExposureNoiseReduction  0xF00D
 2670 #define PTP_DPC_NIKON_1_HiISONoiseReduction     0xF00E
 2671 #define PTP_DPC_NIKON_1_ActiveDLighting         0xF00F
 2672 #define PTP_DPC_NIKON_1_Language            0xF018
 2673 #define PTP_DPC_NIKON_1_ReleaseWithoutCard      0xF019 /* no sd card */
 2674 #define PTP_DPC_NIKON_1_MovQuality          0xF01C
 2675 
 2676 /* Fuji specific */
 2677 
 2678 #define PTP_DPC_FUJI_FilmSimulation         0xD001
 2679 #define PTP_DPC_FUJI_FilmSimulationTune         0xD002
 2680 #define PTP_DPC_FUJI_DRangeMode             0xD007
 2681 #define PTP_DPC_FUJI_ColorMode              0xD008
 2682 #define PTP_DPC_FUJI_ColorSpace             0xD00A
 2683 #define PTP_DPC_FUJI_WhitebalanceTune1          0xD00B
 2684 #define PTP_DPC_FUJI_WhitebalanceTune2          0xD00C
 2685 #define PTP_DPC_FUJI_ColorTemperature           0xD017
 2686 #define PTP_DPC_FUJI_Quality                0xD018
 2687 #define PTP_DPC_FUJI_RecMode                0xD019 /* LiveViewColorMode? */
 2688 #define PTP_DPC_FUJI_LiveViewBrightness         0xD01A
 2689 #define PTP_DPC_FUJI_ThroughImageZoom           0xD01B
 2690 #define PTP_DPC_FUJI_NoiseReduction         0xD01C
 2691 #define PTP_DPC_FUJI_MacroMode              0xD01D
 2692 #define PTP_DPC_FUJI_LiveViewStyle          0xD01E
 2693 #define PTP_DPC_FUJI_FaceDetectionMode          0xD020
 2694 #define PTP_DPC_FUJI_RedEyeCorrectionMode       0xD021
 2695 #define PTP_DPC_FUJI_RawCompression         0xD022
 2696 #define PTP_DPC_FUJI_GrainEffect            0xD023
 2697 #define PTP_DPC_FUJI_SetEyeAFMode           0xD024
 2698 #define PTP_DPC_FUJI_FocusPoints            0xD025
 2699 #define PTP_DPC_FUJI_MFAssistMode           0xD026
 2700 #define PTP_DPC_FUJI_InterlockAEAFArea          0xD027
 2701 #define PTP_DPC_FUJI_CommandDialMode            0xD028
 2702 #define PTP_DPC_FUJI_Shadowing              0xD029
 2703 /* d02a - d02c also appear in setafmode */
 2704 #define PTP_DPC_FUJI_ExposureIndex          0xD02A
 2705 #define PTP_DPC_FUJI_MovieISO               0xD02B
 2706 #define PTP_DPC_FUJI_WideDynamicRange           0xD02E
 2707 #define PTP_DPC_FUJI_TNumber                0xD02F
 2708 #define PTP_DPC_FUJI_Comment                0xD100
 2709 #define PTP_DPC_FUJI_SerialMode             0xD101
 2710 #define PTP_DPC_FUJI_ExposureDelay          0xD102
 2711 #define PTP_DPC_FUJI_PreviewTime            0xD103
 2712 #define PTP_DPC_FUJI_BlackImageTone         0xD104
 2713 #define PTP_DPC_FUJI_Illumination           0xD105
 2714 #define PTP_DPC_FUJI_FrameGuideMode         0xD106
 2715 #define PTP_DPC_FUJI_ViewfinderWarning          0xD107
 2716 #define PTP_DPC_FUJI_AutoImageRotation          0xD108
 2717 #define PTP_DPC_FUJI_DetectImageRotation        0xD109
 2718 #define PTP_DPC_FUJI_ShutterPriorityMode1       0xD10A
 2719 #define PTP_DPC_FUJI_ShutterPriorityMode2       0xD10B
 2720 #define PTP_DPC_FUJI_AFIlluminator          0xD112
 2721 #define PTP_DPC_FUJI_Beep               0xD113
 2722 #define PTP_DPC_FUJI_AELock             0xD114
 2723 #define PTP_DPC_FUJI_ISOAutoSetting1            0xD115
 2724 #define PTP_DPC_FUJI_ISOAutoSetting2            0xD116
 2725 #define PTP_DPC_FUJI_ISOAutoSetting3            0xD117
 2726 #define PTP_DPC_FUJI_ExposureStep           0xD118
 2727 #define PTP_DPC_FUJI_CompensationStep           0xD119
 2728 #define PTP_DPC_FUJI_ExposureSimpleSet          0xD11A
 2729 #define PTP_DPC_FUJI_CenterPhotometryRange      0xD11B
 2730 #define PTP_DPC_FUJI_PhotometryLevel1           0xD11C
 2731 #define PTP_DPC_FUJI_PhotometryLevel2           0xD11D
 2732 #define PTP_DPC_FUJI_PhotometryLevel3           0xD11E
 2733 #define PTP_DPC_FUJI_FlashTuneSpeed         0xD11F
 2734 #define PTP_DPC_FUJI_FlashShutterLimit          0xD120
 2735 #define PTP_DPC_FUJI_BuiltinFlashMode           0xD121
 2736 #define PTP_DPC_FUJI_FlashManualMode            0xD122
 2737 #define PTP_DPC_FUJI_FlashRepeatingMode1        0xD123
 2738 #define PTP_DPC_FUJI_FlashRepeatingMode2        0xD124
 2739 #define PTP_DPC_FUJI_FlashRepeatingMode3        0xD125
 2740 #define PTP_DPC_FUJI_FlashCommanderMode1        0xD126
 2741 #define PTP_DPC_FUJI_FlashCommanderMode2        0xD127
 2742 #define PTP_DPC_FUJI_FlashCommanderMode3        0xD128
 2743 #define PTP_DPC_FUJI_FlashCommanderMode4        0xD129
 2744 #define PTP_DPC_FUJI_FlashCommanderMode5        0xD12A
 2745 #define PTP_DPC_FUJI_FlashCommanderMode6        0xD12B
 2746 #define PTP_DPC_FUJI_FlashCommanderMode7        0xD12C
 2747 #define PTP_DPC_FUJI_ModelingFlash          0xD12D
 2748 #define PTP_DPC_FUJI_BKT                0xD12E
 2749 #define PTP_DPC_FUJI_BKTChange              0xD12F
 2750 #define PTP_DPC_FUJI_BKTOrder               0xD130
 2751 #define PTP_DPC_FUJI_BKTSelection           0xD131
 2752 #define PTP_DPC_FUJI_AEAFLockButton         0xD132
 2753 #define PTP_DPC_FUJI_CenterButton           0xD133
 2754 #define PTP_DPC_FUJI_MultiSelectorButton        0xD134
 2755 #define PTP_DPC_FUJI_FunctionLock           0xD136
 2756 #define PTP_DPC_FUJI_Password               0xD145
 2757 #define PTP_DPC_FUJI_ChangePassword         0xD146  /* ? */
 2758 #define PTP_DPC_FUJI_CommandDialSetting1        0xD147
 2759 #define PTP_DPC_FUJI_CommandDialSetting2        0xD148
 2760 #define PTP_DPC_FUJI_CommandDialSetting3        0xD149
 2761 #define PTP_DPC_FUJI_CommandDialSetting4        0xD14A
 2762 #define PTP_DPC_FUJI_ButtonsAndDials            0xD14B
 2763 #define PTP_DPC_FUJI_NonCPULensData         0xD14C
 2764 #define PTP_DPC_FUJI_MBD200Batteries            0xD14E
 2765 #define PTP_DPC_FUJI_AFOnForMBD200Batteries     0xD14F
 2766 #define PTP_DPC_FUJI_FirmwareVersion            0xD153
 2767 #define PTP_DPC_FUJI_ShotCount              0xD154
 2768 #define PTP_DPC_FUJI_ShutterExchangeCount       0xD155
 2769 #define PTP_DPC_FUJI_WorldClock             0xD157
 2770 #define PTP_DPC_FUJI_TimeDifference1            0xD158
 2771 #define PTP_DPC_FUJI_TimeDifference2            0xD159
 2772 #define PTP_DPC_FUJI_Language               0xD15A
 2773 #define PTP_DPC_FUJI_FrameNumberSequence        0xD15B
 2774 #define PTP_DPC_FUJI_VideoMode              0xD15C
 2775 #define PTP_DPC_FUJI_SetUSBMode             0xD15D
 2776 #define PTP_DPC_FUJI_CommentWriteSetting        0xD161
 2777 #define PTP_DPC_FUJI_BCRAppendDelimiter         0xD162
 2778 #define PTP_DPC_FUJI_CommentEx              0xD167
 2779 #define PTP_DPC_FUJI_VideoOutOnOff          0xD168
 2780 #define PTP_DPC_FUJI_CropMode               0xD16F
 2781 #define PTP_DPC_FUJI_LensZoomPos            0xD170
 2782 #define PTP_DPC_FUJI_FocusPosition          0xD171
 2783 #define PTP_DPC_FUJI_LiveViewImageQuality       0xD173
 2784 #define PTP_DPC_FUJI_LiveViewImageSize          0xD174
 2785 #define PTP_DPC_FUJI_LiveViewCondition          0xD175
 2786 #define PTP_DPC_FUJI_StandbyMode            0xD176
 2787 #define PTP_DPC_FUJI_LiveViewExposure           0xD177
 2788 #define PTP_DPC_FUJI_LiveViewWhiteBalance       0xD178 /* same values as 0x5005 */
 2789 #define PTP_DPC_FUJI_LiveViewWhiteBalanceGain       0xD179
 2790 #define PTP_DPC_FUJI_LiveViewTuning         0xD17A
 2791 #define PTP_DPC_FUJI_FocusMeteringMode          0xD17C
 2792 #define PTP_DPC_FUJI_FocusLength            0xD17D
 2793 #define PTP_DPC_FUJI_CropAreaFrameInfo          0xD17E
 2794 #define PTP_DPC_FUJI_ResetSetting           0xD17F /* also clean sensor? */
 2795 #define PTP_DPC_FUJI_IOPCode                0xD184
 2796 #define PTP_DPC_FUJI_TetherRawConditionCode     0xD186
 2797 #define PTP_DPC_FUJI_TetherRawCompatibilityCode     0xD187
 2798 #define PTP_DPC_FUJI_LightTune              0xD200
 2799 #define PTP_DPC_FUJI_ReleaseMode            0xD201
 2800 #define PTP_DPC_FUJI_BKTFrame1              0xD202
 2801 #define PTP_DPC_FUJI_BKTFrame2              0xD203
 2802 #define PTP_DPC_FUJI_BKTStep                0xD204
 2803 #define PTP_DPC_FUJI_ProgramShift           0xD205
 2804 #define PTP_DPC_FUJI_FocusAreas             0xD206
 2805 #define PTP_DPC_FUJI_PriorityMode           0xD207 /* from setprioritymode */
 2806 /* D208 is some kind of control, likely bitmasked. reported like an enum.
 2807  * 0x200 seems to mean focusing?
 2808  * 0x208 capture?
 2809  * camera starts with 0x304
 2810  * xt2:    0x104,0x200,0x4,0x304,0x500,0xc,0xa000,6,0x9000,2,0x9100,1,0x9300,5
 2811  * xt3:    0x104,0x200,0x4,0x304,0x500,0xc,0xa000,6,0x9000,2,0x9100,1,0x9200,0x40,0x9300,5,0x804,0x80
 2812  * xt30:   0x104,0x200,0x4,0x304,0x500,0xc,0xa000,6,0x9000,2,0x9100,1,0x9200,0x40,0x9300,5
 2813  * xt4:    0x104,0x200,0x4,0x304,0x500,0xc,0x8000,0xa000,6,0x9000,2,0x9100,1,0x9300,5,0xe,0x9200,0x40,0x804,0x80
 2814  * xh1:    0x104,0x200,0x4,0x304,0x500,0xc,0xa000,6,0x9000,2,0x9100,1,0x9300,5
 2815  * gfx100: 0x104,0x200,0x4,0x304,0x500,0xc,0x8000,0xa000,6,0x9000,2,0x9100,1,0x9300,5,0xe,0x9200
 2816  * gfx50r: 0x104,0x200,0x4,0x304,0x500,0xc,0xa000,6,0x9000,2,0x9100,1,0x9300,5,0xe
 2817  * xpro2:  0x104,0x200,0x4,0x304,0x500,0xc,0xa000,6,0x9000,2,0x9100,1
 2818  *
 2819  * 0x304 is for regular capture     SDK_ShootS2toS0 (default) (SDK_Shoot)
 2820  * 0x200 seems for autofocus (s1?)  SDK_ShootS1
 2821  * 0x500 start bulb? 0xc end bulb?  SDK_StartBulb
 2822  * 0x400 might also be start bulb?  SDK_StartBulb
 2823  * 0xc                  SDK_EndBulb
 2824  * 0x600                SDK_1PushAF
 2825  * 0x4                  SDK_CancelS1
 2826  * 0x300                SDK_ShootS2
 2827  * 0x8000 migh be autowhitebalance
 2828  */
 2829 #define PTP_DPC_FUJI_AFStatus               0xD209
 2830 #define PTP_DPC_FUJI_DeviceName             0xD20B
 2831 #define PTP_DPC_FUJI_MediaRecord            0xD20C /* from capmediarecord */
 2832 #define PTP_DPC_FUJI_MediaCapacity          0xD20D
 2833 #define PTP_DPC_FUJI_FreeSDRAMImages            0xD20E /* free images in SDRAM */
 2834 #define PTP_DPC_FUJI_MediaStatus            0xD211
 2835 #define PTP_DPC_FUJI_CurrentState           0xD212
 2836 #define PTP_DPC_FUJI_AELock2                0xD213
 2837 #define PTP_DPC_FUJI_Copyright              0xD215
 2838 #define PTP_DPC_FUJI_Copyright2             0xD216
 2839 #define PTP_DPC_FUJI_Aperture               0xD218
 2840 #define PTP_DPC_FUJI_ShutterSpeed           0xD219
 2841 #define PTP_DPC_FUJI_DeviceError            0xD21B
 2842 #define PTP_DPC_FUJI_SensitivityFineTune1       0xD222
 2843 #define PTP_DPC_FUJI_SensitivityFineTune2       0xD223
 2844 #define PTP_DPC_FUJI_CaptureRemaining           0xD229  /* Movie AF Mode? */
 2845 #define PTP_DPC_FUJI_MovieRemainingTime         0xD22A  /* Movie Focus Area? */
 2846 #define PTP_DPC_FUJI_ForceMode              0xD230
 2847 #define PTP_DPC_FUJI_ShutterSpeed2          0xD240 /* Movie Aperture */
 2848 #define PTP_DPC_FUJI_ImageAspectRatio           0xD241
 2849 #define PTP_DPC_FUJI_BatteryLevel           0xD242 /* Movie Sensitivity???? */
 2850 #define PTP_DPC_FUJI_TotalShotCount         0xD310
 2851 #define PTP_DPC_FUJI_HighLightTone          0xD320
 2852 #define PTP_DPC_FUJI_ShadowTone             0xD321
 2853 #define PTP_DPC_FUJI_LongExposureNR         0xD322
 2854 #define PTP_DPC_FUJI_FullTimeManualFocus        0xD323
 2855 #define PTP_DPC_FUJI_ISODialHn1             0xD332
 2856 #define PTP_DPC_FUJI_ISODialHn2             0xD333
 2857 #define PTP_DPC_FUJI_ViewMode1              0xD33F
 2858 #define PTP_DPC_FUJI_ViewMode2              0xD340
 2859 #define PTP_DPC_FUJI_DispInfoMode           0xD343
 2860 #define PTP_DPC_FUJI_LensISSwitch           0xD346
 2861 #define PTP_DPC_FUJI_FocusPoint             0xD347
 2862 #define PTP_DPC_FUJI_InstantAFMode          0xD34A
 2863 #define PTP_DPC_FUJI_PreAFMode              0xD34B
 2864 #define PTP_DPC_FUJI_CustomSetting          0xD34C
 2865 #define PTP_DPC_FUJI_LMOMode                0xD34D
 2866 #define PTP_DPC_FUJI_LockButtonMode         0xD34E
 2867 #define PTP_DPC_FUJI_AFLockMode             0xD34F
 2868 #define PTP_DPC_FUJI_MicJackMode            0xD350
 2869 #define PTP_DPC_FUJI_ISMode             0xD351
 2870 #define PTP_DPC_FUJI_DateTimeDispFormat         0xD352
 2871 #define PTP_DPC_FUJI_AeAfLockKeyAssign          0xD353
 2872 #define PTP_DPC_FUJI_CrossKeyAssign         0xD354
 2873 #define PTP_DPC_FUJI_SilentMode             0xD355
 2874 #define PTP_DPC_FUJI_PBSound                0xD356
 2875 #define PTP_DPC_FUJI_EVFDispAutoRotate          0xD358
 2876 #define PTP_DPC_FUJI_ExposurePreview            0xD359
 2877 #define PTP_DPC_FUJI_DispBrightness1            0xD35A
 2878 #define PTP_DPC_FUJI_DispBrightness2            0xD35B
 2879 #define PTP_DPC_FUJI_DispChroma1            0xD35C
 2880 #define PTP_DPC_FUJI_DispChroma2            0xD35D
 2881 #define PTP_DPC_FUJI_FocusCheckMode         0xD35E
 2882 #define PTP_DPC_FUJI_FocusScaleUnit         0xD35F
 2883 #define PTP_DPC_FUJI_SetFunctionButton          0xD361
 2884 #define PTP_DPC_FUJI_SensorCleanTiming          0xD363
 2885 #define PTP_DPC_FUJI_CustomAutoPowerOff         0xD364
 2886 #define PTP_DPC_FUJI_FileNamePrefix1            0xD365
 2887 #define PTP_DPC_FUJI_FileNamePrefix2            0xD366
 2888 #define PTP_DPC_FUJI_BatteryInfo1           0xD36A
 2889 #define PTP_DPC_FUJI_BatteryInfo2           0xD36B
 2890 #define PTP_DPC_FUJI_LensNameAndSerial          0xD36D
 2891 #define PTP_DPC_FUJI_CustomDispInfo         0xD36E
 2892 #define PTP_DPC_FUJI_FunctionLockCategory1      0xD36F
 2893 #define PTP_DPC_FUJI_FunctionLockCategory2      0xD370
 2894 #define PTP_DPC_FUJI_CustomPreviewTime          0xD371
 2895 #define PTP_DPC_FUJI_FocusArea1             0xD372
 2896 #define PTP_DPC_FUJI_FocusArea2             0xD373
 2897 #define PTP_DPC_FUJI_FocusArea3             0xD374
 2898 #define PTP_DPC_FUJI_FrameGuideGridInfo1        0xD375
 2899 #define PTP_DPC_FUJI_FrameGuideGridInfo2        0xD376
 2900 #define PTP_DPC_FUJI_FrameGuideGridInfo3        0xD377
 2901 #define PTP_DPC_FUJI_FrameGuideGridInfo4        0xD378
 2902 #define PTP_DPC_FUJI_LensUnknownData            0xD38A
 2903 #define PTP_DPC_FUJI_LensZoomPosCaps            0xD38C
 2904 #define PTP_DPC_FUJI_LensFNumberList            0xD38D
 2905 #define PTP_DPC_FUJI_LensFocalLengthList        0xD38E
 2906 #define PTP_DPC_FUJI_FocusLimiter           0xD390
 2907 #define PTP_DPC_FUJI_FocusArea4             0xD395
 2908 #define PTP_DPC_FUJI_InitSequence           0xDF01
 2909 #define PTP_DPC_FUJI_AppVersion             0xDF24
 2910 
 2911 /* Microsoft/MTP specific */
 2912 #define PTP_DPC_MTP_SecureTime              0xD101
 2913 #define PTP_DPC_MTP_DeviceCertificate           0xD102
 2914 #define PTP_DPC_MTP_RevocationInfo          0xD103
 2915 #define PTP_DPC_MTP_SynchronizationPartner      0xD401
 2916 #define PTP_DPC_MTP_DeviceFriendlyName          0xD402
 2917 #define PTP_DPC_MTP_VolumeLevel             0xD403
 2918 #define PTP_DPC_MTP_DeviceIcon              0xD405
 2919 #define PTP_DPC_MTP_SessionInitiatorInfo        0xD406
 2920 #define PTP_DPC_MTP_PerceivedDeviceType         0xD407
 2921 #define PTP_DPC_MTP_PlaybackRate                        0xD410
 2922 #define PTP_DPC_MTP_PlaybackObject                      0xD411
 2923 #define PTP_DPC_MTP_PlaybackContainerIndex              0xD412
 2924 #define PTP_DPC_MTP_PlaybackPosition                    0xD413
 2925 #define PTP_DPC_MTP_PlaysForSureID                      0xD131
 2926 
 2927 /* Zune specific property codes */
 2928 #define PTP_DPC_MTP_Zune_UnknownVersion         0xD181
 2929 
 2930 /* Olympus */
 2931 /* these are from OMD E-M1 Mark 2 */
 2932 #define PTP_DPC_OLYMPUS_Aperture            0xD002
 2933 #define PTP_DPC_OLYMPUS_FocusMode           0xD003
 2934 #define PTP_DPC_OLYMPUS_ExposureMeteringMode        0xD004
 2935 #define PTP_DPC_OLYMPUS_ISO             0xD007
 2936 #define PTP_DPC_OLYMPUS_ExposureCompensation        0xD008
 2937 #define PTP_DPC_OLYMPUS_OMD_DriveMode           0xD009
 2938 #define PTP_DPC_OLYMPUS_ImageFormat         0xD00D
 2939 #define PTP_DPC_OLYMPUS_FaceDetection           0xD01A
 2940 #define PTP_DPC_OLYMPUS_AspectRatio         0xD01B
 2941 #define PTP_DPC_OLYMPUS_Shutterspeed            0xD01C
 2942 #define PTP_DPC_OLYMPUS_WhiteBalance            0xD01E
 2943 #define PTP_DPC_OLYMPUS_LiveViewModeOM          0xD06D
 2944 #define PTP_DPC_OLYMPUS_CaptureTarget           0xD0DC
 2945 
 2946 /* unsure where these were from */
 2947 #define PTP_DPC_OLYMPUS_ResolutionMode          0xD102
 2948 #define PTP_DPC_OLYMPUS_FocusPriority           0xD103
 2949 #define PTP_DPC_OLYMPUS_DriveMode           0xD104
 2950 #define PTP_DPC_OLYMPUS_DateTimeFormat          0xD105
 2951 #define PTP_DPC_OLYMPUS_ExposureBiasStep        0xD106
 2952 #define PTP_DPC_OLYMPUS_WBMode              0xD107
 2953 #define PTP_DPC_OLYMPUS_OneTouchWB          0xD108
 2954 #define PTP_DPC_OLYMPUS_ManualWB            0xD109
 2955 #define PTP_DPC_OLYMPUS_ManualWBRBBias          0xD10A
 2956 #define PTP_DPC_OLYMPUS_CustomWB            0xD10B
 2957 #define PTP_DPC_OLYMPUS_CustomWBValue           0xD10C
 2958 #define PTP_DPC_OLYMPUS_ExposureTimeEx          0xD10D
 2959 #define PTP_DPC_OLYMPUS_BulbMode            0xD10E
 2960 #define PTP_DPC_OLYMPUS_AntiMirrorMode          0xD10F
 2961 #define PTP_DPC_OLYMPUS_AEBracketingFrame       0xD110
 2962 #define PTP_DPC_OLYMPUS_AEBracketingStep        0xD111
 2963 #define PTP_DPC_OLYMPUS_WBBracketingFrame       0xD112
 2964 #define PTP_DPC_OLYMPUS_WBBracketingRBFrame     0xD112 /* dup ? */
 2965 #define PTP_DPC_OLYMPUS_WBBracketingRBRange     0xD113
 2966 #define PTP_DPC_OLYMPUS_WBBracketingGMFrame     0xD114
 2967 #define PTP_DPC_OLYMPUS_WBBracketingGMRange     0xD115
 2968 #define PTP_DPC_OLYMPUS_FLBracketingFrame       0xD118
 2969 #define PTP_DPC_OLYMPUS_FLBracketingStep        0xD119
 2970 #define PTP_DPC_OLYMPUS_FlashBiasCompensation       0xD11A
 2971 #define PTP_DPC_OLYMPUS_ManualFocusMode         0xD11B
 2972 #define PTP_DPC_OLYMPUS_RawSaveMode         0xD11D
 2973 #define PTP_DPC_OLYMPUS_AUXLightMode            0xD11E
 2974 #define PTP_DPC_OLYMPUS_LensSinkMode            0xD11F
 2975 #define PTP_DPC_OLYMPUS_BeepStatus          0xD120
 2976 #define PTP_DPC_OLYMPUS_ColorSpace          0xD122
 2977 #define PTP_DPC_OLYMPUS_ColorMatching           0xD123
 2978 #define PTP_DPC_OLYMPUS_Saturation          0xD124
 2979 #define PTP_DPC_OLYMPUS_NoiseReductionPattern       0xD126
 2980 #define PTP_DPC_OLYMPUS_NoiseReductionRandom        0xD127
 2981 #define PTP_DPC_OLYMPUS_ShadingMode         0xD129
 2982 #define PTP_DPC_OLYMPUS_ISOBoostMode            0xD12A
 2983 #define PTP_DPC_OLYMPUS_ExposureIndexBiasStep       0xD12B
 2984 #define PTP_DPC_OLYMPUS_FilterEffect            0xD12C
 2985 #define PTP_DPC_OLYMPUS_ColorTune           0xD12D
 2986 #define PTP_DPC_OLYMPUS_Language            0xD12E
 2987 #define PTP_DPC_OLYMPUS_LanguageCode            0xD12F
 2988 #define PTP_DPC_OLYMPUS_RecviewMode         0xD130
 2989 #define PTP_DPC_OLYMPUS_SleepTime           0xD131
 2990 #define PTP_DPC_OLYMPUS_ManualWBGMBias          0xD132
 2991 #define PTP_DPC_OLYMPUS_AELAFLMode          0xD135
 2992 #define PTP_DPC_OLYMPUS_AELButtonStatus         0xD136
 2993 #define PTP_DPC_OLYMPUS_CompressionSettingEx        0xD137
 2994 #define PTP_DPC_OLYMPUS_ToneMode            0xD139
 2995 #define PTP_DPC_OLYMPUS_GradationMode           0xD13A
 2996 #define PTP_DPC_OLYMPUS_DevelopMode         0xD13B
 2997 #define PTP_DPC_OLYMPUS_ExtendInnerFlashMode        0xD13C
 2998 #define PTP_DPC_OLYMPUS_OutputDeviceMode        0xD13D
 2999 #define PTP_DPC_OLYMPUS_LiveViewMode            0xD13E
 3000 #define PTP_DPC_OLYMPUS_LCDBacklight            0xD140
 3001 #define PTP_DPC_OLYMPUS_CustomDevelop           0xD141
 3002 #define PTP_DPC_OLYMPUS_GradationAutoBias       0xD142
 3003 #define PTP_DPC_OLYMPUS_FlashRCMode         0xD143
 3004 #define PTP_DPC_OLYMPUS_FlashRCGroupValue       0xD144
 3005 #define PTP_DPC_OLYMPUS_FlashRCChannelValue     0xD145
 3006 #define PTP_DPC_OLYMPUS_FlashRCFPMode           0xD146
 3007 #define PTP_DPC_OLYMPUS_FlashRCPhotoChromicMode     0xD147
 3008 #define PTP_DPC_OLYMPUS_FlashRCPhotoChromicBias     0xD148
 3009 #define PTP_DPC_OLYMPUS_FlashRCPhotoChromicManualBias   0xD149
 3010 #define PTP_DPC_OLYMPUS_FlashRCQuantityLightLevel   0xD14A
 3011 #define PTP_DPC_OLYMPUS_FocusMeteringValue      0xD14B
 3012 #define PTP_DPC_OLYMPUS_ISOBracketingFrame      0xD14C
 3013 #define PTP_DPC_OLYMPUS_ISOBracketingStep       0xD14D
 3014 #define PTP_DPC_OLYMPUS_BulbMFMode          0xD14E
 3015 #define PTP_DPC_OLYMPUS_BurstFPSValue           0xD14F
 3016 #define PTP_DPC_OLYMPUS_ISOAutoBaseValue        0xD150
 3017 #define PTP_DPC_OLYMPUS_ISOAutoMaxValue         0xD151
 3018 #define PTP_DPC_OLYMPUS_BulbLimiterValue        0xD152
 3019 #define PTP_DPC_OLYMPUS_DPIMode             0xD153
 3020 #define PTP_DPC_OLYMPUS_DPICustomValue          0xD154
 3021 #define PTP_DPC_OLYMPUS_ResolutionValueSetting      0xD155
 3022 #define PTP_DPC_OLYMPUS_AFTargetSize            0xD157
 3023 #define PTP_DPC_OLYMPUS_LightSensorMode         0xD158
 3024 #define PTP_DPC_OLYMPUS_AEBracket           0xD159
 3025 #define PTP_DPC_OLYMPUS_WBRBBracket         0xD15A
 3026 #define PTP_DPC_OLYMPUS_WBGMBracket         0xD15B
 3027 #define PTP_DPC_OLYMPUS_FlashBracket            0xD15C
 3028 #define PTP_DPC_OLYMPUS_ISOBracket          0xD15D
 3029 #define PTP_DPC_OLYMPUS_MyModeStatus            0xD15E
 3030 #define PTP_DPC_OLYMPUS_DateTimeUTC         0xD176 /* check */
 3031 
 3032 /* Sony A900 */
 3033 #define PTP_DPC_SONY_DPCCompensation            0xD200
 3034 #define PTP_DPC_SONY_DRangeOptimize         0xD201
 3035 #define PTP_DPC_SONY_ImageSize              0xD203
 3036 #define PTP_DPC_SONY_ShutterSpeed           0xD20D
 3037 #define PTP_DPC_SONY_ColorTemp              0xD20F
 3038 #define PTP_DPC_SONY_CCFilter               0xD210
 3039 #define PTP_DPC_SONY_AspectRatio            0xD211
 3040 #define PTP_DPC_SONY_FocusFound                 0xD213 /* seems to be signaled (1->2) when focus is achieved */
 3041 #define PTP_DPC_SONY_Zoom                   0xD214 /* might be focal length * 1.000.000 */
 3042 #define PTP_DPC_SONY_ObjectInMemory             0xD215 /* used to signal when to retrieve new object */
 3043 #define PTP_DPC_SONY_ExposeIndex            0xD216
 3044 #define PTP_DPC_SONY_BatteryLevel           0xD218
 3045 #define PTP_DPC_SONY_SensorCrop             0xD219
 3046 #define PTP_DPC_SONY_PictureEffect          0xD21B
 3047 #define PTP_DPC_SONY_ABFilter               0xD21C
 3048 #define PTP_DPC_SONY_ISO                0xD21E  /* ? */
 3049 #define PTP_DPC_SONY_StillImageStoreDestination     0xD222  /* (type=0x4) Enumeration [1,17,16] value: 17 */
 3050 /* guessed DPC_SONY_DateTimeSettings 0xD223  error on query */
 3051 /* guessed DPC_SONY_FocusArea 0xD22C  (type=0x4) Enumeration [1,2,3,257,258,259,260,513,514,515,516,517,518,519,261,520] value: 1 */
 3052 /* guessed DPC_SONY_LiveDisplayEffect 0xD231 (type=0x2) Enumeration [1,2] value: 1 */
 3053 /* guessed DPC_SONY_FileType 0xD235  (enum: 0,1) */
 3054 /* guessed DPC_SONY_JpegQuality 0xD252 */
 3055 /* guessed DPC_SONY_PriorityKeySettings 0xD25A */
 3056 /* d255 reserved 5 */
 3057 /* d254 reserved 4 */
 3058 #define PTP_DPC_SONY_ExposureCompensation       0xD224
 3059 #define PTP_DPC_SONY_ISO2               0xD226
 3060 #define PTP_DPC_SONY_ShutterSpeed2          0xD229
 3061 #define PTP_DPC_SONY_AutoFocus              0xD2C1 /* ? half-press */
 3062 #define PTP_DPC_SONY_Capture                0xD2C2 /* ? full-press */
 3063 /* D2DB (2) , D2D3 (2) , D2C8 (2) also seen in Camera Remote related to D2C2 */
 3064 /* S1 ?
 3065  * AEL - d2c3
 3066  * FEL - d2c9
 3067  * AFL - d2c4
 3068  * AWBL - d2d9
 3069  */
 3070 /* semi control opcodes */
 3071 #define PTP_DPC_SONY_Movie              0xD2C8 /* ? */
 3072 #define PTP_DPC_SONY_StillImage             0xD2C7 /* ? */
 3073 
 3074 #define PTP_DPC_SONY_NearFar                0xD2D1
 3075 /*#define PTP_DPC_SONY_AutoFocus                0xD2D2 something related */
 3076 
 3077 #define PTP_DPC_SONY_AF_Area_Position           0xD2DC
 3078 
 3079 /* Sony QX properties */
 3080 /* all for 96f8 Control Device */
 3081 #define PTP_DPC_SONY_QX_Zoom_Absolute           0xD60E
 3082 #define PTP_DPC_SONY_QX_Movie_Rec           0xD60F
 3083 #define PTP_DPC_SONY_QX_Request_For_Update      0xD612
 3084 #define PTP_DPC_SONY_QX_Zoom_Wide_For_One_Shot      0xD613
 3085 #define PTP_DPC_SONY_QX_Zoom_Tele_For_One_Shot      0xD614
 3086 #define PTP_DPC_SONY_QX_S2_Button           0xD617
 3087 #define PTP_DPC_SONY_QX_Media_Format            0xD61C
 3088 #define PTP_DPC_SONY_QX_S1_Button           0xD61D
 3089 #define PTP_DPC_SONY_QX_AE_Lock             0xD61E
 3090 #define PTP_DPC_SONY_QX_Request_For_Update_For_Lens     0xD625
 3091 #define PTP_DPC_SONY_QX_Power_Off           0xD637
 3092 #define PTP_DPC_SONY_QX_RequestOneShooting      0xD638
 3093 #define PTP_DPC_SONY_QX_AF_Lock             0xD63B
 3094 #define PTP_DPC_SONY_QX_Zoom_Tele           0xD63C
 3095 #define PTP_DPC_SONY_QX_Zoom_Wide           0xD63E
 3096 #define PTP_DPC_SONY_QX_Focus_Magnification     0xD641
 3097 #define PTP_DPC_SONY_QX_Focus_Near_For_One_Shot     0xD6A1
 3098 #define PTP_DPC_SONY_QX_Focus_Far_For_One_Shot      0xD6A2
 3099 #define PTP_DPC_SONY_QX_Focus_Near_For_Continuous   0xD6A3
 3100 #define PTP_DPC_SONY_QX_Focus_Far_For_Continuous    0xD6A4
 3101 #define PTP_DPC_SONY_QX_Camera_Setting_Reset        0xD6D9
 3102 #define PTP_DPC_SONY_QX_Camera_Initialize       0xD6DA
 3103 
 3104 /* old */
 3105 #define PTP_DPC_SONY_QX_Capture             0xD617
 3106 #define PTP_DPC_SONY_QX_AutoFocus           0xD61D
 3107 
 3108 /* set via 96fa */
 3109 #define PTP_DPC_SONY_QX_PictureProfileInitialize    0xD620
 3110 #define PTP_DPC_SONY_QX_PictureProfile          0xD621
 3111 #define PTP_DPC_SONY_QX_AFSPrioritySetting      0xD622
 3112 #define PTP_DPC_SONY_QX_AFCPrioritySetting      0xD623
 3113 #define PTP_DPC_SONY_QX_LensUpdateState         0xD624
 3114 #define PTP_DPC_SONY_QX_SilentShooting          0xD626
 3115 #define PTP_DPC_SONY_QX_HDMIInfoDisplay         0xD627
 3116 #define PTP_DPC_SONY_QX_TCUBDisp            0xD628
 3117 #define PTP_DPC_SONY_QX_TCPreset            0xD629
 3118 #define PTP_DPC_SONY_QX_TCMake              0xD62A
 3119 #define PTP_DPC_SONY_QX_TCRun               0xD62B
 3120 #define PTP_DPC_SONY_QX_UBPreset            0xD62C
 3121 #define PTP_DPC_SONY_QX_TCFormat            0xD62D
 3122 #define PTP_DPC_SONY_QX_LongExposureNR          0xD62E
 3123 #define PTP_DPC_SONY_QX_UBTimeRec           0xD62F
 3124 #define PTP_DPC_SONY_QX_FocusMagnificationLevel     0xD6A7
 3125 #define PTP_DPC_SONY_QX_FocusMagnificationPosition  0xD6A8
 3126 #define PTP_DPC_SONY_QX_LensStatus          0xD6A9
 3127 #define PTP_DPC_SONY_QX_LiveviewResolution      0xD6AA
 3128 #define PTP_DPC_SONY_QX_NotifyFocusPosition         0xD6AF
 3129 #define PTP_DPC_SONY_QX_DriveMode           0xD6B0
 3130 #define PTP_DPC_SONY_QX_DateTime            0xD6B1
 3131 #define PTP_DPC_SONY_QX_AspectRatio             0xD6B3
 3132 #define PTP_DPC_SONY_QX_ImageSize           0xD6B7
 3133 #define PTP_DPC_SONY_QX_WhiteBalance            0xD6B8
 3134 #define PTP_DPC_SONY_QX_CompressionSetting      0xD6B9
 3135 #define PTP_DPC_SONY_QX_CautionError            0xD6BA
 3136 #define PTP_DPC_SONY_QX_StorageInformation      0xD6BB
 3137 #define PTP_DPC_SONY_QX_MovieQualitySetting         0xD6BC
 3138 #define PTP_DPC_SONY_QX_MovieFormatSetting      0xD6BD
 3139 #define PTP_DPC_SONY_QX_ZoomSetAbsolute         0xD6BE
 3140 #define PTP_DPC_SONY_QX_ZoomInformation         0xD6BF
 3141 #define PTP_DPC_SONY_QX_FocusSpeedForOneShot        0xD6C1
 3142 #define PTP_DPC_SONY_QX_FlashCompensation       0xD6C2
 3143 #define PTP_DPC_SONY_QX_ExposureCompensation        0xD6C3
 3144 #define PTP_DPC_SONY_QX_Aperture            0xD6C5
 3145 #define PTP_DPC_SONY_QX_ShootingFileInformation     0xD6C6
 3146 #define PTP_DPC_SONY_QX_MediaFormatState        0xD6C7
 3147 #define PTP_DPC_SONY_QX_ZoomMode            0xD6C9
 3148 #define PTP_DPC_SONY_QX_FlashMode           0xD6CA
 3149 #define PTP_DPC_SONY_QX_FocusMode           0xD6CB
 3150 #define PTP_DPC_SONY_QX_ExposureMode            0xD6CC
 3151 #define PTP_DPC_SONY_QX_MovieRecordingState         0xD6CD
 3152 #define PTP_DPC_SONY_QX_SelectSaveMedia         0xD6CF
 3153 #define PTP_DPC_SONY_QX_StillSteady             0xD6D0
 3154 #define PTP_DPC_SONY_QX_MovieSteady             0xD6D1
 3155 #define PTP_DPC_SONY_QX_Housing             0xD6D2
 3156 #define PTP_DPC_SONY_QX_K4OutputSetting         0xD6D3
 3157 #define PTP_DPC_SONY_QX_HDMIRECControl          0xD6D4
 3158 #define PTP_DPC_SONY_QX_TimeCodeOutputToHDMI        0xD6D5
 3159 #define PTP_DPC_SONY_QX_HDMIResolution          0xD6D6
 3160 #define PTP_DPC_SONY_QX_NTSC_PAL_Selector       0xD6D7
 3161 #define PTP_DPC_SONY_QX_HDMIOutput          0xD6D8
 3162 #define PTP_DPC_SONY_QX_ISOAutoMinimum          0xD6DB
 3163 #define PTP_DPC_SONY_QX_ISOAutoMaximum          0xD6DC
 3164 #define PTP_DPC_SONY_QX_APSCSuper35mm           0xD6DD
 3165 #define PTP_DPC_SONY_QX_LiveviewStatus          0xD6DE
 3166 #define PTP_DPC_SONY_QX_WhiteBalanceInitialize      0xD6DF
 3167 #define PTP_DPC_SONY_QX_OperatingMode           0xD6E2
 3168 #define PTP_DPC_SONY_QX_BiaxialFineTuningABDirection    0xD6E3
 3169 #define PTP_DPC_SONY_QX_HighISONr           0xD6E5
 3170 #define PTP_DPC_SONY_QX_AELockIndication        0xD6E8
 3171 #define PTP_DPC_SONY_QX_ElectronicFrontCurtainShutter   0xD6E9
 3172 #define PTP_DPC_SONY_QX_ShutterSpeed            0xD6EA
 3173 #define PTP_DPC_SONY_QX_FocusIndication         0xD6EC
 3174 #define PTP_DPC_SONY_QX_BiaxialFineTuningGMDirection    0xD6EF
 3175 #define PTP_DPC_SONY_QX_ColorTemperature        0xD6F0
 3176 #define PTP_DPC_SONY_QX_BatteryLevelIndication      0xD6F1
 3177 #define PTP_DPC_SONY_QX_ISO                 0xD6F2
 3178 #define PTP_DPC_SONY_QX_AutoSlowShutter         0xD6F3
 3179 #define PTP_DPC_SONY_QX_DynamicRangeOptimizer       0xD6FE
 3180 
 3181 
 3182 /* Casio EX-F1 */
 3183 #define PTP_DPC_CASIO_MONITOR       0xD001
 3184 #define PTP_DPC_CASIO_STORAGE       0xD002 //Not reported by DeviceInfo?
 3185 #define PTP_DPC_CASIO_UNKNOWN_1     0xD004
 3186 #define PTP_DPC_CASIO_UNKNOWN_2     0xD005
 3187 #define PTP_DPC_CASIO_UNKNOWN_3     0xD007
 3188 #define PTP_DPC_CASIO_RECORD_LIGHT  0xD008
 3189 #define PTP_DPC_CASIO_UNKNOWN_4     0xD009
 3190 #define PTP_DPC_CASIO_UNKNOWN_5     0xD00A
 3191 #define PTP_DPC_CASIO_MOVIE_MODE    0xD00B
 3192 #define PTP_DPC_CASIO_HD_SETTING    0xD00C
 3193 #define PTP_DPC_CASIO_HS_SETTING    0xD00D
 3194 #define PTP_DPC_CASIO_CS_HIGH_SPEED 0xD00F
 3195 #define PTP_DPC_CASIO_CS_UPPER_LIMIT    0xD010
 3196 #define PTP_DPC_CASIO_CS_SHOT       0xD011
 3197 #define PTP_DPC_CASIO_UNKNOWN_6     0xD012
 3198 #define PTP_DPC_CASIO_UNKNOWN_7     0xD013
 3199 #define PTP_DPC_CASIO_UNKNOWN_8     0xD015
 3200 #define PTP_DPC_CASIO_UNKNOWN_9     0xD017
 3201 #define PTP_DPC_CASIO_UNKNOWN_10    0xD018
 3202 #define PTP_DPC_CASIO_UNKNOWN_11    0xD019
 3203 #define PTP_DPC_CASIO_UNKNOWN_12    0xD01A
 3204 #define PTP_DPC_CASIO_UNKNOWN_13    0xD01B
 3205 #define PTP_DPC_CASIO_UNKNOWN_14    0xD01C
 3206 #define PTP_DPC_CASIO_UNKNOWN_15    0xD01D
 3207 #define PTP_DPC_CASIO_UNKNOWN_16    0xD020
 3208 #define PTP_DPC_CASIO_UNKNOWN_17    0xD030
 3209 #define PTP_DPC_CASIO_UNKNOWN_18    0xD080
 3210 
 3211 #define PTP_DPC_RICOH_ShutterSpeed  0xD00F
 3212 
 3213 /* https://github.com/Parrot-Developers/sequoia-ptpy */
 3214 #define PTP_DPC_PARROT_PhotoSensorEnableMask            0xD201
 3215 #define PTP_DPC_PARROT_PhotoSensorsKeepOn           0xD202
 3216 #define PTP_DPC_PARROT_MultispectralImageSize           0xD203
 3217 #define PTP_DPC_PARROT_MainBitDepth             0xD204
 3218 #define PTP_DPC_PARROT_MultispectralBitDepth            0xD205
 3219 #define PTP_DPC_PARROT_HeatingEnable                0xD206
 3220 #define PTP_DPC_PARROT_WifiStatus               0xD207
 3221 #define PTP_DPC_PARROT_WifiSSID                 0xD208
 3222 #define PTP_DPC_PARROT_WifiEncryptionType           0xD209
 3223 #define PTP_DPC_PARROT_WifiPassphrase               0xD20A
 3224 #define PTP_DPC_PARROT_WifiChannel              0xD20B
 3225 #define PTP_DPC_PARROT_Localization             0xD20C
 3226 #define PTP_DPC_PARROT_WifiMode                 0xD20D
 3227 #define PTP_DPC_PARROT_AntiFlickeringFrequency          0xD210
 3228 #define PTP_DPC_PARROT_DisplayOverlayMask           0xD211
 3229 #define PTP_DPC_PARROT_GPSInterval              0xD212
 3230 #define PTP_DPC_PARROT_MultisensorsExposureMeteringMode     0xD213
 3231 #define PTP_DPC_PARROT_MultisensorsExposureTime         0xD214
 3232 #define PTP_DPC_PARROT_MultisensorsExposureProgramMode      0xD215
 3233 #define PTP_DPC_PARROT_MultisensorsExposureIndex        0xD216
 3234 #define PTP_DPC_PARROT_MultisensorsIrradianceGain       0xD217
 3235 #define PTP_DPC_PARROT_MultisensorsIrradianceIntegrationTime    0xD218
 3236 #define PTP_DPC_PARROT_OverlapRate              0xD219
 3237 
 3238 /* Panasonic does not have regular device properties, they use some 32bit values */
 3239 #define PTP_DPC_PANASONIC_PhotoStyle            0x02000010
 3240 #define PTP_DPC_PANASONIC_ISO               0x02000020
 3241 #define PTP_DPC_PANASONIC_ISO_Param             0x02000021
 3242 #define PTP_DPC_PANASONIC_ISO_UpperLimit            0x02000022
 3243 #define PTP_DPC_PANASONIC_ShutterSpeed          0x02000030
 3244 #define PTP_DPC_PANASONIC_ShutterSpeed_Param            0x02000031
 3245 #define PTP_DPC_PANASONIC_ShutterSpeed_RangeLimit       0x02000032
 3246 #define PTP_DPC_PANASONIC_Aperture          0x02000040
 3247 #define PTP_DPC_PANASONIC_Aperture_Param            0x02000041
 3248 #define PTP_DPC_PANASONIC_Aperture_RangeLimit           0x02000042
 3249 #define PTP_DPC_PANASONIC_WhiteBalance          0x02000050
 3250 #define PTP_DPC_PANASONIC_WhiteBalance_Param            0x02000051
 3251 #define PTP_DPC_PANASONIC_WhiteBalance_KSet         0x02000052
 3252 #define PTP_DPC_PANASONIC_WhiteBalance_ADJ_AB           0x02000053
 3253 #define PTP_DPC_PANASONIC_WhiteBalance_ADJ_GM           0x02000054
 3254 #define PTP_DPC_PANASONIC_WhiteBalance_ADJ_AB_Sep       0x02000055
 3255 #define PTP_DPC_PANASONIC_Exposure          0x02000060
 3256 #define PTP_DPC_PANASONIC_Exposure_Param            0x02000061
 3257 #define PTP_DPC_PANASONIC_Exposure_RangeLimit           0x02000062
 3258 #define PTP_DPC_PANASONIC_AFArea            0x02000070 /* AFCONFIG */
 3259 #define PTP_DPC_PANASONIC_AFArea_AFModeParam            0x02000071 /* AFCONFIG */
 3260 #define PTP_DPC_PANASONIC_AFArea_AFAreaParam            0x02000072 /* AFCONFIG */
 3261 #define PTP_DPC_PANASONIC_AFArea_SetQuickAFParam        0x02000073 /* AFCONFIG */
 3262 #define PTP_DPC_PANASONIC_CameraMode            0x02000080
 3263 #define PTP_DPC_PANASONIC_CameraMode_DriveMode          0x02000081
 3264 #define PTP_DPC_PANASONIC_CameraMode_ModePos            0x02000082
 3265 #define PTP_DPC_PANASONIC_CameraMode_CreativeMode       0x02000083
 3266 #define PTP_DPC_PANASONIC_CameraMode_iAMode         0x02000084
 3267 #define PTP_DPC_PANASONIC_ImageFormat           0x020000A2
 3268 #define PTP_DPC_PANASONIC_MeteringInfo          0x020000B0
 3269 #define PTP_DPC_PANASONIC_IntervalInfo          0x020000C0
 3270 #define PTP_DPC_PANASONIC_RecDispConfig         0x020000E0
 3271 #define PTP_DPC_PANASONIC_RecInfoFlash          0x02000110
 3272 #define PTP_DPC_PANASONIC_BurstBracket          0x02000140
 3273 #define PTP_DPC_PANASONIC_RecPreviewConfig      0x02000170
 3274 #define PTP_DPC_PANASONIC_RecInfoSelfTimer      0x020001A0
 3275 #define PTP_DPC_PANASONIC_RecInfoFlash2         0x020001B0
 3276 #define PTP_DPC_PANASONIC_RecCtrlRelease        0x03000010
 3277 
 3278 #define PTP_DPC_PANASONIC_RecCtrlAFAE           0x03000020 /* cmd base for afae */
 3279 #define PTP_DPC_PANASONIC_RecCtrlAFAE_LockAE            0x03000021
 3280 #define PTP_DPC_PANASONIC_RecCtrlAFAE_LockAF            0x03000022
 3281 #define PTP_DPC_PANASONIC_RecCtrlAFAE_LockAFAE          0x03000023
 3282 #define PTP_DPC_PANASONIC_RecCtrlAFAE_AF_OneShot            0x03000024
 3283 #define PTP_DPC_PANASONIC_RecCtrlAFAE_Lock_Clear            0x03000025
 3284 
 3285 #define PTP_DPC_PANASONIC_Zoom              0x03000080
 3286 #define PTP_DPC_PANASONIC_RecCtrlLens           0x03010010
 3287 #define PTP_DPC_PANASONIC_MovConfig         0x06000010  /* uses 9408 */
 3288 #define PTP_DPC_PANASONIC_MovConfig_C_Movie_Mode        0x06000011  /* uses 9409 */
 3289 #define PTP_DPC_PANASONIC_MovConfig_HDMI_Mode           0x06000012  /* uses 9409 */
 3290 #define PTP_DPC_PANASONIC_MovConfig_Quality_Mode        0x06000013  /* uses 9409 */
 3291 #define PTP_DPC_PANASONIC_MovConfig_Rec_Mode            0x06000014  /* uses 9409 */
 3292 #define PTP_DPC_PANASONIC_08000010          0x08000010
 3293 /* various modes of the camera, HDMI, GetDateTimeWorldTime Mode/Area, SetupCfgInfo, SetupConfig_DateTime, GetSystemFreq Mode, GetSetupConfig Info */
 3294 /*
 3295 0000  54 00 00 00 02 00 0a 94-04 00 00 00 11 00 00 08  T...............
 3296 0010  0a 00 00 00 e2 07 07 00-10 00 11 00 09 00 12 00  ................
 3297 0020  00 08 02 00 00 00 00 00-13 00 00 08 02 00 00 00  ................
 3298 0030  00 00 14 00 00 08 04 00-00 00 00 00 00 00 15 00  ................
 3299 0040  00 08 04 00 00 00 00 00-00 00 16 00 00 08 02 00  ................
 3300 0050  00 00 01 00            -                         ....
 3301 
 3302 0000  d0 00 00 00 02 00 07 91-04 00 00 00 10 00 00 08  ................
 3303 0010  14 00 00 00 14 00 00 00-01 00 01 00 00 00 00 00  ................
 3304 0020  06 00 00 00 38 03 00 00-11 00 00 08 14 00 00 00  ....8...........
 3305 0030  14 00 00 00 01 00 01 00-00 00 00 00 05 00 00 00  ................
 3306 0040  c8 00 00 00 12 00 00 08-14 00 00 00 14 00 00 00  ................
 3307 0050  01 00 01 00 00 00 00 00-01 00 00 00 36 00 00 00  ............6...
 3308 0060  13 00 00 08 14 00 00 00-14 00 00 00 01 00 01 00  ................
 3309 0070  00 00 00 00 01 00 00 00-2a 00 00 00 14 00 00 08  ........*.......
 3310 0080  14 00 00 00 14 00 00 00-01 00 01 00 00 00 00 00  ................
 3311 0090  02 00 00 00 9e 00 00 00-15 00 00 08 14 00 00 00  ................
 3312 00a0  14 00 00 00 01 00 01 00-00 00 00 00 02 00 00 00  ................
 3313 00b0  9e 00 00 00 16 00 00 08-14 00 00 00 14 00 00 00  ................
 3314 00c0  01 00 01 00 00 00 00 00-01 00 00 00 2c 00 00 00  ............,...
 3315  */
 3316 #define PTP_DPC_PANASONIC_08000091          0x08000091 /* SetupFilesConfig_Set_Target */
 3317 /*
 3318 0000  16 00 00 00 02 00 0a 94-04 00 00 00 91 00 00 08  ................
 3319 0010  02 00 00 00 00 00      -                         ......
 3320 
 3321 0000  44 00 00 00 02 00 07 91-04 00 00 00 90 00 00 08  D...............
 3322 0010  14 00 00 00 14 00 00 00-01 00 01 00 00 00 00 00  ................
 3323 0020  01 00 00 00 48 00 00 00-91 00 00 08 14 00 00 00  ....H...........
 3324 0030  14 00 00 00 01 00 01 00-00 00 00 00 01 00 00 00  ................
 3325 0040  2c 00 00 00            -                         ,...
 3326  */
 3327 
 3328 #define PTP_DPC_PANASONIC_GetFreeSpaceInImages      0x12000010
 3329 /*
 3330 11 00 00 12
 3331 04 00 00 00
 3332 4e 00 00 00
 3333 
 3334 12 00 00 12
 3335 04 00 00 00
 3336 00 00 00 00
 3337 
 3338 13 00 00 12
 3339 02 00 00 00
 3340 00 00
 3341 
 3342 14 00 00 12
 3343 04 00 00 00
 3344 00 00 00 00
 3345 
 3346 15 00 00 12
 3347 06 00 00 00
 3348 02 00 01 00 00 00
 3349 
 3350 16 00 00 12
 3351 3a 00 00 00
 3352 02 00 4e 00 00 00 00 00 00 00 4e 00 00 00 ff ff
 3353 ff ff 00 00 00 00 ff ff ff ff 00 00 00 00 00 00
 3354 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff
 3355 ff ff 00 00 00 00 00 00 00 00
 3356 
 3357 17 00 00 12
 3358 06 00 00 00
 3359 00 00 00 00 00 00
 3360  */
 3361 #define PTP_DPC_PANASONIC_GetBatteryInfo        0x16000010
 3362 /*
 3363 0000  1c 00 00 00 02 00 14 94-04 00 00 00 11 00 00 16  ................
 3364 0010  08 00 00 00 4b 00 00 00-4b 00 ff ff              ....K...K...
 3365  */
 3366 #define PTP_DPC_PANASONIC_LensGetMFBar          0x12010040
 3367 /* 15c00010 GetSetupInfo Error */
 3368 /* 18000010 GetUSBSpeed */
 3369 
 3370 /* Leica */
 3371 #define PTP_DPC_LEICA_ExternalShooting          0xD018
 3372 /* d040 */
 3373 /* d60c */
 3374 /* d60e */
 3375 /* d610 */
 3376 
 3377 
 3378 /* MTP specific Object Properties */
 3379 #define PTP_OPC_StorageID               0xDC01
 3380 #define PTP_OPC_ObjectFormat                0xDC02
 3381 #define PTP_OPC_ProtectionStatus            0xDC03
 3382 #define PTP_OPC_ObjectSize              0xDC04
 3383 #define PTP_OPC_AssociationType             0xDC05
 3384 #define PTP_OPC_AssociationDesc             0xDC06
 3385 #define PTP_OPC_ObjectFileName              0xDC07
 3386 #define PTP_OPC_DateCreated             0xDC08
 3387 #define PTP_OPC_DateModified                0xDC09
 3388 #define PTP_OPC_Keywords                0xDC0A
 3389 #define PTP_OPC_ParentObject                0xDC0B
 3390 #define PTP_OPC_AllowedFolderContents           0xDC0C
 3391 #define PTP_OPC_Hidden                  0xDC0D
 3392 #define PTP_OPC_SystemObject                0xDC0E
 3393 #define PTP_OPC_PersistantUniqueObjectIdentifier    0xDC41
 3394 #define PTP_OPC_SyncID                  0xDC42
 3395 #define PTP_OPC_PropertyBag             0xDC43
 3396 #define PTP_OPC_Name                    0xDC44
 3397 #define PTP_OPC_CreatedBy               0xDC45
 3398 #define PTP_OPC_Artist                  0xDC46
 3399 #define PTP_OPC_DateAuthored                0xDC47
 3400 #define PTP_OPC_Description             0xDC48
 3401 #define PTP_OPC_URLReference                0xDC49
 3402 #define PTP_OPC_LanguageLocale              0xDC4A
 3403 #define PTP_OPC_CopyrightInformation            0xDC4B
 3404 #define PTP_OPC_Source                  0xDC4C
 3405 #define PTP_OPC_OriginLocation              0xDC4D
 3406 #define PTP_OPC_DateAdded               0xDC4E
 3407 #define PTP_OPC_NonConsumable               0xDC4F
 3408 #define PTP_OPC_CorruptOrUnplayable         0xDC50
 3409 #define PTP_OPC_ProducerSerialNumber            0xDC51
 3410 #define PTP_OPC_RepresentativeSampleFormat      0xDC81
 3411 #define PTP_OPC_RepresentativeSampleSize        0xDC82
 3412 #define PTP_OPC_RepresentativeSampleHeight      0xDC83
 3413 #define PTP_OPC_RepresentativeSampleWidth       0xDC84
 3414 #define PTP_OPC_RepresentativeSampleDuration        0xDC85
 3415 #define PTP_OPC_RepresentativeSampleData        0xDC86
 3416 #define PTP_OPC_Width                   0xDC87
 3417 #define PTP_OPC_Height                  0xDC88
 3418 #define PTP_OPC_Duration                0xDC89
 3419 #define PTP_OPC_Rating                  0xDC8A
 3420 #define PTP_OPC_Track                   0xDC8B
 3421 #define PTP_OPC_Genre                   0xDC8C
 3422 #define PTP_OPC_Credits                 0xDC8D
 3423 #define PTP_OPC_Lyrics                  0xDC8E
 3424 #define PTP_OPC_SubscriptionContentID           0xDC8F
 3425 #define PTP_OPC_ProducedBy              0xDC90
 3426 #define PTP_OPC_UseCount                0xDC91
 3427 #define PTP_OPC_SkipCount               0xDC92
 3428 #define PTP_OPC_LastAccessed                0xDC93
 3429 #define PTP_OPC_ParentalRating              0xDC94
 3430 #define PTP_OPC_MetaGenre               0xDC95
 3431 #define PTP_OPC_Composer                0xDC96
 3432 #define PTP_OPC_EffectiveRating             0xDC97
 3433 #define PTP_OPC_Subtitle                0xDC98
 3434 #define PTP_OPC_OriginalReleaseDate         0xDC99
 3435 #define PTP_OPC_AlbumName               0xDC9A
 3436 #define PTP_OPC_AlbumArtist             0xDC9B
 3437 #define PTP_OPC_Mood                    0xDC9C
 3438 #define PTP_OPC_DRMStatus               0xDC9D
 3439 #define PTP_OPC_SubDescription              0xDC9E
 3440 #define PTP_OPC_IsCropped               0xDCD1
 3441 #define PTP_OPC_IsColorCorrected            0xDCD2
 3442 #define PTP_OPC_ImageBitDepth               0xDCD3
 3443 #define PTP_OPC_Fnumber                 0xDCD4
 3444 #define PTP_OPC_ExposureTime                0xDCD5
 3445 #define PTP_OPC_ExposureIndex               0xDCD6
 3446 #define PTP_OPC_DisplayName             0xDCE0
 3447 #define PTP_OPC_BodyText                0xDCE1
 3448 #define PTP_OPC_Subject                 0xDCE2
 3449 #define PTP_OPC_Priority                0xDCE3
 3450 #define PTP_OPC_GivenName               0xDD00
 3451 #define PTP_OPC_MiddleNames             0xDD01
 3452 #define PTP_OPC_FamilyName              0xDD02
 3453 #define PTP_OPC_Prefix                  0xDD03
 3454 #define PTP_OPC_Suffix                  0xDD04
 3455 #define PTP_OPC_PhoneticGivenName           0xDD05
 3456 #define PTP_OPC_PhoneticFamilyName          0xDD06
 3457 #define PTP_OPC_EmailPrimary                0xDD07
 3458 #define PTP_OPC_EmailPersonal1              0xDD08
 3459 #define PTP_OPC_EmailPersonal2              0xDD09
 3460 #define PTP_OPC_EmailBusiness1              0xDD0A
 3461 #define PTP_OPC_EmailBusiness2              0xDD0B
 3462 #define PTP_OPC_EmailOthers             0xDD0C
 3463 #define PTP_OPC_PhoneNumberPrimary          0xDD0D
 3464 #define PTP_OPC_PhoneNumberPersonal         0xDD0E
 3465 #define PTP_OPC_PhoneNumberPersonal2            0xDD0F
 3466 #define PTP_OPC_PhoneNumberBusiness         0xDD10
 3467 #define PTP_OPC_PhoneNumberBusiness2            0xDD11
 3468 #define PTP_OPC_PhoneNumberMobile           0xDD12
 3469 #define PTP_OPC_PhoneNumberMobile2          0xDD13
 3470 #define PTP_OPC_FaxNumberPrimary            0xDD14
 3471 #define PTP_OPC_FaxNumberPersonal           0xDD15
 3472 #define PTP_OPC_FaxNumberBusiness           0xDD16
 3473 #define PTP_OPC_PagerNumber             0xDD17
 3474 #define PTP_OPC_PhoneNumberOthers           0xDD18
 3475 #define PTP_OPC_PrimaryWebAddress           0xDD19
 3476 #define PTP_OPC_PersonalWebAddress          0xDD1A
 3477 #define PTP_OPC_BusinessWebAddress          0xDD1B
 3478 #define PTP_OPC_InstantMessengerAddress         0xDD1C
 3479 #define PTP_OPC_InstantMessengerAddress2        0xDD1D
 3480 #define PTP_OPC_InstantMessengerAddress3        0xDD1E
 3481 #define PTP_OPC_PostalAddressPersonalFull       0xDD1F
 3482 #define PTP_OPC_PostalAddressPersonalFullLine1      0xDD20
 3483 #define PTP_OPC_PostalAddressPersonalFullLine2      0xDD21
 3484 #define PTP_OPC_PostalAddressPersonalFullCity       0xDD22
 3485 #define PTP_OPC_PostalAddressPersonalFullRegion     0xDD23
 3486 #define PTP_OPC_PostalAddressPersonalFullPostalCode 0xDD24
 3487 #define PTP_OPC_PostalAddressPersonalFullCountry    0xDD25
 3488 #define PTP_OPC_PostalAddressBusinessFull       0xDD26
 3489 #define PTP_OPC_PostalAddressBusinessLine1      0xDD27
 3490 #define PTP_OPC_PostalAddressBusinessLine2      0xDD28
 3491 #define PTP_OPC_PostalAddressBusinessCity       0xDD29
 3492 #define PTP_OPC_PostalAddressBusinessRegion     0xDD2A
 3493 #define PTP_OPC_PostalAddressBusinessPostalCode     0xDD2B
 3494 #define PTP_OPC_PostalAddressBusinessCountry        0xDD2C
 3495 #define PTP_OPC_PostalAddressOtherFull          0xDD2D
 3496 #define PTP_OPC_PostalAddressOtherLine1         0xDD2E
 3497 #define PTP_OPC_PostalAddressOtherLine2         0xDD2F
 3498 #define PTP_OPC_PostalAddressOtherCity          0xDD30
 3499 #define PTP_OPC_PostalAddressOtherRegion        0xDD31
 3500 #define PTP_OPC_PostalAddressOtherPostalCode        0xDD32
 3501 #define PTP_OPC_PostalAddressOtherCountry       0xDD33
 3502 #define PTP_OPC_OrganizationName            0xDD34
 3503 #define PTP_OPC_PhoneticOrganizationName        0xDD35
 3504 #define PTP_OPC_Role                    0xDD36
 3505 #define PTP_OPC_Birthdate               0xDD37
 3506 #define PTP_OPC_MessageTo               0xDD40
 3507 #define PTP_OPC_MessageCC               0xDD41
 3508 #define PTP_OPC_MessageBCC              0xDD42
 3509 #define PTP_OPC_MessageRead             0xDD43
 3510 #define PTP_OPC_MessageReceivedTime         0xDD44
 3511 #define PTP_OPC_MessageSender               0xDD45
 3512 #define PTP_OPC_ActivityBeginTime           0xDD50
 3513 #define PTP_OPC_ActivityEndTime             0xDD51
 3514 #define PTP_OPC_ActivityLocation            0xDD52
 3515 #define PTP_OPC_ActivityRequiredAttendees       0xDD54
 3516 #define PTP_OPC_ActivityOptionalAttendees       0xDD55
 3517 #define PTP_OPC_ActivityResources           0xDD56
 3518 #define PTP_OPC_ActivityAccepted            0xDD57
 3519 #define PTP_OPC_Owner                   0xDD5D
 3520 #define PTP_OPC_Editor                  0xDD5E
 3521 #define PTP_OPC_Webmaster               0xDD5F
 3522 #define PTP_OPC_URLSource               0xDD60
 3523 #define PTP_OPC_URLDestination              0xDD61
 3524 #define PTP_OPC_TimeBookmark                0xDD62
 3525 #define PTP_OPC_ObjectBookmark              0xDD63
 3526 #define PTP_OPC_ByteBookmark                0xDD64
 3527 #define PTP_OPC_LastBuildDate               0xDD70
 3528 #define PTP_OPC_TimetoLive              0xDD71
 3529 #define PTP_OPC_MediaGUID               0xDD72
 3530 #define PTP_OPC_TotalBitRate                0xDE91
 3531 #define PTP_OPC_BitRateType             0xDE92
 3532 #define PTP_OPC_SampleRate              0xDE93
 3533 #define PTP_OPC_NumberOfChannels            0xDE94
 3534 #define PTP_OPC_AudioBitDepth               0xDE95
 3535 #define PTP_OPC_ScanDepth               0xDE97
 3536 #define PTP_OPC_AudioWAVECodec              0xDE99
 3537 #define PTP_OPC_AudioBitRate                0xDE9A
 3538 #define PTP_OPC_VideoFourCCCodec            0xDE9B
 3539 #define PTP_OPC_VideoBitRate                0xDE9C
 3540 #define PTP_OPC_FramesPerThousandSeconds        0xDE9D
 3541 #define PTP_OPC_KeyFrameDistance            0xDE9E
 3542 #define PTP_OPC_BufferSize              0xDE9F
 3543 #define PTP_OPC_EncodingQuality             0xDEA0
 3544 #define PTP_OPC_EncodingProfile             0xDEA1
 3545 #define PTP_OPC_BuyFlag                 0xD901
 3546 
 3547 /* WiFi Provisioning MTP Extension property codes */
 3548 #define PTP_OPC_WirelessConfigurationFile       0xB104
 3549 
 3550 /* Device Property Form Flag */
 3551 
 3552 #define PTP_DPFF_None           0x00
 3553 #define PTP_DPFF_Range          0x01
 3554 #define PTP_DPFF_Enumeration        0x02
 3555 
 3556 /* Object Property Codes used by MTP (first 3 are same as DPFF codes) */
 3557 #define PTP_OPFF_None           0x00
 3558 #define PTP_OPFF_Range          0x01
 3559 #define PTP_OPFF_Enumeration        0x02
 3560 #define PTP_OPFF_DateTime       0x03
 3561 #define PTP_OPFF_FixedLengthArray   0x04
 3562 #define PTP_OPFF_RegularExpression  0x05
 3563 #define PTP_OPFF_ByteArray      0x06
 3564 #define PTP_OPFF_LongString     0xFF
 3565 
 3566 /* Device Property GetSet type */
 3567 #define PTP_DPGS_Get            0x00
 3568 #define PTP_DPGS_GetSet         0x01
 3569 
 3570 /* Glue stuff starts here */
 3571 
 3572 typedef struct _PTPParams PTPParams;
 3573 
 3574 
 3575 typedef uint16_t (* PTPDataGetFunc) (PTPParams* params, void*priv,
 3576                     unsigned long wantlen,
 3577                                     unsigned char *data, unsigned long *gotlen);
 3578 
 3579 typedef uint16_t (* PTPDataPutFunc) (PTPParams* params, void*priv,
 3580                     unsigned long sendlen,
 3581                                     unsigned char *data);
 3582 typedef struct _PTPDataHandler {
 3583     PTPDataGetFunc      getfunc;
 3584     PTPDataPutFunc      putfunc;
 3585     void            *priv;
 3586 } PTPDataHandler;
 3587 
 3588 /*
 3589  * This functions take PTP oriented arguments and send them over an
 3590  * appropriate data layer doing byteorder conversion accordingly.
 3591  */
 3592 typedef uint16_t (* PTPIOSendReq)   (PTPParams* params, PTPContainer* req, int dataphase);
 3593 typedef uint16_t (* PTPIOSendData)  (PTPParams* params, PTPContainer* ptp,
 3594                      uint64_t size, PTPDataHandler*getter);
 3595 
 3596 typedef uint16_t (* PTPIOGetResp)   (PTPParams* params, PTPContainer* resp);
 3597 typedef uint16_t (* PTPIOGetData)   (PTPParams* params, PTPContainer* ptp,
 3598                                      PTPDataHandler *putter);
 3599 typedef uint16_t (* PTPIOCancelReq) (PTPParams* params, uint32_t transaction_id);
 3600 typedef uint16_t (* PTPIODevStatReq) (PTPParams* params);
 3601 
 3602 /* debug functions */
 3603 typedef void (* PTPErrorFunc) (void *data, const char *format, va_list args)
 3604 #if (__GNUC__ >= 3)
 3605     __attribute__((__format__(printf,2,0)))
 3606 #endif
 3607 ;
 3608 typedef void (* PTPDebugFunc) (void *data, const char *format, va_list args)
 3609 #if (__GNUC__ >= 3)
 3610     __attribute__((__format__(printf,2,0)))
 3611 #endif
 3612 ;
 3613 
 3614 struct _PTPObject {
 3615     uint32_t    oid;
 3616     unsigned int    flags;
 3617 #define PTPOBJECT_OBJECTINFO_LOADED (1<<0)
 3618 #define PTPOBJECT_CANONFLAGS_LOADED (1<<1)
 3619 #define PTPOBJECT_MTPPROPLIST_LOADED    (1<<2)
 3620 #define PTPOBJECT_DIRECTORY_LOADED  (1<<3)
 3621 #define PTPOBJECT_PARENTOBJECT_LOADED   (1<<4)
 3622 #define PTPOBJECT_STORAGEID_LOADED  (1<<5)
 3623 
 3624     PTPObjectInfo   oi;
 3625     uint32_t    canon_flags;
 3626     MTPProperties   *mtpprops;
 3627     unsigned int    nrofmtpprops;
 3628 };
 3629 typedef struct _PTPObject PTPObject;
 3630 
 3631 /* The Device Property Cache */
 3632 struct _PTPDeviceProperty {
 3633     time_t          timestamp;
 3634     PTPDevicePropDesc   desc;
 3635     PTPPropertyValue    value;
 3636 };
 3637 typedef struct _PTPDeviceProperty PTPDeviceProperty;
 3638 
 3639 struct _MTPPropertyDesc {
 3640     uint16_t    opc;
 3641     PTPObjectPropDesc   opd;
 3642 };
 3643 typedef struct _MTPPropertyDesc MTPPropertyDesc;
 3644 
 3645 struct _MTPObjectFormat {
 3646     uint16_t    ofc;
 3647     unsigned int    nrofpds;
 3648     MTPPropertyDesc *pds;
 3649 };
 3650 typedef struct _MTPObjectFormat MTPObjectFormat;
 3651 
 3652 struct _PanasonicLiveViewSize {
 3653     uint16_t    width;
 3654     uint16_t    height;
 3655     uint16_t    x;
 3656     uint16_t    freq;
 3657 };
 3658 typedef struct _PanasonicLiveViewSize PanasonicLiveViewSize;
 3659 
 3660 /* Transaction data phase description, internal flags to sendreq / transaction driver. */
 3661 #define PTP_DP_NODATA           0x0000  /* no data phase */
 3662 #define PTP_DP_SENDDATA         0x0001  /* sending data */
 3663 #define PTP_DP_GETDATA          0x0002  /* receiving data */
 3664 #define PTP_DP_DATA_MASK        0x00ff  /* data phase mask */
 3665 
 3666 struct _PTPParams {
 3667     /* device flags */
 3668     uint32_t    device_flags;
 3669 
 3670     /* data layer byteorder */
 3671     uint8_t     byteorder;
 3672     uint16_t    maxpacketsize;
 3673 
 3674     /* PTP IO: Custom IO functions */
 3675     PTPIOSendReq    sendreq_func;
 3676     PTPIOSendData   senddata_func;
 3677     PTPIOGetResp    getresp_func;
 3678     PTPIOGetData    getdata_func;
 3679     PTPIOGetResp    event_check;
 3680     PTPIOGetResp    event_check_queue;
 3681     PTPIOGetResp    event_wait;
 3682     PTPIOCancelReq  cancelreq_func;
 3683     PTPIODevStatReq devstatreq_func;
 3684 
 3685     /* Custom error and debug function */
 3686     PTPErrorFunc    error_func;
 3687     PTPDebugFunc    debug_func;
 3688 
 3689     /* Data passed to above functions */
 3690     void        *data;
 3691 
 3692     /* ptp transaction ID */
 3693     uint32_t    transaction_id;
 3694     /* ptp session ID */
 3695     uint32_t    session_id;
 3696 
 3697     /* used for open capture */
 3698     uint32_t    opencapture_transid;
 3699 
 3700     /* PTP IO: if we have MTP style split header/data transfers */
 3701     int     split_header_data;
 3702     int     ocs64; /* 64bit objectsize */
 3703 
 3704     int     nrofobjectformats;
 3705     MTPObjectFormat *objectformats;
 3706 
 3707     /* PTP: internal structures used by ptp driver */
 3708     PTPObject   *objects;
 3709     unsigned int    nrofobjects;
 3710 
 3711     PTPDeviceInfo   deviceinfo;
 3712 
 3713     /* PTP: the current event queue */
 3714     PTPContainer    *events;
 3715     unsigned int    nrofevents;
 3716 
 3717     /* Capture count for SDRAM capture style images */
 3718     unsigned int        capcnt;
 3719 
 3720     /* live view enabled */
 3721     int         inliveview;
 3722 
 3723     /* PTP: caching time for properties, default 2 */
 3724     int         cachetime;
 3725 
 3726     /* PTP: Storage Caching */
 3727     PTPStorageIDs       storageids;
 3728     int         storagechanged;
 3729 
 3730     /* PTP: Device Property Caching */
 3731     PTPDeviceProperty   *deviceproperties;
 3732     unsigned int        nrofdeviceproperties;
 3733 
 3734     /* PTP: Canon specific flags list */
 3735     PTPCanon_Property   *canon_props;
 3736     unsigned int        nrofcanon_props;
 3737     int         canon_viewfinder_on;
 3738     int         canon_event_mode;
 3739 
 3740     /* PTP: Canon EOS event queue */
 3741     PTPCanon_changes_entry  *backlogentries;
 3742     unsigned int        nrofbacklogentries;
 3743     int         eos_captureenabled;
 3744     int         eos_camerastatus;
 3745 
 3746     /* PTP: Nikon specifics */
 3747     int         controlmode;
 3748     int         event90c7works;
 3749     int         deletesdramfails;
 3750 
 3751     /* PTP: Sony specific */
 3752     struct timeval      starttime;
 3753 
 3754     /* PTP: Wifi profiles */
 3755     uint8_t     wifi_profiles_version;
 3756     uint8_t     wifi_profiles_number;
 3757     PTPNIKONWifiProfile *wifi_profiles;
 3758 
 3759     /* IO: PTP/IP related data */
 3760     int     cmdfd, evtfd, jpgfd;
 3761     uint8_t     cameraguid[16];
 3762     uint32_t    eventpipeid;
 3763     char        *cameraname;
 3764 
 3765     /* Olympus UMS wrapping related data */
 3766     PTPDeviceInfo   outer_deviceinfo;
 3767     char        *olympus_cmd;
 3768     char        *olympus_reply;
 3769     struct _PTPParams *outer_params;
 3770 
 3771 #if defined(HAVE_ICONV) && defined(HAVE_LANGINFO_H)
 3772     /* PTP: iconv converters */
 3773     iconv_t cd_locale_to_ucs2;
 3774     iconv_t cd_ucs2_to_locale;
 3775 #endif
 3776 
 3777     /* IO: Sometimes the response packet get send in the dataphase
 3778      * too. This only happens for a Samsung player now.
 3779      */
 3780     uint8_t     *response_packet;
 3781     uint16_t    response_packet_size;
 3782 };
 3783 
 3784 /* Asynchronous event callback */
 3785 typedef void (*PTPEventCbFn)(PTPParams *params, uint16_t code, PTPContainer *event, void *user_data);
 3786 
 3787 /* last, but not least - ptp functions */
 3788 uint16_t ptp_usb_sendreq    (PTPParams* params, PTPContainer* req, int dataphase);
 3789 uint16_t ptp_usb_senddata   (PTPParams* params, PTPContainer* ptp,
 3790                  uint64_t size, PTPDataHandler *handler);
 3791 uint16_t ptp_usb_getresp    (PTPParams* params, PTPContainer* resp);
 3792 uint16_t ptp_usb_getdata    (PTPParams* params, PTPContainer* ptp,
 3793                              PTPDataHandler *handler);
 3794 uint16_t ptp_usb_event_async    (PTPParams *params, PTPEventCbFn cb, void *user_data);
 3795 uint16_t ptp_usb_event_wait (PTPParams* params, PTPContainer* event);
 3796 uint16_t ptp_usb_event_check    (PTPParams* params, PTPContainer* event);
 3797 uint16_t ptp_usb_event_check_queue  (PTPParams* params, PTPContainer* event);
 3798 
 3799 uint16_t ptp_usb_control_get_extended_event_data (PTPParams *params, char *buffer, int *size);
 3800 uint16_t ptp_usb_control_device_reset_request (PTPParams *params);
 3801 uint16_t ptp_usb_control_get_device_status (PTPParams *params, char *buffer, int *size);
 3802 uint16_t ptp_usb_control_cancel_request (PTPParams *params, uint32_t transid);
 3803 uint16_t ptp_usb_control_device_status_request (PTPParams *params);
 3804 
 3805 
 3806 int      ptp_ptpip_connect  (PTPParams* params, const char *port);
 3807 uint16_t ptp_ptpip_sendreq  (PTPParams* params, PTPContainer* req, int dataphase);
 3808 uint16_t ptp_ptpip_senddata (PTPParams* params, PTPContainer* ptp,
 3809                 uint64_t size, PTPDataHandler *handler);
 3810 uint16_t ptp_ptpip_getresp  (PTPParams* params, PTPContainer* resp);
 3811 uint16_t ptp_ptpip_getdata  (PTPParams* params, PTPContainer* ptp,
 3812                              PTPDataHandler *handler);
 3813 uint16_t ptp_ptpip_event_wait   (PTPParams* params, PTPContainer* event);
 3814 uint16_t ptp_ptpip_event_check  (PTPParams* params, PTPContainer* event);
 3815 uint16_t ptp_ptpip_event_check_queue    (PTPParams* params, PTPContainer* event);
 3816 
 3817 int      ptp_fujiptpip_connect  (PTPParams* params, const char *port);
 3818 int      ptp_fujiptpip_init_event (PTPParams* params, const char *address);
 3819 uint16_t ptp_fujiptpip_sendreq  (PTPParams* params, PTPContainer* req, int dataphase);
 3820 uint16_t ptp_fujiptpip_senddata (PTPParams* params, PTPContainer* ptp,
 3821                 uint64_t size, PTPDataHandler *handler);
 3822 uint16_t ptp_fujiptpip_getresp  (PTPParams* params, PTPContainer* resp);
 3823 uint16_t ptp_fujiptpip_getdata  (PTPParams* params, PTPContainer* ptp,
 3824                              PTPDataHandler *handler);
 3825 uint16_t ptp_fujiptpip_event_wait   (PTPParams* params, PTPContainer* event);
 3826 uint16_t ptp_fujiptpip_event_check  (PTPParams* params, PTPContainer* event);
 3827 uint16_t ptp_fujiptpip_event_check_queue(PTPParams* params, PTPContainer* event);
 3828 
 3829 uint16_t ptp_fujiptpip_jpeg (PTPParams* params, unsigned char** xdata, unsigned int *xsize);
 3830 
 3831 uint16_t ptp_getdeviceinfo  (PTPParams* params, PTPDeviceInfo* deviceinfo);
 3832 
 3833 uint16_t ptp_generic_no_data    (PTPParams* params, uint16_t opcode, unsigned int cnt, ...);
 3834 
 3835 uint16_t ptp_opensession    (PTPParams *params, uint32_t session);
 3836 
 3837 uint16_t ptp_transaction_new (PTPParams* params, PTPContainer* ptp,
 3838                 uint16_t flags, uint64_t sendlen,
 3839                 PTPDataHandler *handler
 3840 );
 3841 uint16_t ptp_transaction (PTPParams* params, PTPContainer* ptp,
 3842                 uint16_t flags, uint64_t sendlen,
 3843                 unsigned char **data, unsigned int *recvlen
 3844 );
 3845 
 3846 /**
 3847  * ptp_closesession:
 3848  * params:      PTPParams*
 3849  *
 3850  * Closes session.
 3851  *
 3852  * Return values: Some PTP_RC_* code.
 3853  **/
 3854 #define ptp_closesession(params) ptp_generic_no_data(params,PTP_OC_CloseSession,0)
 3855 
 3856 /**
 3857  * ptp_powerdown:
 3858  * params:      PTPParams*
 3859  *
 3860  * Powers down device.
 3861  *
 3862  * Return values: Some PTP_RC_* code.
 3863  **/
 3864 #define ptp_powerdown(params) ptp_generic_no_data(params,PTP_OC_PowerDown,0)
 3865 /**
 3866  * ptp_resetdevice:
 3867  * params:      PTPParams*
 3868  *
 3869  * Uses the built-in function to reset the device
 3870  *
 3871  * Return values: Some PTP_RC_* code.
 3872  *
 3873  */
 3874 #define ptp_resetdevice(params) ptp_generic_no_data(params,PTP_OC_ResetDevice,0)
 3875 
 3876 uint16_t ptp_getstorageids  (PTPParams* params, PTPStorageIDs* storageids);
 3877 uint16_t ptp_getstorageinfo     (PTPParams* params, uint32_t storageid,
 3878                 PTPStorageInfo* storageinfo);
 3879 /**
 3880  * ptp_formatstore:
 3881  * params:      PTPParams*
 3882  *              storageid               - StorageID
 3883  *
 3884  * Formats the storage on the device.
 3885  *
 3886  * Return values: Some PTP_RC_* code.
 3887  **/
 3888 #define ptp_formatstore(params,storageid) ptp_generic_no_data(params,PTP_OC_FormatStore,1,storageid)
 3889 
 3890 uint16_t ptp_getobjecthandles   (PTPParams* params, uint32_t storage,
 3891                 uint32_t objectformatcode,
 3892                 uint32_t associationOH,
 3893                 PTPObjectHandles* objecthandles);
 3894 
 3895 
 3896 uint16_t ptp_getnumobjects  (PTPParams* params, uint32_t storage,
 3897                 uint32_t objectformatcode,
 3898                 uint32_t associationOH,
 3899                 uint32_t* numobs);
 3900 
 3901 uint16_t ptp_getobjectinfo  (PTPParams *params, uint32_t handle,
 3902                 PTPObjectInfo* objectinfo);
 3903 
 3904 uint16_t ptp_getobject      (PTPParams *params, uint32_t handle,
 3905                 unsigned char** object);
 3906 uint16_t ptp_getobject_with_size    (PTPParams *params, uint32_t handle,
 3907                 unsigned char** object, unsigned int *size);
 3908 uint16_t ptp_getobject_tofd     (PTPParams* params, uint32_t handle, int fd);
 3909 uint16_t ptp_getobject_to_handler (PTPParams* params, uint32_t handle, PTPDataHandler*);
 3910 uint16_t ptp_getpartialobject   (PTPParams* params, uint32_t handle, uint32_t offset,
 3911                 uint32_t maxbytes, unsigned char** object,
 3912                 uint32_t *len);
 3913 uint16_t ptp_getpartialobject_to_handler (PTPParams* params, uint32_t handle, uint32_t offset,
 3914                             uint32_t maxbytes, PTPDataHandler *handler);
 3915 
 3916 uint16_t ptp_getthumb       (PTPParams *params, uint32_t handle,
 3917                 unsigned char** object, unsigned int *len);
 3918 
 3919 uint16_t ptp_deleteobject   (PTPParams* params, uint32_t handle,
 3920                 uint32_t ofc);
 3921 
 3922 uint16_t ptp_moveobject     (PTPParams* params, uint32_t handle,
 3923                 uint32_t storage, uint32_t parent);
 3924 
 3925 uint16_t ptp_copyobject     (PTPParams* params, uint32_t handle,
 3926                 uint32_t storage, uint32_t parent);
 3927 
 3928 uint16_t ptp_sendobjectinfo (PTPParams* params, uint32_t* store,
 3929                 uint32_t* parenthandle, uint32_t* handle,
 3930                 PTPObjectInfo* objectinfo);
 3931 /**
 3932  * ptp_setobjectprotection:
 3933  * params:      PTPParams*
 3934  *              uint16_t newprot        - object protection flag
 3935  *
 3936  * Set protection of object.
 3937  *
 3938  * Return values: Some PTP_RC_* code.
 3939  *
 3940  */
 3941 #define ptp_setobjectprotection(params,oid,newprot) ptp_generic_no_data(params,PTP_OC_SetObjectProtection,2,oid,newprot)
 3942 uint16_t ptp_sendobject     (PTPParams* params, unsigned char* object,
 3943                  uint64_t size);
 3944 uint16_t ptp_sendobject_fromfd  (PTPParams* params, int fd, uint64_t size);
 3945 uint16_t ptp_sendobject_from_handler  (PTPParams* params, PTPDataHandler*, uint64_t size);
 3946 /**
 3947  * ptp_initiatecapture:
 3948  * params:      PTPParams*
 3949  *              storageid               - destination StorageID on Responder
 3950  *              ofc                     - object format code
 3951  *
 3952  * Causes device to initiate the capture of one or more new data objects
 3953  * according to its current device properties, storing the data into store
 3954  * indicated by storageid. If storageid is 0x00000000, the object(s) will
 3955  * be stored in a store that is determined by the capturing device.
 3956  * The capturing of new data objects is an asynchronous operation.
 3957  *
 3958  * Return values: Some PTP_RC_* code.
 3959  **/
 3960 #define ptp_initiatecapture(params,storageid,ofc) ptp_generic_no_data(params,PTP_OC_InitiateCapture,2,storageid,ofc)
 3961 
 3962 #define ptp_initiateopencapture(params,storageid,ofc)   ptp_generic_no_data(params,PTP_OC_InitiateOpenCapture,2,storageid,ofc)
 3963 #define ptp_terminateopencapture(params,transid)    ptp_generic_no_data(params,PTP_OC_TerminateOpenCapture,1,transid)
 3964 
 3965 uint16_t ptp_getdevicepropdesc  (PTPParams* params, uint16_t propcode,
 3966                 PTPDevicePropDesc *devicepropertydesc);
 3967 uint16_t ptp_generic_getdevicepropdesc (PTPParams *params, uint16_t propcode,
 3968                 PTPDevicePropDesc *dpd);
 3969 uint16_t ptp_getdevicepropvalue (PTPParams* params, uint16_t propcode,
 3970                 PTPPropertyValue* value, uint16_t datatype);
 3971 uint16_t ptp_setdevicepropvalue (PTPParams* params, uint16_t propcode,
 3972                             PTPPropertyValue* value, uint16_t datatype);
 3973 uint16_t ptp_generic_setdevicepropvalue (PTPParams* params, uint16_t propcode,
 3974                             PTPPropertyValue* value, uint16_t datatype);
 3975 uint16_t ptp_getfilesystemmanifest (PTPParams* params, uint32_t storage,
 3976                         uint32_t objectformatcode, uint32_t associationOH,
 3977                 uint64_t *numoifs, PTPObjectFilesystemInfo **oifs);
 3978 uint16_t ptp_getstreaminfo (PTPParams *params, uint32_t streamid, PTPStreamInfo *si);
 3979 uint16_t ptp_getstream (PTPParams* params, unsigned char **data, unsigned int *size);
 3980 
 3981 
 3982 uint16_t ptp_check_event (PTPParams *params);
 3983 uint16_t ptp_check_event_queue (PTPParams *params);
 3984 uint16_t ptp_wait_event (PTPParams *params);
 3985 uint16_t ptp_add_event (PTPParams *params, PTPContainer *evt);
 3986 int ptp_have_event(PTPParams *params, uint16_t code);
 3987 int ptp_get_one_event (PTPParams *params, PTPContainer *evt);
 3988 int ptp_get_one_event_by_type(PTPParams *params, uint16_t code, PTPContainer *event);
 3989 uint16_t ptp_check_eos_events (PTPParams *params);
 3990 int ptp_get_one_eos_event (PTPParams *params, PTPCanon_changes_entry *entry);
 3991 
 3992 
 3993 /* Microsoft MTP extensions */
 3994 uint16_t ptp_mtp_getobjectpropdesc (PTPParams* params, uint16_t opc, uint16_t ofc,
 3995                 PTPObjectPropDesc *objectpropertydesc);
 3996 uint16_t ptp_mtp_getobjectpropvalue (PTPParams* params, uint32_t oid, uint16_t opc,
 3997                 PTPPropertyValue *value, uint16_t datatype);
 3998 uint16_t ptp_mtp_setobjectpropvalue (PTPParams* params, uint32_t oid, uint16_t opc,
 3999                 PTPPropertyValue *value, uint16_t datatype);
 4000 uint16_t ptp_mtp_getobjectreferences (PTPParams* params, uint32_t handle, uint32_t** ohArray, uint32_t* arraylen);
 4001 uint16_t ptp_mtp_setobjectreferences (PTPParams* params, uint32_t handle, uint32_t* ohArray, uint32_t arraylen);
 4002 uint16_t ptp_mtp_getobjectproplist_generic (PTPParams* params, uint32_t handle, uint32_t formats, uint32_t properties, uint32_t propertygroups, uint32_t level, MTPProperties **props, int *nrofprops);
 4003 uint16_t ptp_mtp_getobjectproplist_level (PTPParams* params, uint32_t handle, uint32_t level, MTPProperties **props, int *nrofprops);
 4004 uint16_t ptp_mtp_getobjectproplist (PTPParams* params, uint32_t handle, MTPProperties **props, int *nrofprops);
 4005 uint16_t ptp_mtp_getobjectproplist_single (PTPParams* params, uint32_t handle, MTPProperties **props, int *nrofprops);
 4006 uint16_t ptp_mtp_sendobjectproplist (PTPParams* params, uint32_t* store, uint32_t* parenthandle, uint32_t* handle,
 4007                      uint16_t objecttype, uint64_t objectsize, MTPProperties *props, int nrofprops);
 4008 uint16_t ptp_mtp_setobjectproplist (PTPParams* params, MTPProperties *props, int nrofprops);
 4009 
 4010 /* Microsoft MTPZ (Zune) extensions */
 4011 uint16_t ptp_mtpz_sendwmdrmpdapprequest (PTPParams*, unsigned char *, uint32_t);
 4012 #define  ptp_mtpz_resethandshake(params) ptp_generic_no_data(params, PTP_OC_MTP_WMDRMPD_EndTrustedAppSession, 0)
 4013 uint16_t ptp_mtpz_getwmdrmpdappresponse (PTPParams*, unsigned char **, uint32_t*);
 4014 #define  ptp_mtpz_wmdrmpd_enabletrustedfilesoperations(params,hash1,hash2,hash3,hash4) \
 4015      ptp_generic_no_data(params, PTP_OC_MTP_WMDRMPD_EnableTrustedFilesOperations, 4,\
 4016         hash1, hash2, hash3, hash4)
 4017 
 4018 /* Eastman Kodak extensions */
 4019 uint16_t ptp_ek_9007 (PTPParams* params, unsigned char **serial, unsigned int *size);
 4020 uint16_t ptp_ek_9009 (PTPParams* params, uint32_t*, uint32_t*);
 4021 uint16_t ptp_ek_900c (PTPParams* params, unsigned char **serial, unsigned int *size);
 4022 uint16_t ptp_ek_getserial (PTPParams* params, unsigned char **serial, unsigned int *size);
 4023 uint16_t ptp_ek_setserial (PTPParams* params, unsigned char *serial, unsigned int size);
 4024 uint16_t ptp_ek_settext (PTPParams* params, PTPEKTextParams *text);
 4025 uint16_t ptp_ek_sendfileobjectinfo (PTPParams* params, uint32_t* store,
 4026                 uint32_t* parenthandle, uint32_t* handle,
 4027                 PTPObjectInfo* objectinfo);
 4028 uint16_t ptp_ek_sendfileobject  (PTPParams* params, unsigned char* object,
 4029                 uint32_t size);
 4030 uint16_t ptp_ek_sendfileobject_from_handler (PTPParams* params, PTPDataHandler*,
 4031                 uint32_t size);
 4032 
 4033 /* Canon PTP extensions */
 4034 #define ptp_canon_9012(params) ptp_generic_no_data(params,0x9012,0)
 4035 uint16_t ptp_canon_gettreeinfo (PTPParams* params, uint32_t* out);
 4036 uint16_t ptp_canon_gettreesize (PTPParams* params, PTPCanon_directtransfer_entry**, unsigned int*cnt);
 4037 uint16_t ptp_canon_getpartialobjectinfo (PTPParams* params, uint32_t handle,
 4038                 uint32_t p2, uint32_t* size, uint32_t* rp2);
 4039 
 4040 uint16_t ptp_canon_get_mac_address (PTPParams* params, unsigned char **mac);
 4041 /**
 4042  * ptp_canon_startshootingmode:
 4043  * params:      PTPParams*
 4044  *
 4045  * Starts shooting session. It emits a StorageInfoChanged
 4046  * event via the interrupt pipe and pushes the StorageInfoChanged
 4047  * and CANON_CameraModeChange events onto the event stack
 4048  * (see operation PTP_OC_CANON_CheckEvent).
 4049  *
 4050  * Return values: Some PTP_RC_* code.
 4051  *
 4052  **/
 4053 #define ptp_canon_startshootingmode(params) ptp_generic_no_data(params,PTP_OC_CANON_InitiateReleaseControl,0)
 4054 /**
 4055  * ptp_canon_endshootingmode:
 4056  * params:      PTPParams*
 4057  *
 4058  * This operation is observed after pressing the Disconnect
 4059  * button on the Remote Capture app. It emits a StorageInfoChanged
 4060  * event via the interrupt pipe and pushes the StorageInfoChanged
 4061  * and CANON_CameraModeChange events onto the event stack
 4062  * (see operation PTP_OC_CANON_CheckEvent).
 4063  *
 4064  * Return values: Some PTP_RC_* code.
 4065  *
 4066  **/
 4067 #define ptp_canon_endshootingmode(params) ptp_generic_no_data(params,PTP_OC_CANON_TerminateReleaseControl,0)
 4068 /**
 4069  * ptp_canon_viewfinderon:
 4070  * params:      PTPParams*
 4071  *
 4072  * Prior to start reading viewfinder images, one  must call this operation.
 4073  * Supposedly, this operation affects the value of the CANON_ViewfinderMode
 4074  * property.
 4075  *
 4076  * Return values: Some PTP_RC_* code.
 4077  *
 4078  **/
 4079 #define ptp_canon_viewfinderon(params) ptp_generic_no_data(params,PTP_OC_CANON_ViewfinderOn,0)
 4080 /**
 4081  * ptp_canon_viewfinderoff:
 4082  * params:      PTPParams*
 4083  *
 4084  * Before changing the shooting mode, or when one doesn't need to read
 4085  * viewfinder images any more, one must call this operation.
 4086  * Supposedly, this operation affects the value of the CANON_ViewfinderMode
 4087  * property.
 4088  *
 4089  * Return values: Some PTP_RC_* code.
 4090  *
 4091  **/
 4092 #define ptp_canon_viewfinderoff(params) ptp_generic_no_data(params,PTP_OC_CANON_ViewfinderOff,0)
 4093 /**
 4094  * ptp_canon_reset_aeafawb:
 4095  * params:      PTPParams*
 4096  *              uint32_t flags  - what shall be reset.
 4097  *                      1 - autoexposure
 4098  *                      2 - autofocus
 4099  *                      4 - autowhitebalance
 4100  *
 4101  * Called "Reset AeAfAwb" (auto exposure, focus, white balance)
 4102  *
 4103  * Return values: Some PTP_RC_* code.
 4104  **/
 4105 #define PTP_CANON_RESET_AE  0x1
 4106 #define PTP_CANON_RESET_AF  0x2
 4107 #define PTP_CANON_RESET_AWB 0x4
 4108 #define ptp_canon_reset_aeafawb(params,flags) ptp_generic_no_data(params,PTP_OC_CANON_DoAeAfAwb,1,flags)
 4109 uint16_t ptp_canon_checkevent (PTPParams* params,
 4110                 PTPContainer* event, int* isevent);
 4111 /**
 4112  * ptp_canon_focuslock:
 4113  *
 4114  * This operation locks the focus. It is followed by the CANON_GetChanges(?)
 4115  * operation in the log.
 4116  * It affects the CANON_MacroMode property.
 4117  *
 4118  * params:      PTPParams*
 4119  *
 4120  * Return values: Some PTP_RC_* code.
 4121  *
 4122  **/
 4123 #define ptp_canon_focuslock(params) ptp_generic_no_data(params,PTP_OC_CANON_FocusLock,0)
 4124 /**
 4125  * ptp_canon_focusunlock:
 4126  *
 4127  * This operation unlocks the focus. It is followed by the CANON_GetChanges(?)
 4128  * operation in the log.
 4129  * It sets the CANON_MacroMode property value to 1 (where it occurs in the log).
 4130  *
 4131  * params:      PTPParams*
 4132  *
 4133  * Return values: Some PTP_RC_* code.
 4134  *
 4135  **/
 4136 #define ptp_canon_focusunlock(params) ptp_generic_no_data(params,PTP_OC_CANON_FocusUnlock,0)
 4137 /**
 4138  * ptp_canon_keepdeviceon:
 4139  *
 4140  * This operation sends a "ping" style message to the camera.
 4141  *
 4142  * params:      PTPParams*
 4143  *
 4144  * Return values: Some PTP_RC_* code.
 4145  *
 4146  **/
 4147 #define ptp_canon_keepdeviceon(params) ptp_generic_no_data(params,PTP_OC_CANON_KeepDeviceOn,0)
 4148 /**
 4149  * ptp_canon_eos_keepdeviceon:
 4150  *
 4151  * This operation sends a "ping" style message to the camera.
 4152  *
 4153  * params:      PTPParams*
 4154  *
 4155  * Return values: Some PTP_RC_* code.
 4156  *
 4157  **/
 4158 #define ptp_canon_eos_keepdeviceon(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_KeepDeviceOn,0)
 4159 
 4160 /**
 4161  * ptp_canon_eos_popupflash:
 4162  *
 4163  * This operation pops up the builtin flash of the Canon EOS.
 4164  *
 4165  * params:      PTPParams*
 4166  *
 4167  * Return values: Some PTP_RC_* code.
 4168  *
 4169  **/
 4170 #define ptp_canon_eos_popupflash(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_PopupBuiltinFlash,0)
 4171 /**
 4172  * ptp_canon_initiatecaptureinmemory:
 4173  *
 4174  * This operation starts the image capture according to the current camera
 4175  * settings. When the capture has happened, the camera emits a CaptureComplete
 4176  * event via the interrupt pipe and pushes the CANON_RequestObjectTransfer,
 4177  * CANON_DeviceInfoChanged and CaptureComplete events onto the event stack
 4178  * (see operation CANON_CheckEvent). From the CANON_RequestObjectTransfer
 4179  * event's parameter one can learn the just captured image's ObjectHandle.
 4180  * The image is stored in the camera's own RAM.
 4181  * On the next capture the image will be overwritten!
 4182  *
 4183  * params:      PTPParams*
 4184  *
 4185  * Return values: Some PTP_RC_* code.
 4186  *
 4187  **/
 4188 #define ptp_canon_initiatecaptureinmemory(params) ptp_generic_no_data(params,PTP_OC_CANON_InitiateCaptureInMemory,0)
 4189 /**
 4190  * ptp_canon_eos_requestdevicepropvalue:
 4191  *
 4192  * This operation sends a "ping" style message to the camera.
 4193  *
 4194  * params:      PTPParams*
 4195  *
 4196  * Return values: Some PTP_RC_* code.
 4197  *
 4198  **/
 4199 #define CANON_EOS_OLC_BUTTON        0x0001
 4200 #define CANON_EOS_OLC_SHUTTERSPEED  0x0002
 4201 #define CANON_EOS_OLC_APERTURE      0x0004
 4202 #define CANON_EOS_OLC_ISO       0x0008
 4203 
 4204 #define ptp_canon_eos_setrequestolcinfogroup(params,igmask) ptp_generic_no_data(params,PTP_OC_CANON_EOS_SetRequestOLCInfoGroup,1,igmask)
 4205 #define ptp_canon_eos_requestdevicepropvalue(params,prop)   ptp_generic_no_data(params,PTP_OC_CANON_EOS_RequestDevicePropValue,1,prop)
 4206 #define ptp_canon_eos_setrequestrollingpitchinglevel(params,onoff)  ptp_generic_no_data(params,PTP_OC_CANON_EOS_SetRequestRollingPitchingLevel,1,onoff)
 4207 uint16_t ptp_canon_eos_getremotemode (PTPParams*, uint32_t *);
 4208 uint16_t ptp_canon_eos_capture (PTPParams* params, uint32_t *result);
 4209 uint16_t ptp_canon_eos_getevent (PTPParams* params, PTPCanon_changes_entry **entries, int *nrofentries);
 4210 uint16_t ptp_canon_getpartialobject (PTPParams* params, uint32_t handle,
 4211                 uint32_t offset, uint32_t size,
 4212                 uint32_t pos, unsigned char** block,
 4213                 uint32_t* readnum);
 4214 uint16_t ptp_canon_getviewfinderimage (PTPParams* params, unsigned char** image,
 4215                 uint32_t* size);
 4216 uint16_t ptp_canon_getchanges (PTPParams* params, uint16_t** props,
 4217                 uint32_t* propnum);
 4218 uint16_t ptp_canon_getobjectinfo (PTPParams* params, uint32_t store,
 4219                 uint32_t p2, uint32_t parenthandle,
 4220                 uint32_t handle,
 4221                 PTPCANONFolderEntry** entries,
 4222                 uint32_t* entnum);
 4223 uint16_t ptp_canon_eos_getdeviceinfo (PTPParams* params, PTPCanonEOSDeviceInfo*di);
 4224 /**
 4225  * ptp_canon_eos_setuilock:
 4226  *
 4227  * This command sets UI lock
 4228  *
 4229  * params:      PTPParams*
 4230  *
 4231  * Return values: Some PTP_RC_* code.
 4232  *
 4233  **/
 4234 #define ptp_canon_eos_setuilock(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_SetUILock,0)
 4235 /**
 4236  * ptp_canon_eos_resetuilock:
 4237  *
 4238  * This command sets UI lock
 4239  *
 4240  * params:      PTPParams*
 4241  *
 4242  * Return values: Some PTP_RC_* code.
 4243  *
 4244  **/
 4245 #define ptp_canon_eos_resetuilock(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_ResetUILock,0)
 4246 /**
 4247  * ptp_canon_eos_start_viewfinder:
 4248  *
 4249  * This command starts Viewfinder mode of newer Canon DSLRs.
 4250  *
 4251  * params:      PTPParams*
 4252  *
 4253  * Return values: Some PTP_RC_* code.
 4254  *
 4255  **/
 4256 #define ptp_canon_eos_start_viewfinder(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_InitiateViewfinder,0)
 4257 /**
 4258  * ptp_canon_eos_end_viewfinder:
 4259  *
 4260  * This command ends Viewfinder mode of newer Canon DSLRs.
 4261  *
 4262  * params:      PTPParams*
 4263  *
 4264  * Return values: Some PTP_RC_* code.
 4265  *
 4266  **/
 4267 #define ptp_canon_eos_end_viewfinder(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_TerminateViewfinder,0)
 4268 uint16_t ptp_canon_eos_get_viewfinder_image (PTPParams* params, unsigned char **data, unsigned int *size);
 4269 uint16_t ptp_canon_eos_get_viewfinder_image_handler (PTPParams* params, PTPDataHandler*);
 4270 uint16_t ptp_canon_get_objecthandle_by_name (PTPParams* params, char* name, uint32_t* objectid);
 4271 uint16_t ptp_canon_get_directory (PTPParams* params, PTPObjectHandles *handles, PTPObjectInfo **oinfos, uint32_t **flags);
 4272 /**
 4273  * ptp_canon_setobjectarchive:
 4274  *
 4275  * params:      PTPParams*
 4276  *              uint32_t        objectid
 4277  *              uint32_t        flags
 4278  *
 4279  * Return values: Some PTP_RC_* code.
 4280  *
 4281  **/
 4282 #define ptp_canon_setobjectarchive(params,oid,flags) ptp_generic_no_data(params,PTP_OC_CANON_SetObjectArchive,2,oid,flags)
 4283 #define ptp_canon_eos_setobjectattributes(params,oid,flags) ptp_generic_no_data(params,PTP_OC_CANON_EOS_SetObjectAttributes,2,oid,flags)
 4284 uint16_t ptp_canon_get_customize_data (PTPParams* params, uint32_t themenr,
 4285                 unsigned char **data, unsigned int *size);
 4286 uint16_t ptp_canon_getpairinginfo (PTPParams* params, uint32_t nr, unsigned char**, unsigned int*);
 4287 
 4288 uint16_t ptp_canon_eos_getstorageids (PTPParams* params, PTPStorageIDs* storageids);
 4289 uint16_t ptp_canon_eos_getstorageinfo (PTPParams* params, uint32_t p1, unsigned char**, unsigned int*);
 4290 uint16_t ptp_canon_eos_getpartialobject (PTPParams* params, uint32_t oid, uint32_t off, uint32_t xsize, unsigned char**data);
 4291 uint16_t ptp_canon_eos_getpartialobjectex (PTPParams* params, uint32_t oid, uint32_t off, uint32_t xsize, unsigned char**data);
 4292 uint16_t ptp_canon_eos_getobjectinfoex (PTPParams* params, uint32_t storageid, uint32_t objectid, uint32_t unk,
 4293         PTPCANONFolderEntry **entries, unsigned int *nrofentries);
 4294 uint16_t ptp_canon_eos_setdevicepropvalueex (PTPParams* params, unsigned char* data, unsigned int size);
 4295 #define ptp_canon_eos_setremotemode(params,p1) ptp_generic_no_data(params,PTP_OC_CANON_EOS_SetRemoteMode,1,p1)
 4296 #define ptp_canon_eos_seteventmode(params,p1) ptp_generic_no_data(params,PTP_OC_CANON_EOS_SetEventMode,1,p1)
 4297 /**
 4298  * ptp_canon_eos_transfercomplete:
 4299  *
 4300  * This ends a direct object transfer from an EOS camera.
 4301  *
 4302  * params:      PTPParams*
 4303  *              oid             Object ID
 4304  *
 4305  * Return values: Some PTP_RC_* code.
 4306  *
 4307  */
 4308 #define ptp_canon_eos_transfercomplete(params,oid) ptp_generic_no_data(params,PTP_OC_CANON_EOS_TransferComplete,1,oid)
 4309 /* inHDD = %d, inLength =%d, inReset = %d */
 4310 #define ptp_canon_eos_pchddcapacity(params,p1,p2,p3) ptp_generic_no_data(params,PTP_OC_CANON_EOS_PCHDDCapacity,3,p1,p2,p3)
 4311 uint16_t ptp_canon_eos_bulbstart (PTPParams* params);
 4312 uint16_t ptp_canon_eos_bulbend (PTPParams* params);
 4313 uint16_t ptp_canon_eos_905f (PTPParams* params, uint32_t);
 4314 uint16_t ptp_canon_eos_getdevicepropdesc (PTPParams* params, uint16_t propcode,
 4315                 PTPDevicePropDesc *devicepropertydesc);
 4316 uint16_t ptp_canon_eos_setdevicepropvalue (PTPParams* params, uint16_t propcode,
 4317                             PTPPropertyValue* value, uint16_t datatype);
 4318 uint16_t ptp_nikon_get_vendorpropcodes (PTPParams* params, uint16_t **props, unsigned int *size);
 4319 uint16_t ptp_nikon_curve_download (PTPParams* params,
 4320                 unsigned char **data, unsigned int *size);
 4321 uint16_t ptp_nikon_getlargethumb (PTPParams *params, uint32_t handle,
 4322                 unsigned char** object, unsigned int *len);
 4323 uint16_t ptp_nikon_getobjectsize (PTPParams* params, uint32_t handle, uint64_t *objectsize);
 4324 uint16_t ptp_nikon_getpartialobjectex (PTPParams* params, uint32_t handle, uint64_t offset, uint64_t maxbytes, unsigned char** object, uint32_t *len);
 4325 uint16_t ptp_nikon_getptpipinfo (PTPParams* params, unsigned char **data, unsigned int *size);
 4326 uint16_t ptp_nikon_getwifiprofilelist (PTPParams* params);
 4327 uint16_t ptp_nikon_writewifiprofile (PTPParams* params, PTPNIKONWifiProfile* profile);
 4328 
 4329 uint16_t ptp_sony_sdioconnect (PTPParams* params, uint32_t p1, uint32_t p2, uint32_t p3);
 4330 uint16_t ptp_sony_qx_connect (PTPParams* params, uint32_t p1, uint32_t p2, uint32_t p3);
 4331 uint16_t ptp_sony_get_vendorpropcodes (PTPParams* params, uint16_t **props, unsigned int *size);
 4332 uint16_t ptp_sony_qx_get_vendorpropcodes (PTPParams* params, uint16_t **props, unsigned int *size);
 4333 uint16_t ptp_sony_getdevicepropdesc (PTPParams* params, uint16_t propcode,
 4334                 PTPDevicePropDesc *devicepropertydesc);
 4335 uint16_t ptp_sony_getalldevicepropdesc (PTPParams* params);
 4336 uint16_t ptp_sony_qx_getalldevicepropdesc (PTPParams* params);
 4337 uint16_t ptp_sony_setdevicecontrolvaluea (PTPParams* params, uint16_t propcode,
 4338                             PTPPropertyValue* value, uint16_t datatype);
 4339 uint16_t ptp_sony_qx_setdevicecontrolvaluea (PTPParams* params, uint16_t propcode,
 4340                             PTPPropertyValue* value, uint16_t datatype);
 4341 uint16_t ptp_sony_setdevicecontrolvalueb (PTPParams* params, uint16_t propcode,
 4342                             PTPPropertyValue* value, uint16_t datatype);
 4343 uint16_t ptp_sony_qx_setdevicecontrolvalueb (PTPParams* params, uint16_t propcode,
 4344                             PTPPropertyValue* value, uint16_t datatype);
 4345 uint16_t ptp_sony_9280 (PTPParams* params, uint32_t additional, uint32_t data1, uint32_t data2, uint32_t data3, uint32_t data4, uint8_t x, uint8_t y);
 4346 uint16_t ptp_sony_9281 (PTPParams* params, uint32_t param1);
 4347 /**
 4348  * ptp_nikon_deletewifiprofile:
 4349  *
 4350  * This command deletes a wifi profile.
 4351  *
 4352  * params:      PTPParams*
 4353  *      unsigned int profilenr  - profile number
 4354  *
 4355  * Return values: Some PTP_RC_* code.
 4356  *
 4357  **/
 4358 #define ptp_nikon_deletewifiprofile(params,profilenr) ptp_generic_no_data(params,PTP_OC_NIKON_DeleteProfile,1,profilenr)
 4359 /**
 4360  * ptp_nikon_changecameramode:
 4361  *
 4362  * This command can switch the camera to full PC control mode.
 4363  *
 4364  * params:      PTPParams*
 4365  *      uint32_t mode - mode
 4366  *
 4367  * Return values: Some PTP_RC_* code.
 4368  *
 4369  **/
 4370 #define ptp_nikon_changecameramode(params,mode) ptp_generic_no_data(params,PTP_OC_NIKON_ChangeCameraMode,1,mode)
 4371 /**
 4372  * ptp_nikon_changeapplicationmeramode:
 4373  *
 4374  * This command can switch the camera between PC control and remote mode.
 4375  *
 4376  * params:      PTPParams*
 4377  *      uint32_t mode - mode
 4378  *
 4379  * Return values: Some PTP_RC_* code.
 4380  *
 4381  **/
 4382 #define ptp_nikon_changeapplicationmode(params,mode) ptp_generic_no_data(params,PTP_OC_NIKON_ChangeApplicationMode,1,mode)
 4383 /**
 4384  * ptp_nikon_terminatecapture:
 4385  *
 4386  * This command appears to terminate a longer capture
 4387  *
 4388  * params:      PTPParams*
 4389  *      uint32_t a
 4390  *      uint32_t b
 4391  *
 4392  * Return values: Some PTP_RC_* code.
 4393  *
 4394  **/
 4395 #define ptp_nikon_terminatecapture(params,p1,p2) ptp_generic_no_data(params,PTP_OC_NIKON_TerminateCapture,2,p1,p2)
 4396 /**
 4397  * ptp_nikon_afdrive:
 4398  *
 4399  * This command runs (drives) the lens autofocus.
 4400  *
 4401  * params:      PTPParams*
 4402  *
 4403  * Return values: Some PTP_RC_* code.
 4404  *
 4405  **/
 4406 #define ptp_nikon_afdrive(params) ptp_generic_no_data(params,PTP_OC_NIKON_AfDrive,0)
 4407 /**
 4408  * ptp_nikon_changeafarea:
 4409  *
 4410  * This command starts movie capture (to card)
 4411  *
 4412  * params:      PTPParams*
 4413  * x: x coordinate
 4414  * y: y coordinate
 4415  *
 4416  * Return values: Some PTP_RC_* code.
 4417  *
 4418  **/
 4419 #define ptp_nikon_changeafarea(params,x,y) ptp_generic_no_data(params,PTP_OC_NIKON_ChangeAfArea,2,x,y)
 4420 /**
 4421  * ptp_nikon_startmovie:
 4422  *
 4423  * This command starts movie capture (to card)
 4424  *
 4425  * params:      PTPParams*
 4426  *
 4427  * Return values: Some PTP_RC_* code.
 4428  *
 4429  **/
 4430 #define ptp_nikon_startmovie(params) ptp_generic_no_data(params,PTP_OC_NIKON_StartMovieRecInCard,0)
 4431 /**
 4432  * ptp_nikon_stopmovie:
 4433  *
 4434  * This command stops movie capture (to card)
 4435  *
 4436  * params:      PTPParams*
 4437  *
 4438  * Return values: Some PTP_RC_* code.
 4439  *
 4440  **/
 4441 #define ptp_nikon_stopmovie(params) ptp_generic_no_data(params,PTP_OC_NIKON_EndMovieRec,0)
 4442 /**
 4443  * ptp_canon_eos_afdrive:
 4444  *
 4445  * This command runs (drives) the lens autofocus.
 4446  *
 4447  * params:      PTPParams*
 4448  *
 4449  * Return values: Some PTP_RC_* code.
 4450  *
 4451  **/
 4452 #define ptp_canon_eos_afdrive(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_DoAf,0)
 4453 /**
 4454  * ptp_canon_eos_afcancel:
 4455  *
 4456  * This command cancels the lens autofocus.
 4457  *
 4458  * params:      PTPParams*
 4459  *
 4460  * Return values: Some PTP_RC_* code.
 4461  *
 4462  **/
 4463 #define ptp_canon_eos_afcancel(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_AfCancel,0)
 4464 /**
 4465  * ptp_canon_eos_zoom:
 4466  *
 4467  * This command runs (drives) the lens autofocus.
 4468  *
 4469  * params:      PTPParams*
 4470  * params:      arg1 unknown
 4471  *
 4472  * Return values: Some PTP_RC_* code.
 4473  *
 4474  **/
 4475 #define ptp_canon_eos_zoom(params,x) ptp_generic_no_data(params,PTP_OC_CANON_EOS_Zoom,1,x)
 4476 #define ptp_canon_eos_zoomposition(params,x,y) ptp_generic_no_data(params,PTP_OC_CANON_EOS_ZoomPosition,2,x,y)
 4477 
 4478 #define ptp_canon_eos_remotereleaseon(params,x,y) ptp_generic_no_data(params,PTP_OC_CANON_EOS_RemoteReleaseOn,2,x,y)
 4479 #define ptp_canon_eos_remotereleaseoff(params,x) ptp_generic_no_data(params,PTP_OC_CANON_EOS_RemoteReleaseOff,1,x)
 4480 /**
 4481  * ptp_nikon_mfdrive:
 4482  *
 4483  * This command runs (drives) the lens focus manually.
 4484  *
 4485  * params:      PTPParams*
 4486  * flag:        0x1 for (no limit - closest), 0x2 for (closest - no limit)
 4487  * amount:      amount of steps
 4488  *
 4489  * Return values: Some PTP_RC_* code.
 4490  *
 4491  **/
 4492 #define ptp_nikon_mfdrive(params,flag,amount) ptp_generic_no_data(params,PTP_OC_NIKON_MfDrive,2,flag,amount)
 4493 
 4494 /**
 4495  * ptp_canon_eos_drivelens:
 4496  *
 4497  * This command runs (drives) the lens focus manually.
 4498  *
 4499  * params:      PTPParams*
 4500  * amount:      0x1-0x3 for near range, 0x8001-0x8003 for far range.
 4501  *
 4502  * Return values: Some PTP_RC_* code.
 4503  *
 4504  **/
 4505 #define ptp_canon_eos_drivelens(params,amount) ptp_generic_no_data(params,PTP_OC_CANON_EOS_DriveLens,1,amount)
 4506 /**
 4507  * ptp_nikon_capture:
 4508  *
 4509  * This command captures a picture on the Nikon.
 4510  *
 4511  * params:      PTPParams*
 4512  *      uint32_t x: unknown parameter. seen to be -1.
 4513  *
 4514  * Return values: Some PTP_RC_* code.
 4515  *
 4516  **/
 4517 #define ptp_nikon_capture(params,x) ptp_generic_no_data(params,PTP_OC_NIKON_InitiateCaptureRecInSdram,1,x)
 4518 
 4519 /**
 4520  * ptp_nikon_capture2:
 4521  *
 4522  * This command captures a picture on the Nikon.
 4523  *
 4524  * params:      PTPParams*
 4525  * af:      autofocus before capture (1 yes , 0 no)
 4526  * target:  sdram 1, card 0
 4527  *
 4528  * Return values: Some PTP_RC_* code.
 4529  * 2 params:
 4530  * 0xffffffff == No AF before,  0xfffffffe == AF before capture
 4531  * sdram=1, card=0
 4532  */
 4533 #define ptp_nikon_capture2(params,af,target) ptp_generic_no_data(params,PTP_OC_NIKON_InitiateCaptureRecInMedia,2,af?0xfffffffe:0xffffffff,target)
 4534 /**
 4535  * ptp_nikon_capture_sdram:
 4536  *
 4537  * This command captures a picture on the Nikon.
 4538  *
 4539  * params:      PTPParams*
 4540  *
 4541  * Return values: Some PTP_RC_* code.
 4542  *
 4543  **/
 4544 #define ptp_nikon_capture_sdram(params) ptp_generic_no_data(params,PTP_OC_NIKON_AfCaptureSDRAM,0)
 4545 /**
 4546  * ptp_nikon_delete_sdram_image:
 4547  *
 4548  * This command deletes the current SDRAM image
 4549  *
 4550  * params:      PTPParams*
 4551  * uint32_t oid
 4552  *
 4553  * Return values: Some PTP_RC_* code.
 4554  *
 4555  **/
 4556 #define ptp_nikon_delete_sdram_image(params,oid) ptp_generic_no_data(params,PTP_OC_NIKON_DelImageSDRAM,1,oid)
 4557 /**
 4558  * ptp_nikon_start_liveview:
 4559  *
 4560  * This command starts LiveView mode of newer Nikons DSLRs.
 4561  *
 4562  * params:      PTPParams*
 4563  *
 4564  * Return values: Some PTP_RC_* code.
 4565  *
 4566  **/
 4567 #define ptp_nikon_start_liveview(params) ptp_generic_no_data(params,PTP_OC_NIKON_StartLiveView,0)
 4568 uint16_t ptp_nikon_get_liveview_image (PTPParams* params, unsigned char**,unsigned int*);
 4569 uint16_t ptp_nikon_get_preview_image (PTPParams* params, unsigned char**, unsigned int*, uint32_t*);
 4570 /**
 4571  * ptp_nikon_end_liveview:
 4572  *
 4573  * This command ends LiveView mode of newer Nikons DSLRs.
 4574  *
 4575  * params:      PTPParams*
 4576  *
 4577  * Return values: Some PTP_RC_* code.
 4578  *
 4579  **/
 4580 #define ptp_nikon_end_liveview(params) ptp_generic_no_data(params,PTP_OC_NIKON_EndLiveView,0)
 4581 uint16_t ptp_nikon_check_event (PTPParams* params, PTPContainer **evt, unsigned int *evtcnt);
 4582 uint16_t ptp_nikon_check_eventex (PTPParams* params, PTPContainer **evt, unsigned int *evtcnt);
 4583 uint16_t ptp_nikon_getfileinfoinblock (PTPParams* params, uint32_t p1, uint32_t p2, uint32_t p3,
 4584                     unsigned char **data, unsigned int *size);
 4585 /**
 4586  * ptp_nikon_device_ready:
 4587  *
 4588  * This command checks if the device is ready. Used after
 4589  * a capture.
 4590  *
 4591  * params:      PTPParams*
 4592  *
 4593  * Return values: Some PTP_RC_* code.
 4594  *
 4595  **/
 4596 #define ptp_nikon_device_ready(params) ptp_generic_no_data (params, PTP_OC_NIKON_DeviceReady, 0)
 4597 uint16_t ptp_mtp_getobjectpropssupported (PTPParams* params, uint16_t ofc, uint32_t *propnum, uint16_t **props);
 4598 
 4599 
 4600 /* Android MTP Extensions */
 4601 uint16_t ptp_android_getpartialobject64 (PTPParams* params, uint32_t handle, uint64_t offset,
 4602                     uint32_t maxbytes, unsigned char** object,
 4603                     uint32_t *len);
 4604 #define ptp_android_begineditobject(params,handle) ptp_generic_no_data (params, PTP_OC_ANDROID_BeginEditObject, 1, handle)
 4605 #define ptp_android_truncate(params,handle,offset) ptp_generic_no_data (params, PTP_OC_ANDROID_TruncateObject, 3, handle, (offset & 0xFFFFFFFF), (offset >> 32))
 4606 uint16_t ptp_android_sendpartialobject (PTPParams *params, uint32_t handle,
 4607                     uint64_t offset, unsigned char *object, uint32_t len);
 4608 #define ptp_android_endeditobject(params,handle) ptp_generic_no_data (params, PTP_OC_ANDROID_EndEditObject, 1, handle)
 4609 
 4610 uint16_t ptp_olympus_getdeviceinfo (PTPParams*, PTPDeviceInfo*);
 4611 #define ptp_olympus_setcameracontrolmode(params,p1) ptp_generic_no_data (params, PTP_OC_OLYMPUS_SetCameraControlMode, 1, p1)
 4612 uint16_t ptp_olympus_opensession (PTPParams*, unsigned char**, unsigned int *);
 4613 #define ptp_olympus_capture(params,p1) ptp_generic_no_data (params, PTP_OC_OLYMPUS_Capture, 1, p1)
 4614 uint16_t ptp_olympus_getcameraid (PTPParams*, unsigned char**, unsigned int *);
 4615 
 4616 uint16_t ptp_olympus_omd_capture (PTPParams* params);
 4617 uint16_t ptp_olympus_omd_move_focus (PTPParams* params, uint32_t direction, uint32_t step_size);
 4618 
 4619 /* Non PTP protocol functions */
 4620 static inline int
 4621 ptp_operation_issupported(PTPParams* params, uint16_t operation)
 4622 {
 4623     unsigned int i=0;
 4624 
 4625     for (;i<params->deviceinfo.OperationsSupported_len;i++) {
 4626         if (params->deviceinfo.OperationsSupported[i]==operation)
 4627             return 1;
 4628     }
 4629     return 0;
 4630 }
 4631 
 4632 int ptp_event_issupported   (PTPParams* params, uint16_t event);
 4633 int ptp_property_issupported    (PTPParams* params, uint16_t property);
 4634 
 4635 void ptp_free_params        (PTPParams *params);
 4636 void ptp_free_objectpropdesc    (PTPObjectPropDesc*);
 4637 void ptp_free_devicepropdesc    (PTPDevicePropDesc*);
 4638 void ptp_free_devicepropvalue   (uint16_t, PTPPropertyValue*);
 4639 void ptp_free_objectinfo    (PTPObjectInfo *oi);
 4640 void ptp_free_object        (PTPObject *oi);
 4641 
 4642 const char *ptp_strerror    (uint16_t ret, uint16_t vendor);
 4643 void ptp_debug          (PTPParams *params, const char *format, ...);
 4644 void ptp_error          (PTPParams *params, const char *format, ...);
 4645 
 4646 
 4647 const char* ptp_get_property_description(PTPParams* params, uint16_t dpc);
 4648 
 4649 const char* ptp_get_opcode_name(PTPParams* params, uint16_t opcode);
 4650 const char* ptp_get_event_code_name(PTPParams* params, uint16_t event_code);
 4651 
 4652 int
 4653 ptp_render_property_value(PTPParams* params, uint16_t dpc,
 4654                           PTPDevicePropDesc *dpd, unsigned int length, char *out);
 4655 int ptp_render_ofc(PTPParams* params, uint16_t ofc, int spaceleft, char *txt);
 4656 int ptp_render_mtp_propname(uint16_t propid, int spaceleft, char *txt);
 4657 MTPProperties *ptp_get_new_object_prop_entry(MTPProperties **props, int *nrofprops);
 4658 void ptp_destroy_object_prop(MTPProperties *prop);
 4659 void ptp_destroy_object_prop_list(MTPProperties *props, int nrofprops);
 4660 MTPProperties *ptp_find_object_prop_in_cache(PTPParams *params, uint32_t const handle, uint32_t const attribute_id);
 4661 uint16_t ptp_remove_object_from_cache(PTPParams *params, uint32_t handle);
 4662 uint16_t ptp_add_object_to_cache(PTPParams *params, uint32_t handle);
 4663 uint16_t ptp_object_want (PTPParams *, uint32_t handle, unsigned int want, PTPObject**retob);
 4664 void ptp_objects_sort (PTPParams *);
 4665 uint16_t ptp_object_find (PTPParams *params, uint32_t handle, PTPObject **retob);
 4666 uint16_t ptp_object_find_or_insert (PTPParams *params, uint32_t handle, PTPObject **retob);
 4667 uint16_t ptp_list_folder (PTPParams *params, uint32_t storage, uint32_t handle);
 4668 /* ptpip.c */
 4669 void ptp_nikon_getptpipguid (unsigned char* guid);
 4670 
 4671 /* CHDK specifics */
 4672 #define PTP_OC_CHDK 0x9999
 4673 typedef struct tagptp_chdk_videosettings {
 4674     long live_image_buffer_width;
 4675     long live_image_width;
 4676     long live_image_height;
 4677     long bitmap_buffer_width;
 4678     long bitmap_width;
 4679     long bitmap_height;
 4680     unsigned palette[16];
 4681 } ptp_chdk_videosettings;
 4682 
 4683 /* Nafraf: Test this!!!*/
 4684 #define ptp_chdk_switch_mode(params,mode) ptp_generic_no_data(params,PTP_OC_CHDK,2,PTP_CHDK_SwitchMode,mode)
 4685 
 4686 /* include CHDK ptp protocol definitions from a CHDK source tree */
 4687 #include "chdk_ptp.h"
 4688 #if (PTP_CHDK_VERSION_MAJOR < 2 || (PTP_CHDK_VERSION_MAJOR == 2 && PTP_CHDK_VERSION_MINOR < 5))
 4689 #error your chdk headers are too old, unset CHDK_SRC_DIR in config.mk
 4690 #endif
 4691 #include "chdk_live_view.h"
 4692 
 4693 /* the following happens to match what is used in CHDK, but is not part of the protocol */
 4694 typedef struct {
 4695     unsigned size;
 4696     unsigned script_id; /* id of script message is to/from  */
 4697     unsigned type;
 4698     unsigned subtype;
 4699     char data[];
 4700 } ptp_chdk_script_msg;
 4701 
 4702 /*
 4703 chunk for remote capture
 4704 */
 4705 typedef struct {
 4706     uint32_t size; /* length of data */
 4707     int last; /* is it the last chunk? */
 4708     uint32_t offset; /* offset within file, or -1 */
 4709     unsigned char *data; /* data, must be free'd by caller when done */
 4710 } ptp_chdk_rc_chunk;
 4711 
 4712 
 4713 uint16_t ptp_chdk_get_memory(PTPParams* params, int start, int num, unsigned char **);
 4714 uint16_t ptp_chdk_set_memory_long(PTPParams* params, int addr, int val);
 4715 int ptp_chdk_upload(PTPParams* params, char *local_fn, char *remote_fn);
 4716 uint16_t ptp_chdk_download(PTPParams* params, char *remote_fn, PTPDataHandler *handler);
 4717 
 4718 /* remote capture */
 4719 uint16_t ptp_chdk_rcisready(PTPParams* params, int *isready,int *imgnum);
 4720 uint16_t ptp_chdk_rcgetchunk(PTPParams* params,int fmt, ptp_chdk_rc_chunk *chunk);
 4721 
 4722 uint16_t ptp_chdk_exec_lua(PTPParams* params, char *script, int flags, int *script_id,int *status);
 4723 uint16_t ptp_chdk_get_version(PTPParams* params, int *major, int *minor);
 4724 uint16_t ptp_chdk_get_script_support(PTPParams* params, unsigned *status);
 4725 uint16_t ptp_chdk_get_script_status(PTPParams* params, unsigned *status);
 4726 uint16_t ptp_chdk_write_script_msg(PTPParams* params, char *data, unsigned size, int target_script_id, int *status);
 4727 uint16_t ptp_chdk_read_script_msg(PTPParams* params, ptp_chdk_script_msg **msg);
 4728 uint16_t ptp_chdk_get_live_data(PTPParams* params, unsigned flags, unsigned char **data, unsigned int *data_size);
 4729 uint16_t ptp_chdk_parse_live_data (PTPParams* params, unsigned char *data, unsigned int data_size,
 4730                    lv_data_header *header, lv_framebuffer_desc *vpd, lv_framebuffer_desc *bmd);
 4731 uint16_t ptp_chdk_call_function(PTPParams* params, int *args, int size, int *ret);
 4732 
 4733 /*uint16_t ptp_chdk_get_script_output(PTPParams* params, char **output ); */
 4734 /*uint16_t ptp_chdk_get_video_settings(PTPParams* params, ptp_chdk_videosettings* vsettings);*/
 4735 
 4736 uint16_t ptp_fuji_getevents (PTPParams* params, uint16_t** events, uint16_t* count);
 4737 uint16_t ptp_fuji_getdeviceinfo (PTPParams* params, uint16_t **props, unsigned int *numprops);
 4738 
 4739 #define ptp_panasonic_liveview(params,enable) ptp_generic_no_data(params,PTP_OC_PANASONIC_Liveview,1,enable?0xD000010:0xD000011)
 4740 uint16_t ptp_panasonic_liveview_image (PTPParams* params, unsigned char **data, unsigned int *size);
 4741 #define ptp_panasonic_movierec(params,enable) ptp_generic_no_data(params,PTP_OC_PANASONIC_MovieRecControl,1,enable?0x07000011:0x07000012)
 4742 
 4743 uint16_t ptp_panasonic_setdeviceproperty (PTPParams* params, uint32_t propcode, unsigned char *value, uint16_t valuesize);
 4744 uint16_t ptp_panasonic_getdeviceproperty (PTPParams *params, uint32_t propcode, uint16_t *valuesize, uint32_t *currentValue);
 4745 uint16_t ptp_panasonic_getdevicepropertydesc (PTPParams *params, uint32_t propcode, uint16_t valuesize, uint32_t *currentValue, uint32_t **propertyValueList, uint32_t *propertyValueListLength);
 4746 uint16_t ptp_panasonic_getdevicepropertysize (PTPParams *params, uint32_t propcode);
 4747 uint16_t ptp_panasonic_getcapturetarget (PTPParams *params, uint16_t *target);
 4748 uint16_t ptp_panasonic_setcapturetarget (PTPParams *params, uint16_t target);
 4749 uint16_t ptp_panasonic_manualfocusdrive (PTPParams* params, uint16_t mode);
 4750 uint16_t ptp_panasonic_9401 (PTPParams* params, uint32_t x);
 4751 
 4752 uint16_t ptp_panasonic_9414_0d800012 (PTPParams* params, PanasonicLiveViewSize **liveviewsizes, unsigned int *nrofliveviewsizes);
 4753 uint16_t ptp_panasonic_9414_0d800011 (PTPParams* params, PanasonicLiveViewSize *liveviewsize);
 4754 uint16_t ptp_panasonic_9415 (PTPParams* params, PanasonicLiveViewSize *liveviewsize);
 4755 
 4756 
 4757 uint16_t ptp_olympus_liveview_image (PTPParams* params, unsigned char **data, unsigned int *size);
 4758 #define ptp_olympus_omd_move_focus(params,direction,step_size) ptp_generic_no_data(params,PTP_OC_OLYMPUS_OMD_MFDrive,2,direction,step_size)
 4759 uint16_t ptp_olympus_omd_capture (PTPParams* params);
 4760 uint16_t ptp_olympus_omd_bulbstart (PTPParams* params);
 4761 uint16_t ptp_olympus_omd_bulbend (PTPParams* params);
 4762 uint16_t ptp_olympus_init_pc_mode (PTPParams* params);
 4763 uint16_t ptp_olympus_sdram_image (PTPParams* params, unsigned char **data, unsigned int *size);
 4764 
 4765 
 4766 
 4767 #define ptp_panasonic_capture(params) ptp_generic_no_data(params,PTP_OC_PANASONIC_InitiateCapture,1,0x3000011)
 4768 
 4769 #define ptp_leica_leopensession(params,session) ptp_generic_no_data(params,PTP_OC_LEICA_LEOpenSession,1,session)
 4770 #define ptp_leica_leclosesession(params) ptp_generic_no_data(params,PTP_OC_LEICA_LECloseSession,0)
 4771 uint16_t ptp_leica_getstreamdata (PTPParams* params, unsigned char **data, unsigned int *size);
 4772 
 4773 #ifdef __cplusplus
 4774 }
 4775 #endif /* __cplusplus */
 4776 
 4777 #endif /* __PTP_H__ */