USB HID зависает на Read () в c#



Я пытаюсь подключиться к цифровой шкале USB, код действительно подключается к шкале, когда scale.IsConnected сбывается, но зависает на scale.Read(250) , где 250 должно быть таймаутом в миллисекундах, но он никогда не возвращается из чтения



Я использую код из этого потока, за исключением одного изменения, которое было связано с новой версией библиотеки HID Майка О Брайена



public HidDevice[] GetDevices ()
{
HidDevice[] hidDeviceList;


// Metler Toledo
hidDeviceList = HidDevices.Enumerate(0x0eb8).ToArray();
if (hidDeviceList.Length > 0)
return hidDeviceList;

return hidDeviceList;
}




Мне удалось заставить шкалу работать, взгляните на ответ Майка здесь

620   2  

2 ответов:

Мне удалось заставить масштаб работать, в моем обратном вызове, который запускается, когда масштаб возвращает данные, я делал Read, который является блокирующим вызовом. Итак, тупик был создан, нужно было только использовать ReadReport или Read Взгляните на пример Майка, ниже которого он разместил здесь.

using System;
using System.Linq;
using System.Text;
using HidLibrary;

namespace MagtekCardReader
{
    class Program
    {
        private const int VendorId = 0x0801;
        private const int ProductId = 0x0002;

        private static HidDevice _device;

        static void Main()
        {
            _device = HidDevices.Enumerate(VendorId, ProductId).FirstOrDefault();

            if (_device != null)
            {
                _device.OpenDevice();

                _device.Inserted += DeviceAttachedHandler;
                _device.Removed += DeviceRemovedHandler;

                _device.MonitorDeviceEvents = true;

                _device.ReadReport(OnReport);

                Console.WriteLine("Reader found, press any key to exit.");
                Console.ReadKey();

                _device.CloseDevice();
            }
            else
            {
                Console.WriteLine("Could not find reader.");
                Console.ReadKey();
            }
        }

        private static void OnReport(HidReport report)
        {
            if (!_device.IsConnected) { return; }

            var cardData = new Data(report.Data);

            Console.WriteLine(!cardData.Error ? Encoding.ASCII.GetString(cardData.CardData) : cardData.ErrorMessage);

            _device.ReadReport(OnReport);
        }

        private static void DeviceAttachedHandler()
        {
            Console.WriteLine("Device attached.");
            _device.ReadReport(OnReport);
        }

        private static void DeviceRemovedHandler()
        {
            Console.WriteLine("Device removed.");
        }
    }
}

Я не могу помочь вам с вашей проблемой, но некоторое время назад мне пришлось интегрировать ножной переключатель в приложение, и я нашел эту библиотеку USB HID C#, которая отлично работала:

Http://www.codeproject.com/Articles/18099/A-USB-HID-Component-for-C

Может быть, вам стоит попробовать, потому что это очень просто интегрировать.

Дэвид

Comments

    Ничего не найдено.