initGatt method

  1. @override
Future<void> initGatt()
override

A method that should implement the GATT initialization.

It should for instance request the highest possible MTU size and subscribe to notifications

Implementation

@override
Future<void> initGatt() async {
  // request highest MTU (only useful on Android)
  final negotiatedMtu = await bleInstance.requestMtu(deviceId: device!.id, mtu: mtuSizeMax);
  if (Platform.isAndroid) {
    mtuSize = negotiatedMtu - 3;
  } else if (Platform.isIOS) {
    mtuSize = negotiatedMtu;
  }
  // notify about negociated MTU size
  await callbacks!.sendMtuToMeshManagerApi(mtuSize);
  // subscribe to notifications from the proper BLE service (proxy/provisioning)
  DiscoveredService? discoveredService;
  if (isProvisioningCompleted) {
    discoveredService = _discoveredServices.firstWhere((service) => service.serviceId == meshProxyUuid);
    await _meshProxyDataOutSubscription?.cancel();
    _meshProxyDataOutSubscription =
        _getDataOutSubscription(_getQualifiedCharacteristic(meshProxyDataOut, discoveredService.serviceId));
  } else {
    discoveredService = _discoveredServices.firstWhere((service) => service.serviceId == meshProvisioningUuid);
    await _meshProvisioningDataOutSubscription?.cancel();
    _meshProvisioningDataOutSubscription =
        _getDataOutSubscription(_getQualifiedCharacteristic(meshProvisioningDataOut, discoveredService.serviceId));
  }
}