Skip to content

Commit

Permalink
Release v0.6.0
Browse files Browse the repository at this point in the history
Merge pull request #216 from OZEO-DOOZ/develop
  • Loading branch information
R0m4in-dooz authored Jan 14, 2022
2 parents 5cdc12e + 362d714 commit c1e41ed
Show file tree
Hide file tree
Showing 25 changed files with 394 additions and 103 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
## 0.6.0

- fix bug in adding a provisioner on iOS device
- expose ConfigBeacon API
- negociate MTU before enabling notifications (Fix bug on Android where Secure Network Beacons were truncated)
- Ignore timing criterias to accept an incoming Secure Network Beacon (useful when network has just been loaded from its JSON representation in which the IV Index last transition date is not stored)
- `searchForSpecificNode` will now return a result if the given String matches the device's id **or** name

## 0.5.0

- expose some of the API needed to execute a Key Refresh Procedure on Android using [this](https://github.com/NordicSemiconductor/Android-nRF-Mesh-Library/pull/381) Pull Request as reference
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,19 @@ class DoozMeshManagerApi(context: Context, binaryMessenger: BinaryMessenger) : S
mMeshManagerApi.createMeshPdu(address, meshMessage)
result.success(null)
}
"getSNBeacon" -> {
val address = call.argument<Int>("address")!!
val meshMessage: MeshMessage = ConfigBeaconGet()
mMeshManagerApi.createMeshPdu(address, meshMessage)
result.success(null)
}
"setSNBeacon" -> {
val address = call.argument<Int>("address")!!
val enable = call.argument<Boolean>("enable")!!
val meshMessage: MeshMessage = ConfigBeaconSet(enable)
mMeshManagerApi.createMeshPdu(address, meshMessage)
result.success(null)
}
"setNetworkTransmitSettings" -> {
val address = call.argument<Int>("address")!!
val transmitCount = call.argument<Int>("transmitCount")!!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,17 @@ class DoozMeshStatusCallbacks(var eventSink: EventChannel.EventSink?): MeshStatu
))
}
}
is ConfigBeaconStatus -> {
Log.d(tag, "received a ConfigBeaconStatus")
Handler(Looper.getMainLooper()).post {
eventSink?.success(mapOf(
"eventName" to "onConfigBeaconStatus",
"source" to meshMessage.src,
"destination" to meshMessage.dst,
"enable" to meshMessage.isEnable()
))
}
}
else -> {
Log.d(tag, "Unknown message received :" + meshMessage.javaClass.toString())
}
Expand Down
2 changes: 1 addition & 1 deletion example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ packages:
path: ".."
relative: true
source: path
version: "0.5.0"
version: "0.6.0"
package_config:
dependency: transitive
description:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
//
// ConfigBeaconGetArguments.swift
// nordic_nrf_mesh
//
// Created by OZEO DOOZ on 07/01/2022.
//

