Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[java-matter-controller] Convert from java to kotlin phase I #25384

Merged
merged 3 commits into from
Mar 3, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
[java-matter-controller] Convert from java to kotlin phase I
yufengwangca committed Mar 2, 2023
commit ca32f608a41c953752351ca982b04edf705fe0c7
2 changes: 1 addition & 1 deletion .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
@@ -531,7 +531,7 @@ jobs:
runs-on: ubuntu-latest

container:
image: connectedhomeip/chip-build:0.6.44
image: connectedhomeip/chip-build-java:0.6.44
options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0
net.ipv4.conf.all.forwarding=0 net.ipv6.conf.all.forwarding=0"

25 changes: 19 additions & 6 deletions examples/java-matter-controller/BUILD.gn
Original file line number Diff line number Diff line change
@@ -18,16 +18,15 @@ import("//build_overrides/chip.gni")
import("${chip_root}/build/chip/java/rules.gni")
import("${chip_root}/build/chip/tools.gni")

java_binary("java-matter-controller") {
output_name = "java-matter-controller"
java_library("java") {
output_name = "JavaMatterController.jar"
deps = [
"${chip_root}/src/controller/java",
"${chip_root}/src/setup_payload/java",
"${chip_root}/third_party/java_deps:annotation",
]

sources = [
"java/src/com/matter/controller/Main.java",
"java/src/com/matter/controller/commands/common/Argument.java",
"java/src/com/matter/controller/commands/common/ArgumentType.java",
"java/src/com/matter/controller/commands/common/Command.java",
@@ -37,9 +36,6 @@ java_binary("java-matter-controller") {
"java/src/com/matter/controller/commands/common/IPAddress.java",
"java/src/com/matter/controller/commands/common/MatterCommand.java",
"java/src/com/matter/controller/commands/common/RealResult.java",
"java/src/com/matter/controller/commands/discover/DiscoverCommand.java",
"java/src/com/matter/controller/commands/discover/DiscoverCommissionablesCommand.java",
"java/src/com/matter/controller/commands/discover/DiscoverCommissionersCommand.java",
"java/src/com/matter/controller/commands/pairing/CloseSessionCommand.java",
"java/src/com/matter/controller/commands/pairing/DiscoveryFilterType.java",
"java/src/com/matter/controller/commands/pairing/PairAddressPaseCommand.java",
@@ -66,6 +62,23 @@ java_binary("java-matter-controller") {
javac_flags = [ "-Xlint:deprecation" ]
}

kotlin_binary("java-matter-controller") {
output_name = "java-matter-controller"
deps = [
":java",
"${chip_root}/third_party/java_deps:kotlin-stdlib",
]

sources = [
"java/src/com/matter/controller/Main.kt",
"java/src/com/matter/controller/commands/discover/DiscoverCommand.kt",
"java/src/com/matter/controller/commands/discover/DiscoverCommissionablesCommand.kt",
"java/src/com/matter/controller/commands/discover/DiscoverCommissionersCommand.kt",
]

kotlinc_flags = [ "-Xlint:deprecation" ]
}

group("default") {
deps = [ ":java-matter-controller" ]
}
4 changes: 2 additions & 2 deletions examples/java-matter-controller/Manifest.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Main-Class: com.matter.controller.Main
Class-Path: ../lib/third_party/connectedhomeip/src/controller/java/CHIPController.jar ../lib/third_party/connectedhomeip/src/setup_payload/java/SetupPayloadParser.jar ../lib/third_party/connectedhomeip/third_party/java_deps/stub_src/Android.jar ../lib/third_party/connectedhomeip/third_party/java_deps/json-20220924.jar ../lib/third_party/connectedhomeip/third_party/java_deps/jsr305-3.0.2.jar
Main-Class: com.matter.controller.MainKt
Class-Path: ../lib/third_party/connectedhomeip/src/controller/java/CHIPController.jar ../lib/third_party/connectedhomeip/src/setup_payload/java/SetupPayloadParser.jar ../lib/third_party/connectedhomeip/third_party/java_deps/stub_src/Android.jar ../lib/third_party/connectedhomeip/third_party/java_deps/json-20220924.jar ../lib/third_party/connectedhomeip/third_party/java_deps/jsr305-3.0.2.jar ../lib/third_party/connectedhomeip/third_party/java_deps/kotlin-stdlib-1.8.10.jar

52 changes: 47 additions & 5 deletions examples/java-matter-controller/README.md
Original file line number Diff line number Diff line change
@@ -21,7 +21,7 @@ You need to have the following two software installed on your Ubuntu system:
1. Java Runtime Environment (JRE)
2. Java Development Kit (JDK)

```
```shell
java -version
```

@@ -36,20 +36,62 @@ sudo apt install default-jre Install Java default JRE
After installing the JRE, let us check if we have the Java Development Kit
installed on our system or not.

```
```shell
javac -version
```

The above output shows that I need to install the Java compiler or the JDK on my
system. You can install it through the following command as root:

```
```shell
sudo apt install default-jdk
```

### Linux
You also need to install kotlin compiler on your Ubuntu system:

kotlin compiler version 1.8.10 or above is needed to compile
java-matter-controller, if you already have lower version kotlin compiler
installed on your Ubuntu from apt,
you need to remove the Kotlin compiler package, run the following command:

```shell
sudo apt-get remove kotlin
```

Wait for the removal process to complete. Once it's done, the Kotlin compiler
will be removed from your system.

(Optional) If you want to remove any configuration files associated with Kotlin,
run the following command:

```shell
sudo apt-get purge kotlin
```

Install kotlin compiler 1.8.10

```shell
cd /usr/lib \
&& sudo wget -q https://github.com/JetBrains/kotlin/releases/download/v1.8.10/kotlin-compiler-1.8.10.zip \
&& sudo unzip kotlin-compiler-*.zip \
&& sudo rm kotlin-compiler-*.zip \
&& sudo rm -f kotlinc/bin/*.bat
```

Add a directory to PATH permanently by editing the `.bashrc` file located in the
Home directory. Follow these steps:

1. Open the `.bashrc` file using a text editor.
2. Go to the end of the file.
3. Paste the export syntax at the end of the file.

```shell
export PATH="/usr/lib/kotlinc/bin:$PATH"
```

### Linux

```shell
export JAVA_PATH=[JDK path]
```

@@ -81,6 +123,6 @@ The Java executable file `java-matter-controller` will be generated at

Run the java-matter-controller

```
```shell
java -Djava.library.path=../lib/jni -jar java-matter-controller
```

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
/*
* Copyright (c) 2023 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.matter.controller

import chip.devicecontroller.ChipDeviceController
import chip.devicecontroller.ControllerParams
import com.matter.controller.commands.common.*
import com.matter.controller.commands.discover.*
import com.matter.controller.commands.pairing.*
import java.util.ArrayList

private fun registerCommandsDiscover(
controller: ChipDeviceController,
commandManager: CommandManager,
credentialsIssuer: CredentialsIssuer
) {
val clusterCommands: ArrayList<Command> = ArrayList<Command>()
yufengwangca marked this conversation as resolved.
Show resolved Hide resolved
val discoverCommand = DiscoverCommand(controller, credentialsIssuer)
val discoverCommissionablesCommand = DiscoverCommissionablesCommand(controller, credentialsIssuer)
val discoverCommissionersCommand = DiscoverCommissionersCommand(controller, credentialsIssuer)
clusterCommands.add(discoverCommand)
clusterCommands.add(discoverCommissionablesCommand)
clusterCommands.add(discoverCommissionersCommand)
commandManager.register("discover", clusterCommands)
}

private fun registerCommandsPairing(
controller: ChipDeviceController,
commandManager: CommandManager,
credentialsIssuer: CredentialsIssuer
) {
val clusterCommands: ArrayList<Command> = ArrayList<Command>()
yufengwangca marked this conversation as resolved.
Show resolved Hide resolved
val unpairCommand = UnpairCommand(controller, credentialsIssuer)
val pairCodeCommand = PairCodeCommand(controller, credentialsIssuer)
val pairCodePaseCommand = PairCodePaseCommand(controller, credentialsIssuer)
val pairCodeWifiCommand = PairCodeWifiCommand(controller, credentialsIssuer)
val pairCodeThreadCommand = PairCodeThreadCommand(controller, credentialsIssuer)
val pairAddressPaseCommand = PairAddressPaseCommand(controller, credentialsIssuer)
val pairAlreadyDiscoveredCommand = PairAlreadyDiscoveredCommand(controller, credentialsIssuer)
val pairOnNetworkCommand = PairOnNetworkCommand(controller, credentialsIssuer)
val pairOnNetworkShortCommand = PairOnNetworkShortCommand(controller, credentialsIssuer)
val pairOnNetworkLongCommand = PairOnNetworkLongCommand(controller, credentialsIssuer)
val pairOnNetworkVendorCommand = PairOnNetworkVendorCommand(controller, credentialsIssuer)
val pairOnNetworkCommissioningModeCommand = PairOnNetworkCommissioningModeCommand(controller, credentialsIssuer)
val pairOnNetworkCommissionerCommand = PairOnNetworkCommissionerCommand(controller, credentialsIssuer)
val pairOnNetworkDeviceTypeCommand = PairOnNetworkDeviceTypeCommand(controller, credentialsIssuer)
val pairOnNetworkInstanceNameCommand = PairOnNetworkInstanceNameCommand(controller, credentialsIssuer)
clusterCommands.add(unpairCommand)
clusterCommands.add(pairCodeCommand)
clusterCommands.add(pairCodePaseCommand)
clusterCommands.add(pairCodeWifiCommand)
clusterCommands.add(pairCodeThreadCommand)
clusterCommands.add(pairAddressPaseCommand)
clusterCommands.add(pairAlreadyDiscoveredCommand)
clusterCommands.add(pairOnNetworkCommand)
clusterCommands.add(pairOnNetworkShortCommand)
clusterCommands.add(pairOnNetworkLongCommand)
clusterCommands.add(pairOnNetworkVendorCommand)
clusterCommands.add(pairOnNetworkCommissioningModeCommand)
clusterCommands.add(pairOnNetworkCommissionerCommand)
clusterCommands.add(pairOnNetworkDeviceTypeCommand)
clusterCommands.add(pairOnNetworkInstanceNameCommand)
commandManager.register("pairing", clusterCommands)
}

fun main(args: Array<String>) {
val controller = ChipDeviceController(
ControllerParams.newBuilder()
.setUdpListenPort(0)
.setControllerVendorId(0xFFF1)
.setCountryCode("US")
.build()
)
val credentialsIssuer = CredentialsIssuer()
val commandManager = CommandManager()
registerCommandsDiscover(controller, commandManager, credentialsIssuer)
registerCommandsPairing(controller, commandManager, credentialsIssuer)
try {
commandManager.run(args)
} catch (e: Exception) {
println("Run command failed with exception: " + e.message)
System.exit(1)
}
controller.shutdownCommissioning()
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright (c) 2023 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.matter.controller.commands.discover

import chip.devicecontroller.ChipDeviceController
import com.matter.controller.commands.common.CredentialsIssuer
import com.matter.controller.commands.common.MatterCommand
import java.util.concurrent.atomic.AtomicLong

class DiscoverCommand(controller: ChipDeviceController, credsIssuer: CredentialsIssuer?) :
MatterCommand(controller, "resolve", credsIssuer) {
private val mNodeId: AtomicLong = AtomicLong()
private val mFabricId: AtomicLong = AtomicLong()
yufengwangca marked this conversation as resolved.
Show resolved Hide resolved

init {
addArgument("nodeid", 0, Long.MAX_VALUE, mNodeId, null, false)
addArgument("fabricid", 0, Long.MAX_VALUE, mFabricId, null, false)
}

override fun runCommand() {}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
* Copyright (c) 2023 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.matter.controller.commands.discover

import chip.devicecontroller.ChipDeviceController
import chip.devicecontroller.DiscoveredDevice
import com.matter.controller.commands.common.CredentialsIssuer
import com.matter.controller.commands.common.MatterCommand

class DiscoverCommissionablesCommand(
controller: ChipDeviceController, credsIssuer: CredentialsIssuer?
) : MatterCommand(controller, "commissionables", credsIssuer) {
private val MAX_DISCOVERED_DEVICES = 10

override fun runCommand() {
currentCommissioner().discoverCommissionableNodes()

// Pause for 7 seconds
yufengwangca marked this conversation as resolved.
Show resolved Hide resolved
try {
Thread.sleep(7000)
} catch (e: InterruptedException) {
throw RuntimeException(e)
}

getDiscoveredDevice()
}

private fun getDiscoveredDevice() {
yufengwangca marked this conversation as resolved.
Show resolved Hide resolved
// Log at most MAX_DISCOVERED_DEVICES discovered devices
for (i in 0 until MAX_DISCOVERED_DEVICES) {
val device: DiscoveredDevice = currentCommissioner().getDiscoveredDevice(i) ?: break
logDevice(device)
}
}

private fun logDevice(device: DiscoveredDevice) {
println("Discovered node:")
System.out.format("\tDiscriminator: %d", device.discriminator)
System.out.format("\tIP Address : %s%n", device.ipAddress)
}
}
Original file line number Diff line number Diff line change
@@ -1,35 +1,30 @@
/*
* Copyright (c) 2022 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package com.matter.controller.commands.discover;

import chip.devicecontroller.ChipDeviceController;
import com.matter.controller.commands.common.CredentialsIssuer;
import com.matter.controller.commands.common.MatterCommand;

public final class DiscoverCommissionersCommand extends MatterCommand {
public DiscoverCommissionersCommand(
ChipDeviceController controller, CredentialsIssuer credsIssuer) {
super(controller, "commissioners", credsIssuer);
}

@Override
protected final void runCommand() {
// mCommissionableNodeController.DiscoverCommissioners();
}
}
/*
* Copyright (c) 2023 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.matter.controller.commands.discover

import chip.devicecontroller.ChipDeviceController
import com.matter.controller.commands.common.CredentialsIssuer
import com.matter.controller.commands.common.MatterCommand

class DiscoverCommissionersCommand(
controller: ChipDeviceController, credsIssuer: CredentialsIssuer?
) : MatterCommand(controller, "commissioners", credsIssuer) {
override fun runCommand() {
// mCommissionableNodeController.DiscoverCommissioners();
yufengwangca marked this conversation as resolved.
Show resolved Hide resolved
}
}