Windows.Devices.SerialCommunication Пространство имен
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Пространство Windows.Devices.SerialCommunication
имен определяет среда выполнения Windows классов, которые приложение UWP может использовать для взаимодействия с устройством, предоставляющим последовательный порт или некоторую абстракцию последовательного порта. Классы предоставляют функциональные возможности для обнаружения таких последовательных устройств, чтения и записи данных, а также управления последовательных свойств для управления потоком, таких как настройка скорости передачи данных, состояния сигнала.
Поддержка устройств
Последовательное устройство предоставляется системе с помощью свойства DEVPKEY_Device_ClassGuid
= {4d36e978-e325-11ce-bfc1-08002be10318}
и создает DeviceInterface с = DEVPKEY_DeviceInterface_ClassGuid
{86e0d1e0-8089-11d0-9ce4-08003e301f73}
помощью ().GUID_DEVINTERFACE_COMPORT
Windows изначально поддерживает порты, предоставляемые адаптерами serial-to-USB, которые относятся к классу устройств USB-CDC с помощью драйвера папки "Входящие usbser.sys
" (например, используемых в Arduino Uno R3s). Идентификаторы, совместимые с USB-CDC:
USB\Class_02&SubClass_02&Prot_01
USB\Class_02&SubClass_02
Поддерживаются и другие адаптеры serial-to-USB (например, FTDI/Prolific/Silicon-Labs), которые предоставляют GUID_DEVINTERFACE_COMPORT
s, но требуют дополнительных драйверов для конкретных поставщиков.
Последовательные порты, помеченные как внутренние для компьютера (DEVPKEY_Device_InLocalMachineContainer == TRUE
), недоступны , если драйвер поставщика не пометит их как неограниченный (DEVPKEY_DeviceInterface_Restricted == TRUE
). Поэтому устройства подключаются через большинство карт расширения COM-портов PCI недоступны .
Недоступные последовательные порты по-прежнему могут быть перечислены DeviceInformation.FindAllAsync(), но не могут быть открыты serialDevice.FromIdAsync(). При открытии такого устройства создается исключение или возвращается значение NULL. Приложения должны обрабатывать этот случай, фильтруя такие последовательные порты из представления пользователя, чтобы пользователь не мог взаимодействовать с таким неподдерживаемым последовательным портом.
Возможно, коллекция DeviceInformation , возвращаемая DeviceInformation.FindAllAsync(), может иметь последовательное устройство, для свойства DeviceInformation.Name которого задано имя компьютера. Это по умолчанию и может произойти при перечислении подключенного последовательного порта. Приложения должны обрабатывать этот случай следующим образом:
- Фильтрация таких последовательных портов в представлении пользователя, чтобы пользователь вообще не мог взаимодействовать с таким неподдерживаемым последовательным портом.
- Если приложение решит разрешить пользователю взаимодействовать с таким последовательным портом, обратите внимание, что при вызове функции DeviceAccessInformation.CreateFromId() возникает исключение с сообщением: "Системе не удается найти указанный файл. (Исключение из HRESULT: 0x80070002)" будет выдано. Приложение должно обработать такое исключение и сообщить пользователю, что порт не поддерживается.
Политику доступности и возможностей всегда можно переопределить, написав пользовательский драйвер и соответствующее приложение поддержки оборудования.
Возможности последовательных устройств
Приложение UWP должно включать определенные возможности устройства в манифест пакета приложения. Возможности определяют устройство и его назначение. Ниже приведены обязательные элементы в иерархическом порядке:
С Windows 10, версия 1809 (обновление за октябрь 2018 г.)
С 1809 года vidpid и тип функции больше не нужно указывать и будут игнорироваться в этих системах. Если нацеливание на системы до 1809, см. ниже.
- <DeviceCapability>. Атрибут Name должен иметь значение
serialcommunication
.
<DeviceCapability Name="serialcommunication"/>
До Windows 10, версия 1809 (обновление за октябрь 2018 г.)
<DeviceCapability>. Атрибут Name должен иметь значение
serialcommunication
.<Устройство>. Атрибут Id должен указывать идентификатор устройства. Если вы используете адаптер serial-to-USB, идентификатор должен указывать идентификатор поставщика или продукта или может быть "любым", чтобы разрешить доступ к любому устройству, соответствующему типу функции.
- <Функция>. Атрибут Type указывает функцию устройства. Для последовательных устройств это должно быть
serialPort
значение .
- <Функция>. Атрибут Type указывает функцию устройства. Для последовательных устройств это должно быть
<DeviceCapability Name="serialcommunication">
<Device Id="vidpid:xxxx xxxx">
<Function Type="name:serialPort"/>
</Device>
</DeviceCapability>
Пример возможности последовательного устройства
Ниже приведен пример определения возможностей последовательных устройств. Это позволяет приложению получить доступ к последовательному порту через адаптер serial-to-USB.
<DeviceCapability Name="serialcommunication">
<Device Id="vidpid:045E 0610">
<Function Type="name:serialPort"/>
</Device>
</DeviceCapability>
Устранение неполадок
- Убедитесь, что последовательная возможность (
serialcommunication
) находится в манифесте приложения. - Убедитесь, что пользователь предоставил приложению разрешение на использование последовательных устройств.
- Внутренние устройства компьютера (
DEVPKEY_Device_InLocalMachineContainer == TRUE
) обычно недоступны . (например, карты расширения com-портов PCI)- Если для свойства
DEVPKEY_DeviceInterface_Restricted
GUID_DEVINTERFACE_COMPORT
интерфейса устройства не задано значениеFALSE
, внутренние устройства недоступны. Некоторые драйверы, особенно для номеров SKU Интернета вещей, могут задать для этого свойства значениеFALSE
. - При доступе к последовательному контроллеру на
SerCx
основе илиSerCx2
последующем запуске Windows 10 1903 (обновление за май 2019 г.) устройство может согласиться на прямой доступ из пользовательского режима или путем включенияRhProxy
.
- Если для свойства
- Эти ограничения можно обойти при создании пользовательского устройства, работая с разработчиком драйвера и разработчиком для создания приложения поддержки оборудования.
Классы
ErrorReceivedEventArgs |
Представляет объект , передаваемый в качестве параметра обработчику событий, который вызывается при возникновении ошибки на последовательном порту. |
PinChangedEventArgs |
Представляет объект , передаваемый в качестве параметра обработчику событий, который вызывается при изменении состояния сигнальной линии на последовательном порту. |
SerialDevice |
Представляет последовательный порт. Объект предоставляет методы и свойства, которые приложение может использовать для поиска последовательных портов в системе и взаимодействия с ними. |
Перечисления
SerialError |
Определяет значения для условий ошибок, которые могут возникнуть на последовательном порту. |
SerialHandshake |
Определяет значения для протоколов управления потоками оборудования и программного обеспечения, используемых в последовательном обмене данными. Значения используются свойством Handshake объекта SerialDevice . |
SerialParity |
Определяет значения бита четности для последовательной передачи данных. Значения используются свойством Parity объекта SerialDevice . |
SerialPinChange |
Определяет значения для типов изменений состояния сигнала на последовательном порту. |
SerialStopBitCount |
Определяет значения, указывающие количество стоп-битов, используемых в передаче. Значения используются свойством StopBits объекта SerialDevice . |