Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > LibUsbDotNet Не находит девайс.


Автор: klein 30.11.2010, 18:36
Использую  LibUsbDotNet_Bin.2.2.8 dll библиотеку. Код пишу по примерам http://libusbdotnet.sourceforge.net/V2/Index.html 
Никак не могу найти устройство. Vid/Pid беру из диспетчера устройств из строки
Код
HID\VID_09DA&PID_000A\7&177F3D70&0&0000

Соответственно Vid = 09DA  Pid = 000A в хексе.
Код

private void button1_Click(object sender, EventArgs e)
        {
            FindUsbDeviceByVidPid(comboBoxVID.Text, comboBoxPID.Text);
        }
        void FindUsbDeviceByVidPid(string VidStr, string PidStr)
        {
            int VidInt = Int32.Parse(VidStr, System.Globalization.NumberStyles.AllowHexSpecifier);
            int PidInt = Int32.Parse(PidStr, System.Globalization.NumberStyles.AllowHexSpecifier);
            UsbDevice usbdevice;
            UsbDeviceFinder MyUsbFinder = new UsbDeviceFinder(VidInt, PidInt);
            usbdevice = UsbDevice.OpenUsbDevice(MyUsbFinder);
            if (usbdevice == null) textBox1.AppendText("\r\n Device Not Found !");
            if (usbdevice != null) textBox1.AppendText("\r\n Device Is Found !");          
        }
 
Результат постоянно - Device Not Found ! Перепробовал кучу комбинаций и на двох машинах.
Кто может подскажите пожалуйста где и что я делаю неправильно.

Автор: i2m 30.11.2010, 18:52
Код

 public static UsbDeviceFinder MyUsbFinder = new UsbDeviceFinder(1234, 1);


Не нужен тут HEX, используется десятичная система счисления.

Код

            int VidInt = Convert.ToInt32(VidStr, 16);
            int PidInt = Convert.ToInt32(PidInt, 16);

Автор: i2m 30.11.2010, 19:57
PS скачал библиотеку, проверил действительно не работает, девайс не находится.
PS разобрался, нужно добавить девайс в фильтр libusb-win32

Код

using System;
using System.Windows.Forms;
using LibUsbDotNet;
using LibUsbDotNet.Main;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FindUsbDeviceByVidPid("058F", "6387");
        }

        void FindUsbDeviceByVidPid(string vidStr, string pidStr)
        {
            var vidInt = Convert.ToInt32(vidStr, 16);
            var pidInt = Convert.ToInt32(pidStr, 16);

            var myUsbFinder = new UsbDeviceFinder(vidInt, pidInt);
            var usbdevice = UsbDevice.OpenUsbDevice(myUsbFinder);

            if (usbdevice != null)
            {
                MessageBox.Show(string.Format("Manufacturer: {0}\r\nProduct: {1}\r\nSerial: {2}",
                    usbdevice.Info.ManufacturerString, usbdevice.Info.ProductString, usbdevice.Info.SerialString));
            }
            else
            {
                MessageBox.Show("Device Not Found!");
            }
        }
    }
}


http://pics.kz/s1/9b/a3/bf/9ba3bf48304073e0c7b7771c82159df9.png

PS в одно время ответили  smile 

Автор: Ky7m 30.11.2010, 20:25
Ребята на сколько я знаю, что использовать эту библиотеку, надо сначала установить драйвер Libusb для вашего устройства (то есть вашего PID и VID). А потом искать. Для этого прилагается специальная тулза не понмю как назывется. 

Автор: Fortnox 30.11.2010, 20:30
Фильтр установили для устройства (или для всех устройств)? 
Цитата

Before LibUsbDotNet can access a usb device on a Windows operating system the device must be installed with either WinUSB or libusb-win32 usb drivers. Optionally, libusb-win32 has the unique ability to operate as a filter service. When the filter service mode is enabled, libusb-win32 will allow access to every usb device on the system without the need for driver setup/installation packages. 
?

Добавлено через 3 минуты и 31 секунду
Пока читал справку, уже ответили)

Автор: klein 1.12.2010, 10:30
To i2m:
Первая строка (Ваша) і моя вторая примерно аналогичны.
Код

int VidInt = Convert.ToInt32(VidStr, 16);
int VidInt = Int32.Parse(VidStr, System.Globalization.NumberStyles.AllowHexSpecifier);

За фильтр libusb-win32 я както пропустил. Спасибо всем за дельные советы. Буду вникать.

Автор: i2m 1.12.2010, 15:11
Цитата(klein @  1.12.2010,  10:30 Найти цитируемый пост)
Первая строка (Ваша) і моя вторая примерно аналогичны.

Да аналогичны, к вечеру голова уже шалит  =)

Автор: alex6441161 1.10.2014, 17:46
Здравствуйте, я пытаюсь изучать библиотеку  LibUsbDotNet_Bin.2.2.8 dll, никак не могу найти хорошо растолкованной статьи в интернете или книги какой нибудь по это библиотеке. Поэтому кое как пытаюсь понять что то на сайте libusbdotnet.sourceforge.net. Но для меня как новичка вообще в программировании капаться в чужих кодах очень сложно, тем более что все коментарии на английстком. Не подскажите где можно почитать по поводу этой библиотеки. На данный момент получается найти устройство и вывести о нем какую то информацию, но не принимать не отправлять я не могу. в качестве устройства у меня контроллер Atmega8, в нем зашита программа реализации HID-Class из библиотеки V-USB. На сколько я понял, там передача идет с помощью репортов, может в этом есть причина, что я не могу принять и отправить данные? как мне настроить  LibUsbDotNet_Bin.2.2.8 dll или на стороне контроллера что то сделать? Захотел реализовать именно этот пример потому что там говорилось что можно передать данных за один раз больше чем в других примерах(например пример передачи с помощью управляющих команд).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)