public bool Receive(byte request7bit, out DE2Data data)
        {
            data = null;
            bool result = CheckConnection((byte)(0x80 | DE2Data.GetTag(request7bit))); // Reading flag and 7 bits of request

            if (result)
            {
                Thread.Sleep(0);
                byte tag;
                result = ReceiveByte(out tag);
                if (result && DE2Data.GetFlagBit(tag))
                {
                    byte[] received = new byte[7];
                    for (int i = 0; i < received.Length && result; i++)
                    {
                        result = ReceiveByte(out received[i]);
                    }
                    if (result)
                    {
                        data = new DE2Data(tag, received);
                    }
                }
            }
            return(result);
        }
        public bool Send(DE2Data data)
        {
            bool result = CheckConnection((byte)(0x00 | data.Tag7bit)); // Writing flag and 7 bits of tag

            if (result)
            {
                List <byte> message = new List <byte>(new byte[] { 0x88, 0x83 });
                message.AddRange(data.GetData());
                IntPtr lpBuffer = Marshal.AllocHGlobal(message.Count);
                Marshal.Copy(message.ToArray(), 0, lpBuffer, message.Count);
                uint dwBytesWritten = 0;
                result = FT_Write(ftHandle, lpBuffer, message.Count, ref dwBytesWritten) == FT_OK;
                Marshal.FreeHGlobal(lpBuffer);
            }
            return(result);
        }