private void completeStatusQueryRequest(GrblResponseStatus status) { lock (pendingRequests) { if (pendingStatusQueryRequest != null) { pendingStatusQueryRequest.Complete(status); pendingStatusQueryRequest = null; } } }
private void completeQueuedRequest(GrblResponseStatus status, int?errorCode = null) { lock (pendingRequests) { if (!pendingRequests.IsEmpty) { GrblRequest request = pendingRequests.Dequeue(); if (request.Type == GrblRequestType.Homing) { pendingHomingRequest = false; } if (!errorCode.HasValue) { request.Complete(status); } else { request.Complete(status, errorCode.Value); } } } }
public bool Send(GrblRequest request) { if (request.ResponseStatus != GrblResponseStatus.Unsent) { throw new InvalidOperationException(); } if (request.FireAndForget) { try { request.Sent(); #if LOG_TRAFFIC_CONSOLE Console.WriteLine("SENT: " + request.Message); #endif serialWrite(request.Message); request.Complete(GrblResponseStatus.Silent); } catch (Exception e) { Debug.WriteLine(e); request.Complete(GrblResponseStatus.Failure); } return(true); } lock (pendingRequests) { if ((request.Message.Length > TxRxBufferSize - pendingRequests.CharacterCount) || (pendingStatusQueryRequest != null && request.Type == GrblRequestType.StatusQuery) || pendingHomingRequest) { return(false); } try { request.Sent(); #if LOG_TRAFFIC_CONSOLE Console.WriteLine("SENT: " + request.Message); #endif serialWrite(request.Message); } catch (Exception e) { Debug.WriteLine(e); serialPort.Close(); request.Complete(GrblResponseStatus.Failure); return(true); } if (request.Type != GrblRequestType.StatusQuery) { pendingRequests.Enqueue(request); if (request.Type == GrblRequestType.Homing) { pendingHomingRequest = true; } } else { pendingStatusQueryRequest = request; } } return(true); }