<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Windows Portable Devices Team Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/wpdblog/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/wpdblog/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:30:05 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Sensors and Windows</title>
      <link>https://docs.microsoft.com/archive/blogs/wpdblog/sensors-and-windows</link>
      <pubDate>Thu, 17 Dec 2009 12:03:00 GMT</pubDate>
      <dc:creator><![CDATA[WPD Blogger [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/wpdblog/2009/12/17/sensors-and-windows/</guid>
      <description><![CDATA[Prior to the introduction of WPD, developers wrote a significant amount of code to integrate data...]]></description>
      <content:encoded><![CDATA[<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal>Prior to the introduction of WPD, developers wrote a significant amount of code to integrate data from sensors into their Windows applications. But, with the release of WPD, it was possible to create a driver that handled communications between the operating system and the remote device. And, once the driver was written, a developer could write an application with a minimal code footprint—200 lines or less—to retrieve sensor data. For an example, refer to the downloadable whitepaper and code at: <A href="https://wpdtempsensor.codeplex.com/" mce_href="https://wpdtempsensor.codeplex.com/">https://wpdtempsensor.codeplex.com/</A>. (For an example WPD driver, refer to the WpdBasicHardwareDriver that ships in the Windows Driver Kit.)<o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p>&nbsp;</o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal>For Windows 7, Microsoft introduced the Sensors and Location platform. This platform includes both a driver model for IHVs and an API for application developers. Microsoft recently released a sample driver, sample firmware, and a sample application on the MSDN Code Gallery to demonstrate the use of this new platform. See: <A href="https://code.msdn.microsoft.com/motionsensor" mce_href="https://code.msdn.microsoft.com/motionsensor">https://code.msdn.microsoft.com/motionsensor</A>. This sample, like the WPD sample above, interacts with the Parallax BS2 microcontroller; and, it’s intended as an enhancement (or replacement) of the WPD sample.<SPAN style="COLOR: #1f497d"><o:p></o:p></SPAN></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p>&nbsp;</o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal>So, you may be wondering: “When should I use WPD to support my sensors and when should I use the Sensors and Location Platform?” Good question. The answer is straightforward. If you’re targeting Microsoft Windows XP or Microsoft Windows Vista: Use WPD. If you’re targeting Windows 7, use the new Sensors and Location Platform.<o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p>&nbsp;</o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal>One of the key enhancements of the Sensor Platform is its class extension. The sample sensor driver uses the extension to fire both state-change events and data-update events. So, if the sensor is powered-down or disconnected, the driver calls a single class extension method: PostStateChange. And, each time the sensor sends new data, the driver calls the class extension’s &nbsp;PostEvent method. The class extension, and these methods, make it very easy to support a “push” model for applications where the app registers to receive event notifications. <o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p>&nbsp;</o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal>Another enhancement is the platform’s “organization” of the sensor universe. The platform identifies specific categories and subcategories of sensors. So, for example, an application can retrieve all of the connected Passive Infrared sensors by invoking GetSensorsByCategory and specifying “BioMetric” as the specific category of interest. (The application developer doesn’t need to look for an identifier supplied by a hardware vendor for a particular passive infrared sensor.) <o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p>&nbsp;</o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal>By the way, if you were to compare the source code for the WpdBasicHardwareDriver and the SensorParallaxSample driver, you’d notice a number of similarities. This is by-design<SPAN style="COLOR: #1f497d"> </SPAN>because the WPD and Sensor platform drivers are built on top of the User Mode Driver Framework (WUDF).<SPAN style="COLOR: #1f497d"> </SPAN>&nbsp;The code which configures the serial port, the code that creates the I/O Target, and the code that parses the packets returned by the sensor originated in the WpdBasicHardwareDriver and was ported to the Sensors and Location Platform.<SPAN style="COLOR: #1f497d"> </SPAN><o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p>&nbsp;</o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p>&nbsp;</o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><EM>This posting is provided "AS IS" with no warranties and confers no rights.</EM></o:p></P></o:p>]]></content:encoded>
    </item>
    <item>
      <title>Windows 7 Device Implementation Guidelines for Picture and Video Import</title>
      <link>https://docs.microsoft.com/archive/blogs/wpdblog/windows-7-device-implementation-guidelines-for-picture-and-video-import</link>
      <pubDate>Fri, 13 Nov 2009 16:51:42 GMT</pubDate>
      <dc:creator><![CDATA[WPD Blogger [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/wpdblog/2009/11/13/windows-7-device-implementation-guidelines-for-picture-and-video-import/</guid>
      <description><![CDATA[The Guidelines for Picture and Video Import in Windows 7 white paper provides information about...]]></description>
      <content:encoded><![CDATA[<p></p>  <p>The <a href="https://www.microsoft.com/whdc/device/wpd/PV-Import_Win7.mspx">Guidelines for Picture and Video Import in Windows 7 white paper</a> provides information about the picture and video import feature in Windows 7. The white paper includes guidelines for <strong>OEMs </strong>designing digital cameras and camera-equipped portable devices compatible with and optimized for Windows 7. The following screenshot shows a Device Stage experience for a cellular phone that supports photo and/or video import. The Windows 7 inbox photo import task appears as one of the many tasks that an end-user can interact with that phone.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/wpdblog/WindowsLiveWriter/Windows7DeviceImplementationGuidelinesfo_ED18/DeviceStage_PVImport_2.png" original-url="https://blogs.msdn.com/blogfiles/wpdblog/WindowsLiveWriter/Windows7DeviceImplementationGuidelinesfo_ED18/DeviceStage_PVImport_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DeviceStage_PVImport" border="0" alt="DeviceStage_PVImport" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/wpdblog/WindowsLiveWriter/Windows7DeviceImplementationGuidelinesfo_ED18/DeviceStage_PVImport_thumb.png" original-url="https://blogs.msdn.com/blogfiles/wpdblog/WindowsLiveWriter/Windows7DeviceImplementationGuidelinesfo_ED18/DeviceStage_PVImport_thumb.png" width="640" height="472" /></a> </p>  <p>This white paper describes the types of devices that are supported in Windows 7 for the picture and video import feature. In addition, this paper discusses device requirements and recommended features for optimal performance during the import of pictures and video from the device.</p>  <h3>Topics Covered</h3>  <p>Some of the topics covered in this white paper are:</p>  <ul>   <li>The supported device classes </li>    <li>The supported picture and video formats</li>    <li>Device requirements and recommendations:      <ul>       <li>Preventing re-import of videos synchronized with Windows Media Player by implementing Sync ID device property </li>        <li>Improving import performance by implementing the Hints Device Service </li>        <li>Enabling a determinate-style progress bar like the one shown below, instead of the default indeterminate progress bar </li>     </ul>   </li> </ul>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/wpdblog/WindowsLiveWriter/Windows7DeviceImplementationGuidelinesfo_ED18/ProgressBar_PVImport_2.png" original-url="https://blogs.msdn.com/blogfiles/wpdblog/WindowsLiveWriter/Windows7DeviceImplementationGuidelinesfo_ED18/ProgressBar_PVImport_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ProgressBar_PVImport" border="0" alt="ProgressBar_PVImport" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/wpdblog/WindowsLiveWriter/Windows7DeviceImplementationGuidelinesfo_ED18/ProgressBar_PVImport_thumb.png" original-url="https://blogs.msdn.com/blogfiles/wpdblog/WindowsLiveWriter/Windows7DeviceImplementationGuidelinesfo_ED18/ProgressBar_PVImport_thumb.png" width="329" height="189" /></a> </p>  <h3>More Resources</h3>  <p>You can find this whitepaper and more related Windows Portable Devices information (for both application and device development) on the <a href="https://www.microsoft.com/whdc/device/wpd/default.mspx">Windows Hardware Developer Central</a> portal.</p>  <p><i></i></p>  <p><i></i></p>  <p><i>This posting is provided &quot;AS IS&quot; with no warranties and confers no rights.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>WPD Platform Update for Windows Vista</title>
      <link>https://docs.microsoft.com/archive/blogs/wpdblog/wpd-platform-update-for-windows-vista</link>
      <pubDate>Tue, 27 Oct 2009 18:04:58 GMT</pubDate>
      <dc:creator><![CDATA[WPD Blogger [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/wpdblog/2009/10/27/wpd-platform-update-for-windows-vista/</guid>
      <description><![CDATA[Today we are announcing the final release of the Platform Update for Windows Vista, which includes...]]></description>
      <content:encoded><![CDATA[<p>Today we are announcing the final release of the <b>Platform Update for Windows Vista</b>, which includes an update to WPD to support new features introduced in Windows 7.</p>  <p>The Platform Update for Windows Vista features a set of runtime libraries which add support for new technologies making it easier for developers to develop for Windows 7 and Windows Vista without impacting their users.</p>  <h2><b>Features</b></h2>  <p>The WPD update adds <strong><i>WPD and</i> <i>MTP</i> <i>Device Services</i></strong> and<strong> <i>MTP over Bluetooth</i></strong> features to Windows Vista. The following table identifies the WPD features supported for Windows 7, for Windows Vista, and for Windows Vista with the Platform Update for Windows Vista installed.</p>  <table border="1" cellspacing="0" cellpadding="1"><tbody>     <tr>       <td>         <p><b>Feature</b></p>       </td>        <td>         <p><b>Windows 7</b></p>       </td>        <td>         <p><b>Windows Vista</b></p>       </td>        <td>         <p><b>Windows Vista + Platform Update for Windows Vista</b></p>       </td>     </tr>      <tr>       <td valign="top">         <p><b>MTP over USB</b></p>       </td>        <td valign="top">         <p>Yes</p>       </td>        <td valign="top">         <p>Yes</p>       </td>        <td valign="top">         <p>Yes</p>       </td>     </tr>      <tr>       <td valign="top">         <p><b>MTP over IP</b></p>       </td>        <td valign="top">         <p>Yes</p>       </td>        <td valign="top">         <p>Yes</p>       </td>        <td valign="top">         <p>Yes</p>       </td>     </tr>      <tr>       <td valign="top">         <p><b>MTP over Bluetooth</b></p>       </td>        <td valign="top">         <p>Yes</p>       </td>        <td valign="top">         <p>No</p>       </td>        <td valign="top">         <p>Yes</p>       </td>     </tr>      <tr>       <td valign="top">         <p><b>WPD and MTP Device Services</b></p>       </td>        <td valign="top">         <p>Yes</p>       </td>        <td valign="top">         <p>No</p>       </td>        <td valign="top">         <p>Yes</p>       </td>     </tr>      <tr>       <td valign="top">         <p><b>WPD Automation</b></p>       </td>        <td valign="top">         <p>Yes</p>       </td>        <td valign="top">         <p>No</p>       </td>        <td valign="top">         <p>No</p>       </td>     </tr>      <tr>       <td valign="top">         <p><b>Multi-function/Multi-transport</b></p>       </td>        <td valign="top">         <p>Yes</p>       </td>        <td valign="top">         <p>No</p>       </td>        <td valign="top">         <p>No</p>       </td>     </tr>      <tr>       <td valign="top">         <p><b>Device Stage</b></p>       </td>        <td valign="top">         <p>Yes</p>       </td>        <td valign="top">         <p>No</p>       </td>        <td valign="top">         <p>No</p>       </td>     </tr>      <tr>       <td valign="top">         <p><b>Device Sync Platform</b></p>       </td>        <td valign="top">         <p>Yes</p>       </td>        <td valign="top">         <p>No</p>       </td>        <td valign="top">         <p>No</p>       </td>     </tr>   </tbody></table>  <p>&#160;</p>  <p><b></b></p>  <h2>Availability and installation</h2>  <p>The Platform Update for Windows Vista is available for free via Windows Update, Windows Server Update Services and the Microsoft Download Center. Customers running Windows Vista Service Pack 2 with “recommended settings” enabled for Windows Update will automatically receive the update without additional action. The update is also available as a <a href="https://support.microsoft.com/kb/971514">free download</a> on the Microsoft Download Center.</p>  <h2>Additional notes about the Platform Update for Windows Vista</h2>  <p>All the updated technologies in the Platform Update for Windows Vista are already included in Windows 7. The Platform Update for Windows Vista is <strong>not required for Windows 7</strong>. </p>  <p>To apply the Platform Update for Windows Vista, you must have <strong>Windows Vista Service Pack 2</strong> installed. </p>  <h2>More information</h2>  <p>For specific details about the Platform Update for Windows Vista, <a href="https://support.microsoft.com/kb/971644">click here</a>. </p>  <p>For more information about MTP Device Services, check out the <a href="https://blogs.msdn.com/wpdblog/archive/2009/08/15/introducing-device-services.aspx">Introducing Device Services</a> entry.</p>  <p>For more information about MTP transports such as USB, IP, and Bluetooth, check out the <a href="https://blogs.msdn.com/wpdblog/archive/2009/08/29/mtp-over-various-transports.aspx">MTP Over Various Transports</a> entry.</p>  <p><i></i></p>  <p><i></i></p>  <p><i>This posting is provided &quot;AS IS&quot; with no warranties and confers no rights.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>The MTP Device Simulator</title>
      <link>https://docs.microsoft.com/archive/blogs/wpdblog/the-mtp-device-simulator</link>
      <pubDate>Fri, 23 Oct 2009 17:52:25 GMT</pubDate>
      <dc:creator><![CDATA[WPD Blogger [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/wpdblog/2009/10/23/the-mtp-device-simulator/</guid>
      <description><![CDATA[The Media Transfer Protocol Device Simulator (MTP Simulator) is a fully-featured, self-contained...]]></description>
      <content:encoded><![CDATA[<p>The Media Transfer Protocol Device Simulator (MTP Simulator) is a fully-featured, self-contained device simulator that emulates an MTP device. Its primary purpose is to enable developers to exercise expected behavior based on the MTP specification by returning appropriate MTP response packets and generating MTP events. The tool’s graphical user interface (GUI) enables easy configuration of MTP parameters and presents MTP traffic and data in a friendly, human-readable format. </p>  <p>The MTP Simulator implements all MTP device capabilities, object properties, and operations that are based on the <a href="#_Supplemental_Information:">MTP Specification</a> along with the major features in Windows 7. Additionally, the MTP Simulator also <b>supports</b> <b><a href="https://windowsteamblog.com/blogs/windowsexperience/archive/2009/01/08/device-stage-a-new-way-of-interacting-with-devices-in-windows-7.aspx">Device Stage</a></b> and loading <b>customizable device profiles.</b></p>  <p>For transport support, the MTP Simulator runs on <b>multiple transport options</b> such as USB, Software-Simulated USB (SoftSim), Bluetooth, and IP. Last, but not the least, the MTP Simulator runs on both <a>Windows Vista and Windows 7.</a></p>  <h2>Where to get the MTP Simulator</h2>  <p><b></b></p>  <p>The MTP Simulator is publicly available as part of the <a href="https://www.microsoft.com/whdc/device/wpd/MTP-DEK_Win7.mspx">Windows 7 Portable Device Enabling Kit for MTP (DEK</a>). The kit also includes support documentation for the MTP Simulator and the MTP Specification Version 1.0 and MTP Device Services for Windows. Included in the DEK is the <em>MTP Device Simulator User Guide</em> which provides a detailed description of the MTP Simulator.</p>  <h2>Installing the MTP Simulator</h2>  <p><b><u></u></b></p>  <p>The MTP Device Simulator is installed as part of the Windows 7 Portable Device Enabling Kit for MTP (DEK). Before running the simulator for the first time, you may need to install the Device Simulation Framework (DSF).</p>  <p>To install DSF:</p>  <ol>   <li>Browse to the folder where the DEK is installed (usually C:\Windows7DEK) </li>    <li>Navigate to the Tools\MTP Device Simulator\Dsf subfolder </li>    <li>Open an elevated command window (i.e. &quot;Run as Administrator”) and launch install.cmd to start the DSF MSI package install. </li> </ol>  <p>Once DSF is installed, you can launch the MTP Simulator from C:\WindowsDEK\Tools\MTP Device Simulator\MTPSimUI.exe. Select your desired transport, and click “Connect” to launch an instance of the MTP Simulator. The next section gives an overview of the User Interface.</p>  <h2>User Interface</h2>  <p>The following screenshot shows the MTP Simulator UI with navigation buttons and configuration options.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/wpdblog/WindowsLiveWriter/TheMTPDeviceSimulator_FB0F/MTPSim.png" original-url="https://blogs.msdn.com/blogfiles/wpdblog/WindowsLiveWriter/TheMTPDeviceSimulator_FB0F/MTPSim.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="MTPSim" border="0" alt="MTPSim" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/wpdblog/WindowsLiveWriter/TheMTPDeviceSimulator_FB0F/MTPSim_thumb.png" original-url="https://blogs.msdn.com/blogfiles/wpdblog/WindowsLiveWriter/TheMTPDeviceSimulator_FB0F/MTPSim_thumb.png" width="644" height="455" /></a> </p>  <p>   <table border="1" cellspacing="0" cellpadding="1"><tbody>       <tr>         <td valign="top" width="90"><strong>MTP Simulator              <br />Configuration</strong> </b></td>          <td valign="top" width="108"><b>Location</b> </td>          <td valign="top" width="339"><b>Purpose</b> </td>       </tr>        <tr>         <td valign="top" width="90">           <p>Connection</p>         </td>          <td valign="top" width="108">           <p>Left control tabs and menu options.</p>         </td>          <td valign="top" width="339">           <p>Connect, disconnect, or restart MTP Simulator by using the currently selected configuration. You can change the transport type on the <b>Transport</b> tab and change the test mode on the <b>Device Mode</b> tab.</p>         </td>       </tr>        <tr>         <td valign="top" width="90">           <p>Transport</p>         </td>          <td valign="top" width="108">           <p>Left control tabs and menu options.</p>         </td>          <td valign="top" width="339">           <p>Select the transport to be used. To simulate a software-only USB device, select the “SoftUSB” transport.</p>         </td>       </tr>        <tr>         <td valign="top" width="90">           <p>Device mode</p>         </td>          <td valign="top" width="108">           <p>Left control tabs and menu options.</p>         </td>          <td valign="top" width="339">           <p>Normal Mode should be used. Test Mode is reserved for internal Microsoft testing.</p>         </td>       </tr>        <tr>         <td valign="top" width="90">           <p>Output windows</p>         </td>          <td valign="top" width="108">           <p>Lower-right output window.</p>         </td>          <td valign="top" width="339">           <p>This window displays redirected output from stdout. Any output from a printf statement, such as trace—from either MTP Simulator or a plug-in—appears in this window. The output is also saved as mtpsimui.log automatically under the MTP Simulator root directory.</p>         </td>       </tr>     </tbody></table> </p>  <h6>Table 1. MTP Simulator User Controls</h6>  <h2>Command-Line Options</h2>  <p><b><u></u></b></p>  <p>In addition to the GUI, you can control MTP Simulator at startup by using command-line parameters. This can be useful when you need to perform automated testing. For details, see <strong>Appendix C</strong> from the <em>MTP Device Simulator User Guide</em>. </p>  <h2>Customizing the MTP Simulator</h2>  <p><b><u></u></b></p>  <p>You can control the capabilities that the MTP Simulator reports to Windows by using an XML file (see Appendix F in the <em>MTP Device Simulator User Guide</em> for details). Device capabilities are controlled by DeviceSummary.xml, and service capabilities are controlled by Services.xml.</p>  <p>The DeviceSummary.xml file enables you to customize the contents of the DeviceInfo, StorageInfo, DevicePropDesc, and ObjectPropDesc datasets.</p>  <p>The Services.xml file enables you to specify configurations that are related to device services, including service-supported formats, methods, and events.</p>  <h2>Device Profiles</h2>  <p>The MTP Simulator also supports loading <a>different device profiles</a>. A device profile contains a set of customized configuration files (i.e. DeviceSummary.xml and Services.xml) describing a sample device. The DEK comes bundled with sample profiles representing each device class (Camera, Cellular Phone, Media Player, etc). Details of how to load the device profiles are outlined in the <em>MTP Device Simulator User Guide</em>. </p>  <p>&#160;</p>  <p>   <table border="1" cellspacing="0" cellpadding="1"><tbody>       <tr>         <td valign="top" width="217"><strong>Device Profile</strong></td>          <td valign="top" width="402"><strong>Description</strong></td>       </tr>        <tr>         <td valign="top" width="217">           <p>Fabrikam_Camera</p>         </td>          <td valign="top" width="402">           <p>Simulates a sample camera.</p>         </td>       </tr>        <tr>         <td valign="top" width="217">           <p>Fabrikam_Phone</p>         </td>          <td valign="top" width="402">           <p>Simulates a cellular phone.</p>         </td>       </tr>        <tr>         <td valign="top" width="217">           <p>Fabrikam_PMP</p>         </td>          <td valign="top" width="402">           <p>Simulates a portable media player.</p>         </td>       </tr>        <tr>         <td valign="top" width="217">           <p>MtpSim-FullEnumSync</p>         </td>          <td valign="top" width="402">           <p>Simulates a device that supports the Full Enumeration synchronization model, for example for contacts, calendar, tasks, and notes synchronization.</p>         </td>       </tr>        <tr>         <td valign="top" width="217">           <p>MtpSim-FullEnumSyncSimpleParticipant</p>         </td>          <td valign="top" width="402">           <p>Simulates a device that supports the Full Enumeration synchronization model (like MtpSim-FullEnumSync), with additional support for the simple participant feature.</p>         </td>       </tr>     </tbody></table> </p>  <h6>Table 2: Sample MTP Simulator Device Profiles</h6>  <p>Each of these profiles has a corresponding Device Stage package. Each of these packages supports the same set of standard Device Stage tasks, with the exception of the Ringtone task which is not supported by the Fabrikam_Camera and Fabrikam_PMP profiles. For more information on authoring Device Stage metadata, refer to the <b>Windows 7 Device Stage Development Guide</b> in the <a href="https://www.microsoft.com/whdc/device/DeviceExperience/Dev-Kit.mspx">Microsoft Device Experience Development Kit</a>.</p>  <h2>Testing Device Stage Packages</h2>  <p>The MTP Simulator can also be used to test custom Device Stage packages. The MTP Device Inspector tool can be used to generate a device profile which can be loaded into the Simulator (see the <i>MTP Device Simulator User Guide </i>for details<i>)</i>. Once a custom Device Stage metadata package has been authored, the package contains all the files necessary to display a Device Stage experience in Windows 7. The package may be tested by copying it to the PC’s device metadata store and connecting the test device, in this case rapid development can be done using the MTP Simulator. In order to load (unsigned) custom Device Stage metadata the system will need to be boot into test mode. For more details, refer to page 40 of the <b>Windows 7 Device Stage Development Guide</b> document that is included in the <a href="https://www.microsoft.com/whdc/device/DeviceExperience/Dev-Kit.mspx">Microsoft Device Experience Development Kit</a> for details on testing Device Stage metadata packages.</p>  <h2>Want to Learn More?</h2>  <p>The <i>MTP Device Simulator User Guide</i> in the Documentation for the <a href="https://www.microsoft.com/whdc/device/wpd/MTP-DEK_Win7.mspx">Device Enabling Kit</a> contains more information on the features described above.</p>  <p>If you have general questions about the MTP Simulator contact AskMTP at Microsoft dot com.</p>  <p>&#160;</p>  <p><i>This posting is provided &quot;AS IS&quot; with no warranties and confers no rights.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Windows 7 Portable Devices and the Windows Logo Program</title>
      <link>https://docs.microsoft.com/archive/blogs/wpdblog/windows-7-portable-devices-and-the-windows-logo-program</link>
      <pubDate>Fri, 09 Oct 2009 20:22:00 GMT</pubDate>
      <dc:creator><![CDATA[WPD Blogger [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/wpdblog/2009/10/09/windows-7-portable-devices-and-the-windows-logo-program/</guid>
      <description><![CDATA[With the release of Windows 7 we are seeing a great deal of maturity of the Windows Portable Device...]]></description>
      <content:encoded><![CDATA[<p>With the release of Windows 7 we are seeing a great deal of maturity of the Windows Portable Device (WPD) Platform. The WPD Platform includes the WPD APIs with WPD Automation and native Device Services, the Media Transfer Protocol (MTP) class drivers with MTP over USB, MTP over IP, and MTP over Bluetooth. For more information on what was new for Windows 7, see our <a href="https://blogs.msdn.com/wpdblog/archive/2009/08/07/windows-7-new-features.aspx" mce_href="https://blogs.msdn.com/wpdblog/archive/2009/08/07/windows-7-new-features.aspx">New Features for Windows 7 post</a>. Due largely to the native support in Windows and our high level of engagement with industry partners we were able to put together a new comprehensive Logo program for Portable Devices that work well with Windows.</p>  <p>This blog post covers the following topics:</p>  <ul>   <li>What is the Windows Logo Program for Hardware?</li>    <li>Supported Portable Device Logo Programs</li>    <li>Prepared Requirement Reports</li>    <li>Windows Logo Kit</li>    <li>Additional Information on the Windows Logo Program for Hardware</li>    <li>Development Tools and Support</li> </ul>  <h2>What is the Windows Logo Program for Hardware?</h2>  <p>The Windows Logo Program is designed to address the current and future market needs of customers using the Windows platform. The Windows logo signifies the compatibility and reliability of systems and devices with the Windows operating system. It gives customers confidence that your product is thoroughly tested with Microsoft-provided tools and ensures a good user experience.</p>  <p>The Windows Logo Program helps partners to innovate and bring a premium experience to market, thereby improving their ability to increase market share. The program strives to continuously improve its processes, responsiveness, and partner satisfaction.    <br /></p>  <h2>Supported Portable Device Logo Programs</h2>  <p>There are currently 3 logo categories that are accepting submissions for Portable Devices, they are:</p>  <p><b>Digital Still Camera- </b>This program supports logo for Windows 7 and Windows Vista</p>  <p><b>Portable Media Player</b>- This program supports logo for Windows 7 and Windows Vista. The PlaysForSure program was retired at the end of August 2009.</p>  <p><b>Cellular Handset (Phone)</b>- This program supports logo for Windows 7, Windows Vista, and Windows XP.The PlaysForSure program was retired at the end of August 2009.<b> </b></p>  <p>With the release of the Windows Logo Kit (WLK) 1.5, which is due to release at the end of November 2009, we will see one additional category:</p>  <p><b>Other Portable Devices </b>- This program supports logo for Windows 7.</p>  <p>This new category is being made available as an option for hardware manufacturers that support the core set of MTP Revision 1.0 operations, device properties, and object formats. Passing this logo program provides validation that the device has implemented the MTP protocol correctly, so that the device will work as expected with the MTP class driver in Windows 7.</p>  <p>The following table provides a breakdown of requirements for each of these 4 categories. The ‘R' in the table implies that the operation,property, or object format is required. If the field is blank the requirement is optional.</p>  <p><b>RequiredOperations</b></p>  <table border="1" cellspacing="0" cellpadding="2"><tbody>     <tr>       <td valign="top" width="129">         <p align="center"><b>&#160;</b></p>       </td>        <td valign="top" width="80">         <p align="center"><b>Property Code</b></p>       </td>        <td valign="top" width="61">         <p align="center"><b>Cellular Handset</b></p>       </td>        <td valign="top" width="70">         <p align="center"><b>Portable Media Player</b></p>       </td>        <td valign="top" width="69">         <p align="center"><b>Digital Camera</b></p>       </td>        <td valign="top" width="70">         <p align="center"><b>Other Portable Devices             <br /></b></p>       </td>     </tr>      <tr>       <td valign="top" width="479" colspan="6">         <p><b>Operations</b></p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetDeviceInfo</p>       </td>        <td valign="top" width="80">         <p align="center">0x1001</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>OpenSession</p>       </td>        <td valign="top" width="80">         <p align="center">0x1002</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>CloseSession</p>       </td>        <td valign="top" width="80">         <p align="center">0x1003</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetStorageIDs</p>       </td>        <td valign="top" width="80">         <p align="center">0x1004</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetStorageInfo</p>       </td>        <td valign="top" width="80">         <p align="center">0x1005</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetNumObjects</p>       </td>        <td valign="top" width="80">         <p align="center">0x1006</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetObjectHandles</p>       </td>        <td valign="top" width="80">         <p align="center">0x1007</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetObjectInfo</p>       </td>        <td valign="top" width="80">         <p align="center">0x1008</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetObject</p>       </td>        <td valign="top" width="80">         <p align="center">0x1009</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>SetDevicePropValue</p>       </td>        <td valign="top" width="80">         <p align="center">0x100a</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>DeleteObject</p>       </td>        <td valign="top" width="80">         <p align="center">0x100b</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>SendObjectInfo</p>       </td>        <td valign="top" width="80">         <p align="center">0x100c</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>SendObject</p>       </td>        <td valign="top" width="80">         <p align="center">0x100d</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetDevicePropDesc</p>       </td>        <td valign="top" width="80">         <p align="center">0x1014</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetDevicePropValue</p>       </td>        <td valign="top" width="80">         <p align="center">0x1015</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetPartialObject</p>       </td>        <td valign="top" width="80">         <p align="center">0x101b</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetObjectPropsSupported</p>       </td>        <td valign="top" width="80">         <p align="center">0x9801</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetObjectPropDesc</p>       </td>        <td valign="top" width="80">         <p align="center">0x9802</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetObjectPropValue</p>       </td>        <td valign="top" width="80">         <p align="center">0x9803</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>SetObjectPropValue</p>       </td>        <td valign="top" width="80">         <p align="center">0x9804</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>GetObjectReferences</p>       </td>        <td valign="top" width="80">         <p align="center">0x9810</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>SetObjectReferences</p>       </td>        <td valign="top" width="80">         <p align="center">0x9811</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>   </tbody></table>  <p>See <b>Appendix D - Operations</b> in the MTP Specification, Revision 1.0 for complete list of defined MTP Operations. </p>  <p><b>Required Device Properties</b></p>  <table border="1" cellspacing="0" cellpadding="2"><tbody>     <tr>       <td valign="top" width="129">         <p align="center"><b>&#160;</b></p>       </td>        <td valign="top" width="80">         <p align="center"><b>Property Code</b></p>       </td>        <td valign="top" width="61">         <p align="center"><b>Cellular Handset</b></p>       </td>        <td valign="top" width="70">         <p align="center"><b>Portable Media Player</b></p>       </td>        <td valign="top" width="69">         <p align="center"><b>Digital Camera</b></p>       </td>        <td valign="top" width="70">         <p align="center"><b>Other Portable Devices             <br /></b></p>       </td>     </tr>      <tr>       <td valign="top" width="479" colspan="6">         <p><b>Device Properties</b></p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>Battery Level</p>       </td>        <td valign="top" width="80">         <p align="center">0x5001</p>       </td>        <td valign="top" width="61">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>        <td valign="top" width="69">         <p align="center">R<sup>(1)</sup></p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>Synchronization Partner</p>       </td>        <td valign="top" width="80">         <p align="center">0xd401</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="129">         <p>Device Friendly Name</p>       </td>        <td valign="top" width="80">         <p align="center">0xd402</p>       </td>        <td valign="top" width="61">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>     </tr>   </tbody></table>  <p>See <b>Appendix C - Device Properties </b>in the MTP Specification, Revision1.0 for complete list of defined Device Properties. </p>  <p>(1)Digital Cameras are required to support Battery Level after June 2010.</p>  <p><b>Required Object Formats</b></p>  <p>The following table represents the list of required object formats for a portable device. Each object format also has a list of object properties that must be supported per object type. See requirement <b>PORTABLE-0064</b> for more details.</p>  <table border="1" cellspacing="0" cellpadding="2"><tbody>     <tr>       <td valign="top" width="132">         <p align="center"><b>&#160;</b></p>       </td>        <td valign="top" width="79">         <p align="center"><b>Property Code</b></p>       </td>        <td valign="top" width="60">         <p align="center"><b>Cellular Handset</b></p>       </td>        <td valign="top" width="70">         <p align="center"><b>Portable Media Player</b></p>       </td>        <td valign="top" width="69">         <p align="center"><b>Digital Camera</b></p>       </td>        <td valign="top" width="70">         <p align="center"><b>Other Portable Devices             <br /></b></p>       </td>     </tr>      <tr>       <td valign="top" width="479" colspan="6">         <p><b>Object Formats</b></p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>Undefined</p>       </td>        <td valign="top" width="79">         <p align="center">0x3000</p>       </td>        <td valign="top" width="60">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>Association</p>       </td>        <td valign="top" width="79">         <p align="center">0x3001</p>       </td>        <td valign="top" width="60">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>Abstract Audio Album</p>       </td>        <td valign="top" width="79">         <p align="center">0xba03</p>       </td>        <td valign="top" width="60">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>Abstract Audio &amp; Video Playlist</p>       </td>        <td valign="top" width="79">         <p align="center">0xba05</p>       </td>        <td valign="top" width="60">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">R</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>WAV</p>       </td>        <td valign="top" width="79">         <p align="center">0x3008</p>       </td>        <td valign="top" width="60">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="70">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>MP3</p>       </td>        <td valign="top" width="79">         <p align="center">0x3009</p>       </td>        <td valign="top" width="60">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="70">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>AVI</p>       </td>        <td valign="top" width="79">         <p align="center">0x300a</p>       </td>        <td valign="top" width="60">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="70">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>MPEG</p>       </td>        <td valign="top" width="79">         <p align="center">0x300b</p>       </td>        <td valign="top" width="60">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="70">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>ASF</p>       </td>        <td valign="top" width="79">         <p align="center">0x300c</p>       </td>        <td valign="top" width="60">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="70">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>EXIF/JPEG</p>       </td>        <td valign="top" width="79">         <p align="center">0x3801</p>       </td>        <td valign="top" width="60">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>        <td valign="top" width="69">         <p align="center">R</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>TIFF/EP</p>       </td>        <td valign="top" width="79">         <p align="center">0x3802</p>       </td>        <td valign="top" width="60">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>BMP</p>       </td>        <td valign="top" width="79">         <p align="center">0x3804</p>       </td>        <td valign="top" width="60">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>WMA</p>       </td>        <td valign="top" width="79">         <p align="center">0xb901</p>       </td>        <td valign="top" width="60">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="70">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>AAC</p>       </td>        <td valign="top" width="79">         <p align="center">0xb903</p>       </td>        <td valign="top" width="60">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="70">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>WMV</p>       </td>        <td valign="top" width="79">         <p align="center">0xb981</p>       </td>        <td valign="top" width="60">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="70">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>MP4 Container</p>       </td>        <td valign="top" width="79">         <p align="center">0xb982</p>       </td>        <td valign="top" width="60">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="70">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>      <tr>       <td valign="top" width="132">         <p>3GP Container</p>       </td>        <td valign="top" width="79">         <p align="center">0xb984</p>       </td>        <td valign="top" width="60">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="70">         <p align="center">R<sup>(2)</sup></p>       </td>        <td valign="top" width="69">         <p align="center">&#160;</p>       </td>        <td valign="top" width="70">         <p align="center">&#160;</p>       </td>     </tr>   </tbody></table>  <p>(2) Portable devices that are capable of playing audio and/or video must support at least one of these formats.&#160; This table does not represent the complete list of supported formats; it represents the list of commonly used formats.</p>  <p>See <b>Appendix A - Object Formats</b> in the MTP Specification, Revision 1.0 for complete list of defined Device Properties.&#160; </p>  <h2>Prepared Requirement Reports</h2>  <p>The Windows Logo Program for Hardware creates a list of requirements that the validation tests are based on. During the hardware design phase it is critical that manufacturers that are going to be involved with the logo process review the logo requirements that are applicable to a target OS,such as Windows 7. Although the majority of requirements that are outlined for Portable Devices are based on industry standards and specifications or white papers <a href="https://www.microsoft.com/whdc/device/wpd/default.mspx" mce_href="https://www.microsoft.com/whdc/device/wpd/default.mspx">published by Microsoft</a>, there are some requirements that may not be apparent until you attempt to run through the WLK and come across a failure that you do not expect. For example, we have portable device specific behavior requirements defined but there are also fundamental requirements that apply to all devices for Windows. There are also requirements that apply to all USB devices, one such requirement is support for USB serial numbers for all portable USB devices. Additional requirements can be reviewed by downloading the <a href="https://winqual.microsoft.com/member/LogoPoint/Requirements/PreparedRequirementReport.aspx" mce_href="https://winqual.microsoft.com/member/LogoPoint/Requirements/PreparedRequirementReport.aspx">Prepared Requirements Reports</a> which are organized by specific hardware technologies.     <br /></p>  <h2>Windows Logo Kit</h2>  <p>The Windows Logo Kit (WLK) is used to validate the requirements defined for the logo program. This kit can also be used for product development. We encourage its use during the product development cycle of hardware in order to ensure device compliance with both Windows and industry standards. The kit includes several tests designed to validate device implementation and behavior at multiple levels. There are tests for USB compliance, MTP compliance, and WPD platform compliance that also cover device services validation.&#160; </p>  <p>Thecore tests provided for portable devices are:</p>  <ul class="unIndentedList">   <li>MTP Compliance Tests </li>    <li>WPD Compliance Tests</li>    <li>WMDM Compliance Tests</li>    <li>WMDM Sync Test</li> </ul>  <p>For detailed description of these tests, please go to the <a href="https://msdn.microsoft.com/en-us/library/dd327436.aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd327436.aspx">WLK help documentation</a>.</p>  <p>There is a significant amount of information available about the WLK, including user guides and video tutorials. For more information about the WLK see: <a href="https://www.microsoft.com/whdc/winlogo/WLK/default.mspx" mce_href="https://www.microsoft.com/whdc/winlogo/WLK/default.mspx">https://www.microsoft.com/whdc/winlogo/WLK/default.mspx</a></p>  <p>The kit is free to download and use.    <br /></p>  <h2>Additional Information on the Windows Logo Program for Hardware</h2>  <p>There is a wealth of additional information that has been made available for this program. Here are some of the key helpful links that will help you navigate the logo program.</p>  <ul class="unIndentedList">   <li><a href="https://www.microsoft.com/whdc/winlogo/default.mspx" mce_href="https://www.microsoft.com/whdc/winlogo/default.mspx">https://www.microsoft.com/whdc/winlogo/default.mspx</a> </li>    <li><a href="https://msdn.microsoft.com/en-us/library/cc300359.aspx" mce_href="https://msdn.microsoft.com/en-us/library/cc300359.aspx">https://msdn.microsoft.com/en-us/library/cc300359.aspx</a> </li>    <li><a href="https://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?dg=microsoft.public.development.device.drivers.dtm&amp;cat=en_us_7CF920C0-483A-5AF9-37A8-BB5310F0ACF4&amp;lang=en&amp;cr=us" mce_href="https://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?dg=microsoft.public.development.device.drivers.dtm&amp;cat=en_us_7CF920C0-483A-5AF9-37A8-BB5310F0ACF4&amp;lang=en&amp;cr=us">https://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?dg=microsoft.public.development.device.drivers.dtm&amp;cat=en_us_7CF920C0-483A-5AF9-37A8-BB5310F0ACF4&amp;lang=en&amp;cr=us</a> </li> </ul>  <p>We strongly encourage anyone that is going to participate in the logo program to review the <a href="https://www.microsoft.com/whdc/winlogo/logocast.mspx" mce_href="https://www.microsoft.com/whdc/winlogo/logocast.mspx">Windows Logo Program Webcasts</a> as well. These are a series of videos that can be viewed on demand that covers logo planning, testing, development, and how to submit logo packages using the qualification page at <a href="https://winqual.microsoft.com/" mce_href="https://winqual.microsoft.com/">https://winqual.microsoft.com</a>.</p>  <h2>Development Tools and Support</h2>  <p>There are several development resources available for portable device manufacturers. Probably the best source for this information was put together and released as a WPD Team Blog back in September, refer to <a href="https://blogs.msdn.com/wpdblog/archive/2009/09/11/windows-7-portable-device-development-kits.aspx" mce_href="https://blogs.msdn.com/wpdblog/archive/2009/09/11/windows-7-portable-device-development-kits.aspx">Windows7 Portable Device Development Kits</a> for details. That blog post covered the following development resources:</p>  <ul class="unIndentedList">   <li>Windows 7 Portable Device Enabling Kit for MTP </li>    <li>Windows Portable Devices SDK </li>    <li>Windows Portable Devices Driver Kit </li>    <li>Windows Media Device Manager SDK </li>    <li>Microsoft Device Experience Development Kit </li>    <li>Windows Logo Kit </li> </ul>  <p>If you have general questions about MTP or WPD development, contact AskMTP at microsoft dot com. </p>  <p>&#160;</p>  <p><i>This posting is provided &quot;AS IS&quot; with no warranties and confers no rights.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Windows 7 Application Samples</title>
      <link>https://docs.microsoft.com/archive/blogs/wpdblog/windows-7-application-samples</link>
      <pubDate>Fri, 25 Sep 2009 18:52:00 GMT</pubDate>
      <dc:creator><![CDATA[WPD Blogger [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/wpdblog/2009/09/25/windows-7-application-samples/</guid>
      <description><![CDATA[The Windows Portable Devices (WPD) SDK includes two sample command-line applications written in...]]></description>
      <content:encoded><![CDATA[
<p>The Windows Portable Devices (WPD) SDK includes two sample command-line applications written in C++. The first application, WpdApiSample, lets the user accomplish tasks like: enumerating connected devices, exploring objects on these devices, and enumerating object properties. The second application, WpdServiceApiSample, is designed to explore a Contacts Device Service. The user can enumerate connected device services, retrieve properties and formats for a given service, and invoke methods on that service. The WPD SDK is included in the Windows SDK which can be downloaded from <a href="https://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&amp;displaylang=en" mce_href="https://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&amp;displaylang=en">https://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&amp;displaylang=en</a></p>

<p>The following sections describe each sample application, the modules found in that application, and the operating systems that it will run on. </p>
<h4>WpdApiSample</h4>
<p>Of the two sample applications, the WpdApiSample, is the most generalized. It demonstrates how a developer would use the WPD API to accomplish tasks common to most applications. For example, this application demonstrates how a developer would:</p>

<p>· Enumerate the devices connected to a computer.</p>

<p>· Establish a connection to a connected device.</p>

<p>· Enumerate device content.</p>

<p>· Retrieve the properties for a given object on a device.</p>

<p>· Set the properties for a given object on a device.</p>

<p>· Retrieve general device information (for example, a description of the operations that a device can perform).</p>

<p>· Operate on device content (for example, move a file from one folder on the device to another).</p>

<p>The WpdApiSample application includes the following files: 
</p>
<table border="1" cellpadding="2" cellspacing="0">
<tbody>
<tr>
<td valign="top" width="319">
<p><b>File</b></p>
</td>

<td valign="top" width="319">
<p><b>Description</b></p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>ContentEnumeration.cpp</p>
</td>

<td valign="top" width="319">
<p>Contains functions that enumerate all the objects on a device.</p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>ContentProperties.cpp</p>
</td>

<td valign="top" width="319">
<p>Contains functions that read and write object properties and make bulk property set/get requests.</p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>ContentTransfer.cpp</p>
</td>

<td valign="top" width="319">
<p>Contains functions that transfer content to or from the device, read object type requirements, and create a folder on the device.</p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>DeviceCapabilities.cpp</p>
</td>

<td valign="top" width="319">
<p>Contains functions to list the functional object types on the device, list the content types supported by each functional object type, and display rendering object profiles.</p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>DeviceEnumeration.cpp</p>
</td>

<td valign="top" width="319">
<p>Lists the friendly names, manufacturers, and descriptions of all connected devices.</p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>DeviceEvents.cpp</p>
</td>

<td valign="top" width="319">
<p>Contains functions that log device events and their parameters whenever events are fired.</p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>Stdafx.cpp</p>
</td>

<td valign="top" width="319">
<p>Includes the standard files.</p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>WpdApiSample.cpp</p>
</td>

<td valign="top" width="319">
<p>Displays a list of available devices and tasks available to the user.</p>
</td>
</tr>
</tbody></table>

<p>This application is supported on Windows XP, Windows Vista, and Windows 7. </p>

<p>Even if you have no WPD devices connected to your computer, you can familiarize yourself with the WPD API and this application by installing the WpdHelloWorldDriver sample from the Windows Driver Kit (WDK), which emulates a simple WPD device. For information about downloading the WDK, see <a href="https://www.microsoft.com/whdc/resources/downloads.mspx" mce_href="https://www.microsoft.com/whdc/resources/downloads.mspx">https://www.microsoft.com/whdc/resources/downloads.mspx</a></p>
<h4>WpdServiceApiSample</h4>
<p>The WpdServiceApiSample sample demonstrates how a developer would use the WPD API to explore a Contacts Device Service on a device that’s attached to a computer. For example, this application demonstrates how a developer would:</p>

<p>· Enumerate the services on a devce.</p>

<p>· Open a service.</p>

<p>· Enumerate service content.</p>

<p>· Retrieve the events and methods supported by a service.</p>

<p>· Access the service object properties.</p>

<p>· Invoke service methods (both synchronously and asynchronously).</p>

<p>The WpdServiceApiSample application includes the following files: 
</p>
<table border="1" cellpadding="2" cellspacing="0">
<tbody>
<tr>
<td valign="top" width="319">
<p><b>File</b></p>
</td>

<td valign="top" width="319">
<p><b>Description</b></p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>ContentEnumeration.cpp</p>
</td>

<td valign="top" width="319">
<p>Contains methods that enumerate the content on a given Contacts service.</p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>ContentProperties.cpp</p>
</td>

<td valign="top" width="319">
<p>Contains methods that read and write properties on a given Contacts service.</p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>ServiceCapabilities.cpp</p>
</td>

<td valign="top" width="319">
<p>Contains the methods that retrieve the supported formats, events, and abstract services that are supported by a given Contacts service.</p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>ServiceEnumeration.cpp</p>
</td>

<td valign="top" width="319">
<p>Contains the helper functions that retrieve device information such as the device-friendly name or the supported Contacts services.</p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>ServiceMethods.cpp</p>
</td>

<td valign="top" width="319">
<p>Contains the methods that retrieve and invoke methods supported by a given Contacts service.</p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>Stdafx.cpp</p>
</td>

<td valign="top" width="319">
<p>Includes the standard files.</p>
</td>
</tr>

<tr>
<td valign="top" width="319">
<p>WpdServiceApiSample.cpp</p>
</td>

<td valign="top" width="319">
<p>Displays a list of available device services and tasks available to the user</p>
</td>
</tr>
</tbody></table>

<p>Because Device Services is new for Windows 7, this application is only supported in the Windows 7 operating system. </p>

<p>Even if you have no WPD devices connected to your computer, you can familiarize yourself with the WPD API and this application by installing the WpdServiceSampleDriver that’s included as a sample in the Windows Driver Kit (WDK). This sample driver emulates a simple WPD device service. </p>
<h4>Other Samples</h4>
<p>In addition to the two samples that ship in the SDK, the WPD team created three other samples that demonstrate using WPD to display the current office temperature in the Windows Sidebar. One of these samples is written using unmanaged-code and C++; another is written using the COM interop and Visual Basic .Net; and, the third is written using the COM interop and Visual C# .Net.</p>

<p>All three of these samples rely on a simple temperature sensor device, device-firmware, and a sample WPD driver. You can download the circuit description, device-firmware, and sample driver from here: <a href="https://www.microsoft.com/whdc/device/media/WPD_drv.mspx" mce_href="https://www.microsoft.com/whdc/device/media/WPD_drv.mspx">https://www.microsoft.com/whdc/device/media/WPD_drv.mspx</a></p>

<p>Once you build the device, download the firmware, and install the driver, you can begin exploring the WPD API samples. You’ll find a description of the unmanaged application at: <a href="https://blogs.msdn.com/wpdblog/archive/2007/12/19/creating-a-temperature-sensor-gadget-for-windows-sidebar-with-c.aspx" mce_href="https://blogs.msdn.com/wpdblog/archive/2007/12/19/creating-a-temperature-sensor-gadget-for-windows-sidebar-with-c.aspx">https://blogs.msdn.com/wpdblog/archive/2007/12/19/creating-a-temperature-sensor-gadget-for-windows-sidebar-with-c.aspx</a>. </p>

<p>You’ll find a description of the COM interop and Visual Basic .Net application at: <a href="https://wpdtempsensor.codeplex.com/" mce_href="https://wpdtempsensor.codeplex.com/">https://wpdtempsensor.codeplex.com/</a>. </p>

<p>And, you’ll find a description of the COM interop and the C# application at: <a href="https://blogs.msdn.com/wpdblog/archive/2007/11/26/creating-a-temperature-sensor-gadget-for-windows-sidebar.aspx" mce_href="https://blogs.msdn.com/wpdblog/archive/2007/11/26/creating-a-temperature-sensor-gadget-for-windows-sidebar.aspx">https://blogs.msdn.com/wpdblog/archive/2007/11/26/creating-a-temperature-sensor-gadget-for-windows-sidebar.aspx</a>.</p>

<p><i>This posting is provided "AS IS" with no warranties and confers no rights.</i></p>
]]></content:encoded>
    </item>
    <item>
      <title>Windows 7 Driver Samples</title>
      <link>https://docs.microsoft.com/archive/blogs/wpdblog/windows-7-driver-samples</link>
      <pubDate>Fri, 18 Sep 2009 17:24:00 GMT</pubDate>
      <dc:creator><![CDATA[WPD Blogger [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/wpdblog/2009/09/18/windows-7-driver-samples/</guid>
      <description><![CDATA[The Windows Portable Devices Driver Kit in the Windows Driver Kit (WDK) comes bundled with five...]]></description>
      <content:encoded><![CDATA[<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3><FONT face=Calibri></FONT></FONT></P>
<P><FONT size=2>The Windows Portable Devices Driver Kit in the Windows Driver Kit (WDK) comes bundled with five WPD sample drivers. Two of these drivers, WpdHelloWorldDriver and WpdWudfSampleDriver, were available in previous versions of the WDK. The remaining three drivers, WpdBasicHardwareDriver, WpdServiceSampleDriver, and WpdMultiTransportDriver, are new additions in the Windows 7 WDK. Together, these samples illustrate how to build a WPD driver for the different scenarios that WPD enables, including interaction with basic hardware, media synchronization, device services, and multi-transport. </FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>We had mentioned these samples in a previous post on the </FONT><A href="https://blogs.msdn.com/wpdblog/archive/2009/09/11/windows-7-portable-device-development-kits.aspx" mce_href="https://blogs.msdn.com/wpdblog/archive/2009/09/11/windows-7-portable-device-development-kits.aspx"><FONT size=2>Windows 7 Portable Devices Development Kits</FONT></A><FONT size=2>. The purpose of this post is to spend some time covering each sample in greater detail. Hopefully, this will help driver developers navigate the various WPD samples, and figure out which sample(s) best fit their driver requirements. </FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>The following sections will describe each driver, the </FONT><A href="https://msdn.microsoft.com/en-us/library/dd434932.aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd434932.aspx"><FONT size=2>WPD commands</FONT></A><FONT size=2> that each implements, and the operating systems that each supports. In addition, we will provide the links to instructions for building and installing.</FONT></P>
<H2>WpdHelloWorldDriver</H2>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3><FONT face=Calibri><SPAN></SPAN></FONT></FONT></P>
<P><FONT size=2><SPAN>Of all the sample drivers, the WpdHelloWorldDriver is the most simple. This driver supports and emulates four objects in software: a device object, a storage object, a folder object, and a text file object. WpdHelloWorldDriver was designed to provide the most basic scaffolding or skeleton required for developing a WPD driver; similar to the canonical "Hello World" program used for introducing a framework or programming language. If you are new to WPD driver development and need a kick start, we recommend starting with this sample.</SPAN> </FONT></P>
<P><SPAN><FONT size=2>The WpdHelloWorldDriver sample supports 22 commands. These commands cover the basic functionality that enables a WPD device to be browsed in Windows Explorer as a read-only device. The commands fall into four categories: object enumeration, object properties, object resources, and device capabilities. Like all WPD drivers, when this driver is installed and a WPD application calls a method to enumerate objects, set a property, open a resource, and so on, the driver will invoke a corresponding command handler for one of these supported commands. </FONT></SPAN></P>
<P>This driver is supported on Windows XP, Windows Vista (x86, amd64), and Windows 7 (x86, amd64). </P>
<P>For instructions on how to build and install this driver, see: <A href="https://msdn.microsoft.com/en-us/library/dd573842.aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd573842.aspx">https://msdn.microsoft.com/en-us/library/dd573842.aspx</A></P>
<H2>WpdBasicHardwareDriver</H2>
<P><SPAN><FONT size=2>The WpdBasicHardwareDriver sample is new for Windows 7 and builds upon the WpdHelloWorldDriver. This sample stands apart from the other WPD samples in that it accesses real device hardware instead of emulating a software-only device. We provided this sample to demonstrate how a basic WPD driver can be built to interact with simple devices. </FONT></SPAN></P>
<P><FONT size=2>For our demonstration device, we targetted a “hobbyist” microcontroller that reads data from a variety of sensors. The sensors include: a 2-axis accelerometer, a 3-axis accelerometer, a temperature/humidity sensor, a pressure sensor, a distance sensor, a passive infrared sensor, a compass, a vibration sensor, and a light sensor. These sensor devices are controlled by a Parallax BS2 microcontroller attached to the PC via an RS232 port. In addition to the driver source code, we also provided some sample firmware code that retrieves the sensor data and sends them over the serial port to the PC.</FONT></P>
<P><FONT size=2>The WpdBasicHardwareDriver sample supports an even smaller set of commands than the WpdHelloWorldDriver. In the interests of only providing the code that is necessary to demontrate the concepts, we removed some commands for object resources because the WpdBasicHardwareDriver does not need to support reading of files from the device. The remaining commands fall under these three categories: object enumeration, object properties, and device capabilities. To see this driver in action, you can use WpdMon to view the events corresponding to each sensor reading.</FONT></P>
<P><FONT size=2>This sample also showcases how WPP Software Tracing can be used for error checking macros. A while ago, we had a post <FONT size=2>that describes how you can <A href="https://blogs.msdn.com/wpdblog/archive/2007/04/01/driver-dev-guide-using-wpp-tracing-in-your-wpd-driver.aspx" mce_href="https://blogs.msdn.com/wpdblog/archive/2007/04/01/driver-dev-guide-using-wpp-tracing-in-your-wpd-driver.aspx">migrate your existing WPD driver from OutputDebugString to WPP Tracing</A>. The WpdBasicHardwareDriver is now bundled with the macros.</FONT>&nbsp;</FONT></P>
<P><FONT size=2>This driver is supported on Windows XP, Windows Vista (x86, amd64), and Windows 7 (x86, amd64). If you plan to develop drivers that integrate sensors with Windows 7, we recommend using the </FONT><A href="https://msdn.microsoft.com/en-us/library/dd318953%28VS.85%29.aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd318953(VS.85).aspx"><FONT size=2>Sensor API</FONT></A><FONT size=2> and </FONT><A href="https://msdn.microsoft.com/en-us/library/cc974537.aspx" mce_href="https://msdn.microsoft.com/en-us/library/cc974537.aspx"><FONT size=2>Sensor Driver Model</FONT></A><FONT size=2>. If you need to develop drivers to integrate sensors with Windows Vista or Windows XP, WPD provides a viable solution.</FONT><FONT size=2>&nbsp;</FONT></P>
<P><FONT size=2>For instructions on how to build and install this driver, see: <A href="https://msdn.microsoft.com/en-us/library/dd573829.aspx">https://msdn.microsoft.com/en-us/library/dd573829.aspx</A></FONT></P>
<H2>WpdWudfSampleDriver</H2>
<P><FONT size=2><SPAN>The WpdWudfSampleDriver is a comprehensive driver sample that demonstrates using the WPD DDI for media transfer scenarios.<SPAN>&nbsp; </SPAN>In addition to file browsing and transfer via Windows Explorer, this sample contains additional functionality that supports media synchronization with Windows Media Device Manager (WMDM) applications (e.g. Windows Media Player), and photo acquisition with Windows Image Acquisition (WIA) applications (e.g. Paint). All interactions with hardware are emulated in software (meaning that this driver talks to a "fake" device).</SPAN></FONT></P>
<P><SPAN><FONT size=2>To enable the media transfer scenarios, the WpdWudfSampleDriver sample had to support a large set of commands, including the commands supported by the WpdHelloWorldDriver. These commands can be divided into eight categories: object enumeration, object management, object properties, bulk properties, object resources, capabilities, and storage.</FONT></SPAN></P>
<P><SPAN><FONT size=2>In this version, we fixed </FONT><A href="https://blogs.msdn.com/wpdblog/archive/2007/05/08/getting-a-wpd-sample-driver-working-with-windows-media-player-11.aspx" mce_href="https://blogs.msdn.com/wpdblog/archive/2007/05/08/getting-a-wpd-sample-driver-working-with-windows-media-player-11.aspx"><FONT size=2>a compatibility issue</FONT></A><FONT size=2> in the Vista WDK version of the sample driver code that prevents it from being properly enumerated in Windows Media Player.</FONT><FONT size=2> </FONT></SPAN></P>
<P>This driver is supported on Windows XP, Windows Vista (x86, amd64), and Windows 7 (x86, amd64).</P>
<P><FONT size=2>For instructions on how to build and install this driver, see: </FONT><A href="https://msdn.microsoft.com/en-us/library/dd573843.aspx">https://msdn.microsoft.com/en-us/library/dd573843.aspx</A> </P>
<H2>WpdMultiTransportDriver</H2>
<P><SPAN><FONT size=2>The WpdMultiTransportDriver builds upon the WpdHelloWorldDriver and demonstrates how driver developers can take advantage of the Windows 7 support for Multiple Transports. For an overview on what multi transport is all about, check out our post two weeks ago about <A href="https://blogs.msdn.com/wpdblog/archive/2009/09/04/multi-transport-devices-in-windows-7.aspx" mce_href="https://blogs.msdn.com/wpdblog/archive/2009/09/04/multi-transport-devices-in-windows-7.aspx">Multi-Transport support in Windows 7</A></FONT></SPAN><SPAN><FONT size=2>. </FONT></SPAN></P>
<P><FONT size=2></FONT></P>
<P><SPAN style="FONT-SIZE: small" class=Apple-style-span>This driver emulates a transport driver and illustrates how to set the relevant multi-transport settings and generate the Functional Unique Identifier (FUID) during device arrival, in order to perform handshaking with the WPD Composite Driver. In addition, this sample supports multiple Windows Driver Framework I/O queues, where all the other WPD samples only support a single I/O queue.<SPAN>&nbsp;</SPAN></SPAN></P>
<P><FONT size=2></FONT></P>
<P><SPAN style="FONT-SIZE: small" class=Apple-style-span>Other than the multi-transport support, the WpdMultiTransportDriver sample is virtually identical as the WpdHelloWorldDriver, and supports the same set of WPD commands. A quick way to zero-in on the code modifications needed to support Multi-Transport is to use your favorite diff program to compare the WpdHelloWorldDriver and WpdMultiTransportDriver source folders.</SPAN></P>
<P><FONT size=2>Because multi-transport support is a new feature in Windows 7, this sample driver is only supported on Windows 7 (x86, amd64). </FONT></P>
<P><FONT size=2>For instructions on how to build and install this driver, see: </FONT><A href="https://msdn.microsoft.com/en-us/library/dd573843.aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd573843.aspx"><FONT size=2>https://msdn.microsoft.com/en-us/library/dd573843.aspx</FONT></A></P><SPAN>
<H2>WpdServiceSampleDriver</H2></SPAN>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><SPAN><FONT size=2></FONT></SPAN></P>
<P><SPAN><FONT size=2>The WpdServiceSampleDriver demonstrates how a driver can support Windows 7 Device Services. <SPAN>&nbsp;</SPAN>We covered an <A href="https://blogs.msdn.com/wpdblog/archive/2009/08/15/introducing-device-services.aspx" mce_href="https://blogs.msdn.com/wpdblog/archive/2009/08/15/introducing-device-services.aspx">introduction to Device Services</A> in another recent post</FONT></SPAN><SPAN><FONT size=2>. This driver emulates a basic Contacts device service that uses the Full Enumeration Sync device service. To support Device Services, this driver implements device services-specific WPD command sets: WPD_CATEGORY_SERVICE_COMMON, WPD_CATEGORY_SERVICE_CAPABILITIES, and WPD_CATEGORY_SERVICE_METHODS. These commands would allow an application to determine the capabilities of a service and invoke methods supported by the service. This driver also uses the new functionality in the WPD Class Extension (IPortableDeviceClassExtension) to register and unregister the Contacts device service interface. Last but not the least, to support object and property management, this sample also supports commands for object enumeration, object properties, bulk properties, object resources, and device capabilities.</FONT></SPAN></P>
<P><SPAN><FONT size=2>The WpdServiceSampleDriver does not emulate a Media Transfer Protocol (MTP) device. Like most of the other WPD samples, it simulates a software-only device that is not tied to a specific protocol or transport. If you are looking to build firmware for an MTP device that supports device services, you should start with the </FONT></SPAN><A href="https://www.microsoft.com/whdc/device/wpd/MTP-DEK_Win7.mspx" mce_href="https://www.microsoft.com/whdc/device/wpd/MTP-DEK_Win7.mspx"><SPAN><FONT size=2>Device Enabling Kit</FONT></SPAN></A><SPAN><FONT size=2>. </FONT></SPAN></P>
<P><FONT size=2></FONT></P>
<P><SPAN style="FONT-SIZE: small" class=Apple-style-span>Device Services is a new feature we introduced in Windows 7, therefore this sample is only supported on Windows 7 (x86, amd64).</SPAN></P>
<P><FONT size=2>For instructions on how to build and install this driver, see: </FONT><A href="https://msdn.microsoft.com/en-us/library/dd573846.aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd573846.aspx"><FONT size=2>https://msdn.microsoft.com/en-us/library/dd573846.aspx</FONT></A> </P>
<P><BR></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><I><SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt">This posting is provided "AS IS" with no warranties and confers no rights.</SPAN></I><FONT size=3><FONT face=Calibri>&nbsp; </FONT></FONT></P>]]></content:encoded>
    </item>
    <item>
      <title>Windows 7 Portable Device Development Kits</title>
      <link>https://docs.microsoft.com/archive/blogs/wpdblog/windows-7-portable-device-development-kits</link>
      <pubDate>Sat, 12 Sep 2009 02:58:00 GMT</pubDate>
      <dc:creator><![CDATA[WPD Blogger [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/wpdblog/2009/09/12/windows-7-portable-device-development-kits/</guid>
      <description><![CDATA[There are several different resources made available to portable device manufacturers to assist in...]]></description>
      <content:encoded><![CDATA[<p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">There are several different resources made available to portable device manufacturers to assist in device firmware and driver development, and to application developers wishing to create applications that interact with these portable devices. These resources are provided and maintained by members of the Windows Portable Devices team. </font></p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">This post provides a description for the following development kits: </font></p>  <ul>   <li>     <div style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpFirst"><font size="2"><font face="Verdana"><span style="font-family: symbol; mso-bidi-font-family: symbol; mso-fareast-font-family: symbol"><span style="mso-list: ignore"><span style="font: 7pt &#39;Times New Roman&#39;">&#160;</span></span></span>Windows 7 Portable Device Enabling Kit for MTP </font></font></div>   </li>    <li>     <div style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle"><font size="2"><font face="Verdana">Windows Portable Devices SDK </font></font></div>   </li>    <li>     <div style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle"><font size="2"><font face="Verdana">Windows Portable Devices Driver Kit </font></font></div>   </li>    <li>     <div style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle"><font size="2"><font face="Verdana">Windows Media Device Manager SDK </font></font></div>   </li>    <li>     <div style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle"><font size="2"><font face="Verdana">Microsoft Device Experience Development Kit </font></font></div>   </li>    <li>     <div style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle"><font size="2"><font face="Verdana"></span>Windows Logo Kit </font></font></div>   </li> </ul>  <p></p>  <h2>Windows 7 Portable Device Enabling Kit for MTP</h2>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">This development kit is designed to assist portable device manufacturers in the development of Media Transfer Protocol (MTP) device firmware that is compatible with the </font><a href="https://blogs.msdn.com/wpdblog/archive/2009/08/29/mtp-over-various-transports.aspx" mce_href="https://blogs.msdn.com/wpdblog/archive/2009/08/29/mtp-over-various-transports.aspx"><font size="2">various MTP device transports that Windows supports</font></a><font size="2">, and with </font><a href="https://blogs.msdn.com/wpdblog/archive/2009/08/15/introducing-device-services.aspx" mce_href="https://blogs.msdn.com/wpdblog/archive/2009/08/15/introducing-device-services.aspx"><font size="2">Device Services</font></a><font size="2">. There are two packages provided for download: </font></p>  <p style="margin-left: 0.5in"><i><font face="Verdana">Windows 7 Portable Device Enabling Kit for MTP - Tools</font></span></i><font face="Verdana">      <br />The tools kit includes design documentation and implementation guidelines, a Windows-based reference design, development tools, and the updated MTP Device Simulator. </font></p>  <p style="margin-left: 0.5in"><i><font face="Verdana">Windows 7 Portable Device Enabling Kit for MTP - Reference Code</font></i><font face="Verdana">      <br />The reference code kit includes the core responder reference source code that is being made available under a separate Berkeley Software Distribution (BSD)–style license. </font></p>  <p><font size="2">To download both packages of the Windows 7 Portable Device Enabling Kit for MTP, go to: </font><font color="#0000ff" size="2"><a href="https://www.microsoft.com/whdc/device/wpd/MTP-DEK_Win7.mspx">https://www.microsoft.com/whdc/device/wpd/MTP-DEK_Win7.mspx</a></font></p>  <p><font size="2">You are not required to license the reference code in order to use the tools and resources provided in the tools kit.<span class="MsoCommentReference"><span style="line-height: 115%; mso-bidi-font-size: 11.0pt; mso-ansi-font-size: 11.0pt"> </span></span>This kit is free to download and use.</font></span></p>  <h2>Windows Portable Devices SDK</h2> <span style="color: black">   <p><font size="2">The WPD SDK includes the WPD Application Programming Interface (API) that is supported in Windows 7, Windows Vista, and Windows XP operating Systems. Developers will use this API to write Windows applications in C++. <span style="mso-spacerun: yes">&#160;</span>Being a COM API, the WPD API is also accessible from Managed code, so C# .Net, and Visual Basic .Net applications can use COM Interoperability to invoke the same functionality that the C++ API provides. WPD applications can: explore a device, send and receive content, and even control the device, for example, take a picture or send a text message.</font></p> </span>  <p style="vertical-align: top"><span style="color: black"><font size="2">The WPD SDK includes two sample applications for C++/COM developers. The first, WpdApiSample, is a command-line desktop application that demonstrates how you would: enumerate connected devices, explore those devices, query device-objects for properties and attributes, send and retrieve data, and so on. The second sample, WpdServicesApiSample, is a command-line desktop application that demonstrates how you would explore a Contacts service on a device that is attached to your computer. </font></span></p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="color: black"><font size="2">The WPD SDK also includes an Automation Object Model that is supported in Windows 7. Developers can use the Automation model to write web applications that accomplish tasks similar to those accomplished with the API. We provided an introduction to WPD Automation in this recent </font></span><a href="https://blogs.msdn.com/wpdblog/archive/2009/08/21/introducing-wpd-automation.aspxhttp:/blogs.msdn.com/wpdblog/archive/2009/08/21/introducing-wpd-automation.aspx" mce_href="https://blogs.msdn.com/wpdblog/archive/2009/08/21/introducing-wpd-automation.aspxhttp:/blogs.msdn.com/wpdblog/archive/2009/08/21/introducing-wpd-automation.aspx"><font color="#0080ff" size="2">post</font></a><font size="3"><span style="color: black"><font size="2">.</font> </span><span style="color: black; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"></span></font></p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2"><span style="color: black">The WPD SDK is included in the Windows SDK which can be downloaded from </span><font color="#0000ff"><a href="https://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&amp;displaylang=en">https://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&amp;displaylang=en</a></font></font><span style="color: black"></span> </p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="color: black"><font size="2">The documentation for the WPD SDK (both the API and Automation Object Model) is found on MSDN at: </font></span><a href="https://msdn.microsoft.com/en-us/library/dd388998(VS.85).aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd388998(VS.85).aspx"><font color="#0000ff"></font></a><a href="https://msdn.microsoft.com/en-us/library/dd388998(VS.85).aspx"><font size="2">https://msdn.microsoft.com/en-us/library/dd388998(VS.85).aspx</font></a></a><b><span style="line-height: 140%; font-family: &#39;Calibri&#39;,&#39;sans-serif&#39;; color: black; font-size: 12pt; mso-bidi-font-size: 11.0pt"></span></b></a></p>  <h2>Windows Portable Devices Driver Kit</h2>  <p><font size="2" face="Verdana">The WPD Driver Kit includes a Device Driver Interface (DDI) that is supported in Windows 7, Windows Vista, and Windows XP operating Systems. Developers will use this DDI to write drivers for devices that are not already supported by the MTP or Mass Storage class drivers that Microsoft distributes.</font></p>  <p><font size="2">The WPD Driver Kit includes five sample device drivers which are described in the following table. In the next </font><a href="https://blogs.msdn.com/wpdblog/archive/2009/09/18/windows-7-driver-samples.aspx"><font size="2">post</font></a><font size="2">, we covered each sample in more detail.<span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"></span> </font></p>  <p>   <table style="border-collapse: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in" class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0"><tbody>       <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">         <td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 239.4pt; padding-right: 5.4pt; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0in" valign="top" width="319">           <p style="margin: 0in 0in 10pt" class="MsoNormal"><b><font size="2">Sample Driver</font></b><b><span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"><font size="2"> </font></span></b></p>         </td>          <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 239.4pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0in" valign="top" width="319">           <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2"><b>Description</b><b><span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"> </span></b></font></p>         </td>       </tr>        <tr style="mso-yfti-irow: 1">         <td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 239.4pt; padding-right: 5.4pt; border-right: black 1pt solid; padding-top: 0in" valign="top" width="319">           <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">WpdHelloWorldDriver<span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"> </span></font></p>         </td>          <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 239.4pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="319">           <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">This is the most basic WPD driver that emulates interaction with hardware. Supports four objects: device, storage, folder, and file. This provides the scaffolding or skeleton for developing a WPD driver.<span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"> </span></font></p>         </td>       </tr>        <tr style="mso-yfti-irow: 2">         <td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 239.4pt; padding-right: 5.4pt; border-right: black 1pt solid; padding-top: 0in" valign="top" width="319">           <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">WpdBasicHardwareDriver<span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"> </span></font></p>         </td>          <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 239.4pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="319">           <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">Builds upon the WpdHelloWorldDriver and demonstrates interaction with simple hardware devices. Supports nine sensor devices: 2-axis accelerometer, 3-axis accelerometer, temperature/humidity sensor, pressure sensor, distance sensor, passive infrared sensor, compass, vibration sensor, and light sensor. These sensor devices are simple devices that are controlled by a Parallax BS2 microcontroller attached to the PC. </font></p>            <p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"><font size="2">If you plan to develop drivers that integrate sensors with Windows 7, we recommend using the </font></span><a href="https://msdn.microsoft.com/en-us/library/dd318953(VS.85).aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd318953(VS.85).aspx"><span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"><font size="2">Sensor API</font></span></a><span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"><font size="2"> and </font></span><a href="https://msdn.microsoft.com/en-us/library/cc974537.aspx" mce_href="https://msdn.microsoft.com/en-us/library/cc974537.aspx"><span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"><font size="2">Sensor Driver Model</font></span></a><span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"><font size="2">. If you need to develop drivers to integrate sensors with Windows Vista or Windows XP, WPD provides a viable solution. </font></span></p>         </td>       </tr>        <tr style="mso-yfti-irow: 3">         <td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 239.4pt; padding-right: 5.4pt; border-right: black 1pt solid; padding-top: 0in" valign="top" width="319">           <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">WpdServiceSampleDriver<span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"> </span></font></p>         </td>          <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 239.4pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="319">           <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">Demonstrates how a developer would extend the WpdHelloWorldDriver to support a simulated device with a Contacts device service.(Using this service, WPD applications can discover events, methods, and properties associated with the Contacts stored on the device. This sample emulates interaction with hardware.<span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"> </span></font></p>         </td>       </tr>        <tr style="mso-yfti-irow: 4">         <td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 239.4pt; padding-right: 5.4pt; border-right: black 1pt solid; padding-top: 0in" valign="top" width="319">           <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">WpdMultiTransportDriver<span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"> </span></font></p>         </td>          <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 239.4pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="319">           <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">Demonstrates how developers can take advantage of the Windows 7 support for multiple transports. The sample emulates interaction with hardware and demonstrates support for the following transports: IP, Bluetooth, and USB. We covered an overview of Multi-transport support in Windows 7 </font><a href="https://blogs.msdn.com/wpdblog/archive/2009/09/04/multi-transport-devices-in-windows-7.aspx" mce_href="https://blogs.msdn.com/wpdblog/archive/2009/09/04/multi-transport-devices-in-windows-7.aspx"><font size="2">here</font></a><font size="2">.<span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"> </span></font></p>         </td>       </tr>        <tr style="mso-yfti-irow: 5; mso-yfti-lastrow: yes">         <td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 239.4pt; padding-right: 5.4pt; border-right: black 1pt solid; padding-top: 0in" valign="top" width="319">           <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">WpdWudfSampleDriver<span style="mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-family: calibri"> </span></font></p>         </td>          <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 239.4pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="319">           <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">A comprehensive sample driver that demonstrates what to enable in the WPD DDI for media transfer scenarios (such as music and photos). This sample supports media synchronization with Windows Media Player, and also emulates interaction with hardware.</font></p>         </td>       </tr>     </tbody></table> </p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="color: black"><font size="2">The WPD Driver Kit is included in the Windows Driver Kit (WDK). For information about downloading the WDK, see: </font></span><font color="#0000ff" size="2"><a href="https://www.microsoft.com/whdc/devtools/wdk/WDKpkg.mspx">https://www.microsoft.com/whdc/devtools/wdk/WDKpkg.mspx</a></font></p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="color: black"><font size="2">The documentation for the WPD Driver Kit is found on MSDN at: </font></span><font color="#0000ff" size="2"><a href="https://msdn.microsoft.com/en-us/library/dd419925.aspx">https://msdn.microsoft.com/en-us/library/dd419925.aspx</a></font><span style="color: #1f497d"></span> </p>  <h2>Windows Media Device Manager SDK </h2>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">The Windows Media Device Manager (WMDM) SDK <span style="color: black">enables you to build desktop applications and components that can communicate with connected portable devices. WMDM enables your application or component to enumerate, explore, and exchange files with a device, query for metadata, and request play count information. Applications or components built on WMDM have a consistent API for communicating with a wide range of devices including Media Transfer Protocol (MTP), Mass Storage Class (MSC), RAPI, and other devices built on both the latest and previous versions of Windows Media technology. </span></font></p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"><font size="2">The Windows Media Device Manager SDK is available at: </font></span><a href="https://msdn.microsoft.com/en-us/windows/bb190309.aspx" mce_href="https://msdn.microsoft.com/en-us/windows/bb190309.aspx"><font size="2">https://msdn.microsoft.com/en-us/windows/bb190309.aspx</font></a><font size="2">. </font></p>  <h2>Microsoft Device Experience Development Kit</h2>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">The Microsoft Device Experience Development Kit provides detailed information and material that you would need to know in order to develop Device Stage™ experiences for Portable Devices. The development kit includes device development guides, planning worksheets, tutorials, and development samples that you can use when developing a Device Stage experience on Windows 7. For portable devices, Device Stage supports the industry-standard Media Transfer Protocol (MTP) 1.0 with device services that enable a new rich set of features in Windows 7. </font></p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">The development kit along with other pertinent information to build a complete Windows Device Experience is available at: </font><a href="https://www.microsoft.com/whdc/device/DeviceExperience/default.mspx" mce_href="https://www.microsoft.com/whdc/device/DeviceExperience/default.mspx"><font size="2">https://www.microsoft.com/whdc/device/DeviceExperience/default.mspx</font></a> </p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">The kit is free to download and use. </font></p>  <h2>Windows Logo Kit</h2>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">The primary use of the Windows Logo Kit (WLK) is for Windows Logo Program device certification. This kit can also be used for product development. We encourage its use during the product development cycle of hardware in order to ensure device compliance with both Windows and industry standards. The kit includes several tests designed to validate device implementation and behavior at multiple levels. There are tests for USB compliance, Media Transfer Protocol (MTP) compliance, and Windows Portable Devices (WPD) platform compliance that also cover device services validation.<span style="mso-spacerun: yes">&#160; </span></font></p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">There is a significant amount of information available about the WLK, including user guides and video tutorials. For more information about the WLK see: </font><font color="#0000ff" size="2"><a href="https://www.microsoft.com/whdc/winlogo/WLK/default.mspx">https://www.microsoft.com/whdc/winlogo/WLK/default.mspx</a></font></p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">The kit is free to download and use.</font> </p>  <h2>Other Resources</h2>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">Windows Portable Devices node on Windows Hardware Developer Central </font></p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><a href="https://www.microsoft.com/whdc/device/wpd/default.mspx" mce_href="https://www.microsoft.com/whdc/device/wpd/default.mspx"><font size="2">https://www.microsoft.com/whdc/device/wpd/default.mspx</font></a><font size="2"> </font></p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="2">Windows Portable Devices on Microsoft Developer Network </font></p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><font color="#0000ff" size="2"><a href="https://msdn.microsoft.com/en-us/library/dd388998(VS.85).aspx">https://msdn.microsoft.com/en-us/library/dd388998(VS.85).aspx</a></font><span style="mso-spacerun: yes"></span></p>  <p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="mso-spacerun: yes">&#160;</span> </p>  <p></p>  <p></p>  <p mce_keep="true"><span style="font-family: &#39;Arial&#39;,&#39;sans-serif&#39;; font-size: 10pt"><em>This posting is provided &quot;AS IS&quot; with no warranties and confers no rights.</em></span></p>]]></content:encoded>
    </item>
    <item>
      <title>Multi-Transport Devices in Windows 7</title>
      <link>https://docs.microsoft.com/archive/blogs/wpdblog/multi-transport-devices-in-windows-7</link>
      <pubDate>Fri, 04 Sep 2009 22:46:00 GMT</pubDate>
      <dc:creator><![CDATA[WPD Blogger [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/wpdblog/2009/09/04/multi-transport-devices-in-windows-7/</guid>
      <description><![CDATA[In Windows Vista, the WPD team shipped an MTP driver with support for two transports: USB and TCP/IP...]]></description>
      <content:encoded><![CDATA[<p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2">In Windows Vista, the WPD team shipped an MTP driver with support for two transports: USB and TCP/IP (typically WiFi). This expanded support also introduced an interesting problem: to Windows, the same device connected twice looks like two different devices. This is because device identity in Windows is based on information derived from the underlying transport (or bus). Why is this a problem? Consider the case of an MTP camera. Windows has a photo import application that remembers which photos have already been imported. If the user leaves photos on the camera storage after import, the next import will skip those and only pick up the new ones. However, the photo import application stores this information about imported photos based on the device identity. If the device identity changes when it connects to the same PC using a different transport, those old photos will be imported again because the OS presents this as a different device to the application. Similar problems can occur with music players or mobile phones, where two different synchronization partnerships would be created for the same device.</font></p>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2"></font></p>  <p><font size="2">One way to address this would be to have the device provide its own identity that could be retrieved and examined by each application. This approach can work, but it requires that applications that rely on device identity be modified to use this new identity instead. It also wouldn’t account for future scenarios where multiple transports might be active at the same time.</font></p>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2"></font></p>  <p><font size="2">There have been proprietary solutions, where a custom WPD driver was written to communicate with the device over any of its transports via a multi-transport-aware service. But to make this work, the hardware vendor was required to install and run a Windows service and a kernel mode bus enumerator that communicate with each other to load and unload drivers based on device presence.</font></p>  <h2 style="margin: 10pt 0in 0pt"><font color="#4f81bd" size="4" face="Cambria">The Composite Driver Solution</font></h2>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2">With Windows 7, there is now built-in support for devices with multiple transports. This support is currently limited to WPD devices, but the groundwork has been laid for other device classes in future OS releases. Now, when a multi-transport device is connected with a Windows 7 PC, it has a single identity. This is even true when multiple transports are simultaneously active, which with the added support for MTP over Bluetooth, will be a common occurrence, such as when a device already connected over Bluetooth is plugged into a USB port for charging.</font></p>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2"></font></p>  <p><font size="2">The Windows 7 solution is a combination of the approaches mentioned above. The following diagram shows the general relationship between the components involved:</font></p>  <p style="margin: 0in 0in 0pt" class="MsoNormal" mce_keep="true">&#160;</p>  <p style="margin: 0in 0in 0pt" class="MsoNormal"></p>  <p><font size="3" face="Calibri"><img style="width: 733px; height: 768px" title="Multi-Transport Diagram" alt="Multi-Transport Diagram" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/wpdblog/WindowsLiveWriter/Foo_E0C8/WpdMultiTransport_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/wpdblog/WindowsLiveWriter/Foo_E0C8/WpdMultiTransport_thumb.jpg" width="733" height="768" mce_src="https://blogs.msdn.com/blogfiles/wpdblog/WindowsLiveWriter/Foo_E0C8/WpdMultiTransport_thumb.jpg" /></font></p>  <p></p>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="3" face="Calibri"></font>&#160;</p>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2">Each transport will continue to have a driver loaded that knows how to talk to the device over that transport. But this “transport” driver won’t be seen by applications. Instead, the transport driver will inform a system service (the Composite Bus Enumerator) that a transport is available. The Composite Bus Enumerator will keep track of the transports announced for any one device, and will cause a single Composite Driver to be loaded for that device. Only the Composite Driver will be seen by applications, and it will be the single point of contact with the device. This will be true whether the device has one transport active, or many, either sequentially, or simultaneously. When the last active transport is disconnected, the Composite Bus Enumerator will remove the Composite Driver.</font></p>  <h2 style="margin: 10pt 0in 0pt"><font color="#4f81bd" size="4" face="Cambria">Composite Driver</font></h2>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2">The Composite Driver has three primary functions. One, it chooses the best underlying transport when an application opens a handle to the device (typically via IPortableDevice::Open). Two, it acts as a pass-through for WPD requests and responses between the application and the transport drivers. And three, it acts as a proxy for registering and unregistering PnP interfaces on behalf of the underlying transport drivers. This latter functionality is how the transport drivers remain hidden from applications: since no PnP interfaces are registered by the transport driver, there is no (easy) way for an application to obtain a symbolic link directly to the transport. This latter functionality was also the most complex aspect of the implementation, where multiple transport drivers interacting with the Composite Driver to dynamically register and unregister interfaces must be made to look like a single underlying device.</font></p>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2"></font></p>  <p><font size="2">How does the Composite Driver determine the “best” transport when multiple transports are simultaneously active? In Windows 7, it’s a simple comparison of reported theoretical maximum bandwidths reported by the transport driver to the Composite Driver: USB is faster than IP is faster than Bluetooth. While this is generally true, it is also theoretically possible for USB and IP to actually be slower than Bluetooth depending on conditions at the time. All are asynchronous protocols that rely on some form of bandwidth sharing.</font></p>  <h2 style="margin: 10pt 0in 0pt"><font color="#4f81bd" size="4" face="Cambria">Transport Drivers</font></h2>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2">What’s the difference between a transport driver and a regular driver? Not much. A transport driver has the added responsibility of communicating transport status with the Composite Bus Enumerator and the Composite Driver, but it is otherwise just a normal WPD driver. For instance, the Windows 7 MTP driver fulfills either duty depending on the capability of the underlying device. Much of the complexity is encapsulated in the WPD Class Extension (a helper object that manages the communication with the Composite Bus Enumerator and the Composite Driver).</font></p>  <h2 style="margin: 10pt 0in 0pt"><font color="#4f81bd" size="4" face="Cambria">Multi-Transport Capable Devices</font></h2>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2">What makes a device a multi-transport device? Simple: it just supplies a device property known as the Functional Unique ID (FUID). This is a 128-bit GUID (Globally Unique ID). For MTP devices, this property is defined by the new MTP Device Services Extension (see the </font><a href="https://www.microsoft.com/whdc/device/wpd/MTPDevServExt_Spec.mspx" mce_href="https://www.microsoft.com/whdc/device/wpd/MTPDevServExt_Spec.mspx"><font size="2">MTP Device Services Extension Specification</font></a><font size="2">). This does not mean that the device must support services. It is perfectly okay for a device to indicate support for this extension, but only implement the parts that it needs (in this case, the “Functional ID” 0xD301 device property code).</font></p>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2"></font></p>  <p><font size="2">The FUID must be unique across all devices of the same manufacturer, model and version. If two devices of the same model also had the same FUID, they would be treated as different transports of the same device. To avoid this, and to further simplify things for the device manufacturer, if the MTP driver finds an empty value for the FUID property on the device, it will automatically provision the device with a FUID generated at runtime. The only responsibility of the device manufacturer is to ensure that the FUID value is persisted across connections and available over all transports.</font></p>  <h2 style="margin: 10pt 0in 0pt"><font color="#4f81bd" size="4" face="Cambria">Writing your own Transport Driver</font></h2>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2">To help simplify the explanation so far, I’ve been describing how this works for an MTP device, where the system-provided MTP Class driver does most of the bookkeeping. However, this is supported for 3rd-party WPD drivers as well. Because most of the complexity is hidden from the driver by the WPD Class Extension, the driver just has to make a few simple adjustments to become multi-transport capable. This is covered in more detail in the documentation for the WPD Multi-Transport Sample driver, but the key changes are as follows:</font></p>  <ol>   <li>     <div style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2">In single-transport WPD drivers, the default I/O queue is sequential (a UMDF term for a queue that delivers one request at a time). The default I/O queue for a multi-transport driver must be parallel (a UMDF term for asynchronous delivery of I/O requests). WPD requests received in this queue shall be forwarded to the sequential WPD queue. All other requests are to be forwarded to a queue obtained from the WPD Class Extension.</font></div>   </li>    <li>     <div style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2">On driver initialization (in the OnPrepareHardware callback), the driver must provision the device with a FUID (if necessary), and it must use the WPD Class Extension to inform the Composite Bus Enumerator of the Manufacturer, Model, Version and FUID values for the device.</font></div>   </li> </ol>  <h2 style="margin: 10pt 0in 0pt"><font color="#4f81bd" size="4" face="Cambria">Application Development Considerations</font></h2>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2">While applications are now largely isolated from the complexities of multi-transport devices, there are some things to be aware of, and things an application can do, to provide a better experience. When one transport goes away and another arrives for the same device, the Composite Driver may remain loaded during the transition, but it will not automatically “fail over” to the new transport. There are several reasons why this was not feasible, with limitations of the current MTP protocol being chief among them. The handle associated with the departed transport will no longer function (attempts to use it will result in an ERROR_DEVICE_REMOVED response). If other transports for the device are active, the Composite Driver will re-advertise the PnP interfaces available for the new best transport. But this does not lend itself to a seamless transition if the application treats it as a device departure followed by a device arrival.</font></p>  <p style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2"></font></p>  <p><font size="2">The application can mitigate transport departures in a couple ways:</font></p>  <ol>   <li>     <div style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2">The application can close and reopen its handle at some scenario-specific interval (e.g., between object transfers when synchronizing with the device, or between user interactions with the device). This happens to be the way both Windows Media Player and the Windows Shell already behaved. This approach has the added benefit of guaranteeing that the fastest underlying transport will be used when multiple transports are simultaneously active.</font></div>   </li>    <li>     <div style="margin: 0in 0in 0pt" class="MsoNormal"><font size="2">The application can recognize that an ERROR_DEVICE_REMOVED failure might be transient and that it should try reopening the handle once before giving up on the device. Because the device has the same identity regardless of transport, the same symbolic link is used (and reused) across all transports.</font></div>   </li> </ol>  <p style="margin: 0in 0in 0pt" class="MsoNormal"></p>  <p><font size="3" face="Calibri">&#160;</font></p>  <p></p>  <p><span style="font-family: &#39;Arial&#39;,&#39;sans-serif&#39;; font-size: 10pt"><em>This posting is provided &quot;AS IS&quot; with no warranties and confers no rights.</em></span></p>]]></content:encoded>
    </item>
    <item>
      <title>MTP Over Various Transports</title>
      <link>https://docs.microsoft.com/archive/blogs/wpdblog/mtp-over-various-transports</link>
      <pubDate>Sat, 29 Aug 2009 01:52:00 GMT</pubDate>
      <dc:creator><![CDATA[WPD Blogger [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/wpdblog/2009/08/29/mtp-over-various-transports/</guid>
      <description><![CDATA[Introduction                 The Media Transfer Protocol (MTP) was originally created as an...]]></description>
      <content:encoded><![CDATA[<b style="mso-bidi-font-weight: normal"><font size="3">     <h3>Introduction</h3>      <p></p>   </font></b>  <p></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2"><span style="mso-bidi-font-style: italic"></span></font></p>  <p><font size="2"><span style="mso-bidi-font-style: italic"></span></font></p>  <p><font size="2"><span style="mso-bidi-font-style: italic">The Media Transfer Protocol (MTP) was originally created as an extension to the Picture Transfer Protocol but today it also supports media transfer, Device Services, command &amp; control, and many other scenarios. MTP supports three transports: USB, IP, and Bluetooth.</span> </font></p> <font size="2"></font>  <p><font size="2">One of most common drivers that WPD applications will interact with is the Media Transfer Protocol (MTP) driver.<span style="mso-spacerun: yes">&#160; </span>MTP was introduced in Windows XP with an inbox user mode driver allowing for effortless device installation and connectivity.<span style="mso-spacerun: yes">&#160; </span>MTP is standardized through the USB Implementer’s Forum (<font color="#0000ff"><a href="https://www.usb.org">www.usb.org</a></font>) and also features Windows-specific extensions. </font></p> <font size="2"></font><font size="2"></font><font size="2"></font><font size="2"></font>  <p><font size="3"><font size="2">We introduced a MTP driver for USB in Windows XP.<span style="mso-spacerun: yes">&#160; </span>In Windows Vista, we added support for MTP over TCP/IP for devices that use WiFi and LAN connections.<span style="mso-spacerun: yes">&#160; </span>In Windows 7, we continue the parade of MTP support with the introduction of Bluetooth.</font> </font></p>  <p></p>  <p></p>  <p></p>  <p></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"></p> <b style="mso-bidi-font-weight: normal"><font size="3">     <h3>3 transports, one protocol</h3>      <p></p>   </font></b>  <p></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="3"><font size="2">MTP includes a protocol definition and several transport definitions.<span style="mso-spacerun: yes">&#160; </span>As devices and PCs pick and choose which connectivity transports they support, device &amp; application developers can be assured that the MTP protocol and WPD API will be consistent.<span style="mso-spacerun: yes">&#160;&#160; </span>Three-transport support gives device manufacturers flexibility to choose wired or wireless, high or low power, faster or slower transfer speed, etc.<span style="mso-spacerun: yes">&#160; </span>The MTP driver is also the first multi-transport driver in Windows, which means that a device manufacturer can feel free to implement all three and Windows will choose the best.<span style="mso-spacerun: yes">&#160; </span>We’ll talk about that more in our next entry </font><a href="https://blogs.msdn.com/wpdblog/archive/2009/09/04/multi-transport-devices-in-windows-7.aspx"><font size="2">Multi-transport Devices in Windows 7</font></a><font size="2">.</font> </font></p> <i style="mso-bidi-font-style: normal"><font size="3">     <h4>USB</h4>      <p></p>   </font></i>  <p></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">Our first MTP transport driver is also the fastest and most powerful way to connect an MTP-enabled device.<span style="mso-spacerun: yes">&#160; </span>Windows XP through Windows 7 support USB 1.1 or higher.<span style="mso-spacerun: yes">&#160; </span>The binding of MTP to USB is described in the MTP specification itself (<font color="#0000ff"><a href="https://www.usb.org/developers/devclass_docs/MTP_1.0.zip">https://www.usb.org/developers/devclass_docs/MTP_1.0.zip</a></font>)<span style="mso-spacerun: yes">&#160; </span>and in the Still Imaging Capture Device Definition specification (<font color="#0000ff"><a href="https://www.usb.org/developers/devclass_docs/usb_still_img10.zip">https://www.usb.org/developers/devclass_docs/usb_still_img10.zip</a></font>).<span style="mso-spacerun: yes">&#160; </span>Windows XP uses the Microsoft OS Descriptor to identify MTP devices; Windows Vista and Windows 7 can identify MTP devices by either the OS Descriptor or the USB Still Image Class Code (Class 6, Subclass 1, Protocol 1).<span style="mso-spacerun: yes">&#160; </span>Much of this is detailed in the Windows Portable Device Enabling Kit. </font></p>  <p><font size="2"></font></p>  <p><font size="2"></font></p>  <p><font size="2"></font></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2"></font></p>  <p><font size="2">In Windows 7, we also enabled the USB Selective Suspend for the MTP driver, although this option is not enabled by default to preserve maximum ecosystem compatibility. </font></p>  <p><font size="2"></font></p>  <p><font size="2"></font></p>  <p><font size="2"></font></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2"></font></p>  <p><font size="3"><font size="2">USB is great for fast file transfer, media synchronization, and charging the device while you’re using it.</font> </font></p>  <p></p>  <p></p>  <p></p>  <p></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"></p> <i style="mso-bidi-font-style: normal"><font size="3">     <h4>IP </h4>      <p></p>   </font></i>  <p></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">In Windows Vista, we implemented MTP over TCP/IP to enable WiFi and networked devices to interact with WPD applications.<span style="mso-spacerun: yes">&#160; </span>We used the PTP/IP binding (</font><a href="https://www.cipa.jp/ptp-ip/index_e.html" mce_href="https://www.cipa.jp/ptp-ip/index_e.html"><font size="2">https://www.cipa.jp/ptp-ip/index_e.html</font></a><font size="2">), then used UPnP for pairing and discovery.<span style="mso-spacerun: yes">&#160; </span>When devices report their presence on a network via UPnP after the initial pairing, Windows will automatically connect and make the device available to the user. </font></p>  <p><font size="2"></font></p>  <p><font size="2"></font></p>  <p><font size="2"></font></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2"></font></p>  <p><font size="3"><font size="2">MTP/IP is ideal for devices with WiFi that can be connected and synchronized anywhere in the home.</font> </font></p>  <p></p>  <p></p>  <p></p>  <p></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"></p> <i style="mso-bidi-font-style: normal"><font size="3">     <h4>Bluetooth</h4>      <p></p>   </font></i>  <p></p>  <p><font size="2">In Windows 7, we introduced Bluetooth as the third transport for MTP. We implemented MTP over the L2CAP protocol for fast, efficient, and secure connections. The specification is available in the Windows Portable Device Enabling Kit. PC users can switch the connection on and off through the Devices &amp; Printers folder, or devices themselves can initiate and terminate connections to the PC. </font></p>  <p><font size="2"></font></p>  <p><font size="2"></font></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2"></font></p>  <p><font size="2">We also implemented an &quot;auto connect&quot; feature in which Windows attempts to connect to your device every few minutes to maintain a low power connection for automatic synchronization and status updates.<span style="mso-spacerun: yes">&#160; </span>When you are holding the device near your PC, you’re connected; when you walk away, the connection breaks and waits silently to reconnect when you return and your device gets back into Bluetooth range. </font></p>  <p><font size="2"></font></p>  <p><font size="2"></font></p>  <p><font size="2"></font></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2"></font></p>  <p><font size="2">Applications can use the IPortableDeviceConnect<span style="mso-spacerun: yes">&#160;</span>interface to issue connect/disconnect requests to an MTP/Bluetooth device.<span style="mso-spacerun: yes">&#160; </span>When a connection request is made, the MTP/Bluetooth link is established, the WPD MTP driver stack will load, and the device becomes visible to WPD applications to connect to using the WPD API. </font></p>  <p><font size="2"></font></p>  <p><font size="2"></font></p>  <p><font size="2"></font></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2"></font></p>  <p><font size="2">Windows requires Bluetooth 1.2 or higher with the Microsoft Bluetooth stack installed.<span style="mso-spacerun: yes">&#160; </span>For maximum security, Windows also requires that the device is paired securely with a pin code. </font></p>  <p><font size="2"></font></p>  <p><font size="2"></font></p>  <p><font size="2"></font></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2"></font></p>  <p><font size="3"><font size="2">MTP/BT is great for low power, low speed scenarios like synchronizing PIM data or a quick file transfer.</font> </font></p>  <p></p> <b style="mso-bidi-font-weight: normal"><font size="3">     <h3>Operating System Support</h3>      <p></p>   </font></b>  <p></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"></p>  <p><font size="3"><font size="2">The MTP driver is present in Windows XP with Windows Media Player 10 or higher installed, Windows Vista, and Windows 7.</font> </font></p>  <p></p>  <p></p>  <p></p>  <p></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"></p> <i style="mso-bidi-font-style: normal"><font size="3">     <h4>MTP Driver Support by Operating System</h4>      <p></p>   </font></i>  <p></p>  <table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse; border-top: medium none; border-right: medium none; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0"><tbody>     <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">       <td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><strong><font size="2">Windows Version </font></strong></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><strong><font size="2">USB 1.1 or higher </font></strong></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><strong><font size="2">IP </font></strong></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><strong><font size="2">Bluetooth 1.2 or higher </font></strong></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>     </tr>      <tr style="mso-yfti-irow: 1">       <td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">Windows XP </font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">Yes, with Windows Media Player 10 or higher </font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">No </font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">No </font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>     </tr>      <tr style="mso-yfti-irow: 2">       <td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">Windows Vista </font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">Yes </font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">Yes </font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">No </font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>     </tr>      <tr style="mso-yfti-irow: 3; mso-yfti-lastrow: yes">       <td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">Windows Vista + <a href="https://blogs.msdn.com/wpdblog/archive/2009/10/27/wpd-platform-update-for-windows-vista.aspx">Platform Update for Window Vista</a></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">Yes </font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">Yes </font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">Yes</font></p>       </td>     </tr>      <tr style="mso-yfti-irow: 3; mso-yfti-lastrow: yes">       <td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">Windows 7 </font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">Yes </font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="2">Yes </font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>          <p><font size="2"></font></p>       </td>        <td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 119.7pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="200">         <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"><font size="3"><font size="2">Yes </font></font></p>       </td>     </tr>   </tbody></table>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"></p>  <p><font size="3">&#160;</font></p>  <p></p>  <p style="margin: 0in 0in 0pt" class="MsoNoSpacing"></p>  <p>&#160;</p>  <p></p>  <p></p>  <p style="line-height: normal; margin: 0in 0in 10pt" class="MsoNormal"><i><span style="font-family: &#39;Arial&#39;,&#39;sans-serif&#39;; font-size: 10pt">This posting is provided &quot;AS IS&quot; with no warranties and confers no rights.</span></i></p>]]></content:encoded>
    </item>
  </channel>
</rss>