private bool CheckAndSoSetFeedSpeed(string token, ref GRBLRealtimeStatus status)
    {
        token = token.ToLower();
        if (token.IndexOf("fs:") == 0)
        {
            string[] t = token.Substring(3).Split(',');
            int      realtimeSpeedRate, spindleSpeed;
            if (t.Length > 1 && int.TryParse(t[0], out realtimeSpeedRate) &&
                int.TryParse(t[1], out spindleSpeed))
            {
                status.m_realtimeFeedRate = realtimeSpeedRate;
                status.m_spindleSpeed     = spindleSpeed;
                return(true);
            }
        }
        else if (token.IndexOf("f:") == 0)
        {
            int realtimefeedrate = 0;
            if (int.TryParse(token.Substring(2), out realtimefeedrate))
            {
                status.m_realtimeFeedRate = realtimefeedrate;

                return(true);
            }
        }

        return(false);
    }
    private bool CheckAndSoSetPosition(string token, ref GRBLRealtimeStatus status)
    {
        try
        {
            token = token.ToLower();
            float x, y, z;
            if (RecoverVector3Value(token, "mpos:", out x, out y, out z))
            {
                status.m_motorPosition.x = x;
                status.m_motorPosition.y = y;
                status.m_motorPosition.z = z;

                status.m_workspacePosition.x = x - status.m_workCoordinateOffset.x;
                status.m_workspacePosition.y = y - status.m_workCoordinateOffset.y;
                status.m_workspacePosition.z = z - status.m_workCoordinateOffset.z;
                return(true);
            }
            else if (RecoverVector3Value(token, "wco:", out x, out y, out z))
            {
                status.m_workCoordinateOffset.x = x;
                status.m_workCoordinateOffset.y = y;
                status.m_workCoordinateOffset.z = z;
                return(true);
            }
            else if (RecoverVector3Value(token, "ov:", out x, out y, out z))
            {
                status.m_overrideValueInPourcent.x = x;
                status.m_overrideValueInPourcent.y = y;
                status.m_overrideValueInPourcent.z = z;
                return(true);
            }
            else if (RecoverVector3Value(token, "wpos:", out x, out y, out z))
            {
                status.m_workspacePosition.x = x;
                status.m_workspacePosition.y = y;
                status.m_workspacePosition.z = z;
                status.m_motorPosition.x     = x + status.m_workCoordinateOffset.x;
                status.m_motorPosition.y     = y + status.m_workCoordinateOffset.y;
                status.m_motorPosition.z     = z + status.m_workCoordinateOffset.z;

                return(true);
            }
        }
        catch { return(false); }
        return(false);
    }
 private bool CheckAndSoSetState(string token, ref GRBLRealtimeStatus status)
 {
     token = token.ToLower();
     if (token == "idle")
     {
         status.m_currentState = GRBLState.Idle; return(true);
     }
     if (token == "run")
     {
         status.m_currentState = GRBLState.Run; return(true);
     }
     if (token == "hold")
     {
         status.m_currentState = GRBLState.Hold; return(true);
     }
     if (token == "job")
     {
         status.m_currentState = GRBLState.Jog; return(true);
     }
     if (token == "alarm")
     {
         status.m_currentState = GRBLState.Alarm; return(true);
     }
     if (token == "door")
     {
         status.m_currentState = GRBLState.Door; return(true);
     }
     if (token == "check")
     {
         status.m_currentState = GRBLState.Check; return(true);
     }
     if (token == "home")
     {
         status.m_currentState = GRBLState.Home; return(true);
     }
     if (token == "sleep")
     {
         status.m_currentState = GRBLState.Sleep; return(true);
     }
     return(false);
 }