Skip to content

Commit 306f22e

Browse files
[Android] Support ICD LIT Device using commissionDevice (#33975)
* Support ICD LIT Device using commissionDevice * Restyled by google-java-format * Restyled by clang-format * Update commission method using Builder * Restyled by whitespace * Restyled by google-java-format * Restyled by gn * Remove warning message in java_controller --------- Co-authored-by: Restyled.io <commits@restyled.io>
1 parent 16a79eb commit 306f22e

File tree

7 files changed

+229
-15
lines changed

7 files changed

+229
-15
lines changed

examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeCommand.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,21 @@
1818
package com.matter.controller.commands.pairing
1919

2020
import chip.devicecontroller.ChipDeviceController
21+
import chip.devicecontroller.CommissionParameters
2122
import com.matter.controller.commands.common.CredentialsIssuer
2223

2324
class PairCodeCommand(val controller: ChipDeviceController, credsIssue: CredentialsIssuer?) :
2425
PairingCommand(controller, "code", credsIssue, PairingModeType.CODE, PairingNetworkType.NONE) {
2526
override fun runCommand() {
27+
val commissionParams =
28+
CommissionParameters.Builder().setNetworkCredentials(getWifiNetworkCredentials()).build()
2629
currentCommissioner()
2730
.pairDeviceWithCode(
2831
getNodeId(),
2932
getOnboardingPayload(),
3033
getDiscoverOnce(),
3134
getUseOnlyOnNetworkDiscovery(),
32-
null,
33-
getWifiNetworkCredentials(),
35+
commissionParams
3436
)
3537
currentCommissioner().setCompletionListener(this)
3638
waitCompleteMs(getTimeoutMillis())

examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeThreadCommand.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package com.matter.controller.commands.pairing
1919

2020
import chip.devicecontroller.ChipDeviceController
21+
import chip.devicecontroller.CommissionParameters
2122
import com.matter.controller.commands.common.CredentialsIssuer
2223

2324
class PairCodeThreadCommand(controller: ChipDeviceController, credsIssue: CredentialsIssuer?) :
@@ -29,14 +30,15 @@ class PairCodeThreadCommand(controller: ChipDeviceController, credsIssue: Creden
2930
PairingNetworkType.THREAD
3031
) {
3132
override fun runCommand() {
33+
val commissionParams =
34+
CommissionParameters.Builder().setNetworkCredentials(getThreadNetworkCredentials()).build()
3235
currentCommissioner()
3336
.pairDeviceWithCode(
3437
getNodeId(),
3538
getOnboardingPayload(),
3639
getDiscoverOnce(),
3740
getUseOnlyOnNetworkDiscovery(),
38-
null,
39-
getThreadNetworkCredentials(),
41+
commissionParams
4042
)
4143
currentCommissioner().setCompletionListener(this)
4244
waitCompleteMs(getTimeoutMillis())

examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairCodeWifiCommand.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package com.matter.controller.commands.pairing
1919

2020
import chip.devicecontroller.ChipDeviceController
21+
import chip.devicecontroller.CommissionParameters
2122
import com.matter.controller.commands.common.CredentialsIssuer
2223

2324
class PairCodeWifiCommand(controller: ChipDeviceController, credsIssue: CredentialsIssuer?) :
@@ -29,14 +30,15 @@ class PairCodeWifiCommand(controller: ChipDeviceController, credsIssue: Credenti
2930
PairingNetworkType.WIFI
3031
) {
3132
override fun runCommand() {
33+
val commissionParams =
34+
CommissionParameters.Builder().setNetworkCredentials(getWifiNetworkCredentials()).build()
3235
currentCommissioner()
3336
.pairDeviceWithCode(
3437
getNodeId(),
3538
getOnboardingPayload(),
3639
getDiscoverOnce(),
3740
getUseOnlyOnNetworkDiscovery(),
38-
null,
39-
getWifiNetworkCredentials(),
41+
commissionParams
4042
)
4143
currentCommissioner().setCompletionListener(this)
4244
waitCompleteMs(getTimeoutMillis())

src/controller/java/BUILD.gn

+1
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,7 @@ android_library("java") {
616616
"src/chip/devicecontroller/CSRInfo.java",
617617
"src/chip/devicecontroller/ChipCommandType.java",
618618
"src/chip/devicecontroller/ChipDeviceController.java",
619+
"src/chip/devicecontroller/CommissionParameters.java",
619620
"src/chip/devicecontroller/CommissioningWindowStatus.java",
620621
"src/chip/devicecontroller/ConnectionFailureException.java",
621622
"src/chip/devicecontroller/ControllerParams.java",

src/controller/java/CHIPDeviceController-JNI.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,8 @@ JNI_METHOD(void, setICDCheckInDelegate)(JNIEnv * env, jobject self, jlong handle
610610
}
611611

612612
JNI_METHOD(void, commissionDevice)
613-
(JNIEnv * env, jobject self, jlong handle, jlong deviceId, jbyteArray csrNonce, jobject networkCredentials)
613+
(JNIEnv * env, jobject self, jlong handle, jlong deviceId, jbyteArray csrNonce, jobject networkCredentials,
614+
jobject icdRegistrationInfo)
614615
{
615616
chip::DeviceLayer::StackLock lock;
616617
CHIP_ERROR err = CHIP_NO_ERROR;
@@ -624,6 +625,10 @@ JNI_METHOD(void, commissionDevice)
624625
err = wrapper->ApplyNetworkCredentials(commissioningParams, networkCredentials);
625626
VerifyOrExit(err == CHIP_NO_ERROR, err = CHIP_ERROR_INVALID_ARGUMENT);
626627
}
628+
629+
commissioningParams.SetICDRegistrationStrategy(ICDRegistrationStrategy::kBeforeComplete);
630+
wrapper->ApplyICDRegistrationInfo(commissioningParams, icdRegistrationInfo);
631+
627632
if (wrapper->GetDeviceAttestationDelegateBridge() != nullptr)
628633
{
629634
commissioningParams.SetDeviceAttestationDelegate(wrapper->GetDeviceAttestationDelegateBridge());

src/controller/java/src/chip/devicecontroller/ChipDeviceController.java

+139-8
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.List;
3333
import java.util.Optional;
3434
import java.util.TimeZone;
35+
import javax.annotation.Nonnull;
3536
import javax.annotation.Nullable;
3637

3738
/** Controller to interact with the CHIP device. */
@@ -156,6 +157,8 @@ public void setICDCheckInDelegate(ICDCheckInDelegate delegate) {
156157
setICDCheckInDelegate(deviceControllerPtr, new ICDCheckInDelegateWrapper(delegate));
157158
}
158159

160+
/* This method was deprecated. Please use {@link ChipDeviceController.pairDevice(BluetoothGatt, int, long, long, CommissionParameters)}. */
161+
@Deprecated
159162
public void pairDevice(
160163
BluetoothGatt bleServer,
161164
int connId,
@@ -165,6 +168,8 @@ public void pairDevice(
165168
pairDevice(bleServer, connId, deviceId, setupPincode, null, networkCredentials, null);
166169
}
167170

171+
/* This method was deprecated. Please use {@link ChipDeviceController.pairDevice(BluetoothGatt, int, long, long, CommissionParameters)}. */
172+
@Deprecated
168173
public void pairDevice(
169174
BluetoothGatt bleServer,
170175
int connId,
@@ -176,6 +181,8 @@ public void pairDevice(
176181
bleServer, connId, deviceId, setupPincode, null, networkCredentials, registrationInfo);
177182
}
178183

184+
/* This method was deprecated. Please use {@link ChipDeviceController.pairDevice(BluetoothGatt, int, long, long, CommissionParameters)}. */
185+
@Deprecated
179186
public void pairDevice(
180187
BluetoothGatt bleServer,
181188
int connId,
@@ -199,8 +206,10 @@ public void pairDevice(
199206
* @param icdRegistrationInfo the informations for ICD registration. For detailed information
200207
* {@link ICDRegistrationInfo}. If this value is null when commissioning an ICD device, {@link
201208
* CompletionListener.onICDRegistrationInfoRequired} is called to request the
202-
* ICDRegistrationInfo value.
209+
* ICDRegistrationInfo value. This method was deprecated. Please use {@link
210+
* ChipDeviceController.pairDevice(BluetoothGatt, int, long, long, CommissionParameters)}.
203211
*/
212+
@Deprecated
204213
public void pairDevice(
205214
BluetoothGatt bleServer,
206215
int connId,
@@ -209,6 +218,31 @@ public void pairDevice(
209218
@Nullable byte[] csrNonce,
210219
NetworkCredentials networkCredentials,
211220
@Nullable ICDRegistrationInfo icdRegistrationInfo) {
221+
CommissionParameters params =
222+
new CommissionParameters.Builder()
223+
.setCsrNonce(csrNonce)
224+
.setNetworkCredentials(networkCredentials)
225+
.setICDRegistrationInfo(icdRegistrationInfo)
226+
.build();
227+
pairDevice(bleServer, connId, deviceId, setupPincode, params);
228+
}
229+
230+
/**
231+
* Pair a device connected through BLE.
232+
*
233+
* @param bleServer the BluetoothGatt representing the BLE connection to the device
234+
* @param connId the BluetoothGatt Id representing the BLE connection to the device
235+
* @param deviceId the node ID to assign to the device
236+
* @param setupPincode the pincode for the device
237+
* @param params Parameters representing commissioning arguments. see detailed in {@link
238+
* CommissionParameters}
239+
*/
240+
public void pairDevice(
241+
BluetoothGatt bleServer,
242+
int connId,
243+
long deviceId,
244+
long setupPincode,
245+
@Nonnull CommissionParameters params) {
212246
if (connectionId == 0) {
213247
connectionId = connId;
214248

@@ -225,15 +259,16 @@ public void pairDevice(
225259
deviceId,
226260
connectionId,
227261
setupPincode,
228-
csrNonce,
229-
networkCredentials,
230-
icdRegistrationInfo);
262+
params.getCsrNonce(),
263+
params.getNetworkCredentials(),
264+
params.getICDRegistrationInfo());
231265
} else {
232266
Log.e(TAG, "Bluetooth connection already in use.");
233267
completionListener.onError(new Exception("Bluetooth connection already in use."));
234268
}
235269
}
236270

271+
/* This method was deprecated. Please use {@link ChipDeviceController.pairDeviceWithAddress(long, String, int, int, long, CommissionParameters)}. */
237272
public void pairDeviceWithAddress(
238273
long deviceId,
239274
String address,
@@ -258,8 +293,11 @@ public void pairDeviceWithAddress(
258293
* @param icdRegistrationInfo the informations for ICD registration. For detailed information
259294
* {@link ICDRegistrationInfo}. If this value is null when commissioning an ICD device, {@link
260295
* CompletionListener.onICDRegistrationInfoRequired} is called to request the
261-
* ICDRegistrationInfo value.
296+
* ICDRegistrationInfo value. This method was deprecated. Please use {@link
297+
* ChipDeviceController.pairDeviceWithAddress(long, String, int, int, long,
298+
* CommissionParameters)}.
262299
*/
300+
@Deprecated
263301
public void pairDeviceWithAddress(
264302
long deviceId,
265303
String address,
@@ -279,6 +317,42 @@ public void pairDeviceWithAddress(
279317
icdRegistrationInfo);
280318
}
281319

320+
/**
321+
* Pair a device connected using IP Address.
322+
*
323+
* @param deviceId the node ID to assign to the device
324+
* @param address IP Address of the connecting device
325+
* @param port the port of the connecting device
326+
* @param discriminator the discriminator for connecting device
327+
* @param pinCode the pincode for connecting device
328+
* @param params Parameters representing commissioning arguments. see detailed in {@link
329+
* CommissionParameters}
330+
*/
331+
public void pairDeviceWithAddress(
332+
long deviceId,
333+
String address,
334+
int port,
335+
int discriminator,
336+
long pinCode,
337+
@Nonnull CommissionParameters params) {
338+
if (params.getNetworkCredentials() != null) {
339+
Log.e(TAG, "Invalid parameter : NetworkCredentials");
340+
completionListener.onError(new Exception("Invalid parameter : NetworkCredentials"));
341+
return;
342+
}
343+
pairDeviceWithAddress(
344+
deviceControllerPtr,
345+
deviceId,
346+
address,
347+
port,
348+
discriminator,
349+
pinCode,
350+
params.getCsrNonce(),
351+
params.getICDRegistrationInfo());
352+
}
353+
354+
/* This method was deprecated. Please use {@link ChipDeviceController.pairDeviceWithCode(long, String, boolean, boolean, CommissionParameters)}. */
355+
@Deprecated
282356
public void pairDeviceWithCode(
283357
long deviceId,
284358
String setupCode,
@@ -312,7 +386,11 @@ public void pairDeviceWithCode(
312386
* {@link ICDRegistrationInfo}. If this value is null when commissioning an ICD device, {@link
313387
* CompletionListener.onICDRegistrationInfoRequired} is called to request the
314388
* ICDRegistrationInfo value.
389+
* <p>This method was deprecated. Please use {@link
390+
* ChipDeviceController.pairDeviceWithCode(long, String, boolean, boolean,
391+
* CommissionParameters)}.
315392
*/
393+
@Deprecated
316394
public void pairDeviceWithCode(
317395
long deviceId,
318396
String setupCode,
@@ -332,6 +410,34 @@ public void pairDeviceWithCode(
332410
icdRegistrationInfo);
333411
}
334412

413+
/**
414+
* Pair a device connected using the scanned QR code or manual entry code.
415+
*
416+
* @param deviceId the node ID to assign to the device
417+
* @param setupCode the scanned QR code or manual entry code
418+
* @param discoverOnce the flag to enable/disable PASE auto retry mechanism
419+
* @param useOnlyOnNetworkDiscovery the flag to indicate the commissionable device is available on
420+
* the network
421+
* @param params Parameters representing commissioning arguments. see detailed in {@link
422+
* CommissionParameters}
423+
*/
424+
public void pairDeviceWithCode(
425+
long deviceId,
426+
String setupCode,
427+
boolean discoverOnce,
428+
boolean useOnlyOnNetworkDiscovery,
429+
@Nonnull CommissionParameters params) {
430+
pairDeviceWithCode(
431+
deviceControllerPtr,
432+
deviceId,
433+
setupCode,
434+
discoverOnce,
435+
useOnlyOnNetworkDiscovery,
436+
params.getCsrNonce(),
437+
params.getNetworkCredentials(),
438+
params.getICDRegistrationInfo());
439+
}
440+
335441
public void establishPaseConnection(long deviceId, int connId, long setupPincode) {
336442
if (connectionId == 0) {
337443
connectionId = connId;
@@ -371,9 +477,12 @@ public void establishPaseConnection(long deviceId, String address, int port, lon
371477
*
372478
* @param deviceId the ID of the node to be commissioned
373479
* @param networkCredentials the credentials (Wi-Fi or Thread) to be provisioned
480+
* <p>This method was deprecated. Please use {@link
481+
* ChipDeviceController.commissionDevice(long, CommissionParameters)}.
374482
*/
483+
@Deprecated
375484
public void commissionDevice(long deviceId, @Nullable NetworkCredentials networkCredentials) {
376-
commissionDevice(deviceControllerPtr, deviceId, /* csrNonce= */ null, networkCredentials);
485+
commissionDevice(deviceControllerPtr, deviceId, /* csrNonce= */ null, networkCredentials, null);
377486
}
378487

379488
/**
@@ -384,10 +493,31 @@ public void commissionDevice(long deviceId, @Nullable NetworkCredentials network
384493
* @param deviceId the ID of the node to be commissioned
385494
* @param csrNonce a nonce to be used for the CSR request
386495
* @param networkCredentials the credentials (Wi-Fi or Thread) to be provisioned
496+
* <p>This method was deprecated. Please use {@link
497+
* ChipDeviceController.commissionDevice(long, CommissionParameters)}.
387498
*/
499+
@Deprecated
388500
public void commissionDevice(
389501
long deviceId, @Nullable byte[] csrNonce, @Nullable NetworkCredentials networkCredentials) {
390-
commissionDevice(deviceControllerPtr, deviceId, csrNonce, networkCredentials);
502+
commissionDevice(deviceControllerPtr, deviceId, csrNonce, networkCredentials, null);
503+
}
504+
505+
/**
506+
* Initiates the automatic commissioning flow using the specified network credentials. It is
507+
* expected that a secure session has already been established via {@link
508+
* #establishPaseConnection(long, int, long)}.
509+
*
510+
* @param deviceId the ID of the node to be commissioned
511+
* @param params Parameters representing commissioning arguments. see detailed in {@link
512+
* CommissionParameters}
513+
*/
514+
public void commissionDevice(long deviceId, @Nonnull CommissionParameters params) {
515+
commissionDevice(
516+
deviceControllerPtr,
517+
deviceId,
518+
params.getCsrNonce(),
519+
params.getNetworkCredentials(),
520+
params.getICDRegistrationInfo());
391521
}
392522

393523
/**
@@ -1498,7 +1628,8 @@ private native void commissionDevice(
14981628
long deviceControllerPtr,
14991629
long deviceId,
15001630
@Nullable byte[] csrNonce,
1501-
@Nullable NetworkCredentials networkCredentials);
1631+
@Nullable NetworkCredentials networkCredentials,
1632+
@Nullable ICDRegistrationInfo icdRegistrationInfo);
15021633

15031634
private native void continueCommissioning(
15041635
long deviceControllerPtr, long devicePtr, boolean ignoreAttestationFailure);

0 commit comments

Comments
 (0)