2025-10-15 09:21:13 +00:00
|
|
|
#include "kt.h"
|
|
|
|
|
#include "avctp_user.h"
|
|
|
|
|
#include "key_event_deal.h"
|
2025-12-26 17:57:53 +00:00
|
|
|
#include "app_task.h"
|
|
|
|
|
//#include "audio_eq.h"
|
|
|
|
|
//#include "media/audio_eq_drc_apply.h"
|
|
|
|
|
#include "audio_dec.h"
|
2025-10-15 09:21:13 +00:00
|
|
|
|
|
|
|
|
typedef struct _kts_
|
|
|
|
|
{
|
|
|
|
|
int timer;
|
|
|
|
|
u32 t_cnt; // 上电标志
|
|
|
|
|
u8 led_flag;
|
|
|
|
|
// u8 conn_flag;
|
2025-12-26 17:57:53 +00:00
|
|
|
u8 volume; // 0-30
|
|
|
|
|
s8 treble; // -12-12
|
|
|
|
|
s8 bass; // -12-12
|
2025-10-15 09:21:13 +00:00
|
|
|
} _kts;
|
|
|
|
|
|
|
|
|
|
static _kts kts_var;
|
|
|
|
|
#define __this (&kts_var)
|
|
|
|
|
|
|
|
|
|
void kt_boot_init(void)
|
|
|
|
|
{
|
2025-12-26 17:57:53 +00:00
|
|
|
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);
|
|
|
|
|
|
2025-10-15 09:21:13 +00:00
|
|
|
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();
|
|
|
|
|
|
2025-12-26 17:57:53 +00:00
|
|
|
/* gpio_set_pull_up(KTCFG_PWR_LED_PIN, 0);
|
2025-10-15 09:21:13 +00:00
|
|
|
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);
|
2025-12-26 17:57:53 +00:00
|
|
|
gpio_set_output_value(KTCFG_BAK_LED_PIN, 0); */
|
2025-10-15 09:21:13 +00:00
|
|
|
|
|
|
|
|
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);
|
2025-12-26 17:57:53 +00:00
|
|
|
|
|
|
|
|
BT_LED_OFF();
|
2025-10-15 09:21:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void led_tim_callback(void)
|
|
|
|
|
{
|
|
|
|
|
|
2025-12-26 17:57:53 +00:00
|
|
|
app_task_put_key_msg(KEY_USER_CHECK_AD, 0);
|
2025-10-15 09:21:13 +00:00
|
|
|
|
2025-12-26 17:57:53 +00:00
|
|
|
if (app_get_curr_task() == APP_BT_TASK)
|
|
|
|
|
{
|
|
|
|
|
if (get_bt_connect_status() < BT_STATUS_CONNECTING)
|
2025-10-15 09:21:13 +00:00
|
|
|
{
|
2025-12-26 17:57:53 +00:00
|
|
|
__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();
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-10-15 09:21:13 +00:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2025-12-26 17:57:53 +00:00
|
|
|
__this->t_cnt = 0;
|
2025-10-15 09:21:13 +00:00
|
|
|
BT_LED_OFF();
|
2025-12-26 17:57:53 +00:00
|
|
|
__this->led_flag = 0;
|
2025-10-15 09:21:13 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2025-12-26 17:57:53 +00:00
|
|
|
__this->t_cnt = 0;
|
2025-10-15 09:21:13 +00:00
|
|
|
BT_LED_ON();
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-26 17:57:53 +00:00
|
|
|
if (get_bt_connect_status() < BT_STATUS_CONNECTING)
|
2025-10-15 09:21:13 +00:00
|
|
|
{
|
2025-12-26 17:57:53 +00:00
|
|
|
|
|
|
|
|
if (__this->led_flag == 0)
|
|
|
|
|
{
|
|
|
|
|
__this->led_flag = 1;
|
|
|
|
|
BT_LED_ON();
|
|
|
|
|
}
|
|
|
|
|
else
|
2025-10-15 09:21:13 +00:00
|
|
|
{
|
2025-12-26 17:57:53 +00:00
|
|
|
__this->led_flag = 0;
|
|
|
|
|
BT_LED_OFF();
|
2025-10-15 09:21:13 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2025-12-26 17:57:53 +00:00
|
|
|
BT_LED_ON();
|
2025-10-15 09:21:13 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void start_timer(void)
|
|
|
|
|
{
|
|
|
|
|
if (__this->timer)
|
|
|
|
|
{
|
|
|
|
|
sys_timer_del(__this->timer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
__this->t_cnt = 0;
|
2025-12-26 17:57:53 +00:00
|
|
|
__this->timer = sys_timer_add(NULL, led_tim_callback, 100);
|
2025-10-15 09:21:13 +00:00
|
|
|
}
|
|
|
|
|
|
2025-12-26 17:57:53 +00:00
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-10-15 09:21:13 +00:00
|
|
|
void kt_init(void)
|
|
|
|
|
{
|
2025-12-26 17:57:53 +00:00
|
|
|
|
|
|
|
|
__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);
|
2025-10-15 09:21:13 +00:00
|
|
|
start_timer();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void bled_set(void)
|
|
|
|
|
{
|
|
|
|
|
__this->t_cnt = 10;
|
2025-12-26 17:57:53 +00:00
|
|
|
// BAK_LED_ON();
|
|
|
|
|
// PWR_LED_ON();
|
2025-10-15 09:21:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
u8 kt_key_event_filter_after(int key_event)
|
|
|
|
|
{
|
2025-12-26 17:57:53 +00:00
|
|
|
u8 ret = false;
|
2025-10-15 09:21:13 +00:00
|
|
|
switch (key_event)
|
|
|
|
|
{
|
2025-12-26 17:57:53 +00:00
|
|
|
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;
|
2025-10-15 09:21:13 +00:00
|
|
|
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:
|
2025-12-26 17:57:53 +00:00
|
|
|
ret = false;
|
2025-10-15 09:21:13 +00:00
|
|
|
break;
|
|
|
|
|
}
|
2025-12-26 17:57:53 +00:00
|
|
|
return ret;
|
2025-10-15 09:21:13 +00:00
|
|
|
}
|