New MTP types and defs
diff --git a/AUTHORS b/AUTHORS
index 5f4ae3a..33fbb9a 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -23,3 +23,4 @@
Dave Kelly <[email protected]>
Matthew Wilcox <[email protected]>
Robert Reardon <[email protected]>
+Orson Teodoro <[email protected]>
diff --git a/ChangeLog b/ChangeLog
index 0a5934e..cfae659 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2006-12-30 Orson Teodoro <[email protected]>
+
+ * src/ptp.h: added WMDRMPD, WMDRMND, WMPPD, WPDWCN extension
+ codes. added more format object codes flac, m4a, 3gp, aac,
+ xml, xls, ppt, etc. 0x9101-0x910B identfiers are infixed
+ with WMDRMPD. Added more object properties codes (0xDCD3-0xDD72).
+ Added more device property codes.
+ Changed PTP_OFC_MTP_WindowsImageFormat to 0xb881 reflect spec.
+ * src/ptp.c: added changes to reflect new extensions, object
+ codes, device property codes.
+ * src/libmtp.c: modified mp4 to reflect it is a container format
+ not a codec. Added more descriptions in init_filemap(). mp4
+ container format is ambiguous in
+ LIBMTP_Send_File_From_File_Descriptor(). Audio? video? both?.
+ mp4 searched in video by default. Added comments about this.
+ Added support for the new format object types.
+ * src/libmtp.h.in: added constants to reflect changes to
+ init_filemap().
+
2006-12-30 Richard Low <[email protected]>
* src/libusb-glue.c: fixed bug in debug printing
diff --git a/src/libmtp.c b/src/libmtp.c
index ceced61..0eab8d4 100644
--- a/src/libmtp.c
+++ b/src/libmtp.c
@@ -189,12 +189,17 @@
static void init_filemap()
{
+ register_filetype("MediaCard", LIBMTP_FILETYPE_MEDIACARD, PTP_OFC_MTP_MediaCard);
register_filetype("RIFF WAVE file", LIBMTP_FILETYPE_WAV, PTP_OFC_WAV);
- register_filetype("ISO MPEG Audio Layer 3", LIBMTP_FILETYPE_MP3, PTP_OFC_MP3);
+ register_filetype("ISO MPEG-1 Audio Layer 3", LIBMTP_FILETYPE_MP3, PTP_OFC_MP3);
+ register_filetype("ISO MPEG-1 Audio Layer 2", LIBMTP_FILETYPE_MP2, PTP_OFC_MTP_MP2);
register_filetype("Microsoft Windows Media Audio", LIBMTP_FILETYPE_WMA, PTP_OFC_MTP_WMA);
register_filetype("Ogg container format", LIBMTP_FILETYPE_OGG, PTP_OFC_MTP_OGG);
+ register_filetype("Free Lossless Audio Codec (FLAC)", LIBMTP_FILETYPE_FLAC, PTP_OFC_MTP_FLAC);
+ register_filetype("Advanced Audio Coding (AAC)/MPEG-2 Part 7/MPEG-4 Part 3", LIBMTP_FILETYPE_AAC, PTP_OFC_MTP_AAC);
+ register_filetype("MPEG-4 Part 14 Container Format (Audio Empahsis)", LIBMTP_FILETYPE_M4A, PTP_OFC_MTP_M4A);
+ register_filetype("MPEG-4 Part 14 Container Format (Audio+Video Empahsis)", LIBMTP_FILETYPE_MP4, PTP_OFC_MTP_MP4);
register_filetype("Audible.com Audio Codec", LIBMTP_FILETYPE_AUDIBLE, PTP_OFC_MTP_AudibleCodec);
- register_filetype("Advanced Acoustic Coding", LIBMTP_FILETYPE_MP4, PTP_OFC_MTP_MP4);
register_filetype("Undefined audio file", LIBMTP_FILETYPE_UNDEF_AUDIO, PTP_OFC_MTP_UndefinedAudio);
register_filetype("Microsoft Windows Media Video", LIBMTP_FILETYPE_WMV, PTP_OFC_MTP_WMV);
register_filetype("Audio Video Interleave", LIBMTP_FILETYPE_AVI, PTP_OFC_AVI);
@@ -203,6 +208,8 @@
register_filetype("Apple Quicktime container format", LIBMTP_FILETYPE_QT, PTP_OFC_QT);
register_filetype("Undefined video file", LIBMTP_FILETYPE_UNDEF_VIDEO, PTP_OFC_MTP_UndefinedVideo);
register_filetype("JPEG file", LIBMTP_FILETYPE_JPEG, PTP_OFC_EXIF_JPEG);
+ register_filetype("JP2 file", LIBMTP_FILETYPE_JP2, PTP_OFC_JP2);
+ register_filetype("JPX file", LIBMTP_FILETYPE_JPX, PTP_OFC_JPX);
register_filetype("JFIF file", LIBMTP_FILETYPE_JFIF, PTP_OFC_JFIF);
register_filetype("TIFF bitmap file", LIBMTP_FILETYPE_TIFF, PTP_OFC_TIFF);
register_filetype("BMP bitmap file", LIBMTP_FILETYPE_BMP, PTP_OFC_BMP);
@@ -217,6 +224,11 @@
register_filetype("Undefined Windows executable file", LIBMTP_FILETYPE_WINEXEC, PTP_OFC_MTP_UndefinedWindowsExecutable);
register_filetype("Text file", LIBMTP_FILETYPE_TEXT, PTP_OFC_Text);
register_filetype("HTML file", LIBMTP_FILETYPE_HTML, PTP_OFC_HTML);
+ register_filetype("XML file", LIBMTP_FILETYPE_XML, PTP_OFC_MTP_XMLDocument);
+ register_filetype("DOC file", LIBMTP_FILETYPE_DOC, PTP_OFC_MTP_MSWordDocument);
+ register_filetype("XLS file", LIBMTP_FILETYPE_XLS, PTP_OFC_MTP_MSExcelSpreadsheetXLS);
+ register_filetype("PPT file", LIBMTP_FILETYPE_PPT, PTP_OFC_MTP_MSPowerpointPresentationPPT);
+ register_filetype("MHT file", LIBMTP_FILETYPE_MHT, PTP_OFC_MTP_MHTCompiledHTMLDocument);
register_filetype("Firmware file", LIBMTP_FILETYPE_FIRMWARE, PTP_OFC_MTP_Firmware);
register_filetype("Undefined filetype", LIBMTP_FILETYPE_UNKNOWN, PTP_OFC_Undefined);
}
@@ -2081,8 +2093,12 @@
// all known audio track files?
if ( oi.ObjectFormat != PTP_OFC_WAV &&
oi.ObjectFormat != PTP_OFC_MP3 &&
+ oi.ObjectFormat != PTP_OFC_MTP_MP2 &&
oi.ObjectFormat != PTP_OFC_MTP_WMA &&
oi.ObjectFormat != PTP_OFC_MTP_OGG &&
+ oi.ObjectFormat != PTP_OFC_MTP_FLAC &&
+ oi.ObjectFormat != PTP_OFC_MTP_AAC &&
+ oi.ObjectFormat != PTP_OFC_MTP_M4A &&
oi.ObjectFormat != PTP_OFC_MTP_MP4 &&
oi.ObjectFormat != PTP_OFC_MTP_UndefinedAudio ) {
// printf("Not a music track (format: %d), skipping...\n",oi.ObjectFormat);
@@ -2164,8 +2180,12 @@
// Ignore stuff we don't know how to handle...
if ( oi.ObjectFormat != PTP_OFC_WAV &&
oi.ObjectFormat != PTP_OFC_MP3 &&
+ oi.ObjectFormat != PTP_OFC_MTP_MP2 &&
oi.ObjectFormat != PTP_OFC_MTP_WMA &&
oi.ObjectFormat != PTP_OFC_MTP_OGG &&
+ oi.ObjectFormat != PTP_OFC_MTP_FLAC &&
+ oi.ObjectFormat != PTP_OFC_MTP_AAC &&
+ oi.ObjectFormat != PTP_OFC_MTP_M4A &&
oi.ObjectFormat != PTP_OFC_MTP_MP4 &&
oi.ObjectFormat != PTP_OFC_MTP_UndefinedAudio ) {
return NULL;
@@ -2502,8 +2522,12 @@
// Sanity check, is this really a track?
if (metadata->filetype != LIBMTP_FILETYPE_WAV &&
metadata->filetype != LIBMTP_FILETYPE_MP3 &&
+ metadata->filetype != LIBMTP_FILETYPE_MP2 &&
metadata->filetype != LIBMTP_FILETYPE_WMA &&
metadata->filetype != LIBMTP_FILETYPE_OGG &&
+ metadata->filetype != LIBMTP_FILETYPE_FLAC &&
+ metadata->filetype != LIBMTP_FILETYPE_AAC &&
+ metadata->filetype != LIBMTP_FILETYPE_M4A &&
metadata->filetype != LIBMTP_FILETYPE_MP4 &&
metadata->filetype != LIBMTP_FILETYPE_UNDEF_AUDIO) {
printf("LIBMTP_Send_Track_From_File_Descriptor: I don't think this is actually a track, strange filetype...\n");
@@ -2898,9 +2922,15 @@
uint16_t of = new_file.ObjectFormat;
if (of == PTP_OFC_WAV ||
of == PTP_OFC_MP3 ||
+ of == PTP_OFC_MTP_MP2 ||
of == PTP_OFC_MTP_WMA ||
of == PTP_OFC_MTP_OGG ||
- of == PTP_OFC_MTP_MP4 ||
+ of == PTP_OFC_MTP_FLAC ||
+ of == PTP_OFC_MTP_AAC ||
+ of == PTP_OFC_MTP_M4A ||
+ of == PTP_OFC_AIFF ||
+ //of == PTP_OFC_MTP_MP4 || /* ambiguous mp4 can contain video */
+ of == PTP_OFC_MTP_AudibleCodec ||
of == PTP_OFC_MTP_UndefinedAudio) {
localph = device->default_music_folder;
} else if (of == PTP_OFC_MTP_WMV ||
@@ -2908,11 +2938,16 @@
of == PTP_OFC_MPEG ||
of == PTP_OFC_ASF ||
of == PTP_OFC_QT ||
+ of == PTP_OFC_MTP_3GP ||
+ of == PTP_OFC_MTP_MP4 || /* ambiguous mp4 can also contain only audio */
of == PTP_OFC_MTP_UndefinedVideo) {
localph = device->default_video_folder;
} else if (of == PTP_OFC_EXIF_JPEG ||
+ of == PTP_OFC_JP2 ||
+ of == PTP_OFC_JPX ||
of == PTP_OFC_JFIF ||
of == PTP_OFC_TIFF ||
+ of == PTP_OFC_TIFF_IT ||
of == PTP_OFC_BMP ||
of == PTP_OFC_GIF ||
of == PTP_OFC_PICT ||
@@ -2926,7 +2961,8 @@
of == PTP_OFC_MTP_vCard3 ||
of == PTP_OFC_MTP_UndefinedCalendarItem) {
localph = device->default_organizer_folder;
- } else if (of == PTP_OFC_Text) {
+ } else if (of == PTP_OFC_Text
+ ) {
localph = device->default_text_folder;
}
}
diff --git a/src/libmtp.h.in b/src/libmtp.h.in
index 222c416..8962633 100644
--- a/src/libmtp.h.in
+++ b/src/libmtp.h.in
@@ -75,6 +75,18 @@
LIBMTP_FILETYPE_TEXT,
LIBMTP_FILETYPE_HTML,
LIBMTP_FILETYPE_FIRMWARE,
+ LIBMTP_FILETYPE_AAC,
+ LIBMTP_FILETYPE_MEDIACARD,
+ LIBMTP_FILETYPE_FLAC,
+ LIBMTP_FILETYPE_MP2,
+ LIBMTP_FILETYPE_M4A,
+ LIBMTP_FILETYPE_DOC,
+ LIBMTP_FILETYPE_XML,
+ LIBMTP_FILETYPE_XLS,
+ LIBMTP_FILETYPE_PPT,
+ LIBMTP_FILETYPE_MHT,
+ LIBMTP_FILETYPE_JP2,
+ LIBMTP_FILETYPE_JPX,
LIBMTP_FILETYPE_UNKNOWN
} LIBMTP_filetype_t;
typedef struct LIBMTP_device_entry_struct LIBMTP_device_entry_t; /**< @see LIBMTP_device_entry_struct */
diff --git a/src/ptp.c b/src/ptp.c
index 6a253e9..407f1be 100644
--- a/src/ptp.c
+++ b/src/ptp.c
@@ -3352,6 +3352,8 @@
{PTP_DPC_MTP_PlaybackContainerIndex,
N_("Playback Container Index")},
{PTP_DPC_MTP_PlaybackPosition, N_("Playback Position")},
+ {PTP_DPC_MTP_RevocationInfo, N_("RevocationInfo")},
+ {PTP_DPC_MTP_PlaysForSureID, N_("PlaysForSureID")},
{0,NULL}
};
@@ -3662,6 +3664,7 @@
const char *format;
} ptp_ofc_trans[] = {
{PTP_OFC_Undefined,"Undefined Type"},
+ {PTP_OFC_Defined,"Defined Type"},
{PTP_OFC_Association,"Association/Directory"},
{PTP_OFC_Script,"Script"},
{PTP_OFC_Executable,"Executable"},
@@ -3695,15 +3698,24 @@
uint16_t ofc;
const char *format;
} ptp_ofc_mtp_trans[] = {
+ {PTP_OFC_MTP_MediaCard,N_("MediaCard")},
+ {PTP_OFC_MTP_MediaCardGroup,N_("MediaCardGroup")},
+ {PTP_OFC_MTP_Encounter,N_("Encounter")},
+ {PTP_OFC_MTP_EncounterBox,N_("EncounterBox")},
+ {PTP_OFC_MTP_M4A,N_("M4A")},
{PTP_OFC_MTP_Firmware,N_("Firmware")},
{PTP_OFC_MTP_WindowsImageFormat,N_("WindowsImageFormat")},
{PTP_OFC_MTP_UndefinedAudio,N_("Undefined Audio")},
{PTP_OFC_MTP_WMA,"WMA"},
{PTP_OFC_MTP_OGG,"OGG"},
+ {PTP_OFC_MTP_AAC,"AAC"},
{PTP_OFC_MTP_AudibleCodec,N_("Audible.com Codec")},
+ {PTP_OFC_MTP_FLAC,"FLAC"},
{PTP_OFC_MTP_UndefinedVideo,N_("Undefined Video")},
{PTP_OFC_MTP_WMV,"WMV"},
{PTP_OFC_MTP_MP4,"MP4"},
+ {PTP_OFC_MTP_MP2,"MP2"},
+ {PTP_OFC_MTP_3GP,"3GP"},
{PTP_OFC_MTP_UndefinedCollection,N_("Undefined Collection")},
{PTP_OFC_MTP_AbstractMultimediaAlbum,N_("Abstract Multimedia Album")},
{PTP_OFC_MTP_AbstractImageAlbum,N_("Abstract Image Album")},
@@ -3713,6 +3725,9 @@
{PTP_OFC_MTP_AbstractContactGroup,N_("Abstract Contact Group")},
{PTP_OFC_MTP_AbstractMessageFolder,N_("Abstract Message Folder")},
{PTP_OFC_MTP_AbstractChapteredProduction,N_("Abstract Chaptered Production")},
+ {PTP_OFC_MTP_AbstractAudioPlaylist,N_("Abstract Audio Playlist")},
+ {PTP_OFC_MTP_AbstractVideoPlaylist,N_("Abstract Video Playlist")},
+ {PTP_OFC_MTP_AbstractMediacast,N_("Abstract Mediacast")},
{PTP_OFC_MTP_WPLPlaylist,N_("WPL Playlist")},
{PTP_OFC_MTP_M3UPlaylist,N_("M3U Playlist")},
{PTP_OFC_MTP_MPLPlaylist,N_("MPL Playlist")},
@@ -3720,6 +3735,11 @@
{PTP_OFC_MTP_PLSPlaylist,N_("PLS Playlist")},
{PTP_OFC_MTP_UndefinedDocument,N_("UndefinedDocument")},
{PTP_OFC_MTP_AbstractDocument,N_("AbstractDocument")},
+ {PTP_OFC_MTP_XMLDocument,N_("XMLDocument")},
+ {PTP_OFC_MTP_MSWordDocument,N_("Microsoft Word Document")},
+ {PTP_OFC_MTP_MHTCompiledHTMLDocument,N_("MHT Compiled HTML Document")},
+ {PTP_OFC_MTP_MSExcelSpreadsheetXLS,N_("Microsoft Excel Spreadsheet (.xls)")},
+ {PTP_OFC_MTP_MSPowerpointPresentationPPT,N_("Microsoft Powerpoint (.ppt)")},
{PTP_OFC_MTP_UndefinedMessage,N_("UndefinedMessage")},
{PTP_OFC_MTP_AbstractMessage,N_("AbstractMessage")},
{PTP_OFC_MTP_UndefinedContact,N_("UndefinedContact")},
@@ -3802,15 +3822,6 @@
uint16_t opcode;
const char *name;
} ptp_opcode_mtp_trans[] = {
- {PTP_OC_MTP_GetSecureTimeChallenge,N_("Get secure time challenge")},
- {PTP_OC_MTP_GetSecureTimeResponse,N_("Get secure time response")},
- {PTP_OC_MTP_SetLicenseResponse,N_("Set license response")},
- {PTP_OC_MTP_GetSyncList,N_("Get sync list")},
- {PTP_OC_MTP_SendMeterChallengeQuery,N_("Send meter challenge query")},
- {PTP_OC_MTP_GetMeterChallenge,N_("Get meter challenge")},
- {PTP_OC_MTP_SetMeterResponse,N_("Get meter response")},
- {PTP_OC_MTP_CleanDataStore,N_("Clean data store")},
- {PTP_OC_MTP_GetLicenseState,N_("Get license state")},
{PTP_OC_MTP_GetObjectPropsSupported,N_("Get object properties supported")},
{PTP_OC_MTP_GetObjectPropDesc,N_("Get object property description")},
{PTP_OC_MTP_GetObjectPropValue,N_("Get object property value")},
@@ -3822,7 +3833,47 @@
{PTP_OC_MTP_GetObjectReferences,N_("Get object references")},
{PTP_OC_MTP_SetObjectReferences,N_("Set object references")},
{PTP_OC_MTP_UpdateDeviceFirmware,N_("Update device firmware")},
- {PTP_OC_MTP_Skip,N_("Skip to next position in playlist")}
+ {PTP_OC_MTP_Skip,N_("Skip to next position in playlist")},
+
+ /* WMDRMPD Extensions */
+ {PTP_OC_MTP_WMDRMPD_GetSecureTimeChallenge,N_("Get secure time challenge")},
+ {PTP_OC_MTP_WMDRMPD_GetSecureTimeResponse,N_("Get secure time response")},
+ {PTP_OC_MTP_WMDRMPD_SetLicenseResponse,N_("Set license response")},
+ {PTP_OC_MTP_WMDRMPD_GetSyncList,N_("Get sync list")},
+ {PTP_OC_MTP_WMDRMPD_SendMeterChallengeQuery,N_("Send meter challenge query")},
+ {PTP_OC_MTP_WMDRMPD_GetMeterChallenge,N_("Get meter challenge")},
+ {PTP_OC_MTP_WMDRMPD_SetMeterResponse,N_("Get meter response")},
+ {PTP_OC_MTP_WMDRMPD_CleanDataStore,N_("Clean data store")},
+ {PTP_OC_MTP_WMDRMPD_GetLicenseState,N_("Get license state")},
+ {PTP_OC_MTP_WMDRMPD_SendWMDRMPDCommand,N_("Send WMDRM-PD Command")},
+ {PTP_OC_MTP_WMDRMPD_SendWMDRMPDRequest,N_("Send WMDRM-PD Request")},
+
+ /* WMPPD Extensions */
+ {PTP_OC_MTP_WMPPD_ReportAddedDeletedItems,N_("Report Added/Deleted Items")},
+ {PTP_OC_MTP_WMPPD_ReportAcquiredItems,N_("Report Acquired Items")},
+ {PTP_OC_MTP_WMPPD_PlaylistObjectPref,N_("Get type of playlists that are allowed to be transfered")},
+
+ /* WMDRMPD Extensions... these have no identifiers associated with them */
+ {PTP_OC_MTP_WMDRMPD_SendWMDRMPDAppRequest,N_("Send WMDRM-PD Application Request")},
+ {PTP_OC_MTP_WMDRMPD_GetWMDRMPDAppResponse,N_("Get WMDRM-PD Application Response")},
+ {PTP_OC_MTP_WMDRMPD_EnableTrustedFilesOperations,N_("Enable trusted file operations")},
+ {PTP_OC_MTP_WMDRMPD_DisableTrustedFilesOperations,N_("Disable trusted file operations")},
+ {PTP_OC_MTP_WMDRMPD_EndTrustedAppSession,N_("End trusted application session")},
+
+ /* WMDRMND Extensions */
+ {PTP_OC_MTP_WMDRMND_OpenMediaSession1,N_("Open Media Session")},
+ {PTP_OC_MTP_WMDRMND_OpenMediaSession2,N_("Open Media Session")},
+ {PTP_OC_MTP_WMDRMND_GetNextDataBlock,N_("Get Next Data Block")},
+ {PTP_OC_MTP_WMDRMND_SetCurrentTimePosition,N_("Set Current Time Position")},
+ {PTP_OC_MTP_WMDRMND_SendRegistrationRequest,N_("Send Registration Request")},
+ {PTP_OC_MTP_WMDRMND_GetRegistrationResponse,N_("Get Registration Response")},
+ {PTP_OC_MTP_WMDRMND_GetProximityChallenge,N_("Get Proximity Challenge")},
+ {PTP_OC_MTP_WMDRMND_SendProximityResponse,N_("Send Proximity Response")},
+ {PTP_OC_MTP_WMDRMND_SendWMDRMNDLicenseRequest,N_("Send WMDRM-ND License Request")},
+ {PTP_OC_MTP_WMDRMND_GetWMDRMNDLicenseResponse,N_("Get WMDRM-ND License Response")},
+
+ /* WiFi Provisioning MTP Extension Codes (microsoft.com/WPDWCN: 1.0) */
+ {PTP_OC_MTP_WPDWCN_ProcessWFCObject,N_("Process WFC Object")}
};
int
@@ -3863,6 +3914,9 @@
{PTP_OPC_DateModified,"DateModified"},
{PTP_OPC_Keywords,"Keywords"},
{PTP_OPC_ParentObject,"ParentObject"},
+ {PTP_OPC_AllowedFolderContents,"AllowedFolderContents"},
+ {PTP_OPC_Hidden,"Hidden"},
+ {PTP_OPC_SystemObject,"SystemObject"},
{PTP_OPC_PersistantUniqueObjectIdentifier,"PersistantUniqueObjectIdentifier"},
{PTP_OPC_SyncID,"SyncID"},
{PTP_OPC_PropertyBag,"PropertyBag"},
@@ -3879,6 +3933,7 @@
{PTP_OPC_DateAdded,"DateAdded"},
{PTP_OPC_NonConsumable,"NonConsumable"},
{PTP_OPC_CorruptOrUnplayable,"CorruptOrUnplayable"},
+ {PTP_OPC_ProducerSerialNumber,"ProducerSerialNumber"},
{PTP_OPC_RepresentativeSampleFormat,"RepresentativeSampleFormat"},
{PTP_OPC_RepresentativeSampleSize,"RepresentativeSampleSize"},
{PTP_OPC_RepresentativeSampleHeight,"RepresentativeSampleHeight"},
@@ -3911,6 +3966,95 @@
{PTP_OPC_SubDescription,"SubDescription"},
{PTP_OPC_IsCropped,"IsCropped"},
{PTP_OPC_IsColorCorrected,"IsColorCorrected"},
+ {PTP_OPC_ImageBitDepth,"ImageBitDepth"},
+ {PTP_OPC_Fnumber,"Fnumber"},
+ {PTP_OPC_ExposureTime,"ExposureTime"},
+ {PTP_OPC_ExposureIndex,"ExposureIndex"},
+ {PTP_OPC_DisplayName,"DisplayName"},
+ {PTP_OPC_BodyText,"BodyText"},
+ {PTP_OPC_Subject,"Subject"},
+ {PTP_OPC_Prority,"Prority"},
+ {PTP_OPC_GivenName,"GivenName"},
+ {PTP_OPC_MiddleNames,"MiddleNames"},
+ {PTP_OPC_FamilyName,"FamilyName"},
+
+ {PTP_OPC_Prefix,"Prefix"},
+ {PTP_OPC_Suffix,"Suffix"},
+ {PTP_OPC_PhoneticGivenName,"PhoneticGivenName"},
+ {PTP_OPC_PhoneticFamilyName,"PhoneticFamilyName"},
+ {PTP_OPC_EmailPrimary,"EmailPrimary"},
+ {PTP_OPC_EmailPersonal1,"EmailPersonal1"},
+ {PTP_OPC_EmailPersonal2,"EmailPersonal2"},
+ {PTP_OPC_EmailBusiness1,"EmailBusiness1"},
+ {PTP_OPC_EmailBusiness2,"EmailBusiness2"},
+ {PTP_OPC_EmailOthers,"EmailOthers"},
+ {PTP_OPC_PhoneNumberPrimary,"PhoneNumberPrimary"},
+ {PTP_OPC_PhoneNumberPersonal,"PhoneNumberPersonal"},
+ {PTP_OPC_PhoneNumberPersonal2,"PhoneNumberPersonal2"},
+ {PTP_OPC_PhoneNumberBusiness,"PhoneNumberBusiness"},
+ {PTP_OPC_PhoneNumberBusiness2,"PhoneNumberBusiness2"},
+ {PTP_OPC_PhoneNumberMobile,"PhoneNumberMobile"},
+ {PTP_OPC_PhoneNumberMobile2,"PhoneNumberMobile2"},
+ {PTP_OPC_FaxNumberPrimary,"FaxNumberPrimary"},
+ {PTP_OPC_FaxNumberPersonal,"FaxNumberPersonal"},
+ {PTP_OPC_FaxNumberBusiness,"FaxNumberBusiness"},
+ {PTP_OPC_PagerNumber,"PagerNumber"},
+ {PTP_OPC_PhoneNumberOthers,"PhoneNumberOthers"},
+ {PTP_OPC_PrimaryWebAddress,"PrimaryWebAddress"},
+ {PTP_OPC_PersonalWebAddress,"PersonalWebAddress"},
+ {PTP_OPC_BusinessWebAddress,"BusinessWebAddress"},
+ {PTP_OPC_InstantMessengerAddress,"InstantMessengerAddress"},
+ {PTP_OPC_InstantMessengerAddress2,"InstantMessengerAddress2"},
+ {PTP_OPC_InstantMessengerAddress3,"InstantMessengerAddress3"},
+ {PTP_OPC_PostalAddressPersonalFull,"PostalAddressPersonalFull"},
+ {PTP_OPC_PostalAddressPersonalFullLine1,"PostalAddressPersonalFullLine1"},
+ {PTP_OPC_PostalAddressPersonalFullLine2,"PostalAddressPersonalFullLine2"},
+ {PTP_OPC_PostalAddressPersonalFullCity,"PostalAddressPersonalFullCity"},
+ {PTP_OPC_PostalAddressPersonalFullRegion,"PostalAddressPersonalFullRegion"},
+ {PTP_OPC_PostalAddressPersonalFullPostalCode,"PostalAddressPersonalFullPostalCode"},
+ {PTP_OPC_PostalAddressPersonalFullCountry,"PostalAddressPersonalFullCountry"},
+ {PTP_OPC_PostalAddressBusinessFull,"PostalAddressBusinessFull"},
+ {PTP_OPC_PostalAddressBusinessLine1,"PostalAddressBusinessLine1"},
+ {PTP_OPC_PostalAddressBusinessLine2,"PostalAddressBusinessLine2"},
+ {PTP_OPC_PostalAddressBusinessCity,"PostalAddressBusinessCity"},
+ {PTP_OPC_PostalAddressBusinessRegion,"PostalAddressBusinessRegion"},
+ {PTP_OPC_PostalAddressBusinessPostalCode,"PostalAddressBusinessPostalCode"},
+ {PTP_OPC_PostalAddressBusinessCountry,"PostalAddressBusinessCountry"},
+ {PTP_OPC_PostalAddressOtherFull,"PostalAddressOtherFull"},
+ {PTP_OPC_PostalAddressOtherLine1,"PostalAddressOtherLine1"},
+ {PTP_OPC_PostalAddressOtherLine2,"PostalAddressOtherLine2"},
+ {PTP_OPC_PostalAddressOtherCity,"PostalAddressOtherCity"},
+ {PTP_OPC_PostalAddressOtherRegion,"PostalAddressOtherRegion"},
+ {PTP_OPC_PostalAddressOtherPostalCode,"PostalAddressOtherPostalCode"},
+ {PTP_OPC_PostalAddressOtherCountry,"PostalAddressOtherCountry"},
+ {PTP_OPC_OrganizationName,"OrganizationName"},
+ {PTP_OPC_PhoneticOrganizationName,"PhoneticOrganizationName"},
+ {PTP_OPC_Role,"Role"},
+ {PTP_OPC_Birthdate,"Birthdate"},
+ {PTP_OPC_MessageTo,"MessageTo"},
+ {PTP_OPC_MessageCC,"MessageCC"},
+ {PTP_OPC_MessageBCC,"MessageBCC"},
+ {PTP_OPC_MessageRead,"MessageRead"},
+ {PTP_OPC_MessageReceivedTime,"MessageReceivedTime"},
+ {PTP_OPC_MessageSender,"MessageSender"},
+ {PTP_OPC_ActivityBeginTime,"ActivityBeginTime"},
+ {PTP_OPC_ActivityEndTime,"ActivityEndTime"},
+ {PTP_OPC_ActivityLocation,"ActivityLocation"},
+ {PTP_OPC_ActivityRequiredAttendees,"ActivityRequiredAttendees"},
+ {PTP_OPC_ActivityOptionalAttendees,"ActivityOptionalAttendees"},
+ {PTP_OPC_ActivityResources,"ActivityResources"},
+ {PTP_OPC_ActivityAccepted,"ActivityAccepted"},
+ {PTP_OPC_Owner,"Owner"},
+ {PTP_OPC_Editor,"Editor"},
+ {PTP_OPC_Webmaster,"Webmaster"},
+ {PTP_OPC_URLSource,"URLSource"},
+ {PTP_OPC_URLDestination,"URLDestination"},
+ {PTP_OPC_TimeBookmark,"TimeBookmark"},
+ {PTP_OPC_ObjectBookmark,"ObjectBookmark"},
+ {PTP_OPC_ByteBookmark,"ByteBookmark"},
+ {PTP_OPC_LastBuildDate,"LastBuildDate"},
+ {PTP_OPC_TimetoLive,"TimetoLive"},
+ {PTP_OPC_MediaGUID,"MediaGUID"},
{PTP_OPC_TotalBitRate,"TotalBitRate"},
{PTP_OPC_BitRateType,"BitRateType"},
{PTP_OPC_SampleRate,"SampleRate"},
diff --git a/src/ptp.h b/src/ptp.h
index bc1848f..1cf003c 100644
--- a/src/ptp.h
+++ b/src/ptp.h
@@ -255,15 +255,7 @@
#define PTP_OC_NIKON_GetDevicePTPIPInfo 0x90E0
/* Microsoft / MTP extension codes */
-#define PTP_OC_MTP_GetSecureTimeChallenge 0x9101
-#define PTP_OC_MTP_GetSecureTimeResponse 0x9102
-#define PTP_OC_MTP_SetLicenseResponse 0x9103
-#define PTP_OC_MTP_GetSyncList 0x9104
-#define PTP_OC_MTP_SendMeterChallengeQuery 0x9105
-#define PTP_OC_MTP_GetMeterChallenge 0x9106
-#define PTP_OC_MTP_SetMeterResponse 0x9107
-#define PTP_OC_MTP_CleanDataStore 0x9108
-#define PTP_OC_MTP_GetLicenseState 0x9109
+
#define PTP_OC_MTP_GetObjectPropsSupported 0x9801
#define PTP_OC_MTP_GetObjectPropDesc 0x9802
#define PTP_OC_MTP_GetObjectPropValue 0x9803
@@ -277,6 +269,67 @@
#define PTP_OC_MTP_UpdateDeviceFirmware 0x9812
#define PTP_OC_MTP_Skip 0x9820
+/*
+ * Windows Media Digital Rights Management for Portable Devices
+ * Extension Codes (microsoft.com/WMDRMPD: 10.1)
+ */
+#define PTP_OC_MTP_WMDRMPD_GetSecureTimeChallenge 0x9101
+#define PTP_OC_MTP_WMDRMPD_GetSecureTimeResponse 0x9102
+#define PTP_OC_MTP_WMDRMPD_SetLicenseResponse 0x9103
+#define PTP_OC_MTP_WMDRMPD_GetSyncList 0x9104
+#define PTP_OC_MTP_WMDRMPD_SendMeterChallengeQuery 0x9105
+#define PTP_OC_MTP_WMDRMPD_GetMeterChallenge 0x9106
+#define PTP_OC_MTP_WMDRMPD_SetMeterResponse 0x9107
+#define PTP_OC_MTP_WMDRMPD_CleanDataStore 0x9108
+#define PTP_OC_MTP_WMDRMPD_GetLicenseState 0x9109
+#define PTP_OC_MTP_WMDRMPD_SendWMDRMPDCommand 0x910A
+#define PTP_OC_MTP_WMDRMPD_SendWMDRMPDRequest 0x910B
+
+/*
+ * Windows Media Digital Rights Management for Portable Devices
+ * Extension Codes (microsoft.com/WMDRMPD: 10.1)
+ * Below are operations that have no public documented identifier
+ * associated with them "Vendor-defined Command Code"
+ */
+#define PTP_OC_MTP_WMDRMPD_SendWMDRMPDAppRequest 0x9212
+#define PTP_OC_MTP_WMDRMPD_GetWMDRMPDAppResponse 0x9213
+#define PTP_OC_MTP_WMDRMPD_EnableTrustedFilesOperations 0x9214
+#define PTP_OC_MTP_WMDRMPD_DisableTrustedFilesOperations 0x9215
+#define PTP_OC_MTP_WMDRMPD_EndTrustedAppSession 0x9216
+/* ^^^ guess ^^^ */
+
+/*
+ * Windows Media Digital Rights Management for Network Devices
+ * Extensions (microsoft.com/WMDRMND: 1.0) MTP/IP?
+ */
+#define PTP_OC_MTP_WMDRMND_OpenMediaSession1 0x9170
+#define PTP_OC_MTP_WMDRMND_OpenMediaSession2 0x9171
+#define PTP_OC_MTP_WMDRMND_GetNextDataBlock 0x9172
+#define PTP_OC_MTP_WMDRMND_SetCurrentTimePosition 0x9173
+#define PTP_OC_MTP_WMDRMND_SendRegistrationRequest 0x9180
+#define PTP_OC_MTP_WMDRMND_GetRegistrationResponse 0x9181
+#define PTP_OC_MTP_WMDRMND_GetProximityChallenge 0x9182
+#define PTP_OC_MTP_WMDRMND_SendProximityResponse 0x9183
+#define PTP_OC_MTP_WMDRMND_SendWMDRMNDLicenseRequest 0x9184
+#define PTP_OC_MTP_WMDRMND_GetWMDRMNDLicenseResponse 0x9185
+
+/*
+ * Windows Media Player Portiable Devices
+ * Extension Codes (microsoft.com/WMPPD: 11.1)
+ */
+#define PTP_OC_MTP_WMPPD_ReportAddedDeletedItems 0x9201
+#define PTP_OC_MTP_WMPPD_ReportAcquiredItems 0x9202
+#define PTP_OC_MTP_WMPPD_PlaylistObjectPref 0x9203
+
+/*
+ * Undocumented Zune Operation Codes
+ * maybe related to WMPPD extension set?
+ */
+#define PTP_OC_MTP_ZUNE_GETUNDEFINED001 0x9204
+
+/* WiFi Provisioning MTP Extension Codes (microsoft.com/WPDWCN: 1.0) */
+#define PTP_OC_MTP_WPDWCN_ProcessWFCObject 0x9122
+
/* Proprietary vendor extension operations mask */
#define PTP_OC_EXTENSION_MASK 0xF000
#define PTP_OC_EXTENSION 0x9000
@@ -335,6 +388,10 @@
#define PTP_RC_MTP_Specification_By_Group_Unsupported 0xA808
#define PTP_RC_MTP_Object_Too_Large 0xA809
+/* WiFi Provisioning MTP Extension Error Codes (microsoft.com/WPDWCN: 1.0) */
+#define PTP_RC_MTP_Invalid_WFC_Syntax 0xA121
+#define PTP_RC_MTP_WFC_Version_Not_Supported 0xA122
+
/* libptp2 extended ERROR codes */
#define PTP_ERROR_IO 0x02FF
#define PTP_ERROR_DATA_EXPECTED 0x02FE
@@ -470,6 +527,7 @@
/* ancillary formats */
#define PTP_OFC_Undefined 0x3000
+#define PTP_OFC_Defined 0x3800
#define PTP_OFC_Association 0x3001
#define PTP_OFC_Script 0x3002
#define PTP_OFC_Executable 0x3003
@@ -503,15 +561,25 @@
/* Eastman Kodak extension ancillary format */
#define PTP_OFC_EK_M3U 0xb002
/* MTP extensions */
+#define PTP_OFC_MTP_MediaCard 0xb211
+#define PTP_OFC_MTP_MediaCardGroup 0xb212
+#define PTP_OFC_MTP_Encounter 0xb213
+#define PTP_OFC_MTP_EncounterBox 0xb214
+#define PTP_OFC_MTP_M4A 0xb215
+#define PTP_OFC_MTP_ZUNEUNDEFINED 0xb217 /* Unknown file type */
#define PTP_OFC_MTP_Firmware 0xb802
-#define PTP_OFC_MTP_WindowsImageFormat 0xb882
+#define PTP_OFC_MTP_WindowsImageFormat 0xb881
#define PTP_OFC_MTP_UndefinedAudio 0xb900
#define PTP_OFC_MTP_WMA 0xb901
#define PTP_OFC_MTP_OGG 0xb902
+#define PTP_OFC_MTP_AAC 0xb903
#define PTP_OFC_MTP_AudibleCodec 0xb904
+#define PTP_OFC_MTP_FLAC 0xb906
#define PTP_OFC_MTP_UndefinedVideo 0xb980
#define PTP_OFC_MTP_WMV 0xb981
#define PTP_OFC_MTP_MP4 0xb982
+#define PTP_OFC_MTP_MP2 0xb983
+#define PTP_OFC_MTP_3GP 0xb984
#define PTP_OFC_MTP_UndefinedCollection 0xba00
#define PTP_OFC_MTP_AbstractMultimediaAlbum 0xba01
#define PTP_OFC_MTP_AbstractImageAlbum 0xba02
@@ -521,6 +589,9 @@
#define PTP_OFC_MTP_AbstractContactGroup 0xba06
#define PTP_OFC_MTP_AbstractMessageFolder 0xba07
#define PTP_OFC_MTP_AbstractChapteredProduction 0xba08
+#define PTP_OFC_MTP_AbstractAudioPlaylist 0xba09
+#define PTP_OFC_MTP_AbstractVideoPlaylist 0xba0a
+#define PTP_OFC_MTP_AbstractMediacast 0xba0b
#define PTP_OFC_MTP_WPLPlaylist 0xba10
#define PTP_OFC_MTP_M3UPlaylist 0xba11
#define PTP_OFC_MTP_MPLPlaylist 0xba12
@@ -528,6 +599,11 @@
#define PTP_OFC_MTP_PLSPlaylist 0xba14
#define PTP_OFC_MTP_UndefinedDocument 0xba80
#define PTP_OFC_MTP_AbstractDocument 0xba81
+#define PTP_OFC_MTP_XMLDocument 0xba82
+#define PTP_OFC_MTP_MSWordDocument 0xba83
+#define PTP_OFC_MTP_MHTCompiledHTMLDocument 0xba84
+#define PTP_OFC_MTP_MSExcelSpreadsheetXLS 0xba85
+#define PTP_OFC_MTP_MSPowerpointPresentationPPT 0xba86
#define PTP_OFC_MTP_UndefinedMessage 0xbb00
#define PTP_OFC_MTP_AbstractMessage 0xbb01
#define PTP_OFC_MTP_UndefinedContact 0xbb80
@@ -540,6 +616,7 @@
#define PTP_OFC_MTP_vCalendar2 0xbe03
#define PTP_OFC_MTP_UndefinedWindowsExecutable 0xbe80
+
/* PTP Association Types */
#define PTP_AT_Undefined 0x0000
#define PTP_AT_GenericFolder 0x0001
@@ -806,7 +883,11 @@
#define PTP_DPC_EXTENSION_MASK 0xF000
#define PTP_DPC_EXTENSION 0xD000
-/* Vendor Extensions device property codes */
+/* Zune extension device property codes */
+#define PTP_DPC_MTP_ZUNE_UNKNOWN1 0xD181
+#define PTP_DPC_MTP_ZUNE_UNKNOWN2 0xD132
+#define PTP_DPC_MTP_ZUNE_UNKNOWN3 0xD215
+#define PTP_DPC_MTP_ZUNE_UNKNOWN4 0xD216
/* Eastman Kodak extension device property codes */
#define PTP_DPC_EK_ColorTemperature 0xD001
@@ -969,6 +1050,7 @@
/* Microsoft/MTP specific */
#define PTP_DPC_MTP_SecureTime 0xD101
#define PTP_DPC_MTP_DeviceCertificate 0xD102
+#define PTP_DPC_MTP_RevocationInfo 0xD103
#define PTP_DPC_MTP_SynchronizationPartner 0xD401
#define PTP_DPC_MTP_DeviceFriendlyName 0xD402
#define PTP_DPC_MTP_VolumeLevel 0xD403
@@ -977,6 +1059,10 @@
#define PTP_DPC_MTP_PlaybackObject 0xD411
#define PTP_DPC_MTP_PlaybackContainerIndex 0xD412
#define PTP_DPC_MTP_PlaybackPosition 0xD413
+#define PTP_DPC_MTP_PlaysForSureID 0xD131
+
+/* Zune specific property codes */
+#define PTP_DPC_MTP_Zune_UnknownVersion 0xD181
/* MTP specific Object Properties */
#define PTP_OPC_StorageID 0xDC01
@@ -990,6 +1076,9 @@
#define PTP_OPC_DateModified 0xDC09
#define PTP_OPC_Keywords 0xDC0A
#define PTP_OPC_ParentObject 0xDC0B
+#define PTP_OPC_AllowedFolderContents 0xDC0C
+#define PTP_OPC_Hidden 0xDC0D
+#define PTP_OPC_SystemObject 0xDC0E
#define PTP_OPC_PersistantUniqueObjectIdentifier 0xDC41
#define PTP_OPC_SyncID 0xDC42
#define PTP_OPC_PropertyBag 0xDC43
@@ -1006,6 +1095,7 @@
#define PTP_OPC_DateAdded 0xDC4E
#define PTP_OPC_NonConsumable 0xDC4F
#define PTP_OPC_CorruptOrUnplayable 0xDC50
+#define PTP_OPC_ProducerSerialNumber 0xDC51
#define PTP_OPC_RepresentativeSampleFormat 0xDC81
#define PTP_OPC_RepresentativeSampleSize 0xDC82
#define PTP_OPC_RepresentativeSampleHeight 0xDC83
@@ -1038,6 +1128,94 @@
#define PTP_OPC_SubDescription 0xDC9E
#define PTP_OPC_IsCropped 0xDCD1
#define PTP_OPC_IsColorCorrected 0xDCD2
+#define PTP_OPC_ImageBitDepth 0xDCD3
+#define PTP_OPC_Fnumber 0xDCD4
+#define PTP_OPC_ExposureTime 0xDCD5
+#define PTP_OPC_ExposureIndex 0xDCD6
+#define PTP_OPC_DisplayName 0xDCE0
+#define PTP_OPC_BodyText 0xDCE1
+#define PTP_OPC_Subject 0xDCE2
+#define PTP_OPC_Prority 0xDCE3
+#define PTP_OPC_GivenName 0xDD00
+#define PTP_OPC_MiddleNames 0xDD01
+#define PTP_OPC_FamilyName 0xDD02
+#define PTP_OPC_Prefix 0xDD03
+#define PTP_OPC_Suffix 0xDD04
+#define PTP_OPC_PhoneticGivenName 0xDD05
+#define PTP_OPC_PhoneticFamilyName 0xDD06
+#define PTP_OPC_EmailPrimary 0xDD07
+#define PTP_OPC_EmailPersonal1 0xDD08
+#define PTP_OPC_EmailPersonal2 0xDD09
+#define PTP_OPC_EmailBusiness1 0xDD0A
+#define PTP_OPC_EmailBusiness2 0xDD0B
+#define PTP_OPC_EmailOthers 0xDD0C
+#define PTP_OPC_PhoneNumberPrimary 0xDD0D
+#define PTP_OPC_PhoneNumberPersonal 0xDD0E
+#define PTP_OPC_PhoneNumberPersonal2 0xDD0F
+#define PTP_OPC_PhoneNumberBusiness 0xDD10
+#define PTP_OPC_PhoneNumberBusiness2 0xDD11
+#define PTP_OPC_PhoneNumberMobile 0xDD12
+#define PTP_OPC_PhoneNumberMobile2 0xDD13
+#define PTP_OPC_FaxNumberPrimary 0xDD14
+#define PTP_OPC_FaxNumberPersonal 0xDD15
+#define PTP_OPC_FaxNumberBusiness 0xDD16
+#define PTP_OPC_PagerNumber 0xDD17
+#define PTP_OPC_PhoneNumberOthers 0xDD18
+#define PTP_OPC_PrimaryWebAddress 0xDD19
+#define PTP_OPC_PersonalWebAddress 0xDD1A
+#define PTP_OPC_BusinessWebAddress 0xDD1B
+#define PTP_OPC_InstantMessengerAddress 0xDD1C
+#define PTP_OPC_InstantMessengerAddress2 0xDD1D
+#define PTP_OPC_InstantMessengerAddress3 0xDD1E
+#define PTP_OPC_PostalAddressPersonalFull 0xDD1F
+#define PTP_OPC_PostalAddressPersonalFullLine1 0xDD20
+#define PTP_OPC_PostalAddressPersonalFullLine2 0xDD21
+#define PTP_OPC_PostalAddressPersonalFullCity 0xDD22
+#define PTP_OPC_PostalAddressPersonalFullRegion 0xDD23
+#define PTP_OPC_PostalAddressPersonalFullPostalCode 0xDD24
+#define PTP_OPC_PostalAddressPersonalFullCountry 0xDD25
+#define PTP_OPC_PostalAddressBusinessFull 0xDD26
+#define PTP_OPC_PostalAddressBusinessLine1 0xDD27
+#define PTP_OPC_PostalAddressBusinessLine2 0xDD28
+#define PTP_OPC_PostalAddressBusinessCity 0xDD29
+#define PTP_OPC_PostalAddressBusinessRegion 0xDD2A
+#define PTP_OPC_PostalAddressBusinessPostalCode 0xDD2B
+#define PTP_OPC_PostalAddressBusinessCountry 0xDD2C
+#define PTP_OPC_PostalAddressOtherFull 0xDD2D
+#define PTP_OPC_PostalAddressOtherLine1 0xDD2E
+#define PTP_OPC_PostalAddressOtherLine2 0xDD2F
+#define PTP_OPC_PostalAddressOtherCity 0xDD30
+#define PTP_OPC_PostalAddressOtherRegion 0xDD31
+#define PTP_OPC_PostalAddressOtherPostalCode 0xDD32
+#define PTP_OPC_PostalAddressOtherCountry 0xDD33
+#define PTP_OPC_OrganizationName 0xDD34
+#define PTP_OPC_PhoneticOrganizationName 0xDD35
+#define PTP_OPC_Role 0xDD36
+#define PTP_OPC_Birthdate 0xDD37
+#define PTP_OPC_MessageTo 0xDD40
+#define PTP_OPC_MessageCC 0xDD41
+#define PTP_OPC_MessageBCC 0xDD42
+#define PTP_OPC_MessageRead 0xDD43
+#define PTP_OPC_MessageReceivedTime 0xDD44
+#define PTP_OPC_MessageSender 0xDD45
+#define PTP_OPC_ActivityBeginTime 0xDD50
+#define PTP_OPC_ActivityEndTime 0xDD51
+#define PTP_OPC_ActivityLocation 0xDD52
+#define PTP_OPC_ActivityRequiredAttendees 0xDD54
+#define PTP_OPC_ActivityOptionalAttendees 0xDD55
+#define PTP_OPC_ActivityResources 0xDD56
+#define PTP_OPC_ActivityAccepted 0xDD57
+#define PTP_OPC_Owner 0xDD5D
+#define PTP_OPC_Editor 0xDD5E
+#define PTP_OPC_Webmaster 0xDD5F
+#define PTP_OPC_URLSource 0xDD60
+#define PTP_OPC_URLDestination 0xDD61
+#define PTP_OPC_TimeBookmark 0xDD62
+#define PTP_OPC_ObjectBookmark 0xDD63
+#define PTP_OPC_ByteBookmark 0xDD64
+#define PTP_OPC_LastBuildDate 0xDD70
+#define PTP_OPC_TimetoLive 0xDD71
+#define PTP_OPC_MediaGUID 0xDD72
#define PTP_OPC_TotalBitRate 0xDE91
#define PTP_OPC_BitRateType 0xDE92
#define PTP_OPC_SampleRate 0xDE93
@@ -1054,6 +1232,9 @@
#define PTP_OPC_EncodingQuality 0xDEA0
#define PTP_OPC_BuyFlag 0xD901
+/* WiFi Provisioning MTP Extension property codes */
+#define PTP_OPC_WirelessConfigurationFile 0xB104
+
/* Device Property Form Flag */
#define PTP_DPFF_None 0x00