如何获取Arduino的

时间:2016-04-18 15:35:24

标签: c# arduino libusb-1.0 libusbdotnet

我正在试图弄清楚哪个串口属于Arduino 由于SerialPort类没有透露任何关于
的信息 底层硬件,我正在尝试使用LibUsbDotNet

使用以下代码获取所有设备的列表:

UsbDevice.ForceLibUsbWinBack = true;
var devices = UsbDevice.AllDevices;

然后我可以迭代所有这些或专门搜索Arduino

var deviceFinder = new UsbDeviceFinder(0x2341, 0x8036);
var arduino = devices.Find(deviceFinder);

这实际上有效,我得到UsbRegistry的实例,
但我无法打开设备或确定它通过哪个串口。

USBDevice arduinoUsbDevice;
usbRegistry.Open(out arduinoUsbDevice);

由于这不起作用arduinoUsbDevice仍为null

然后我尝试使用DeviceNotifier类,每当发生一次事件时就会引发事件 在系统中添加或删除设备:

var notifier = DeviceNotifier.OpenDeviceNotifier();

notifier.OnDeviceNotify += (s, e) =>
{
    WriteLine(e.Device?.Name ?? "no device");
    WriteLine(e.Device?.IdProduct ?? 0);
    WriteLine(e.Device?.IdVendor ?? 0);
    WriteLine(e.EventType);
    WriteLine(e.Object);
    WriteLine(e.Port?.Name ?? "");
};

现在每当我将Arduino连接到计算机时,事件都会被提升两次 好像连接了两个独立的设备,
UsbDevice.AllDevices只返回其中一个:

` \\?\USB#VID_2341&PID_8036#7&533912d&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
32822
9025
DeviceArrival
FullName:USB#VID_2341&PID_8036#7&533912d&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
Vid:0x2341
Pid:0x8036
SerialNumber:7&533912d&0&2
ClassGuid:a5dcbf10-6530-11d2-901f-00c04fb951ed


no device
0
0
DeviceArrival
[Port Name:COM5] 
COM5

第一次为我们之前可以找到的设备举起活动。
第二次引发e.Device设置为null但是 将e.Port设置为COM5,这是我所追求的信息。

所以问题是我只能在Arduino连接时获取此信息 软件启动后,即使再连接这两个事件,也是如此 一种猜谜游戏。

有没有办法获取信息而不必依赖 关于DeviceNotifier班级提出的事件?

我知道我可以使用System.ManagementWMI个查询,但是 这些在Linux和MacOS上不可用,这就是我使用的原因 而是LibUsbDotNet

我使用的本机库是libusb-1.0

0 个答案:

没有答案