2025-04-08 18:46:12 +08:00

172 lines
4.0 KiB
C

#include "rtthread.h"
#include "include.h"
#include "sound_delay.h"
#include "mixer_ctrl.h"
#if (CONFIG_SOUND_MIXER && defined(CFG_CONTROL_MIXER_PARAMETER_BY_SARADC))
static uint8 g_saradc_step_status = 0;
static void sdly_change_decay_value_byadc(int32_t val)
{
SDELAY_ST *mixer_ptr;
uint32 tmp_value = val >> 4;
if(0 == sdly_is_valid_mixer_entity())
{
return;
}
mixer_ptr = sdly_get_mixer_entity();
if(mixer_ptr->decay_value_adc == tmp_value)
return;
mixer_ptr->decay_value_adc = tmp_value;
mixer_ptr->decay_value = SDLY_DEF_DECAY_VAL * tmp_value / 63;
if(mixer_ptr->decay_value > SDLY_DEF_DECAY_VAL)
mixer_ptr->decay_value = SDLY_DEF_DECAY_VAL;
SDLY_PRINTF("g_sound_mixer decay:%d,adc_val:%d\r\n", mixer_ptr->decay_value, val);
}
static void sdly_change_vol_byadc(uint16_t val, uint8 mode)
{
uint16 tmp_vol;
SDELAY_ST *mixer_ptr;
if(0 == sdly_is_valid_mixer_entity())
{
return;
}
mixer_ptr = sdly_get_mixer_entity();
tmp_vol = val >> 6;
if(mode == 0)
{
if(mixer_ptr->pcm_vol == tmp_vol)
return;
SDLY_PRINTF("--vol:%d,val:%d,tmp_vol:%x--\r\n", mixer_ptr->pcm_vol, val, tmp_vol);
mixer_ptr->pcm_vol = tmp_vol;
if(tmp_vol != 0)
mixer_ptr->pcm_vol = tmp_vol;
}
else
{
if(mixer_ptr->micphone_vol == tmp_vol)
return;
SDLY_PRINTF("---mic vol:%d,val:%d,tmp:%d--\r\n", mixer_ptr->micphone_vol, val, tmp_vol);
mixer_ptr->micphone_vol = tmp_vol;
}
}
static void sdly_change_mic_param_byadc(int32_t val, uint8 mode)
{
SDELAY_ST *mixer_ptr;
uint8 tmp_value = val >> 5;
if(0 == sdly_is_valid_mixer_entity())
{
return;
}
mixer_ptr = sdly_get_mixer_entity();
if(tmp_value >= 15)
tmp_value = 15;
if(mode == 0)
{
if(mixer_ptr->pcm_vol == 15 - tmp_value)
return;
mixer_ptr->pcm_vol = 15 - tmp_value;
}
}
void sdly_process_dac_result(uint16_t channel, uint16_t value)
{
if(channel == SDLY_ADC_SAMPLE_TIME_CHANNEL)
{
if(g_saradc_step_status == 1)
{
sdly_change_mic_param_byadc((uint32_t)value, 0);
}
}
else if(channel == SDLY_ADC_PCM_VOL_CHANNEL)
{
sdly_change_vol_byadc(value, 1);
}
else if(channel == SDLY_ADC_MIC_VOL_CHANNEL)
{
sdly_change_decay_value_byadc((int32_t)value);
}
}
void sdly_scanning_dac(void)
{
static uint16_t scan_cnt = 0;
static uint16_t bat_detect_num = BAT_DETECT_NUM + 1;
scan_cnt++;
if(scan_cnt == SCAN_CNT_THR_DECAY)
{
gpio_config(SDLY_ADC_DECAY_GPIO_PIN, 5 );
saradc_init(SDLY_ADC_MODE, SDLY_ADC_DECAY_CHANNEL, 3);
g_saradc_step_status = 0;
}
else if(scan_cnt == SCAN_CNT_THR_MIC)
{
gpio_config(SDLY_ADC_MICVOL_GPIO_PIN, 5 );
saradc_init(SDLY_ADC_MODE, SDLY_ADC_MIC_VOL_CHANNEL, 3);
g_saradc_step_status = 0;
}
else if(scan_cnt == SCAN_CNT_THR_SPTIME)
{
gpio_config( 10, 5 );
gpio_config( 9, 5 );
gpio_config( 7, 1 );
gpio_output( 7, 0 );
saradc_init(SDLY_ADC_MODE, SDLY_ADC_SAMPLE_TIME_CHANNEL, 3 );
g_saradc_step_status = 1;
}
else if(scan_cnt == SCAN_CNT_THR_HIGH_FREQ)
{
gpio_config( 10, 5 );
gpio_config( 7, 5 );
gpio_config( 9, 1 );
gpio_output( 9, 0 );
saradc_init(SDLY_ADC_MODE, SDLY_ADC_SAMPLE_TIME_CHANNEL, 3 );
g_saradc_step_status = 2;
}
else if(scan_cnt == SCAN_CNT_THR_LOW_FREQ)
{
gpio_config( 9, 5 );
gpio_config( 7, 5 );
gpio_config( 10, 1 );
gpio_output( 10, 0 );
saradc_init(SDLY_ADC_MODE, SDLY_ADC_SAMPLE_TIME_CHANNEL, 3 );
g_saradc_step_status = 3;
if(bat_detect_num++ < BAT_DETECT_NUM)
scan_cnt = 0;
}
else if(scan_cnt >= SCAN_CNT_THR_BAT)
{
saradc_init( SARADC_MODE_SINGLESTEP, 0, 3 );
bat_detect_num = 0;
scan_cnt = 0;
}
}
#endif
// eof