Ejemplo n.º 1
0
        int speed  = 60;        //szybkosc przesylania


        public void rote(int skoki, byte[] buff)
        {
            int    loops        = (degree * 10) / 50 * skoki; //7.5 stopnia na skok //jezeli półkrokowe do 2*50 -> 360/7.5=50
            int    steps        = 4 * skoki;                  //wysokie na wyjsciu RS232 potrzebne do wykonania obrotu, w przypadku krokowego przesylane jest 4 a polkrokowego przesylanie jest 8 sygnalow
            Int32  bytesToWrite = 1;
            UInt32 bytesWritten = 0;

            byte[][] controlByte = new byte[steps][];

            for (int i = 0; i < steps; i++)
            {
                controlByte[i] = new byte[] { buff[i] }
            }
            ;

            for (int k = 0, i = steps - 1; k < loops; k++)
            {
                ftstatus = device.Write(controlByte[i], bytesToWrite, ref bytesWritten); //przesłanie odpowiedniej kombinacji bitowej do sterownika
                System.Threading.Thread.Sleep(1000 / speed);

                if (i == 0)
                {
                    i = steps - 1;
                }
                else
                {
                    i--;
                }
            }

            ftstatus = device.Write(stop, 1, ref bytesWritten); //zaprzestanie wysylania stanów wysokich do silnika krokowego
        }
Ejemplo n.º 2
0
        public int Write(byte[] bytes)
        {
            uint written = 0;

            status = this.ftdiPort.Write(bytes, (uint)bytes.Length, ref written);
            return((int)written);
        }
Ejemplo n.º 3
0
        public byte ReadByte()
        {
            byte[] buf  = new byte[1];
            uint   read = 0;

            status = this.ftdiPort.Read(buf, 1, ref read);
            return(buf[0]);
        }
