rubymtp 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,49 @@
1
+ module MTP
2
+ class Association
3
+ ASSOCIATION_CODES = {
4
+ 0x0000 => "Undefined", 0x0001 => "Generic Folder", 0x0002 => "Album", 0x0003 => "Time Sequence",
5
+ 0x0004 => "Horizontal Panoramic", 0x0005 => "Vertical Panoramic", 0x0006 => "2D Panoramic",
6
+ 0x0007 => "Ancillary Data"
7
+ }
8
+
9
+ def self.load(code, desc)
10
+ assoc = case code
11
+ when 0x0001
12
+ GenericFolder.load(desc)
13
+ else
14
+ Association.new
15
+ end
16
+ assoc.instance_eval do
17
+ self.code = code
18
+ end
19
+ assoc
20
+ end
21
+
22
+ attr_reader :code
23
+ def code=(code)
24
+ @code = (code.is_a?(Datacode) ? code : Datacode.new(code, ASSOCIATION_CODES))
25
+ end
26
+
27
+ def desc
28
+ 0x0000
29
+ end
30
+
31
+ class GenericFolder < Association
32
+ def self.load(desc)
33
+ assoc = GenericFolder.new
34
+ assoc.instance_eval do
35
+ @bidirectional = !desc.zero?
36
+ end
37
+ assoc
38
+ end
39
+
40
+ def bidirectional?
41
+ @bidirectional
42
+ end
43
+
44
+ def desc
45
+ (!@birirectional).to_i
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,121 @@
1
+ module MTP
2
+ class Container
3
+ attr_accessor :length_read
4
+ def self.parse(str)
5
+ length, type, code, transaction_id, payload = str.unpack_without_mtp("ISSIa*")
6
+ container = case type
7
+ when 1
8
+ Request.new
9
+ when 2
10
+ Data.new
11
+ when 3
12
+ Response.new
13
+ when 4
14
+ Event.new
15
+ else
16
+ raise MTPError.new("unable to parse packet: #{str.inspect}")
17
+ end
18
+ container.length, container.code, container.transaction_id, container.payload =
19
+ length, code, transaction_id, payload
20
+ container
21
+ end
22
+
23
+ attr_accessor :code, :transaction_id, :length, :payload
24
+
25
+ def code=(code)
26
+ @code = (code.is_a?(Datacode) ? code : Datacode.new(code))
27
+ end
28
+
29
+ def type
30
+ 0
31
+ end
32
+
33
+ def pack
34
+ blob = [ type, code, transaction_id ].pack_without_mtp("SSI") + pack_payload
35
+ return [ blob.length + 4 ].pack_without_mtp("I") + blob
36
+ end
37
+
38
+ def pack_header
39
+ blob = [ type, code, transaction_id ].pack_without_mtp("SSI") + pack_payload
40
+ return [ blob.length + 4, type, code, transaction_id ].pack_without_mtp("ISSI")
41
+ end
42
+
43
+ def pack_payload
44
+ @payload
45
+ end
46
+
47
+ def to_s
48
+ "#{self.class} @code=#{code.inspect}, @transaction_id=#{transaction_id}"
49
+ end
50
+ end
51
+
52
+ class ParametersContainer < Container
53
+ attr_accessor :parameters
54
+ def initialize
55
+ super
56
+ @parameters = []
57
+ end
58
+
59
+ def pack_payload
60
+ @parameters.pack_without_mtp("I*")
61
+ end
62
+
63
+ def payload=(payload)
64
+ @payload = payload
65
+ @parameters = payload.unpack("I*")
66
+ end
67
+ end
68
+
69
+ class Request < ParametersContainer
70
+ def self.for(code, *parameters)
71
+ request = Request.new
72
+ request.code = code
73
+ request.parameters = parameters
74
+ request
75
+ end
76
+
77
+ def type
78
+ 1
79
+ end
80
+ end
81
+
82
+ class Data < Container
83
+ attr_accessor :size
84
+
85
+ def initialize(payload = nil, size = nil)
86
+ @payload = payload
87
+ @size = size
88
+ end
89
+
90
+ def type
91
+ 2
92
+ end
93
+
94
+ def pack_header
95
+ if size.nil?
96
+ blob = [ type, code, transaction_id ].pack_without_mtp("SSI") + pack_payload
97
+ return [ blob.length + 4, type, code, transaction_id ].pack_without_mtp("ISSI")
98
+ else
99
+ blob = [ 12 + size, type, code, transaction_id ].pack_without_mtp("ISSI")
100
+ end
101
+ end
102
+
103
+ end
104
+
105
+ class Response < ParametersContainer
106
+ attr_accessor :data
107
+ def one_of?(*names)
108
+ names.include?(code.name)
109
+ end
110
+
111
+ def type
112
+ 3
113
+ end
114
+ end
115
+
116
+ class Event < Container
117
+ def type
118
+ 4
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,485 @@
1
+ module MTP
2
+ class Datacode
3
+ module Masks
4
+ UNDEFINED = 0B0000000000000000
5
+ OPERATION = 0B0001000000000000
6
+ RESPONSE = 0B0010000000000000
7
+ OBJECT_FORMAT = 0B0011000000000000
8
+ EVENT = 0B0100000000000000
9
+ DEVICE_PROPERTY = 0B0101000000000000
10
+ OBJECT_PROPERTY = 0B1101110000000000
11
+ end
12
+
13
+ @@name_codes = {}
14
+ attr_reader :name
15
+ def initialize(code, hash = nil, mask = nil)
16
+ hash = CODE_NAMES if hash.nil?
17
+ if code.is_a?(String)
18
+ @name = code
19
+ hash.each do |c, value|
20
+ if value == code and (mask.nil? or (c & mask) == mask)
21
+ @code = c
22
+ break
23
+ end
24
+ end
25
+ raise RuntimeError.new("unknown data code: #{code}") if @code.nil?
26
+ else
27
+ @code = code
28
+ @name = hash[@code]
29
+ end
30
+ self.freeze
31
+ end
32
+
33
+ def ==(object)
34
+ @code.to_i == object.to_i
35
+ end
36
+
37
+ def to_s
38
+ @name
39
+ end
40
+
41
+ def to_int
42
+ @code.to_int
43
+ end
44
+
45
+ def method_missing(method, *args)
46
+ @code.send(method, *args)
47
+ end
48
+
49
+ def inspect
50
+ "<Datacode 0x%04x:%s>" % [ @code, @name ]
51
+ end
52
+
53
+ CODE_NAMES = {
54
+ 0x0000 => nil,
55
+ 0x1000 => "Undefined",
56
+ 0x1001 => "GetDeviceInfo",
57
+ 0x1002 => "OpenSession",
58
+ 0x1003 => "CloseSession",
59
+ 0x1004 => "GetStorageIds",
60
+ 0x1005 => "GetStorageInfo",
61
+ 0x1006 => "GetNumObjects",
62
+ 0x1007 => "GetObjectHandles",
63
+ 0x1008 => "GetObjectInfo",
64
+ 0x1009 => "GetObject",
65
+ 0x100A => "GetThumb",
66
+ 0x100B => "DeleteObject",
67
+ 0x100C => "SendObjectInfo",
68
+ 0x100D => "SendObject",
69
+ 0x100E => "InitiateCapture",
70
+ 0x100F => "FormatStore",
71
+ 0x1010 => "ResetDevice",
72
+ 0x1011 => "SelfTest",
73
+ 0x1012 => "SetObjectProtection",
74
+ 0x1013 => "PowerDown",
75
+ 0x1014 => "GetDevicePropDesc",
76
+ 0x1015 => "GetDevicePropValue",
77
+ 0x1016 => "SetDevicePropValue",
78
+ 0x1017 => "ResetDevicePropValue",
79
+ 0x1018 => "TerminateOpenCapture",
80
+ 0x1019 => "MoveObject",
81
+ 0x101A => "CopyObject",
82
+ 0x101B => "GetPartialObject",
83
+ 0x101C => "InitiateOpenCapture",
84
+ 0x9801 => "GetObjectPropsSupported",
85
+ 0x9802 => "GetObjectPropDesc",
86
+ 0x9803 => "GetObjectPropValue",
87
+ 0x9804 => "SetObjectPropValue",
88
+ 0x9805 => "GetObjPropList",
89
+ 0x9806 => "SetObjPropList",
90
+ 0x9807 => "GetInterdependendPropdesc",
91
+ 0x9808 => "SendObjectPropList",
92
+ 0x9810 => "GetObjectReferences",
93
+ 0x9811 => "SetObjectReferences",
94
+ 0x9812 => "UpdateDeviceFirmware",
95
+ 0x9820 => "Skip",
96
+ 0x9101 => "GetSecureTimeChallenge",
97
+ 0x9102 => "GetSecureTimeResponse",
98
+ 0x9103 => "SetLicenseResponse",
99
+ 0x9104 => "GetSyncList",
100
+ 0x9105 => "SendMeterChallengeQuery",
101
+ 0x9106 => "GetMeterChallenge",
102
+ 0x9107 => "SetMeterResponse",
103
+ 0x9108 => "CleanDataStore",
104
+ 0x9109 => "GetLicenseState",
105
+ 0x910A => "SendWMDRMPDCommand",
106
+ 0x910B => "SendWMDRMPDRequest",
107
+ 0x9212 => "SendWMDRMPDAppRequest",
108
+ 0x9213 => "GetWMDRMPDAppResponse",
109
+ 0x9214 => "EnableTrustedFilesOperations",
110
+ 0x9215 => "DisableTrustedFilesOperations",
111
+ 0x9216 => "EndTrustedAppSession",
112
+ 0x9170 => "OpenMediaSession1",
113
+ 0x9171 => "OpenMediaSession2",
114
+ 0x9172 => "GetNextDataBlock",
115
+ 0x9173 => "SetCurrentTimePosition",
116
+ 0x9180 => "SendRegistrationRequest",
117
+ 0x9181 => "GetRegistrationResponse",
118
+ 0x9182 => "GetProximityChallenge",
119
+ 0x9183 => "SendProximityResponse",
120
+ 0x9184 => "SendWMDRMNDLicenseRequest",
121
+ 0x9185 => "GetWMDRMNDLicenseResponse",
122
+ 0x9201 => "ReportAddedDeletedItems",
123
+ 0x9202 => "ReportAcquiredItems",
124
+ 0x9203 => "PlaylistObjectPref",
125
+ 0x2000 => "Undefined",
126
+ 0x2001 => "OK",
127
+ 0x2002 => "GeneralError",
128
+ 0x2003 => "SessionNotOpen",
129
+ 0x2004 => "InvalidTransactionID",
130
+ 0x2005 => "OperationNotSupported",
131
+ 0x2006 => "ParameterNotSupported",
132
+ 0x2007 => "IncompleteTransfer",
133
+ 0x2008 => "InvalidStorageId",
134
+ 0x2009 => "InvalidObjectHandle",
135
+ 0x200A => "DevicePropNotSupported",
136
+ 0x200B => "InvalidObjectFormatCode",
137
+ 0x200C => "StoreFull",
138
+ 0x200D => "ObjectWriteProtected",
139
+ 0x200E => "StoreReadOnly",
140
+ 0x200F => "AccessDenied",
141
+ 0x2010 => "NoThumbnailPresent",
142
+ 0x2011 => "SelfTestFailed",
143
+ 0x2012 => "PartialDeletion",
144
+ 0x2013 => "StoreNotAvailable",
145
+ 0x2014 => "SpecificationByFormatUnsupported",
146
+ 0x2015 => "NoValidObjectInfo",
147
+ 0x2016 => "InvalidCodeFormat",
148
+ 0x2017 => "UnknownVendorCode",
149
+ 0x2018 => "CaptureAlreadyTerminated",
150
+ 0x2019 => "DeviceBusy",
151
+ 0x201A => "InvalidParentObject",
152
+ 0x201B => "InvalidDevicePropFormat",
153
+ 0x201C => "InvalidDevicePropValue",
154
+ 0x201D => "InvalidParameter",
155
+ 0x201E => "SessionAlreadyOpened",
156
+ 0x201F => "TransactionCanceled",
157
+ 0x2020 => "SpecificationOfDestinationUnsupported",
158
+ 0x4000 => "Undefined",
159
+ 0x4001 => "CancelTransaction",
160
+ 0x4002 => "ObjectAdded",
161
+ 0x4003 => "ObjectRemoved",
162
+ 0x4004 => "StoreAdded",
163
+ 0x4005 => "StoreRemoved",
164
+ 0x4006 => "DevicePropChanged",
165
+ 0x4007 => "ObjectInfoChanged",
166
+ 0x4008 => "DeviceInfoChanged",
167
+ 0x4009 => "RequestObjectTransfer",
168
+ 0x400A => "StoreFull",
169
+ 0x400B => "DeviceReset",
170
+ 0x400C => "StorageInfoChanged",
171
+ 0x400D => "CaptureComplete",
172
+ 0x400E => "UnreportedStatus",
173
+ 0x3000 => "Undefined",
174
+ 0x3800 => "Defined",
175
+ 0x3001 => "Association",
176
+ 0x3002 => "Script",
177
+ 0x3003 => "Executable",
178
+ 0x3004 => "Text",
179
+ 0x3005 => "HTML",
180
+ 0x3006 => "DPOF",
181
+ 0x3007 => "AIFF",
182
+ 0x3008 => "WAV",
183
+ 0x3009 => "MP3",
184
+ 0x300A => "AVI",
185
+ 0x300B => "MPEG",
186
+ 0x300C => "ASF",
187
+ 0x300D => "QT",
188
+ 0x3801 => "EXIF_JPEG",
189
+ 0x3802 => "TIFF_EP",
190
+ 0x3803 => "FlashPix",
191
+ 0x3804 => "BMP",
192
+ 0x3805 => "CIFF",
193
+ 0x3806 => "Undefined_0x3806",
194
+ 0x3807 => "GIF",
195
+ 0x3808 => "JFIF",
196
+ 0x3809 => "PCD",
197
+ 0x380A => "PICT",
198
+ 0x380B => "PNG",
199
+ 0x380C => "Undefined_0x380C",
200
+ 0x380D => "TIFF",
201
+ 0x380E => "TIFF_IT",
202
+ 0x380F => "JP2",
203
+ 0x3810 => "JPX",
204
+ 0xb002 => "EK_M3U",
205
+ 0xb211 => "MediaCard",
206
+ 0xb212 => "MediaCardGroup",
207
+ 0xb213 => "Encounter",
208
+ 0xb214 => "EncounterBox",
209
+ 0xb215 => "M4A",
210
+ 0xb217 => "ZUNEUNDEFINED",
211
+ 0xb802 => "Firmware",
212
+ 0xb881 => "WindowsImageFormat",
213
+ 0xb900 => "UndefinedAudio",
214
+ 0xb901 => "WMA",
215
+ 0xb902 => "OGG",
216
+ 0xb903 => "AAC",
217
+ 0xb904 => "AudibleCodec",
218
+ 0xb906 => "FLAC",
219
+ 0xb980 => "UndefinedVideo",
220
+ 0xb981 => "WMV",
221
+ 0xb982 => "MP4",
222
+ 0xb983 => "MP2",
223
+ 0xb984 => "3GP",
224
+ 0xba00 => "UndefinedCollection",
225
+ 0xba01 => "AbstractMultimediaAlbum",
226
+ 0xba02 => "AbstractImageAlbum",
227
+ 0xba03 => "AbstractAudioAlbum",
228
+ 0xba04 => "AbstractVideoAlbum",
229
+ 0xba05 => "AbstractAudioVideoPlaylist",
230
+ 0xba06 => "AbstractContactGroup",
231
+ 0xba07 => "AbstractMessageFolder",
232
+ 0xba08 => "AbstractChapteredProduction",
233
+ 0xba09 => "AbstractAudioPlaylist",
234
+ 0xba0a => "AbstractVideoPlaylist",
235
+ 0xba0b => "AbstractMediacast",
236
+ 0xba10 => "WPLPlaylist",
237
+ 0xba11 => "M3UPlaylist",
238
+ 0xba12 => "MPLPlaylist",
239
+ 0xba13 => "ASXPlaylist",
240
+ 0xba14 => "PLSPlaylist",
241
+ 0xba80 => "UndefinedDocument",
242
+ 0xba81 => "AbstractDocument",
243
+ 0xba82 => "XMLDocument",
244
+ 0xba83 => "MSWordDocument",
245
+ 0xba84 => "MHTCompiledHTMLDocument",
246
+ 0xba85 => "MSExcelSpreadsheetXLS",
247
+ 0xba86 => "MSPowerpointPresentationPPT",
248
+ 0xbb00 => "UndefinedMessage",
249
+ 0xbb01 => "AbstractMessage",
250
+ 0xbb80 => "UndefinedContact",
251
+ 0xbb81 => "AbstractContact",
252
+ 0xbb82 => "vCard2",
253
+ 0xbb83 => "vCard3",
254
+ 0xbe00 => "UndefinedCalendarItem",
255
+ 0xbe01 => "AbstractCalendarItem",
256
+ 0xbe02 => "vCalendar1",
257
+ 0xbe03 => "vCalendar2",
258
+ 0xbe80 => "UndefinedWindowsExecutable",
259
+ 0x5000 => "Undefined",
260
+ 0x5001 => "BatteryLevel",
261
+ 0x5002 => "FunctionalMode",
262
+ 0x5003 => "ImageSize",
263
+ 0x5004 => "CompressionSetting",
264
+ 0x5005 => "WhiteBalance",
265
+ 0x5006 => "RGBGain",
266
+ 0x5007 => "FNumber",
267
+ 0x5008 => "FocalLength",
268
+ 0x5009 => "FocusDistance",
269
+ 0x500A => "FocusMode",
270
+ 0x500B => "ExposureMeteringMode",
271
+ 0x500C => "FlashMode",
272
+ 0x500D => "ExposureTime",
273
+ 0x500E => "ExposureProgramMode",
274
+ 0x500F => "ExposureIndex",
275
+ 0x5010 => "ExposureBiasCompensation",
276
+ 0x5011 => "DateTime",
277
+ 0x5012 => "CaptureDelay",
278
+ 0x5013 => "StillCaptureMode",
279
+ 0x5014 => "Contrast",
280
+ 0x5015 => "Sharpness",
281
+ 0x5016 => "DigitalZoom",
282
+ 0x5017 => "EffectMode",
283
+ 0x5018 => "BurstNumber",
284
+ 0x5019 => "BurstInterval",
285
+ 0x501A => "TimelapseNumber",
286
+ 0x501B => "TimelapseInterval",
287
+ 0x501C => "FocusMeteringMode",
288
+ 0x501D => "UploadURL",
289
+ 0x501E => "Artist",
290
+ 0x501F => "CopyrightInfo",
291
+ 0xD181 => "ZUNE_UNKNOWN1",
292
+ 0xD132 => "ZUNE_UNKNOWN2",
293
+ 0xD215 => "ZUNE_UNKNOWN3",
294
+ 0xD216 => "ZUNE_UNKNOWN4",
295
+ 0xD101 => "SecureTime",
296
+ 0xD102 => "DeviceCertificate",
297
+ 0xD103 => "RevocationInfo",
298
+ 0xD401 => "SynchronizationPartner",
299
+ 0xD402 => "DeviceFriendlyName",
300
+ 0xD403 => "VolumeLevel",
301
+ 0xD405 => "DeviceIcon",
302
+ 0xD410 => "PlaybackRate",
303
+ 0xD411 => "PlaybackObject",
304
+ 0xD412 => "PlaybackContainerIndex",
305
+ 0xD413 => "PlaybackPosition",
306
+ 0xD131 => "PlaysForSureID",
307
+ 0xD181 => "Zune_UnknownVersion",
308
+ 0xDC01 => "StorageID",
309
+ 0xDC02 => "ObjectFormat",
310
+ 0xDC03 => "ProtectionStatus",
311
+ 0xDC04 => "ObjectSize",
312
+ 0xDC05 => "AssociationType",
313
+ 0xDC06 => "AssociationDesc",
314
+ 0xDC07 => "ObjectFileName",
315
+ 0xDC08 => "DateCreated",
316
+ 0xDC09 => "DateModified",
317
+ 0xDC0A => "Keywords",
318
+ 0xDC0B => "ParentObject",
319
+ 0xDC0C => "AllowedFolderContents",
320
+ 0xDC0D => "Hidden",
321
+ 0xDC0E => "SystemObject",
322
+ 0xDC41 => "PersistantUniqueObjectIdentifier",
323
+ 0xDC42 => "SyncID",
324
+ 0xDC43 => "PropertyBag",
325
+ 0xDC44 => "Name",
326
+ 0xDC45 => "CreatedBy",
327
+ 0xDC46 => "Artist",
328
+ 0xDC47 => "DateAuthored",
329
+ 0xDC48 => "Description",
330
+ 0xDC49 => "URLReference",
331
+ 0xDC4A => "LanguageLocale",
332
+ 0xDC4B => "CopyrightInformation",
333
+ 0xDC4C => "Source",
334
+ 0xDC4D => "OriginLocation",
335
+ 0xDC4E => "DateAdded",
336
+ 0xDC4F => "NonConsumable",
337
+ 0xDC50 => "CorruptOrUnplayable",
338
+ 0xDC51 => "ProducerSerialNumber",
339
+ 0xDC81 => "RepresentativeSampleFormat",
340
+ 0xDC82 => "RepresentativeSampleSize",
341
+ 0xDC83 => "RepresentativeSampleHeight",
342
+ 0xDC84 => "RepresentativeSampleWidth",
343
+ 0xDC85 => "RepresentativeSampleDuration",
344
+ 0xDC86 => "RepresentativeSampleData",
345
+ 0xDC87 => "Width",
346
+ 0xDC88 => "Height",
347
+ 0xDC89 => "Duration",
348
+ 0xDC8A => "Rating",
349
+ 0xDC8B => "Track",
350
+ 0xDC8C => "Genre",
351
+ 0xDC8D => "Credits",
352
+ 0xDC8E => "Lyrics",
353
+ 0xDC8F => "SubscriptionContentID",
354
+ 0xDC90 => "ProducedBy",
355
+ 0xDC91 => "UseCount",
356
+ 0xDC92 => "SkipCount",
357
+ 0xDC93 => "LastAccessed",
358
+ 0xDC94 => "ParentalRating",
359
+ 0xDC95 => "MetaGenre",
360
+ 0xDC96 => "Composer",
361
+ 0xDC97 => "EffectiveRating",
362
+ 0xDC98 => "Subtitle",
363
+ 0xDC99 => "OriginalReleaseDate",
364
+ 0xDC9A => "AlbumName",
365
+ 0xDC9B => "AlbumArtist",
366
+ 0xDC9C => "Mood",
367
+ 0xDC9D => "DRMStatus",
368
+ 0xDC9E => "SubDescription",
369
+ 0xDCD1 => "IsCropped",
370
+ 0xDCD2 => "IsColorCorrected",
371
+ 0xDCD3 => "ImageBitDepth",
372
+ 0xDCD4 => "Fnumber",
373
+ 0xDCD5 => "ExposureTime",
374
+ 0xDCD6 => "ExposureIndex",
375
+ 0xDCE0 => "DisplayName",
376
+ 0xDCE1 => "BodyText",
377
+ 0xDCE2 => "Subject",
378
+ 0xDCE3 => "Prority",
379
+ 0xDD00 => "GivenName",
380
+ 0xDD01 => "MiddleNames",
381
+ 0xDD02 => "FamilyName",
382
+ 0xDD03 => "Prefix",
383
+ 0xDD04 => "Suffix",
384
+ 0xDD05 => "PhoneticGivenName",
385
+ 0xDD06 => "PhoneticFamilyName",
386
+ 0xDD07 => "EmailPrimary",
387
+ 0xDD08 => "EmailPersonal1",
388
+ 0xDD09 => "EmailPersonal2",
389
+ 0xDD0A => "EmailBusiness1",
390
+ 0xDD0B => "EmailBusiness2",
391
+ 0xDD0C => "EmailOthers",
392
+ 0xDD0D => "PhoneNumberPrimary",
393
+ 0xDD0E => "PhoneNumberPersonal",
394
+ 0xDD0F => "PhoneNumberPersonal2",
395
+ 0xDD10 => "PhoneNumberBusiness",
396
+ 0xDD11 => "PhoneNumberBusiness2",
397
+ 0xDD12 => "PhoneNumberMobile",
398
+ 0xDD13 => "PhoneNumberMobile2",
399
+ 0xDD14 => "FaxNumberPrimary",
400
+ 0xDD15 => "FaxNumberPersonal",
401
+ 0xDD16 => "FaxNumberBusiness",
402
+ 0xDD17 => "PagerNumber",
403
+ 0xDD18 => "PhoneNumberOthers",
404
+ 0xDD19 => "PrimaryWebAddress",
405
+ 0xDD1A => "PersonalWebAddress",
406
+ 0xDD1B => "BusinessWebAddress",
407
+ 0xDD1C => "InstantMessengerAddress",
408
+ 0xDD1D => "InstantMessengerAddress2",
409
+ 0xDD1E => "InstantMessengerAddress3",
410
+ 0xDD1F => "PostalAddressPersonalFull",
411
+ 0xDD20 => "PostalAddressPersonalFullLine1",
412
+ 0xDD21 => "PostalAddressPersonalFullLine2",
413
+ 0xDD22 => "PostalAddressPersonalFullCity",
414
+ 0xDD23 => "PostalAddressPersonalFullRegion",
415
+ 0xDD24 => "PostalAddressPersonalFullPostalCode",
416
+ 0xDD25 => "PostalAddressPersonalFullCountry",
417
+ 0xDD26 => "PostalAddressBusinessFull",
418
+ 0xDD27 => "PostalAddressBusinessLine1",
419
+ 0xDD28 => "PostalAddressBusinessLine2",
420
+ 0xDD29 => "PostalAddressBusinessCity",
421
+ 0xDD2A => "PostalAddressBusinessRegion",
422
+ 0xDD2B => "PostalAddressBusinessPostalCode",
423
+ 0xDD2C => "PostalAddressBusinessCountry",
424
+ 0xDD2D => "PostalAddressOtherFull",
425
+ 0xDD2E => "PostalAddressOtherLine1",
426
+ 0xDD2F => "PostalAddressOtherLine2",
427
+ 0xDD30 => "PostalAddressOtherCity",
428
+ 0xDD31 => "PostalAddressOtherRegion",
429
+ 0xDD32 => "PostalAddressOtherPostalCode",
430
+ 0xDD33 => "PostalAddressOtherCountry",
431
+ 0xDD34 => "OrganizationName",
432
+ 0xDD35 => "PhoneticOrganizationName",
433
+ 0xDD36 => "Role",
434
+ 0xDD37 => "Birthdate",
435
+ 0xDD40 => "MessageTo",
436
+ 0xDD41 => "MessageCC",
437
+ 0xDD42 => "MessageBCC",
438
+ 0xDD43 => "MessageRead",
439
+ 0xDD44 => "MessageReceivedTime",
440
+ 0xDD45 => "MessageSender",
441
+ 0xDD50 => "ActivityBeginTime",
442
+ 0xDD51 => "ActivityEndTime",
443
+ 0xDD52 => "ActivityLocation",
444
+ 0xDD54 => "ActivityRequiredAttendees",
445
+ 0xDD55 => "ActivityOptionalAttendees",
446
+ 0xDD56 => "ActivityResources",
447
+ 0xDD57 => "ActivityAccepted",
448
+ 0xDD5D => "Owner",
449
+ 0xDD5E => "Editor",
450
+ 0xDD5F => "Webmaster",
451
+ 0xDD60 => "URLSource",
452
+ 0xDD61 => "URLDestination",
453
+ 0xDD62 => "TimeBookmark",
454
+ 0xDD63 => "ObjectBookmark",
455
+ 0xDD64 => "ByteBookmark",
456
+ 0xDD70 => "LastBuildDate",
457
+ 0xDD71 => "TimetoLive",
458
+ 0xDD72 => "MediaGUID",
459
+ 0xDE91 => "TotalBitRate",
460
+ 0xDE92 => "BitRateType",
461
+ 0xDE93 => "SampleRate",
462
+ 0xDE94 => "NumberOfChannels",
463
+ 0xDE95 => "AudioBitDepth",
464
+ 0xDE97 => "ScanDepth",
465
+ 0xDE99 => "AudioWaveCodec",
466
+ 0xDE9A => "AudioBitRate",
467
+ 0xDE9B => "VideoFourCCCodec",
468
+ 0xDE9C => "VideoBitRate",
469
+ 0xDE9D => "FramesPerThousandSeconds",
470
+ 0xDE9E => "KeyFrameDistance",
471
+ 0xDE9F => "BufferSize",
472
+ 0xDEA0 => "EncodingQuality",
473
+ 0xD901 => "BuyFlag",
474
+ 0xB104 => "WirelessConfigurationFile",
475
+ 0xA800 => "MTP_Undefined",
476
+ 0xA801 => "MTP_Invalid_ObjectPropCode",
477
+ 0xA802 => "MTP_Invalid_ObjectProp_Format",
478
+ 0xA803 => "MTP_Invalid_ObjectProp_Value",
479
+ 0xA804 => "MTP_Invalid_ObjectReference",
480
+ 0xA806 => "MTP_Invalid_Dataset",
481
+ 0xA808 => "MTP_Specification_By_Group_Unsupported",
482
+ 0xA809 => "MTP_Object_Too_Large"
483
+ }
484
+ end
485
+ end