readCharacteristic method

  1. @override
Future<Uint8List?> readCharacteristic({
  1. required String serviceUuid,
  2. required String characteristicUuid,
  3. Duration timeout = const Duration(seconds: 30),
})
override

readCharacteristic reads the value of a BLE characteristic. The return value is the raw bytes of the characteristic.

If the characteristic is not readable, this method will return null.

Implementation

@override
Future<Uint8List?> readCharacteristic({
  required String serviceUuid,
  required String characteristicUuid,
  Duration timeout = const Duration(seconds: 30),
}) async {
  if (_connectedDevice == null) {
    log("Not connected to any device");
    return null;
  }

  final service = _connectedDevice!.gattServices.firstWhereOrNull((element) {
    return element.uuid.toString().toLowerCase() == serviceUuid.toLowerCase();
  });
  if (service == null) {
    log("Service not found: $serviceUuid");
    return null;
  }

  final characteristic = service.characteristics.firstWhereOrNull((element) {
    return element.uuid.toString().toLowerCase() == characteristicUuid.toLowerCase();
  });

  if (characteristic == null) {
    log("Characteristic not found: $characteristicUuid");
    return null;
  }

  if (characteristic.notifying) {
    log("Characteristic is notifying: $characteristicUuid");
    return null;
  }

  final value = await characteristic.readValue();
  return Uint8List.fromList(value);
}