main
1import 'dart:async';
2import 'dart:io';
3
4import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_low_energy/ble_device.dart';
5import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_low_energy/ble_discovery.dart';
6import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_low_energy/ble_service.dart';
7import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_low_energy/ble_state.dart';
8import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_manager.dart';
9import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_state.dart';
10import 'package:bluetooth_low_energy/bluetooth_low_energy.dart';
11
12/// Bluetooth manager for the 'bluetooth_low_energy' package
13final class BluetoothLowEnergyManager extends BluetoothManager<DiscoveredEventArgs, UUID, GATTService, GATTCharacteristic> {
14 /// constructor
15 BluetoothLowEnergyManager() {
16 logger.fine('init');
17
18 // Sync current adapter state
19 _adapterStateParser.parseAndCache(BluetoothLowEnergyStateChangedEventArgs(backend.state));
20 }
21
22 @override
23 Future<bool?> enable() async {
24 if (!Platform.isAndroid) {
25 return null;
26 }
27
28 return backend.authorize();
29 }
30
31 /// The actual backend implementation
32 final CentralManager backend = CentralManager();
33
34 final BluetoothLowEnergyStateParser _adapterStateParser = BluetoothLowEnergyStateParser();
35
36 @override
37 BluetoothAdapterState get lastKnownAdapterState => _adapterStateParser.lastKnownState;
38
39 @override
40 Stream<BluetoothAdapterState> get stateStream => backend.stateChanged.map(_adapterStateParser.parse);
41
42 BluetoothLowEnergyDiscovery? _discovery;
43
44 @override
45 BluetoothLowEnergyDiscovery get discovery {
46 _discovery ??= BluetoothLowEnergyDiscovery(this);
47 return _discovery!;
48 }
49
50 @override
51 BluetoothLowEnergyDevice createDevice(DiscoveredEventArgs device) => BluetoothLowEnergyDevice(this, device);
52
53 @override
54 BluetoothLowEnergyUUID createUuid(UUID uuid) => BluetoothLowEnergyUUID(uuid);
55
56 @override
57 BluetoothLowEnergyUUID createUuidFromString(String uuid) => BluetoothLowEnergyUUID.fromString(uuid);
58
59 @override
60 BluetoothLowEnergyService createService(GATTService service) => BluetoothLowEnergyService.fromSource(service);
61
62 @override
63 BluetoothLowEnergyCharacteristic createCharacteristic(GATTCharacteristic characteristic) => BluetoothLowEnergyCharacteristic.fromSource(characteristic);
64}