public bool Update() { if (GrblSettings.Loaded) { xspeed = GrblSettings.GetDouble(GrblSetting.AxisSetting_XMaxRate); xaccel = GrblSettings.GetDouble(GrblSetting.AxisSetting_XAcceleration); zspeed = GrblSettings.GetDouble(GrblSetting.AxisSetting_ZMaxRate); zaccel = GrblSettings.GetDouble(GrblSetting.AxisSetting_ZAcceleration); rpm_min = GrblSettings.GetDouble(GrblSetting.RpmMin); rpm_max = GrblSettings.GetDouble(GrblSetting.RpmMax); GrblParserState.Get(); metric = GrblParserState.IsActive("G21") != null; if (!xmodelock) { xmode = GrblInfo.LatheXMode; } if (dialog != null) { dialog.InitUI(); // use event instead? } } return(GrblSettings.Loaded); }
public static void Get() { Comms.com.DataReceived += new DataReceivedHandler(GrblParserState.Process); Comms.com.PurgeQueue(); Comms.com.WriteCommand(GrblConstants.CMD_GETPARSERSTATE); while (Comms.com.CommandState == Comms.State.DataReceived || Comms.com.CommandState == Comms.State.AwaitAck) { Application.DoEvents(); } Comms.com.DataReceived -= GrblParserState.Process; GrblInfo.LatheXMode = GrblParserState.IsActive("G7") == null ? LatheMode.Radius : LatheMode.Diameter; }
void DataReceived(string data) { if (data.Length == 0) { return; } if (this.GCodeView.InvokeRequired) { this.BeginInvoke(new GcodeCallback(DataReceived), new object[] { data }); } else if (data.Substring(0, 1) == "<") { bool parseState = true; data = data.Remove(data.Length - 1); if (!data.Contains("|Pn:")) { data += "|Pn:"; } string[] elements = data.Split('|'); foreach (string e in elements) { string[] pair = e.Split(':'); if (parseState) { SetGRBLState(pair[0].Substring(1), pair.Count() == 1 ? -1 : int.Parse(pair[1]), false); parseState = false; } else if (parameters.Set(pair[0], pair[1])) { if (pair[0] == "MPG") { SetStreamingState(pair[1] == "1" ? StreamingState.Disabled : StreamingState.Idle); } else if (GrblParameterChanged != null) { GrblParameterChanged(pair[0], pair[1]); } } } if (JobTimer.IsRunning && !JobTimer.IsPaused) { this.txtRunTime.Text = JobTimer.RunTime; } } else if (data.StartsWith("ALARM")) { SetGRBLState("Alarm", -1, false); } else if (data.StartsWith("[GC:")) { GrblParserState.Process(data); } else if (data.StartsWith("[")) { if (!this.file.Loaded && data == "[MSG:Pgm End]") { SetStreamingState(StreamingState.NoFile); } if (GrblMessage != null) { GrblMessage(data); } } else if (this.streamingState != StreamingState.Jogging) { if (data != "ok" && GrblMessage != null) { GrblMessage(data.StartsWith("error:") ? GrblErrors.GetMessage(data.Substring(6)) : data); } if (this.ACKPending > 0 && this.streamingState == StreamingState.Send) { this.ACKPending--; if ((string)file.Data.Rows[this.PendingLine]["Sent"] == "*") { this.serialUsed -= (int)file.Data.Rows[this.PendingLine]["Length"]; } if (this.serialUsed < 0) { this.serialUsed = 0; } file.Data.Rows[this.PendingLine]["Sent"] = data; if (this.PendingLine > 5) { this.GCodeView.FirstDisplayedScrollingRowIndex = this.PendingLine - 5; } if (this.streamingState == StreamingState.Send) { if (data.StartsWith("error")) { SetStreamingState(StreamingState.Halted); } else if ((this.pgmComplete = this.PgmEndLine == this.PendingLine)) { this.ACKPending = this.CurrLine = 0; if (this.grblState.State == GrblStates.Idle) { SetGRBLState(GrblStates.Idle.ToString(), -1, true); } } else { SendNextLine(); } } this.PendingLine++; } switch (this.streamingState) { case StreamingState.Send: SendNextLine(); break; case StreamingState.SendMDI: if (file.commands.Count > 0) { Comms.com.WriteCommand(file.commands.Dequeue()); } if (file.commands.Count == 0) { this.streamingState = StreamingState.Idle; } break; case StreamingState.Reset: Comms.com.WriteCommand(GrblConstants.CMD_UNLOCK); this.streamingState = StreamingState.AwaitResetAck; break; case StreamingState.AwaitResetAck: SetStreamingState(this.file.Loaded ? StreamingState.Idle : StreamingState.NoFile); break; } } }