360 lines
10 KiB
C
360 lines
10 KiB
C
#ifdef SUPPORT_MS_EXTENSIONS
|
|
#pragma bss_seg(".aud_mic_dut.data.bss")
|
|
#pragma data_seg(".aud_mic_dut.data")
|
|
#pragma const_seg(".aud_mic_dut.text.const")
|
|
#pragma code_seg(".aud_mic_dut.text")
|
|
#endif
|
|
#include "aud_mic_dut.h"
|
|
#include "audio_online_debug.h"
|
|
#include "online_db_deal.h"
|
|
#include "app_config.h"
|
|
#include "system/includes.h"
|
|
|
|
#if ((defined TCFG_AUDIO_MIC_DUT_ENABLE) && TCFG_AUDIO_MIC_DUT_ENABLE)
|
|
#include "mic_dut_process.h"
|
|
|
|
#define AUDIO_MIC_DUT_TASK_NAME "AudioMicDut"
|
|
|
|
typedef struct {
|
|
u8 start; /*mic dut 开始和结束标志*/
|
|
u16 mic_gain; /*保存在线调试的mic gain*/
|
|
u32 sr; /*保存在线调试的mic采样率*/
|
|
u8 mic_idx; /*记录当前使用的那个mic*/
|
|
u8 scan_start; /*mic dut scan 开始和结束的标志*/
|
|
u8 dac_gain; /*保存在线调试的dac gain*/
|
|
u32 send_timer; /*定时器句柄*/
|
|
u32 seqn; /*数据的seqn*/
|
|
OS_SEM sem; /*信号量*/
|
|
} mic_online_info_t;
|
|
|
|
/*硬件信息*/
|
|
static mic_dut_info_t mic_info;
|
|
|
|
/*在线调试信息*/
|
|
static mic_online_info_t online_info_t;
|
|
static mic_online_info_t *online_info_hdl = &online_info_t;
|
|
|
|
static int spp_data_export(u8 ch, u8 *buf, u16 len)
|
|
{
|
|
u8 data_ch;
|
|
putchar('.');
|
|
if (ch == 0) {
|
|
data_ch = DB_PKT_TYPE_DAT_CH0;
|
|
} else if (ch == 1) {
|
|
data_ch = DB_PKT_TYPE_DAT_CH1;
|
|
} else {
|
|
data_ch = DB_PKT_TYPE_DAT_CH2;
|
|
}
|
|
int err = app_online_db_send_more(data_ch, buf, len);
|
|
if (err) {
|
|
printf("tx_err:%d", err);
|
|
}
|
|
return len;
|
|
}
|
|
|
|
/*在线数据初始化*/
|
|
static void mic_dut_online_init(void)
|
|
{
|
|
if (online_info_hdl) {
|
|
online_info_hdl->start = 0;
|
|
online_info_hdl->mic_gain = mic_info.mic_gain_default;
|
|
online_info_hdl->sr = mic_info.sr_default;
|
|
online_info_hdl->mic_idx = 0;
|
|
online_info_hdl->scan_start = 0;
|
|
online_info_hdl->dac_gain = mic_info.dac_gain_default;
|
|
online_info_hdl->send_timer = 0;
|
|
online_info_hdl->seqn = 1;
|
|
} else {
|
|
printf("online_info_hdl is NULL !!!\n");
|
|
}
|
|
}
|
|
|
|
static void audio_mic_dut_data_export_run(void)
|
|
{
|
|
if (online_info_hdl) {
|
|
u8 buf[644];
|
|
s16 *data = (s16 *)(&buf[4]);
|
|
int len = 640;
|
|
if (audio_mic_dut_get_data_len() >= len) {
|
|
memcpy(buf, &online_info_hdl->seqn, 4);
|
|
int rlen = audio_mic_dut_data_get(data, len);
|
|
extern void audio_mic_dut_eq_run(s16 * data, int len);
|
|
audio_mic_dut_eq_run(data, len);
|
|
/* printf("%d, %d", len, rlen); */
|
|
spp_data_export(0, buf, rlen + 4);
|
|
|
|
online_info_hdl->seqn ++;
|
|
/* printf("seqn %d %d\n", mic_online_info.seqn,*((int *) buf)); */
|
|
}
|
|
}
|
|
}
|
|
|
|
static void audio_mic_dut_timer(void *p)
|
|
{
|
|
audio_mic_dut_data_export_run();
|
|
}
|
|
|
|
static void audio_mic_dut_task(void *p)
|
|
{
|
|
while (1) {
|
|
os_sem_pend(&online_info_hdl->sem, 0);
|
|
audio_mic_dut_data_export_run();
|
|
}
|
|
}
|
|
|
|
static void mic_dut_online_start(void)
|
|
{
|
|
if (online_info_hdl) {
|
|
#if MIC_DUT_DATA_SEND_BY_TIMER
|
|
online_info_hdl->send_timer = usr_timer_add(NULL, audio_mic_dut_timer, MIC_DATA_SEND_INTERVAL, 1);
|
|
#else
|
|
os_sem_create(&online_info_hdl->sem, 0);
|
|
os_task_create(audio_mic_dut_task, NULL, 1, 768, 64, AUDIO_MIC_DUT_TASK_NAME);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
/*释放mic dut 信号量*/
|
|
void mic_dut_online_sem_post(void)
|
|
{
|
|
if (online_info_hdl) {
|
|
#if (MIC_DUT_DATA_SEND_BY_TIMER == 0)
|
|
os_sem_post(&online_info_hdl->sem);
|
|
#endif /*SPP_SEND_BY_TIMER*/
|
|
}
|
|
}
|
|
|
|
static void mic_dut_online_stop(void)
|
|
{
|
|
if (online_info_hdl) {
|
|
if (online_info_hdl->start) {
|
|
audio_mic_dut_stop();
|
|
online_info_hdl->start = 0;
|
|
}
|
|
if (online_info_hdl->scan_start) {
|
|
audio_mic_dut_scan_stop();
|
|
online_info_hdl->scan_start = 0;
|
|
}
|
|
|
|
#if MIC_DUT_DATA_SEND_BY_TIMER
|
|
if (online_info_hdl->send_timer) {
|
|
usr_timer_del(online_info_hdl->send_timer);
|
|
online_info_hdl->send_timer = 0;
|
|
}
|
|
#else
|
|
os_task_del(AUDIO_MIC_DUT_TASK_NAME);
|
|
os_sem_del(&online_info_hdl->sem, 0);
|
|
#endif
|
|
/* online_info_hdl = NULL; */
|
|
}
|
|
}
|
|
|
|
/*数据解析*/
|
|
static int mic_dut_online_parse(u8 *packet, u8 size, u8 *ext_data, u16 ext_size)
|
|
{
|
|
int res_data = 0;
|
|
online_cmd_t mic_dut_cmd;
|
|
int err = 0;
|
|
u8 parse_seq = ext_data[1];
|
|
//AEC_ONLINE_LOG("[MIC_DUT]spp_rx,seq:%d,size:%d\n", parse_seq, size);
|
|
put_buf(packet, size);
|
|
memcpy(&mic_dut_cmd, packet, sizeof(online_cmd_t));
|
|
printf("[MIC_DUT]cmd:0x%x\n", mic_dut_cmd.cmd);
|
|
switch (mic_dut_cmd.cmd) {
|
|
case AUD_RECORD_COUNT:
|
|
y_printf("AEC_RECORD_COUNT\n");
|
|
res_data = 1;
|
|
err = app_online_db_ack(parse_seq, (u8 *)&res_data, 4);
|
|
break;
|
|
case ONLINE_OP_QUERY_RECORD_PACKAGE_LENGTH:
|
|
y_printf("ONLINE_OP_QUERY_RECORD_PACKAGE_LENGTH\n");
|
|
if (mic_dut_cmd.data == 0) {
|
|
res_data = RECORD_CH0_LENGTH;
|
|
} else if (mic_dut_cmd.data == 1) {
|
|
res_data = RECORD_CH1_LENGTH;
|
|
} else {
|
|
res_data = RECORD_CH2_LENGTH;
|
|
}
|
|
printf("query record ch%d packet length:%d\n", mic_dut_cmd.data, res_data);
|
|
err = app_online_db_ack(parse_seq, (u8 *)&res_data, 4); //回复对应的通道数据长度
|
|
break;
|
|
case MIC_DUT_INFO_QUERY:
|
|
y_printf("MIC_DUT_INFO_QUERY\n");
|
|
/*获取mic dut硬件数据*/
|
|
audio_mic_dut_info_get(&mic_info);
|
|
/*在线数据初始化*/
|
|
mic_dut_online_init();
|
|
err = app_online_db_ack(parse_seq, (u8 *)&mic_info, sizeof(mic_info));
|
|
break;
|
|
case MIC_DUT_GAIN_SET:
|
|
y_printf("MIC_DUT_GAIN_SET:%d\n", mic_dut_cmd.data);
|
|
if (online_info_hdl) {
|
|
online_info_hdl->mic_gain = mic_dut_cmd.data;
|
|
}
|
|
audio_mic_dut_gain_set(mic_dut_cmd.data);
|
|
err = app_online_db_ack(parse_seq, (u8 *)"OK", 2);
|
|
break;
|
|
case MIC_DUT_SAMPLE_RATE_SET:
|
|
y_printf("MIC_DUT_SAMPLE_RATE_SET:%d\n", mic_dut_cmd.data);
|
|
if (online_info_hdl) {
|
|
online_info_hdl->sr = mic_dut_cmd.data;
|
|
}
|
|
audio_mic_dut_sample_rate_set(mic_dut_cmd.data);
|
|
err = app_online_db_ack(parse_seq, (u8 *)"OK", 2);
|
|
break;
|
|
case MIC_DUT_START:
|
|
y_printf("MIC_DUT_START\n");
|
|
/*打开发数资源*/
|
|
mic_dut_online_start();
|
|
/*打开mic*/
|
|
audio_mic_dut_start();
|
|
if (online_info_hdl) {
|
|
online_info_hdl->start = 1;
|
|
}
|
|
err = app_online_db_ack(parse_seq, (u8 *)"OK", 2);
|
|
break;
|
|
case MIC_DUT_STOP:
|
|
y_printf("MIC_DUT_STOP\n");
|
|
if (online_info_hdl) {
|
|
online_info_hdl->start = 0;
|
|
}
|
|
/*关闭mic*/
|
|
audio_mic_dut_stop();
|
|
/*关闭发数资源*/
|
|
mic_dut_online_stop();
|
|
err = app_online_db_ack(parse_seq, (u8 *)"OK", 2);
|
|
break;
|
|
case MIC_DUT_AMIC_SEL:
|
|
y_printf("MIC_DUT_AMIC_SEL:%d\n", mic_dut_cmd.data);
|
|
if (online_info_hdl) {
|
|
online_info_hdl->mic_idx = mic_dut_cmd.data;
|
|
}
|
|
audio_mic_dut_amic_select(mic_dut_cmd.data);
|
|
err = app_online_db_ack(parse_seq, (u8 *)"OK", 2);
|
|
break;
|
|
case MIC_DUT_DMIC_SEL:
|
|
y_printf("MIC_DUT_DMIC_SEL:%d\n", mic_dut_cmd.data);
|
|
if (online_info_hdl) {
|
|
online_info_hdl->mic_idx = mic_dut_cmd.data;
|
|
}
|
|
audio_mic_dut_dmic_select(mic_dut_cmd.data);
|
|
err = app_online_db_ack(parse_seq, (u8 *)"OK", 2);
|
|
break;
|
|
case MIC_DUT_DAC_GAIN_SET:
|
|
y_printf("MIC_DUT_DAC_GAIN_SET:%d\n", mic_dut_cmd.data);
|
|
if (online_info_hdl) {
|
|
online_info_hdl->dac_gain = mic_dut_cmd.data;
|
|
}
|
|
audio_mic_dut_dac_gain_set(mic_dut_cmd.data);
|
|
err = app_online_db_ack(parse_seq, (u8 *)"OK", 2);
|
|
break;
|
|
case MIC_DUT_SCAN_START:
|
|
y_printf("MIC_DUT_SCAN_START\n");
|
|
/*打开发数资源*/
|
|
mic_dut_online_start();
|
|
/*打开dac*/
|
|
audio_mic_dut_scan_start();
|
|
if (online_info_hdl) {
|
|
online_info_hdl->scan_start = 1;
|
|
}
|
|
err = app_online_db_ack(parse_seq, (u8 *)"OK", 2);
|
|
break;
|
|
case MIC_DUT_SCAN_STOP:
|
|
y_printf("MIC_DUT_SCAN_STOP\n");
|
|
if (online_info_hdl) {
|
|
online_info_hdl->scan_start = 0;
|
|
}
|
|
/*关闭dac*/
|
|
audio_mic_dut_scan_stop();
|
|
/*关闭发数资源*/
|
|
mic_dut_online_stop();
|
|
err = app_online_db_ack(parse_seq, (u8 *)"OK", 2);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
printf("err:%d\n", err);
|
|
return 0;
|
|
|
|
}
|
|
|
|
/*获取当前设置的mic增益*/
|
|
int mic_dut_online_get_mic_gain(void)
|
|
{
|
|
if (online_info_hdl) {
|
|
return online_info_hdl->mic_gain;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/*获取当前设置的dac增益*/
|
|
int mic_dut_online_get_dac_gain(void)
|
|
{
|
|
if (online_info_hdl) {
|
|
return online_info_hdl->dac_gain;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/*获取当前设置的采样率*/
|
|
int mic_dut_online_get_sample_rate(void)
|
|
{
|
|
if (online_info_hdl) {
|
|
return online_info_hdl->sr;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/*获取当前使能的模拟mic*/
|
|
u8 mic_dut_online_amic_enable_bit(void)
|
|
{
|
|
return mic_info.amic_enable_bit;
|
|
}
|
|
|
|
/*获取当前使能的数字mic*/
|
|
u8 mic_dut_online_dmic_enable_bit(void)
|
|
{
|
|
return mic_info.dmic_enable_bit;
|
|
}
|
|
|
|
/*获取当前在线使用的mic*/
|
|
int mic_dut_online_get_mic_idx(void)
|
|
{
|
|
if (online_info_hdl) {
|
|
return online_info_hdl->mic_idx;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/*获取mic dut状态*/
|
|
int mic_dut_online_get_mic_state(void)
|
|
{
|
|
if (online_info_hdl) {
|
|
return online_info_hdl->start;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/*获取dut scan状态*/
|
|
int mic_dut_online_get_scan_state(void)
|
|
{
|
|
if (online_info_hdl) {
|
|
return online_info_hdl->scan_start;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/*注册mic dut解析回调*/
|
|
int aud_mic_dut_open(void)
|
|
{
|
|
app_online_db_register_handle(DB_PKT_TYPE_MIC_DUT, mic_dut_online_parse);
|
|
return 0;
|
|
}
|
|
|
|
int aud_mic_dut_close(void)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif /*((defined TCFG_AUDIO_MIC_DUT_ENABLE) && TCFG_AUDIO_MIC_DUT_ENABLE)*/
|