Ejemplo n.º 4
0
        private void koniec()
        {
            byte[] zero         = { 0x00 };
            Int32  bytesToWrite = 1;
            UInt32 bytesWritten = 0;

            ftstatus = device.Write(zero, bytesToWrite, ref bytesWritten);
        }
        protected FtdiMpsseI2CResult CheckResult(FTD2XX_NET.FTDI.FT_STATUS status)
        {
            if (status != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
            {
                throw new I2CNotConnectedException(Convert(status));
            }

            return(FtdiMpsseI2CResult.Ok);
        }
Ejemplo n.º 6
0
        public uint[] getListLocIdPlacas()
        {
            FTD2XX_NET.FTDI.FT_STATUS ftStatus = FTDI.FT_STATUS.FT_OK;
            uint ftdiDeviceCount = 0;
            FTDI acesso          = new FTDI();

            acesso.GetNumberOfDevices(ref ftdiDeviceCount);
            FTDI.FT_DEVICE_INFO_NODE[] infos = new FTDI.FT_DEVICE_INFO_NODE[ftdiDeviceCount];
            acesso.GetDeviceList(infos);
            uint[] placas = new uint[ftdiDeviceCount];
            for (int c = 0; c < infos.Length; c++)
            {
                placas[c] = infos[c].LocId;
                executaComando(infos[c].LocId, Tipos.Inicia, Codigos.Inicia);
            }

            return(placas);
        }
Ejemplo n.º 7
0
        public void Connect()
        {
            ftstatus = device.GetDeviceList(devicelist);
            try
            {
                //sprawdzenie czy urzadzenie zostalo podlaczone
                ftstatus = device.OpenByDescription(devicelist[0].Description);
                ftstatus = device.SetBitMode(0xff, 1); //pozwala na przesylanie danych do ukladu
                Console.WriteLine("Status: " + ftstatus.ToString());
            }

            catch (Exception e)
            {
                Console.WriteLine("Urzadzenie nie zostao podlaczone!\nNacisnij [ENTER] aby zamknac program");
                Console.ReadLine();
                Environment.Exit(0);
            }
        }
Ejemplo n.º 8
0
 public bool OpenAny(uint baudRate = 38400)
 {
     try
     {
         this.ftdiPort = new FTD2XX_NET.FTDI();
         uint count = 0;
         this.status = this.ftdiPort.GetNumberOfDevices(ref count);
         if (count == 1)
         {
             status = this.ftdiPort.OpenByIndex(0);
             status = this.ftdiPort.SetBaudRate(baudRate);
             return(true);
         }
     }
     catch
     {
         return(false);
     }
     return(false);
 }
Ejemplo n.º 9
0
        protected void Write(byte [] data)
        {
            if (_working && _driver != null && _driver.IsOpen)
            {
                try
                {
                    uint written = 0;
                    FTD2XX_NET.FTDI.FT_STATUS status = _driver.Write(data, data.Length, ref written);
                    if (status != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                    {
                        throw new Exception(string.Format("Device returned status: {0}.", status));
                    }
                    if (data.Length != written)
                    {
                        throw new Exception(string.Format("Wrong number of written bytes, {0} <> {1}.", data.Length, written));
                    }

                    #if DEBUG
                    string s = "";
                    for (int i = 0; i < data.Length; i++)
                    {
                        s += "0x" + data[i].ToString("X2") + " ";
                    }
                    string t = string.Format("Wysłano dane do '{0}': {1}", DeviceTypeName, s);
                    if (Log != null)
                    {
                        Log.Log(Module, t);
                    }
                    else
                    {
                        Debug.WriteLine(t);
                    }
                    #endif
                }
                catch (Exception ex)
                {
                    Log.Log(Module, ex.ToString());
                }
            }
        }
Ejemplo n.º 10
0
        private void enablebtn_Click(object sender, EventArgs e)
        {
            try
            {
                UInt32 ftdiDeviceCount = 0;
                device.GetNumberOfDevices(ref ftdiDeviceCount);
                FTD2XX_NET.FTDI.FT_DEVICE_INFO_NODE[] devicelist = new FTD2XX_NET.FTDI.FT_DEVICE_INFO_NODE[ftdiDeviceCount];
                device.GetDeviceList(devicelist);

                ftstatus = device.OpenBySerialNumber(devicelist[0].SerialNumber);
                ftstatus = device.SetBitMode(0xff, 1);
                Console.WriteLine("Urzadzenie: " + ftstatus.ToString());
                stepLeftbtn.Enabled  = true;
                stepRightbtn.Enabled = true;
            }
            catch (Exception ee)
            {
                Console.WriteLine("Urzadzenie nie zostalo podlaczone!\nNacisnij [ENTER] aby zamknac program");
                Console.ReadLine();
                Environment.Exit(0);
            }
        }
Ejemplo n.º 11
0
        public void executaComando(uint location, int tp, byte idRele)
        {
            FTDI acesso = new FTDI();

            FTD2XX_NET.FTDI.FT_STATUS ftStatus = FTDI.FT_STATUS.FT_OK;
            ftStatus = acesso.OpenByLocation(location);


            if (tp == Tipos.Inicia || tp == Tipos.Finaliza)
            {
                saida = idRele;
            }
            else if (tp == Tipos.Liga)
            {
                saida = (byte)(saida | idRele);
            }
            else
            {
                saida = (byte)(saida & idRele);
            }

            ftStatus = acesso.SetBitMode(saida, FTDI.FT_BIT_MODES.FT_BIT_MODE_CBUS_BITBANG);
            ftStatus = acesso.Close();
        }
Ejemplo n.º 12
0
 private void Polacz()
 {
     ftstatus = device.GetDeviceList(devicelist);
     ftstatus = device.OpenByDescription(devicelist[0].Description);
     ftstatus = device.SetBitMode(0xff, 1);
 }
Ejemplo n.º 13
0
 private void disablebtn_Click(object sender, EventArgs e)
 {
     stepLeftbtn.Enabled  = false;
     stepRightbtn.Enabled = false;
     ftstatus             = device.Close();
 }
Ejemplo n.º 14
0
        protected FTD2XX_NET.FTDI OpenDevice(bool resetCommunication)
        {
            FTD2XX_NET.FTDI result = new FTD2XX_NET.FTDI();
            if (result.OpenBySerialNumber(SerialNumber) == FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
            {
                Debug.WriteLine(string.Format("Otwarto połączenie z urządzeniem: {0}", this));

                if (result.ResetDevice() != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                {
                    result.Close();
                    result = null;
                    return(null);
                }

                // ustawienie parametrów połączenia
                if (result.SetBaudRate(56700) != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                {
                    result.Close();
                    result = null;
                    return(null);
                }

                if (result.SetDataCharacteristics(8, 2, 0) != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                {
                    result.Close();
                    result = null;
                    return(null);
                }

                if (result.SetFlowControl(FTD2XX_NET.FTDI.FT_FLOW_CONTROL.FT_FLOW_NONE, 0, 0) != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                {
                    result.Close();
                    result = null;
                    return(null);
                }

                if (resetCommunication)
                {
                    Debug.WriteLine(string.Format("Resetowanie urządzenia: {0}", this));

                    uint available = 0;
                    uint red       = 0;
                    uint written   = 0;

                    // wysłanie resetu
                    FTD2XX_NET.FTDI.FT_STATUS ret = result.GetRxBytesAvailable(ref available);
                    red = 0;
                    if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                    {
                        result.Close();
                        result = null;
                        return(null);
                    }
                    if (available > 0)
                    {
                        byte[] tmp = new byte[available];
                        ret = result.Read(tmp, (uint)tmp.Length, ref red);
                        if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                        {
                            result.Close();
                            result = null;
                            return(null);
                        }
                    }

                    available = 0;
                    int tries = 16;
                    while (available < 3 && tries-- > 0)
                    {
                        ret = result.Write(new byte[] { 254 }, 1, ref written);
                        if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK || written != 1)
                        {
                            result.Close();
                            result = null;
                            return(null);
                        }

                        Thread.Sleep(20);

                        ret = result.GetRxBytesAvailable(ref available);
                        red = 0;
                        if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                        {
                            result.Close();
                            result = null;
                            return(null);
                        }
                    }

                    if (available < 3)
                    {
                        result.Close();
                        result = null;
                        return(null);
                    }

                    if ((available % 3) != 0)
                    {
                        Thread.Sleep(20);
                        ret = result.GetRxBytesAvailable(ref available);
                        red = 0;
                        if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                        {
                            result.Close();
                            result = null;
                            return(null);
                        }
                    }

                    byte[] tmp3 = new byte[available];
                    ret = result.Read(tmp3, (uint)tmp3.Length, ref red);
                    if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                    {
                        result.Close();
                        result = null;
                        return(null);
                    }
                }

                return(result);
            }
            return(null);
        }
Ejemplo n.º 15
0
        private void WorkingThread()
        {
            try
            {
                // opóźnienie startu
                Thread.Sleep(3000);

                // skasowanie listy urządzeń
                Globals.Instance.ClearDevices();

                List <string> serialNumbers = new List <string>();

                FTDI.FT_STATUS result = FTDI.FT_STATUS.FT_OK;
                FTDI           ftdi   = new FTDI();

                while (!_stop)
                {
                    // łączenie z FSUIPC
                    if (!FS.FSUIPC.FS.IsConnected)
                    {
                        FS.FSUIPC.FS.Connect();
                    }

                    uint devCount = 0;
                    try
                    {
                        result = ftdi.GetNumberOfDevices(ref devCount);
                    }
                    catch { }
                    if (result == FTDI.FT_STATUS.FT_OK)
                    {
                        FTDI.FT_DEVICE_INFO_NODE[] deviceList = new FTDI.FT_DEVICE_INFO_NODE[devCount];
                        if (devCount > 0)
                        {
                            try
                            {
                                result = ftdi.GetDeviceList(deviceList);
                            }
                            catch (Exception)
                            {
                            }
                        }
                        else
                        {
                            result = FTDI.FT_STATUS.FT_OK;
                        }
                        if (result == FTDI.FT_STATUS.FT_OK)
                        {
                            // usunięcie urządzeń niepodpiętych
                            Device[] _devices = Globals.Instance.Devices;
                            {
                                int index = _devices.Length;
                                while (index-- > 0)
                                {
                                    Device device = _devices[index];
                                    if (device.SerialNumber != "FAKE" && Array.Find <FTDI.FT_DEVICE_INFO_NODE>(deviceList, delegate(FTDI.FT_DEVICE_INFO_NODE o)
                                    {
                                        return(o.SerialNumber == device.SerialNumber);
                                    }) == null)
                                    {
                                        Globals.Instance.RemoveDevice(_devices[index]);
                                        serialNumbers.Remove(device.SerialNumber);

                                        device.TurnOff();
                                    }
                                }
                            }

                            for (int i = 0; i < deviceList.Length; i++)
                            {
                                if (deviceList[i].Type == FTDI.FT_DEVICE.FT_DEVICE_232R)
                                {
                                    string sn = deviceList[i].SerialNumber;
                                    if (!serialNumbers.Contains(sn))
                                    {
                                        serialNumbers.Add(sn);

                                        // otwarcie połączenia z urządzeniem
                                        FTD2XX_NET.FTDI           driver = new FTDI();
                                        FTD2XX_NET.FTDI.FT_STATUS status = driver.OpenBySerialNumber(sn);
                                        if (status != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                                        {
                                            driver.Close();
                                            driver = null;
                                            continue;
                                        }

                                        // odczytanie EEPROM
                                        FTD2XX_NET.FTDI.FT232R_EEPROM_STRUCTURE eeprom = new FTD2XX_NET.FTDI.FT232R_EEPROM_STRUCTURE();
                                        status = driver.ReadFT232REEPROM(eeprom);
                                        if (status != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                                        {
                                            driver.Close();
                                            driver = null;
                                            continue;
                                        }

                                        // odczytanie producenta "simPROJECT"
                                        if (eeprom.Manufacturer.ToUpperInvariant() != "SIMPROJECT")
                                        {
                                            driver.Close();
                                            driver = null;
                                            continue;
                                        }

                                        driver.Close();
                                        driver = null;

                                        Device device = DeviceFactory.CreateDevice(deviceList[i]);
                                        if (device != null)
                                        {
                                            Globals.Instance.AddDevice(device);
                                            device.SetPlane(Globals.Instance.CurrentPlane);
                                            device.TurnOn();
                                        }
                                    }
                                }
                            }
                        }
                    }

                    Thread.Sleep(3000);
                }
            }
            catch (ThreadAbortException)
            {
            }
            catch (Exception ex)
            {
                Debug.WriteLine(string.Format("Błąd w wątku śledzącym urządzenia: {0}", ex));
            }
            finally
            {
            }
        }
Ejemplo n.º 16
0
        protected virtual void Process()
        {
            try
            {
                _driver = new FTD2XX_NET.FTDI();

                // próba otwarcia urządzenia
                FTD2XX_NET.FTDI.FT_STATUS status = _driver.OpenBySerialNumber(SerialNumber);
                if (status != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                {
                    Log.Log(Module, string.Format("Cannot connect to device '{0}', SN: {1}.", Name, SerialNumber));
                    return;
                }

                // ustawienie parametrów komunikacji
                status = _driver.SetBaudRate(_baudRate);
                if (status != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                {
                    Log.Log(Module, string.Format("Cannot setup device '{0}', SN: {1}.", Name, SerialNumber));
                    return;
                }

                status = _driver.SetDataCharacteristics(FTD2XX_NET.FTDI.FT_DATA_BITS.FT_BITS_8, FTD2XX_NET.FTDI.FT_STOP_BITS.FT_STOP_BITS_1, FTD2XX_NET.FTDI.FT_PARITY.FT_PARITY_NONE);
                if (status != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                {
                    Log.Log(Module, string.Format("Cannot setup device '{0}', SN: {1}.", Name, SerialNumber));
                    return;
                }

                status = _driver.SetFlowControl(FTD2XX_NET.FTDI.FT_FLOW_CONTROL.FT_FLOW_RTS_CTS, 0, 0);
                if (status != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                {
                    Log.Log(Module, string.Format("Cannot setup device '{0}', SN: {1}.", Name, SerialNumber));
                    return;
                }

                if (_sendResetSequence)
                {
                    // Reset communication state machine
                    Write(new byte[7] {
                        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
                    });
                }

                // wyczyszczenie urządzenia
                ClearDevice();

                // w pętli odbieranie danych
                uint red = 0;

                AutoResetEvent ev = new AutoResetEvent(false);
                _driver.SetEventNotification(FTD2XX_NET.FTDI.FT_EVENTS.FT_EVENT_RXCHAR, ev);

                while (_working)
                {
                    status = _driver.GetRxBytesAvailable(ref red);
                    if (status != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                    {
                        throw new Exception(string.Format("Getting number of available data returned status: '{0}', device '{1}', SN: {2}.", status, Name, SerialNumber));
                    }
                    if (red > 0)
                    {
                        byte [] data = new byte[red];
                        uint    red2 = 0;
                        status = _driver.Read(data, red, ref red2);
                        if (status != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                        {
                            throw new Exception(string.Format("Reading data number from device returned status: '{0}', device '{1}', SN: {2}.", status, Name, SerialNumber));
                        }

                        #if DEBUG
                        string s = "";
                        for (int i = 0; i < data.Length; i++)
                        {
                            s += "0x" + data[i].ToString("X2") + " ";
                        }
                        string t = string.Format("Odebrano dane '{0}': {1}", DeviceTypeName, s);
                        if (Log != null)
                        {
                            Log.Log(Module, t);
                        }
                        else
                        {
                            Debug.WriteLine(t);
                        }
                        #endif

                        if (_specialProcess)
                        {
                            ProcessData(data, _inputsByCode);
                        }
                        else
                        {
                            for (int i = 0; i < red2; i++)
                            {
                                int d = data[i];

                                // pominięcie potwierdzeń
                                if ((d & 0x80) == 0x00)
                                {
                                    int   code  = d & 0x3f;
                                    Input input = null;
                                    if (_inputsByCode.TryGetValue(code, out input))
                                    {
                                        input.SetState((d & 0x40) == 0x00);
                                    }
                                    else
                                    {
                                        Log.Log(Module, string.Format("Unknown data '0x{0}' from device '{1}', SN: {2}.", d.ToString("X2"), Name, SerialNumber));
                                    }
                                }
                            }
                        }
                    }

                    //Thread.Sleep(1);
                    ev.WaitOne(10, false);
                }
            }
            catch (ThreadAbortException)
            {
            }
            catch (Exception ex)
            {
                Log.Log(Module, ex.ToString());
            }
            finally
            {
                try
                {
                    _working = true;
                    ClearDevice();
                }
                finally
                {
                    _working = false;
                }

                CloseDriver();
            }
        }
Ejemplo n.º 17
0
        public void funkcja()
        {
            //TODO
            // Pytanie o okres
            Polacz();
            Console.WriteLine("Polaczono!");
            Console.WriteLine("Wybierz tryb sterowania\n\t1 - jednofazowe\n\t2 - dwufazowe\n");
            string linijka = Console.ReadLine();
            int    pom     = int.Parse(linijka);

            if (pom == 1)
            {
                control = sterowanie.Jednofazowe;
            }
            else if (pom == 2)
            {
                control = sterowanie.Dwufazowe;
            }
            Console.WriteLine("\t1 - kroki\n\t2 - kat\n");
            linijka = Console.ReadLine();
            int pom5  = int.Parse(linijka);
            int loops = 0;

            if (pom5 == 1)
            {
                Console.WriteLine("Ile krokow?");
                linijka = Console.ReadLine();
                int pom6 = int.Parse(linijka);
                loops = pom6;
            }
            else
            {
                Console.WriteLine("jaki kat?");
                linijka = Console.ReadLine();
                int pom7 = int.Parse(linijka);
                pom7  = przelicz(pom7);
                loops = pom7;
            }
            // Ile krokow

            Console.WriteLine("Ile czekac?");
            linijka = Console.ReadLine();
            int pom4  = int.Parse(linijka);
            int okres = pom4;

            int steps = 4;

            switch (control)
            {
            case sterowanie.Jednofazowe:
            {
                Console.WriteLine("Ktora strona?\n\t1 - prawa\n\t2 - lewa\n");
                linijka = Console.ReadLine();
                int pom3 = int.Parse(linijka);
                switch (pom3)
                {
                case 1:
                {
                    byte[][] controlByte = new byte[steps][];

                    for (int i = 0; i < steps; i++)
                    {
                        controlByte[i] = new byte[] { dwufazowe[i] }
                    }
                    ;

                    for (int k = 0, i = steps - 1; k < loops; k++)
                    {
                        Int32  bytesToWrite = 1;
                        UInt32 bytesWritten = 0;

                        ftstatus = device.Write(controlByte[i], bytesToWrite, ref bytesWritten);
                        System.Threading.Thread.Sleep(okres);

                        if (i == 0)
                        {
                            i = steps - 1;
                        }
                        else
                        {
                            i--;
                        }
                    }
                    koniec();
                    break;
                }

                case 2:
                {
                    byte[][] controlByte = new byte[steps][];

                    for (int i = 0; i < steps; i++)
                    {
                        controlByte[i] = new byte[] { jednofazowe[i] }
                    }
                    ;

                    for (int k = 0, i = 0; k < loops; k++)
                    {
                        Int32  bytesToWrite = 1;
                        UInt32 bytesWritten = 0;


                        ftstatus = device.Write(controlByte[i], bytesToWrite, ref bytesWritten);
                        System.Threading.Thread.Sleep(okres);

                        if (i == steps - 1)
                        {
                            i = 0;
                        }
                        else
                        {
                            i++;
                        }
                    }


                    koniec();
                    break;
                }
                }
                koniec();
                break;
            }

            case sterowanie.Dwufazowe:
            {
                Console.WriteLine("Ktora strona?\n\t1 - prawa\n\t2 - lewa\n");
                linijka = Console.ReadLine();
                int pom3 = int.Parse(linijka);
                switch (pom3)
                {
                case 1:
                {
                    byte[][] controlByte = new byte[steps][];

                    for (int i = 0; i < steps; i++)
                    {
                        controlByte[i] = new byte[] { dwufazowe[i] }
                    }
                    ;

                    for (int k = 0, i = steps - 1; k < loops; k++)
                    {
                        Int32  bytesToWrite = 1;
                        UInt32 bytesWritten = 0;

                        ftstatus = device.Write(controlByte[i], bytesToWrite, ref bytesWritten);
                        System.Threading.Thread.Sleep(okres);

                        if (i == 0)
                        {
                            i = steps - 1;
                        }
                        else
                        {
                            i--;
                        }
                    }
                    koniec();
                    break;
                }

                case 2:
                {
                    byte[][] controlByte = new byte[steps][];

                    for (int i = 0; i < steps; i++)
                    {
                        controlByte[i] = new byte[] { dwufazowe[i] }
                    }
                    ;

                    for (int k = 0, i = 0; k < loops; k++)
                    {
                        Int32  bytesToWrite = 1;
                        UInt32 bytesWritten = 0;


                        ftstatus = device.Write(controlByte[i], bytesToWrite, ref bytesWritten);
                        System.Threading.Thread.Sleep(okres);

                        if (i == steps - 1)
                        {
                            i = 0;
                        }
                        else
                        {
                            i++;
                        }
                    }


                    koniec();
                    break;
                }
                }
                koniec();
                break;
            }
            }
        }
Ejemplo n.º 18
0
        public static bool CheckDevice(FTD2XX_NET.FTDI.FT_DEVICE_INFO_NODE deviceInfo, DeviceType deviceType, bool resetCommunication)
        {
            FTD2XX_NET.FTDI driver = null;
            try
            {
                // połączenie z urządzeniem
                driver = new FTD2XX_NET.FTDI();
                FTD2XX_NET.FTDI.FT_STATUS ret = driver.OpenByLocation(deviceInfo.LocId);
                if (ret == FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                {
                    ret = driver.ResetDevice();
                    //ret = driver.ResetPort();
                    ret = driver.SetBaudRate(56700);
                    ret = driver.SetDataCharacteristics(8, 2, 0);
                    ret = driver.SetFlowControl(FTD2XX_NET.FTDI.FT_FLOW_CONTROL.FT_FLOW_NONE, 0, 0);

                    uint available = 0;
                    uint red       = 0;
                    uint written   = 0;

                    // resetowanie urządzenia
                    if (resetCommunication)
                    {
                        // wysłanie resetu
                        ret = driver.GetRxBytesAvailable(ref available);
                        red = 0;
                        if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                        {
                            driver.Close();
                            driver = null;
                            return(false);
                        }
                        if (available > 0)
                        {
                            byte[] tmp = new byte[available];
                            ret = driver.Read(tmp, (uint)tmp.Length, ref red);
                            if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                            {
                                driver.Close();
                                driver = null;
                                return(false);
                            }
                        }

                        available = 0;
                        int tries = 16;
                        while (available < 3 && tries-- > 0)
                        {
                            ret = driver.Write(new byte[] { 254 }, 1, ref written);
                            if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK || written != 1)
                            {
                                driver.Close();
                                driver = null;
                                return(false);
                            }

                            Thread.Sleep(20);

                            ret = driver.GetRxBytesAvailable(ref available);
                            red = 0;
                            if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                            {
                                driver.Close();
                                driver = null;
                                return(false);
                            }
                        }

                        if (available < 3)
                        {
                            driver.Close();
                            driver = null;
                            return(false);
                        }

                        if ((available % 3) != 0)
                        {
                            Thread.Sleep(20);
                            ret = driver.GetRxBytesAvailable(ref available);
                            red = 0;
                            if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                            {
                                driver.Close();
                                driver = null;
                                return(false);
                            }
                        }

                        byte[] tmp3 = new byte[available];
                        ret = driver.Read(tmp3, (uint)tmp3.Length, ref red);
                        if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                        {
                            driver.Close();
                            driver = null;
                            return(false);
                        }
                    }

                    // wysłanie rozkazu ciszy
                    byte[] data = new byte[3] {
                        255, 1, 204
                    };
                    written = 0;
                    ret     = driver.Write(data, data.Length, ref written);
                    if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                    {
                        return(false);
                    }

                    // odczytanie wszystkich danych
                    available = 0;
                    ret       = driver.GetRxBytesAvailable(ref available);
                    red       = 0;
                    if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                    {
                        return(false);
                    }
                    if (available > 0)
                    {
                        byte[] tmp = new byte[available];
                        ret = driver.Read(tmp, (uint)tmp.Length, ref red);
                        if (ret != FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                        {
                            return(false);
                        }
                    }

                    // wysłanie zapytania o typ urządzenia
                    data = new byte[3] {
                        255, 1, 202
                    };
                    written = 0;
                    ret     = driver.Write(data, data.Length, ref written);

                    if (ret == FTD2XX_NET.FTDI.FT_STATUS.FT_OK)
                    {
                        int count = 0;
                        while (count++ < 5)
                        {
                            Thread.Sleep(50);
                            ret = driver.GetRxBytesAvailable(ref available);
                            if (ret == FTD2XX_NET.FTDI.FT_STATUS.FT_OK && available > 2)
                            {
                                // odczytanie danych
                                data[0] = data[1] = data[2] = 0;
                                ret     = driver.Read(data, (uint)data.Length, ref red);
                                if (ret == FTD2XX_NET.FTDI.FT_STATUS.FT_OK && red == data.Length)
                                {
                                    // sprawdzenie czy jest to raport o typie urządzenia i czy typ zgadza się z przekazanym typem
                                    if (data[0] == 2)
                                    {
                                        byte tmp = (byte)(data[1] & 0x0f);
                                        return(tmp == (byte)deviceType);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch { }
            finally
            {
                if (driver != null && driver.IsOpen)
                {
                    try
                    {
                        driver.Close();
                    }
                    catch { }
                }
            }
            return(false);
        }