summaryrefslogblamecommitdiffstats
path: root/mtp/ffs/mtp.h
blob: 9f6c3239ab27302567a9748091a87eeec22cad67 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616







































































































































































































































































































































































































































































































































































































































                                                                                                                                                                                                                                                                              
/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *		http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef _MTP_H
#define _MTP_H

#include <stdint.h>
#include <stdlib.h>

#define MTP_STANDARD_VERSION			100

// Container Types
#define MTP_CONTAINER_TYPE_UNDEFINED	0
#define MTP_CONTAINER_TYPE_COMMAND		1
#define MTP_CONTAINER_TYPE_DATA			2
#define MTP_CONTAINER_TYPE_RESPONSE		3
#define MTP_CONTAINER_TYPE_EVENT		4

// Container Offsets
#define MTP_CONTAINER_LENGTH_OFFSET				0
#define MTP_CONTAINER_TYPE_OFFSET				4
#define MTP_CONTAINER_CODE_OFFSET				6
#define MTP_CONTAINER_TRANSACTION_ID_OFFSET		8
#define MTP_CONTAINER_PARAMETER_OFFSET			12
#define MTP_CONTAINER_HEADER_SIZE				12

// Maximum buffer size for a MTP packet.
#define MTP_BUFFER_SIZE 16384

// MTP Data Types
#define MTP_TYPE_UNDEFINED		0x0000			// Undefined
#define MTP_TYPE_INT8			0x0001			// Signed 8-bit integer
#define MTP_TYPE_UINT8			0x0002			// Unsigned 8-bit integer
#define MTP_TYPE_INT16			0x0003			// Signed 16-bit integer
#define MTP_TYPE_UINT16			0x0004			// Unsigned 16-bit integer
#define MTP_TYPE_INT32			0x0005			// Signed 32-bit integer
#define MTP_TYPE_UINT32			0x0006			// Unsigned 32-bit integer
#define MTP_TYPE_INT64			0x0007			// Signed 64-bit integer
#define MTP_TYPE_UINT64			0x0008			// Unsigned 64-bit integer
#define MTP_TYPE_INT128			0x0009			// Signed 128-bit integer
#define MTP_TYPE_UINT128		0x000A			// Unsigned 128-bit integer
#define MTP_TYPE_AINT8			0x4001			// Array of signed 8-bit integers
#define MTP_TYPE_AUINT8			0x4002			// Array of unsigned 8-bit integers
#define MTP_TYPE_AINT16			0x4003			// Array of signed 16-bit integers
#define MTP_TYPE_AUINT16		0x4004			// Array of unsigned 16-bit integers
#define MTP_TYPE_AINT32			0x4005			// Array of signed 32-bit integers
#define MTP_TYPE_AUINT32		0x4006			// Array of unsigned 32-bit integers
#define MTP_TYPE_AINT64			0x4007			// Array of signed 64-bit integers
#define MTP_TYPE_AUINT64		0x4008			// Array of unsigned 64-bit integers
#define MTP_TYPE_AINT128		0x4009			// Array of signed 128-bit integers
#define MTP_TYPE_AUINT128		0x400A			// Array of unsigned 128-bit integers
#define MTP_TYPE_STR			0xFFFF			// Variable-length Unicode string

