Это выглядит многообещающе.
С сайта FDTI можно скачать приложение «Переназначить утилиту COMNo». Это приложение показывает на всех платформах Windows, какое устройство FTDI доступно. Очень помогает проверить, какие устройства FDTI доступны.
Когда я попытался использовать ваш код в своих собственных приложениях, я обнаружил, что у меня возникли некоторые проблемы с его запуском. Если возможно, расширьте свой код, чтобы любой мог использовать его в качестве примера проекта без каких-либо усилий, чтобы сначала его скомпилировать.
Но все же большой вклад.
Спасибо.
Ниже приведен пример кода, который работал для меня.
using FTD2XX_NET;
private List<FDTIPort> FindFdtiUsbDevices()
{
///////////////////////
// Requires
// FTD2XX_NET.dll
///////////////////////
List<FDTIPort> ports = new List<FDTIPort>();
FTDI _ftdi = new FTDI();
UInt32 count = 0;
FTDI.FT_STATUS status = _ftdi.GetNumberOfDevices(ref count);
if (status != FTDI.FT_STATUS.FT_OK)
{
Console.WriteLine("log.Warn: Unable to access FTDI");
return ports;
}
FTDI.FT_DEVICE_INFO_NODE[] list = new FTDI.FT_DEVICE_INFO_NODE[count];
status = _ftdi.GetDeviceList(list);
if (status != FTDI.FT_STATUS.FT_OK)
{
Console.WriteLine("log.Warn: Unable to access FTDI");
return ports;
}
foreach (FTDI.FT_DEVICE_INFO_NODE node in list)
{
if ((status = _ftdi.OpenByLocation(node.LocId)) == FTDI.FT_STATUS.FT_OK)
{
try
{
string comport;
_ftdi.GetCOMPort(out comport);
if (comport != null && comport.Length > 0)
{
ports.Add(new FDTIPort(comport, node.Description.ToString(), node.SerialNumber.ToString()));
}
}
finally
{
_ftdi.Close();
}
}
}
_ftdi.Dispose();
return ports;
}
public class FDTIPort
{
private string _nodeComportName = "";
private string _nodeDescription = "";
private string _nodeSerialNumber = "";
// Constructor
public FDTIPort()
{
_nodeComportName = "";
_nodeDescription = "";
_nodeSerialNumber = "";
}
// Constructor
public FDTIPort ( string nodeComportName, string nodeDescription, string nodeSerialNumber )
{
_nodeComportName = nodeComportName;
_nodeDescription = nodeDescription;
_nodeSerialNumber = nodeSerialNumber;
}
public string nodeComportName {
get { return this._nodeComportName; }
}
public string nodeDescription
{
get { return this._nodeDescription; }
}
public string nodeSerialNumber
{
get { return this._nodeSerialNumber; }
}
}