From f58b63d31e9b422c2e586fe6b849fbb4a19b0058 Mon Sep 17 00:00:00 2001 From: Armando Date: Thu, 23 May 2024 13:36:15 +0800 Subject: [PATCH] test(isp_dvp): added isp_dvp test --- .../test_apps/.build-test-rules.yml | 6 +++ .../test_apps/isp_dvp/CMakeLists.txt | 6 +++ .../test_apps/isp_dvp/README.md | 2 + .../test_apps/isp_dvp/main/CMakeLists.txt | 16 ++++++ .../test_apps/isp_dvp/main/test_app_main.c | 27 ++++++++++ .../isp_dvp/main/test_isp_dvp_driver.c | 49 +++++++++++++++++++ .../test_apps/isp_dvp/pytest_isp_dvp.py | 10 ++++ .../test_apps/isp/main/test_isp_driver.c | 40 --------------- 8 files changed, 116 insertions(+), 40 deletions(-) create mode 100644 components/esp_driver_cam/test_apps/isp_dvp/CMakeLists.txt create mode 100644 components/esp_driver_cam/test_apps/isp_dvp/README.md create mode 100644 components/esp_driver_cam/test_apps/isp_dvp/main/CMakeLists.txt create mode 100644 components/esp_driver_cam/test_apps/isp_dvp/main/test_app_main.c create mode 100644 components/esp_driver_cam/test_apps/isp_dvp/main/test_isp_dvp_driver.c create mode 100644 components/esp_driver_cam/test_apps/isp_dvp/pytest_isp_dvp.py diff --git a/components/esp_driver_cam/test_apps/.build-test-rules.yml b/components/esp_driver_cam/test_apps/.build-test-rules.yml index 025201a69d..62f5e1aef9 100644 --- a/components/esp_driver_cam/test_apps/.build-test-rules.yml +++ b/components/esp_driver_cam/test_apps/.build-test-rules.yml @@ -3,3 +3,9 @@ components/esp_driver_cam/test_apps/csi: - if: SOC_MIPI_CSI_SUPPORTED != 1 depends_components: - esp_driver_cam + +components/esp_driver_cam/test_apps/isp_dvp: + disable: + - if: SOC_ISP_DVP_SUPPORTED != 1 + depends_components: + - esp_driver_cam diff --git a/components/esp_driver_cam/test_apps/isp_dvp/CMakeLists.txt b/components/esp_driver_cam/test_apps/isp_dvp/CMakeLists.txt new file mode 100644 index 0000000000..89ec188d05 --- /dev/null +++ b/components/esp_driver_cam/test_apps/isp_dvp/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.16) + +set(COMPONENTS main) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(test_isp_dvp) diff --git a/components/esp_driver_cam/test_apps/isp_dvp/README.md b/components/esp_driver_cam/test_apps/isp_dvp/README.md new file mode 100644 index 0000000000..909282018f --- /dev/null +++ b/components/esp_driver_cam/test_apps/isp_dvp/README.md @@ -0,0 +1,2 @@ +| Supported Targets | ESP32-P4 | +| ----------------- | -------- | diff --git a/components/esp_driver_cam/test_apps/isp_dvp/main/CMakeLists.txt b/components/esp_driver_cam/test_apps/isp_dvp/main/CMakeLists.txt new file mode 100644 index 0000000000..382e87b8ca --- /dev/null +++ b/components/esp_driver_cam/test_apps/isp_dvp/main/CMakeLists.txt @@ -0,0 +1,16 @@ +set(srcs "test_app_main.c") + +if(CONFIG_SOC_ISP_DVP_SUPPORTED) + list(APPEND srcs "test_isp_dvp_driver.c") +endif() + +set(priv_requires + unity + esp_driver_cam + esp_psram +) + +idf_component_register(SRCS ${srcs} + INCLUDE_DIRS "." + PRIV_REQUIRES ${priv_requires} + WHOLE_ARCHIVE TRUE) diff --git a/components/esp_driver_cam/test_apps/isp_dvp/main/test_app_main.c b/components/esp_driver_cam/test_apps/isp_dvp/main/test_app_main.c new file mode 100644 index 0000000000..a47ab1a130 --- /dev/null +++ b/components/esp_driver_cam/test_apps/isp_dvp/main/test_app_main.c @@ -0,0 +1,27 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: CC0-1.0 + */ + +#include "unity.h" +#include "unity_test_utils.h" +#include "esp_heap_caps.h" +#include "sdkconfig.h" + +#define TEST_MEMORY_LEAK_THRESHOLD (400) + +void setUp(void) +{ + unity_utils_record_free_mem(); +} + +void tearDown(void) +{ + unity_utils_evaluate_leaks_direct(TEST_MEMORY_LEAK_THRESHOLD); +} + +void app_main(void) +{ + unity_run_menu(); +} diff --git a/components/esp_driver_cam/test_apps/isp_dvp/main/test_isp_dvp_driver.c b/components/esp_driver_cam/test_apps/isp_dvp/main/test_isp_dvp_driver.c new file mode 100644 index 0000000000..5d0fa2f64d --- /dev/null +++ b/components/esp_driver_cam/test_apps/isp_dvp/main/test_isp_dvp_driver.c @@ -0,0 +1,49 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include +#include "sdkconfig.h" +#include "unity.h" +#include "esp_cam_ctlr_isp_dvp.h" +#include "esp_cam_ctlr.h" +#include "driver/isp.h" + +TEST_CASE("ISP DVP controller exhausted allocation", "[isp]") +{ + esp_isp_processor_cfg_t isp_config = { + .clk_hz = 120 * 1000 * 1000, + .input_data_source = ISP_INPUT_DATA_SOURCE_DVP, + .input_data_color_type = ISP_COLOR_RAW8, + .output_data_color_type = ISP_COLOR_RGB565, + .has_line_start_packet = false, + .has_line_end_packet = false, + .h_res = 800, + .v_res = 640, + }; + isp_proc_handle_t isp_proc = NULL; + TEST_ESP_OK(esp_isp_new_processor(&isp_config, &isp_proc)); + + esp_cam_ctlr_isp_dvp_cfg_t dvp_ctlr_config = { + .data_width = 8, + .data_io = {53, 54, 52, 0, 1, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1}, + .pclk_io = 21, + .hsync_io = 5, + .vsync_io = 23, + .de_io = 22, + .io_flags.vsync_invert = 1, + .queue_items = 10, + }; + esp_cam_ctlr_handle_t dvp_ctrlr[SOC_ISP_DVP_CTLR_NUMS + 1] = {}; + for (int i = 0; i < SOC_ISP_DVP_CTLR_NUMS; i++) { + TEST_ESP_OK(esp_cam_new_isp_dvp_ctlr(isp_proc, &dvp_ctlr_config, &dvp_ctrlr[i])); + } + + TEST_ASSERT(esp_cam_new_isp_dvp_ctlr(isp_proc, &dvp_ctlr_config, &dvp_ctrlr[SOC_ISP_DVP_CTLR_NUMS]) == ESP_ERR_NOT_FOUND); + + for (int i = 0; i < SOC_ISP_DVP_CTLR_NUMS; i++) { + TEST_ESP_OK(esp_cam_ctlr_del(dvp_ctrlr[i])); + } + TEST_ESP_OK(esp_isp_del_processor(isp_proc)); +} diff --git a/components/esp_driver_cam/test_apps/isp_dvp/pytest_isp_dvp.py b/components/esp_driver_cam/test_apps/isp_dvp/pytest_isp_dvp.py new file mode 100644 index 0000000000..a9922987c5 --- /dev/null +++ b/components/esp_driver_cam/test_apps/isp_dvp/pytest_isp_dvp.py @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: CC0-1.0 +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32p4 +@pytest.mark.generic +def test_isp_dvp(dut: Dut) -> None: + dut.run_all_single_board_cases() diff --git a/components/esp_driver_isp/test_apps/isp/main/test_isp_driver.c b/components/esp_driver_isp/test_apps/isp/main/test_isp_driver.c index ff4f976246..c6a3abcbe9 100644 --- a/components/esp_driver_isp/test_apps/isp/main/test_isp_driver.c +++ b/components/esp_driver_isp/test_apps/isp/main/test_isp_driver.c @@ -7,7 +7,6 @@ #include "sdkconfig.h" #include "unity.h" #include "driver/isp.h" -#include "esp_private/isp_dvp_private.h" #include "soc/soc_caps.h" TEST_CASE("ISP processor exhausted allocation", "[isp]") @@ -31,45 +30,6 @@ TEST_CASE("ISP processor exhausted allocation", "[isp]") } } -#if SOC_ISP_DVP_SUPPORTED -TEST_CASE("ISP DVP controller exhausted allocation", "[isp]") -{ - esp_isp_processor_cfg_t isp_config = { - .clk_hz = 120 * 1000 * 1000, - .input_data_source = ISP_INPUT_DATA_SOURCE_DVP, - .input_data_color_type = ISP_COLOR_RAW8, - .output_data_color_type = ISP_COLOR_RGB565, - .has_line_start_packet = false, - .has_line_end_packet = false, - .h_res = 800, - .v_res = 640, - }; - isp_proc_handle_t isp_proc = NULL; - TEST_ESP_OK(esp_isp_new_processor(&isp_config, &isp_proc)); - - esp_cam_ctlr_isp_dvp_cfg_t dvp_ctlr_config = { - .data_width = 8, - .data_io = {53, 54, 52, 0, 1, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1}, - .pclk_io = 21, - .hsync_io = 5, - .vsync_io = 23, - .de_io = 22, - .io_flags.vsync_invert = 1, - }; - esp_cam_ctlr_handle_t dvp_ctrlr[SOC_ISP_DVP_CTLR_NUMS + 1] = {}; - for (int i = 0; i < SOC_ISP_DVP_CTLR_NUMS; i++) { - TEST_ESP_OK(esp_isp_new_dvp_controller(isp_proc, &dvp_ctlr_config, &dvp_ctrlr[i])); - } - - TEST_ASSERT(esp_isp_new_dvp_controller(isp_proc, &dvp_ctlr_config, &dvp_ctrlr[SOC_ISP_DVP_CTLR_NUMS]) == ESP_ERR_NOT_FOUND); - - for (int i = 0; i < SOC_ISP_DVP_CTLR_NUMS; i++) { - TEST_ESP_OK(esp_isp_del_dvp_controller(dvp_ctrlr[i])); - } - TEST_ESP_OK(esp_isp_del_processor(isp_proc)); -} -#endif - TEST_CASE("ISP AF controller exhausted allocation", "[isp]") { esp_isp_processor_cfg_t isp_config = {