// MTP Format Codes
#define MTP_FORMAT_UNDEFINED							0x3000	 // Undefined object
#define MTP_FORMAT_ASSOCIATION							0x3001	 // Association (for example, a folder)
#define MTP_FORMAT_SCRIPT								0x3002	 // Device model-specific script
#define MTP_FORMAT_EXECUTABLE							0x3003	 // Device model-specific binary executable
#define MTP_FORMAT_TEXT									0x3004	 // Text file
#define MTP_FORMAT_HTML									0x3005	 // Hypertext Markup Language file (text)
#define MTP_FORMAT_DPOF									0x3006	 // Digital Print Order Format file (text)
#define MTP_FORMAT_AIFF									0x3007	 // Audio clip
#define MTP_FORMAT_WAV									0x3008	 // Audio clip
#define MTP_FORMAT_MP3									0x3009	 // Audio clip
#define MTP_FORMAT_AVI									0x300A	 // Video clip
#define MTP_FORMAT_MPEG									0x300B	 // Video clip
#define MTP_FORMAT_ASF									0x300C	 // Microsoft Advanced Streaming Format (video)
#define MTP_FORMAT_DEFINED								0x3800	 // Unknown image object
#define MTP_FORMAT_EXIF_JPEG							0x3801	 // Exchangeable File Format, JEIDA standard
#define MTP_FORMAT_TIFF_EP								0x3802	 // Tag Image File Format for Electronic Photography
#define MTP_FORMAT_FLASHPIX								0x3803	 // Structured Storage Image Format
#define MTP_FORMAT_BMP									0x3804	 // Microsoft Windows Bitmap file
#define MTP_FORMAT_CIFF									0x3805	 // Canon Camera Image File Format
#define MTP_FORMAT_GIF									0x3807	 // Graphics Interchange Format
#define MTP_FORMAT_JFIF									0x3808	 // JPEG File Interchange Format
#define MTP_FORMAT_CD									0x3809	 // PhotoCD Image Pac
#define MTP_FORMAT_PICT									0x380A	 // Quickdraw Image Format
#define MTP_FORMAT_PNG									0x380B	 // Portable Network Graphics
#define MTP_FORMAT_TIFF									0x380D	 // Tag Image File Format
#define MTP_FORMAT_TIFF_IT								0x380E	 // Tag Image File Format for Information Technology (graphic arts)
#define MTP_FORMAT_JP2									0x380F	 // JPEG2000 Baseline File Format
#define MTP_FORMAT_JPX									0x3810	 // JPEG2000 Extended File Format
#define MTP_FORMAT_DNG									0x3811	 // Digital Negative
#define MTP_FORMAT_HEIF									0x3812	 // HEIF images
#define MTP_FORMAT_UNDEFINED_FIRMWARE					0xB802
#define MTP_FORMAT_WINDOWS_IMAGE_FORMAT					0xB881
#define MTP_FORMAT_UNDEFINED_AUDIO						0xB900
#define MTP_FORMAT_WMA									0xB901
#define MTP_FORMAT_OGG									0xB902
#define MTP_FORMAT_AAC									0xB903
#define MTP_FORMAT_AUDIBLE								0xB904
#define MTP_FORMAT_FLAC									0xB906
#define MTP_FORMAT_UNDEFINED_VIDEO						0xB980
#define MTP_FORMAT_WMV									0xB981
#define MTP_FORMAT_MP4_CONTAINER						0xB982	// ISO 14496-1
#define MTP_FORMAT_MP2									0xB983
#define MTP_FORMAT_3GP_CONTAINER						0xB984	// 3GPP file format. Details: http://www.3gpp.org/ftp/Specs/html-info/26244.htm (page title - \u201cTransparent end-to-end packet switched streaming service, 3GPP file format\u201d).
#define MTP_FORMAT_UNDEFINED_COLLECTION					0xBA00
#define MTP_FORMAT_ABSTRACT_MULTIMEDIA_ALBUM			0xBA01
#define MTP_FORMAT_ABSTRACT_IMAGE_ALBUM					0xBA02
#define MTP_FORMAT_ABSTRACT_AUDIO_ALBUM					0xBA03
#define MTP_FORMAT_ABSTRACT_VIDEO_ALBUM					0xBA04
#define MTP_FORMAT_ABSTRACT_AV_PLAYLIST					0xBA05
#define MTP_FORMAT_ABSTRACT_CONTACT_GROUP				0xBA06
#define MTP_FORMAT_ABSTRACT_MESSAGE_FOLDER				0xBA07
#define MTP_FORMAT_ABSTRACT_CHAPTERED_PRODUCTION		0xBA08
#define MTP_FORMAT_ABSTRACT_AUDIO_PLAYLIST				0xBA09
#define MTP_FORMAT_ABSTRACT_VIDEO_PLAYLIST				0xBA0A
#define MTP_FORMAT_ABSTRACT_MEDIACAST					0xBA0B // For use with mediacasts; references multimedia enclosures of RSS feeds or episodic content
#define MTP_FORMAT_WPL_PLAYLIST							0xBA10
#define MTP_FORMAT_M3U_PLAYLIST							0xBA11
#define MTP_FORMAT_MPL_PLAYLIST							0xBA12
#define MTP_FORMAT_ASX_PLAYLIST							0xBA13
#define MTP_FORMAT_PLS_PLAYLIST							0xBA14
#define MTP_FORMAT_UNDEFINED_DOCUMENT					0xBA80
#define MTP_FORMAT_ABSTRACT_DOCUMENT					0xBA81
#define MTP_FORMAT_XML_DOCUMENT							0xBA82
#define MTP_FORMAT_MS_WORD_DOCUMENT						0xBA83
#define MTP_FORMAT_MHT_COMPILED_HTML_DOCUMENT			0xBA84
#define MTP_FORMAT_MS_EXCEL_SPREADSHEET					0xBA85
#define MTP_FORMAT_MS_POWERPOINT_PRESENTATION			0xBA86
#define MTP_FORMAT_UNDEFINED_MESSAGE					0xBB00
#define MTP_FORMAT_ABSTRACT_MESSSAGE					0xBB01
#define MTP_FORMAT_UNDEFINED_CONTACT					0xBB80
#define MTP_FORMAT_ABSTRACT_CONTACT						0xBB81
#define MTP_FORMAT_VCARD_2								0xBB82

