initGatt method
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));
}
}