protected override void onEnter(Trigger trigger) { stateTimeoutTransition.Reset(); request = GrblRequest.CreateJoggingRequest(trigger.Parameter); controller.RequestStatusQueryInterval(RapidStatusQueryIntervalSecs); }
public bool Add(GrblRequest request) { if (IsRunning) { return(_messagePacker.Add(request)); } return(false); }
protected override void onStep() { if (controller.LatestStatus.State != GrblStatus.MachineState.Hold && controller.LatestStatus.State != GrblStatus.MachineState.Hold0 && controller.LatestStatus.State != GrblStatus.MachineState.Hold1) { retrySend(timeout, GrblRequest.CreateFeedHoldRequest()); } }
private void resetConnectionState() { ClearResetDetected(); LatestStatus = GrblStatus.Unknown; clearTrigger(); clearReceivedLines(); statusQueryTimeout.Zero(); pendingStatusQueryRequest = null; }
protected override void onStep() { retrySend(retryTimeout, GrblRequest.CreateJogCancelRequest()); if (controller.LatestStatus.State == GrblStatus.MachineState.Jog) { stateTimeoutTransition.Reset(); } }
protected virtual int GetAndStoreResponse() { int result = 0; while (_rxData.Count > 0) { char[] buffer; if (_rxData.TryDequeue(out buffer)) { if (_responseDoing == null) { _responseDoing = new GrblResponse(); } _responseDoing.SetContent(new string(buffer)); if (_responseDoing.IsFinished) { if (_requestDoing != null) { if (_requestDoing.IsRequestType(GrblRequestEnum.CurrentStatus)) { if (_responseDoing.IsResponseType(GrblResponseEnum.Status)) { _responseDoing.SetRequest(_requestDoing); _requestDoing.SetResponse(_responseDoing); } else if (_tempRequestDoing != null) { _responseDoing.SetRequest(_tempRequestDoing); _tempRequestDoing.SetResponse(_responseDoing); } } else { _responseDoing.SetRequest(_requestDoing); _requestDoing.SetResponse(_responseDoing); } if (_requestDoing.IsFinished) { RequestsDone.Add(_requestDoing); if (_tempRequestDoing != null && _tempRequestDoing.IsFinished) { RequestsDone.Add(_tempRequestDoing); _tempRequestDoing = null; } _requestDoing = _tempRequestDoing; _tempRequestDoing = null; } } result++; Responses.Add(_responseDoing); _responseDoing = null; } } } return(result); }
protected override void onStep() { if (retrySend(timeout, GrblRequest.CreateSoftResetRequest())) { } else if (controller.ResetDetected) { controller.TransitionTo(controller.ReadyState); } }
protected override void onStep() { if (controller.LatestStatus.State == GrblStatus.MachineState.Hold || controller.LatestStatus.State == GrblStatus.MachineState.Hold0 || controller.LatestStatus.State == GrblStatus.MachineState.Hold1) { retrySend(retryTimeout, GrblRequest.CreateCycleResumeRequest()); stateTimeoutTransition.Reset(); } }
public virtual bool Add(string line) { GrblRequest request = new GrblRequest(); request.SetContent(line); if (request.IsRequestType(GrblRequestEnum.GCode)) { request = new GCommand(line, true); } return(Add(request)); }
private void pollStatusReport() { if (statusQueryTimeout.Expired(statusQueryInterval) && pendingStatusQueryRequest == null) { GrblRequest request = GrblRequest.CreateStatusQueryRequest(); if (ActiveConnection.Send(request)) { statusQueryTimeout.Reset(); pendingStatusQueryRequest = request; } } }
protected bool retrySend(StopWatch timeout, GrblRequest request) { if (timeout.Expired(TimeSpan.FromSeconds(RetryTimeoutSecs))) { if (controller.ActiveConnection.Send(request)) { timeout.Reset(); } return(true); } return(false); }
public MessagePacker() { _rxData = null; _txData = null; SaveRejectedRequests = true; RequestsToDo = new ConcurrentObservableCollection <GrblRequest>(); RequestsDone = new ConcurrentObservableCollection <GrblRequest>(); SpecialRequests = new ConcurrentObservableCollection <GrblRequest>(); Responses = new ConcurrentObservableCollection <GrblResponse>(); RequestsRejected = new ConcurrentObservableCollection <GrblRequest>(); _requestDoing = null; _responseDoing = null; RequestTimeout = 2000; PauseOnReject = true; AllowSpecialWhenHalted = true; }
protected virtual bool CheckIfCancelRequest() { if (_requestDoing != null) { if (_requestCancelSource.Token.IsCancellationRequested) { RequestsRejected.Add(_requestDoing); _requestDoing = null; if (PauseOnReject) { IsPaused = true; return(true); } } } return(false); }
protected virtual void ThreadMainCleanup() { while (RequestsToDo.Count > 0) { RequestsRejected.Add(RequestsToDo.Pop()); } if (_requestDoing != null) { RequestsRejected.Add(_requestDoing); } _requestDoing = null; if (_requestCancelSource != null) { _requestCancelSource.Dispose(); } _runThread = null; }
protected virtual int GetAndSendSpecial() { int result = 0; while (SpecialRequests.Count > 0) { GrblRequest specialRequest = SpecialRequests.Pop(); if (specialRequest.IsRequestType(GrblRequestEnum.CurrentStatus)) { GetAndSendRequest(specialRequest); } else { specialRequest.Stamp(); _txData.Enqueue(specialRequest.Content.ToCharArray()); RequestsDone.Add(specialRequest); result++; } } return(result); }
private void _statusTimer_Elapsed(object sender, ElapsedEventArgs e) { if (ViewModelLocator.TcpGrblClient.IsConnected) { if (_statusRequest == null) { _statusRequest = new GuiRequest(); _statusRequest.SetContent("?"); if (!ViewModelLocator.TcpGrblClient.Add(_statusRequest)) { _statusRequest = null; } } else if (_statusRequest.IsFinished) { ViewModelLocator.GrblSettings.Parse(_statusRequest.Response); RaiseAllProperties(); _statusRequest = null; } } _statusTimer.Start(); }
protected virtual bool GetAndSendRequest(GrblRequest request = null) { bool result = false; if (_requestDoing == null || request != null && _tempRequestDoing == null) { _tempRequestDoing = _requestDoing; _requestDoing = request; if (_requestDoing == null) { RequestsToDo.TryDequeue(out _requestDoing); } if (_requestDoing != null) { if (_requestDoing.IsValid && !_requestDoing.IsStamped) { _requestDoing.Stamp(); if (_requestDoing.IsSpecial) { _txData.Enqueue((_requestDoing.Content).ToCharArray()); } else { _txData.Enqueue((_requestDoing.Content + "\n").ToCharArray()); } _requestCancelSource.Dispose(); _requestCancelSource = new CancellationTokenSource(); result = true; } if (_requestDoing.IsFinished) { RequestsDone.Add(_requestDoing); _requestDoing = null; } } } return(result); }
public virtual bool Add(GrblRequest request) { if (IsRunning) { if (request.IsValid) { if (request.IsSpecial) { SpecialRequests.Add(request); } else { RequestsToDo.Add(request); } return(true); } else if (SaveRejectedRequests) { RequestsRejected.Add(request); } } return(false); }
private void processReceivedLines() { for (string line = dequeueReceivedLine(); line != null; line = dequeueReceivedLine()) { if (line.StartsWith("<")) { GrblStatus status = GrblStatus.Parse(line); if (status != null) { if (!status.Equals(LatestStatus)) { LatestStatus = status; } pendingStatusQueryRequest = null; } } else if (line.StartsWith("Grbl ")) { resetConnectionState(); ResetDetected = true; } } }
protected override void onStep() { if (retrySend(retryTimeout, GrblRequest.CreateFeedHoldRequest())) { } }
protected override void onEnter(Trigger trigger) { request = GrblRequest.CreateHomingRequest(); }
protected override void onStep() { if (retrySend(retryTimeout, GrblRequest.CreateKillAlarmRequest())) { } }