// MTP Object Property Codes
#define MTP_PROPERTY_STORAGE_ID								0xDC01
#define MTP_PROPERTY_OBJECT_FORMAT							0xDC02
#define MTP_PROPERTY_PROTECTION_STATUS						0xDC03
#define MTP_PROPERTY_OBJECT_SIZE							0xDC04
#define MTP_PROPERTY_ASSOCIATION_TYPE						0xDC05
#define MTP_PROPERTY_ASSOCIATION_DESC						0xDC06
#define MTP_PROPERTY_OBJECT_FILE_NAME						0xDC07
#define MTP_PROPERTY_DATE_CREATED							0xDC08
#define MTP_PROPERTY_DATE_MODIFIED							0xDC09
#define MTP_PROPERTY_KEYWORDS								0xDC0A
#define MTP_PROPERTY_PARENT_OBJECT							0xDC0B
#define MTP_PROPERTY_ALLOWED_FOLDER_CONTENTS				0xDC0C
#define MTP_PROPERTY_HIDDEN									0xDC0D
#define MTP_PROPERTY_SYSTEM_OBJECT							0xDC0E
#define MTP_PROPERTY_PERSISTENT_UID							0xDC41
#define MTP_PROPERTY_SYNC_ID								0xDC42
#define MTP_PROPERTY_PROPERTY_BAG							0xDC43
#define MTP_PROPERTY_NAME									0xDC44
#define MTP_PROPERTY_CREATED_BY								0xDC45
#define MTP_PROPERTY_ARTIST									0xDC46
#define MTP_PROPERTY_DATE_AUTHORED							0xDC47
#define MTP_PROPERTY_DESCRIPTION							0xDC48
#define MTP_PROPERTY_URL_REFERENCE							0xDC49
#define MTP_PROPERTY_LANGUAGE_LOCALE						0xDC4A
#define MTP_PROPERTY_COPYRIGHT_INFORMATION					0xDC4B
#define MTP_PROPERTY_SOURCE									0xDC4C
#define MTP_PROPERTY_ORIGIN_LOCATION						0xDC4D
#define MTP_PROPERTY_DATE_ADDED								0xDC4E
#define MTP_PROPERTY_NON_CONSUMABLE							0xDC4F
#define MTP_PROPERTY_CORRUPT_UNPLAYABLE						0xDC50
#define MTP_PROPERTY_PRODUCER_SERIAL_NUMBER					0xDC51
#define MTP_PROPERTY_REPRESENTATIVE_SAMPLE_FORMAT			0xDC81
#define MTP_PROPERTY_REPRESENTATIVE_SAMPLE_SIZE				0xDC82
#define MTP_PROPERTY_REPRESENTATIVE_SAMPLE_HEIGHT			0xDC83
#define MTP_PROPERTY_REPRESENTATIVE_SAMPLE_WIDTH			0xDC84
#define MTP_PROPERTY_REPRESENTATIVE_SAMPLE_DURATION			0xDC85
#define MTP_PROPERTY_REPRESENTATIVE_SAMPLE_DATA				0xDC86
#define MTP_PROPERTY_WIDTH									0xDC87
#define MTP_PROPERTY_HEIGHT									0xDC88
#define MTP_PROPERTY_DURATION								0xDC89
#define MTP_PROPERTY_RATING									0xDC8A
#define MTP_PROPERTY_TRACK									0xDC8B
#define MTP_PROPERTY_GENRE									0xDC8C
#define MTP_PROPERTY_CREDITS								0xDC8D
#define MTP_PROPERTY_LYRICS									0xDC8E
#define MTP_PROPERTY_SUBSCRIPTION_CONTENT_ID				0xDC8F
#define MTP_PROPERTY_PRODUCED_BY							0xDC90
#define MTP_PROPERTY_USE_COUNT								0xDC91
#define MTP_PROPERTY_SKIP_COUNT								0xDC92
#define MTP_PROPERTY_LAST_ACCESSED							0xDC93
#define MTP_PROPERTY_PARENTAL_RATING						0xDC94
#define MTP_PROPERTY_META_GENRE								0xDC95
#define MTP_PROPERTY_COMPOSER								0xDC96
#define MTP_PROPERTY_EFFECTIVE_RATING						0xDC97
#define MTP_PROPERTY_SUBTITLE								0xDC98
#define MTP_PROPERTY_ORIGINAL_RELEASE_DATE					0xDC99
#define MTP_PROPERTY_ALBUM_NAME								0xDC9A
#define MTP_PROPERTY_ALBUM_ARTIST							0xDC9B
#define MTP_PROPERTY_MOOD									0xDC9C
#define MTP_PROPERTY_DRM_STATUS								0xDC9D
#define MTP_PROPERTY_SUB_DESCRIPTION						0xDC9E
#define MTP_PROPERTY_IS_CROPPED								0xDCD1
#define MTP_PROPERTY_IS_COLOUR_CORRECTED					0xDCD2
#define MTP_PROPERTY_IMAGE_BIT_DEPTH						0xDCD3
#define MTP_PROPERTY_F_NUMBER								0xDCD4
#define MTP_PROPERTY_EXPOSURE_TIME							0xDCD5
#define MTP_PROPERTY_EXPOSURE_INDEX							0xDCD6
#define MTP_PROPERTY_TOTAL_BITRATE							0xDE91
#define MTP_PROPERTY_BITRATE_TYPE							0xDE92
#define MTP_PROPERTY_SAMPLE_RATE							0xDE93
#define MTP_PROPERTY_NUMBER_OF_CHANNELS						0xDE94
#define MTP_PROPERTY_AUDIO_BIT_DEPTH						0xDE95
#define MTP_PROPERTY_SCAN_TYPE								0xDE97
#define MTP_PROPERTY_AUDIO_WAVE_CODEC						0xDE99
#define MTP_PROPERTY_AUDIO_BITRATE							0xDE9A
#define MTP_PROPERTY_VIDEO_FOURCC_CODEC						0xDE9B
#define MTP_PROPERTY_VIDEO_BITRATE							0xDE9C
#define MTP_PROPERTY_FRAMES_PER_THOUSAND_SECONDS			0xDE9D
#define MTP_PROPERTY_KEYFRAME_DISTANCE						0xDE9E
#define MTP_PROPERTY_BUFFER_SIZE							0xDE9F
#define MTP_PROPERTY_ENCODING_QUALITY						0xDEA0
#define MTP_PROPERTY_ENCODING_PROFILE						0xDEA1
#define MTP_PROPERTY_DISPLAY_NAME							0xDCE0
#define MTP_PROPERTY_BODY_TEXT								0xDCE1
#define MTP_PROPERTY_SUBJECT								0xDCE2
#define MTP_PROPERTY_PRIORITY								0xDCE3
#define MTP_PROPERTY_GIVEN_NAME								0xDD00
#define MTP_PROPERTY_MIDDLE_NAMES							0xDD01
#define MTP_PROPERTY_FAMILY_NAME							0xDD02
#define MTP_PROPERTY_PREFIX									0xDD03
#define MTP_PROPERTY_SUFFIX									0xDD04
#define MTP_PROPERTY_PHONETIC_GIVEN_NAME					0xDD05
#define MTP_PROPERTY_PHONETIC_FAMILY_NAME					0xDD06
#define MTP_PROPERTY_EMAIL_PRIMARY							0xDD07
#define MTP_PROPERTY_EMAIL_PERSONAL_1						0xDD08
#define MTP_PROPERTY_EMAIL_PERSONAL_2						0xDD09
#define MTP_PROPERTY_EMAIL_BUSINESS_1						0xDD0A
#define MTP_PROPERTY_EMAIL_BUSINESS_2						0xDD0B
#define MTP_PROPERTY_EMAIL_OTHERS							0xDD0C
#define MTP_PROPERTY_PHONE_NUMBER_PRIMARY					0xDD0D
#define MTP_PROPERTY_PHONE_NUMBER_PERSONAL					0xDD0E
#define MTP_PROPERTY_PHONE_NUMBER_PERSONAL_2				0xDD0F
#define MTP_PROPERTY_PHONE_NUMBER_BUSINESS					0xDD10
#define MTP_PROPERTY_PHONE_NUMBER_BUSINESS_2				0xDD11
#define MTP_PROPERTY_PHONE_NUMBER_MOBILE					0xDD12
#define MTP_PROPERTY_PHONE_NUMBER_MOBILE_2					0xDD13
#define MTP_PROPERTY_FAX_NUMBER_PRIMARY						0xDD14
#define MTP_PROPERTY_FAX_NUMBER_PERSONAL					0xDD15
#define MTP_PROPERTY_FAX_NUMBER_BUSINESS					0xDD16
#define MTP_PROPERTY_PAGER_NUMBER							0xDD17
#define MTP_PROPERTY_PHONE_NUMBER_OTHERS					0xDD18
#define MTP_PROPERTY_PRIMARY_WEB_ADDRESS					0xDD19
#define MTP_PROPERTY_PERSONAL_WEB_ADDRESS					0xDD1A
#define MTP_PROPERTY_BUSINESS_WEB_ADDRESS					0xDD1B
#define MTP_PROPERTY_INSTANT_MESSANGER_ADDRESS				0xDD1C
#define MTP_PROPERTY_INSTANT_MESSANGER_ADDRESS_2			0xDD1D
#define MTP_PROPERTY_INSTANT_MESSANGER_ADDRESS_3			0xDD1E
#define MTP_PROPERTY_POSTAL_ADDRESS_PERSONAL_FULL			0xDD1F
#define MTP_PROPERTY_POSTAL_ADDRESS_PERSONAL_LINE_1			0xDD20
#define MTP_PROPERTY_POSTAL_ADDRESS_PERSONAL_LINE_2			0xDD21
#define MTP_PROPERTY_POSTAL_ADDRESS_PERSONAL_CITY			0xDD22
#define MTP_PROPERTY_POSTAL_ADDRESS_PERSONAL_REGION			0xDD23
#define MTP_PROPERTY_POSTAL_ADDRESS_PERSONAL_POSTAL_CODE	0xDD24
#define MTP_PROPERTY_POSTAL_ADDRESS_PERSONAL_COUNTRY		0xDD25
#define MTP_PROPERTY_POSTAL_ADDRESS_BUSINESS_FULL			0xDD26
#define MTP_PROPERTY_POSTAL_ADDRESS_BUSINESS_LINE_1			0xDD27
#define MTP_PROPERTY_POSTAL_ADDRESS_BUSINESS_LINE_2			0xDD28
#define MTP_PROPERTY_POSTAL_ADDRESS_BUSINESS_CITY			0xDD29
#define MTP_PROPERTY_POSTAL_ADDRESS_BUSINESS_REGION			0xDD2A
#define MTP_PROPERTY_POSTAL_ADDRESS_BUSINESS_POSTAL_CODE	0xDD2B
#define MTP_PROPERTY_POSTAL_ADDRESS_BUSINESS_COUNTRY		0xDD2C
#define MTP_PROPERTY_POSTAL_ADDRESS_OTHER_FULL				0xDD2D
#define MTP_PROPERTY_POSTAL_ADDRESS_OTHER_LINE_1			0xDD2E
#define MTP_PROPERTY_POSTAL_ADDRESS_OTHER_LINE_2			0xDD2F
#define MTP_PROPERTY_POSTAL_ADDRESS_OTHER_CITY				0xDD30
#define MTP_PROPERTY_POSTAL_ADDRESS_OTHER_REGION			0xDD31
#define MTP_PROPERTY_POSTAL_ADDRESS_OTHER_POSTAL_CODE		0xDD32
#define MTP_PROPERTY_POSTAL_ADDRESS_OTHER_COUNTRY			0xDD33
#define MTP_PROPERTY_ORGANIZATION_NAME						0xDD34
#define MTP_PROPERTY_PHONETIC_ORGANIZATION_NAME				0xDD35
#define MTP_PROPERTY_ROLE									0xDD36
#define MTP_PROPERTY_BIRTHDATE								0xDD37
#define MTP_PROPERTY_MESSAGE_TO								0xDD40
#define MTP_PROPERTY_MESSAGE_CC								0xDD41
#define MTP_PROPERTY_MESSAGE_BCC							0xDD42
#define MTP_PROPERTY_MESSAGE_READ							0xDD43
#define MTP_PROPERTY_MESSAGE_RECEIVED_TIME					0xDD44
#define MTP_PROPERTY_MESSAGE_SENDER							0xDD45
#define MTP_PROPERTY_ACTIVITY_BEGIN_TIME					0xDD50
#define MTP_PROPERTY_ACTIVITY_END_TIME						0xDD51
#define MTP_PROPERTY_ACTIVITY_LOCATION						0xDD52
#define MTP_PROPERTY_ACTIVITY_REQUIRED_ATTENDEES			0xDD54
#define MTP_PROPERTY_ACTIVITY_OPTIONAL_ATTENDEES			0xDD55
#define MTP_PROPERTY_ACTIVITY_RESOURCES						0xDD56
#define MTP_PROPERTY_ACTIVITY_ACCEPTED						0xDD57
#define MTP_PROPERTY_ACTIVITY_TENTATIVE						0xDD58
#define MTP_PROPERTY_ACTIVITY_DECLINED						0xDD59
#define MTP_PROPERTY_ACTIVITY_REMAINDER_TIME				0xDD5A
#define MTP_PROPERTY_ACTIVITY_OWNER							0xDD5B
#define MTP_PROPERTY_ACTIVITY_STATUS						0xDD5C
#define MTP_PROPERTY_OWNER									0xDD5D
#define MTP_PROPERTY_EDITOR									0xDD5E
#define MTP_PROPERTY_WEBMASTER								0xDD5F
#define MTP_PROPERTY_URL_SOURCE								0xDD60
#define MTP_PROPERTY_URL_DESTINATION						0xDD61
#define MTP_PROPERTY_TIME_BOOKMARK							0xDD62
#define MTP_PROPERTY_OBJECT_BOOKMARK						0xDD63
#define MTP_PROPERTY_BYTE_BOOKMARK							0xDD64
#define MTP_PROPERTY_LAST_BUILD_DATE						0xDD70
#define MTP_PROPERTY_TIME_TO_LIVE							0xDD71
#define MTP_PROPERTY_MEDIA_GUID								0xDD72

