@@ -627,7 +627,7 @@ JNI_METHOD(void, commissionDevice)
627
627
628
628
JNI_METHOD (void , pairDevice)
629
629
(JNIEnv * env, jobject self, jlong handle, jlong deviceId, jint connObj, jlong pinCode, jbyteArray csrNonce,
630
- jobject networkCredentials)
630
+ jobject networkCredentials, jobject icdRegistrationInfo )
631
631
{
632
632
chip::DeviceLayer::StackLock lock;
633
633
CHIP_ERROR err = CHIP_NO_ERROR;
@@ -656,6 +656,13 @@ JNI_METHOD(void, pairDevice)
656
656
JniByteArray jniCsrNonce (env, csrNonce);
657
657
commissioningParams.SetCSRNonce (jniCsrNonce.byteSpan ());
658
658
}
659
+
660
+ commissioningParams.SetICDRegistrationStrategy (ICDRegistrationStrategy::kBeforeComplete );
661
+ if (icdRegistrationInfo != nullptr )
662
+ {
663
+ wrapper->ApplyICDRegistrationInfo (commissioningParams, icdRegistrationInfo);
664
+ }
665
+
659
666
if (wrapper->GetDeviceAttestationDelegateBridge () != nullptr )
660
667
{
661
668
commissioningParams.SetDeviceAttestationDelegate (wrapper->GetDeviceAttestationDelegateBridge ());
@@ -671,7 +678,7 @@ JNI_METHOD(void, pairDevice)
671
678
672
679
JNI_METHOD (void , pairDeviceWithAddress)
673
680
(JNIEnv * env, jobject self, jlong handle, jlong deviceId, jstring address, jint port, jint discriminator, jlong pinCode,
674
- jbyteArray csrNonce)
681
+ jbyteArray csrNonce, jobject icdRegistrationInfo )
675
682
{
676
683
chip::DeviceLayer::StackLock lock;
677
684
CHIP_ERROR err = CHIP_NO_ERROR;
@@ -699,6 +706,13 @@ JNI_METHOD(void, pairDeviceWithAddress)
699
706
JniByteArray jniCsrNonce (env, csrNonce);
700
707
commissioningParams.SetCSRNonce (jniCsrNonce.byteSpan ());
701
708
}
709
+
710
+ commissioningParams.SetICDRegistrationStrategy (ICDRegistrationStrategy::kBeforeComplete );
711
+ if (icdRegistrationInfo != nullptr )
712
+ {
713
+ wrapper->ApplyICDRegistrationInfo (commissioningParams, icdRegistrationInfo);
714
+ }
715
+
702
716
if (wrapper->GetDeviceAttestationDelegateBridge () != nullptr )
703
717
{
704
718
commissioningParams.SetDeviceAttestationDelegate (wrapper->GetDeviceAttestationDelegateBridge ());
@@ -714,7 +728,7 @@ JNI_METHOD(void, pairDeviceWithAddress)
714
728
715
729
JNI_METHOD (void , pairDeviceWithCode)
716
730
(JNIEnv * env, jobject self, jlong handle, jlong deviceId, jstring setUpCode, jboolean discoverOnce,
717
- jboolean useOnlyOnNetworkDiscovery, jbyteArray csrNonce, jobject networkCredentials)
731
+ jboolean useOnlyOnNetworkDiscovery, jbyteArray csrNonce, jobject networkCredentials, jobject icdRegistrationInfo )
718
732
{
719
733
chip::DeviceLayer::StackLock lock;
720
734
CHIP_ERROR err = CHIP_NO_ERROR;
@@ -748,6 +762,12 @@ JNI_METHOD(void, pairDeviceWithCode)
748
762
wrapper->ApplyNetworkCredentials (commissioningParams, networkCredentials);
749
763
}
750
764
765
+ commissioningParams.SetICDRegistrationStrategy (ICDRegistrationStrategy::kBeforeComplete );
766
+ if (icdRegistrationInfo != nullptr )
767
+ {
768
+ wrapper->ApplyICDRegistrationInfo (commissioningParams, icdRegistrationInfo);
769
+ }
770
+
751
771
if (wrapper->GetDeviceAttestationDelegateBridge () != nullptr )
752
772
{
753
773
commissioningParams.SetDeviceAttestationDelegate (wrapper->GetDeviceAttestationDelegateBridge ());
@@ -899,6 +919,41 @@ JNI_METHOD(void, updateCommissioningNetworkCredentials)
899
919
}
900
920
}
901
921
922
+ JNI_METHOD (void , updateCommissioningICDRegistrationInfo)
923
+ (JNIEnv * env, jobject self, jlong handle, jobject icdRegistrationInfo)
924
+ {
925
+ ChipLogProgress (Controller, " updateCommissioningICDRegistrationInfo() called" );
926
+ chip::DeviceLayer::StackLock lock;
927
+ AndroidDeviceControllerWrapper * wrapper = AndroidDeviceControllerWrapper::FromJNIHandle (handle);
928
+
929
+ CommissioningParameters commissioningParams = wrapper->GetCommissioningParameters ();
930
+ CHIP_ERROR err = wrapper->ApplyICDRegistrationInfo (commissioningParams, icdRegistrationInfo);
931
+ if (err != CHIP_NO_ERROR)
932
+ {
933
+ ChipLogError (Controller, " ApplyICDRegistrationInfo failed. Err = %" CHIP_ERROR_FORMAT, err.Format ());
934
+ JniReferences::GetInstance ().ThrowError (env, sChipDeviceControllerExceptionCls , err);
935
+ return ;
936
+ }
937
+ err = wrapper->UpdateCommissioningParameters (commissioningParams);
938
+ if (err != CHIP_NO_ERROR)
939
+ {
940
+ ChipLogError (Controller, " UpdateCommissioningParameters failed. Err = %" CHIP_ERROR_FORMAT, err.Format ());
941
+ JniReferences::GetInstance ().ThrowError (env, sChipDeviceControllerExceptionCls , err);
942
+ return ;
943
+ }
944
+
945
+ // Only invoke ICDRegistrationInfoReady when called in ICDRegistartionInfo stage.
946
+ if (wrapper->Controller ()->GetCommissioningStage () == CommissioningStage::kICDGetRegistrationInfo )
947
+ {
948
+ err = wrapper->Controller ()->ICDRegistrationInfoReady ();
949
+ if (err != CHIP_NO_ERROR)
950
+ {
951
+ ChipLogError (Controller, " ICDRegistrationInfoReady failed. Err = %" CHIP_ERROR_FORMAT, err.Format ());
952
+ JniReferences::GetInstance ().ThrowError (env, sChipDeviceControllerExceptionCls , err);
953
+ }
954
+ }
955
+ }
956
+
902
957
jint GetCalendarFieldID (JNIEnv * env, const char * method)
903
958
{
904
959
jclass calendarCls = env->FindClass (" java/util/Calendar" );
0 commit comments