rubymtp 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +340 -0
- data/ChangeLog +2 -0
- data/README +57 -0
- data/bin/mtpfs +10 -0
- data/bin/podcast +10 -0
- data/lib/mtp.rb +285 -0
- data/lib/mtp/association.rb +49 -0
- data/lib/mtp/container.rb +121 -0
- data/lib/mtp/datacode.rb +485 -0
- data/lib/mtp/datatypes.rb +51 -0
- data/lib/mtp/device.rb +270 -0
- data/lib/mtp/fuse.rb +368 -0
- data/lib/mtp/object.rb +122 -0
- data/lib/mtp/playlist.rb +60 -0
- data/lib/mtp/podcast.rb +162 -0
- data/lib/mtp/properties.rb +226 -0
- data/lib/mtp/protocol.rb +298 -0
- data/lib/mtp/storage.rb +39 -0
- data/lib/mtp/track.rb +74 -0
- data/patches/ruby-mp3info-0.5.diff +80 -0
- data/patches/syndication-0.6.1.diff +41 -0
- data/test/container_test.rb +13 -0
- metadata +87 -0
@@ -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
|
data/lib/mtp/datacode.rb
ADDED
@@ -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
|