Пример #1
0
        public static string[] GetComPortList()
        {
            List <string> comPorts = new List <string>();

            try
            {
                List <FTDeviceInfo> ftdiDevices = new List <FTDeviceInfo>();

                uint         deviceNumber;
                FTStatusCode ftStatus = Ftdi.FT_CreateDeviceInfoList(out deviceNumber);

                if (deviceNumber > 0)
                {
                    FTDeviceInfoNode[] devices = new FTDeviceInfoNode[deviceNumber];

                    for (int k = 0; k < deviceNumber; k++)
                    {
                        devices[k].SerialNumber = new byte[16];
                        devices[k].Description  = new byte[64];
                    }

                    ftStatus = Ftdi.FT_GetDeviceInfoList(devices, ref deviceNumber);

                    for (int k = 0; k < deviceNumber; k++)
                    {
                        FTDeviceInfo ftDeviceInfo = new FTDeviceInfo();
                        ftDeviceInfo.Flags = devices[k].Flags;
                        ftDeviceInfo.Type  = devices[k].Type;
                        ftDeviceInfo.ID    = devices[k].ID;
                        ftDeviceInfo.LocId = devices[k].LocId;

                        ftDeviceInfo.Description  = ASCIIEncoding.ASCII.GetString(devices[k].Description);
                        ftDeviceInfo.Description  = ftDeviceInfo.Description.Substring(0, ftDeviceInfo.Description.IndexOf("\0"));
                        ftDeviceInfo.SerialNumber = ASCIIEncoding.ASCII.GetString(devices[k].SerialNumber);
                        ftDeviceInfo.SerialNumber = ftDeviceInfo.SerialNumber.Substring(0, ftDeviceInfo.SerialNumber.IndexOf("\0"));

                        ftdiDevices.Add(ftDeviceInfo);
                    }

                    foreach (FTDeviceInfo ftdiDevice in ftdiDevices)
                    {
                        string comPort = Ftdi.GetComPortNumber(ftdiDevice.SerialNumber);
                        if (string.IsNullOrEmpty(comPort) == false)
                        {
                            comPorts.Add(comPort);
                        }
                    }
                }
            }
            catch (DllNotFoundException)
            {
            }

            comPorts.Sort();
            return(comPorts.ToArray());
        }
Пример #2
0
        private static string GetComPortNumber(string serialNumber)
        {
            IntPtr       ftHandle = IntPtr.Zero;
            FTStatusCode ftStatus = Ftdi.FT_OpenEx(serialNumber, (uint)FTOpenByFlag.FT_OPEN_BY_SERIAL_NUMBER, ref ftHandle);

            string comNumber = null;

            ftStatus = FTStatusCode.FT_OTHER_ERROR;

            if (ftHandle != IntPtr.Zero)
            {
                int portNumber;
                ftStatus = Ftdi.FT_GetComPortNumber(ftHandle, out portNumber);
                if (ftStatus == FTStatusCode.FT_OK && portNumber > 0)
                {
                    comNumber = "COM" + portNumber.ToString();
                }

                ftStatus = Ftdi.FT_Close(ftHandle);
            }

            return(comNumber);
        }