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;
}
Мне удалось заставить шкалу работать, взгляните на ответ Майка здесь
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