public override async Task TransmitDataAsync(byte[] data, CancellationToken cancellationToken, bool enableAck = true) { if (Address == null) { throw new InvalidOperationException("Can't send data to local device."); } if (_maxPayloadLength == null) { _maxPayloadLength = await GetMaximumTransmitPayloadLengthAsync(); } var dataStream = new MemoryStream(data); int read; // ReSharper disable once PossibleInvalidOperationException byte[] block = new byte[_maxPayloadLength.Value]; while ((read = dataStream.Read(block, 0, block.Length)) > 0) { var readBlock = new byte[read]; Array.Copy(block, readBlock, readBlock.Length); var transmitRequest = new TxRequestFrame(Address.LongAddress, readBlock); if (!enableAck) { transmitRequest.Options = TransmitOptions.DisableAck; await Controller.ExecuteAsync(transmitRequest).ConfigureAwait(false); } else { var response = await Controller.ExecuteQueryAsync <TxStatusFrame>(transmitRequest, cancellationToken) .ConfigureAwait(false); if (response.Status != DeliveryStatus.Success) { throw new XBeeException($"Delivery failed with status code '{response.Status}'."); } } } }
public override async Task TransmitDataAsync(byte[] data, CancellationToken cancellationToken, bool enableAck = true) { if (Address == null) { throw new InvalidOperationException("Can't send data to local device."); } var transmitRequest = new TxRequestFrame(Address.LongAddress, data); if (!enableAck) { transmitRequest.Options = TransmitOptions.DisableAck; await Controller.ExecuteAsync(transmitRequest, cancellationToken); } else { TxStatusFrame response = await Controller.ExecuteQueryAsync <TxStatusFrame>(transmitRequest, cancellationToken); if (response.Status != DeliveryStatus.Success) { throw new XBeeException($"Delivery failed with status code '{response.Status}'."); } } }