private int _ConnectDevice()
        {
            uint   index, bitRate;
            var    sbVersion = new StringBuilder(10);
            string version;
            int    result;

            ushort[] deviceIndex        = new ushort[16];
            string[] deviceSerialNumber = new string[16];

            version = Mcp2221Api.Mcp2221GetLibraryVersionApi();
            if (!version.Equals("2.2b"))
            {
                MessageBox.Show("MCP2221 library: " + sbVersion.ToString() + " != 2.2b !!");
                goto error;
            }

            Mcp2221Api.Mcp2221FindDevicesExtApi(16, deviceIndex, 16, deviceSerialNumber);

            if (mcp2221Adapter != IntPtr.Zero)
            {
                return(0);
            }

            if (Mcp2221Api.Mcp2221GetConnectedDevicesApi() < 0)
            {
                goto error;
            }

            uint.TryParse(tbBitrate.Text, out bitRate);
            bitRate = bitRate * 1000;

            if ((bitRate < 46875) || (bitRate > 500000))
            {
                MessageBox.Show("bitRate out of range: " + bitRate);
                goto error;
            }

            uint.TryParse(tbPort.Text, out index);

            mcp2221Adapter = Mcp2221Api.Mcp2221OpenByIndexApi(index);

            if (mcp2221Adapter == IntPtr.Zero)
            {
                goto error;
            }

            result = Mcp2221Api.Mcp2221SetBitrateApi(mcp2221Adapter, bitRate);
            if (result < 0)
            {
                MessageBox.Show("Mcp2221_SetSpeed() fail: " + result);
                goto error;
            }

            return(0);

error:
            return(-1);
        }