private static byte[] read(byte[] address, int length)
        {
            try
            {
                if (length % 16 != 0 || !set_data_key())
                {
                    return(new byte[0]);
                }

                while (Reading)
                {
                    Thread.Sleep(ThreadSleepDuration);
                }

                Reading = true;

                byte[]        ret    = new byte[length];
                Command_Error result = Read_Secure_Memory(address, ret, length);

                Reading = false;

                return(result == Command_Error.OK ? ret : new byte[0]);
            }
            catch (Exception ex)
            {
                string strEx = ex.ToString();
                Reading = false;
                return(new byte[0]);
            }
        }
        private static bool _connect(bool checkLastTime)
        {
            while (Connecting)
            {
                Thread.Sleep(ThreadSleepDuration);
            }

            try
            {
                Connecting = true;

                init_login();

                if (string.IsNullOrEmpty(Username) || string.IsNullOrEmpty(Password) ||
                    Username.ToLower() == "factory" || Username.ToLower() == "admin")
                {
                    return(Connecting = false);
                }
                else if (checkLastTime && LastTimeConnected.HasValue && LastTimeConnected.Value > DateTime.Now.AddMinutes(-5))
                {
                    return(!(Connecting = false));
                }

                Command_Error result = Connect_To_Device(Username, Password, (byte)Username.Length, (byte)Password.Length);

                Connecting = false;

                if (result == Command_Error.OK)
                {
                    LastTimeConnected = DateTime.Now;
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch
            {
                Connecting = false;
                return(false);
            }
        }