add some code
This commit is contained in:
@@ -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)
|
||||
@@ -0,0 +1,3 @@
|
||||
idf_component_register(SRC_DIRS "."
|
||||
INCLUDE_DIRS "."
|
||||
WHOLE_ARCHIVE)
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user