As usual I want to describe one of the last things I've done. Yeah I have not written anything to the blog for a while but thats not because I have not done anything but because I am planing something new!
Still, for now I want to describe how to get the list of connected USB devices using FTDI drivers. It is quite easy. Everything is done through the FTDI class.
First of all - you can check the number of connected devices with a call:
The last check is there just for exceptions. Then you can get the actual list of connected devices. As this library follows c++ style - you have to pass an initialized array of FT_DEVICE_INFO_NODE:
And finally we can iterate through devices and get some information about them:
And thats all! As a side node - for my app I had to implement this as a infinite loop - watching for a new connections. It was something like this:
Still, for now I want to describe how to get the list of connected USB devices using FTDI drivers. It is quite easy. Everything is done through the FTDI class.
First of all - you can check the number of connected devices with a call:
var monitor = new FTDI(); UInt32 newDeviceCount = 0; var status = monitor.GetNumberOfDevices(ref newDeviceCount); if (status != FTDI.FT_STATUS.FT_OK) //something wrong!
The last check is there just for exceptions. Then you can get the actual list of connected devices. As this library follows c++ style - you have to pass an initialized array of FT_DEVICE_INFO_NODE:
var ftdiDeviceList = new FTDI.FT_DEVICE_INFO_NODE[newDeviceCount]; ftStatus = newDevice.GetDeviceList(ftdiDeviceList); if (ftStatus != FTDI.FT_STATUS.FT_OK) //something wrong!
And finally we can iterate through devices and get some information about them:
for (var i = 0; i < newDeviceCount; i++) { _devices.Add(new DeviceDTO(i, //_devices here is a List of a simple DTO class ftdiDeviceList[i].Flags, ftdiDeviceList[i].Type, ftdiDeviceList[i].ID, ftdiDeviceList[i].LocId, ftdiDeviceList[i].SerialNumber, ftdiDeviceList[i].Description)); }
And thats all! As a side node - for my app I had to implement this as a infinite loop - watching for a new connections. It was something like this:
var deviceFinder = new BackgroundWorker(); deviceFinder.DoWork += (ev, sn) => { UInt32 prevDeviceCount = 0; var monitor = new FTDI(); while (true) { UInt32 newDeviceCount = 0; var status = monitor.GetNumberOfDevices(ref newDeviceCount); if (status != FTDI.FT_STATUS.FT_OK) continue; var dDevice = newDeviceCount - prevDeviceCount; if (dDevice != 0) { UpdateList(); //updates that _devices List } prevDeviceCount = newDeviceCount; Thread.Sleep(5000); } }; deviceFinder.RunWorkerAsync();
No comments:
Post a Comment