// MTP Device Property Codes
#define MTP_DEVICE_PROPERTY_UNDEFINED						0x5000
#define MTP_DEVICE_PROPERTY_BATTERY_LEVEL					0x5001
#define MTP_DEVICE_PROPERTY_FUNCTIONAL_MODE					0x5002
#define MTP_DEVICE_PROPERTY_IMAGE_SIZE						0x5003
#define MTP_DEVICE_PROPERTY_COMPRESSION_SETTING				0x5004
#define MTP_DEVICE_PROPERTY_WHITE_BALANCE					0x5005
#define MTP_DEVICE_PROPERTY_RGB_GAIN						0x5006
#define MTP_DEVICE_PROPERTY_F_NUMBER						0x5007
#define MTP_DEVICE_PROPERTY_FOCAL_LENGTH					0x5008
#define MTP_DEVICE_PROPERTY_FOCUS_DISTANCE					0x5009
#define MTP_DEVICE_PROPERTY_FOCUS_MODE						0x500A
#define MTP_DEVICE_PROPERTY_EXPOSURE_METERING_MODE			0x500B
#define MTP_DEVICE_PROPERTY_FLASH_MODE						0x500C
#define MTP_DEVICE_PROPERTY_EXPOSURE_TIME					0x500D
#define MTP_DEVICE_PROPERTY_EXPOSURE_PROGRAM_MODE			0x500E
#define MTP_DEVICE_PROPERTY_EXPOSURE_INDEX					0x500F
#define MTP_DEVICE_PROPERTY_EXPOSURE_BIAS_COMPENSATION		0x5010
#define MTP_DEVICE_PROPERTY_DATETIME						0x5011
#define MTP_DEVICE_PROPERTY_CAPTURE_DELAY					0x5012
#define MTP_DEVICE_PROPERTY_STILL_CAPTURE_MODE				0x5013
#define MTP_DEVICE_PROPERTY_CONTRAST						0x5014
#define MTP_DEVICE_PROPERTY_SHARPNESS						0x5015
#define MTP_DEVICE_PROPERTY_DIGITAL_ZOOM					0x5016
#define MTP_DEVICE_PROPERTY_EFFECT_MODE						0x5017
#define MTP_DEVICE_PROPERTY_BURST_NUMBER					0x5018
#define MTP_DEVICE_PROPERTY_BURST_INTERVAL					0x5019
#define MTP_DEVICE_PROPERTY_TIMELAPSE_NUMBER				0x501A
#define MTP_DEVICE_PROPERTY_TIMELAPSE_INTERVAL				0x501B
#define MTP_DEVICE_PROPERTY_FOCUS_METERING_MODE				0x501C
#define MTP_DEVICE_PROPERTY_UPLOAD_URL						0x501D
#define MTP_DEVICE_PROPERTY_ARTIST							0x501E
#define MTP_DEVICE_PROPERTY_COPYRIGHT_INFO					0x501F
#define MTP_DEVICE_PROPERTY_SYNCHRONIZATION_PARTNER			0xD401
#define MTP_DEVICE_PROPERTY_DEVICE_FRIENDLY_NAME			0xD402
#define MTP_DEVICE_PROPERTY_VOLUME							0xD403
#define MTP_DEVICE_PROPERTY_SUPPORTED_FORMATS_ORDERED		0xD404
#define MTP_DEVICE_PROPERTY_DEVICE_ICON						0xD405
#define MTP_DEVICE_PROPERTY_PLAYBACK_RATE					0xD410
#define MTP_DEVICE_PROPERTY_PLAYBACK_OBJECT					0xD411
#define MTP_DEVICE_PROPERTY_PLAYBACK_CONTAINER_INDEX		0xD412
#define MTP_DEVICE_PROPERTY_SESSION_INITIATOR_VERSION_INFO	0xD406
#define MTP_DEVICE_PROPERTY_PERCEIVED_DEVICE_TYPE			0xD407

