• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022, sakumisu
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #ifndef USB_MTP_H
7 #define USB_MTP_H
8 
9 #define USB_MTP_CLASS 0x06
10 
11 #define USB_MTP_SUB_CLASS 0x01U
12 #define USB_MTP_PROTOCOL  0x01U
13 
14 /* MTP class requests */
15 #define MTP_REQUEST_CANCEL             0x64U
16 #define MTP_REQUEST_GET_EXT_EVENT_DATA 0x65U
17 #define MTP_REQUEST_RESET              0x66U
18 #define MTP_REQUEST_GET_DEVICE_STATUS  0x67U
19 
20 /* Container Types */
21 #define MTP_CONTAINER_TYPE_UNDEFINED 0U
22 #define MTP_CONTAINER_TYPE_COMMAND   1U
23 #define MTP_CONTAINER_TYPE_DATA      2U
24 #define MTP_CONTAINER_TYPE_RESPONSE  3U
25 #define MTP_CONTAINER_TYPE_EVENT     4U
26 
27 /*
28  * MTP Class specification Revision 1.1
29  * Appendix D. Operations
30  */
31 
32 /* Operations code */
33 #define MTP_OP_GET_DEVICE_INFO            0x1001U
34 #define MTP_OP_OPEN_SESSION               0x1002U
35 #define MTP_OP_CLOSE_SESSION              0x1003U
36 #define MTP_OP_GET_STORAGE_IDS            0x1004U
37 #define MTP_OP_GET_STORAGE_INFO           0x1005U
38 #define MTP_OP_GET_NUM_OBJECTS            0x1006U
39 #define MTP_OP_GET_OBJECT_HANDLES         0x1007U
40 #define MTP_OP_GET_OBJECT_INFO            0x1008U
41 #define MTP_OP_GET_OBJECT                 0x1009U
42 #define MTP_OP_GET_THUMB                  0x100AU
43 #define MTP_OP_DELETE_OBJECT              0x100BU
44 #define MTP_OP_SEND_OBJECT_INFO           0x100CU
45 #define MTP_OP_SEND_OBJECT                0x100DU
46 #define MTP_OP_FORMAT_STORE               0x100FU
47 #define MTP_OP_RESET_DEVICE               0x1010U
48 #define MTP_OP_GET_DEVICE_PROP_DESC       0x1014U
49 #define MTP_OP_GET_DEVICE_PROP_VALUE      0x1015U
50 #define MTP_OP_SET_DEVICE_PROP_VALUE      0x1016U
51 #define MTP_OP_RESET_DEVICE_PROP_VALUE    0x1017U
52 #define MTP_OP_TERMINATE_OPEN_CAPTURE     0x1018U
53 #define MTP_OP_MOVE_OBJECT                0x1019U
54 #define MTP_OP_COPY_OBJECT                0x101AU
55 #define MTP_OP_GET_PARTIAL_OBJECT         0x101BU
56 #define MTP_OP_INITIATE_OPEN_CAPTURE      0x101CU
57 #define MTP_OP_GET_OBJECT_PROPS_SUPPORTED 0x9801U
58 #define MTP_OP_GET_OBJECT_PROP_DESC       0x9802U
59 #define MTP_OP_GET_OBJECT_PROP_VALUE      0x9803U
60 #define MTP_OP_SET_OBJECT_PROP_VALUE      0x9804U
61 #define MTP_OP_GET_OBJECT_PROPLIST        0x9805U
62 #define MTP_OP_GET_OBJECT_PROP_REFERENCES 0x9810U
63 #define MTP_OP_GETSERVICEIDS              0x9301U
64 #define MTP_OP_GETSERVICEINFO             0x9302U
65 #define MTP_OP_GETSERVICECAPABILITIES     0x9303U
66 #define MTP_OP_GETSERVICEPROPDESC         0x9304U
67 
68 /* MTP response code */
69 #define MTP_RESPONSE_OK                                    0x2001U
70 #define MTP_RESPONSE_GENERAL_ERROR                         0x2002U
71 #define MTP_RESPONSE_PARAMETER_NOT_SUPPORTED               0x2006U
72 #define MTP_RESPONSE_INCOMPLETE_TRANSFER                   0x2007U
73 #define MTP_RESPONSE_INVALID_STORAGE_ID                    0x2008U
74 #define MTP_RESPONSE_INVALID_OBJECT_HANDLE                 0x2009U
75 #define MTP_RESPONSE_DEVICEPROP_NOT_SUPPORTED              0x200AU
76 #define MTP_RESPONSE_STORE_FULL                            0x200CU
77 #define MTP_RESPONSE_ACCESS_DENIED                         0x200FU
78 #define MTP_RESPONSE_STORE_NOT_AVAILABLE                   0x2013U
79 #define MTP_RESPONSE_SPECIFICATION_BY_FORMAT_NOT_SUPPORTED 0x2014U
80 #define MTP_RESPONSE_NO_VALID_OBJECT_INFO                  0x2015U
81 #define MTP_RESPONSE_DEVICE_BUSY                           0x2019U
82 #define MTP_RESPONSE_INVALID_PARENT_OBJECT                 0x201AU
83 #define MTP_RESPONSE_INVALID_PARAMETER                     0x201DU
84 #define MTP_RESPONSE_SESSION_ALREADY_OPEN                  0x201EU
85 #define MTP_RESPONSE_TRANSACTION_CANCELLED                 0x201FU
86 #define MTP_RESPONSE_INVALID_OBJECT_PROP_CODE              0xA801U
87 #define MTP_RESPONSE_SPECIFICATION_BY_GROUP_UNSUPPORTED    0xA807U
88 #define MTP_RESPONSE_OBJECT_PROP_NOT_SUPPORTED             0xA80AU
89 
90 /* MTP Object format codes */
91 #define MTP_OBJ_FORMAT_UNDEFINED            0x3000U
92 #define MTP_OBJ_FORMAT_ASSOCIATION          0x3001U
93 #define MTP_OBJ_FORMAT_SCRIPT               0x3002U
94 #define MTP_OBJ_FORMAT_EXECUTABLE           0x3003U
95 #define MTP_OBJ_FORMAT_TEXT                 0x3004U
96 #define MTP_OBJ_FORMAT_HTML                 0x3005U
97 #define MTP_OBJ_FORMAT_DPOF                 0x3006U
98 #define MTP_OBJ_FORMAT_AIFF                 0x3007U
99 #define MTP_OBJ_FORMAT_WAV                  0x3008U
100 #define MTP_OBJ_FORMAT_MP3                  0x3009U
101 #define MTP_OBJ_FORMAT_AVI                  0x300AU
102 #define MTP_OBJ_FORMAT_MPEG                 0x300BU
103 #define MTP_OBJ_FORMAT_ASF                  0x300CU
104 #define MTP_OBJ_FORMAT_DEFINED              0x3800U
105 #define MTP_OBJ_FORMAT_EXIF_JPEG            0x3801U
106 #define MTP_OBJ_FORMAT_TIFF_EP              0x3802U
107 #define MTP_OBJ_FORMAT_FLASHPIX             0x3803U
108 #define MTP_OBJ_FORMAT_BMP                  0x3804U
109 #define MTP_OBJ_FORMAT_CIFF                 0x3805U
110 #define MTP_OBJ_FORMAT_UNDEFINED_RESERVED0  0x3806U
111 #define MTP_OBJ_FORMAT_GIF                  0x3807U
112 #define MTP_OBJ_FORMAT_JFIF                 0x3808U
113 #define MTP_OBJ_FORMAT_CD                   0x3809U
114 #define MTP_OBJ_FORMAT_PICT                 0x380AU
115 #define MTP_OBJ_FORMAT_PNG                  0x380BU
116 #define MTP_OBJ_FORMAT_UNDEFINED_RESERVED1  0x380CU
117 #define MTP_OBJ_FORMAT_TIFF                 0x380DU
118 #define MTP_OBJ_FORMAT_TIFF_IT              0x380EU
119 #define MTP_OBJ_FORMAT_JP2                  0x380FU
120 #define MTP_OBJ_FORMAT_JPX                  0x3810U
121 #define MTP_OBJ_FORMAT_UNDEFINED_FIRMWARE   0xB802U
122 #define MTP_OBJ_FORMAT_WINDOWS_IMAGE_FORMAT 0xB881U
123 #define MTP_OBJ_FORMAT_UNDEFINED_AUDIO      0xB900U
124 #define MTP_OBJ_FORMAT_WMA                  0xB901U
125 #define MTP_OBJ_FORMAT_OGG                  0xB902U
126 #define MTP_OBJ_FORMAT_AAC                  0xB903U
127 #define MTP_OBJ_FORMAT_AUDIBLE              0xB904U
128 #define MTP_OBJ_FORMAT_FLAC                 0xB906U
129 #define MTP_OBJ_FORMAT_UNDEFINED_VIDEO      0xB980U
130 #define MTP_OBJ_FORMAT_WMV                  0xB981U
131 #define MTP_OBJ_FORMAT_MP4_CONTAINER        0xB982U
132 #define MTP_OBJ_FORMAT_MP2                  0xB983U
133 #define MTP_OBJ_FORMAT_3GP_CONTAINER        0xB984U
134 
135 /*  MTP event codes*/
136 #define MTP_EVENT_UNDEFINED               0x4000U
137 #define MTP_EVENT_CANCELTRANSACTION       0x4001U
138 #define MTP_EVENT_OBJECTADDED             0x4002U
139 #define MTP_EVENT_OBJECTREMOVED           0x4003U
140 #define MTP_EVENT_STOREADDED              0x4004U
141 #define MTP_EVENT_STOREREMOVED            0x4005U
142 #define MTP_EVENT_DEVICEPROPCHANGED       0x4006U
143 #define MTP_EVENT_OBJECTINFOCHANGED       0x4007U
144 #define MTP_EVENT_DEVICEINFOCHANGED       0x4008U
145 #define MTP_EVENT_REQUESTOBJECTTRANSFER   0x4009U
146 #define MTP_EVENT_STOREFULL               0x400AU
147 #define MTP_EVENT_DEVICERESET             0x400BU
148 #define MTP_EVENT_STORAGEINFOCHANGED      0x400CU
149 #define MTP_EVENT_CAPTURECOMPLETE         0x400DU
150 #define MTP_EVENT_UNREPORTEDSTATUS        0x400EU
151 #define MTP_EVENT_OBJECTPROPCHANGED       0xC801U
152 #define MTP_EVENT_OBJECTPROPDESCCHANGED   0xC802U
153 #define MTP_EVENT_OBJECTREFERENCESCHANGED 0xC803U
154 
155 /* MTP device properties code*/
156 #define MTP_DEV_PROP_UNDEFINED                      0x5000U
157 #define MTP_DEV_PROP_BATTERY_LEVEL                  0x5001U
158 #define MTP_DEV_PROP_FUNCTIONAL_MODE                0x5002U
159 #define MTP_DEV_PROP_IMAGE_SIZE                     0x5003U
160 #define MTP_DEV_PROP_COMPRESSION_SETTING            0x5004U
161 #define MTP_DEV_PROP_WHITE_BALANCE                  0x5005U
162 #define MTP_DEV_PROP_RGB_GAIN                       0x5006U
163 #define MTP_DEV_PROP_F_NUMBER                       0x5007U
164 #define MTP_DEV_PROP_FOCAL_LENGTH                   0x5008U
165 #define MTP_DEV_PROP_FOCUS_DISTANCE                 0x5009U
166 #define MTP_DEV_PROP_FOCUS_MODE                     0x500AU
167 #define MTP_DEV_PROP_EXPOSURE_METERING_MODE         0x500BU
168 #define MTP_DEV_PROP_FLASH_MODE                     0x500CU
169 #define MTP_DEV_PROP_EXPOSURE_TIME                  0x500DU
170 #define MTP_DEV_PROP_EXPOSURE_PROGRAM_MODE          0x500EU
171 #define MTP_DEV_PROP_EXPOSURE_INDEX                 0x500FU
172 #define MTP_DEV_PROP_EXPOSURE_BIAS_COMPENSATION     0x5010U
173 #define MTP_DEV_PROP_DATETIME                       0x5011U
174 #define MTP_DEV_PROP_CAPTURE_DELAY                  0x5012U
175 #define MTP_DEV_PROP_STILL_CAPTURE_MODE             0x5013U
176 #define MTP_DEV_PROP_CONTRAST                       0x5014U
177 #define MTP_DEV_PROP_SHARPNESS                      0x5015U
178 #define MTP_DEV_PROP_DIGITAL_ZOOM                   0x5016U
179 #define MTP_DEV_PROP_EFFECT_MODE                    0x5017U
180 #define MTP_DEV_PROP_BURST_NUMBER                   0x5018U
181 #define MTP_DEV_PROP_BURST_INTERVAL                 0x5019U
182 #define MTP_DEV_PROP_TIMELAPSE_NUMBER               0x501AU
183 #define MTP_DEV_PROP_TIMELAPSE_INTERVAL             0x501BU
184 #define MTP_DEV_PROP_FOCUS_METERING_MODE            0x501CU
185 #define MTP_DEV_PROP_UPLOAD_URL                     0x501DU
186 #define MTP_DEV_PROP_ARTIST                         0x501EU
187 #define MTP_DEV_PROP_COPYRIGHT_INFO                 0x501FU
188 #define MTP_DEV_PROP_SYNCHRONIZATION_PARTNER        0xD401U
189 #define MTP_DEV_PROP_DEVICE_FRIENDLY_NAME           0xD402U
190 #define MTP_DEV_PROP_VOLUME                         0xD403U
191 #define MTP_DEV_PROP_SUPPORTEDFORMATSORDERED        0xD404U
192 #define MTP_DEV_PROP_DEVICEICON                     0xD405U
193 #define MTP_DEV_PROP_PLAYBACK_RATE                  0xD410U
194 #define MTP_DEV_PROP_PLAYBACK_OBJECT                0xD411U
195 #define MTP_DEV_PROP_PLAYBACK_CONTAINER             0xD412U
196 #define MTP_DEV_PROP_SESSION_INITIATOR_VERSION_INFO 0xD406U
197 #define MTP_DEV_PROP_PERCEIVED_DEVICE_TYPE          0xD407U
198 
199 /*
200  * MTP Class specification Revision 1.1
201  * Appendix B. Object Properties
202  */
203 
204 /* MTP OBJECT PROPERTIES supported*/
205 #define MTP_OB_PROP_STORAGE_ID                          0xDC01U
206 #define MTP_OB_PROP_OBJECT_FORMAT                       0xDC02U
207 #define MTP_OB_PROP_PROTECTION_STATUS                   0xDC03U
208 #define MTP_OB_PROP_OBJECT_SIZE                         0xDC04U
209 #define MTP_OB_PROP_ASSOC_TYPE                          0xDC05U
210 #define MTP_OB_PROP_ASSOC_DESC                          0xDC06U
211 #define MTP_OB_PROP_OBJ_FILE_NAME                       0xDC07U
212 #define MTP_OB_PROP_DATE_CREATED                        0xDC08U
213 #define MTP_OB_PROP_DATE_MODIFIED                       0xDC09U
214 #define MTP_OB_PROP_KEYWORDS                            0xDC0AU
215 #define MTP_OB_PROP_PARENT_OBJECT                       0xDC0BU
216 #define MTP_OB_PROP_ALLOWED_FOLD_CONTENTS               0xDC0CU
217 #define MTP_OB_PROP_HIDDEN                              0xDC0DU
218 #define MTP_OB_PROP_SYSTEM_OBJECT                       0xDC0EU
219 #define MTP_OB_PROP_PERS_UNIQ_OBJ_IDEN                  0xDC41U
220 #define MTP_OB_PROP_SYNCID                              0xDC42U
221 #define MTP_OB_PROP_PROPERTY_BAG                        0xDC43U
222 #define MTP_OB_PROP_NAME                                0xDC44U
223 #define MTP_OB_PROP_CREATED_BY                          0xDC45U
224 #define MTP_OB_PROP_ARTIST                              0xDC46U
225 #define MTP_OB_PROP_DATE_AUTHORED                       0xDC47U
226 #define MTP_OB_PROP_DESCRIPTION                         0xDC48U
227 #define MTP_OB_PROP_URL_REFERENCE                       0xDC49U
228 #define MTP_OB_PROP_LANGUAGELOCALE                      0xDC4AU
229 #define MTP_OB_PROP_COPYRIGHT_INFORMATION               0xDC4BU
230 #define MTP_OB_PROP_SOURCE                              0xDC4CU
231 #define MTP_OB_PROP_ORIGIN_LOCATION                     0xDC4DU
232 #define MTP_OB_PROP_DATE_ADDED                          0xDC4EU
233 #define MTP_OB_PROP_NON_CONSUMABLE                      0xDC4FU
234 #define MTP_OB_PROP_CORRUPTUNPLAYABLE                   0xDC50U
235 #define MTP_OB_PROP_PRODUCERSERIALNUMBER                0xDC51U
236 #define MTP_OB_PROP_REPRESENTATIVE_SAMPLE_FORMAT        0xDC81U
237 #define MTP_OB_PROP_REPRESENTATIVE_SAMPLE_SIZE          0xDC82U
238 #define MTP_OB_PROP_REPRESENTATIVE_SAMPLE_HEIGHT        0xDC83U
239 #define MTP_OB_PROP_REPRESENTATIVE_SAMPLE_WIDTH         0xDC84U
240 #define MTP_OB_PROP_REPRESENTATIVE_SAMPLE_DURATION      0xDC85U
241 #define MTP_OB_PROP_REPRESENTATIVE_SAMPLE_DATA          0xDC86U
242 #define MTP_OB_PROP_WIDTH                               0xDC87U
243 #define MTP_OB_PROP_HEIGHT                              0xDC88U
244 #define MTP_OB_PROP_DURATION                            0xDC89U
245 #define MTP_OB_PROP_RATING                              0xDC8AU
246 #define MTP_OB_PROP_TRACK                               0xDC8BU
247 #define MTP_OB_PROP_GENRE                               0xDC8CU
248 #define MTP_OB_PROP_CREDITS                             0xDC8DU
249 #define MTP_OB_PROP_LYRICS                              0xDC8EU
250 #define MTP_OB_PROP_SUBSCRIPTION_CONTENT_ID             0xDC8FU
251 #define MTP_OB_PROP_PRODUCED_BY                         0xDC90U
252 #define MTP_OB_PROP_USE_COUNT                           0xDC91U
253 #define MTP_OB_PROP_SKIP_COUNT                          0xDC92U
254 #define MTP_OB_PROP_LAST_ACCESSED                       0xDC93U
255 #define MTP_OB_PROP_PARENTAL_RATING                     0xDC94U
256 #define MTP_OB_PROP_META_GENRE                          0xDC95U
257 #define MTP_OB_PROP_COMPOSER                            0xDC96U
258 #define MTP_OB_PROP_EFFECTIVE_RATING                    0xDC97U
259 #define MTP_OB_PROP_SUBTITLE                            0xDC98U
260 #define MTP_OB_PROP_ORIGINAL_RELEASE_DATE               0xDC99U
261 #define MTP_OB_PROP_ALBUM_NAME                          0xDC9AU
262 #define MTP_OB_PROP_ALBUM_ARTIST                        0xDC9BU
263 #define MTP_OB_PROP_MOOD                                0xDC9CU
264 #define MTP_OB_PROP_DRM_STATUS                          0xDC9DU
265 #define MTP_OB_PROP_SUB_DESCRIPTION                     0xDC9EU
266 #define MTP_OB_PROP_IS_CROPPED                          0xDCD1U
267 #define MTP_OB_PROP_IS_COLOUR_CORRECTED                 0xDCD2U
268 #define MTP_OB_PROP_IMAGE_BIT_DEPTH                     0xDCD3U
269 #define MTP_OB_PROP_FNUMBER                             0xDCD4U
270 #define MTP_OB_PROP_EXPOSURE_TIME                       0xDCD5U
271 #define MTP_OB_PROP_EXPOSURE_INDEX                      0xDCD6U
272 #define MTP_OB_PROP_TOTAL_BITRATE                       0xDE91U
273 #define MTP_OB_PROP_BITRATE_TYPE                        0xDE92U
274 #define MTP_OB_PROP_SAMPLE_RATE                         0xDE93U
275 #define MTP_OB_PROP_NUMBER_OF_CHANNELS                  0xDE94U
276 #define MTP_OB_PROP_AUDIO_BITDEPTH                      0xDE95U
277 #define MTP_OB_PROP_SCAN_TYPE                           0xDE97U
278 #define MTP_OB_PROP_AUDIO_WAVE_CODEC                    0xDE99U
279 #define MTP_OB_PROP_AUDIO_BITRATE                       0xDE9AU
280 #define MTP_OB_PROP_VIDEO_FOURCC_CODEC                  0xDE9BU
281 #define MTP_OB_PROP_VIDEO_BITRATE                       0xDE9CU
282 #define MTP_OB_PROP_FRAMES_PER_THOUSAND_SECONDS         0xDE9DU
283 #define MTP_OB_PROP_KEYFRAME_DISTANCE                   0xDE9EU
284 #define MTP_OB_PROP_BUFFER_SIZE                         0xDE9FU
285 #define MTP_OB_PROP_ENCODING_QUALITY                    0xDEA0U
286 #define MTP_OB_PROP_ENCODING_PROFILE                    0xDEA1U
287 #define MTP_OB_PROP_DISPLAY_NAME                        0xDCE0U
288 #define MTP_OB_PROP_BODY_TEXT                           0xDCE1U
289 #define MTP_OB_PROP_SUBJECT                             0xDCE2U
290 #define MTP_OB_PROP_PRIORITY                            0xDCE3U
291 #define MTP_OB_PROP_GIVEN_NAME                          0xDD00U
292 #define MTP_OB_PROP_MIDDLE_NAMES                        0xDD01U
293 #define MTP_OB_PROP_FAMILY_NAME                         0xDD02U
294 #define MTP_OB_PROP_PREFIX                              0xDD03U
295 #define MTP_OB_PROP_SUFFIX                              0xDD04U
296 #define MTP_OB_PROP_PHONETIC_GIVEN_NAME                 0xDD05U
297 #define MTP_OB_PROP_PHONETIC_FAMILY_NAME                0xDD06U
298 #define MTP_OB_PROP_EMAIL_PRIMARY                       0xDD07U
299 #define MTP_OB_PROP_EMAIL_PERSONAL_1                    0xDD08U
300 #define MTP_OB_PROP_EMAIL_PERSONAL_2                    0xDD09U
301 #define MTP_OB_PROP_EMAIL_BUSINESS_1                    0xDD0AU
302 #define MTP_OB_PROP_EMAIL_BUSINESS_2                    0xDD0BU
303 #define MTP_OB_PROP_EMAIL_OTHERS                        0xDD0CU
304 #define MTP_OB_PROP_PHONE_NUMBER_PRIMARY                0xDD0DU
305 #define MTP_OB_PROP_PHONE_NUMBER_PERSONAL               0xDD0EU
306 #define MTP_OB_PROP_PHONE_NUMBER_PERSONAL_2             0xDD0FU
307 #define MTP_OB_PROP_PHONE_NUMBER_BUSINESS               0xDD10U
308 #define MTP_OB_PROP_PHONE_NUMBER_BUSINESS_2             0xDD11U
309 #define MTP_OB_PROP_PHONE_NUMBER_MOBILE                 0xDD12U
310 #define MTP_OB_PROP_PHONE_NUMBER_MOBILE_2               0xDD13U
311 #define MTP_OB_PROP_FAX_NUMBER_PRIMARY                  0xDD14U
312 #define MTP_OB_PROP_FAX_NUMBER_PERSONAL                 0xDD15U
313 #define MTP_OB_PROP_FAX_NUMBER_BUSINESS                 0xDD16U
314 #define MTP_OB_PROP_PAGER_NUMBER                        0xDD17U
315 #define MTP_OB_PROP_PHONE_NUMBER_OTHERS                 0xDD18U
316 #define MTP_OB_PROP_PRIMARY_WEB_ADDRESS                 0xDD19U
317 #define MTP_OB_PROP_PERSONAL_WEB_ADDRESS                0xDD1AU
318 #define MTP_OB_PROP_BUSINESS_WEB_ADDRESS                0xDD1BU
319 #define MTP_OB_PROP_INSTANT_MESSENGER_ADDRESS           0xDD1CU
320 #define MTP_OB_PROP_INSTANT_MESSENGER_ADDRESS_2         0xDD1DU
321 #define MTP_OB_PROP_INSTANT_MESSENGER_ADDRESS_3         0xDD1EU
322 #define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_FULL        0xDD1FU
323 #define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_LINE_1      0xDD20U
324 #define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_LINE_2      0xDD21U
325 #define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_CITY        0xDD22U
326 #define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_REGION      0xDD23U
327 #define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_POSTAL_CODE 0xDD24U
328 #define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_COUNTRY     0xDD25U
329 #define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_FULL        0xDD26U
330 #define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_LINE_1      0xDD27U
331 #define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_LINE_2      0xDD28U
332 #define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_CITY        0xDD29U
333 #define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_REGION      0xDD2AU
334 #define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_POSTAL_CODE 0xDD2BU
335 #define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_COUNTRY     0xDD2CU
336 #define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_FULL           0xDD2DU
337 #define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_LINE_1         0xDD2EU
338 #define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_LINE_2         0xDD2FU
339 #define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_CITY           0xDD30U
340 #define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_REGION         0xDD31U
341 #define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_POSTAL_CODE    0xDD32U
342 #define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_COUNTRY        0xDD33U
343 #define MTP_OB_PROP_ORGANIZATION_NAME                   0xDD34U
344 #define MTP_OB_PROP_PHONETIC_ORGANIZATION_NAME          0xDD35U
345 #define MTP_OB_PROP_ROLE                                0xDD36U
346 #define MTP_OB_PROP_BIRTHDATE                           0xDD37U
347 #define MTP_OB_PROP_MESSAGE_TO                          0xDD40U
348 #define MTP_OB_PROP_MESSAGE_CC                          0xDD41U
349 #define MTP_OB_PROP_MESSAGE_BCC                         0xDD42U
350 #define MTP_OB_PROP_MESSAGE_READ                        0xDD43U
351 #define MTP_OB_PROP_MESSAGE_RECEIVED_TIME               0xDD44U
352 #define MTP_OB_PROP_MESSAGE_SENDER                      0xDD45U
353 #define MTP_OB_PROP_ACT_BEGIN_TIME                      0xDD50U
354 #define MTP_OB_PROP_ACT_END_TIME                        0xDD51U
355 #define MTP_OB_PROP_ACT_LOCATION                        0xDD52U
356 #define MTP_OB_PROP_ACT_REQUIRED_ATTENDEES              0xDD54U
357 #define MTP_OB_PROP_ACT_OPTIONAL_ATTENDEES              0xDD55U
358 #define MTP_OB_PROP_ACT_RESOURCES                       0xDD56U
359 #define MTP_OB_PROP_ACT_ACCEPTED                        0xDD57U
360 #define MTP_OB_PROP_OWNER                               0xDD5DU
361 #define MTP_OB_PROP_EDITOR                              0xDD5EU
362 #define MTP_OB_PROP_WEBMASTER                           0xDD5FU
363 #define MTP_OB_PROP_URL_SOURCE                          0xDD60U
364 #define MTP_OB_PROP_URL_DESTINATION                     0xDD61U
365 #define MTP_OB_PROP_TIME_BOOKMARK                       0xDD62U
366 #define MTP_OB_PROP_OBJECT_BOOKMARK                     0xDD63U
367 #define MTP_OB_PROP_BYTE_BOOKMARK                       0xDD64U
368 #define MTP_OB_PROP_LAST_BUILD_DATE                     0xDD70U
369 #define MTP_OB_PROP_TIME_TO_LIVE                        0xDD71U
370 #define MTP_OB_PROP_MEDIA_GUID                          0xDD72U
371 
372 /* MTP storage type */
373 #define MTP_STORAGE_UNDEFINED     0U
374 #define MTP_STORAGE_FIXED_ROM     0x0001U
375 #define MTP_STORAGE_REMOVABLE_ROM 0x0002U
376 #define MTP_STORAGE_FIXED_RAM     0x0003U
377 #define MTP_STORAGE_REMOVABLE_RAM 0x0004U
378 
379 /* MTP file system type */
380 #define MTP_FILESYSTEM_UNDEFINED        0U
381 #define MTP_FILESYSTEM_GENERIC_FLAT     0x0001U
382 #define MTP_FILESYSTEM_GENERIC_HIERARCH 0x0002U
383 #define MTP_FILESYSTEM_DCF              0x0003U
384 
385 /* MTP access capability */
386 #define MTP_ACCESS_CAP_RW             0U /* read write */
387 #define MTP_ACCESS_CAP_RO_WITHOUT_DEL 0x0001U
388 #define MTP_ACCESS_CAP_RO_WITH_DEL    0x0002U
389 
390 /* MTP standard data types supported */
391 #define MTP_DATATYPE_INT8    0x0001U
392 #define MTP_DATATYPE_UINT8   0x0002U
393 #define MTP_DATATYPE_INT16   0x0003U
394 #define MTP_DATATYPE_UINT16  0x0004U
395 #define MTP_DATATYPE_INT32   0x0005U
396 #define MTP_DATATYPE_UINT32  0x0006U
397 #define MTP_DATATYPE_INT64   0x0007U
398 #define MTP_DATATYPE_UINT64  0x0008U
399 #define MTP_DATATYPE_UINT128 0x000AU
400 #define MTP_DATATYPE_STR     0xFFFFU
401 
402 /* MTP reading only or reading/writing */
403 #define MTP_PROP_GET     0x00U
404 #define MTP_PROP_GET_SET 0x01U
405 
406 #define MTP_SESSION_CLOSED 0x00
407 #define MTP_SESSION_OPENED 0x01
408 
409 struct mtp_container_command {
410     uint32_t conlen;
411     uint16_t contype;
412     uint16_t code;
413     uint32_t trans_id;
414     uint32_t param1;
415     uint32_t param2;
416     uint32_t param3;
417     uint32_t param4;
418     uint32_t param5;
419 } __PACKED;
420 
421 struct mtp_container_data {
422     uint32_t conlen;
423     uint16_t contype;
424     uint16_t code;
425     uint32_t trans_id;
426     uint8_t data[512];
427 } __PACKED;
428 
429 struct mtp_container_response {
430     uint32_t conlen;
431     uint16_t contype;
432     uint16_t code;
433     uint32_t trans_id;
434 } __PACKED;
435 
436 /*Length of template descriptor: 23 bytes*/
437 #define MTP_DESCRIPTOR_LEN (9 + 7 + 7 + 7)
438 
439 // clang-format off
440 #define MTP_DESCRIPTOR_INIT(bFirstInterface, out_ep, in_ep, int_ep, wMaxPacketSize, str_idx) \
441     /* Interface */                                                      \
442     0x09,                          /* bLength */                         \
443     USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */                 \
444     bFirstInterface,               /* bInterfaceNumber */                \
445     0x00,                          /* bAlternateSetting */               \
446     0x03,                          /* bNumEndpoints */                   \
447     USB_DEVICE_CLASS_MASS_STORAGE, /* bInterfaceClass */                 \
448     USB_MTP_SUB_CLASS,             /* bInterfaceSubClass */              \
449     USB_MTP_PROTOCOL,              /* bInterfaceProtocol */              \
450     str_idx,                       /* iInterface */                      \
451     0x07,                          /* bLength */                         \
452     USB_DESCRIPTOR_TYPE_ENDPOINT,  /* bDescriptorType */                 \
453     out_ep,                        /* bEndpointAddress */                \
454     0x02,                          /* bmAttributes */                    \
455     WBVAL(wMaxPacketSize),         /* wMaxPacketSize */                  \
456     0x00,                          /* bInterval */                       \
457     0x07,                          /* bLength */                         \
458     USB_DESCRIPTOR_TYPE_ENDPOINT,  /* bDescriptorType */                 \
459     in_ep,                         /* bEndpointAddress */                \
460     0x02,                          /* bmAttributes */                    \
461     WBVAL(wMaxPacketSize),         /* wMaxPacketSize */                  \
462     0x00,                          /* bInterval */                       \
463     0x07,                          /* bLength */                         \
464     USB_DESCRIPTOR_TYPE_ENDPOINT,  /* bDescriptorType */                 \
465     int_ep,                        /* bEndpointAddress */                \
466     0x03,                          /* bmAttributes */                    \
467     0x1c, 0x00,                    /* wMaxPacketSize */                  \
468     0x06                           /* bInterval */
469 // clang-format on
470 
471 #endif /* USB_MTP_H */
472