writeCharacteristic method

  1. @override
Future<bool> writeCharacteristic({
  1. required String serviceUuid,
  2. required String characteristicUuid,
  3. required Uint8List payload,
  4. Duration timeout = const Duration(seconds: 30),
  5. required bool withResponse,
})
override

writeCharacteristic sends a payload to a BLE characteristic.

The return value is true if the payload was sent successfully.

Implementation

@override
Future<bool> writeCharacteristic({
  required String serviceUuid,
  required String characteristicUuid,
  required Uint8List payload,
  Duration timeout = const Duration(seconds: 30),
  required bool withResponse,
}) async {
  if (_currentConnected == null) {
    log("No device connected");
    return false;
  }

  await _currentConnected!.connect();

  try {
    final services = await _currentConnected!.discoverServices();
    final service = services.firstWhereOrNull((s) => s.uuid.toLowerCase() == serviceUuid.toLowerCase());
    if (service == null) {
      log("Service not found: $serviceUuid");
      return false;
    }

    try {
      final characteristic = await service.getCharacteristic(characteristicUuid);
      if (withResponse) {
        await characteristic.writeValueWithResponse(payload);
      } else {
        await characteristic.writeValueWithoutResponse(payload);
      }
      return true;
    } catch (e) {
      log("Error getting characteristic: $e");
      return false;
    }
  } catch (e) {
    log("Error discovering services: $e");
    return false;
  }
}