mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 22:08:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier: Apache-2.0
 | 
						|
 */
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include "driver/i2s_types.h"
 | 
						|
#include "hal/i2s_types.h"
 | 
						|
 | 
						|
#include "esp_types.h"
 | 
						|
#include "esp_err.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief LP_I2S max timeout value
 | 
						|
 */
 | 
						|
#define LP_I2S_MAX_DELAY UINT32_MAX
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief LP I2S controller channel configuration
 | 
						|
*/
 | 
						|
typedef struct {
 | 
						|
    int                 id;                 /*!< LP I2S port id */
 | 
						|
    i2s_role_t          role;               /*!< LP I2S role, only I2S_ROLE_SLAVE supported */
 | 
						|
    size_t              threshold;          /*!< When LP I2S received bytes are bigger than this value, the `on_thresh_met` callback will be triggered. Must be in multiple of 4 */
 | 
						|
} lp_i2s_chan_config_t;
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief LP I2S event callbacks
 | 
						|
 */
 | 
						|
typedef struct {
 | 
						|
    lp_i2s_callback_t on_thresh_met;           ///< Triggered when the received bytes are bigger than `lp_i2s_chan_config_t:threshold`
 | 
						|
    lp_i2s_callback_t on_request_new_trans;    ///< Triggered when a new transaction buffer is needed, when this callback is registered, you don't need to use `lp_i2s_channel_read` to get data, you can get data via this callback asynchronously
 | 
						|
} lp_i2s_evt_cbs_t;
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Allocate new LP I2S channel(s)
 | 
						|
 *
 | 
						|
 * @param[in]   chan_cfg        LP I2S controller channel configurations
 | 
						|
 * @param[out]  ret_tx_handle   LP I2S channel handler used for managing the sending channel(optional), this one is not supported and is kept here for future-proof.
 | 
						|
 * @param[out]  ret_rx_handle   LP I2S channel handler used for managing the receiving channel(optional)
 | 
						|
 * @return
 | 
						|
 *      - ESP_OK                 Allocate new channel(s) success
 | 
						|
 *      - ESP_ERR_NOT_SUPPORTED  The communication mode is not supported on the current chip
 | 
						|
 *      - ESP_ERR_INVALID_ARG    NULL pointer or illegal parameter in lp_i2s_chan_config_t
 | 
						|
 *      - ESP_ERR_NOT_FOUND      No available LP I2S channel found
 | 
						|
 */
 | 
						|
esp_err_t lp_i2s_new_channel(const lp_i2s_chan_config_t *chan_cfg, lp_i2s_chan_handle_t *ret_tx_handle, lp_i2s_chan_handle_t *ret_rx_handle);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Register LP I2S event callbacks
 | 
						|
 *
 | 
						|
 * @param[in] handle     LP I2S channel handle
 | 
						|
 * @param[in] cbs        Callbacks
 | 
						|
 * @param[in] user_data  User data
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *        - ESP_OK:                On success
 | 
						|
 *        - ESP_ERR_INVALID_ARG:   Invalid argument
 | 
						|
 *        - ESP_ERR_INVALID_STATE: Invalid state
 | 
						|
 */
 | 
						|
esp_err_t lp_i2s_register_event_callbacks(lp_i2s_chan_handle_t handle, const lp_i2s_evt_cbs_t *cbs, void *user_data);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Enable LP I2S driver
 | 
						|
 *
 | 
						|
 * @param[in] handle     LP I2S channel handle
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *        - ESP_OK:                On success
 | 
						|
 *        - ESP_ERR_INVALID_ARG:   Invalid argument
 | 
						|
 *        - ESP_ERR_INVALID_STATE: Invalid state
 | 
						|
 */
 | 
						|
esp_err_t lp_i2s_channel_enable(lp_i2s_chan_handle_t chan);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Read LP I2S received data
 | 
						|
 *
 | 
						|
 * @param[in] handle      LP I2S channel handle
 | 
						|
 * @param[in] trans       LP I2S transaction
 | 
						|
 * @param[in] timeout_ms  Timeout in ms, set to `LP_I2S_MAX_DELAY` to wait until read is done
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *        - ESP_OK:                On success
 | 
						|
 *        - ESP_ERR_INVALID_ARG:   Invalid argument
 | 
						|
 *        - ESP_ERR_INVALID_STATE: Invalid state, e.g. `on_request_new_trans` callback is registered
 | 
						|
 */
 | 
						|
esp_err_t lp_i2s_channel_read(lp_i2s_chan_handle_t chan, lp_i2s_trans_t *trans, uint32_t timeout_ms);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Read LP I2S received data until certain bytes
 | 
						|
 *
 | 
						|
 * @param[in] handle      LP I2S channel handle
 | 
						|
 * @param[in] trans       LP I2S transaction
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *        - ESP_OK:                On success
 | 
						|
 *        - ESP_ERR_INVALID_ARG:   Invalid argument
 | 
						|
 *        - ESP_ERR_INVALID_STATE: Invalid state, e.g. `on_request_new_trans` callback is registered
 | 
						|
 */
 | 
						|
esp_err_t lp_i2s_channel_read_until_bytes(lp_i2s_chan_handle_t chan, lp_i2s_trans_t *trans);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Disable LP I2S driver
 | 
						|
 *
 | 
						|
 * @param[in] handle     LP I2S channel handle
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *        - ESP_OK:                On success
 | 
						|
 *        - ESP_ERR_INVALID_ARG:   Invalid argument
 | 
						|
 *        - ESP_ERR_INVALID_STATE: Invalid state
 | 
						|
 */
 | 
						|
esp_err_t lp_i2s_channel_disable(lp_i2s_chan_handle_t chan);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Delete the LP I2S channel
 | 
						|
 *
 | 
						|
 * @param[in]   handle      LP I2S channel handler
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *      - ESP_OK                Delete successfully
 | 
						|
 *      - ESP_ERR_INVALID_ARG   NULL pointer
 | 
						|
 */
 | 
						|
esp_err_t lp_i2s_del_channel(lp_i2s_chan_handle_t handle);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 |