struct ConfigBeaconGetArguments: BaseFlutterArguments {
let address: Int
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
//
// ConfigBeaconSetArguments.swift
// nordic_nrf_mesh
//
// Created by OZEO DOOZ on 07/01/2022.
//

struct ConfigBeaconSetArguments: BaseFlutterArguments {
let address: Int
let enable: Bool
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ enum DoozMeshManagerApiChannel {
case getNetworkTransmitSettings(_ data: GetNetworkTransmitSettingsArguments)
case getDefaultTtl(_ data: GetDefaultTtlArguments)
case setDefaultTtl(_ data: SetDefaultTtlArguments)
case getSNBeacon(_ data: ConfigBeaconGetArguments)
case setSNBeacon(_ data: ConfigBeaconSetArguments)
case sendConfigModelSubscriptionDeleteAll(_ data: SendConfigModelSubscriptionDeleteAllArguments)
case sendConfigModelPublicationSet(_ data: SendConfigModelPublicationSetArguments)
case sendLightLightness(_ data: SendLightLightnessArguments)
Expand Down Expand Up @@ -101,6 +103,10 @@ enum DoozMeshManagerApiChannel {
self = .getDefaultTtl(try GetDefaultTtlArguments(arguments))
case "setDefaultTtl":
self = .setDefaultTtl(try SetDefaultTtlArguments(arguments))
case "getSNBeacon":
self = .getSNBeacon(try ConfigBeaconGetArguments(arguments))
case "setSNBeacon":
self = .setSNBeacon(try ConfigBeaconSetArguments(arguments))
case "sendConfigModelSubscriptionDeleteAll":
self = .sendConfigModelSubscriptionDeleteAll(try SendConfigModelSubscriptionDeleteAllArguments(arguments))
case "sendConfigModelPublicationSet":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,112 +12,79 @@ extension DoozMeshManagerApi: MeshNetworkDelegate{

func meshNetworkManager(_ manager: MeshNetworkManager, didReceiveMessage message: MeshMessage, sentFrom source: Address, to destination: Address) {
print("📣 didReceiveMessage : \(message) from \(source) to \(destination)")

// Handle the message based on its type.
switch message {

case let status as ConfigModelAppStatus:

if status.isSuccess {
let message: FlutterMessage = [

EventSinkKeys.eventName.rawValue: MessageEvent.onConfigModelAppStatus.rawValue,
EventSinkKeys.message.elementAddress.rawValue: status.elementAddress,
EventSinkKeys.message.modelId.rawValue: status.modelId,
EventSinkKeys.message.appKeyIndex.rawValue: status.applicationKeyIndex,

]

_sendFlutterMessage(message)

} else {
break
}

case is ConfigCompositionDataStatus:

let message: FlutterMessage = [

EventSinkKeys.eventName.rawValue : MessageEvent.onConfigCompositionDataStatus.rawValue,
EventSinkKeys.source.rawValue : source,
EventSinkKeys.message.meshMessage.rawValue : [
EventSinkKeys.message.source.rawValue : source,
EventSinkKeys.message.destination.rawValue : destination
]

]

_sendFlutterMessage(message)

case let status as ConfigAppKeyStatus:
if status.isSuccess {
let message: FlutterMessage = [

EventSinkKeys.eventName.rawValue : MessageEvent.onConfigAppKeyStatus.rawValue,
EventSinkKeys.source.rawValue : source,
EventSinkKeys.message.meshMessage.rawValue : [
EventSinkKeys.message.source.rawValue : source,
EventSinkKeys.message.destination.rawValue : destination
]

]

_sendFlutterMessage(message)
}else {
break
}

case let status as GenericLevelStatus:

let message: FlutterMessage = [

EventSinkKeys.eventName.rawValue : MessageEvent.onGenericLevelStatus.rawValue,
EventSinkKeys.message.level.rawValue : status.level,
EventSinkKeys.message.targetLevel.rawValue : status.targetLevel ?? 0,
EventSinkKeys.source.rawValue : source,
EventSinkKeys.message.destination.rawValue : destination,
EventSinkKeys.message.transitionResolution.rawValue : status.remainingTime?.stepResolution.rawValue ?? 0,
EventSinkKeys.message.transitionSteps.rawValue : status.remainingTime?.steps ?? 0,

]

_sendFlutterMessage(message)

case let status as GenericOnOffStatus:

let message: FlutterMessage = [

EventSinkKeys.eventName.rawValue : MessageEvent.onGenericOnOffStatus.rawValue,
EventSinkKeys.source.rawValue : source,
EventSinkKeys.message.presentState.rawValue : status.isOn,
EventSinkKeys.message.targetState.rawValue : status.targetState ?? false,
EventSinkKeys.message.transitionResolution.rawValue : status.remainingTime?.stepResolution.rawValue ?? 0,
EventSinkKeys.message.transitionSteps.rawValue : status.remainingTime?.steps ?? 0,

]

_sendFlutterMessage(message)

case let status as ConfigModelSubscriptionStatus:

let message: FlutterMessage = [

EventSinkKeys.eventName.rawValue : MessageEvent.onConfigModelSubscriptionStatus.rawValue,
EventSinkKeys.source.rawValue : source,
EventSinkKeys.message.destination.rawValue : destination,
EventSinkKeys.message.elementAddress.rawValue: status.elementAddress,
EventSinkKeys.message.subscriptionAddress.rawValue : status.address,
EventSinkKeys.message.modelIdentifier.rawValue : status.modelIdentifier,
EventSinkKeys.message.isSuccessful.rawValue : status.isSuccess,

]

_sendFlutterMessage(message)

case let status as ConfigModelPublicationStatus:

let message: FlutterMessage = [

EventSinkKeys.eventName.rawValue : MessageEvent.onConfigModelPublicationStatus.rawValue,
EventSinkKeys.message.elementAddress.rawValue: status.elementAddress,
EventSinkKeys.message.publishAddress.rawValue : status.publish.publicationAddress.address,
Expand All @@ -130,31 +97,21 @@ extension DoozMeshManagerApi: MeshNetworkDelegate{
EventSinkKeys.message.retransmitIntervalSteps.rawValue : status.publish.retransmit.steps,
EventSinkKeys.message.modelIdentifier.rawValue : status.modelIdentifier,
EventSinkKeys.message.isSuccessful.rawValue : status.isSuccess,

]

_sendFlutterMessage(message)

case let status as LightLightnessStatus:

let message: FlutterMessage = [

EventSinkKeys.eventName.rawValue : MessageEvent.onLightLightnessStatus.rawValue,
EventSinkKeys.message.presentLightness.rawValue : status.lightness,
EventSinkKeys.message.targetLightness.rawValue : status.targetLightness ?? 0,
EventSinkKeys.source.rawValue : source,
EventSinkKeys.message.destination.rawValue : destination,
EventSinkKeys.message.transitionResolution.rawValue : status.remainingTime?.stepResolution.rawValue ?? 0,
EventSinkKeys.message.transitionSteps.rawValue : status.remainingTime?.steps ?? 0,

]

_sendFlutterMessage(message)

case let status as LightCTLStatus:

let message: FlutterMessage = [

EventSinkKeys.eventName.rawValue : MessageEvent.onLightCtlStatus.rawValue,
EventSinkKeys.message.presentLightness.rawValue : status.lightness,
EventSinkKeys.message.targetLightness.rawValue : status.targetLightness ?? 0,
Expand All @@ -164,15 +121,10 @@ extension DoozMeshManagerApi: MeshNetworkDelegate{
EventSinkKeys.message.destination.rawValue : destination,
EventSinkKeys.message.transitionResolution.rawValue : status.remainingTime?.stepResolution.rawValue ?? 0,
EventSinkKeys.message.transitionSteps.rawValue : status.remainingTime?.steps ?? 0,

]

_sendFlutterMessage(message)

case let status as LightHSLStatus:

let message: FlutterMessage = [

EventSinkKeys.eventName.rawValue : MessageEvent.onLightHslStatus.rawValue,
EventSinkKeys.message.presentLightness.rawValue : status.lightness,
EventSinkKeys.message.presentHue.rawValue : status.hue,
Expand All @@ -181,52 +133,43 @@ extension DoozMeshManagerApi: MeshNetworkDelegate{
EventSinkKeys.message.destination.rawValue : destination,
EventSinkKeys.message.transitionResolution.rawValue : status.remainingTime?.stepResolution.rawValue ?? 0,
EventSinkKeys.message.transitionSteps.rawValue : status.remainingTime?.steps ?? 0,

]

_sendFlutterMessage(message)

case _ as ConfigNodeResetStatus:

let message: FlutterMessage = [

EventSinkKeys.eventName.rawValue : MessageEvent.onConfigNodeResetStatus.rawValue,
EventSinkKeys.source.rawValue : source,
EventSinkKeys.message.destination.rawValue : destination,
EventSinkKeys.message.success.rawValue : true,

]

_sendFlutterMessage(message)

case let status as ConfigNetworkTransmitStatus:

let message: FlutterMessage = [

EventSinkKeys.eventName.rawValue : MessageEvent.onConfigNetworkTransmitStatus.rawValue,
EventSinkKeys.source.rawValue : source,
EventSinkKeys.message.destination.rawValue : destination,
EventSinkKeys.message.transmitCount.rawValue : status.count,
EventSinkKeys.message.transmitIntervalSteps.rawValue : status.steps,

]

_sendFlutterMessage(message)

case let status as ConfigDefaultTtlStatus:

let message: FlutterMessage = [

EventSinkKeys.eventName.rawValue : MessageEvent.onConfigDefaultTtlStatus.rawValue,
EventSinkKeys.source.rawValue : source,
EventSinkKeys.message.destination.rawValue : destination,
EventSinkKeys.message.ttl.rawValue : status.ttl,

]

_sendFlutterMessage(message)
case let status as ConfigBeaconStatus:
let message: FlutterMessage = [
EventSinkKeys.eventName.rawValue : MessageEvent.onConfigBeaconStatus.rawValue,
EventSinkKeys.source.rawValue : source,
EventSinkKeys.message.destination.rawValue : destination,
EventSinkKeys.message.enable.rawValue : status.isEnabled,
]
_sendFlutterMessage(message)
case let status as MagicLevelSetStatus:

let message: FlutterMessage = [
EventSinkKeys.eventName.rawValue : MessageEvent.onMagicLevelSetStatus.rawValue,
EventSinkKeys.message.io.rawValue : status.mIO,
Expand All @@ -236,7 +179,6 @@ extension DoozMeshManagerApi: MeshNetworkDelegate{
EventSinkKeys.source.rawValue : source,
EventSinkKeys.message.destination.rawValue : destination,
]

_sendFlutterMessage(message)
case let status as MagicLevelGetStatus:
let message: FlutterMessage = [
Expand All @@ -248,14 +190,7 @@ extension DoozMeshManagerApi: MeshNetworkDelegate{
EventSinkKeys.source.rawValue : source,
EventSinkKeys.message.destination.rawValue : destination,
]

_sendFlutterMessage(message)
// case let list as ConfigModelAppList:
// break
//
// case let status as ConfigModelSubscriptionList:
// break

default:
break
}
Expand Down
22 changes: 22 additions & 0 deletions ios/Classes/DoozMeshManagerApi/DoozMeshManagerApi.swift
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,28 @@ private extension DoozMeshManagerApi {
result(FlutterError(code: String(nsError.code), message: nsError.localizedDescription, details: nil))
}
break
case .getSNBeacon(let data):
let message = ConfigBeaconGet()
let _node = doozMeshNetwork?.meshNetwork.node(withAddress: Address(exactly: data.address)!)
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 .setSNBeacon(let data):
let message = ConfigBeaconSet(enable: Bool(data.enable))
let _node = doozMeshNetwork?.meshNetwork.node(withAddress: Address(exactly: data.address)!)
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 .sendConfigModelSubscriptionDeleteAll(let data):
if

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

struct AddProvisionerArguments: BaseFlutterArguments {
let name: String
let unicastAddressRange: Int
let groupAddressRange: Int
let sceneAddressRange: Int
Expand Down
Loading

0 comments on commit c1e41ed

Please sign in to comment.