diff --git a/components/esp_matter_controller/esp_matter_commissioner.cpp b/components/esp_matter_controller/esp_matter_commissioner.cpp index 9d0b07dae..926733a10 100644 --- a/components/esp_matter_controller/esp_matter_commissioner.cpp +++ b/components/esp_matter_controller/esp_matter_commissioner.cpp @@ -29,6 +29,11 @@ #include #include +#if CONFIG_ENABLE_ESP32_BLE_CONTROLLER +#include +#include +#endif + using namespace chip; using namespace chip::Credentials; using namespace chip::DeviceLayer; @@ -92,6 +97,16 @@ namespace esp_matter { namespace commissioner { esp_err_t init(uint16_t commissioner_port) { +#if CONFIG_ENABLE_ESP32_BLE_CONTROLLER + CHIP_ERROR err = chip::DeviceLayer::Internal::BLEMgr().Init(); + err = chip::DeviceLayer::Internal::BLEMgrImpl().ConfigureBle(0, true); + + if (err != CHIP_NO_ERROR) { + ChipLogError(DeviceLayer, "BLEManager initialization failed: %s", ErrorStr(err)); + return ESP_FAIL; + } +#endif + Controller::FactoryInitParams factoryParams; Controller::SetupParams setupParams; diff --git a/components/esp_matter_controller/esp_matter_controller_console.cpp b/components/esp_matter_controller/esp_matter_controller_console.cpp index 6b975e76f..967756041 100644 --- a/components/esp_matter_controller/esp_matter_controller_console.cpp +++ b/components/esp_matter_controller/esp_matter_controller_console.cpp @@ -68,7 +68,34 @@ static esp_err_t controller_pairing_handler(int argc, char **argv) uint32_t pincode = string_to_uint32(argv[2]); return controller::pairing_on_network(nodeId, pincode); } else if (strncmp(argv[0], "ble-wifi", sizeof("ble-wifi")) == 0) { +#if CONFIG_ENABLE_ESP32_BLE_CONTROLLER + if (argc != 6) { + return ESP_ERR_INVALID_ARG; + } + + char *ssid = NULL, *pwd = NULL; + + ssid = strndup(argv[2], strlen(argv[2]) + 1); + pwd = strndup(argv[3], strlen(argv[3]) + 1); + if (ssid == NULL || pwd == NULL) { + return ESP_ERR_NO_MEM; + } + + uint64_t nodeId = string_to_uint64(argv[1]); + uint32_t pincode = string_to_uint32(argv[4]); + uint16_t disc = string_to_uint16(argv[5]); + + esp_err_t result = controller::pairing_ble_wifi(nodeId, pincode, disc, ssid, pwd); + if (result != ESP_OK) { + ESP_LOGE(TAG, "Pairing over ble failed"); + } + if (ssid != NULL) free(ssid); + if (pwd != NULL) free(pwd); + + return result; +#else return ESP_ERR_NOT_SUPPORTED; +#endif } else if (strncmp(argv[0], "ble-thread", sizeof("ble-thread")) == 0) { return ESP_ERR_NOT_SUPPORTED; } @@ -259,8 +286,8 @@ esp_err_t controller_register_commands() { .name = "pairing", .description = "Pairing a node.\n" - "\tUsage: controller pairing onnetwork [nodeid] [pincode] Or\n" - "\tcontroller pairing ble-wifi [nodeid] [pincode] [discriminator] [ssid] [password] Or\n" + "\tUsage: controller pairing onnetwork [nodeid] [pincode] OR\n" + "\tcontroller pairing ble-wifi [nodeid] [pincode] [ssid] [password] [discriminator] OR\n" "\tcontroller pairing ble-thread [nodeid] [pincode] [discriminator] [dataset]", .handler = controller_pairing_handler, }, diff --git a/components/esp_matter_controller/esp_matter_controller_pairing_command.cpp b/components/esp_matter_controller/esp_matter_controller_pairing_command.cpp index 972eb5026..5d2cc7289 100644 --- a/components/esp_matter_controller/esp_matter_controller_pairing_command.cpp +++ b/components/esp_matter_controller/esp_matter_controller_pairing_command.cpp @@ -143,5 +143,18 @@ esp_err_t pairing_on_network(NodeId node_id, uint32_t pincode) } return ESP_OK; } + +#if CONFIG_ENABLE_ESP32_BLE_CONTROLLER +esp_err_t pairing_ble_wifi(NodeId node_id, uint32_t pincode, uint16_t disc, const char * ssid, const char * pwd) +{ + RendezvousParameters params = RendezvousParameters().SetSetupPINCode(pincode).SetDiscriminator(disc).SetPeerAddress(chip::Transport::PeerAddress::BLE()); + + chip::ByteSpan nameSpan(reinterpret_cast(ssid),strlen(ssid)); + chip::ByteSpan pwdSpan(reinterpret_cast(pwd),strlen(pwd)); + CommissioningParameters commissioning_params = CommissioningParameters().SetWiFiCredentials(Controller::WiFiCredentials(nameSpan, pwdSpan)); + get_device_commissioner()->PairDevice(node_id, params, commissioning_params); + return ESP_OK; +} +#endif } // namespace controller } // namespace esp_matter diff --git a/components/esp_matter_controller/esp_matter_controller_pairing_command.h b/components/esp_matter_controller/esp_matter_controller_pairing_command.h index 5c96e48a6..94cfc1e4a 100644 --- a/components/esp_matter_controller/esp_matter_controller_pairing_command.h +++ b/components/esp_matter_controller/esp_matter_controller_pairing_command.h @@ -80,6 +80,9 @@ private: }; esp_err_t pairing_on_network(NodeId node_id, uint32_t pincode); +#if CONFIG_ENABLE_ESP32_BLE_CONTROLLER +esp_err_t pairing_ble_wifi(NodeId node_id, uint32_t pincode, uint16_t disc, const char * ssid, const char * pwd); +#endif } // namespace controller } // namespace esp_matter diff --git a/connectedhomeip/connectedhomeip b/connectedhomeip/connectedhomeip index 6382144be..c95efa996 160000 --- a/connectedhomeip/connectedhomeip +++ b/connectedhomeip/connectedhomeip @@ -1 +1 @@ -Subproject commit 6382144be831a7bb930ed11823c00d7c0f9ba0da +Subproject commit c95efa996d5c9a01a58b16060106127244fb1f5d diff --git a/examples/controller/sdkconfig.defaults b/examples/controller/sdkconfig.defaults index da0799b3b..b76233d34 100644 --- a/examples/controller/sdkconfig.defaults +++ b/examples/controller/sdkconfig.defaults @@ -49,3 +49,6 @@ CONFIG_MBEDTLS_HKDF_C=y # Increase LwIP IPv6 address number to 6 (MAX_FABRIC + 1) # unique local addresses for fabrics(MAX_FABRIC), a link local address(1) CONFIG_LWIP_IPV6_NUM_ADDRESSES=6 + +# Enable ble controller +CONFIG_ENABLE_ESP32_BLE_CONTROLLER=y