13aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* ptp.h
23aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
33aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Copyright (C) 2001 Mariusz Woloszyn <emsi@ipartners.pl>
43aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Copyright (C) 2003-2009 Marcus Meissner <marcus@jet.franken.de>
53aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Copyright (C) 2006-2008 Linus Walleij <triad@df.lth.se>
63aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
73aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This library is free software; you can redistribute it and/or
83aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * modify it under the terms of the GNU Lesser General Public
93aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * License as published by the Free Software Foundation; either
103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * version 2 of the License, or (at your option) any later version.
113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This library is distributed in the hope that it will be useful,
133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * but WITHOUT ANY WARRANTY; without even the implied warranty of
143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Lesser General Public License for more details.
163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * You should have received a copy of the GNU Lesser General Public
183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * License along with this library; if not, write to the
193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Boston, MA 02111-1307, USA.
213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifndef __PTP_H__
243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define __PTP_H__
253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <stdarg.h>
273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <time.h>
283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifdef HAVE_ICONV
293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <iconv.h>
303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif
313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include "gphoto2-endian.h"
323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include "device-flags.h"
333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifdef __cplusplus
353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevextern "C" {
363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif /* __cplusplus */
373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP datalayer byteorder */
393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DL_BE			0xF0
413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define	PTP_DL_LE			0x0F
423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* USB interface class */
443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifndef USB_CLASS_PTP
453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define USB_CLASS_PTP			6
463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif
473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP request/response/event general PTP container (transport independent) */
493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPContainer {
513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t Code;
523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t SessionID;
533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t Transaction_ID;
543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* params  may be of any type of size less or equal to uint32_t */
553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t Param1;
563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t Param2;
573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t Param3;
583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* events can only have three parameters */
593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t Param4;
603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t Param5;
613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* the number of meaningfull parameters */
623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t	 Nparam;
633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPContainer PTPContainer;
653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP USB Bulk-Pipe container */
673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* USB bulk max packet length for high speed endpoints */
683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* The max packet is set to 512 bytes. The spec says
693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * "end of data transfers are signaled by short packets or NULL
703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * packets". It never says anything about 512, but current
713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * implementations seem to have chosen this value, which also
723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * happens to be the size of an USB 2.0 HS endpoint, even though
733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * this is not necessary.
743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Previously we had this as 4096 for MTP devices. We have found
763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * and fixed the bugs that made this necessary and it can be 512 again.
773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_USB_BULK_HS_MAX_PACKET_LEN_WRITE	512
793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_USB_BULK_HS_MAX_PACKET_LEN_READ   512
803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_USB_BULK_HDR_LEN		(2*sizeof(uint32_t)+2*sizeof(uint16_t))
813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_USB_BULK_PAYLOAD_LEN_WRITE	(PTP_USB_BULK_HS_MAX_PACKET_LEN_WRITE-PTP_USB_BULK_HDR_LEN)
823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_USB_BULK_PAYLOAD_LEN_READ	(PTP_USB_BULK_HS_MAX_PACKET_LEN_READ-PTP_USB_BULK_HDR_LEN)
833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_USB_BULK_REQ_LEN	(PTP_USB_BULK_HDR_LEN+5*sizeof(uint32_t))
843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPUSBBulkContainer {
863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t length;
873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t type;
883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t code;
893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t trans_id;
903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	union {
913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev		struct {
923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev			uint32_t param1;
933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev			uint32_t param2;
943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev			uint32_t param3;
953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev			uint32_t param4;
963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev			uint32_t param5;
973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev		} params;
983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev       /* this must be set to the maximum of PTP_USB_BULK_PAYLOAD_LEN_WRITE
993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev        * and PTP_USB_BULK_PAYLOAD_LEN_READ */
1003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev		unsigned char data[PTP_USB_BULK_PAYLOAD_LEN_READ];
1013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	} payload;
1023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
1033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPUSBBulkContainer PTPUSBBulkContainer;
1043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP USB Asynchronous Event Interrupt Data Format */
1063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPUSBEventContainer {
1073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t length;
1083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t type;
1093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t code;
1103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t trans_id;
1113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t param1;
1123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t param2;
1133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t param3;
1143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
1153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPUSBEventContainer PTPUSBEventContainer;
1163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPCanon_directtransfer_entry {
1183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t	oid;
1193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char		*str;
1203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
1213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPCanon_directtransfer_entry PTPCanon_directtransfer_entry;
1223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* USB container types */
1243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_USB_CONTAINER_UNDEFINED		0x0000
1263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_USB_CONTAINER_COMMAND		0x0001
1273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_USB_CONTAINER_DATA			0x0002
1283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_USB_CONTAINER_RESPONSE		0x0003
1293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_USB_CONTAINER_EVENT			0x0004
1303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP/IP definitions */
1323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_INIT_COMMAND_REQUEST	1
1333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_INIT_COMMAND_ACK		2
1343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_INIT_EVENT_REQUEST	3
1353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_INIT_EVENT_ACK		4
1363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_INIT_FAIL			5
1373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_CMD_REQUEST		6
1383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_CMD_RESPONSE		7
1393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_EVENT			8
1403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_START_DATA_PACKET		9
1413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_DATA_PACKET		10
1423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_CANCEL_TRANSACTION	11
1433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_END_DATA_PACKET		12
1443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_PING			13
1453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPIP_PONG			14
1463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPIPHeader {
1483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t	length;
1493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t	type;
1503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
1513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPIPHeader PTPIPHeader;
1523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Vendor IDs */
1543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_VENDOR_EASTMAN_KODAK	0x00000001
1553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_VENDOR_SEIKO_EPSON		0x00000002
1563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_VENDOR_AGILENT		0x00000003
1573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_VENDOR_POLAROID		0x00000004
1583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_VENDOR_AGFA_GEVAERT		0x00000005
1593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_VENDOR_MICROSOFT		0x00000006
1603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_VENDOR_EQUINOX		0x00000007
1613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_VENDOR_VIEWQUEST		0x00000008
1623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_VENDOR_STMICROELECTRONICS	0x00000009
1633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_VENDOR_NIKON		0x0000000A
1643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_VENDOR_CANON		0x0000000B
1653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Vendor extension ID used for MTP */
1673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_VENDOR_MTP			0xffffffff
1683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Operation Codes */
1703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP v1.0 operation codes */
1723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_Undefined                0x1000
1733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetDeviceInfo            0x1001
1743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_OpenSession              0x1002
1753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CloseSession             0x1003
1763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetStorageIDs            0x1004
1773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetStorageInfo           0x1005
1783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetNumObjects            0x1006
1793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetObjectHandles         0x1007
1803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetObjectInfo            0x1008
1813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetObject                0x1009
1823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetThumb                 0x100A
1833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_DeleteObject             0x100B
1843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_SendObjectInfo           0x100C
1853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_SendObject               0x100D
1863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_InitiateCapture          0x100E
1873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_FormatStore              0x100F
1883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_ResetDevice              0x1010
1893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_SelfTest                 0x1011
1903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_SetObjectProtection      0x1012
1913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_PowerDown                0x1013
1923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetDevicePropDesc        0x1014
1933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetDevicePropValue       0x1015
1943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_SetDevicePropValue       0x1016
1953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_ResetDevicePropValue     0x1017
1963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_TerminateOpenCapture     0x1018
1973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MoveObject               0x1019
1983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CopyObject               0x101A
1993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetPartialObject         0x101B
2003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_InitiateOpenCapture      0x101C
2013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP v1.1 operation codes */
2023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_StartEnumHandles		0x101D
2033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_EnumHandles		0x101E
2043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_StopEnumHandles		0x101F
2053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetVendorExtensionMaps	0x1020
2063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetVendorDeviceInfo	0x1021
2073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetResizedImageObject	0x1022
2083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetFilesystemManifest	0x1023
2093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetStreamInfo		0x1024
2103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_GetStream		0x1025
2113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Eastman Kodak extension Operation Codes */
2133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_EK_GetSerial		0x9003
2143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_EK_SetSerial		0x9004
2153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_EK_SendFileObjectInfo	0x9005
2163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_EK_SendFileObject	0x9006
2173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_EK_SetText		0x9008
2183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Canon extension Operation Codes */
2203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetPartialObjectInfo	0x9001
2213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 9002 - sends 2 uint32, nothing back  */
2223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_SetObjectArchive		0x9002
2233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_KeepDeviceOn		0x9003
2243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_LockDeviceUI		0x9004
2253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_UnlockDeviceUI		0x9005
2263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetObjectHandleByName	0x9006
2273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* no 9007 observed yet */
2283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_InitiateReleaseControl	0x9008
2293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_TerminateReleaseControl	0x9009
2303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_TerminatePlaybackMode	0x900A
2313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_ViewfinderOn		0x900B
2323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_ViewfinderOff		0x900C
2333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_DoAeAfAwb			0x900D
2343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 900e - send nothing, gets 5 uint16t in 32bit entities back in 20byte datablob */
2363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetCustomizeSpec		0x900E
2373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetCustomizeItemInfo	0x900F
2383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetCustomizeData		0x9010
2393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_SetCustomizeData		0x9011
2403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetCaptureStatus		0x9012
2413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_CheckEvent			0x9013
2423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_FocusLock			0x9014
2433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_FocusUnlock		0x9015
2443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetLocalReleaseParam	0x9016
2453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_SetLocalReleaseParam	0x9017
2463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_AskAboutPcEvf		0x9018
2473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_SendPartialObject		0x9019
2483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_InitiateCaptureInMemory	0x901A
2493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetPartialObjectEx		0x901B
2503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_SetObjectTime		0x901C
2513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetViewfinderImage		0x901D
2523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetObjectAttributes	0x901E
2533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_ChangeUSBProtocol		0x901F
2543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetChanges			0x9020
2553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetObjectInfoEx		0x9021
2563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_InitiateDirectTransfer	0x9022
2573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_TerminateDirectTransfer 	0x9023
2583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_SendObjectInfoByPath 	0x9024
2593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_SendObjectByPath 		0x9025
2603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_InitiateDirectTansferEx	0x9026
2613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetAncillaryObjectHandles	0x9027
2623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetTreeInfo 		0x9028
2633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetTreeSize 		0x9029
2643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_NotifyProgress 		0x902A
2653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_NotifyCancelAccepted	0x902B
2663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 902c: no parms, read 3 uint32 in data, no response parms */
2673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_902C			0x902C
2683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetDirectory		0x902D
2693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_SetPairingInfo		0x9030
2713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetPairingInfo		0x9031
2723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_DeletePairingInfo		0x9032
2733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetMACAddress		0x9033
2743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 9034: 1 param, no parms returned */
2753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_SetDisplayMonitor		0x9034
2763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_PairingComplete		0x9035
2773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_GetWirelessMAXChannel	0x9036
2783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 9101: no args, 8 byte data (01 00 00 00 00 00 00 00), no resp data. */
2803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_GetStorageIDs		0x9101
2813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 9102: 1 arg (0)
2823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * 0x28 bytes of data:
2833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000000: 34 00 00 00 02 00 02 91 0a 00 00 00 04 00 03 00
2843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000020: 00 00 ff ff ff ff 03 43 00 46 00 00 00 03 41 00
2863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000030: 3a 00 00 00
2873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * no resp args
2883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
2893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_GetStorageInfo		0x9102
2903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_GetObjectInfo		0x9103
2913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_GetObject		0x9104
2923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_DeleteObject		0x9105
2933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_FormatStore		0x9106
2943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_GetPartialObject	0x9107
2953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_GetDeviceInfoEx	0x9108
2963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* sample1:
2983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * 3 cmdargs: 1,0xffffffff,00 00 10 00;
2993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * data:
3003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000000: 48 00 00 00 02 00 09 91 12 00 00 00 01 00 00 00
3013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000010: 38 00 00 00 00 00 00 30 01 00 00 00 01 30 00 00
3023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000020: 01 00 00 00 10 00 00 00 00 00 00 00 00 00 00 20
3033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000030: 00 00 00 30 44 43 49 4d 00 00 00 00 00 00 00 00	DCIM
3043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000040: 00 00 00 00 cc c3 01 46
3053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * 2 respargs: 0x0, 0x3c
3063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
3073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * sample2:
3083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
3093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000000: 18 00 00 00 01 00 09 91 15 00 00 00 01 00 00 00
3103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000010: 00 00 00 30 00 00 10 00
3113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000000: 48 00 00 00 02 00 09 91 15 00 00 00 01 00 00 00
3133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000010: 38 00 00 00 00 00 9c 33 01 00 00 00 01 30 00 00
3143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000020: 01 00 00 00 10 00 00 00 00 00 00 00 00 00 00 30
3153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000030: 00 00 9c 33 32 33 31 43 41 4e 4f 4e 00 00 00 00	 231CANON
3163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    00000040: 00 00 00 00 cc c3 01 46
3173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
3193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_GetObjectInfoEx	0x9109
3203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_GetThumbEx		0x910A
3213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_SendPartialObject	0x910B
3223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_SetObjectAttributes	0x910C
3233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_GetObjectTime		0x910D
3243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_SetObjectTime		0x910E
3253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 910f: no args, no data, 1 response arg (0). */
3273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_RemoteRelease		0x910F
3283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Marcus: looks more like "Set DeviceProperty" in the trace.
3293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
3303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * no cmd args
3313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * data phase (0xc, 0xd11c, 0x1)
3323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * no resp args
3333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
3343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_SetDevicePropValueEx	0x9110
3353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_GetRemoteMode		0x9113
3363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 9114: 1 arg (0x1), no data, no resp data. */
3373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_SetRemoteMode		0x9114
3383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 9115: 1 arg (0x1), no data, no resp data. */
3393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_SetEventMode		0x9115
3403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 9116: no args, data phase, no resp data. */
3413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_GetEvent		0x9116
3423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_TransferComplete	0x9117
3433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_CancelTransfer		0x9118
3443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_ResetTransfer		0x9119
3453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 911a: 3 args (0xfffffff7, 0x00001000, 0x00000001), no data, no resp data. */
3473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 911a: 3 args (0x001dfc60, 0x00001000, 0x00000001), no data, no resp data. */
3483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_PCHDDCapacity		0x911A
3493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 911b: no cmd args, no data, no resp args */
3513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_SetUILock		0x911B
3523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 911c: no cmd args, no data, no resp args */
3533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_ResetUILock		0x911C
3543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_KeepDeviceOn		0x911D
3553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_SetNullPacketMode	0x911E
3563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_UpdateFirmware		0x911F
3573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_TransferCompleteDT	0x9120
3583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_CancelTransferDT	0x9121
3593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_SetWftProfile		0x9122
3603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_GetWftProfile		0x9122
3613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_SetProfileToWft	0x9124
3623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_BulbStart		0x9125
3633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_BulbEnd		0x9126
3643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_RequestDevicePropValue	0x9127
3653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 0x9128 args (0x1/0x2, 0x0), no data, no resp args */
3673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_RemoteReleaseOn	0x9128
3683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* 0x9129 args (0x1/0x2), no data, no resp args */
3693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_RemoteReleaseOff	0x9129
3703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_InitiateViewfinder	0x9151
3723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_TerminateViewfinder	0x9152
3733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_GetViewFinderData	0x9153
3743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_DoAf			0x9154
3753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_DriveLens		0x9155
3763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_DepthOfFieldPreview	0x9156
3773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_ClickWB		0x9157
3783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_Zoom			0x9158
3793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_ZoomPosition		0x9159
3803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_SetLiveAfFrame		0x915a
3813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_AfCancel		0x9160
3823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_FAPIMessageTX		0x91FE
3833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_CANON_EOS_FAPIMessageRX		0x91FF
3843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Nikon extension Operation Codes */
3863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_GetProfileAllData	0x9006
3873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_SendProfileData	0x9007
3883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_DeleteProfile	0x9008
3893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_SetProfileData	0x9009
3903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_AdvancedTransfer	0x9010
3913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_GetFileInfoInBlock	0x9011
3923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_Capture		0x90C0	/* 1 param,   no data */
3933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_AfDrive		0x90C1	/* no params, no data */
3943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_SetControlMode	0x90C2	/* 1 param,   no data */
3953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_DelImageSDRAM	0x90C3	/* no params, no data */
3963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_GetLargeThumb	0x90C4
3973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_CurveDownload	0x90C5	/* 1 param,   data in */
3983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_CurveUpload	0x90C6	/* 1 param,   data out */
3993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_CheckEvent		0x90C7	/* no params, data in */
4003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_DeviceReady	0x90C8	/* no params, no data */
4013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_SetPreWBData	0x90C9	/* 3 params,  data out */
4023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_GetVendorPropCodes	0x90CA	/* 0 params, data in */
4033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_AfCaptureSDRAM	0x90CB	/* no params, no data */
4043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_GetPictCtrlData	0x90CC
4053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_SetPictCtrlData	0x90CD
4063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_DelCstPicCtrl	0x90CE
4073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_GetPicCtrlCapability	0x90CF
4083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Nikon Liveview stuff */
4103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_GetPreviewImg	0x9200
4113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_StartLiveView	0x9201
4123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_EndLiveView	0x9202
4133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_GetLiveViewImg	0x9203
4143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_MfDrive		0x9204
4153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_ChangeAfArea	0x9205
4163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_AfDriveCancel	0x9206
4173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_NIKON_GetDevicePTPIPInfo	0x90E0
4193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Microsoft / MTP extension codes */
4213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_GetObjectPropsSupported	0x9801
4233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_GetObjectPropDesc		0x9802
4243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_GetObjectPropValue		0x9803
4253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_SetObjectPropValue		0x9804
4263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_GetObjPropList		0x9805
4273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_SetObjPropList		0x9806
4283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_GetInterdependendPropdesc	0x9807
4293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_SendObjectPropList		0x9808
4303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_GetObjectReferences		0x9810
4313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_SetObjectReferences		0x9811
4323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_UpdateDeviceFirmware		0x9812
4333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_Skip				0x9820
4343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/*
4363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Windows Media Digital Rights Management for Portable Devices
4373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Extension Codes (microsoft.com/WMDRMPD: 10.1)
4383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
4393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_GetSecureTimeChallenge	0x9101
4403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_GetSecureTimeResponse	0x9102
4413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_SetLicenseResponse	0x9103
4423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_GetSyncList		0x9104
4433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_SendMeterChallengeQuery	0x9105
4443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_GetMeterChallenge	0x9106
4453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_SetMeterResponse		0x9107
4463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_CleanDataStore		0x9108
4473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_GetLicenseState		0x9109
4483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_SendWMDRMPDCommand	0x910A
4493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_SendWMDRMPDRequest	0x910B
4503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/*
4523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Windows Media Digital Rights Management for Portable Devices
4533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Extension Codes (microsoft.com/WMDRMPD: 10.1)
4543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Below are operations that have no public documented identifier
4553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * associated with them "Vendor-defined Command Code"
4563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
4573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_SendWMDRMPDAppRequest	0x9212
4583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_GetWMDRMPDAppResponse	0x9213
4593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_EnableTrustedFilesOperations	0x9214
4603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_DisableTrustedFilesOperations 0x9215
4613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMPD_EndTrustedAppSession		0x9216
4623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* ^^^ guess ^^^ */
4633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/*
4653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Microsoft Advanced Audio/Video Transfer
4663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Extensions (microsoft.com/AAVT: 1.0)
4673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
4683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_AAVT_OpenMediaSession		0x9170
4693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_AAVT_CloseMediaSession		0x9171
4703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_AAVT_GetNextDataBlock		0x9172
4713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_AAVT_SetCurrentTimePosition		0x9173
4723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/*
4743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Windows Media Digital Rights Management for Network Devices
4753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Extensions (microsoft.com/WMDRMND: 1.0) MTP/IP?
4763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
4773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMND_SendRegistrationRequest	0x9180
4783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMND_GetRegistrationResponse	0x9181
4793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMND_GetProximityChallenge	0x9182
4803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMND_SendProximityResponse	0x9183
4813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMND_SendWMDRMNDLicenseRequest	0x9184
4823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMDRMND_GetWMDRMNDLicenseResponse	0x9185
4833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/*
4853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Windows Media Player Portiable Devices
4863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Extension Codes (microsoft.com/WMPPD: 11.1)
4873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
4883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMPPD_ReportAddedDeletedItems	0x9201
4893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMPPD_ReportAcquiredItems 	        0x9202
4903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WMPPD_PlaylistObjectPref		0x9203
4913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/*
4933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Undocumented Zune Operation Codes
4943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * maybe related to WMPPD extension set?
4953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
4963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_ZUNE_GETUNDEFINED001		        0x9204
4973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* WiFi Provisioning MTP Extension Codes (microsoft.com/WPDWCN: 1.0) */
4993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_MTP_WPDWCN_ProcessWFCObject		0x9122
5003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Proprietary vendor extension operations mask */
5023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_EXTENSION_MASK           0xF000
5033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OC_EXTENSION                0x9000
5043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Response Codes */
5063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP v1.0 response codes */
5083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_Undefined                0x2000
5093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_OK                       0x2001
5103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_GeneralError             0x2002
5113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_SessionNotOpen           0x2003
5123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_InvalidTransactionID	0x2004
5133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_OperationNotSupported    0x2005
5143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_ParameterNotSupported    0x2006
5153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_IncompleteTransfer       0x2007
5163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_InvalidStorageId         0x2008
5173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_InvalidObjectHandle      0x2009
5183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_DevicePropNotSupported   0x200A
5193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_InvalidObjectFormatCode  0x200B
5203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_StoreFull                0x200C
5213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_ObjectWriteProtected     0x200D
5223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_StoreReadOnly            0x200E
5233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_AccessDenied             0x200F
5243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NoThumbnailPresent       0x2010
5253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_SelfTestFailed           0x2011
5263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_PartialDeletion          0x2012
5273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_StoreNotAvailable        0x2013
5283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_SpecificationByFormatUnsupported         0x2014
5293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NoValidObjectInfo        0x2015
5303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_InvalidCodeFormat        0x2016
5313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_UnknownVendorCode        0x2017
5323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_CaptureAlreadyTerminated 0x2018
5333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_DeviceBusy               0x2019
5343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_InvalidParentObject      0x201A
5353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_InvalidDevicePropFormat  0x201B
5363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_InvalidDevicePropValue   0x201C
5373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_InvalidParameter         0x201D
5383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_SessionAlreadyOpened     0x201E
5393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_TransactionCanceled      0x201F
5403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_SpecificationOfDestinationUnsupported            0x2020
5413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP v1.1 response codes */
5423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_InvalidEnumHandle	0x2021
5433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NoStreamEnabled		0x2022
5443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_InvalidDataSet		0x2023
5453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Eastman Kodak extension Response Codes */
5473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_EK_FilenameRequired	0xA001
5483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_EK_FilenameConflicts	0xA002
5493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_EK_FilenameInvalid	0xA003
5503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Nikon specific response codes */
5523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_HardwareError		0xA001
5533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_OutOfFocus			0xA002
5543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_ChangeCameraModeFailed	0xA003
5553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_InvalidStatus		0xA004
5563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_SetPropertyNotSupported	0xA005
5573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_WbResetError		0xA006
5583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_DustReferenceError		0xA007
5593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_ShutterSpeedBulb		0xA008
5603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_MirrorUpSequence		0xA009
5613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_CameraModeNotAdjustFNumber	0xA00A
5623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_NotLiveView		0xA00B
5633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_MfDriveStepEnd		0xA00C
5643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_MfDriveStepInsufficiency	0xA00E
5653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_NIKON_AdvancedTransferCancel	0xA022
5663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Canon specific response codes */
5683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_CANON_A009		0xA009
5693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Microsoft/MTP specific codes */
5713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_Undefined			0xA800
5723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_Invalid_ObjectPropCode	0xA801
5733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_Invalid_ObjectProp_Format	0xA802
5743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_Invalid_ObjectProp_Value	0xA803
5753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_Invalid_ObjectReference	0xA804
5763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_Invalid_Dataset		0xA806
5773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_Specification_By_Group_Unsupported		0xA807
5783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_Specification_By_Depth_Unsupported		0xA808
5793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_Object_Too_Large		0xA809
5803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_ObjectProp_Not_Supported	0xA80A
5813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Microsoft Advanced Audio/Video Transfer response codes
5833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev(microsoft.com/AAVT 1.0) */
5843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_Invalid_Media_Session_ID	0xA170
5853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_Media_Session_Limit_Reached	0xA171
5863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_No_More_Data			0xA172
5873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* WiFi Provisioning MTP Extension Error Codes (microsoft.com/WPDWCN: 1.0) */
5893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_Invalid_WFC_Syntax		0xA121
5903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_RC_MTP_WFC_Version_Not_Supported	0xA122
5913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* libptp2 extended ERROR codes */
5933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_ERROR_IO			0x02FF
5943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_ERROR_DATA_EXPECTED		0x02FE
5953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_ERROR_RESP_EXPECTED		0x02FD
5963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_ERROR_BADPARAM		0x02FC
5973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_ERROR_CANCEL		0x02FB
5983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_ERROR_TIMEOUT		0x02FA
5993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP Event Codes */
6013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_Undefined		0x4000
6033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CancelTransaction	0x4001
6043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_ObjectAdded		0x4002
6053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_ObjectRemoved		0x4003
6063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_StoreAdded		0x4004
6073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_StoreRemoved		0x4005
6083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_DevicePropChanged	0x4006
6093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_ObjectInfoChanged	0x4007
6103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_DeviceInfoChanged	0x4008
6113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_RequestObjectTransfer	0x4009
6123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_StoreFull		0x400A
6133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_DeviceReset		0x400B
6143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_StorageInfoChanged	0x400C
6153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CaptureComplete		0x400D
6163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_UnreportedStatus		0x400E
6173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Canon extension Event Codes */
6193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_ExtendedErrorcode		0xC005	/* ? */
6203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_ObjectInfoChanged		0xC008
6213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_RequestObjectTransfer	0xC009
6223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_CameraModeChanged		0xC00C
6233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_ShutterButtonPressed	0xC00E
6243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_StartDirectTransfer	0xC011
6263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_StopDirectTransfer		0xC013
6273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Canon EOS events */
6293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_RequestGetEvent	0xc101
6303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_ObjectAddedEx		0xc181
6313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_ObjectRemoved		0xc182
6323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_RequestGetObjectInfoEx	0xc183
6333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_StorageStatusChanged	0xc184
6343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_StorageInfoChanged	0xc185
6353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_RequestObjectTransfer	0xc186
6363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_ObjectInfoChangedEx	0xc187
6373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_ObjectContentChanged	0xc188
6383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_PropValueChanged	0xc189
6393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_AvailListChanged	0xc18a
6403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_CameraStatusChanged	0xc18b
6413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_WillSoonShutdown	0xc18d
6423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_ShutdownTimerUpdated	0xc18e
6433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_RequestCancelTransfer	0xc18f
6443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_RequestObjectTransferDT	0xc190
6453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_RequestCancelTransferDT	0xc191
6463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_StoreAdded		0xc192
6473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_StoreRemoved		0xc193
6483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_BulbExposureTime	0xc194
6493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_RecordingTime		0xc195
6503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_RequestObjectTransferTS		0xC1a2
6513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_CANON_EOS_AfResult		0xc1a3
6523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Nikon extension Event Codes */
6543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Nikon extension Event Codes */
6563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_Nikon_ObjectAddedInSDRAM		0xC101
6573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_Nikon_CaptureCompleteRecInSdram	0xC102
6583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Gets 1 parameter, objectid pointing to DPOF object */
6593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_Nikon_AdvancedTransfer		0xC103
6603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_Nikon_PreviewImageAdded		0xC104
6613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* MTP Event codes */
6633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_MTP_ObjectPropChanged		0xC801
6643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_MTP_ObjectPropDescChanged	0xC802
6653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_EC_MTP_ObjectReferencesChanged	0xC803
6663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* constants for GetObjectHandles */
6683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_GOH_ALL_STORAGE 0xffffffff
6693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_GOH_ALL_FORMATS 0x00000000
6703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_GOH_ALL_ASSOCS  0x00000000
6713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_GOH_ROOT_PARENT 0xffffffff
6723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP device info structure (returned by GetDevInfo) */
6743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPDeviceInfo {
6763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t StandardVersion;
6773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t VendorExtensionID;
6783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t VendorExtensionVersion;
6793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char	*VendorExtensionDesc;
6803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t FunctionalMode;
6813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t OperationsSupported_len;
6823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t *OperationsSupported;
6833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t EventsSupported_len;
6843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t *EventsSupported;
6853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t DevicePropertiesSupported_len;
6863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t *DevicePropertiesSupported;
6873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t CaptureFormats_len;
6883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t *CaptureFormats;
6893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t ImageFormats_len;
6903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t *ImageFormats;
6913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char	*Manufacturer;
6923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char	*Model;
6933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char	*DeviceVersion;
6943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char	*SerialNumber;
6953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
6963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPDeviceInfo PTPDeviceInfo;
6973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP storageIDs structute (returned by GetStorageIDs) */
6993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
7003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPStorageIDs {
7013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t n;
7023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t *Storage;
7033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
7043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPStorageIDs PTPStorageIDs;
7053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
7063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP StorageInfo structure (returned by GetStorageInfo) */
7073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPStorageInfo {
7083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t StorageType;
7093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t FilesystemType;
7103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t AccessCapability;
7113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint64_t MaxCapability;
7123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint64_t FreeSpaceInBytes;
7133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t FreeSpaceInImages;
7143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char 	*StorageDescription;
7153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char	*VolumeLabel;
7163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
7173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPStorageInfo PTPStorageInfo;
7183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
7193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP objecthandles structure (returned by GetObjectHandles) */
7203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
7213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPObjectHandles {
7223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t n;
7233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t *Handler;
7243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
7253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPObjectHandles PTPObjectHandles;
7263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
7273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_HANDLER_SPECIAL	0xffffffff
7283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_HANDLER_ROOT	0x00000000
7293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
7303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
7313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP objectinfo structure (returned by GetObjectInfo) */
7323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
7333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPObjectInfo {
7343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t StorageID;
7353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t ObjectFormat;
7363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t ProtectionStatus;
7373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t ObjectCompressedSize;
7383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t ThumbFormat;
7393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t ThumbCompressedSize;
7403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t ThumbPixWidth;
7413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t ThumbPixHeight;
7423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t ImagePixWidth;
7433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t ImagePixHeight;
7443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t ImageBitDepth;
7453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t ParentObject;
7463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t AssociationType;
7473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t AssociationDesc;
7483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t SequenceNumber;
7493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char 	*Filename;
7503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	time_t	CaptureDate;
7513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	time_t	ModificationDate;
7523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char	*Keywords;
7533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
7543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPObjectInfo PTPObjectInfo;
7553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
7563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* max ptp string length INCLUDING terminating null character */
7573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
7583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_MAXSTRLEN				255
7593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
7603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP Object Format Codes */
7613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
7623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* ancillary formats */
7633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_Undefined			0x3000
7643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_Defined				0x3800
7653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_Association			0x3001
7663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_Script				0x3002
7673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_Executable			0x3003
7683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_Text				0x3004
7693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_HTML				0x3005
7703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_DPOF				0x3006
7713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_AIFF	 			0x3007
7723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_WAV				0x3008
7733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MP3				0x3009
7743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_AVI				0x300A
7753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MPEG				0x300B
7763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_ASF				0x300C
7773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_QT				0x300D /* guessing */
7783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* image formats */
7793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_EXIF_JPEG			0x3801
7803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_TIFF_EP				0x3802
7813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_FlashPix			0x3803
7823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_BMP				0x3804
7833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_CIFF				0x3805
7843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_Undefined_0x3806		0x3806
7853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_GIF				0x3807
7863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_JFIF				0x3808
7873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_PCD				0x3809
7883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_PICT				0x380A
7893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_PNG				0x380B
7903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_Undefined_0x380C		0x380C
7913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_TIFF				0x380D
7923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_TIFF_IT				0x380E
7933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_JP2				0x380F
7943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_JPX				0x3810
7953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* ptp v1.1 has only DNG new */
7963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_DNG				0x3811
7973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Eastman Kodak extension ancillary format */
7983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_EK_M3U				0xb002
7993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Canon extension */
8003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_CANON_CRW			0xb101
8013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_CANON_CRW3			0xb103
8023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_CANON_MOV			0xb104
8033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* MTP extensions */
8043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_MediaCard			0xb211
8053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_MediaCardGroup		0xb212
8063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_Encounter			0xb213
8073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_EncounterBox		0xb214
8083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_M4A				0xb215
8093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_ZUNEUNDEFINED		0xb217 /* Unknown file type */
8103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_Firmware			0xb802
8113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_WindowsImageFormat		0xb881
8123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_UndefinedAudio		0xb900
8133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_WMA				0xb901
8143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_OGG				0xb902
8153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AAC				0xb903
8163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AudibleCodec		0xb904
8173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_FLAC			0xb906
8183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_UndefinedVideo		0xb980
8193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_WMV				0xb981
8203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_MP4				0xb982
8213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_MP2				0xb983
8223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_3GP				0xb984
8233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_UndefinedCollection		0xba00
8243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractMultimediaAlbum	0xba01
8253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractImageAlbum		0xba02
8263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractAudioAlbum		0xba03
8273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractVideoAlbum		0xba04
8283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractAudioVideoPlaylist	0xba05
8293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractContactGroup	0xba06
8303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractMessageFolder	0xba07
8313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractChapteredProduction	0xba08
8323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractAudioPlaylist	0xba09
8333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractVideoPlaylist	0xba0a
8343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractMediacast		0xba0b
8353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_WPLPlaylist			0xba10
8363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_M3UPlaylist			0xba11
8373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_MPLPlaylist			0xba12
8383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_ASXPlaylist			0xba13
8393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_PLSPlaylist			0xba14
8403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_UndefinedDocument		0xba80
8413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractDocument		0xba81
8423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_XMLDocument			0xba82
8433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_MSWordDocument		0xba83
8443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_MHTCompiledHTMLDocument	0xba84
8453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_MSExcelSpreadsheetXLS	0xba85
8463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_MSPowerpointPresentationPPT	0xba86
8473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_UndefinedMessage		0xbb00
8483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractMessage		0xbb01
8493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_UndefinedContact		0xbb80
8503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractContact		0xbb81
8513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_vCard2			0xbb82
8523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_vCard3			0xbb83
8533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_UndefinedCalendarItem	0xbe00
8543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_AbstractCalendarItem	0xbe01
8553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_vCalendar1			0xbe02
8563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_vCalendar2			0xbe03
8573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_UndefinedWindowsExecutable	0xbe80
8583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_MediaCast			0xbe81
8593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OFC_MTP_Section			0xbe82
8603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
8613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP Association Types */
8623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_AT_Undefined			0x0000
8633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_AT_GenericFolder			0x0001
8643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_AT_Album				0x0002
8653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_AT_TimeSequence			0x0003
8663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_AT_HorizontalPanoramic		0x0004
8673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_AT_VerticalPanoramic		0x0005
8683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_AT_2DPanoramic			0x0006
8693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_AT_AncillaryData			0x0007
8703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
8713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP Protection Status */
8723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
8733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_PS_NoProtection			0x0000
8743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_PS_ReadOnly				0x0001
8753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_PS_MTP_ReadOnlyData			0x8002
8763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_PS_MTP_NonTransferableData		0x8003
8773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
8783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP Storage Types */
8793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
8803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_ST_Undefined			0x0000
8813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_ST_FixedROM				0x0001
8823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_ST_RemovableROM			0x0002
8833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_ST_FixedRAM				0x0003
8843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_ST_RemovableRAM			0x0004
8853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
8863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP FilesystemType Values */
8873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
8883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_FST_Undefined			0x0000
8893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_FST_GenericFlat			0x0001
8903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_FST_GenericHierarchical		0x0002
8913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_FST_DCF				0x0003
8923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
8933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP StorageInfo AccessCapability Values */
8943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
8953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_AC_ReadWrite			0x0000
8963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_AC_ReadOnly				0x0001
8973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_AC_ReadOnly_with_Object_Deletion	0x0002
8983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
8993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Property Describing Dataset, Range Form */
9003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevunion _PTPPropertyValue {
9023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char		*str;	/* common string, malloced */
9033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t		u8;
9043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int8_t		i8;
9053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t	u16;
9063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int16_t		i16;
9073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t	u32;
9083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int32_t		i32;
9093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint64_t	u64;
9103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int64_t		i64;
9113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* XXXX: 128 bit signed and unsigned missing */
9123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	struct array {
9133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev		uint32_t	count;
9143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev		union _PTPPropertyValue	*v;	/* malloced, count elements */
9153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	} a;
9163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
9173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef union _PTPPropertyValue PTPPropertyValue;
9193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Metadata lists for MTP operations */
9213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _MTPProperties {
9223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t 	 	property;
9233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t 	 	datatype;
9243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t 	 	ObjectHandle;
9253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPPropertyValue 	propval;
9263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
9273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _MTPProperties MTPProperties;
9283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPPropDescRangeForm {
9303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPPropertyValue 	MinimumValue;
9313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPPropertyValue 	MaximumValue;
9323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPPropertyValue 	StepSize;
9333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
9343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPPropDescRangeForm PTPPropDescRangeForm;
9353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Property Describing Dataset, Enum Form */
9373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPPropDescEnumForm {
9393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t		NumberOfValues;
9403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPPropertyValue	*SupportedValue;	/* malloced */
9413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
9423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPPropDescEnumForm PTPPropDescEnumForm;
9433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Device Property Describing Dataset (DevicePropDesc) */
9453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPDevicePropDesc {
9473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t		DevicePropertyCode;
9483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t		DataType;
9493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t			GetSet;
9503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPPropertyValue	FactoryDefaultValue;
9513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPPropertyValue	CurrentValue;
9523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t			FormFlag;
9533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	union	{
9543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev		PTPPropDescEnumForm	Enum;
9553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev		PTPPropDescRangeForm	Range;
9563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	} FORM;
9573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
9583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPDevicePropDesc PTPDevicePropDesc;
9593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Object Property Describing Dataset (DevicePropDesc) */
9613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPObjectPropDesc {
9633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t		ObjectPropertyCode;
9643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t		DataType;
9653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t			GetSet;
9663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPPropertyValue	FactoryDefaultValue;
9673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t		GroupCode;
9683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t			FormFlag;
9693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	union	{
9703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev		PTPPropDescEnumForm	Enum;
9713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev		PTPPropDescRangeForm	Range;
9723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	} FORM;
9733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
9743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPObjectPropDesc PTPObjectPropDesc;
9753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Canon filesystem's folder entry Dataset */
9773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_CANON_FilenameBufferLen	13
9793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_CANON_FolderEntryLen	28
9803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPCANONFolderEntry {
9823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t	ObjectHandle;
9833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t	ObjectFormatCode;
9843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t		Flags;
9853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t	ObjectSize;
9863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	time_t		Time;
9873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char		Filename[PTP_CANON_FilenameBufferLen];
9883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
9893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPCANONFolderEntry PTPCANONFolderEntry;
9903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Nikon Tone Curve Data */
9923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_NIKON_MaxCurvePoints 19
9943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
9953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPNIKONCoordinatePair {
9963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t		X;
9973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t		Y;
9983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
9993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPNIKONCoordinatePair PTPNIKONCoordinatePair;
10013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPNTCCoordinatePair {
10033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t		X;
10043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t		Y;
10053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
10063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPNTCCoordinatePair PTPNTCCoordinatePair;
10083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPNIKONCurveData {
10103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char 			static_preamble[6];
10113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t			XAxisStartPoint;
10123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t			XAxisEndPoint;
10133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t			YAxisStartPoint;
10143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t			YAxisEndPoint;
10153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t			MidPointIntegerPart;
10163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t			MidPointDecimalPart;
10173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t			NCoordinates;
10183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPNIKONCoordinatePair	CurveCoordinates[PTP_NIKON_MaxCurvePoints];
10193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
10203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPNIKONCurveData PTPNIKONCurveData;
10223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPEKTextParams {
10243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char	*title;
10253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char	*line[5];
10263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
10273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPEKTextParams PTPEKTextParams;
10283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Nikon Wifi profiles */
10303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPNIKONWifiProfile {
10323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* Values valid both when reading and writing profiles */
10333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char      profile_name[17];
10343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t   device_type;
10353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t   icon_type;
10363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char      essid[33];
10373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* Values only valid when reading. Some of these are in the write packet,
10393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	 * but are set automatically, like id, display_order and creation_date. */
10403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t   id;
10413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t   valid;
10423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t   display_order;
10433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char      creation_date[16];
10443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char      lastusage_date[16];
10453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* Values only valid when writing */
10473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t  ip_address;
10483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t   subnet_mask; /* first zero bit position, e.g. 24 for 255.255.255.0 */
10493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t  gateway_address;
10503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t   address_mode; /* 0 - Manual, 2-3 -  DHCP ad-hoc/managed*/
10513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t   access_mode; /* 0 - Managed, 1 - Adhoc */
10523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t   wifi_channel; /* 1-11 */
10533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t   authentification; /* 0 - Open, 1 - Shared, 2 - WPA-PSK */
10543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t   encryption; /* 0 - None, 1 - WEP 64bit, 2 - WEP 128bit (not supported: 3 - TKIP) */
10553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t   key[64];
10563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t   key_nr;
10573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev//	char      guid[16];
10583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
10593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPNIKONWifiProfile PTPNIKONWifiProfile;
10613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_CANON_EOS_CHANGES_TYPE_UNKNOWN		0
10633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_CANON_EOS_CHANGES_TYPE_OBJECTINFO		1
10643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_CANON_EOS_CHANGES_TYPE_OBJECTTRANSFER	2
10653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPCanon_New_Object {
10673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t		oid;
10683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPObjectInfo	oi;
10693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
10703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPCanon_changes_entry {
10723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int	type;
10733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	union {
10743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev		struct _PTPCanon_New_Object	object;	/* TYPE_OBJECTINFO */
10753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	} u;
10763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
10773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPCanon_changes_entry PTPCanon_changes_entry;
10783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPCanon_Property {
10803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t		size;
10813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t		type;
10823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t		proptype;
10833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	unsigned char		*data;
10843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* fill out for queries */
10863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPDevicePropDesc	dpd;
10873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} PTPCanon_Property;
10883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPCanonEOSDeviceInfo {
10903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* length */
10913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t EventsSupported_len;
10923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t *EventsSupported;
10933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t DevicePropertiesSupported_len;
10953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t *DevicePropertiesSupported;
10963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
10973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t unk_len;
10983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t *unk;
10993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} PTPCanonEOSDeviceInfo;
11003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
11013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* DataType Codes */
11023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
11033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_UNDEF		0x0000
11043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_INT8		0x0001
11053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_UINT8		0x0002
11063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_INT16		0x0003
11073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_UINT16		0x0004
11083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_INT32		0x0005
11093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_UINT32		0x0006
11103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_INT64		0x0007
11113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_UINT64		0x0008
11123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_INT128		0x0009
11133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_UINT128		0x000A
11143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
11153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_ARRAY_MASK	0x4000
11163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
11173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_AINT8		(PTP_DTC_ARRAY_MASK | PTP_DTC_INT8)
11183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_AUINT8		(PTP_DTC_ARRAY_MASK | PTP_DTC_UINT8)
11193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_AINT16		(PTP_DTC_ARRAY_MASK | PTP_DTC_INT16)
11203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_AUINT16		(PTP_DTC_ARRAY_MASK | PTP_DTC_UINT16)
11213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_AINT32		(PTP_DTC_ARRAY_MASK | PTP_DTC_INT32)
11223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_AUINT32		(PTP_DTC_ARRAY_MASK | PTP_DTC_UINT32)
11233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_AINT64		(PTP_DTC_ARRAY_MASK | PTP_DTC_INT64)
11243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_AUINT64		(PTP_DTC_ARRAY_MASK | PTP_DTC_UINT64)
11253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_AINT128		(PTP_DTC_ARRAY_MASK | PTP_DTC_INT128)
11263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_AUINT128	(PTP_DTC_ARRAY_MASK | PTP_DTC_UINT128)
11273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
11283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DTC_STR		0xFFFF
11293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
11303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Device Properties Codes */
11313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
11323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP v1.0 property codes */
11333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_Undefined		0x5000
11343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_BatteryLevel		0x5001
11353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_FunctionalMode		0x5002
11363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_ImageSize		0x5003
11373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CompressionSetting	0x5004
11383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_WhiteBalance		0x5005
11393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_RGBGain			0x5006
11403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_FNumber			0x5007
11413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_FocalLength		0x5008
11423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_FocusDistance		0x5009
11433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_FocusMode		0x500A
11443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_ExposureMeteringMode	0x500B
11453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_FlashMode		0x500C
11463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_ExposureTime		0x500D
11473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_ExposureProgramMode	0x500E
11483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_ExposureIndex		0x500F
11493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_ExposureBiasCompensation	0x5010
11503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_DateTime		0x5011
11513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CaptureDelay		0x5012
11523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_StillCaptureMode	0x5013
11533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_Contrast		0x5014
11543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_Sharpness		0x5015
11553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_DigitalZoom		0x5016
11563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_EffectMode		0x5017
11573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_BurstNumber		0x5018
11583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_BurstInterval		0x5019
11593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_TimelapseNumber		0x501A
11603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_TimelapseInterval	0x501B
11613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_FocusMeteringMode	0x501C
11623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_UploadURL		0x501D
11633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_Artist			0x501E
11643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CopyrightInfo		0x501F
11653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* PTP v1.1 property codes */
11663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_SupportedStreams	0x5020
11673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_EnabledStreams		0x5021
11683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_VideoFormat		0x5022
11693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_VideoResolution		0x5023
11703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_VideoQuality		0x5024
11713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_VideoFrameRate		0x5025
11723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_VideoContrast		0x5026
11733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_VideoBrightness		0x5027
11743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_AudioFormat		0x5028
11753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_AudioBitrate		0x5029
11763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_AudioSamplingRate	0x502A
11773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_AudioBitPerSample	0x502B
11783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_AudioVolume		0x502C
11793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
11803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Proprietary vendor extension device property mask */
11813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_EXTENSION_MASK		0xF000
11823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_EXTENSION		0xD000
11833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
11843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Zune extension device property codes */
11853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_ZUNE_UNKNOWN1	0xD181
11863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_ZUNE_UNKNOWN2	0xD132
11873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_ZUNE_UNKNOWN3	0xD215
11883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_ZUNE_UNKNOWN4	0xD216
11893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
11903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Eastman Kodak extension device property codes */
11913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_EK_ColorTemperature	0xD001
11923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_EK_DateTimeStampFormat	0xD002
11933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_EK_BeepMode		0xD003
11943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_EK_VideoOut		0xD004
11953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_EK_PowerSaving		0xD005
11963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_EK_UI_Language		0xD006
11973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
11983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Canon extension device property codes */
11993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_BeepMode		0xD001
12003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_BatteryKind	0xD002
12013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_BatteryStatus	0xD003
12023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_UILockType	0xD004
12033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_CameraMode	0xD005
12043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_ImageQuality	0xD006
12053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_FullViewFileFormat 0xD007
12063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_ImageSize		0xD008
12073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_SelfTime		0xD009
12083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_FlashMode		0xD00A
12093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_Beep		0xD00B
12103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_ShootingMode	0xD00C
12113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_ImageMode		0xD00D
12123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_DriveMode		0xD00E
12133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EZoom		0xD00F
12143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_MeteringMode	0xD010
12153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_AFDistance	0xD011
12163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_FocusingPoint	0xD012
12173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_WhiteBalance	0xD013
12183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_SlowShutterSetting	0xD014
12193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_AFMode		0xD015
12203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_ImageStabilization	0xD016
12213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_Contrast		0xD017
12223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_ColorGain		0xD018
12233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_Sharpness		0xD019
12243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_Sensitivity	0xD01A
12253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_ParameterSet	0xD01B
12263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_ISOSpeed		0xD01C
12273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_Aperture		0xD01D
12283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_ShutterSpeed	0xD01E
12293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_ExpCompensation	0xD01F
12303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_FlashCompensation	0xD020
12313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_AEBExposureCompensation	0xD021
12323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_AvOpen		0xD023
12333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_AvMax		0xD024
12343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_FocalLength	0xD025
12353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_FocalLengthTele	0xD026
12363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_FocalLengthWide	0xD027
12373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_FocalLengthDenominator	0xD028
12383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_CaptureTransferMode	0xD029
12393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define CANON_TRANSFER_ENTIRE_IMAGE_TO_PC	0x0002
12403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define CANON_TRANSFER_SAVE_THUMBNAIL_TO_DEVICE	0x0004
12413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define CANON_TRANSFER_SAVE_IMAGE_TO_DEVICE	0x0008
12423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* we use those values: */
12433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define CANON_TRANSFER_MEMORY		(2|1)
12443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define CANON_TRANSFER_CARD		(8|4|1)
12453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
12463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_Zoom		0xD02A
12473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_NamePrefix	0xD02B
12483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_SizeQualityMode	0xD02C
12493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_SupportedThumbSize	0xD02D
12503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_SizeOfOutputDataFromCamera	0xD02E
12513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_SizeOfInputDataToCamera		0xD02F
12523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_RemoteAPIVersion	0xD030
12533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_FirmwareVersion	0xD031
12543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_CameraModel	0xD032
12553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_CameraOwner	0xD033
12563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_UnixTime		0xD034
12573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_CameraBodyID	0xD035
12583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_CameraOutput	0xD036
12593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_DispAv		0xD037
12603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_AvOpenApex	0xD038
12613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_DZoomMagnification	0xD039
12623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_MlSpotPos		0xD03A
12633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_DispAvMax		0xD03B
12643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_AvMaxApex		0xD03C
12653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EZoomStartPosition		0xD03D
12663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_FocalLengthOfTele	0xD03E
12673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EZoomSizeOfTele	0xD03F
12683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_PhotoEffect	0xD040
12693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_AssistLight	0xD041
12703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_FlashQuantityCount	0xD042
12713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_RotationAngle	0xD043
12723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_RotationScene	0xD044
12733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EventEmulateMode	0xD045
12743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_DPOFVersion	0xD046
12753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_TypeOfSupportedSlideShow	0xD047
12763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_AverageFilesizes	0xD048
12773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_ModelID		0xD049
12783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
12793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* From EOS 400D trace. */
12803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_Aperture		0xD101
12813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_ShutterSpeed		0xD102
12823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_ISOSpeed		0xD103
12833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_ExpCompensation	0xD104
12843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_AutoExposureMode	0xD105
12853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_DriveMode		0xD106
12863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_MeteringMode		0xD107
12873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_FocusMode		0xD108
12883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_WhiteBalance		0xD109
12893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_ColorTemperature	0xD10A
12903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_WhiteBalanceAdjustA	0xD10B
12913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_WhiteBalanceAdjustB	0xD10C
12923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_WhiteBalanceXA	0xD10D
12933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_WhiteBalanceXB	0xD10E
12943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_ColorSpace		0xD10F
12953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PictureStyle		0xD110
12963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_BatteryPower		0xD111
12973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_BatterySelect		0xD112
12983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CameraTime		0xD113
12993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_Owner			0xD115
13003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_ModelID		0xD116
13013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PTPExtensionVersion	0xD119
13023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_DPOFVersion		0xD11A
13033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_AvailableShots	0xD11B
13043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CaptureDestination	0xD11C
13053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_BracketMode		0xD11D
13063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CurrentStorage	0xD11E
13073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CurrentFolder		0xD11F
13083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_ImageFormat		0xD120	/* file setting */
13093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_ImageFormatCF		0xD121	/* file setting CF */
13103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_ImageFormatSD		0xD122	/* file setting SD */
13113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_ImageFormatExtHD	0xD123	/* file setting exthd */
13123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CompressionS		0xD130
13133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CompressionM1		0xD131
13143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CompressionM2		0xD132
13153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CompressionL		0xD133
13163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PCWhiteBalance1	0xD140
13173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PCWhiteBalance2	0xD141
13183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PCWhiteBalance3	0xD142
13193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PCWhiteBalance4	0xD143
13203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PCWhiteBalance5	0xD144
13213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_MWhiteBalance		0xD145
13223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PictureStyleStandard	0xD150
13233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PictureStylePortrait	0xD151
13243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PictureStyleLandscape	0xD152
13253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PictureStyleNeutral	0xD153
13263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PictureStyleFaithful	0xD154
13273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PictureStyleBlackWhite	0xD155
13283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PictureStyleUserSet1	0xD160
13293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PictureStyleUserSet2	0xD161
13303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PictureStyleUserSet3	0xD162
13313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PictureStyleParam1	0xD170
13323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PictureStyleParam2	0xD171
13333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PictureStyleParam3	0xD172
13343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_FlavorLUTParams	0xD17f
13353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc1		0xD180
13363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc2		0xD181
13373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc3		0xD182
13383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc4		0xD183
13393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc5		0xD184
13403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc6		0xD185
13413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc7		0xD186
13423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc8		0xD187
13433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc9		0xD188
13443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc10		0xD189
13453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc11		0xD18a
13463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc12		0xD18b
13473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc13		0xD18c
13483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc14		0xD18d
13493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc15		0xD18e
13503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc16		0xD18f
13513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc17		0xD190
13523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc18		0xD191
13533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc19		0xD192
13543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFunc19		0xD192
13553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CustomFuncEx		0xD1a0
13563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_MyMenu		0xD1a1
13573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_MyMenuList		0xD1a2
13583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_WftStatus		0xD1a3
13593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_WftInputTransmission	0xD1a4
13603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_HDDirectoryStructure	0xD1a5
13613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_BatteryInfo		0xD1a6
13623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_AdapterInfo		0xD1a7
13633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_LensStatus		0xD1a8
13643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_QuickReviewTime	0xD1a9
13653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_CardExtension		0xD1aa
13663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_TempStatus		0xD1ab
13673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_ShutterCounter	0xD1ac
13683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_SpecialOption		0xD1ad
13693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_PhotoStudioMode	0xD1ae
13703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_SerialNumber		0xD1af
13713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_EVFOutputDevice	0xD1b0
13723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_EVFMode		0xD1b1
13733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_DepthOfFieldPreview	0xD1b2
13743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_EVFSharpness		0xD1b3
13753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_EVFWBMode		0xD1b4
13763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_EVFClickWBCoeffs	0xD1b5
13773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_EVFColorTemp		0xD1b6
13783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_ExposureSimMode	0xD1b7
13793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_EVFRecordStatus	0xD1b8
13803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_LvAfSystem		0xD1ba
13813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_MovSize		0xD1bb
13823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_LvViewTypeSelect	0xD1bc
13833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_Artist		0xD1d0
13843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_Copyright		0xD1d1
13853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_BracketValue		0xD1d2
13863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_FocusInfoEx		0xD1d3
13873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_DepthOfField		0xD1d4
13883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_Brightness		0xD1d5
13893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_LensAdjustParams	0xD1d6
13903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_EFComp		0xD1d7
13913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_LensName		0xD1d8
13923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_AEB			0xD1d9
13933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_StroboSetting		0xD1da
13943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_StroboWirelessSetting	0xD1db
13953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_StroboFiring		0xD1dc
13963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_CANON_EOS_LensID		0xD1dd
13973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
13983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Nikon extension device property codes */
13993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ShootingBank			0xD010
14003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ShootingBankNameA 		0xD011
14013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ShootingBankNameB			0xD012
14023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ShootingBankNameC			0xD013
14033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ShootingBankNameD			0xD014
14043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ResetBank0			0xD015
14053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_RawCompression			0xD016
14063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalanceAutoBias		0xD017
14073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalanceTungstenBias		0xD018
14083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalanceFluorescentBias	0xD019
14093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalanceDaylightBias		0xD01A
14103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalanceFlashBias		0xD01B
14113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalanceCloudyBias		0xD01C
14123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalanceShadeBias		0xD01D
14133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalanceColorTemperature	0xD01E
14143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalancePresetNo		0xD01F
14153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalancePresetName0		0xD020
14163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalancePresetName1		0xD021
14173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalancePresetName2		0xD022
14183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalancePresetName3		0xD023
14193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalancePresetName4		0xD024
14203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalancePresetVal0		0xD025
14213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalancePresetVal1		0xD026
14223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalancePresetVal2		0xD027
14233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalancePresetVal3		0xD028
14243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalancePresetVal4		0xD029
14253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ImageSharpening			0xD02A
14263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ToneCompensation			0xD02B
14273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ColorModel			0xD02C
14283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_HueAdjustment			0xD02D
14293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_NonCPULensDataFocalLength		0xD02E	/* Set FMM Manual */
14303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_NonCPULensDataMaximumAperture	0xD02F	/* Set F0 Manual */
14313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ShootingMode			0xD030
14323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_JPEG_Compression_Policy		0xD031
14333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ColorSpace			0xD032
14343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AutoDXCrop			0xD033
14353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_CSMMenuBankSelect			0xD040
14363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_MenuBankNameA			0xD041
14373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_MenuBankNameB			0xD042
14383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_MenuBankNameC			0xD043
14393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_MenuBankNameD			0xD044
14403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ResetBank				0xD045
14413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_A1AFCModePriority			0xD048
14423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_A2AFSModePriority			0xD049
14433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_A3GroupDynamicAF			0xD04A
14443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_A4AFActivation			0xD04B
14453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FocusAreaIllumManualFocus		0xD04C
14463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FocusAreaIllumContinuous		0xD04D
14473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FocusAreaIllumWhenSelected 	0xD04E
14483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FocusAreaWrap			0xD04F /* area sel */
14493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_VerticalAFON			0xD050
14503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AFLockOn				0xD051
14513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FocusAreaZone			0xD052
14523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_EnableCopyright			0xD053
14533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ISOAuto				0xD054
14543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_EVISOStep				0xD055
14553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_EVStep				0xD056 /* EV Step SS FN */
14563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_EVStepExposureComp		0xD057
14573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExposureCompensation		0xD058
14583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_CenterWeightArea			0xD059
14593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExposureBaseMatrix		0xD05A
14603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExposureBaseCenter		0xD05B
14613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExposureBaseSpot			0xD05C
14623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_LiveViewAF			0xD05D
14633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AELockMode			0xD05E
14643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AELAFLMode			0xD05F
14653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_MeterOff				0xD062
14663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_SelfTimer				0xD063
14673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_MonitorOff			0xD064
14683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ImgConfTime			0xD065
14693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AngleLevel			0xD067
14703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_D1ShootingSpeed			0xD068 /* continous speed low */
14713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_D2MaximumShots			0xD069
14723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_D3ExpDelayMode			0xD06A
14733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_LongExposureNoiseReduction	0xD06B
14743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FileNumberSequence		0xD06C
14753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ControlPanelFinderRearControl	0xD06D
14763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ControlPanelFinderViewfinder	0xD06E
14773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_D7Illumination			0xD06F
14783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_NrHighISO				0xD070
14793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_SHSET_CH_GUID_DISP		0xD071
14803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ArtistName			0xD072
14813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_CopyrightInfo			0xD073
14823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashSyncSpeed			0xD074
14833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashShutterSpeed			0xD075	/* SB Low Limit */
14843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_E3AAFlashMode			0xD076
14853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_E4ModelingFlash			0xD077
14863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_BracketSet			0xD078	/* Bracket Type? */
14873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_E6ManualModeBracketing		0xD079	/* Bracket Factor? */
14883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_BracketOrder			0xD07A
14893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_E8AutoBracketSelection		0xD07B	/* Bracket Method? */
14903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_BracketingSet			0xD07C
14913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_F1CenterButtonShootingMode	0xD080
14923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_CenterButtonPlaybackMode		0xD081
14933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_F2Multiselector			0xD082
14943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_F3PhotoInfoPlayback		0xD083	/* MultiSelector Dir */
14953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_F4AssignFuncButton		0xD084  /* CMD Dial Rotate */
14963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_F5CustomizeCommDials		0xD085  /* CMD Dial Change */
14973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ReverseCommandDial		0xD086  /* CMD Dial FN Set */
14983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ApertureSetting			0xD087  /* CMD Dial Active */
14993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_MenusAndPlayback			0xD088  /* CMD Dial Active */
15003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_F6ButtonsAndDials			0xD089  /* Universal Mode? */
15013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_NoCFCard				0xD08A	/* Enable Shutter? */
15023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_CenterButtonZoomRatio		0xD08B
15033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FunctionButton2			0xD08C
15043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AFAreaPoint			0xD08D
15053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_NormalAFOn			0xD08E
15063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ImageCommentString		0xD090
15073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ImageCommentEnable		0xD091
15083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ImageRotation			0xD092
15093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ManualSetLensNo			0xD093
15103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_MovScreenSize			0xD0A0
15113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_MovVoice				0xD0A1
15123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_Bracketing			0xD0C0
15133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AutoExposureBracketStep		0xD0C1
15143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AutoExposureBracketProgram	0xD0C2
15153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AutoExposureBracketCount		0xD0C3
15163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalanceBracketStep		0xD0C4
15173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WhiteBalanceBracketProgram	0xD0C5
15183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_LensID				0xD0E0
15193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_LensSort				0xD0E1
15203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_LensType				0xD0E2
15213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FocalLengthMin			0xD0E3
15223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FocalLengthMax			0xD0E4
15233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_MaxApAtMinFocalLength		0xD0E5
15243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_MaxApAtMaxFocalLength		0xD0E6
15253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FinderISODisp			0xD0F0
15263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AutoOffPhoto			0xD0F2
15273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AutoOffMenu			0xD0F3
15283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AutoOffInfo			0xD0F4
15293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_SelfTimerShootNum			0xD0F5
15303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_VignetteCtrl			0xD0F7
15313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExposureTime			0xD100	/* Shutter Speed */
15323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ACPower				0xD101
15333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WarningStatus			0xD102
15343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_MaximumShots			0xD103 /* remain shots (in RAM buffer?) */
15353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AFLockStatus			0xD104
15363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AELockStatus			0xD105
15373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FVLockStatus			0xD106
15383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AutofocusLCDTopMode2		0xD107
15393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AutofocusArea			0xD108
15403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlexibleProgram			0xD109
15413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_LightMeter			0xD10A	/* Exposure Status */
15423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_RecordingMedia			0xD10B	/* Card or SDRAM */
15433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_USBSpeed				0xD10C
15443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_CCDNumber				0xD10D
15453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_CameraOrientation			0xD10E
15463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_GroupPtnType			0xD10F
15473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FNumberLock			0xD110
15483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExposureApertureLock		0xD111	/* shutterspeed lock*/
15493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_TVLockSetting			0xD112
15503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AVLockSetting			0xD113
15513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_IllumSetting			0xD114
15523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FocusPointBright			0xD115
15533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExternalFlashAttached		0xD120
15543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExternalFlashStatus		0xD121
15553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExternalFlashSort			0xD122
15563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExternalFlashMode			0xD123
15573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExternalFlashCompensation		0xD124
15583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_NewExternalFlashMode		0xD125
15593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashExposureCompensation		0xD126
15603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_OptimizeImage			0xD140
15613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_Saturation			0xD142
15623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_BW_FillerEffect			0xD143
15633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_BW_Sharpness			0xD144
15643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_BW_Contrast			0xD145
15653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_BW_Setting_Type			0xD146
15663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_Slot2SaveMode			0xD148
15673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_RawBitMode			0xD149
15683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ISOAutoTime			0xD14E
15693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlourescentType			0xD14F
15703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_TuneColourTemperature		0xD150
15713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_TunePreset0			0xD151
15723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_TunePreset1			0xD152
15733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_TunePreset2			0xD153
15743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_TunePreset3			0xD154
15753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_TunePreset4			0xD155
15763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_BeepOff				0xD160
15773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AutofocusMode			0xD161
15783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AFAssist				0xD163
15793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_PADVPMode				0xD164	/* iso auto time */
15803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ImageReview			0xD165
15813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AFAreaIllumination		0xD166
15823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashMode				0xD167
15833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashCommanderMode		0xD168
15843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashSign				0xD169
15853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ISO_Auto				0xD16A
15863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_RemoteTimeout			0xD16B
15873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_GridDisplay			0xD16C
15883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashModeManualPower		0xD16D
15893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashModeCommanderPower		0xD16E
15903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AutoFP				0xD16F
15913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_CSMMenu				0xD180
15923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_WarningDisplay			0xD181
15933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_BatteryCellKind			0xD182
15943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ISOAutoHiLimit			0xD183
15953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_DynamicAFArea			0xD184
15963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ContinuousSpeedHigh		0xD186
15973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_InfoDispSetting			0xD187
15983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_PreviewButton			0xD189
15993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_PreviewButton2			0xD18A
16003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_AEAFLockButton2			0xD18B
16013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_IndicatorDisp			0xD18D
16023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_CellKindPriority			0xD18E
16033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_BracketingFramesAndSteps		0xD190
16043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_LiveViewMode			0xD1A0
16053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_LiveViewDriveMode			0xD1A1
16063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_LiveViewStatus			0xD1A2
16073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_LiveViewImageZoomRatio		0xD1A3
16083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_LiveViewProhibitCondition		0xD1A4
16093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExposureDisplayStatus		0xD1B0
16103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExposureIndicateStatus		0xD1B1
16113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_InfoDispErrStatus			0xD1B2
16123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ExposureIndicateLightup		0xD1B3
16133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashOpen				0xD1C0
16143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashCharged			0xD1C1
16153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashMRepeatValue			0xD1D0
16163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashMRepeatCount			0xD1D1
16173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashMRepeatInterval		0xD1D2
16183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashCommandChannel		0xD1D3
16193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashCommandSelfMode		0xD1D4
16203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashCommandSelfCompensation	0xD1D5
16213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashCommandSelfValue		0xD1D6
16223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashCommandAMode			0xD1D7
16233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashCommandACompensation		0xD1D8
16243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashCommandAValue		0xD1D9
16253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashCommandBMode			0xD1DA
16263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashCommandBCompensation		0xD1DB
16273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_FlashCommandBValue		0xD1DC
16283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ActivePicCtrlItem			0xD200
16293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_NIKON_ChangePicCtrlItem			0xD201
16303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
16313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Microsoft/MTP specific */
16323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_SecureTime				0xD101
16333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_DeviceCertificate			0xD102
16343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_RevocationInfo			0xD103
16353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_SynchronizationPartner		0xD401
16363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_DeviceFriendlyName			0xD402
16373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_VolumeLevel				0xD403
16383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_DeviceIcon				0xD405
16393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_SessionInitiatorInfo		0xD406
16403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_PerceivedDeviceType			0xD407
16413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_PlaybackRate                        0xD410
16423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_PlaybackObject                      0xD411
16433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_PlaybackContainerIndex              0xD412
16443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_PlaybackPosition                    0xD413
16453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_PlaysForSureID                      0xD131
16463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
16473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Zune specific property codes */
16483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPC_MTP_Zune_UnknownVersion			0xD181
16493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
16503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* MTP specific Object Properties */
16513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_StorageID				0xDC01
16523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ObjectFormat				0xDC02
16533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ProtectionStatus			0xDC03
16543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ObjectSize				0xDC04
16553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_AssociationType				0xDC05
16563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_AssociationDesc				0xDC06
16573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ObjectFileName				0xDC07
16583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_DateCreated				0xDC08
16593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_DateModified				0xDC09
16603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Keywords				0xDC0A
16613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ParentObject				0xDC0B
16623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_AllowedFolderContents			0xDC0C
16633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Hidden					0xDC0D
16643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_SystemObject				0xDC0E
16653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PersistantUniqueObjectIdentifier	0xDC41
16663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_SyncID					0xDC42
16673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PropertyBag				0xDC43
16683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Name					0xDC44
16693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_CreatedBy				0xDC45
16703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Artist					0xDC46
16713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_DateAuthored				0xDC47
16723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Description				0xDC48
16733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_URLReference				0xDC49
16743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_LanguageLocale				0xDC4A
16753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_CopyrightInformation			0xDC4B
16763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Source					0xDC4C
16773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_OriginLocation				0xDC4D
16783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_DateAdded				0xDC4E
16793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_NonConsumable				0xDC4F
16803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_CorruptOrUnplayable			0xDC50
16813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ProducerSerialNumber			0xDC51
16823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_RepresentativeSampleFormat		0xDC81
16833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_RepresentativeSampleSize		0xDC82
16843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_RepresentativeSampleHeight		0xDC83
16853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_RepresentativeSampleWidth		0xDC84
16863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_RepresentativeSampleDuration		0xDC85
16873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_RepresentativeSampleData		0xDC86
16883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Width					0xDC87
16893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Height					0xDC88
16903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Duration				0xDC89
16913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Rating					0xDC8A
16923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Track					0xDC8B
16933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Genre					0xDC8C
16943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Credits					0xDC8D
16953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Lyrics					0xDC8E
16963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_SubscriptionContentID			0xDC8F
16973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ProducedBy				0xDC90
16983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_UseCount				0xDC91
16993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_SkipCount				0xDC92
17003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_LastAccessed				0xDC93
17013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ParentalRating				0xDC94
17023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_MetaGenre				0xDC95
17033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Composer				0xDC96
17043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_EffectiveRating				0xDC97
17053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Subtitle				0xDC98
17063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_OriginalReleaseDate			0xDC99
17073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_AlbumName				0xDC9A
17083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_AlbumArtist				0xDC9B
17093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Mood					0xDC9C
17103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_DRMStatus				0xDC9D
17113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_SubDescription				0xDC9E
17123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_IsCropped				0xDCD1
17133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_IsColorCorrected			0xDCD2
17143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ImageBitDepth				0xDCD3
17153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Fnumber					0xDCD4
17163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ExposureTime				0xDCD5
17173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ExposureIndex				0xDCD6
17183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_DisplayName				0xDCE0
17193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_BodyText				0xDCE1
17203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Subject					0xDCE2
17213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Priority				0xDCE3
17223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_GivenName				0xDD00
17233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_MiddleNames				0xDD01
17243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_FamilyName				0xDD02
17253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Prefix					0xDD03
17263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Suffix					0xDD04
17273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PhoneticGivenName			0xDD05
17283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PhoneticFamilyName			0xDD06
17293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_EmailPrimary				0xDD07
17303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_EmailPersonal1				0xDD08
17313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_EmailPersonal2				0xDD09
17323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_EmailBusiness1				0xDD0A
17333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_EmailBusiness2				0xDD0B
17343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_EmailOthers				0xDD0C
17353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PhoneNumberPrimary			0xDD0D
17363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PhoneNumberPersonal			0xDD0E
17373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PhoneNumberPersonal2			0xDD0F
17383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PhoneNumberBusiness			0xDD10
17393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PhoneNumberBusiness2			0xDD11
17403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PhoneNumberMobile			0xDD12
17413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PhoneNumberMobile2			0xDD13
17423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_FaxNumberPrimary			0xDD14
17433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_FaxNumberPersonal			0xDD15
17443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_FaxNumberBusiness			0xDD16
17453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PagerNumber				0xDD17
17463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PhoneNumberOthers			0xDD18
17473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PrimaryWebAddress			0xDD19
17483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PersonalWebAddress			0xDD1A
17493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_BusinessWebAddress			0xDD1B
17503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_InstantMessengerAddress			0xDD1C
17513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_InstantMessengerAddress2		0xDD1D
17523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_InstantMessengerAddress3		0xDD1E
17533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressPersonalFull		0xDD1F
17543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressPersonalFullLine1		0xDD20
17553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressPersonalFullLine2		0xDD21
17563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressPersonalFullCity		0xDD22
17573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressPersonalFullRegion		0xDD23
17583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressPersonalFullPostalCode	0xDD24
17593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressPersonalFullCountry	0xDD25
17603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressBusinessFull		0xDD26
17613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressBusinessLine1		0xDD27
17623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressBusinessLine2		0xDD28
17633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressBusinessCity		0xDD29
17643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressBusinessRegion		0xDD2A
17653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressBusinessPostalCode		0xDD2B
17663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressBusinessCountry		0xDD2C
17673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressOtherFull			0xDD2D
17683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressOtherLine1			0xDD2E
17693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressOtherLine2			0xDD2F
17703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressOtherCity			0xDD30
17713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressOtherRegion		0xDD31
17723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressOtherPostalCode		0xDD32
17733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PostalAddressOtherCountry		0xDD33
17743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_OrganizationName			0xDD34
17753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_PhoneticOrganizationName		0xDD35
17763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Role					0xDD36
17773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Birthdate				0xDD37
17783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_MessageTo				0xDD40
17793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_MessageCC				0xDD41
17803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_MessageBCC				0xDD42
17813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_MessageRead				0xDD43
17823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_MessageReceivedTime			0xDD44
17833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_MessageSender				0xDD45
17843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ActivityBeginTime			0xDD50
17853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ActivityEndTime				0xDD51
17863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ActivityLocation			0xDD52
17873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ActivityRequiredAttendees		0xDD54
17883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ActivityOptionalAttendees		0xDD55
17893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ActivityResources			0xDD56
17903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ActivityAccepted			0xDD57
17913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Owner					0xDD5D
17923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Editor					0xDD5E
17933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_Webmaster				0xDD5F
17943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_URLSource				0xDD60
17953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_URLDestination				0xDD61
17963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_TimeBookmark				0xDD62
17973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ObjectBookmark				0xDD63
17983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ByteBookmark				0xDD64
17993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_LastBuildDate				0xDD70
18003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_TimetoLive				0xDD71
18013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_MediaGUID				0xDD72
18023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_TotalBitRate				0xDE91
18033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_BitRateType				0xDE92
18043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_SampleRate				0xDE93
18053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_NumberOfChannels			0xDE94
18063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_AudioBitDepth				0xDE95
18073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_ScanDepth				0xDE97
18083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_AudioWAVECodec				0xDE99
18093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_AudioBitRate				0xDE9A
18103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_VideoFourCCCodec			0xDE9B
18113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_VideoBitRate				0xDE9C
18123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_FramesPerThousandSeconds		0xDE9D
18133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_KeyFrameDistance			0xDE9E
18143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_BufferSize				0xDE9F
18153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_EncodingQuality				0xDEA0
18163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_EncodingProfile				0xDEA1
18173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_BuyFlag					0xD901
18183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* WiFi Provisioning MTP Extension property codes */
18203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPC_WirelessConfigurationFile		0xB104
18213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Device Property Form Flag */
18233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPFF_None			0x00
18253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPFF_Range			0x01
18263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPFF_Enumeration		0x02
18273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Object Property Codes used by MTP (first 3 are same as DPFF codes) */
18293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPFF_None			0x00
18303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPFF_Range			0x01
18313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPFF_Enumeration		0x02
18323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPFF_DateTime		0x03
18333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPFF_FixedLengthArray	0x04
18343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPFF_RegularExpression	0x05
18353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPFF_ByteArray		0x06
18363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_OPFF_LongString		0xFF
18373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Device Property GetSet type */
18393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPGS_Get			0x00
18403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_DPGS_GetSet			0x01
18413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Glue stuff starts here */
18433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPParams PTPParams;
18453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef uint16_t (* PTPDataGetFunc)	(PTPParams* params, void*priv,
18483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev					unsigned long wantlen,
18493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	                                unsigned char *data, unsigned long *gotlen);
18503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef uint16_t (* PTPDataPutFunc)	(PTPParams* params, void*priv,
18523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev					unsigned long sendlen,
18533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	                                unsigned char *data, unsigned long *putlen);
18543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPDataHandler {
18553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPDataGetFunc		getfunc;
18563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPDataPutFunc		putfunc;
18573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	void			*priv;
18583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} PTPDataHandler;
18593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/*
18613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This functions take PTP oriented arguments and send them over an
18623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * appropriate data layer doing byteorder conversion accordingly.
18633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
18643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef uint16_t (* PTPIOSendReq)	(PTPParams* params, PTPContainer* req);
18653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef uint16_t (* PTPIOSendData)	(PTPParams* params, PTPContainer* ptp,
18663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev					 unsigned long size, PTPDataHandler*getter);
18673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef uint16_t (* PTPIOGetResp)	(PTPParams* params, PTPContainer* resp);
18693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef uint16_t (* PTPIOGetData)	(PTPParams* params, PTPContainer* ptp,
18703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	                                 PTPDataHandler *putter);
18713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef uint16_t (* PTPIOCancelReq)	(PTPParams* params, uint32_t transaction_id);
18723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* debug functions */
18743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef void (* PTPErrorFunc) (void *data, const char *format, va_list args)
18753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#if (__GNUC__ >= 3)
18763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	__attribute__((__format__(printf,2,0)))
18773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif
18783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev;
18793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef void (* PTPDebugFunc) (void *data, const char *format, va_list args)
18803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#if (__GNUC__ >= 3)
18813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	__attribute__((__format__(printf,2,0)))
18823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif
18833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev;
18843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPObject {
18863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t	oid;
18873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	unsigned int	flags;
18883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPOBJECT_OBJECTINFO_LOADED	(1<<0)
18893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPOBJECT_CANONFLAGS_LOADED	(1<<1)
18903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPOBJECT_MTPPROPLIST_LOADED	(1<<2)
18913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPOBJECT_DIRECTORY_LOADED	(1<<3)
18923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPOBJECT_PARENTOBJECT_LOADED	(1<<4)
18933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTPOBJECT_STORAGEID_LOADED	(1<<5)
18943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
18953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPObjectInfo	oi;
18963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t	canon_flags;
18973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	MTPProperties	*mtpprops;
18983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int		nrofmtpprops;
18993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
19003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtypedef struct _PTPObject PTPObject;
19013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstruct _PTPParams {
19033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* device flags */
19043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t	device_flags;
19053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* data layer byteorder */
19073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t		byteorder;
19083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t	maxpacketsize;
19093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* PTP IO: Custom IO functions */
19113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPIOSendReq	sendreq_func;
19123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPIOSendData	senddata_func;
19133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPIOGetResp	getresp_func;
19143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPIOGetData	getdata_func;
19153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPIOGetResp	event_check;
19163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPIOGetResp	event_wait;
19173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPIOCancelReq	cancelreq_func;
19183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* Custom error and debug function */
19203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPErrorFunc	error_func;
19213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPDebugFunc	debug_func;
19223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* Data passed to above functions */
19243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	void		*data;
19253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* ptp transaction ID */
19273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t	transaction_id;
19283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* ptp session ID */
19293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t	session_id;
19303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* PTP IO: if we have MTP style split header/data transfers */
19323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int		split_header_data;
19333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* PTP: internal structures used by ptp driver */
19353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPObject	*objects;
19363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int		nrofobjects;
19373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPDeviceInfo	deviceinfo;
19393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* PTP: the current event queue */
19413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPContainer	*events;
19423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int		nrofevents;
19433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* PTP: Canon specific flags list */
19453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPCanon_Property	*canon_props;
19463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int			nrofcanon_props;
19473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int			canon_viewfinder_on;
19483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* PTP: Canon EOS event queue */
19503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPCanon_changes_entry	*backlogentries;
19513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int			nrofbacklogentries;
19523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int			eos_captureenabled;
19533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* PTP: Wifi profiles */
19553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t 	wifi_profiles_version;
19563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t		wifi_profiles_number;
19573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	PTPNIKONWifiProfile *wifi_profiles;
19583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* IO: PTP/IP related data */
19603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	int		cmdfd, evtfd;
19613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t		cameraguid[16];
19623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint32_t	eventpipeid;
19633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	char		*cameraname;
19643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifdef HAVE_ICONV
19663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* PTP: iconv converters */
19673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	iconv_t	cd_locale_to_ucs2;
19683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	iconv_t cd_ucs2_to_locale;
19693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif
19703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	/* IO: Sometimes the response packet get send in the dataphase
19723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	 * too. This only happens for a Samsung player now.
19733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	 */
19743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint8_t		*response_packet;
19753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	uint16_t	response_packet_size;
19763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev};
19773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* last, but not least - ptp functions */
19793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_usb_sendreq	(PTPParams* params, PTPContainer* req);
19803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_usb_senddata	(PTPParams* params, PTPContainer* ptp,
19813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				 unsigned long size, PTPDataHandler *handler);
19823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_usb_getresp	(PTPParams* params, PTPContainer* resp);
19833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_usb_getdata	(PTPParams* params, PTPContainer* ptp,
19843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	                         PTPDataHandler *handler);
19853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_usb_event_check	(PTPParams* params, PTPContainer* event);
19863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_usb_event_wait	(PTPParams* params, PTPContainer* event);
19873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_usb_control_get_extended_event_data (PTPParams *params, char *buffer, int *size);
19893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_usb_control_device_reset_request (PTPParams *params);
19903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_usb_control_get_device_status (PTPParams *params, char *buffer, int *size);
19913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_usb_control_cancel_request (PTPParams *params, uint32_t transid);
19923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
19943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint      ptp_ptpip_connect	(PTPParams* params, const char *port);
19953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ptpip_sendreq	(PTPParams* params, PTPContainer* req);
19963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ptpip_senddata	(PTPParams* params, PTPContainer* ptp,
19973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				unsigned long size, PTPDataHandler *handler);
19983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ptpip_getresp	(PTPParams* params, PTPContainer* resp);
19993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ptpip_getdata	(PTPParams* params, PTPContainer* ptp,
20003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	                         PTPDataHandler *handler);
20013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ptpip_event_wait	(PTPParams* params, PTPContainer* event);
20023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ptpip_event_check	(PTPParams* params, PTPContainer* event);
20033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
20043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_getdeviceinfo	(PTPParams* params, PTPDeviceInfo* deviceinfo);
20053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
20063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_generic_no_data	(PTPParams* params, uint16_t opcode, unsigned int cnt, ...);
20073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
20083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_opensession	(PTPParams *params, uint32_t session);
20093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
20103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
20113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_closesession:
20123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
20133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
20143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Closes session.
20153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
20163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
20173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
20183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_closesession(params) ptp_generic_no_data(params,PTP_OC_CloseSession,0)
20193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
20203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_resetdevice:
20213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
20223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
20233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Uses the built-in function to reset the device
20243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
20253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
20263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
20273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
20283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_resetdevice(params) ptp_generic_no_data(params,PTP_OC_ResetDevice,0)
20293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
20303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_getstorageids	(PTPParams* params, PTPStorageIDs* storageids);
20313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_getstorageinfo 	(PTPParams* params, uint32_t storageid,
20323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				PTPStorageInfo* storageinfo);
20333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
20343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_formatstore:
20353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
20363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *              storageid               - StorageID
20373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
20383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Formats the storage on the device.
20393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
20403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
20413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
20423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_formatstore(params,storageid) ptp_generic_no_data(params,PTP_OC_FormatStore,1,storageid)
20433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
20443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_getobjecthandles 	(PTPParams* params, uint32_t storage,
20453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t objectformatcode,
20463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t associationOH,
20473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				PTPObjectHandles* objecthandles);
20483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
20493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_getnumobjects 	(PTPParams* params, uint32_t storage,
20503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t objectformatcode,
20513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t associationOH,
20523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t* numobs);
20533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
20543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_getobjectinfo	(PTPParams *params, uint32_t handle,
20553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				PTPObjectInfo* objectinfo);
20563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
20573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_getobject		(PTPParams *params, uint32_t handle,
20583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				unsigned char** object);
20593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_getobject_tofd     (PTPParams* params, uint32_t handle, int fd);
20603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_getobject_to_handler (PTPParams* params, uint32_t handle, PTPDataHandler*);
20613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_getpartialobject	(PTPParams* params, uint32_t handle, uint32_t offset,
20623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t maxbytes, unsigned char** object);
20633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_getthumb		(PTPParams *params, uint32_t handle,
20643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				unsigned char** object);
20653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
20663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_deleteobject	(PTPParams* params, uint32_t handle,
20673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t ofc);
20683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
20693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_sendobjectinfo	(PTPParams* params, uint32_t* store,
20703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t* parenthandle, uint32_t* handle,
20713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				PTPObjectInfo* objectinfo);
20723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
20733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_setobjectprotection:
20743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
20753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *              uint16_t newprot        - object protection flag
20763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
20773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Set protection of object.
20783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
20793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
20803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
20813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
20823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_setobjectprotection(params,oid,newprot) ptp_generic_no_data(params,PTP_OC_SetObjectProtection,2,oid,newprot)
20833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_sendobject		(PTPParams* params, unsigned char* object,
20843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				 uint32_t size);
20853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_sendobject_fromfd  (PTPParams* params, int fd, uint32_t size);
20863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_sendobject_from_handler  (PTPParams* params, PTPDataHandler*, uint32_t size);
20873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
20883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_initiatecapture:
20893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
20903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *              storageid               - destination StorageID on Responder
20913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *              ofc                     - object format code
20923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
20933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Causes device to initiate the capture of one or more new data objects
20943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * according to its current device properties, storing the data into store
20953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * indicated by storageid. If storageid is 0x00000000, the object(s) will
20963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * be stored in a store that is determined by the capturing device.
20973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * The capturing of new data objects is an asynchronous operation.
20983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
20993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
21003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
21013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_initiatecapture(params,storageid,ofc) ptp_generic_no_data(params,PTP_OC_InitiateCapture,2,storageid,ofc)
21023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
21033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_getdevicepropdesc	(PTPParams* params, uint16_t propcode,
21043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				PTPDevicePropDesc *devicepropertydesc);
21053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_getdevicepropvalue	(PTPParams* params, uint16_t propcode,
21063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				PTPPropertyValue* value, uint16_t datatype);
21073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_setdevicepropvalue (PTPParams* params, uint16_t propcode,
21083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev                        	PTPPropertyValue* value, uint16_t datatype);
21093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
21103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
21113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_check_event (PTPParams *params);
21123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint ptp_get_one_event (PTPParams *params, PTPContainer *evt);
21133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
21143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Microsoft MTP extensions */
21153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_mtp_getobjectpropdesc (PTPParams* params, uint16_t opc, uint16_t ofc,
21163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				PTPObjectPropDesc *objectpropertydesc);
21173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_mtp_getobjectpropvalue (PTPParams* params, uint32_t oid, uint16_t opc,
21183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				PTPPropertyValue *value, uint16_t datatype);
21193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_mtp_setobjectpropvalue (PTPParams* params, uint32_t oid, uint16_t opc,
21203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				PTPPropertyValue *value, uint16_t datatype);
21213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_mtp_getobjectreferences (PTPParams* params, uint32_t handle, uint32_t** ohArray, uint32_t* arraylen);
21223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_mtp_setobjectreferences (PTPParams* params, uint32_t handle, uint32_t* ohArray, uint32_t arraylen);
21233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_mtp_getobjectproplist (PTPParams* params, uint32_t handle, MTPProperties **props, int *nrofprops);
21243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_mtp_sendobjectproplist (PTPParams* params, uint32_t* store, uint32_t* parenthandle, uint32_t* handle,
21253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				     uint16_t objecttype, uint64_t objectsize, MTPProperties *props, int nrofprops);
21263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_mtp_setobjectproplist (PTPParams* params, MTPProperties *props, int nrofprops);
21273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
21283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Eastman Kodak extensions */
21293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ek_9007 (PTPParams* params, unsigned char **serial, unsigned int *size);
21303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ek_9009 (PTPParams* params, uint32_t*, uint32_t*);
21313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ek_900c (PTPParams* params, unsigned char **serial, unsigned int *size);
21323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ek_getserial (PTPParams* params, unsigned char **serial, unsigned int *size);
21333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ek_setserial (PTPParams* params, unsigned char *serial, unsigned int size);
21343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ek_settext (PTPParams* params, PTPEKTextParams *text);
21353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ek_sendfileobjectinfo (PTPParams* params, uint32_t* store,
21363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t* parenthandle, uint32_t* handle,
21373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				PTPObjectInfo* objectinfo);
21383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ek_sendfileobject	(PTPParams* params, unsigned char* object,
21393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t size);
21403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_ek_sendfileobject_from_handler	(PTPParams* params, PTPDataHandler*,
21413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t size);
21423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
21433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Canon PTP extensions */
21443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_9012(params) ptp_generic_no_data(params,0x9012,0)
21453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_gettreeinfo (PTPParams* params, uint32_t* out);
21463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_gettreesize (PTPParams* params, PTPCanon_directtransfer_entry**, unsigned int*cnt);
21473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_getpartialobjectinfo (PTPParams* params, uint32_t handle,
21483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t p2, uint32_t* size, uint32_t* rp2);
21493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
21503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_get_mac_address (PTPParams* params, unsigned char **mac);
21513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
21523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_startshootingmode:
21533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
21543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
21553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Starts shooting session. It emits a StorageInfoChanged
21563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * event via the interrupt pipe and pushes the StorageInfoChanged
21573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * and CANON_CameraModeChange events onto the event stack
21583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * (see operation PTP_OC_CANON_CheckEvent).
21593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
21603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
21613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
21623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
21633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_startshootingmode(params) ptp_generic_no_data(params,PTP_OC_CANON_InitiateReleaseControl,0)
21643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
21653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_endshootingmode:
21663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
21673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
21683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This operation is observed after pressing the Disconnect
21693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * button on the Remote Capture app. It emits a StorageInfoChanged
21703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * event via the interrupt pipe and pushes the StorageInfoChanged
21713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * and CANON_CameraModeChange events onto the event stack
21723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * (see operation PTP_OC_CANON_CheckEvent).
21733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
21743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
21753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
21763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
21773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_endshootingmode(params) ptp_generic_no_data(params,PTP_OC_CANON_TerminateReleaseControl,0)
21783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
21793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_viewfinderon:
21803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
21813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
21823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Prior to start reading viewfinder images, one  must call this operation.
21833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Supposedly, this operation affects the value of the CANON_ViewfinderMode
21843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * property.
21853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
21863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
21873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
21883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
21893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_viewfinderon(params) ptp_generic_no_data(params,PTP_OC_CANON_ViewfinderOn,0)
21903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
21913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_viewfinderoff:
21923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
21933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
21943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Before changing the shooting mode, or when one doesn't need to read
21953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * viewfinder images any more, one must call this operation.
21963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Supposedly, this operation affects the value of the CANON_ViewfinderMode
21973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * property.
21983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
21993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
22003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
22023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_viewfinderoff(params) ptp_generic_no_data(params,PTP_OC_CANON_ViewfinderOff,0)
22033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
22043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_reset_aeafawb:
22053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
22063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *              uint32_t flags  - what shall be reset.
22073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *                      1 - autoexposure
22083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *                      2 - autofocus
22093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *                      4 - autowhitebalance
22103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Called "Reset AeAfAwb" (auto exposure, focus, white balance)
22123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
22143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
22153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_CANON_RESET_AE	0x1
22163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_CANON_RESET_AF	0x2
22173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define PTP_CANON_RESET_AWB	0x4
22183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_reset_aeafawb(params,flags) ptp_generic_no_data(params,PTP_OC_CANON_DoAeAfAwb,1,flags)
22193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_checkevent (PTPParams* params,
22203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				PTPContainer* event, int* isevent);
22213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
22223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_focuslock:
22233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This operation locks the focus. It is followed by the CANON_GetChanges(?)
22253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * operation in the log.
22263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * It affects the CANON_MacroMode property.
22273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
22293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
22313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
22333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_focuslock(params) ptp_generic_no_data(params,PTP_OC_CANON_FocusLock,0)
22343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
22353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_focusunlock:
22363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This operation unlocks the focus. It is followed by the CANON_GetChanges(?)
22383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * operation in the log.
22393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * It sets the CANON_MacroMode property value to 1 (where it occurs in the log).
22403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
22423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
22443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
22463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_focusunlock(params) ptp_generic_no_data(params,PTP_OC_CANON_FocusUnlock,0)
22473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
22483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_keepdeviceon:
22493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This operation sends a "ping" style message to the camera.
22513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
22533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
22553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
22573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_keepdeviceon(params) ptp_generic_no_data(params,PTP_OC_CANON_KeepDeviceOn,0)
22583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
22593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_eos_keepdeviceon:
22603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This operation sends a "ping" style message to the camera.
22623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
22643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
22663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
22683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_eos_keepdeviceon(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_KeepDeviceOn,0)
22693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
22703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_initiatecaptureinmemory:
22713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This operation starts the image capture according to the current camera
22733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * settings. When the capture has happened, the camera emits a CaptureComplete
22743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * event via the interrupt pipe and pushes the CANON_RequestObjectTransfer,
22753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * CANON_DeviceInfoChanged and CaptureComplete events onto the event stack
22763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * (see operation CANON_CheckEvent). From the CANON_RequestObjectTransfer
22773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * event's parameter one can learn the just captured image's ObjectHandle.
22783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * The image is stored in the camera's own RAM.
22793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * On the next capture the image will be overwritten!
22803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
22823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
22843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
22863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_initiatecaptureinmemory(params) ptp_generic_no_data(params,PTP_OC_CANON_InitiateCaptureInMemory,0)
22873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
22883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_eos_requestdevicepropvalue:
22893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This operation sends a "ping" style message to the camera.
22913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
22933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
22953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
22963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
22973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_eos_requestdevicepropvalue(params,prop) ptp_generic_no_data(params,PTP_OC_CANON_EOS_RequestDevicePropValue,1,prop)
22983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
22993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_eos_capture:
23003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This starts a EOS400D style capture. You have to use the
23023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * 0x9116 command to poll for its completion.
23033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * The image is saved on the CF Card currently.
23043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
23063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
23083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
23103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_eos_capture(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_RemoteRelease,0)
23113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_eos_getevent (PTPParams* params, PTPCanon_changes_entry **entries, int *nrofentries);
23123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_getpartialobject (PTPParams* params, uint32_t handle,
23133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t offset, uint32_t size,
23143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t pos, unsigned char** block,
23153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t* readnum);
23163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_getviewfinderimage (PTPParams* params, unsigned char** image,
23173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t* size);
23183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_getchanges (PTPParams* params, uint16_t** props,
23193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t* propnum);
23203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_getobjectinfo (PTPParams* params, uint32_t store,
23213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t p2, uint32_t parenthandle,
23223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t handle,
23233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				PTPCANONFolderEntry** entries,
23243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				uint32_t* entnum);
23253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_eos_getdeviceinfo (PTPParams* params, PTPCanonEOSDeviceInfo*di);
23263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
23273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_eos_setuilock:
23283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This command sets UI lock
23303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
23323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
23343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
23363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_eos_setuilock(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_SetUILock,0)
23373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
23383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_eos_resetuilock:
23393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This command sets UI lock
23413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
23433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
23453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
23473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_eos_resetuilock(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_ResetUILock,0)
23483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
23493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_eos_start_viewfinder:
23503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This command starts Viewfinder mode of newer Canon DSLRs.
23523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
23543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
23563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
23583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_eos_start_viewfinder(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_InitiateViewfinder,0)
23593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
23603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_eos_end_viewfinder:
23613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This command ends Viewfinder mode of newer Canon DSLRs.
23633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
23653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
23673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
23693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_eos_end_viewfinder(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_TerminateViewfinder,0)
23703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_eos_get_viewfinder_image (PTPParams* params, unsigned char **data, unsigned int *size);
23713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_get_objecthandle_by_name (PTPParams* params, char* name, uint32_t* objectid);
23723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_get_directory (PTPParams* params, PTPObjectHandles *handles, PTPObjectInfo **oinfos, uint32_t **flags);
23733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
23743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_setobjectarchive:
23753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
23773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *              uint32_t        objectid
23783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *              uint32_t        flags
23793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
23813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
23833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_setobjectarchive(params,oid,flags) ptp_generic_no_data(params,PTP_OC_CANON_SetObjectArchive,2,oid,flags)
23843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_get_customize_data (PTPParams* params, uint32_t themenr,
23853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				unsigned char **data, unsigned int *size);
23863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_getpairinginfo (PTPParams* params, uint32_t nr, unsigned char**, unsigned int*);
23873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
23883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_eos_getstorageids (PTPParams* params, PTPStorageIDs* storageids);
23893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_eos_getstorageinfo (PTPParams* params, uint32_t p1);
23903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_eos_getpartialobject (PTPParams* params, uint32_t oid, uint32_t off, uint32_t xsize, unsigned char**data);
23913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_eos_setdevicepropvalueex (PTPParams* params, unsigned char* data, unsigned int size);
23923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_eos_setremotemode(params,p1) ptp_generic_no_data(params,PTP_OC_CANON_EOS_SetRemoteMode,1,p1)
23933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_eos_seteventmode(params,p1) ptp_generic_no_data(params,PTP_OC_CANON_EOS_SetEventMode,1,p1)
23943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
23953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_canon_eos_transfercomplete:
23963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This ends a direct object transfer from an EOS camera.
23983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
23993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
24003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *              oid             Object ID
24013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
24033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
24053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_eos_transfercomplete(params,oid) ptp_generic_no_data(params,PTP_OC_CANON_EOS_TransferComplete,1,oid)
24063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* inHDD = %d, inLength =%d, inReset = %d */
24073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_eos_pchddcapacity(params,p1,p2,p3) ptp_generic_no_data(params,PTP_OC_CANON_EOS_PCHDDCapacity,3,p1,p2,p3)
24083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_eos_bulbstart(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_BulbStart,1)
24093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_canon_eos_bulbend(params) ptp_generic_no_data(params,PTP_OC_CANON_EOS_BulbEnd,1)
24103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_eos_getdevicepropdesc (PTPParams* params, uint16_t propcode,
24113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				PTPDevicePropDesc *devicepropertydesc);
24123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_canon_eos_setdevicepropvalue (PTPParams* params, uint16_t propcode,
24133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev                        	PTPPropertyValue* value, uint16_t datatype);
24143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_nikon_get_vendorpropcodes (PTPParams* params, uint16_t **props, unsigned int *size);
24153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_nikon_curve_download (PTPParams* params,
24163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev				unsigned char **data, unsigned int *size);
24173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_nikon_getptpipinfo (PTPParams* params, unsigned char **data, unsigned int *size);
24183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_nikon_getwifiprofilelist (PTPParams* params);
24193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_nikon_writewifiprofile (PTPParams* params, PTPNIKONWifiProfile* profile);
24203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
24213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_nikon_deletewifiprofile:
24223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This command deletes a wifi profile.
24243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
24263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *      unsigned int profilenr  - profile number
24273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
24293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
24313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_nikon_deletewifiprofile(params,profilenr) ptp_generic_no_data(params,PTP_OC_NIKON_DeleteProfile,1,profilenr)
24323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
24333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_nikon_setcontrolmode:
24343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This command can switch the camera to full PC control mode.
24363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
24383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *      uint32_t mode - mode
24393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
24413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
24433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_nikon_setcontrolmode(params,mode) ptp_generic_no_data(params,PTP_OC_NIKON_SetControlMode,1,mode)
24443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
24453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_nikon_afdrive:
24463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This command runs (drives) the lens autofocus.
24483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
24503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
24523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
24543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_nikon_afdrive(params) ptp_generic_no_data(params,PTP_OC_NIKON_AfDrive,0)
24553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
24563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_nikon_mfdrive:
24573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This command runs (drives) the lens autofocus.
24593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
24613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * flag:        0x1 for (no limit - closest), 0x2 for (closest - no limit)
24623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * amount:      amount of steps
24633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
24653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
24673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_nikon_mfdrive(params,flag,amount) ptp_generic_no_data(params,PTP_OC_NIKON_MfDrive,2,flag,amount)
24683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
24693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_nikon_capture:
24703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This command captures a picture on the Nikon.
24723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
24743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *      uint32_t x - unknown parameter. seen to be -1.
24753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
24773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
24793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_nikon_capture(params,x) ptp_generic_no_data(params,PTP_OC_NIKON_Capture,1,x)
24803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
24813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_nikon_capture_sdram:
24823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This command captures a picture on the Nikon.
24843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
24863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
24883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
24903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_nikon_capture_sdram(params) ptp_generic_no_data(params,PTP_OC_NIKON_AfCaptureSDRAM,0)
24913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
24923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_nikon_start_liveview:
24933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This command starts LiveView mode of newer Nikons DSLRs.
24953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
24973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
24983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
24993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
25003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
25013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_nikon_start_liveview(params) ptp_generic_no_data(params,PTP_OC_NIKON_StartLiveView,0)
25023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_nikon_get_liveview_image (PTPParams* params, unsigned char**,unsigned int*);
25033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_nikon_get_preview_image (PTPParams* params, unsigned char**, unsigned int*, uint32_t*);
25043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
25053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_nikon_end_liveview:
25063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
25073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This command ends LiveView mode of newer Nikons DSLRs.
25083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
25093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
25103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
25113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
25123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
25133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
25143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_nikon_end_liveview(params) ptp_generic_no_data(params,PTP_OC_NIKON_EndLiveView,0)
25153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_nikon_check_event (PTPParams* params, PTPContainer **evt, int *evtcnt);
25163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_nikon_getfileinfoinblock (PTPParams* params, uint32_t p1, uint32_t p2, uint32_t p3,
25173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev					unsigned char **data, unsigned int *size);
25183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
25193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * ptp_nikon_device_ready:
25203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
25213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This command checks if the device is ready. Used after
25223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * a capture.
25233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
25243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * params:      PTPParams*
25253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
25263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Return values: Some PTP_RC_* code.
25273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
25283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev **/
25293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#define ptp_nikon_device_ready(params) ptp_generic_no_data (params, PTP_OC_NIKON_DeviceReady, 0)
25303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_mtp_getobjectpropssupported (PTPParams* params, uint16_t ofc, uint32_t *propnum, uint16_t **props);
25313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
25323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Non PTP protocol functions */
25333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint ptp_operation_issupported	(PTPParams* params, uint16_t operation);
25343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint ptp_event_issupported	(PTPParams* params, uint16_t event);
25353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint ptp_property_issupported	(PTPParams* params, uint16_t property);
25363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
25373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid ptp_free_devicepropdesc	(PTPDevicePropDesc* dpd);
25383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid ptp_free_devicepropvalue	(uint16_t dt, PTPPropertyValue* dpd);
25393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid ptp_free_objectpropdesc	(PTPObjectPropDesc* dpd);
25403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid ptp_free_params		(PTPParams *params);
25413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid ptp_free_objectinfo	(PTPObjectInfo *oi);
25423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid ptp_free_object		(PTPObject *oi);
25433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
25443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid ptp_perror			(PTPParams* params, uint16_t error);
25453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
25463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevconst char*
25473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevptp_get_property_description(PTPParams* params, uint16_t dpc);
25483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
25493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint
25503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevptp_render_property_value(PTPParams* params, uint16_t dpc,
25513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev                          PTPDevicePropDesc *dpd, int length, char *out);
25523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint ptp_render_ofc(PTPParams* params, uint16_t ofc, int spaceleft, char *txt);
25533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint ptp_render_opcode(PTPParams* params, uint16_t opcode, int spaceleft, char *txt);
25543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint ptp_render_mtp_propname(uint16_t propid, int spaceleft, char *txt);
25553aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevMTPProperties *ptp_get_new_object_prop_entry(MTPProperties **props, int *nrofprops);
25563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid ptp_destroy_object_prop(MTPProperties *prop);
25573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid ptp_destroy_object_prop_list(MTPProperties *props, int nrofprops);
25583aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevMTPProperties *ptp_find_object_prop_in_cache(PTPParams *params, uint32_t const handle, uint32_t const attribute_id);
25593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid ptp_remove_object_from_cache(PTPParams *params, uint32_t handle);
25603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_add_object_to_cache(PTPParams *params, uint32_t handle);
25613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_object_want (PTPParams *, uint32_t handle, int want, PTPObject**retob);
25623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid ptp_objects_sort (PTPParams *);
25633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_object_find (PTPParams *params, uint32_t handle, PTPObject **retob);
25643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevuint16_t ptp_object_find_or_insert (PTPParams *params, uint32_t handle, PTPObject **retob);
25653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* ptpip.c */
25663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevvoid ptp_nikon_getptpipguid (unsigned char* guid);
25673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
25683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifdef __cplusplus
25693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}
25703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif /* __cplusplus */
25713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
25723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif /* __PTP_H__ */
2573