First published on MSDN on Jul 29, 2015
Authored by George Roussos [MSFT]
The Serial Communication protocol is everywhere; it is broadly available, easy to learn, and low cost. It is used across many different transports: typically over USB, in cases over Bluetooth and even over TCP/IP. Many people are familiar with COM ports and programs that read data from and/or write data to them. Today we find Serial Communications in both 30 year old hardware like natural gas meters and new products like many 3D Printers or those in the prototyping stage based upon Arduino boards.
We listened to customer feedback on Serial while planning Windows 10 and acted upon two high level points:
This blog entry focuses on enhancements for USB connected Serial devices in Windows 10, and how customers can provide additional feedback on them which we can efficiently act upon.
1. Improved Serial over USB driver support in Windows 10
Earlier versions of Windows contained a driver for USB connected serial devices: usbser.sys . However the driver did not include a compatible ID match in an INF. The driver had to be included using modem INFs which was not standard.
In Windows 10, we added inbox support for USB CDC Abstract Control Model (ACM) compliant hardware. Usbser.sys is now installed as a compatible ID match for USB CDC compliant hardware, without requiring a 3 rd party driver or inclusion via modem INFs.
Now devices that report these compatible IDs:
… including popular prototyping boards like Arduinos – just work with our built-in driver.
Also usbser.sys has been completely re-written in WDF, improving its overall reliability as well incorporating new features for power management i.e. USB Selective Suspend. See USB Serial driver on MSDN for details.
2. A Windows Runtime API for communication with Serial devices
Windows 10 includes the Windows.Devices.SerialCommunication universal API designed for these three scenarios:
This API does not include support for accessing UARTs/COM ports inside Phones/Tablets/PCs; Windows 10 focused on above 3 scenarios.
//Build/ 2015 USB Accessories including SerialCommunications session introduces this API and walks thru the design and usage of it.
Windows 10 SDK includes two Universal SDK samples illustrating this API:
How to Provide Feedback
We listen and act upon customer feedback; all of above are all results of prior feedback. If you have encountered a problem with functionality described in this blog entry, or want additional functionality, please see below.
Our team listens to two feedback channels to provide feedback: Forums and the Feedback App (see Feedback App post for additional information) are available to everyone. Please follow below guidance on where to provide your feedback and what to include to help us efficiently act upon your feedback.
Forums
Please create a new post on the Windows Insider Program forum under the ‘Devices and Drivers’ Topic.
Feedback App
Please file a bug under:
Category: Hardware, Devices, and Drivers
Sub-Category: USB devices and connectivity
What information to include
To help us efficiently act upon any bugs for feedback you have, please include relevant information below.
Problems with built-in USBSer.sys
USBSerial driver for USB CDC compliant devices
Problems with Windows.Devices.SerialCommunication Universal API
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
How to capture Hardware IDs
Example: Arduino Uno R3
Hardware IDs
USB\VID_2341&PID_0043&REV_0001
USB\VID_2341&PID_0043
Compatible IDs
USB\Class_02&SubClass_02&Prot_01
USB\Class_02&SubClass_02
USB\Class_02
Tracing
Please enter the copy and paste below commands into an Administrative command window, reproduce the problem, and attach the resultant trace files into a bug:
Before Repro
logman create trace -n Serial_WPP -o %SystemRoot%\Tracing\Serial_WPP.etl -nb 128 640 -bs 128
logman update trace -n Serial_WPP -p {7F82DC23-235A-4CCA-868C-59531F258662} 0x7FFFFFFF 0xFF
logman update trace -n Serial_WPP -p {8FBF685A-DCE5-44C2-B126-5E90176993A7} 0x7FFFFFFF 0xFF
logman update trace -n Serial_WPP -p {0ae46f43-b144-4056-9195-470054009d6c} 0x7FFFFFFF 0xFF
logman start -n Serial_WPP
<Reproduce the problem at this point (do not copy and paste this)>
AfterRepro
logman stop -n Serial_WPP
logman delete -n Serial_WPP
md %systemroot%\Tracing\Logs
move /Y %SystemRoot%\Tracing\Serial_WPP_000001.etl %SystemRoot%\Tracing\Logs\Serial_WPP.etl
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.