diff --git a/android/src/main/kotlin/fr/dooz/nordic_nrf_mesh/DoozMeshManagerApi.kt b/android/src/main/kotlin/fr/dooz/nordic_nrf_mesh/DoozMeshManagerApi.kt index d4ae714e0..e998051b5 100644 --- a/android/src/main/kotlin/fr/dooz/nordic_nrf_mesh/DoozMeshManagerApi.kt +++ b/android/src/main/kotlin/fr/dooz/nordic_nrf_mesh/DoozMeshManagerApi.kt @@ -291,6 +291,18 @@ class DoozMeshManagerApi(context: Context, binaryMessenger: BinaryMessenger) : S mMeshManagerApi.createMeshPdu(pNode.unicastAddress, meshMessage) result.success(null) } + "getPublicationSettings" -> { + val elementAddress = call.argument("elementAddress")!! + val modelIdentifier = call.argument("modelIdentifier")!! + val currentMeshNetwork = mMeshManagerApi.meshNetwork!! + val pNode: ProvisionedMeshNode = currentMeshNetwork.getNode(elementAddress) + val meshMessage = ConfigModelPublicationGet( + elementAddress, + modelIdentifier + ) + mMeshManagerApi.createMeshPdu(pNode.unicastAddress, meshMessage) + result.success(null) + } "sendV2MagicLevel" -> { val io = call.argument("io")!! val index = call.argument("index")!! diff --git a/ios/Classes/DoozMeshManagerApi/Channels/Arguments/GetPublicationSettingsArguments.swift b/ios/Classes/DoozMeshManagerApi/Channels/Arguments/GetPublicationSettingsArguments.swift new file mode 100644 index 000000000..f7e19b818 --- /dev/null +++ b/ios/Classes/DoozMeshManagerApi/Channels/Arguments/GetPublicationSettingsArguments.swift @@ -0,0 +1,11 @@ +// +// GetPublicationSettingsArguments.swift +// nordic_nrf_mesh +// +// Created by OZEO DOOZ on 09/02/2022. +// + +struct GetPublicationSettingsArguments: BaseFlutterArguments { + let elementAddress: Int16 + let modelIdentifier: Int +} diff --git a/ios/Classes/DoozMeshManagerApi/Channels/DoozMeshManagerApiChannel.swift b/ios/Classes/DoozMeshManagerApi/Channels/DoozMeshManagerApiChannel.swift index 660a9844b..2db041792 100644 --- a/ios/Classes/DoozMeshManagerApi/Channels/DoozMeshManagerApiChannel.swift +++ b/ios/Classes/DoozMeshManagerApi/Channels/DoozMeshManagerApiChannel.swift @@ -37,6 +37,7 @@ enum DoozMeshManagerApiChannel { case setSNBeacon(_ data: ConfigBeaconSetArguments) case sendConfigModelSubscriptionDeleteAll(_ data: SendConfigModelSubscriptionDeleteAllArguments) case sendConfigModelPublicationSet(_ data: SendConfigModelPublicationSetArguments) + case getPublicationSettings(_ data: GetPublicationSettingsArguments) case sendLightLightness(_ data: SendLightLightnessArguments) case sendLightCtl(_ data: SendLightCtlArguments) case sendLightHsl(_ data: SendLightHslArguments) @@ -111,6 +112,8 @@ enum DoozMeshManagerApiChannel { self = .sendConfigModelSubscriptionDeleteAll(try SendConfigModelSubscriptionDeleteAllArguments(arguments)) case "sendConfigModelPublicationSet": self = .sendConfigModelPublicationSet(try SendConfigModelPublicationSetArguments(arguments)) + case "getPublicationSettings": + self = .getPublicationSettings(try GetPublicationSettingsArguments(arguments)) case "sendLightLightness": self = .sendLightLightness(try SendLightLightnessArguments(arguments)) case "sendLightCtl": diff --git a/ios/Classes/DoozMeshManagerApi/DoozMeshManagerApi.swift b/ios/Classes/DoozMeshManagerApi/DoozMeshManagerApi.swift index beb71f740..ca2a6a682 100644 --- a/ios/Classes/DoozMeshManagerApi/DoozMeshManagerApi.swift +++ b/ios/Classes/DoozMeshManagerApi/DoozMeshManagerApi.swift @@ -486,6 +486,21 @@ private extension DoozMeshManagerApi { } } break + case .getPublicationSettings(let data): + if + let node = meshNetworkManager.meshNetwork?.node(withAddress: Address(exactly: data.elementAddress)!), + let element = node.element(withAddress: Address(exactly: data.elementAddress)!), + let model = element.model(withModelId: UInt32(data.modelIdentifier)){ + let message: ConfigModelPublicationGet = ConfigModelPublicationGet(for: model)! + do{ + _ = try meshNetworkManager.send(message, to: node) + result(nil) + }catch{ + let nsError = error as NSError + result(FlutterError(code: String(nsError.code), message: nsError.localizedDescription, details: nil)) + } + } + break case .sendLightLightness(let data): guard let appKey = meshNetworkManager.meshNetwork?.applicationKeys[KeyIndex(data.keyIndex)] else{ let error = MeshNetworkError.keyIndexOutOfRange diff --git a/lib/src/mesh_manager_api.dart b/lib/src/mesh_manager_api.dart index 02bcab6fb..c9e5e48ba 100644 --- a/lib/src/mesh_manager_api.dart +++ b/lib/src/mesh_manager_api.dart @@ -590,6 +590,25 @@ class MeshManagerApi { return status; } + Future getPublicationSettings( + int elementAddress, + int modelIdentifier, + ) async { + if (Platform.isAndroid || Platform.isIOS) { + final status = _onConfigModelPublicationStatusController.stream.firstWhere( + (element) => element.elementAddress == elementAddress && element.modelIdentifier == modelIdentifier, + orElse: () => const ConfigModelPublicationStatus(-1, -1, -1, false, -1, -1, -1, -1, -1, -1, false), + ); + await _methodChannel.invokeMethod( + 'getPublicationSettings', + {'elementAddress': elementAddress, 'modelIdentifier': modelIdentifier}, + ); + return status; + } else { + throw UnimplementedError('${Platform.environment} not supported'); + } + } + Future sendLightLightness( int address, int lightness,