public IList <SerialDevice> ReloadDevices() { var devList = new List <SerialDevice>(); List <ManagementBaseObject> list = null; using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE Caption like '%(COM%'")) { list = searcher.Get().Cast <ManagementBaseObject>().ToList(); } if (list == null || list.Count <= 0) { return(devList); } foreach (var device in FTDI_DeviceInfo.EnumerateDevices()) { var name = "Unknown Device"; ManagementBaseObject ftdi = null; if (String.IsNullOrWhiteSpace(device.DeviceSerialNumber)) { var _tempList = list.Where(x => x["DeviceID"].ToString().Equals(device.DeviceSerialNumber)).ToList(); if (_tempList.Count > 0) { ftdi = null; } else { ftdi = list.First(); } } else { ftdi = list.Where(x => x["DeviceID"].ToString().Contains(device.DeviceSerialNumber)).SingleOrDefault(); } if (ftdi != null) { name = (string)ftdi["Name"]; } devList.Add(new SerialDevice(name, device.DeviceSerialNumber)); } return(devList); }
public void Open(SerialDevice device, int BaudRate) { uint baud = (uint)BaudRate; _FtdiInfo = (FTDI_DeviceInfo)FTDI_DeviceInfo.EnumerateDevices().First(x => x.DeviceSerialNumber == device.Device); if (_FtdiInfo == null) { return; } _FtdiDevice = new FTDI_Device(_FtdiInfo); _FtdiDevice.SetParameters(DataLength.EightBits, Parity.None, StopBits.OneStopBit); _FtdiDevice.SetBaudrate(baud); //this is to change the USB buffer before it passes data to applications. on high baudrates it allows for faster response times instead of getting data in dirty blocks _FtdiDevice.SetBufferSizes(64, 64); //set the timer for the event aTimer.Elapsed += DataToReadTimer; aTimer.AutoReset = true; aTimer.Enabled = true; }