// MTP Operation Codes
#define MTP_OPERATION_GET_DEVICE_INFO						0x1001
#define MTP_OPERATION_OPEN_SESSION							0x1002
#define MTP_OPERATION_CLOSE_SESSION							0x1003
#define MTP_OPERATION_GET_STORAGE_IDS						0x1004
#define MTP_OPERATION_GET_STORAGE_INFO						0x1005
#define MTP_OPERATION_GET_NUM_OBJECTS						0x1006
#define MTP_OPERATION_GET_OBJECT_HANDLES					0x1007
#define MTP_OPERATION_GET_OBJECT_INFO						0x1008
#define MTP_OPERATION_GET_OBJECT							0x1009
#define MTP_OPERATION_GET_THUMB								0x100A
#define MTP_OPERATION_DELETE_OBJECT							0x100B
#define MTP_OPERATION_SEND_OBJECT_INFO						0x100C
#define MTP_OPERATION_SEND_OBJECT							0x100D
#define MTP_OPERATION_INITIATE_CAPTURE						0x100E
#define MTP_OPERATION_FORMAT_STORE							0x100F
#define MTP_OPERATION_RESET_DEVICE							0x1010
#define MTP_OPERATION_SELF_TEST								0x1011
#define MTP_OPERATION_SET_OBJECT_PROTECTION					0x1012
#define MTP_OPERATION_POWER_DOWN							0x1013
#define MTP_OPERATION_GET_DEVICE_PROP_DESC					0x1014
#define MTP_OPERATION_GET_DEVICE_PROP_VALUE					0x1015
#define MTP_OPERATION_SET_DEVICE_PROP_VALUE					0x1016
#define MTP_OPERATION_RESET_DEVICE_PROP_VALUE				0x1017
#define MTP_OPERATION_TERMINATE_OPEN_CAPTURE				0x1018
#define MTP_OPERATION_MOVE_OBJECT							0x1019
#define MTP_OPERATION_COPY_OBJECT							0x101A
#define MTP_OPERATION_GET_PARTIAL_OBJECT					0x101B
#define MTP_OPERATION_INITIATE_OPEN_CAPTURE					0x101C
#define MTP_OPERATION_GET_OBJECT_PROPS_SUPPORTED			0x9801
#define MTP_OPERATION_GET_OBJECT_PROP_DESC					0x9802
#define MTP_OPERATION_GET_OBJECT_PROP_VALUE					0x9803
#define MTP_OPERATION_SET_OBJECT_PROP_VALUE					0x9804
#define MTP_OPERATION_GET_OBJECT_PROP_LIST					0x9805
#define MTP_OPERATION_SET_OBJECT_PROP_LIST					0x9806
#define MTP_OPERATION_GET_INTERDEPENDENT_PROP_DESC			0x9807
#define MTP_OPERATION_SEND_OBJECT_PROP_LIST					0x9808
#define MTP_OPERATION_GET_OBJECT_REFERENCES					0x9810
#define MTP_OPERATION_SET_OBJECT_REFERENCES					0x9811
#define MTP_OPERATION_SKIP									0x9820

