rubymtp 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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