connect method

Future<void> connect(
  1. BleDeviceId deviceId, {
  2. Duration timeout = const Duration(seconds: 10),
})

Implementation

Future<void> connect(
  BleDeviceId deviceId, {
  Duration timeout = const Duration(seconds: 10),
}) {
  if (_lifecycle == _ProbeLifecycle.connecting &&
      _connectionDevice == deviceId) {
    return _connectFuture!;
  }
  if (_lifecycle != _ProbeLifecycle.idle &&
      _lifecycle != _ProbeLifecycle.scanning) {
    return Future<void>.error(_invalidLifecycle('connect'));
  }

  final completer = Completer<void>();
  final generation = ++_connectionGeneration;
  final deadline = _MonotonicDeadline(timeout);
  _lifecycle = _ProbeLifecycle.connecting;
  _connectionDevice = deviceId;
  _connectionSetupStarted = false;
  _connectCompleter = completer;
  _connectFuture = completer.future;
  _connectionTimer = Timer(timeout, () {
    _startConnectionFailure(
      generation,
      _connectionTimeoutFailure(timeout),
      StackTrace.current,
      prefix: 'connection timed out',
    );
  });

  if (_scanSubscription == null &&
      _scanCompleter == null &&
      _scanStopFuture == null) {
    _listenForConnection(deviceId, deadline, generation);
  } else {
    unawaited(_beginConnection(deviceId, deadline, generation));
  }
  return completer.future;
}