// Android extensions for direct file IO

// Same as GetPartialObject, but with 64 bit offset
#define MTP_OPERATION_GET_PARTIAL_OBJECT_64					0x95C1
// Same as GetPartialObject64, but copying host to device
#define MTP_OPERATION_SEND_PARTIAL_OBJECT					0x95C2
// Truncates file to 64 bit length
#define MTP_OPERATION_TRUNCATE_OBJECT						0x95C3
// Must be called before using SendPartialObject and TruncateObject
#define MTP_OPERATION_BEGIN_EDIT_OBJECT						0x95C4
// Called to commit changes made by SendPartialObject and TruncateObject
#define MTP_OPERATION_END_EDIT_OBJECT						0x95C5

// MTP Response Codes
#define MTP_RESPONSE_UNDEFINED									0x2000
#define MTP_RESPONSE_OK											0x2001
#define MTP_RESPONSE_GENERAL_ERROR								0x2002
#define MTP_RESPONSE_SESSION_NOT_OPEN							0x2003
#define MTP_RESPONSE_INVALID_TRANSACTION_ID						0x2004
#define MTP_RESPONSE_OPERATION_NOT_SUPPORTED					0x2005
#define MTP_RESPONSE_PARAMETER_NOT_SUPPORTED					0x2006
#define MTP_RESPONSE_INCOMPLETE_TRANSFER						0x2007
#define MTP_RESPONSE_INVALID_STORAGE_ID							0x2008
#define MTP_RESPONSE_INVALID_OBJECT_HANDLE						0x2009
#define MTP_RESPONSE_DEVICE_PROP_NOT_SUPPORTED					0x200A
#define MTP_RESPONSE_INVALID_OBJECT_FORMAT_CODE					0x200B
#define MTP_RESPONSE_STORAGE_FULL								0x200C
#define MTP_RESPONSE_OBJECT_WRITE_PROTECTED						0x200D
#define MTP_RESPONSE_STORE_READ_ONLY							0x200E
#define MTP_RESPONSE_ACCESS_DENIED								0x200F
#define MTP_RESPONSE_NO_THUMBNAIL_PRESENT						0x2010
#define MTP_RESPONSE_SELF_TEST_FAILED							0x2011
#define MTP_RESPONSE_PARTIAL_DELETION							0x2012
#define MTP_RESPONSE_STORE_NOT_AVAILABLE						0x2013
#define MTP_RESPONSE_SPECIFICATION_BY_FORMAT_UNSUPPORTED		0x2014
#define MTP_RESPONSE_NO_VALID_OBJECT_INFO						0x2015
#define MTP_RESPONSE_INVALID_CODE_FORMAT						0x2016
#define MTP_RESPONSE_UNKNOWN_VENDOR_CODE						0x2017
#define MTP_RESPONSE_CAPTURE_ALREADY_TERMINATED					0x2018
#define MTP_RESPONSE_DEVICE_BUSY								0x2019
#define MTP_RESPONSE_INVALID_PARENT_OBJECT						0x201A
#define MTP_RESPONSE_INVALID_DEVICE_PROP_FORMAT					0x201B
#define MTP_RESPONSE_INVALID_DEVICE_PROP_VALUE					0x201C
#define MTP_RESPONSE_INVALID_PARAMETER							0x201D
#define MTP_RESPONSE_SESSION_ALREADY_OPEN						0x201E
#define MTP_RESPONSE_TRANSACTION_CANCELLED						0x201F
#define MTP_RESPONSE_SPECIFICATION_OF_DESTINATION_UNSUPPORTED	0x2020
#define MTP_RESPONSE_INVALID_OBJECT_PROP_CODE					0xA801
#define MTP_RESPONSE_INVALID_OBJECT_PROP_FORMAT					0xA802
#define MTP_RESPONSE_INVALID_OBJECT_PROP_VALUE					0xA803
#define MTP_RESPONSE_INVALID_OBJECT_REFERENCE					0xA804
#define MTP_RESPONSE_GROUP_NOT_SUPPORTED						0xA805
#define MTP_RESPONSE_INVALID_DATASET							0xA806
#define MTP_RESPONSE_SPECIFICATION_BY_GROUP_UNSUPPORTED			0xA807
#define MTP_RESPONSE_SPECIFICATION_BY_DEPTH_UNSUPPORTED			0xA808
#define MTP_RESPONSE_OBJECT_TOO_LARGE							0xA809
#define MTP_RESPONSE_OBJECT_PROP_NOT_SUPPORTED					0xA80A

