Пример #1
0
        public Task <ArduinoMessage> SendMessageAsync(ArduinoMessage msg)
        {
            LogMessage(msg);

            if (!_port.IsOpen)
            {
                return(new Task <ArduinoMessage>(() => new ArduinoMessage()));
            }

            var bytes = msg.ToBytes();

            _port.Write(bytes, 0, bytes.Length);

            var excpectedResponseCmd = Matcher.RequestResponse[msg.Command];

            var tcs = new TaskCompletionSource <ArduinoMessage>();
            var res = new AwaitingMessage
            {
                ExceptedResponseCommand = excpectedResponseCmd,
                Action = (m) =>
                {
                    tcs.TrySetResult(m);
                }
            };

            _messageQueue.Enqueue(res);

            return(tcs.Task);
        }