DeviceInformation.FindAllAsync не находит такое же количество COM-портов - PullRequest
0 голосов
/ 11 марта 2019

У меня есть приложение Xamarin UWP, которое должно прослушивать устройство через COM-порт.Конечная цель этого заключается в том, чтобы заказчик использовал поверхности Microsoft и устройства GPS и позволил своим сотрудникам бродить и снимать показания GPS.

Я пытаюсь перечислить доступные порты так, чтобы пользователь мог выбрать, какой из них ихGPS-устройство вещает на.Код, который я использую, выглядит следующим образом:

    string serialDeviceType = RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort);
    DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(serialDeviceType);

На первой поверхности, с которой я работал, коллекция 'devices' получила 4 члена: «Com1», «Com2», «Com3» и «Serial Port».", и я в конечном итоге смог заставить все работать правильно.Однако у меня есть другое устройство, и на этом я получаю только «Последовательный порт» в коллекции «устройств» с одним и тем же кодом.

Устройства, которые я слушал, были разными в обоих случаях.В первом я слушал Trimble R1, во втором - XGPS160, но я не ожидал, что это повлияет на то, сколько DeviceInformation вернется из этого вызова, что больше похоже на разницу между двумя поверхностями.

Кто-нибудь знает, почему одна Поверхность будет возвращать Com1-Com3 из вызова FindAllAsync, а другая - нет?То есть, если бы я хотел сознательно создать этот результат, как бы я это сделал?

- Спасибо, Уолтер

1 Ответ

0 голосов
/ 12 марта 2019

По умолчанию драйвер функции Serial создает имя символической ссылки для последовательного порта и регистрирует интерфейс устройства GUID_DEVINTERFACE_COMPORT для порта. По определению, последовательный порт является COM-портом, только если с ним связан интерфейс устройства COM-порта.

Для последовательного устройства Plug and Play внешнее именование контролируется значением ввода SerialSkipExternalNaming под аппаратным ключом устройства. Если значение записи SerialSkipExternalNaming не существует или его значение равно нулю, Serial создает интерфейс устройства COM-порта; в противном случае Serial не создает интерфейс COM-порта. Последовательный не поддерживает это значение записи для устаревшего COM-порта и всегда создает интерфейс устройства COM-порта для устаревшего COM-порта.

Тогда у другого компьютера могут быть разные имена для последовательного порта. Вот документ .

...