コード例 #1
0
        private async Task TransmitMessageInternalAsync(HciMessage message)
        {
            // todo should controlfield be hardcoded?
            byte controlField = 0b1000;
            var  endpointId   = (byte)message.EndpointIdentifier;

            var combinedControlFieldAndEndPointId = (byte)((controlField << 4) | endpointId);

            var bytes = new List <byte>()
            {
                combinedControlFieldAndEndPointId, message.MessageIdentifier
            };

            IList <byte>?payload = message.Payload;

            if (payload?.Count > 0)
            {
                var length = checked ((byte)payload.Count);
                bytes.Add(length);
                bytes.AddRange(payload);
            }
            else
            {
                bytes.Add(0x00);
            }

            bytes.AppendCrc();
            bytes.Insert(0, StartOfFrame);

            _logger.LogTrace("Marshalled {message} into {bytes}. Transmitting...", message, bytes.ToHexString());
            await _serialConnection.BaseStream.WriteAsync(bytes.ToArray(), 0, bytes.Count);
        }
コード例 #2
0
        /// <summary>
        /// Transmits the passed <paramref name="message"/> to the physical dongle.
        /// </summary>
        /// <param name="message">the message to be sent.</param>
        /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
        public Task TransmitMessage(HciMessage message)
        {
            if (!(message is ITransmittable))
            {
                throw new ArgumentException($"{message} not marked as {nameof(ITransmittable)}");
            }

            return(TransmitMessageInternalAsync(message));
        }
コード例 #3
0
 private static async Task Test(HciMessage arg)
 {
     Console.WriteLine(arg);
     //Console.WriteLine("got it!");
     await Task.CompletedTask;
 }