KT25-1015_AC695x_SDK310/apps/kaotings/kt.c
2025-12-30 16:44:42 +08:00

249 lines
6.1 KiB
C

#include "kt.h"
#include "avctp_user.h"
#include "key_event_deal.h"
#include "app_task.h"
// #include "audio_eq.h"
// #include "media/audio_eq_drc_apply.h"
#include "audio_dec.h"
typedef struct _kts_
{
int timer;
u32 t_cnt; // 上电标志
u8 led_flag;
// u8 conn_flag;
u8 volume; // 0-30
s8 treble; // -12-12
s8 bass; // -12-12
} _kts;
static _kts kts_var;
#define __this (&kts_var)
void kt_boot_init(void)
{
adc_add_sample_ch(KTCFG_BASS_AD_CHANNEL);
gpio_set_die(KTCFG_BASS_AD_PIN, 0);
gpio_set_direction(KTCFG_BASS_AD_PIN, 1);
gpio_set_pull_up(KTCFG_BASS_AD_PIN, 0);
gpio_set_pull_down(KTCFG_BASS_AD_PIN, 0);
adc_add_sample_ch(KTCFG_TREBLE_AD_CHANNEL);
gpio_set_die(KTCFG_TREBLE_AD_PIN, 0);
gpio_set_direction(KTCFG_TREBLE_AD_PIN, 1);
gpio_set_pull_up(KTCFG_TREBLE_AD_PIN, 0);
gpio_set_pull_down(KTCFG_TREBLE_AD_PIN, 0);
adc_add_sample_ch(KTCFG_VOLUME_AD_CHANNEL);
gpio_set_die(KTCFG_VOLUME_AD_PIN, 0);
gpio_set_direction(KTCFG_VOLUME_AD_PIN, 1);
gpio_set_pull_up(KTCFG_VOLUME_AD_PIN, 0);
gpio_set_pull_down(KTCFG_VOLUME_AD_PIN, 0);
gpio_set_pull_up(KTCFG_PA_MUTE_PIN, 0);
gpio_set_pull_down(KTCFG_PA_MUTE_PIN, 0);
gpio_set_direction(KTCFG_PA_MUTE_PIN, 0);
PA_MUTE();
/* gpio_set_pull_up(KTCFG_PWR_LED_PIN, 0);
gpio_set_pull_down(KTCFG_PWR_LED_PIN, 0);
gpio_set_direction(KTCFG_PWR_LED_PIN, 0);
gpio_set_output_value(KTCFG_PWR_LED_PIN, 1);
gpio_set_pull_up(KTCFG_BAK_LED_PIN, 0);
gpio_set_pull_down(KTCFG_BAK_LED_PIN, 0);
gpio_set_direction(KTCFG_BAK_LED_PIN, 0);
gpio_set_output_value(KTCFG_BAK_LED_PIN, 0); */
gpio_set_pull_up(KTCFG_BT_LED_PIN, 0);
gpio_set_pull_down(KTCFG_BT_LED_PIN, 0);
gpio_set_direction(KTCFG_BT_LED_PIN, 0);
gpio_set_output_value(KTCFG_BT_LED_PIN, 0);
BT_LED_OFF();
}
static void led_tim_callback(void)
{
app_task_put_key_msg(KEY_USER_CHECK_AD, 0);
if (app_get_curr_task() == APP_BT_TASK)
{
if (get_bt_connect_status() < BT_STATUS_CONNECTING)
{
__this->t_cnt++;
if (__this->t_cnt >= 5)
{
__this->t_cnt = 0;
if (__this->led_flag == 0)
{
__this->led_flag = 1;
BT_LED_ON();
}
else
{
__this->led_flag = 0;
BT_LED_OFF();
}
}
}
else
{
__this->t_cnt = 0;
BT_LED_OFF();
__this->led_flag = 0;
}
}
else
{
__this->t_cnt = 0;
BT_LED_ON();
}
if (get_bt_connect_status() < BT_STATUS_CONNECTING)
{
if (__this->led_flag == 0)
{
__this->led_flag = 1;
BT_LED_ON();
}
else
{
__this->led_flag = 0;
BT_LED_OFF();
}
}
else
{
BT_LED_ON();
}
}
static void start_timer(void)
{
if (__this->timer)
{
sys_timer_del(__this->timer);
}
__this->t_cnt = 0;
__this->timer = sys_timer_add(NULL, led_tim_callback, 100);
}
void user_eq_tre(int freq, int gain)
{
struct high_bass parm = {0};
parm.freq = freq;
parm.gain = gain;
mix_out_high_bass(AUDIO_EQ_HIGH, &parm);
}
void user_eq_bass(int freq, int gain)
{
struct high_bass parm = {0};
parm.freq = freq;
parm.gain = gain;
mix_out_high_bass(AUDIO_EQ_BASS, &parm);
}
void kt_init(void)
{
u32 delay_10ms_cnt = 0;
PA_MUTE();
while (1)
{
clr_wdt();
os_time_dly(2);
delay_10ms_cnt++;
if (delay_10ms_cnt > 40)
{
break;
}
}
__this->bass = (adc_get_value(KTCFG_BASS_AD_CHANNEL) * 24 / 1023) - 12;
user_eq_bass(0, __this->bass);
__this->treble = (adc_get_value(KTCFG_TREBLE_AD_CHANNEL) * 24 / 1023) - 12;
user_eq_tre(1, __this->treble);
__this->volume = (adc_get_value(KTCFG_VOLUME_AD_CHANNEL) * 30 / 1023);
app_audio_set_volume(APP_AUDIO_STATE_MUSIC, __this->volume, 1);
start_timer();
}
void bled_set(void)
{
__this->t_cnt = 10;
// BAK_LED_ON();
// PWR_LED_ON();
}
u8 kt_key_event_filter_after(int key_event)
{
u8 ret = false;
switch (key_event)
{
case KEY_USER_CHECK_AD:
// led_tim_callback();
// printf("KEY_USER_CHECK_AD\n");
{
// u32 val = adc_get_value(KTCFG_VOLUME_AD_CHANNEL); // 0-1023
s8 vol = (adc_get_value(KTCFG_VOLUME_AD_CHANNEL) * 30 / 1023);
if (vol != __this->volume)
{
printf("volume: %d\n", vol);
__this->volume = vol;
app_audio_set_volume(APP_AUDIO_STATE_MUSIC, __this->volume, 1);
}
// 读取BASS AD值并转换为-12到12的范围
s8 bass = (adc_get_value(KTCFG_BASS_AD_CHANNEL) * 24 / 1023) - 12;
if (bass != __this->bass)
{
printf("bass: %d\n", bass);
__this->bass = bass;
user_eq_bass(0, __this->bass);
}
// 读取TREBLE AD值并转换为-12到12的范围
s8 treble = (adc_get_value(KTCFG_TREBLE_AD_CHANNEL) * 24 / 1023) - 12;
if (treble != __this->treble)
{
printf("treble: %d\n", treble);
__this->treble = treble;
// 调用高音EQ调整接口
user_eq_tre(0, __this->treble);
}
ret = true;
}
// printf("bass_ad_value: %d\n", adc_get_value(KTCFG_BASS_AD_CHANNEL));
// printf("treble_ad_value: %d\n", adc_get_value(KTCFG_TREBLE_AD_CHANNEL));
// printf("volume_ad_value: %d\n", adc_get_value(KTCFG_VOLUME_AD_CHANNEL));
break;
case KEY_MUSIC_PP:
bled_set();
break;
case KEY_MUSIC_PREV:
bled_set();
break;
case KEY_MUSIC_NEXT:
bled_set();
break;
case KEY_VOL_UP:
bled_set();
break;
case KEY_VOL_DOWN:
bled_set();
break;
default:
ret = false;
break;
}
return ret;
}