private void ParseSystemResponse(string line)
{
string key = line.Length >= 5 ? line.Substring(0, 5) : string.Empty;
switch (key)
{
case "[fb] ":
cnc.FirmwareBuild.Clear();
if (scanf.Parse(line, "[fb] firmware build %d.%d") == 2
&& scanf.Results.Count == 2)
{
cnc.FirmwareBuild.Major = (int)scanf.Results[0];
cnc.FirmwareBuild.Minor = (int)scanf.Results[1];
}
break;
case "[fv] ":
cnc.FirmwareVersion.Clear();
if (scanf.Parse(line, "[fv] firmware version %d.%d") == 2)
{
cnc.FirmwareVersion.Major = (int)scanf.Results[0];
cnc.FirmwareVersion.Minor = (int)scanf.Results[1];
}
break;
case "[hv] ":
cnc.HardwareVersion.Clear();
if (scanf.Parse(line, "[hv] hardware version %d.%d") == 2)
{
cnc.HardwareVersion.Major = (int)scanf.Results[0];
cnc.HardwareVersion.Minor = (int)scanf.Results[1];
}
break;
case "[id] ":
cnc.ID = string.Empty;
if (scanf.Parse(line, "[id] TinyG ID %s") == 1)
cnc.ID = (string)scanf.Results[0];
break;
case "[ja] ":
cnc.JunctionAcceleration.Default();
if (scanf.Parse(line, "[ja] junction acceleration %d %s") >= 1)
cnc.JunctionAcceleration.Set(scanf);
break;
case "[ct] ":
cnc.ChordalTolerance.Default();
if (scanf.Parse(line, "[ct] chordal tolerance %f %s") >= 1)
cnc.ChordalTolerance.Set(scanf);
break;
case "[st] ":
cnc.SwitchType.Value = SWITCH_TYPE.NormalOpen;
if (scanf.Parse(line, "[st] switch type %d [%s]") >= 1)
cnc.SwitchType.Set(scanf, UseResponseItems.Checked);
break;
case "[ej] ":
cnc.JsonMode.Value = JSON_MODE.Text;
if (scanf.Parse(line, "[ej] enable json mode %d [%s]") >= 1)
cnc.JsonMode.Set(scanf, UseResponseItems.Checked);
break;
case "[jv] ":
cnc.JsonVerbosity.Value = JSON_VERBOSITY.Linenum;
if (scanf.Parse(line, "[jv] json verbosity %d [%s]") >= 1)
cnc.JsonVerbosity.Set(scanf, UseResponseItems.Checked);
break;
case "[tv] ":
cnc.TextVerbosity.Value = TEXT_VERBOSITY.Verbose;
if (scanf.Parse(line, "[tv] text verbosity %d [%s]") >= 1)
cnc.TextVerbosity.Set(scanf, UseResponseItems.Checked);
break;
case "[qv] ":
cnc.QueueReportVerbosity.Value = REPORT_VERBOSITY.Filtered;
if (scanf.Parse(line, "[qv] queue report verbosity %d [%s]") >= 1)
cnc.QueueReportVerbosity.Set(scanf, UseResponseItems.Checked);
break;
case "[sv] ":
cnc.StatusReportVerbosity.Value = REPORT_VERBOSITY.Filtered;
if (scanf.Parse(line, "[sv] status report verbosity %d [%s]") >= 1)
cnc.StatusReportVerbosity.Set(scanf, UseResponseItems.Checked);
break;
case "[si] ":
cnc.StatusInterval = 100;
if (scanf.Parse(line, "[si] status interval %d ms") == 1)
cnc.StatusInterval = (int)scanf.Results[0];
break;
case "[ic] ":
cnc.IgnoreCRLF.Value = IGNORE_CRLF.Off;
if (scanf.Parse(line, "[ic] ignore CR or LF on RX %d [%s]") >= 1)
cnc.IgnoreCRLF.Set(scanf, UseResponseItems.Checked);
break;
case "[ec] ":
cnc.ExpandLF.Value = ON_OFF.Off;
if (scanf.Parse(line, "[ec] expand LF to CRLF on TX %d [%s]") >= 1)
cnc.ExpandLF.Set(scanf, UseResponseItems.Checked);
break;
case "[ee] ":
cnc.EnableEcho.Value = ON_OFF.Off;
if (scanf.Parse(line, "[ee] enable echo %d [%s]") >= 1)
cnc.EnableEcho.Set(scanf, UseResponseItems.Checked);
break;
case "[ex] ":
cnc.EnableXON.Value = ON_OFF.Off;
if (scanf.Parse(line, "[ex] enable xon xoff %d [%s]") >= 1)
cnc.EnableXON.Set(scanf, UseResponseItems.Checked);
break;
case "[gpl]":
cnc.DefaultGcodePlane.Value = GCODE_PLANE.G17;
if (scanf.Parse(line, "[gpl] default gcode plane %d [%s]") >= 1)
cnc.DefaultGcodePlane.Set(scanf, UseResponseItems.Checked);
break;
case "[gun]":
cnc.DefaultGcodeUnits.Value = GCODE_UNIT.G21;
if (scanf.Parse(line, "[gun] default gcode units mode %d [%s]") >= 1)
cnc.DefaultGcodeUnits.Set(scanf, UseResponseItems.Checked);
break;
case "[gco]":
cnc.DefaultGcodeCoord.Value = GCODE_COORD.G54;
if (scanf.Parse(line, "[gco] default gcode coord system %d") == 1)
cnc.DefaultGcodeCoord.Set(scanf, false);
break;
case "[gpa]":
cnc.DefaultGcodePath.Value = GCODE_PATH.G64;
if (scanf.Parse(line, "[gpa] default gcode path control %d [%s]") >= 1)
cnc.DefaultGcodePath.Set(scanf, UseResponseItems.Checked);
break;
case "[gdi]":
cnc.DefaultGcodeDistance.Value = GCODE_DISTANCE.G90;
if (scanf.Parse(line, "[gdi] default gcode distance mode %d [%s]") >= 1)
cnc.DefaultGcodeDistance.Set(scanf, UseResponseItems.Checked);
break;
case "[baud":
cnc.UsbBaudRate.Value = USB_BAUDRATE.Speed_115200;
if (scanf.Parse(line, "[baud] USB baud rate %d [%s]") >= 1)
cnc.UsbBaudRate.Set(scanf, UseResponseItems.Checked);
break;
default:
LogAppend("Unknown:" + line, Color.OrangeRed);
break;
}
}