Exemplo n.º 1
0
        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);
        }