diff --git a/src/controller/java/CHIPDeviceController-JNI.cpp b/src/controller/java/CHIPDeviceController-JNI.cpp index e5bbd179c1fb13..cbb592bdde4d6e 100644 --- a/src/controller/java/CHIPDeviceController-JNI.cpp +++ b/src/controller/java/CHIPDeviceController-JNI.cpp @@ -246,6 +246,28 @@ JNI_METHOD(void, pairDeviceWithAddress) } } +JNI_METHOD(void, establishPaseConnection)(JNIEnv * env, jobject self, jlong handle, jlong deviceId, jint connObj, jlong pinCode) +{ + chip::DeviceLayer::StackLock lock; + CHIP_ERROR err = CHIP_NO_ERROR; + AndroidDeviceControllerWrapper * wrapper = AndroidDeviceControllerWrapper::FromJNIHandle(handle); + + RendezvousParameters rendezvousParams = RendezvousParameters() + .SetSetupPINCode(pinCode) +#if CONFIG_NETWORK_LAYER_BLE + .SetConnectionObject(reinterpret_cast(connObj)) +#endif + .SetPeerAddress(Transport::PeerAddress::BLE()); + + err = wrapper->Controller()->EstablishPASEConnection(deviceId, rendezvousParams); + + if (err != CHIP_NO_ERROR) + { + ChipLogError(Controller, "Failed to establish PASE connection."); + JniReferences::GetInstance().ThrowError(env, sChipDeviceControllerExceptionCls, err); + } +} + JNI_METHOD(void, unpairDevice)(JNIEnv * env, jobject self, jlong handle, jlong deviceId) { chip::DeviceLayer::StackLock lock; diff --git a/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java b/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java index f9491ece1994c4..82cb82fd31126f 100644 --- a/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java +++ b/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java @@ -101,6 +101,25 @@ public void pairDeviceWithAddress( deviceControllerPtr, deviceId, address, port, discriminator, pinCode, csrNonce); } + public void establishPaseConnection(long deviceId, int connId, long setupPincode) { + if (connectionId == 0) { + connectionId = connId; + + if (connectionId == 0) { + Log.e(TAG, "Failed to add Bluetooth connection."); + completionListener.onError(new Exception("Failed to add Bluetooth connection.")); + return; + } + + Log.d(TAG, "Bluetooth connection added with ID: " + connectionId); + Log.d(TAG, "Establishing PASE connection with ID: " + deviceId); + establishPaseConnection(deviceControllerPtr, deviceId, connId, setupPincode); + } else { + Log.e(TAG, "Bluetooth connection already in use."); + completionListener.onError(new Exception("Bluetooth connection already in use.")); + } + } + public void unpairDevice(long deviceId) { unpairDevice(deviceControllerPtr, deviceId); } @@ -263,6 +282,9 @@ private native void pairDeviceWithAddress( long pinCode, @Nullable byte[] csrNonce); + private native void establishPaseConnection( + long deviceControllerPtr, long deviceId, int connId, long setupPincode); + private native void unpairDevice(long deviceControllerPtr, long deviceId); private native long getDeviceBeingCommissionedPointer(long deviceControllerPtr, long nodeId);