diff --git a/config/ameba/args.gni b/config/ameba/args.gni index b3f7af63e284ab..5d9420e0fbb63c 100755 --- a/config/ameba/args.gni +++ b/config/ameba/args.gni @@ -31,7 +31,5 @@ chip_inet_config_enable_udp_endpoint = true chip_bypass_rendezvous = false chip_config_network_layer_ble = true -chip_ip_commissioning = true -chip_use_clusters_for_ip_commissioning = true custom_toolchain = "//third_party/connectedhomeip/config/ameba/toolchain:ameba" diff --git a/docs/guides/ip_commissioning.md b/docs/guides/ip_commissioning.md index feaf99993c5733..ca94e611bf0c62 100644 --- a/docs/guides/ip_commissioning.md +++ b/docs/guides/ip_commissioning.md @@ -40,7 +40,7 @@ device into commissioning mode. ### linux builds with an ethernet connection ```bash -gn gen out/debug --args='chip_ip_commissioning=true' +gn gen out/debug ninja -C out/debug ``` diff --git a/examples/all-clusters-app/ameba/README.md b/examples/all-clusters-app/ameba/README.md index 38615327fa233f..a21e4c926635a8 100644 --- a/examples/all-clusters-app/ameba/README.md +++ b/examples/all-clusters-app/ameba/README.md @@ -66,8 +66,6 @@ There are three commissioning modes supported by Ameba platform: 1. In "connectedhomeip/config/ameba/args.gni" - set `chip_bypass_rendezvous = true` - - Set `chip_ip_commissioning = false` - - Set `chip_use_clusters_for_ip_commissioning = false` - Set `chip_config_network_layer_ble = false` 2. In "connectedhomeip/src/platform/Ameba/CHIPDevicePlatformConfig.h" @@ -87,8 +85,6 @@ There are three commissioning modes supported by Ameba platform: 1. In "connectedhomeip/config/ameba/args.gni" - set `chip_bypass_rendezvous = false` - - Set `chip_ip_commissioning = false` - - Set `chip_use_clusters_for_ip_commissioning = false` - Set `chip_config_network_layer_ble = true` 2. In "connectedhomeip/src/platform/Ameba/CHIPDevicePlatformConfig.h" @@ -107,8 +103,6 @@ There are three commissioning modes supported by Ameba platform: 1. In "connectedhomeip/config/ameba/args.gni" - set `chip_bypass_rendezvous = false` - - Set `chip_ip_commissioning = true` - - Set `chip_use_clusters_for_ip_commissioning = true` - Set `chip_config_network_layer_ble = false` 2. In "connectedhomeip/src/platform/Ameba/CHIPDevicePlatformConfig.h" diff --git a/examples/chip-tool/commands/pairing/PairingCommand.cpp b/examples/chip-tool/commands/pairing/PairingCommand.cpp index b8507afb96dc3d..d8a8efaacb55ef 100644 --- a/examples/chip-tool/commands/pairing/PairingCommand.cpp +++ b/examples/chip-tool/commands/pairing/PairingCommand.cpp @@ -248,10 +248,7 @@ CHIP_ERROR PairingCommand::SetupNetwork() { case PairingNetworkType::None: case PairingNetworkType::Ethernet: - // Nothing to do other than to resolve the device's operational address. - err = UpdateNetworkAddress(); - VerifyOrExit(err == CHIP_NO_ERROR, - ChipLogError(chipTool, "Setup failure! Error calling UpdateNetworkAddress: %s", ErrorStr(err))); + // Nothing to do here - device address has been resolved as part of the commissioning process. break; case PairingNetworkType::WiFi: case PairingNetworkType::Thread: diff --git a/examples/platform/linux/BUILD.gn b/examples/platform/linux/BUILD.gn index 239f32bb3e4555..3237823efce162 100644 --- a/examples/platform/linux/BUILD.gn +++ b/examples/platform/linux/BUILD.gn @@ -39,10 +39,6 @@ source_set("app-main") { if (chip_enable_pw_rpc) { defines += [ "PW_RPC_ENABLED" ] } - if (chip_ip_commissioning) { - # BLE and on-network. Code defaults to BLE if this is not set. - defines += [ "CONFIG_RENDEZVOUS_MODE=6" ] - } if (chip_build_libshell) { defines += [ "ENABLE_CHIP_SHELL" ] } diff --git a/examples/tv-app/linux/args.gni b/examples/tv-app/linux/args.gni index 8d724f9f9d50ac..1c8eb57e4d1e09 100644 --- a/examples/tv-app/linux/args.gni +++ b/examples/tv-app/linux/args.gni @@ -25,4 +25,3 @@ chip_project_config_include_dirs = chip_project_config_include_dirs += [ "${chip_root}/config/standalone" ] chip_build_libshell = true -chip_use_clusters_for_ip_commissioning = true diff --git a/scripts/build/builders/android.py b/scripts/build/builders/android.py index 71ee5907267ca7..68eabb29fc7b90 100644 --- a/scripts/build/builders/android.py +++ b/scripts/build/builders/android.py @@ -143,7 +143,6 @@ def generate(self): gn_args['target_cpu'] = self.board.TargetCpuName() gn_args['android_ndk_root'] = os.environ['ANDROID_NDK_HOME'] gn_args['android_sdk_root'] = os.environ['ANDROID_HOME'] - gn_args['chip_use_clusters_for_ip_commissioning'] = True gn_args.update(self.app.AppGnArgs()) args_str = "" diff --git a/scripts/build/testdata/build_all_except_host.txt b/scripts/build/testdata/build_all_except_host.txt index 3678a22f4717db..62857177faf18b 100644 --- a/scripts/build/testdata/build_all_except_host.txt +++ b/scripts/build/testdata/build_all_except_host.txt @@ -11,7 +11,7 @@ python3 build/chip/java/tests/generate_jars_for_test.py python3 third_party/android_deps/set_up_android_deps.py # Generating android-androidstudio-arm-chip-tool -gn gen --check --fail-on-unused-args {out}/android-androidstudio-arm-chip-tool '--args=target_os="android" target_cpu="arm" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" chip_use_clusters_for_ip_commissioning=true ' --ide=json --json-ide-script=//scripts/examples/gn_to_cmakelists.py +gn gen --check --fail-on-unused-args {out}/android-androidstudio-arm-chip-tool '--args=target_os="android" target_cpu="arm" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" ' --ide=json --json-ide-script=//scripts/examples/gn_to_cmakelists.py # Accepting NDK licenses @ tools bash -c 'yes | TEST_ANDROID_HOME/tools/bin/sdkmanager --licenses >/dev/null' @@ -23,7 +23,7 @@ python3 build/chip/java/tests/generate_jars_for_test.py python3 third_party/android_deps/set_up_android_deps.py # Generating android-androidstudio-arm64-chip-tool -gn gen --check --fail-on-unused-args {out}/android-androidstudio-arm64-chip-tool '--args=target_os="android" target_cpu="arm64" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" chip_use_clusters_for_ip_commissioning=true ' --ide=json --json-ide-script=//scripts/examples/gn_to_cmakelists.py +gn gen --check --fail-on-unused-args {out}/android-androidstudio-arm64-chip-tool '--args=target_os="android" target_cpu="arm64" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" ' --ide=json --json-ide-script=//scripts/examples/gn_to_cmakelists.py # Accepting NDK licenses @ tools bash -c 'yes | TEST_ANDROID_HOME/tools/bin/sdkmanager --licenses >/dev/null' @@ -35,7 +35,7 @@ python3 build/chip/java/tests/generate_jars_for_test.py python3 third_party/android_deps/set_up_android_deps.py # Generating android-androidstudio-x64-chip-tool -gn gen --check --fail-on-unused-args {out}/android-androidstudio-x64-chip-tool '--args=target_os="android" target_cpu="x64" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" chip_use_clusters_for_ip_commissioning=true ' --ide=json --json-ide-script=//scripts/examples/gn_to_cmakelists.py +gn gen --check --fail-on-unused-args {out}/android-androidstudio-x64-chip-tool '--args=target_os="android" target_cpu="x64" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" ' --ide=json --json-ide-script=//scripts/examples/gn_to_cmakelists.py # Accepting NDK licenses @ tools bash -c 'yes | TEST_ANDROID_HOME/tools/bin/sdkmanager --licenses >/dev/null' @@ -47,7 +47,7 @@ python3 build/chip/java/tests/generate_jars_for_test.py python3 third_party/android_deps/set_up_android_deps.py # Generating android-androidstudio-x86-chip-tool -gn gen --check --fail-on-unused-args {out}/android-androidstudio-x86-chip-tool '--args=target_os="android" target_cpu="x86" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" chip_use_clusters_for_ip_commissioning=true ' --ide=json --json-ide-script=//scripts/examples/gn_to_cmakelists.py +gn gen --check --fail-on-unused-args {out}/android-androidstudio-x86-chip-tool '--args=target_os="android" target_cpu="x86" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" ' --ide=json --json-ide-script=//scripts/examples/gn_to_cmakelists.py # Accepting NDK licenses @ tools bash -c 'yes | TEST_ANDROID_HOME/tools/bin/sdkmanager --licenses >/dev/null' @@ -59,7 +59,7 @@ python3 build/chip/java/tests/generate_jars_for_test.py python3 third_party/android_deps/set_up_android_deps.py # Generating android-arm-chip-tool -gn gen --check --fail-on-unused-args {out}/android-arm-chip-tool '--args=target_os="android" target_cpu="arm" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" chip_use_clusters_for_ip_commissioning=true ' +gn gen --check --fail-on-unused-args {out}/android-arm-chip-tool '--args=target_os="android" target_cpu="arm" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" ' # Accepting NDK licenses @ tools bash -c 'yes | TEST_ANDROID_HOME/tools/bin/sdkmanager --licenses >/dev/null' @@ -71,7 +71,7 @@ python3 build/chip/java/tests/generate_jars_for_test.py python3 third_party/android_deps/set_up_android_deps.py # Generating android-arm64-chip-test -gn gen --check --fail-on-unused-args {out}/android-arm64-chip-test '--args=target_os="android" target_cpu="arm64" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" chip_use_clusters_for_ip_commissioning=true ' +gn gen --check --fail-on-unused-args {out}/android-arm64-chip-test '--args=target_os="android" target_cpu="arm64" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" ' # Accepting NDK licenses @ tools bash -c 'yes | TEST_ANDROID_HOME/tools/bin/sdkmanager --licenses >/dev/null' @@ -83,7 +83,7 @@ python3 build/chip/java/tests/generate_jars_for_test.py python3 third_party/android_deps/set_up_android_deps.py # Generating android-arm64-chip-tool -gn gen --check --fail-on-unused-args {out}/android-arm64-chip-tool '--args=target_os="android" target_cpu="arm64" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" chip_use_clusters_for_ip_commissioning=true ' +gn gen --check --fail-on-unused-args {out}/android-arm64-chip-tool '--args=target_os="android" target_cpu="arm64" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" ' # Accepting NDK licenses @ tools bash -c 'yes | TEST_ANDROID_HOME/tools/bin/sdkmanager --licenses >/dev/null' @@ -95,7 +95,7 @@ python3 build/chip/java/tests/generate_jars_for_test.py python3 third_party/android_deps/set_up_android_deps.py # Generating android-arm64-chip-tvserver -gn gen --check --fail-on-unused-args {out}/android-arm64-chip-tvserver '--args=target_os="android" target_cpu="arm64" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" chip_use_clusters_for_ip_commissioning=true chip_config_network_layer_ble=false ' +gn gen --check --fail-on-unused-args {out}/android-arm64-chip-tvserver '--args=target_os="android" target_cpu="arm64" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" chip_config_network_layer_ble=false ' # Accepting NDK licenses @ tools bash -c 'yes | TEST_ANDROID_HOME/tools/bin/sdkmanager --licenses >/dev/null' @@ -107,7 +107,7 @@ python3 build/chip/java/tests/generate_jars_for_test.py python3 third_party/android_deps/set_up_android_deps.py # Generating android-x64-chip-tool -gn gen --check --fail-on-unused-args {out}/android-x64-chip-tool '--args=target_os="android" target_cpu="x64" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" chip_use_clusters_for_ip_commissioning=true ' +gn gen --check --fail-on-unused-args {out}/android-x64-chip-tool '--args=target_os="android" target_cpu="x64" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" ' # Accepting NDK licenses @ tools bash -c 'yes | TEST_ANDROID_HOME/tools/bin/sdkmanager --licenses >/dev/null' @@ -119,7 +119,7 @@ python3 build/chip/java/tests/generate_jars_for_test.py python3 third_party/android_deps/set_up_android_deps.py # Generating android-x86-chip-tool -gn gen --check --fail-on-unused-args {out}/android-x86-chip-tool '--args=target_os="android" target_cpu="x86" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" chip_use_clusters_for_ip_commissioning=true ' +gn gen --check --fail-on-unused-args {out}/android-x86-chip-tool '--args=target_os="android" target_cpu="x86" android_ndk_root="TEST_ANDROID_NDK_HOME" android_sdk_root="TEST_ANDROID_HOME" ' # Accepting NDK licenses @ tools bash -c 'yes | TEST_ANDROID_HOME/tools/bin/sdkmanager --licenses >/dev/null' diff --git a/scripts/build_python.sh b/scripts/build_python.sh index cfc565a04b5f64..7d26083947657e 100755 --- a/scripts/build_python.sh +++ b/scripts/build_python.sh @@ -41,7 +41,6 @@ ENVIRONMENT_ROOT="$CHIP_ROOT/out/python_env" declare chip_detail_logging=false declare enable_pybindings=false declare chip_mdns -declare clusters=true declare case_retry_delta help() { @@ -55,8 +54,6 @@ Input Options: By default it is false. -m, --chip_mdns ChipMDNSValue Specify ChipMDNSValue as platform or minimal. By default it is minimal. - -c, --clusters_for_ip_commissioning true/false Specify whether to use clusters for IP commissioning. - By default it is true. -p, --enable_pybindings EnableValue Specify whether to enable pybindings as python controller. -t --time_between_case_retries MRPActiveRetryInterval Specify MRPActiveRetryInterval value @@ -80,10 +77,6 @@ while (($#)); do chip_mdns=$2 shift ;; - --clusters_for_ip_commissioning | -c) - clusters=$2 - shift - ;; --enable_pybindings | -p) enable_pybindings=$2 shift @@ -111,7 +104,7 @@ source "$CHIP_ROOT/scripts/activate.sh" [[ -n "$chip_mdns" ]] && chip_mdns_arg="chip_mdns=\"$chip_mdns\"" || chip_mdns_arg="" [[ -n "$chip_case_retry_delta" ]] && chip_case_retry_arg="chip_case_retry_delta=$chip_case_retry_delta" || chip_case_retry_arg="" -gn --root="$CHIP_ROOT" gen "$OUTPUT_ROOT" --args="chip_detail_logging=$chip_detail_logging enable_pylib=$enable_pybindings enable_rtti=$enable_pybindings chip_use_clusters_for_ip_commissioning=$clusters chip_project_config_include_dirs=[\"//config/python\"] $chip_mdns_arg $chip_case_retry_arg" +gn --root="$CHIP_ROOT" gen "$OUTPUT_ROOT" --args="chip_detail_logging=$chip_detail_logging enable_pylib=$enable_pybindings enable_rtti=$enable_pybindings chip_project_config_include_dirs=[\"//config/python\"] $chip_mdns_arg $chip_case_retry_arg" # Compiles python files # Check pybindings was requested diff --git a/scripts/examples/android_app_ide.sh b/scripts/examples/android_app_ide.sh index bd9db3de28c6a3..b5a221bce121b5 100755 --- a/scripts/examples/android_app_ide.sh +++ b/scripts/examples/android_app_ide.sh @@ -43,4 +43,4 @@ python3 third_party/android_deps/set_up_android_deps.py # Build CMake for Android Studio echo "build ide" -gn gen --check --fail-on-unused-args out/"android_$TARGET_CPU" --args="target_os=\"android\" target_cpu=\"$TARGET_CPU\" android_ndk_root=\"$ANDROID_NDK_HOME\" android_sdk_root=\"$ANDROID_HOME\" chip_use_clusters_for_ip_commissioning=\"true\"" --ide=json --json-ide-script=//scripts/examples/gn_to_cmakelists.py +gn gen --check --fail-on-unused-args out/"android_$TARGET_CPU" --args="target_os=\"android\" target_cpu=\"$TARGET_CPU\" android_ndk_root=\"$ANDROID_NDK_HOME\" android_sdk_root=\"$ANDROID_HOME\"" --ide=json --json-ide-script=//scripts/examples/gn_to_cmakelists.py diff --git a/src/app/BUILD.gn b/src/app/BUILD.gn index 7db33c8e0fb495..793fc2a6bfc3b0 100644 --- a/src/app/BUILD.gn +++ b/src/app/BUILD.gn @@ -123,13 +123,6 @@ static_library("app") { "reporting/Engine.h", ] - if (chip_ip_commissioning) { - defines = [ - "CONFIG_USE_CLUSTERS_FOR_IP_COMMISSIONING=1", - "CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY=1", - ] - } - public_deps = [ ":app_buildconfig", "${chip_root}/src/app/util:device_callbacks_manager", diff --git a/src/app/common_flags.gni b/src/app/common_flags.gni index 45e98373af3d0b..1d4309810d57e8 100644 --- a/src/app/common_flags.gni +++ b/src/app/common_flags.gni @@ -15,5 +15,4 @@ declare_args() { # Temporary flag for interaction model and echo protocols, set it to true to enable chip_app_use_echo = false - chip_ip_commissioning = false } diff --git a/src/controller/CHIPDeviceController.cpp b/src/controller/CHIPDeviceController.cpp index 93bbf5a000beb7..efa19d5dd09978 100644 --- a/src/controller/CHIPDeviceController.cpp +++ b/src/controller/CHIPDeviceController.cpp @@ -963,6 +963,15 @@ void DeviceCommissioner::RendezvousCleanup(CHIP_ERROR status) { FreeRendezvousSession(); + if (mDeviceBeingCommissioned != nullptr) + { + // Release the commissionee device. For BLE, this is stored, + // for IP commissioning, we have taken a reference to the + // operational node to send the completion command. + ReleaseCommissioneeDevice(mDeviceBeingCommissioned); + mDeviceBeingCommissioned = nullptr; + } + if (mPairingDelegate != nullptr) { mPairingDelegate->OnPairingComplete(status); @@ -1010,11 +1019,7 @@ void DeviceCommissioner::OnSessionEstablished() // TODO: Add code to receive OpCSR from the device, and process the signing request // For IP rendezvous, this is sent as part of the state machine. -#if CONFIG_USE_CLUSTERS_FOR_IP_COMMISSIONING bool usingLegacyFlowWithImmediateStart = !mIsIPRendezvous; -#else - bool usingLegacyFlowWithImmediateStart = true; -#endif if (usingLegacyFlowWithImmediateStart) { @@ -1498,23 +1503,21 @@ CHIP_ERROR DeviceCommissioner::OnOperationalCredentialsProvisioningCompletion(Co ChipLogProgress(Controller, "Operational credentials provisioned on device %p", device); VerifyOrReturnError(device != nullptr, CHIP_ERROR_INVALID_ARGUMENT); -#if CONFIG_USE_CLUSTERS_FOR_IP_COMMISSIONING + mSystemState->SystemLayer()->CancelTimer(OnSessionEstablishmentTimeoutCallback, this); + + mPairedDevices.Insert(device->GetDeviceId()); + mPairedDevicesUpdated = true; + + if (mPairingDelegate != nullptr) + { + mPairingDelegate->OnStatusUpdate(DevicePairingDelegate::SecurePairingSuccess); + } if (mIsIPRendezvous) { AdvanceCommissioningStage(CHIP_NO_ERROR); } else -#endif { - mSystemState->SystemLayer()->CancelTimer(OnSessionEstablishmentTimeoutCallback, this); - - mPairedDevices.Insert(device->GetDeviceId()); - mPairedDevicesUpdated = true; - - if (mPairingDelegate != nullptr) - { - mPairingDelegate->OnStatusUpdate(DevicePairingDelegate::SecurePairingSuccess); - } RendezvousCleanup(CHIP_NO_ERROR); } @@ -1662,19 +1665,20 @@ void DeviceCommissioner::OnDeviceConnectedFn(void * context, DeviceProxy * devic DeviceCommissioner * commissioner = static_cast(context); VerifyOrReturn(commissioner != nullptr, ChipLogProgress(Controller, "Device connected callback with null context. Ignoring")); - if (commissioner->mDeviceBeingCommissioned != nullptr) + if (commissioner->mIsIPRendezvous) { - CommissioneeDeviceProxy * deviceBeingPaired = commissioner->mDeviceBeingCommissioned; - if (device->GetDeviceId() == deviceBeingPaired->GetDeviceId() && commissioner->mIsIPRendezvous) + if (commissioner->mCommissioningStage == CommissioningStage::kFindOperational) { - if (commissioner->mCommissioningStage == CommissioningStage::kFindOperational) - { - commissioner->AdvanceCommissioningStage(CHIP_NO_ERROR); - } - // For IP rendezvous, we don't want to call commissioning complete below because IP commissioning - // has more steps currently. - return; + commissioner->mDeviceOperational = device; + commissioner->AdvanceCommissioningStage(CHIP_NO_ERROR); } + else + { + commissioner->mPairingDelegate->OnPairingComplete(CHIP_NO_ERROR); + } + // For IP rendezvous, we don't want to call commissioning complete below because IP commissioning + // has more steps currently. + return; } VerifyOrReturn(commissioner->mPairingDelegate != nullptr, @@ -1747,13 +1751,22 @@ void DeviceCommissioner::AdvanceCommissioningStage(CHIP_ERROR err) { return; } - CommissioneeDeviceProxy * device = nullptr; - if (mDeviceBeingCommissioned == nullptr) + if (nextStage == CommissioningStage::kSendComplete || nextStage == CommissioningStage::kCleanup) { - return; + if (mDeviceOperational == nullptr) + { + ChipLogError(Controller, "Invalid operational device for commissioning"); + return; + } + } + else + { + if (mDeviceBeingCommissioned == nullptr) + { + ChipLogError(Controller, "Invalid commissionee device for commissioning"); + return; + } } - - device = mDeviceBeingCommissioned; // TODO(cecille): We probably want something better than this for breadcrumbs. uint64_t breadcrumb = static_cast(nextStage); @@ -1770,7 +1783,7 @@ void DeviceCommissioner::AdvanceCommissioningStage(CHIP_ERROR err) // TODO(cecille): Find a way to enumerate the clusters here. GeneralCommissioningCluster genCom; // TODO: should get the endpoint information from the descriptor cluster. - genCom.Associate(device, 0); + genCom.Associate(mDeviceBeingCommissioned, 0); // TODO(cecille): Make this a parameter uint16_t commissioningExpirySeconds = 60; genCom.ArmFailSafe(mSuccess.Cancel(), mFailure.Cancel(), commissioningExpirySeconds, breadcrumb, kCommandTimeoutMs); @@ -1813,14 +1826,14 @@ void DeviceCommissioner::AdvanceCommissioningStage(CHIP_ERROR err) chip::CharSpan countryCode(countryCodeStr, actualCountryCodeSize); GeneralCommissioningCluster genCom; - genCom.Associate(device, 0); + genCom.Associate(mDeviceBeingCommissioned, 0); genCom.SetRegulatoryConfig(mSuccess.Cancel(), mFailure.Cancel(), static_cast(regulatoryLocation), countryCode, breadcrumb, kCommandTimeoutMs); } break; case CommissioningStage::kDeviceAttestation: { ChipLogProgress(Controller, "Exchanging vendor certificates"); - CHIP_ERROR status = SendCertificateChainRequestCommand(device, CertificateType::kPAI); + CHIP_ERROR status = SendCertificateChainRequestCommand(mDeviceBeingCommissioned, CertificateType::kPAI); if (status != CHIP_NO_ERROR) { ChipLogError(Controller, "Failed in sending 'Certificate Chain Request' command to the device: err %s", ErrorStr(err)); @@ -1833,7 +1846,7 @@ void DeviceCommissioner::AdvanceCommissioningStage(CHIP_ERROR err) ChipLogProgress(Controller, "Exchanging certificates"); // TODO(cecille): Once this is implemented through the clusters, it should be moved to the proper stage and the callback // should advance the commissioning stage - CHIP_ERROR status = SendOperationalCertificateSigningRequestCommand(device); + CHIP_ERROR status = SendOperationalCertificateSigningRequestCommand(mDeviceBeingCommissioned); if (status != CHIP_NO_ERROR) { ChipLogError(Controller, "Failed in sending 'CSR Request' command to the device: err %s", ErrorStr(err)); @@ -1857,38 +1870,28 @@ void DeviceCommissioner::AdvanceCommissioningStage(CHIP_ERROR err) } break; case CommissioningStage::kFindOperational: { + PeerId peerId = PeerId().SetCompressedFabricId(GetCompressedFabricId()).SetNodeId(mDeviceBeingCommissioned->GetDeviceId()); + RendezvousCleanup(CHIP_NO_ERROR); #if CHIP_DEVICE_CONFIG_ENABLE_DNSSD ChipLogProgress(Controller, "Finding node on operational network"); - Dnssd::Resolver::Instance().ResolveNodeId( - PeerId().SetCompressedFabricId(GetCompressedFabricId()).SetNodeId(device->GetDeviceId()), Inet::IPAddressType::kAny); + Dnssd::Resolver::Instance().ResolveNodeId(peerId, Inet::IPAddressType::kAny); #endif } break; case CommissioningStage::kSendComplete: { - // TODO this is actualy not correct - we must reconnect over CASE to send this command. ChipLogProgress(Controller, "Calling commissioning complete"); GeneralCommissioningCluster genCom; - genCom.Associate(device, 0); + genCom.Associate(mDeviceOperational, 0); genCom.CommissioningComplete(mSuccess.Cancel(), mFailure.Cancel()); } break; case CommissioningStage::kCleanup: ChipLogProgress(Controller, "Rendezvous cleanup"); - mSystemState->SystemLayer()->CancelTimer(OnSessionEstablishmentTimeoutCallback, this); - - mPairedDevices.Insert(device->GetDeviceId()); - mPairedDevicesUpdated = true; - if (mPairingDelegate != nullptr) { - mPairingDelegate->OnStatusUpdate(DevicePairingDelegate::SecurePairingSuccess); - } - RendezvousCleanup(CHIP_NO_ERROR); - if (mDeviceBeingCommissioned != nullptr) - { - ReleaseCommissioneeDevice(mDeviceBeingCommissioned); - mDeviceBeingCommissioned = nullptr; + mPairingDelegate->OnCommissioningComplete(mDeviceOperational->GetDeviceId(), CHIP_NO_ERROR); } + mDeviceOperational = nullptr; break; case CommissioningStage::kSecurePairing: case CommissioningStage::kError: diff --git a/src/controller/CHIPDeviceController.h b/src/controller/CHIPDeviceController.h index 6f684e7b76cebc..2e854f9e3a57d9 100644 --- a/src/controller/CHIPDeviceController.h +++ b/src/controller/CHIPDeviceController.h @@ -615,6 +615,7 @@ class DLL_EXPORT DeviceCommissioner : public DeviceController, DevicePairingDelegate * mPairingDelegate; CommissioneeDeviceProxy * mDeviceBeingCommissioned = nullptr; + DeviceProxy * mDeviceOperational = nullptr; Credentials::CertificateType mCertificateTypeBeingRequested = Credentials::CertificateType::kUnknown; diff --git a/src/controller/python/chip/ChipDeviceCtrl.py b/src/controller/python/chip/ChipDeviceCtrl.py index 45b003010fe365..82e7461f282929 100644 --- a/src/controller/python/chip/ChipDeviceCtrl.py +++ b/src/controller/python/chip/ChipDeviceCtrl.py @@ -133,6 +133,8 @@ def HandleCommissioningComplete(nodeid, err): self.state = DCState.IDLE self._ChipStack.callbackRes = err self._ChipStack.completeEvent.set() + self._ChipStack.commissioningCompleteEvent.set() + self._ChipStack.commissioningEventRes = err im.InitIMDelegate() ClusterCommand.Init(self) @@ -197,11 +199,20 @@ def CloseSession(self, nodeid): ) def ConnectIP(self, ipaddr, setupPinCode, nodeid): + # IP connection will run through full commissioning, so we need to wait + # for the commissioning complete event, not just any callback. self.state = DCState.RENDEZVOUS_ONGOING - return self._ChipStack.CallAsync( + self._ChipStack.CallAsync( lambda: self._dmLib.pychip_DeviceController_ConnectIP( self.devCtrl, ipaddr, setupPinCode, nodeid) ) + # Wait up to 5 additional seconds for the commissioning complete event + if not self._ChipStack.commissioningCompleteEvent.isSet(): + self._ChipStack.commissioningCompleteEvent.wait(5.0) + if not self._ChipStack.commissioningCompleteEvent.isSet(): + # Error 50 is a timeout + return False + return self._ChipStack.commissioningEventRes == 0 def ResolveNode(self, nodeid): return self._ChipStack.CallAsync( diff --git a/src/controller/python/chip/ChipStack.py b/src/controller/python/chip/ChipStack.py index dc3930cf046ad5..e3bc1922442a31 100644 --- a/src/controller/python/chip/ChipStack.py +++ b/src/controller/python/chip/ChipStack.py @@ -162,10 +162,12 @@ class ChipStack(object): def __init__(self, installDefaultLogHandler=True, bluetoothAdapter=0): self.networkLock = Lock() self.completeEvent = Event() + self.commissioningCompleteEvent = Event() self._ChipStackLib = None self._chipDLLPath = None self.devMgr = None self.callbackRes = None + self.commissioningEventRes = None self._activeLogFunct = None self.addModulePrefixToLogMessage = True diff --git a/src/controller/python/test/test_scripts/mobile-device-test.py b/src/controller/python/test/test_scripts/mobile-device-test.py index a86906da210a82..1f542cdc11c1c9 100755 --- a/src/controller/python/test/test_scripts/mobile-device-test.py +++ b/src/controller/python/test/test_scripts/mobile-device-test.py @@ -85,6 +85,13 @@ def main(): nodeid=1), "Failed to finish key exchange") + logger.info("Testing closing sessions") + FailIfNot(test.TestCloseSession(nodeid=1), "Failed to close sessions") + + logger.info("Testing resolve") + FailIfNot(test.TestResolve(nodeid=1), + "Failed to resolve nodeid") + logger.info("Testing network commissioning") FailIfNot(test.TestNetworkCommissioning(nodeid=1, endpoint=ENDPOINT_ID, @@ -134,13 +141,6 @@ def main(): FailIfNot(test.TestSubscription(nodeid=1, endpoint=LIGHTING_ENDPOINT_ID), "Failed to subscribe attributes.") - logger.info("Testing closing sessions") - FailIfNot(test.TestCloseSession(nodeid=1), "Failed to close sessions") - - logger.info("Testing resolve") - FailIfNot(test.TestResolve(nodeid=1), - "Failed to resolve nodeid") - logger.info("Testing on off cluster over resolved connection") FailIfNot(test.TestOnOffCluster(nodeid=1, endpoint=LIGHTING_ENDPOINT_ID, diff --git a/src/darwin/Framework/CHIP/templates/clusters-tests.zapt b/src/darwin/Framework/CHIP/templates/clusters-tests.zapt index c8d975f0be2815..03ae558decede9 100644 --- a/src/darwin/Framework/CHIP/templates/clusters-tests.zapt +++ b/src/darwin/Framework/CHIP/templates/clusters-tests.zapt @@ -105,12 +105,6 @@ CHIPDevice * GetConnectedDevice() [self waitForExpectationsWithTimeout:kPairingTimeoutInSeconds handler:nil]; - XCTestExpectation * addressExpectation = [self expectationWithDescription:@"Address Updated"]; - pairing.expectation = addressExpectation; - [controller updateDevice:kDeviceId fabricId:0]; - - [self waitForExpectationsWithTimeout:kAddressResolveTimeoutInSeconds handler:nil]; - __block XCTestExpectation * connectionExpectation = [self expectationWithDescription:@"CASE established"]; [controller getConnectedDevice:kDeviceId queue:dispatch_get_main_queue() diff --git a/src/darwin/Framework/CHIPTests/CHIPClustersTests.m b/src/darwin/Framework/CHIPTests/CHIPClustersTests.m index 3ae8a7ebdb841c..df99d96c226579 100644 --- a/src/darwin/Framework/CHIPTests/CHIPClustersTests.m +++ b/src/darwin/Framework/CHIPTests/CHIPClustersTests.m @@ -123,12 +123,6 @@ - (void)testInitStack [self waitForExpectationsWithTimeout:kPairingTimeoutInSeconds handler:nil]; - XCTestExpectation * addressExpectation = [self expectationWithDescription:@"Address Updated"]; - pairing.expectation = addressExpectation; - [controller updateDevice:kDeviceId fabricId:0]; - - [self waitForExpectationsWithTimeout:kAddressResolveTimeoutInSeconds handler:nil]; - __block XCTestExpectation * connectionExpectation = [self expectationWithDescription:@"CASE established"]; [controller getConnectedDevice:kDeviceId queue:dispatch_get_main_queue() diff --git a/src/platform/BUILD.gn b/src/platform/BUILD.gn index a1986be488c038..12bc0db6b2aad2 100644 --- a/src/platform/BUILD.gn +++ b/src/platform/BUILD.gn @@ -97,7 +97,6 @@ if (chip_device_platform != "none") { "CHIP_ENABLE_OPENTHREAD=${chip_enable_openthread}", "CHIP_WITH_GIO=${chip_with_gio}", "OPENTHREAD_CONFIG_ENABLE_TOBLE=false", - "CONFIG_USE_CLUSTERS_FOR_IP_COMMISSIONING=${chip_use_clusters_for_ip_commissioning}", "CHIP_DEVICE_CONFIG_ENABLE_DNSSD=${chip_device_config_enable_dnssd}", "CHIP_BYPASS_RENDEZVOUS=${chip_bypass_rendezvous}", "CHIP_STACK_LOCK_TRACKING_ENABLED=${chip_stack_lock_tracking_log}", @@ -226,7 +225,6 @@ if (chip_device_platform != "none") { chip_device_config_enable_dnssd = chip_mdns != "none" defines += [ "CHIP_DEVICE_CONFIG_ENABLE_DNSSD=${chip_device_config_enable_dnssd}", - "CONFIG_USE_CLUSTERS_FOR_IP_COMMISSIONING=${chip_use_clusters_for_ip_commissioning}", "EXTERNAL_KEYVALUESTOREMANAGERIMPL_HEADER=\"controller/java/AndroidKeyValueStoreManagerImpl.h\"", ] } diff --git a/src/platform/device.gni b/src/platform/device.gni index 82ba57988caf69..2dce770b78cb10 100755 --- a/src/platform/device.gni +++ b/src/platform/device.gni @@ -76,9 +76,6 @@ declare_args() { } else { chip_mdns = "none" } - - # Enables full cluster-based commissioning for already-on-network devices. - chip_use_clusters_for_ip_commissioning = false } _chip_device_layer = "none"