connect method

  1. @override
Future<bool?> connect({
  1. required String macAddress,
})
override

connect connects to a BLE device.

Implementation

@override
Future<bool?> connect({required String macAddress}) async {
  if (!_devices.containsKey(macAddress)) {
    log("Device not found: $macAddress");
    return false;
  }

  final device = _devices[macAddress]!;

  await device.connect(timeout: null);
  _currentConnected = device;
  _services.clear();
  try {
    _currentConnected!.discoverServices();
    final services = await _currentConnected!.discoverServices();

    for (final service in services) {
      final characteristics = await service.getCharacteristics();
      final bleCharacteristics = characteristics.map((c) {
        return BleCharacteristic(
          uuid: c.uuid,
          properties: [
            if (c.properties.read) BleProperty.read,
            if (c.properties.write) BleProperty.write,
            if (c.properties.notify) BleProperty.notify,
            if (c.properties.indicate) BleProperty.indicate,
            if (c.properties.authenticatedSignedWrites) BleProperty.authenticatedSignedWrites,
            if (c.properties.broadcast) BleProperty.broadcast,
            if (c.properties.writableAuxiliaries) BleProperty.extendedProperties,
            if (c.properties.writeWithoutResponse) BleProperty.writeWithoutResponse,
          ],
        );
      }).toList();

      _services.add(BleService(
        uuid: service.uuid,
        characteristics: bleCharacteristics,
      ));
    }
  } catch (e) {
    log("Error discovering services: $e");
    _currentConnected = null;
    return false;
  }

  return true;
}