add some code

This commit is contained in:
2025-09-05 13:25:11 +08:00
parent 9ff0a99e7a
commit 3cf1229a85
8911 changed files with 2535396 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
# The following lines of boilerplate have to be in your project's CMakeLists
# in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.5)
set(EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/unit-test-app/components"
"../../adc_mic")
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(adc_mic_test)

View File

@@ -0,0 +1,3 @@
idf_component_register(SRC_DIRS "."
INCLUDE_DIRS "."
WHOLE_ARCHIVE)

View File

@@ -0,0 +1,137 @@
/*
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdio.h>
#include <inttypes.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "unity.h"
#include "esp_log.h"
#include "adc_mic.h"
#include "esp_codec_dev.h"
static const char *TAG = "adc_mic_test";
TEST_CASE("adc_mic_test_mono", "[adc_mic][mono]")
{
audio_codec_adc_cfg_t cfg = DEFAULT_AUDIO_CODEC_ADC_MONO_CFG(ADC_CHANNEL_0, 16000);
const audio_codec_data_if_t *adc_if = audio_codec_new_adc_data(&cfg);
esp_codec_dev_cfg_t codec_dev_cfg = {
.dev_type = ESP_CODEC_DEV_TYPE_IN,
.data_if = adc_if,
};
esp_codec_dev_handle_t dev = esp_codec_dev_new(&codec_dev_cfg);
TEST_ASSERT(dev);
esp_codec_dev_sample_info_t fs = {
.sample_rate = 16000,
.channel = 1,
.bits_per_sample = 16,
};
int ret = esp_codec_dev_open(dev, &fs);
TEST_ASSERT(ret == 0);
uint16_t *audio_buffer = malloc(16000 * sizeof(uint16_t));
assert(audio_buffer);
while (1) {
ret = esp_codec_dev_read(dev, audio_buffer, sizeof(uint16_t) * 16000);
ESP_LOGI(TAG, "ret: %d, esp_codec_dev_read len: %d\n", ret, sizeof(uint16_t) * 16000);
}
}
TEST_CASE("adc_mic_test memory leak", "[adc_mic][memory_leak]")
{
audio_codec_adc_cfg_t cfg = DEFAULT_AUDIO_CODEC_ADC_MONO_CFG(ADC_CHANNEL_0, 16000);
const audio_codec_data_if_t *adc_if = audio_codec_new_adc_data(&cfg);
esp_codec_dev_cfg_t codec_dev_cfg = {
.dev_type = ESP_CODEC_DEV_TYPE_IN,
.data_if = adc_if,
};
esp_codec_dev_handle_t dev = esp_codec_dev_new(&codec_dev_cfg);
TEST_ASSERT(dev);
esp_codec_dev_delete(dev);
audio_codec_delete_data_if(adc_if);
}
typedef struct {
esp_codec_dev_handle_t dev;
esp_codec_dev_sample_info_t fs;
TaskHandle_t partner;
int loops;
} cross_task_ctx_t;
static void task_open_then_wait(void *arg)
{
cross_task_ctx_t *ctx = (cross_task_ctx_t *)arg;
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
for (int i = 0; i < ctx->loops; ++i) {
TEST_ASSERT_EQUAL(0, esp_codec_dev_open(ctx->dev, &ctx->fs));
xTaskNotifyGive(ctx->partner);
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
}
vTaskDelete(NULL);
}
static void task_wait_then_close(void *arg)
{
cross_task_ctx_t *ctx = (cross_task_ctx_t *)arg;
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
for (int i = 0; i < ctx->loops; ++i) {
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
TEST_ASSERT_EQUAL(0, esp_codec_dev_close(ctx->dev));
xTaskNotifyGive(ctx->partner);
}
vTaskDelete(NULL);
}
TEST_CASE("adc_mic_cross_task_enable_disable", "[adc_mic][cross_task]")
{
audio_codec_adc_cfg_t cfg = DEFAULT_AUDIO_CODEC_ADC_MONO_CFG(ADC_CHANNEL_0, 16000);
const audio_codec_data_if_t *adc_if = audio_codec_new_adc_data(&cfg);
esp_codec_dev_cfg_t codec_dev_cfg = {
.dev_type = ESP_CODEC_DEV_TYPE_IN,
.data_if = adc_if,
};
esp_codec_dev_handle_t dev = esp_codec_dev_new(&codec_dev_cfg);
TEST_ASSERT(dev);
esp_codec_dev_sample_info_t fs = {
.sample_rate = 16000,
.channel = 1,
.bits_per_sample = 16,
};
cross_task_ctx_t a = {
.dev = dev,
.fs = fs,
.partner = NULL,
.loops = 10,
};
cross_task_ctx_t b = a;
TaskHandle_t taskA = NULL;
TaskHandle_t taskB = NULL;
xTaskCreate(task_open_then_wait, "t_open", 3072, &a, 3, &taskA);
xTaskCreate(task_wait_then_close, "t_close", 3072, &b, 3, &taskB);
a.partner = taskB;
b.partner = taskA;
xTaskNotifyGive(taskA);
xTaskNotifyGive(taskB);
while (eTaskGetState(taskA) != eDeleted || eTaskGetState(taskB) != eDeleted) {
vTaskDelay(pdMS_TO_TICKS(10));
}
esp_codec_dev_delete(dev);
audio_codec_delete_data_if(adc_if);
}

View File

@@ -0,0 +1,41 @@
/*
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "unity.h"
#include "unity_test_runner.h"
#include "unity_test_utils_memory.h"
#include "esp_heap_caps.h"
#include "sdkconfig.h"
#define LEAKS (400)
void setUp(void)
{
unity_utils_record_free_mem();
}
void tearDown(void)
{
unity_utils_evaluate_leaks_direct(LEAKS);
}
void app_main(void)
{
// _____ _____ __ __ _____ _____
// /\ | __ \ / ____| | \/ |_ _/ ____|
// / \ | | | | | | \ / | | || |
// / /\ \ | | | | | | |\/| | | || |
// / ____ \| |__| | |____ | | | |_| || |____
// /_/ \_\_____/ \_____| |_| |_|_____\_____|
printf(" _____ _____ __ __ _____ _____\n");
printf(" /\\ | __ \\ / ____| | \\/ |_ _/ ____|\n");
printf(" / \\ | | | | | | \\ / | | || |\n");
printf(" / /\\ \\ | | | | | | |\\/| | | || |\n");
printf(" / ____ \\| |__| | |____ | | | |_| || |____\n");
printf(" /_/ \\_\\_____/ \\_____| |_| |_|_____|_____|\n");
unity_run_menu();
}

View File

@@ -0,0 +1,6 @@
# This file was generated using idf.py save-defconfig. It can be edited manually.
# Espressif IoT Development Framework (ESP-IDF) 5.4.0 Project Minimal Configuration
#
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y
CONFIG_ESP_TASK_WDT_EN=n
CONFIG_FREERTOS_HZ=1000