// Supported Playback Formats
#define SUPPORTED_PLAYBACK_FORMAT_UNDEFINED 0x3000
/** Format code for associations (folders and directories) */
#define SUPPORTED_PLAYBACK_FORMAT_ASSOCIATION 0x3001
/** Format code for script files */
#define SUPPORTED_PLAYBACK_FORMAT_SCRIPT 0x3002
/** Format code for executable files */
#define SUPPORTED_PLAYBACK_FORMAT_EXECUTABLE 0x3003
/** Format code for text files */
#define SUPPORTED_PLAYBACK_FORMAT_TEXT 0x3004
/** Format code for HTML files */
#define SUPPORTED_PLAYBACK_FORMAT_HTML 0x3005
/** Format code for DPOF files */
#define SUPPORTED_PLAYBACK_FORMAT_DPOF 0x3006
/** Format code for AIFF audio files */
#define SUPPORTED_PLAYBACK_FORMAT_AIFF 0x3007
/** Format code for WAV audio files */
#define SUPPORTED_PLAYBACK_FORMAT_WAV 0x3008
/** Format code for MP3 audio files */
#define SUPPORTED_PLAYBACK_FORMAT_MP3 0x3009
/** Format code for AVI video files */
#define SUPPORTED_PLAYBACK_FORMAT_AVI 0x300A
/** Format code for MPEG video files */
#define SUPPORTED_PLAYBACK_FORMAT_MPEG 0x300B
/** Format code for ASF files */
#define SUPPORTED_PLAYBACK_FORMAT_ASF 0x300C
/** Format code for JPEG image files */
#define SUPPORTED_PLAYBACK_FORMAT_EXIF_JPEG 0x3801
/** Format code for TIFF EP image files */
#define SUPPORTED_PLAYBACK_FORMAT_TIFF_EP 0x3802
/** Format code for BMP image files */
#define SUPPORTED_PLAYBACK_FORMAT_BMP 0x3804
/** Format code for GIF image files */
#define SUPPORTED_PLAYBACK_FORMAT_GIF 0x3807
/** Format code for JFIF image files */
#define SUPPORTED_PLAYBACK_FORMAT_JFIF 0x3808
/** Format code for PICT image files */
#define SUPPORTED_PLAYBACK_FORMAT_PICT 0x380A
/** Format code for PNG image files */
#define SUPPORTED_PLAYBACK_FORMAT_PNG 0x380B
/** Format code for TIFF image files */
#define SUPPORTED_PLAYBACK_FORMAT_TIFF 0x380D
/** Format code for JP2 files */
#define SUPPORTED_PLAYBACK_FORMAT_JP2 0x380F
/** Format code for JPX files */
#define SUPPORTED_PLAYBACK_FORMAT_JPX 0x3810
/** Format code for firmware files */
#define SUPPORTED_PLAYBACK_FORMAT_UNDEFINED_FIRMWARE 0xB802
/** Format code for Windows image files */
#define SUPPORTED_PLAYBACK_FORMAT_WINDOWS_IMAGE_FORMAT 0xB881
/** Format code for undefined audio files files */
#define SUPPORTED_PLAYBACK_FORMAT_UNDEFINED_AUDIO 0xB900
/** Format code for WMA audio files */
#define SUPPORTED_PLAYBACK_FORMAT_WMA 0xB901
/** Format code for OGG audio files */
#define SUPPORTED_PLAYBACK_FORMAT_OGG 0xB902
/** Format code for AAC audio files */
#define SUPPORTED_PLAYBACK_FORMAT_AAC 0xB903
/** Format code for Audible audio files */
#define SUPPORTED_PLAYBACK_FORMAT_AUDIBLE 0xB904
/** Format code for FLAC audio files */
#define SUPPORTED_PLAYBACK_FORMAT_FLAC 0xB906
/** Format code for undefined video files */
#define SUPPORTED_PLAYBACK_FORMAT_UNDEFINED_VIDEO 0xB980
/** Format code for WMV video files */
#define SUPPORTED_PLAYBACK_FORMAT_WMV 0xB981
/** Format code for MP4 files */
#define SUPPORTED_PLAYBACK_FORMAT_MP4_CONTAINER 0xB982
/** Format code for MP2 files */
#define SUPPORTED_PLAYBACK_FORMAT_MP2 0xB983
/** Format code for 3GP files */
#define SUPPORTED_PLAYBACK_FORMAT_3GP_CONTAINER 0xB984
/** Format code for undefined collections */
#define SUPPORTED_PLAYBACK_FORMAT_UNDEFINED_COLLECTION 0xBA00
/** Format code for multimedia albums */
#define SUPPORTED_PLAYBACK_FORMAT_ABSTRACT_MULTIMEDIA_ALBUM 0xBA01
/** Format code for image albums */
#define SUPPORTED_PLAYBACK_FORMAT_ABSTRACT_IMAGE_ALBUM 0xBA02
/** Format code for audio albums */
#define SUPPORTED_PLAYBACK_FORMAT_ABSTRACT_AUDIO_ALBUM 0xBA03
/** Format code for video albums */
#define SUPPORTED_PLAYBACK_FORMAT_ABSTRACT_VIDEO_ALBUM 0xBA04
/** Format code for abstract AV playlists */
#define SUPPORTED_PLAYBACK_FORMAT_ABSTRACT_AV_PLAYLIST 0xBA05
/** Format code for abstract audio playlists */
#define SUPPORTED_PLAYBACK_FORMAT_ABSTRACT_AUDIO_PLAYLIST 0xBA09
/** Format code for abstract video playlists */
#define SUPPORTED_PLAYBACK_FORMAT_ABSTRACT_VIDEO_PLAYLIST 0xBA0A
/** Format code for abstract mediacasts */
#define SUPPORTED_PLAYBACK_FORMAT_ABSTRACT_MEDIACAST 0xBA0B
/** Format code for WPL playlist files */
#define SUPPORTED_PLAYBACK_FORMAT_WPL_PLAYLIST 0xBA10
/** Format code for M3u playlist files */
#define SUPPORTED_PLAYBACK_FORMAT_M3U_PLAYLIST 0xBA11
/** Format code for MPL playlist files */
#define SUPPORTED_PLAYBACK_FORMAT_MPL_PLAYLIST 0xBA12
/** Format code for ASX playlist files */
#define SUPPORTED_PLAYBACK_FORMAT_ASX_PLAYLIST 0xBA13
/** Format code for PLS playlist files */
#define SUPPORTED_PLAYBACK_FORMAT_PLS_PLAYLIST 0xBA14
/** Format code for undefined document files */
#define SUPPORTED_PLAYBACK_FORMAT_UNDEFINED_DOCUMENT 0xBA80
/** Format code for abstract documents */
#define SUPPORTED_PLAYBACK_FORMAT_ABSTRACT_DOCUMENT 0xBA81
/** Format code for XML documents */
#define SUPPORTED_PLAYBACK_FORMAT_XML_DOCUMENT 0xBA82
/** Format code for MS Word documents */
#define SUPPORTED_PLAYBACK_FORMAT_MS_WORD_DOCUMENT 0xBA83
/** Format code for MS Excel spreadsheets */
#define SUPPORTED_PLAYBACK_FORMAT_MS_EXCEL_SPREADSHEET 0xBA85
/** Format code for MS PowerPoint presentatiosn */
#define SUPPORTED_PLAYBACK_FORMAT_MS_POWERPOINT_PRESENTATION 0xBA86

