// to disconnect
        public static int DisconnectCS200()
        {
            StringBuilder returnString = new StringBuilder(250);
            string        cMeasure     = "RMT,0\r\n";
            int           length       = cMeasure.Length;

            int r = CaptureEngine.write64_usb(0, cMeasure, 1, length);

            r = CaptureEngine.read64_usb(0, returnString, 1, 250);

            int i = CaptureEngine.end_usb(0);

            return(i);
        }
        /// <summary>
        /// function to connect cs200
        /// </summary>
        /// <returns>1 if connected sucessfully ,0 if not</returns>
        public static int ConnectToCS200()
        {
            int           i            = CaptureEngine.end_usb(0);
            StringBuilder returnString = new StringBuilder(250);
            int           numOfDevices = CaptureEngine.get_num();

            //to check if the device is connected
            if (numOfDevices > 0)
            {
                int    returnvar = CaptureEngine.int_usb(0);
                string cRemote   = "RMT,1\r\n";
                int    length    = cRemote.Length;

                int r = CaptureEngine.write64_usb(0, cRemote, 1, length);
                r = CaptureEngine.read64_usb(0, returnString, 1, 250);
                return(returnvar);
            }
            else
            {
                return(1);
            }
        }
        public static CIEXYZ StartMeasureXYZForPhone()
        {
            int time1 = 500;

            if (caputerIndex != 1)
            {
                System.Threading.Thread.Sleep(2350);
            }
            caputerIndex = 0;
            StringBuilder returnString = new StringBuilder(250);
            //measure
            string cMeasure = "MES,1\r\n";
            int    length   = cMeasure.Length;

            int r = CaptureEngine.write64_usb(0, cMeasure, 1, length);

            r = CaptureEngine.read64_usb(0, returnString, 1, 250);

            string waittime = returnString.ToString(5, 2);

            CIEXYZ xyz = new CIEXYZ(0, 0, 0);
            int    t   = Convert.ToInt32(waittime);

            t = t * 1000;
            t = t - 500;
            int temp = t;


            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //take the if out for any other than phone
            //
            if (t < 800)
            {
                System.Threading.Thread.Sleep(t);

                cMeasure = "MDR,3\r\n";
                length   = cMeasure.Length;

                r = CaptureEngine.write64_usb(0, cMeasure, 1, length);
                r = CaptureEngine.read64_usb(0, returnString, 1, 250);

                string error = returnString.ToString(0, 4);

                while (error == "ER02")
                {
                    t = t + 300;
                    if (t < 800)
                    {
                        //System.Threading.Thread.Sleep(300);
                        cMeasure = "MDR,3\r\n";
                        length   = cMeasure.Length;

                        r     = CaptureEngine.write64_usb(0, cMeasure, 1, length);
                        r     = CaptureEngine.read64_usb(0, returnString, 1, 250);
                        error = returnString.ToString(0, 4);
                    }
                    else
                    {
                        int tMinus = Math.Abs(2750);
                        //System.Threading.Thread.Sleep(500);
                        xyz      = new CIEXYZ(0, 0, 0);
                        xyz.stdx = t;
                        xyz.stdy = 0;
                        xyz.stdz = 0;
                        break;
                    }
                }

                if (t < 800)
                {
                    string op = returnString.ToString();
                    string x  = returnString.ToString(27, 10);
                    string y  = returnString.ToString(39, 10);
                    string z  = returnString.ToString(51, 10);

                    double X = Convert.ToDouble(x) / 100;
                    double Y = Convert.ToDouble(y) / 100;
                    double Z = Convert.ToDouble(z) / 100;

                    xyz      = new CIEXYZ(X, Y, Z);
                    xyz.stdx = t;
                    xyz.stdy = 1;
                    xyz.stdz = 1;
                }
            }
            else
            {
                System.Threading.Thread.Sleep(500);

                xyz      = new CIEXYZ(-1, -1, -1);
                xyz.stdx = 0;
                xyz.stdy = 0;
                xyz.stdz = 0;
            }
            return(xyz);
        }
        /// <summary>
        /// function to get XYZ vales from CS200
        /// </summary>
        /// <returns></returns>
        public static CIEXYZ StartMeasureXYZ()
        {
            StringBuilder returnString = new StringBuilder(250);
            //measure
            string cMeasure = "MES,1\r\n";
            int    length   = cMeasure.Length;

            int r = CaptureEngine.write64_usb(0, cMeasure, 1, length);

            r = CaptureEngine.read64_usb(0, returnString, 1, 250);

            string waittime = returnString.ToString(5, 2);


            int t = Convert.ToInt32(waittime);

            t = t * 1000;
            t = t - 500;

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //take the if out for any other than phone
            //

            System.Threading.Thread.Sleep(t);

            cMeasure = "MDR,3\r\n";
            length   = cMeasure.Length;

            r = CaptureEngine.write64_usb(0, cMeasure, 1, length);
            r = CaptureEngine.read64_usb(0, returnString, 1, 250);

            string error = returnString.ToString(0, 4);

            if (error == "ER21")
            {
                CIEXYZ xyz = new CIEXYZ(0, 0, 0);
                xyz.stdx = t;
                xyz.stdy = 0;
                xyz.stdz = 0;
                return(xyz);
            }

            while (error == "ER02")
            {
                t = t + 300;
                System.Threading.Thread.Sleep(300);
                cMeasure = "MDR,3\r\n";
                length   = cMeasure.Length;

                r     = CaptureEngine.write64_usb(0, cMeasure, 1, length);
                r     = CaptureEngine.read64_usb(0, returnString, 1, 250);
                error = returnString.ToString(0, 4);
            }

            if (error == "ER21")
            {
                CIEXYZ xyz = new CIEXYZ(0, 0, 0);
                xyz.stdx = t;
                xyz.stdy = 0;
                xyz.stdz = 0;
                return(xyz);
            }
            else
            {
                string op = returnString.ToString();
                string x  = returnString.ToString(27, 10);
                string y  = returnString.ToString(39, 10);
                string z  = returnString.ToString(51, 10);

                double X = Convert.ToDouble(x) / 100;
                double Y = Convert.ToDouble(y) / 100;
                double Z = Convert.ToDouble(z) / 100;

                CIEXYZ xyz = new CIEXYZ(X, Y, Z);
                xyz.stdx = t;
                xyz.stdy = 0;
                xyz.stdz = 0;

                return(xyz);
            }
        }