Поделиться через


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_COMPORTs, но требуют дополнительных драйверов для конкретных поставщиков.

Последовательные порты, помеченные как внутренние для компьютера (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значение .
<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_RestrictedGUID_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 .

См. также раздел