private void RefreshDevices() { FTDIDevices.Clear(); var newDevices = mFTDILibrary.EnumerateFTDIDevices(); uint index = 0; foreach (var node in newDevices) { if (node.Type != FTDI.FT_DEVICE.FT_DEVICE_UNKNOWN) { uint chipID = 0; if (FTDI.IsFTDChipIDDLLLoaded()) { mFTDILibrary.GetChipIDFromDeviceIndex(index, out chipID); } FTDIDevices.Add(new FTDIDeviceInfo(node, index, chipID)); index++; } } #region fakeDevices #if ENABLE_FAKE_USB_DEVICES if ((FTDIDevices.Count == 0) && (DateTime.Now.Second % 3 == 0)) { FTDI.FT_DEVICE_INFO_NODE tempInfo0 = new FTDI.FT_DEVICE_INFO_NODE(); tempInfo0.Description = "Debug Placeholder FTDI Device 0"; tempInfo0.ID = 1000; tempInfo0.SerialNumber = "SerialNum 1000"; tempInfo0.Type = FTDI.FT_DEVICE.FT_DEVICE_232R; FTDIDevices.Add(new FTDIDeviceInfo(tempInfo0, index++, 0x01010101)); FTDI.FT_DEVICE_INFO_NODE tempInfo1 = new FTDI.FT_DEVICE_INFO_NODE(); tempInfo1.Description = "Debug Placeholder FTDI Device 1"; tempInfo1.ID = 1001; tempInfo1.SerialNumber = "SerialNum 1001"; tempInfo1.Type = FTDI.FT_DEVICE.FT_DEVICE_UNKNOWN; FTDIDevices.Add(new FTDIDeviceInfo(tempInfo1, index++, 0x00000000)); FTDI.FT_DEVICE_INFO_NODE tempInfo2 = new FTDI.FT_DEVICE_INFO_NODE(); tempInfo2.Description = "Debug Placeholder FTDI Device 2"; tempInfo2.ID = 1002; tempInfo2.SerialNumber = "SerialNum 1002"; tempInfo2.Type = FTDI.FT_DEVICE.FT_DEVICE_BM; FTDIDevices.Add(new FTDIDeviceInfo(tempInfo2, index++, 0x01010101)); } #endif #endregion }
protected bool OpenFTDIDevice(FTDI.FT_DEVICE_INFO_NODE deviceToOpen) { bool connected = false; lock (mFTDIDevice) { if (IsFTDIDeviceOpen()) { CloseFTDIDevice(); } if (FTDI.IsFTD2XXDLLLoaded()) { if (deviceToOpen != null) { if (mFTDIDevice.OpenByLocation(deviceToOpen.LocId) == FTDI.FT_STATUS.FT_OK) { FTDI.FT_STATUS ftdiStatus = FTDI.FT_STATUS.FT_OK; ftdiStatus |= mFTDIDevice.ResetDevice(); //ftdiStatus |= mFTDIDevice.ResetPort(); ftdiStatus |= mFTDIDevice.Purge(FTDI.FT_PURGE.FT_PURGE_RX | FTDI.FT_PURGE.FT_PURGE_TX); if (ftdiStatus == FTDI.FT_STATUS.FT_OK) { DisplayStatusMessage("Opened FTDI device.", StatusMessageType.LOG); DisplayStatusMessage("FTDI device info - Description: " + deviceToOpen.Description + " Serial Number: " + deviceToOpen.SerialNumber + " Device Type: " + deviceToOpen.Type + " ID: 0x" + deviceToOpen.ID.ToString("X") + " Device Flags: 0x" + deviceToOpen.Flags.ToString("X"), StatusMessageType.LOG); if (FTDI.IsFTDChipIDDLLLoaded()) { DisplayStatusMessage("FTDI ChipID DLL is loaded, checking chip ID...", StatusMessageType.LOG); uint chipID = 0; if (mFTDIDevice.GetChipIDFromCurrentDevice(out chipID) == FTDI.FT_STATUS.FT_OK) { DisplayStatusMessage("FTDI device chip ID: 0x" + chipID.ToString("X"), StatusMessageType.LOG); } else { DisplayStatusMessage("Unable to read FTDI device chip ID", StatusMessageType.LOG); } } connected = true; } else { mFTDIDevice.Close(); } } else { DisplayStatusMessage("Could not open FTDI device", StatusMessageType.LOG); } } else { DisplayStatusMessage("No FTDI device selected", StatusMessageType.LOG); } } else { DisplayStatusMessage("FTDI FTD2XX device driver DLL could not be loaded.", StatusMessageType.USER); } } return(connected); }