subscribe method

Future<void> subscribe(
  1. BleCharacteristic characteristic
)

Implementation

Future<void> subscribe(BleCharacteristic characteristic) async {
  _ensureConnected('subscribe');
  final deviceId = _connectedDevice!;
  if (!characteristic.canNotify) {
    throw StateError('Characteristic does not support notifications.');
  }

  final key = _characteristicKey(characteristic);
  if (_notificationSubscriptions.containsKey(key)) {
    return;
  }

  try {
    final subscription = _transport
        .subscribe(deviceId, characteristic)
        .listen(
          (bytes) {
            final immutableBytes = Uint8List.fromList(
              bytes,
            ).asUnmodifiableView();
            _record(
              ProbeEventKind.notification,
              '${characteristic.characteristicUuid} '
              '${_formatPayload(immutableBytes)}',
            );
            _protocolNotifications.add(immutableBytes);
          },
          onError: (Object error) {
            _recordError('subscription failed', error);
          },
          onDone: () {
            _notificationSubscriptions.remove(key);
          },
        );
    _notificationSubscriptions[key] = subscription;
    _record(ProbeEventKind.subscription, characteristic.characteristicUuid);
  } catch (error) {
    _recordError('subscription failed', error);
    rethrow;
  }
}