Доступ к USB-порту в Windows 10 IoT Core - PullRequest
0 голосов
/ 27 марта 2019

Я использую модуль IoT Edge в Windows 10 IoT Core на Minnowboard Turbot. Этот модуль должен читать поток из порта USB. Мы используем System.Io.Ports (стандартная версия .net, совместимая с нашим кодом .net core 2.1).

Я видел эту работу на ноутбуке с Windows 10 pro, но он не работает в Windows IoT Core. Я могу найти некоторые источники, которые утверждают, что System.Io.Ports не поддерживается в IoT Core из-за схемы именования для портов USB (которая должна называться COM {x} для правильной работы SerialPort. Файл Readme, входящий в пример SerialIOPrts) из Windows IoT Samples (https://go.microsoft.com/fwlink/?linkid=860459) говорит

"В этом образце используются стандартные API .NET Core System.IO.Ports для доступа к последовательным устройствам. Эти API работают только с последовательными устройствами, имеющими имя COM {x}. Следовательно, этот подход актуален для Windows 10 IoT Enterprise, но не Windows 10 IoT Core. "

Кто-нибудь нашел способ обойти это? Я, вероятно, смогу заставить его работать на Windows 10 IoT Enterprise, но я действительно хотел бы доказать, что мы можем запустить этот модуль на минимальном оборудовании / операционной системе.

1 Ответ

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

Используя System.IO.Ports в Windows IoT Core, вы можете обратиться к « SerialWin32 Azure IoT Edge module ».( Примечание: Эти инструкции будут работать на ПК под управлением Windows 10 IoT Enterprise или Windows IoT Core build 17763. В настоящее время поддерживается только архитектура x64 . Arm32 появится в будущем.)

(Не для пограничного модуля IoT Azure) Чтобы получить доступ к последовательному устройству без имени порта (COMx) в Windows IoT Core, вы можете использовать Win32 API CreateFile .Существует шаблон проекта для создания консольного приложения Win32 для Windows IoT Core, с которым вы можете начать.

enter image description here

Здесь я создаю пример, используя идентификатор устройства дляоткройте последовательное устройство и напишите и прочитайте:

#include <windows.h>
#include <iostream>
using namespace std;


int main()
{
    DWORD errCode = 0;
    LPCWSTR pDeviceId = L"\\\\?\\FTDIBUS#VID_0403+PID_6001+A50285BIA#0000#{86e0d1e0-8089-11d0-9ce4-08003e301f73}";

    HANDLE serialDeviceHdl = CreateFile(pDeviceId, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    if (!serialDeviceHdl)
    {
        errCode = GetLastError();
        cout << "Open device failed. Error code: " << errCode << endl;
        return 0;
    }

    DWORD writenSize = 0;
    BOOL result = WriteFile(serialDeviceHdl, "hello", 5, &writenSize, NULL);
    if (FALSE == result)
    {
        errCode = GetLastError();
        cout << "Write to device failed. Error code: " << errCode << endl;
    }

    CHAR readBuf[5];
    DWORD readSize = 0;
    result = ReadFile(serialDeviceHdl, readBuf, 5, &readSize, NULL);
    if (FALSE == result)
    {
        errCode = GetLastError();
        cout << "Read from device failed. Error code: " << errCode << endl;
    }
}

Идентификатор устройства, который вы можете найти, например, по официальному примеру " SerialUART " - " DeviceInformation.Id ".

Как развернуть и отладить консоль win32 C ++ в Windows IoT Core, вы можете обратиться к здесь .

...