// MTP Event Codes
#define MTP_EVENT_UNDEFINED							0x4000
#define MTP_EVENT_CANCEL_TRANSACTION				0x4001
#define MTP_EVENT_OBJECT_ADDED						0x4002
#define MTP_EVENT_OBJECT_REMOVED					0x4003
#define MTP_EVENT_STORE_ADDED						0x4004
#define MTP_EVENT_STORE_REMOVED						0x4005
#define MTP_EVENT_DEVICE_PROP_CHANGED				0x4006
#define MTP_EVENT_OBJECT_INFO_CHANGED				0x4007
#define MTP_EVENT_DEVICE_INFO_CHANGED				0x4008
#define MTP_EVENT_REQUEST_OBJECT_TRANSFER			0x4009
#define MTP_EVENT_STORE_FULL						0x400A
#define MTP_EVENT_DEVICE_RESET						0x400B
#define MTP_EVENT_STORAGE_INFO_CHANGED				0x400C
#define MTP_EVENT_CAPTURE_COMPLETE					0x400D
#define MTP_EVENT_UNREPORTED_STATUS					0x400E
#define MTP_EVENT_OBJECT_PROP_CHANGED				0xC801
#define MTP_EVENT_OBJECT_PROP_DESC_CHANGED			0xC802
#define MTP_EVENT_OBJECT_REFERENCES_CHANGED			0xC803

// Storage Type
#define MTP_STORAGE_FIXED_ROM						0x0001
#define MTP_STORAGE_REMOVABLE_ROM					0x0002
#define MTP_STORAGE_FIXED_RAM						0x0003
#define MTP_STORAGE_REMOVABLE_RAM					0x0004

// Storage File System
#define MTP_STORAGE_FILESYSTEM_FLAT					0x0001
#define MTP_STORAGE_FILESYSTEM_HIERARCHICAL			0x0002
#define MTP_STORAGE_FILESYSTEM_DCF					0x0003

// Storage Access Capability
#define MTP_STORAGE_READ_WRITE						0x0000
#define MTP_STORAGE_READ_ONLY_WITHOUT_DELETE		0x0001
#define MTP_STORAGE_READ_ONLY_WITH_DELETE			0x0002

// Association Type
#define MTP_ASSOCIATION_TYPE_UNDEFINED				0x0000
#define MTP_ASSOCIATION_TYPE_GENERIC_FOLDER			0x0001

// MTP class reqeusts
#define MTP_REQ_CANCEL				0x64
#define MTP_REQ_GET_EXT_EVENT_DATA	0x65
#define MTP_REQ_RESET				0x66
#define MTP_REQ_GET_DEVICE_STATUS	0x67

#endif // _MTP_H