|  | /* | 
|  | * | 
|  | *    Copyright (c) 2020 Project CHIP Authors | 
|  | * | 
|  | *    Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | *    you may not use this file except in compliance with the License. | 
|  | *    You may obtain a copy of the License at | 
|  | * | 
|  | *        http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | *    Unless required by applicable law or agreed to in writing, software | 
|  | *    distributed under the License is distributed on an "AS IS" BASIS, | 
|  | *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | *    See the License for the specific language governing permissions and | 
|  | *    limitations under the License. | 
|  | */ | 
|  |  | 
|  | #include "AppTask.h" | 
|  | #include "DeviceCallbacks.h" | 
|  | #include "esp_heap_caps_init.h" | 
|  | #include "esp_log.h" | 
|  | #include "esp_netif.h" | 
|  | #include "esp_system.h" | 
|  | #include "esp_wifi.h" | 
|  | #include "freertos/FreeRTOS.h" | 
|  | #include "freertos/task.h" | 
|  | #include "nvs_flash.h" | 
|  | #include "shell_extension/launch.h" | 
|  | #include <common/CHIPDeviceManager.h> | 
|  | #include <common/Esp32AppServer.h> | 
|  | #include <credentials/DeviceAttestationCredsProvider.h> | 
|  | #include <credentials/examples/DeviceAttestationCredsExample.h> | 
|  | #include <platform/ESP32/ESP32Utils.h> | 
|  |  | 
|  | #include <cmath> | 
|  | #include <cstdio> | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | #if CONFIG_ENABLE_PW_RPC | 
|  | #include "PigweedLogger.h" | 
|  | #include "Rpc.h" | 
|  | #endif | 
|  |  | 
|  | #if CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER | 
|  | #include <platform/ESP32/ESP32FactoryDataProvider.h> | 
|  | #endif // CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER | 
|  |  | 
|  | #if CONFIG_ENABLE_ESP32_DEVICE_INFO_PROVIDER | 
|  | #include <platform/ESP32/ESP32DeviceInfoProvider.h> | 
|  | #else | 
|  | #include <DeviceInfoProviderImpl.h> | 
|  | #endif // CONFIG_ENABLE_ESP32_DEVICE_INFO_PROVIDER | 
|  |  | 
|  | using namespace ::chip; | 
|  | using namespace ::chip::DeviceManager; | 
|  | using namespace ::chip::Credentials; | 
|  |  | 
|  | namespace { | 
|  | #if CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER | 
|  | DeviceLayer::ESP32FactoryDataProvider sFactoryDataProvider; | 
|  | #endif // CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER | 
|  |  | 
|  | #if CONFIG_ENABLE_ESP32_DEVICE_INFO_PROVIDER | 
|  | DeviceLayer::ESP32DeviceInfoProvider gExampleDeviceInfoProvider; | 
|  | #else | 
|  | DeviceLayer::DeviceInfoProviderImpl gExampleDeviceInfoProvider; | 
|  | #endif // CONFIG_ENABLE_ESP32_DEVICE_INFO_PROVIDER | 
|  | } // namespace | 
|  |  | 
|  | static const char * TAG = "lock-app"; | 
|  |  | 
|  | static AppDeviceCallbacks EchoCallbacks; | 
|  |  | 
|  | static void InitServer(intptr_t context) | 
|  | { | 
|  | Esp32AppServer::Init(); // Init ZCL Data Model and CHIP App Server AND Initialize device attestation config | 
|  |  | 
|  | ESP_LOGI(TAG, "------------------------Starting App Task---------------------------"); | 
|  | CHIP_ERROR error = GetAppTask().StartAppTask(); | 
|  | if (error != CHIP_NO_ERROR) | 
|  | { | 
|  | ESP_LOGE(TAG, "GetAppTask().StartAppTask() failed: %" CHIP_ERROR_FORMAT, error.Format()); | 
|  | } | 
|  | } | 
|  |  | 
|  | extern "C" void app_main() | 
|  | { | 
|  | // Initialize the ESP NVS layer. | 
|  | esp_err_t err = nvs_flash_init(); | 
|  | if (err != ESP_OK) | 
|  | { | 
|  | ESP_LOGE(TAG, "nvs_flash_init() failed: %s", esp_err_to_name(err)); | 
|  | return; | 
|  | } | 
|  | err = esp_event_loop_create_default(); | 
|  | if (err != ESP_OK) | 
|  | { | 
|  | ESP_LOGE(TAG, "esp_event_loop_create_default() failed: %s", esp_err_to_name(err)); | 
|  | return; | 
|  | } | 
|  | #if CONFIG_ENABLE_PW_RPC | 
|  | chip::rpc::Init(); | 
|  | #endif | 
|  |  | 
|  | ESP_LOGI(TAG, "=================================================="); | 
|  | ESP_LOGI(TAG, "chip-esp32-lock-example starting"); | 
|  | ESP_LOGI(TAG, "=================================================="); | 
|  | #if CHIP_DEVICE_CONFIG_ENABLE_WIFI | 
|  | if (DeviceLayer::Internal::ESP32Utils::InitWiFiStack() != CHIP_NO_ERROR) | 
|  | { | 
|  | ESP_LOGE(TAG, "Failed to initialize Wi-Fi stack"); | 
|  | return; | 
|  | } | 
|  | #endif | 
|  | #if CONFIG_ENABLE_CHIP_SHELL | 
|  | chip::LaunchShell(); | 
|  | #endif | 
|  |  | 
|  | DeviceLayer::SetDeviceInfoProvider(&gExampleDeviceInfoProvider); | 
|  |  | 
|  | CHIPDeviceManager & deviceMgr = CHIPDeviceManager::GetInstance(); | 
|  | CHIP_ERROR error              = deviceMgr.Init(&EchoCallbacks); | 
|  | if (error != CHIP_NO_ERROR) | 
|  | { | 
|  | ESP_LOGE(TAG, "device.Init() failed: %" CHIP_ERROR_FORMAT, error.Format()); | 
|  | return; | 
|  | } | 
|  |  | 
|  | #if CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER | 
|  | SetCommissionableDataProvider(&sFactoryDataProvider); | 
|  | SetDeviceAttestationCredentialsProvider(&sFactoryDataProvider); | 
|  | #if CONFIG_ENABLE_ESP32_DEVICE_INSTANCE_INFO_PROVIDER | 
|  | SetDeviceInstanceInfoProvider(&sFactoryDataProvider); | 
|  | #endif | 
|  | #else | 
|  | SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider()); | 
|  | #endif // CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER | 
|  |  | 
|  | chip::DeviceLayer::PlatformMgr().ScheduleWork(InitServer, reinterpret_cast<intptr_t>(nullptr)); | 
|  | } |