Exemplo n.º 1
0
 private void completeStatusQueryRequest(GrblResponseStatus status)
 {
     lock (pendingRequests)
     {
         if (pendingStatusQueryRequest != null)
         {
             pendingStatusQueryRequest.Complete(status);
             pendingStatusQueryRequest = null;
         }
     }
 }
Exemplo n.º 2
0
        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);
                    }
                }
            }
        }
Exemplo n.º 3
0
        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);
        }