Как я могу остановить Windows IOT от взаимодействия с USB HID сенсорным экраном? - PullRequest
0 голосов
/ 08 февраля 2020

Я создаю приложение в UWP для Raspberry Pi 3B с этим сенсорным экраном https://www.waveshare.com/wiki/5inch_HDMI_LCD_ (B)

Сенсорная панель на экране выстроена неправильно, поэтому необходимо откалибровать его. Но для этого мне нужен доступ к необработанным координатным данным из него. Я попытался использовать событие Tapped, но ОС регистрирует эти координаты (плохие) с сенсорного экрана и обрабатывает их, поэтому в основном нажимается неправильная кнопка.

Я пытался подключиться к сенсорному экрану с Windows .Devices.HumanInterfaceDevice.HidDevice:

private HidDevice _device;
    public HidDevice device
    {
        get
        {
            return _device;
        }
        set
        {
            _device = value;
        }
    }
    public MainPage()
    {
        this.InitializeComponent();
        EnumerateDevices(usgPage, vend, prodId);
    }
public async Task EnumerateDevices(ushort usgPage, ushort vend, ushort prodId, ushort usgId)
    {
         ushort usagePage = usgPage;
         ushort vendor = vend;
         ushort productId = prodId;
         ushort usageId = usgId;

        var selector = HidDevice.GetDeviceSelector(usagePage, usageId, vendor, productId);

        DeviceInformationCollection devices;
        devices = await DeviceInformation.FindAllAsync(selector);
        var a = devices[0].Id;
        try
        {
            devices = await DeviceInformation.FindAllAsync(selector);
        }
        catch
        {
            return;
        }
        device = await HidDevice.FromIdAsync(a, Windows.Storage.FileAccessMode.ReadWrite);
    }

Манифест

<Capabilities>
<DeviceCapability Name="humaninterfacedevice">
      <Device Id="vidpid:0EEF 0005">
        <Function Type="usage:000D 0004" />
      </Device>
</Capabilities>

Список устройств

Но устройство всегда null , хотя devices содержит мой сенсорный экран. Я думаю, это потому, что ОС взаимодействует с сенсорным экраном, и в результате я не могу с ним взаимодействовать.

Я попытался отключить PnP с помощью

Get-PnpDevice | Where-Object {$_.FriendlyName -like '*touch screen*'} | Disable-PnpDevice -Confirm:$false

из powershell, что отключило сенсорный экран полностью, и я не мог видеть его даже в списке устройств .

Поэтому я попытался изменить реестр с помощью

reg add HKLM\Software\Microsoft\Wisp\Touch -v TouchGate -f -d 0 -t REG_DWORD

, но ОС все еще взаимодействовала с сенсорный экран, и это не имело никакого эффекта вообще. Кроме того, я проверил, действительно ли значение в реестре изменилось, и оно изменилось.

Моя идея состоит в том, что если бы можно было как-то сказать ОС игнорировать ввод с сенсорного экрана, но не отключать устройство HID полностью, чтобы я мог подключиться к нему из моего приложения UWP и обрабатывать координаты самостоятельно (например, вычисляя правильную позицию для указателя), а затем я бы вводил с помощью Windows .UI.Input.Preview.Injection.InputInjector точку с правильными координатами.

...