コード例 #1
0
ファイル: PrinterConnection.cs プロジェクト: urish/M3D
        public bool DoInitialHandShaking()
        {
            var result = 0;

            Thread.Sleep(1000);
            var asciiEncoding = new ASCIIEncoding();

            try
            {
                var stopwatch1 = new Stopwatch();
                stopwatch1.Stop();
                stopwatch1.Reset();
                stopwatch1.Start();
                var stopwatch2 = new Stopwatch();
                stopwatch2.Stop();
                stopwatch2.Reset();
                stopwatch2.Start();
                WriteToSerial(asciiEncoding.GetBytes("M115\r\n"));
                InternalLogger.WriteLog("<< M115 :ASCII:", Logger.TextType.Write);
                var flag1 = true;
                var flag2 = false;
                var flag3 = false;
                var input = "";
                while (!shared_shutdown.Value)
                {
                    if (flag1 && stopwatch2.ElapsedMilliseconds > 2000L)
                    {
                        if (!flag2)
                        {
                            if (!WriteToSerial(asciiEncoding.GetBytes("M115\r\n")))
                            {
                                return(false);
                            }

                            InternalLogger.WriteLog("<< M115 :ASCII:(Resend)", Logger.TextType.Write);
                            stopwatch2.Stop();
                            stopwatch2.Reset();
                            stopwatch2.Start();
                            flag2 = true;
                        }
                        else
                        {
                            flag3 = true;
                        }
                    }
                    input += ReadExisting();
                    Match match = Regex.Match(input, "B\\d+", RegexOptions.CultureInvariant);
                    if (match.Success)
                    {
                        var str2 = match.Value;
                        if (!int.TryParse(str2.Substring(1), out result))
                        {
                            result = 0;
                        }

                        stopwatch1.Stop();
                        InternalLogger.WriteLog(">> " + str2, Logger.TextType.Read);
                        ControllerSelf = new BootloaderController(result, this, printerInfo, internal_logger, shared_shutdown, broadcastserver, MyPrinterProfile);
                        return(true);
                    }
                    var startIndex = input.IndexOf("ok");
                    if (startIndex >= 0)
                    {
                        if (flag1)
                        {
                            return(false);
                        }

                        stopwatch1.Stop();
                        ControllerSelf = new FirmwareController(input.Substring(startIndex), this, printerInfo, internal_logger, shared_shutdown, broadcastserver, MyPrinterProfile);
                        RegisterFirmwarePlugins();
                        return(true);
                    }
                    var length = input.IndexOf('\n');
                    if (length >= 0)
                    {
                        var str2 = input.Substring(0, length);
                        input = input.Substring(length + 1);
                        InternalLogger.WriteLog(">> " + str2, Logger.TextType.Read);
                        if (str2.Contains("e"))
                        {
                            flag3 = true;
                        }
                    }
                    if (flag3)
                    {
                        flag3 = false;
                        input = "";
                        if (!WriteToSerial(new GCode()
                        {
                            M = 115
                        }.getBinary(2)))
                        {
                            return(false);
                        }

                        InternalLogger.WriteLog("<< M115", Logger.TextType.Write);
                        flag1 = false;
                    }
                }
            }
            catch (Exception ex)
            {
                ErrorLogger.LogException("Exception in PrinterConnector.DoInitialHandshaking 3 " + ex.Message, ex);
                return(false);
            }
            return(false);
        }