63 lines
1.4 KiB
C
63 lines
1.4 KiB
C
#ifndef __AUDIO_8311_H
|
|
#define __AUDIO_8311_H
|
|
#include "hal/i2s.h"
|
|
|
|
#define PLAY_MODE 0
|
|
#define MIC_MODE 1
|
|
|
|
|
|
typedef void *(*audio_i2s_set_buf)(void *priv_el,void *el_point,int *buf_size);
|
|
typedef void (*audio_i2s_get_buf)(void *priv_el,void *el_point, int *buf_size);
|
|
typedef int32 (*i2s_irq_func)(struct i2s_device *i2s, void* buf, uint32 len);
|
|
|
|
|
|
enum
|
|
{
|
|
I2S_OK,
|
|
I2S_CONFIG_NULL,//
|
|
I2S_DEV_NULL,//
|
|
I2S_PLAY_EMPTY_BUF_NULL,
|
|
I2S_REGISTER_FUNC_NULL,
|
|
I2S_MIC_FIRST_BUF_NULL,
|
|
}I2S_ERR;
|
|
|
|
|
|
|
|
//在有mic和喇叭的时候,sample_freq与sample_bit应该要一致,所以只有一个是有效值,默认是以喇叭的配置为准
|
|
typedef struct audio_i2s_config
|
|
{
|
|
//无需用户配置
|
|
struct i2s_device *i2s_dev;
|
|
void *current_node;
|
|
void *reg_node;
|
|
i2s_irq_func irq_func;
|
|
|
|
//用户配置
|
|
uint8 type; //0:喇叭 1:麦克风
|
|
int i2s_devid;
|
|
int sample_freq;
|
|
int sample_bit;
|
|
int data_fmt; //I2S_DATA_FMT_I2S I2S_DATA_FMT_MSB I2S_DATA_FMT_LSB I2S_DATA_FMT_PCM
|
|
void *play_empty_buf; //作为喇叭的时候,需要配置,size与buf_size一致,可以是malloc也可以是固定,如果是malloc,需要自己去free
|
|
int buf_size;
|
|
audio_i2s_set_buf set_buf;
|
|
audio_i2s_get_buf get_buf;
|
|
void *priv_el;
|
|
|
|
}audio_i2s_config;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int audio_8311_init(int i2c_devid) ;
|
|
int audio_i2s_install(audio_i2s_config *play_config,audio_i2s_config *mic_config);
|
|
int audio_i2s_uninstall(audio_i2s_config *play_config,audio_i2s_config *mic_config);
|
|
|
|
|
|
|
|
#endif
|