1import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_service.dart';
 2import 'package:flutter_blue_plus/flutter_blue_plus.dart' as fbp;
 3import 'package:flutter_blue_plus/flutter_blue_plus.dart' show Guid;
 4
 5/// UUID wrapper for FlutterBluePlus
 6final class FlutterBluePlusUUID extends BluetoothUuid<Guid> {
 7  /// Create a [FlutterBluePlusUUID] from a [Guid]
 8  FlutterBluePlusUUID(Guid uuid): super(uuid: uuid.str128, source: uuid);
 9
10  /// Create a [FlutterBluePlusUUID] from a [String]
11  factory FlutterBluePlusUUID.fromString(String uuid) => FlutterBluePlusUUID(Guid(uuid));
12}
13
14/// [BluetoothService] implementation wrapping [fbp.BluetoothService]
15final class FlutterBluePlusService extends BluetoothService<fbp.BluetoothService, FlutterBluePlusCharacteristic> {
16  /// Create [BluetoothService] implementation wrapping [fbp.BluetoothService]
17  FlutterBluePlusService({ required super.uuid, required super.source });
18
19  /// Create a [FlutterBluePlusService] from a [fbp.BluetoothService]
20  factory FlutterBluePlusService.fromSource(fbp.BluetoothService service) {
21    final uuid = FlutterBluePlusUUID(service.serviceUuid);
22    return FlutterBluePlusService(uuid: uuid, source: service);
23  }
24
25  @override
26  List<FlutterBluePlusCharacteristic> get characteristics => source.characteristics
27    .map(FlutterBluePlusCharacteristic.fromSource).toList();
28}
29
30/// Wrapper class with generic interface for a [fbp.BluetoothCharacteristic]
31final class FlutterBluePlusCharacteristic extends BluetoothCharacteristic<fbp.BluetoothCharacteristic> {
32  /// Initialize a [FlutterBluePlusCharacteristic] from the backend specific source
33  FlutterBluePlusCharacteristic.fromSource(fbp.BluetoothCharacteristic source):
34    super(uuid: FlutterBluePlusUUID(source.characteristicUuid), source: source);
35
36  @override
37  bool get canRead => source.properties.read;
38  
39  @override
40  bool get canWrite => source.properties.write;
41  
42  @override
43  bool get canWriteWithoutResponse => source.properties.writeWithoutResponse;
44  
45  @override
46  bool get canNotify => source.properties.notify;
47  
48  @override
49  bool get canIndicate => source.properties.indicate;
50}