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 }