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); }
/// <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)); }
private static async Task Test(HciMessage arg) { Console.WriteLine(arg); //Console.WriteLine("got it!"); await Task.CompletedTask; }