Audio System + Drivers (#562)

This commit is contained in:
Shadowtrance
2026-07-14 16:34:29 +10:00
committed by GitHub
parent fa4a6e255c
commit 955416dac8
137 changed files with 8847 additions and 387 deletions
@@ -0,0 +1,64 @@
// SPDX-License-Identifier: Apache-2.0
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include <tactility/drivers/gpio.h>
#include "audio_codec_data_if.h"
#include "audio_codec_ctrl_if.h"
#include "audio_codec_gpio_if.h"
struct Device;
/**
* @brief Creates an esp_codec_dev data interface backed by a Tactility I2S controller device.
* @param[in] i2s_controller the I2S controller device to read/write audio frames from/to
* @return the data interface, or NULL on failure. Free with audio_codec_delete_data_if().
*/
const audio_codec_data_if_t* audio_codec_adapter_new_i2s_data(struct Device* i2s_controller);
/**
* @brief Creates an esp_codec_dev data interface backed by a Tactility I2S controller device,
* configured for PDM RX mode (e.g. for a PDM MEMS microphone such as the SPM1423).
* @param[in] i2s_controller the I2S controller device to read PDM audio frames from. Must be
* backed by I2S controller 0 -- PDM RX is hardware-restricted to that controller.
* @return the data interface, or NULL on failure. Free with audio_codec_delete_data_if().
*/
const audio_codec_data_if_t* audio_codec_adapter_new_i2s_pdm_data(struct Device* i2s_controller);
/**
* @brief Creates an esp_codec_dev control interface backed by a Tactility I2C controller device.
* @param[in] i2c_controller the I2C controller device the codec chip is attached to
* @param[in] address the 7-bit I2C address of the codec chip
* @return the control interface, or NULL on failure. Free with audio_codec_delete_ctrl_if().
*/
const audio_codec_ctrl_if_t* audio_codec_adapter_new_i2c_ctrl(struct Device* i2c_controller, uint8_t address);
/**
* @brief Creates an esp_codec_dev GPIO interface backed by Tactility GpioPinSpec descriptors.
*
* The codec chip driver references GPIOs by small integer index (0, 1, ...); this adapter
* maps those indices to GpioPinSpec entries supplied at creation time (e.g. reset/PA-enable lines
* declared in devicetree). Indices outside the supplied array are treated as no-ops.
*
* @param[in] pins array of pin specs, indexed by the small integer GPIO id used by the codec chip driver
* @note The caller must keep `pins` valid for the lifetime of the returned interface (until
* audio_codec_adapter_delete_gpio() is called); the adapter stores the pointer, not a copy.
* @param[in] pin_count number of entries in `pins`
* @note Only a single instance is supported at a time; a second call before deleting the
* first returns NULL.
* @return the GPIO interface, or NULL on failure. Free with audio_codec_adapter_delete_gpio()
* (esp_codec_dev's generic audio_codec_delete_gpio_if() does not release our GPIO descriptors).
*/
const audio_codec_gpio_if_t* audio_codec_adapter_new_gpio(const struct GpioPinSpec* pins, size_t pin_count);
/**
* @brief Frees a GPIO interface created by audio_codec_adapter_new_gpio(), releasing its GPIO descriptors.
*/
int audio_codec_adapter_delete_gpio(const audio_codec_gpio_if_t* gpio_if);
#ifdef __cplusplus
}
#endif