Esempio n. 1
0
        public GrblRequest Dequeue()
        {
            GrblRequest request = backingQueue.Dequeue();

            CharacterCount -= request.Message.Length;
            return(request);
        }
Esempio n. 2
0
 private void completeStatusQueryRequest(GrblResponseStatus status)
 {
     lock (pendingRequests)
     {
         if (pendingStatusQueryRequest != null)
         {
             pendingStatusQueryRequest.Complete(status);
             pendingStatusQueryRequest = null;
         }
     }
 }
Esempio n. 3
0
        private void checkRequests()
        {
            while (pendingRequests.Count > 0)
            {
                if (pendingRequests.Peek().ResponseStatus == GrblResponseStatus.Pending)
                {
                    break;
                }

                GrblRequest request = pendingRequests.Dequeue();
                CurrentLine = request.LineNumber + 1;
                if (request.ResponseStatus != GrblResponseStatus.Ok &&
                    request.ResponseStatus != GrblResponseStatus.Silent)
                {
                    ErrorsDetected = true;
                }
            }
        }
Esempio n. 4
0
        private void sendLines(GrblConnection connection)
        {
            while (nextLine < Lines.Count)
            {
                GrblRequest request = GrblRequest.CreateGCodeRequest(Lines[nextLine], nextLine);
                if (!connection.Send(request))
                {
                    break;
                }
                if (request.ResponseStatus == GrblResponseStatus.Failure)
                {
                    break;
                }

                pendingRequests.Enqueue(request);
                nextLine++;
            }
        }
Esempio n. 5
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);
                    }
                }
            }
        }
Esempio n. 6
0
 public void Enqueue(GrblRequest request)
 {
     backingQueue.Enqueue(request);
     CharacterCount += request.Message.Length;
 }
Esempio n. 7
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);
        }