/ app / packages / ble_peripheral / lib / src / pigeon / ble_callback_handler.dart
ble_callback_handler.dart
 1  import 'dart:async';
 2  import 'dart:typed_data';
 3  
 4  import 'package:ble_peripheral/ble_peripheral.dart';
 5  import 'package:ble_peripheral/src/ble_peripheral_interface.dart';
 6  
 7  /// A class that handles the callbacks from the BLE plugin.
 8  /// This class is used to convert the callbacks to a more readable format.
 9  class BleCallbackHandler extends BleCallback {
10    AdvertisementStatusUpdateCallback? advertingStarted;
11    BleStateCallback? bleStateChange;
12    BondStateCallback? bondStateChange;
13    CharacteristicSubscriptionChangeCallback? characteristicSubscriptionChange;
14    ConnectionStateChangeCallback? connectionStateChange;
15    ReadRequestCallback? readRequest;
16    ServiceAddedCallback? serviceAdded;
17    WriteRequestCallback? writeRequest;
18    MtuChangeCallback? mtuChangeCallback;
19  
20    final serviceResultStreamController =
21        StreamController<({String serviceId, String? error})>.broadcast();
22  
23    @override
24    void onAdvertisingStatusUpdate(bool advertising, String? error) =>
25        advertingStarted?.call(advertising, error);
26  
27    @override
28    void onBleStateChange(bool state) => bleStateChange?.call(state);
29  
30    @override
31    void onBondStateChange(String deviceId, BondState bondState) =>
32        bondStateChange?.call(deviceId, bondState);
33  
34    @override
35    void onCharacteristicSubscriptionChange(
36      String deviceId,
37      String characteristicId,
38      bool isSubscribed,
39      String? name,
40    ) {
41      characteristicSubscriptionChange?.call(
42        deviceId,
43        characteristicId,
44        isSubscribed,
45        name,
46      );
47    }
48  
49    @override
50    void onConnectionStateChange(String deviceId, bool connected) {
51      connectionStateChange?.call(deviceId, connected);
52    }
53  
54    @override
55    ReadRequestResult? onReadRequest(
56      String deviceId,
57      String characteristicId,
58      int offset,
59      Uint8List? value,
60    ) {
61      // Windows crash if return value is null
62      return readRequest?.call(deviceId, characteristicId, offset, value) ??
63          ReadRequestResult(
64            value: Uint8List.fromList([0]),
65          );
66    }
67  
68    @override
69    void onServiceAdded(String serviceId, String? error) {
70      serviceAdded?.call(serviceId, error);
71      serviceResultStreamController.add((serviceId: serviceId, error: error));
72    }
73  
74    @override
75    WriteRequestResult? onWriteRequest(
76        String deviceId, String characteristicId, int offset, Uint8List? value) {
77      return writeRequest?.call(deviceId, characteristicId, offset, value) ??
78          WriteRequestResult();
79    }
80  
81    @override
82    void onMtuChange(String deviceId, int mtu) =>
83        mtuChangeCallback?.call(deviceId, mtu);
84  }