2025-12-30 08:36:34 +00:00
|
|
|
#include "kt.h"
|
2026-02-12 13:11:00 +00:00
|
|
|
#include "drv_st7789.h"
|
2026-02-13 13:49:31 +00:00
|
|
|
#include "kt_ui.h"
|
|
|
|
|
#include "key_event_deal.h"
|
|
|
|
|
#include "app_task.h"
|
|
|
|
|
#include "avctp_user.h"
|
2026-03-18 21:52:10 +00:00
|
|
|
#include "eye_led.h"
|
|
|
|
|
#include "user_cfg_id.h"
|
2025-12-30 08:36:34 +00:00
|
|
|
|
2026-02-13 13:49:31 +00:00
|
|
|
u16 tid = 0;
|
2025-12-30 08:36:34 +00:00
|
|
|
|
|
|
|
|
void kt_boot_init(void)
|
|
|
|
|
{
|
2026-02-12 13:11:00 +00:00
|
|
|
// mute PA1 PA2 双绑
|
|
|
|
|
gpio_set_pull_up(IO_PORTA_01, 0);
|
|
|
|
|
gpio_set_pull_down(IO_PORTA_01, 0);
|
|
|
|
|
gpio_set_die(IO_PORTA_01, 1);
|
|
|
|
|
gpio_set_direction(IO_PORTA_01, 1);
|
|
|
|
|
|
|
|
|
|
gpio_set_pull_up(CFG_MUTE_PIN, 0);
|
|
|
|
|
gpio_set_pull_down(CFG_MUTE_PIN, 0);
|
|
|
|
|
gpio_set_direction(CFG_MUTE_PIN, 0);
|
|
|
|
|
PA_MUTE();
|
|
|
|
|
|
|
|
|
|
// flash led PA0 PC7 双绑
|
|
|
|
|
gpio_set_pull_up(IO_PORTA_00, 0);
|
|
|
|
|
gpio_set_pull_down(IO_PORTA_00, 0);
|
|
|
|
|
gpio_set_die(IO_PORTA_00, 1);
|
|
|
|
|
gpio_set_direction(IO_PORTA_00, 1);
|
|
|
|
|
|
2026-03-18 21:52:10 +00:00
|
|
|
gpio_set_pull_up(CFG_EYE_LED_PIN, 0);
|
|
|
|
|
gpio_set_pull_down(CFG_EYE_LED_PIN, 0);
|
|
|
|
|
gpio_set_direction(CFG_EYE_LED_PIN, 0);
|
|
|
|
|
EYE_LED_OFF();
|
2026-02-12 13:11:00 +00:00
|
|
|
|
2026-02-13 13:49:31 +00:00
|
|
|
// bt led PA3
|
2026-02-12 13:11:00 +00:00
|
|
|
gpio_set_pull_up(CFG_BT_LED_PIN, 0);
|
|
|
|
|
gpio_set_pull_down(CFG_BT_LED_PIN, 0);
|
|
|
|
|
gpio_set_direction(CFG_BT_LED_PIN, 0);
|
|
|
|
|
BT_LED_OFF();
|
|
|
|
|
|
2026-02-13 13:49:31 +00:00
|
|
|
// exp pwr PB3
|
2026-02-12 13:11:00 +00:00
|
|
|
gpio_set_pull_up(CFG_EXP_PWR_PIN, 0);
|
|
|
|
|
gpio_set_pull_down(CFG_EXP_PWR_PIN, 0);
|
|
|
|
|
gpio_set_direction(CFG_EXP_PWR_PIN, 0);
|
|
|
|
|
EXP_PWR_OFF();
|
2026-02-13 13:49:31 +00:00
|
|
|
}
|
2026-02-12 13:11:00 +00:00
|
|
|
|
2026-02-13 13:49:31 +00:00
|
|
|
static void tid_timer_callback(void *priv)
|
|
|
|
|
{
|
|
|
|
|
if (app_get_curr_task() == APP_BT_TASK)
|
|
|
|
|
{
|
|
|
|
|
if (get_bt_connect_status() == BT_STATUS_PLAYING_MUSIC)
|
|
|
|
|
{
|
|
|
|
|
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_GET_PLAY_TIME, 0, NULL);
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-03-18 21:52:10 +00:00
|
|
|
else if (app_get_curr_task() == APP_MUSIC_TASK)
|
|
|
|
|
{
|
|
|
|
|
/* Music 模式:定时刷新播放进度 */
|
|
|
|
|
kt_ui_post_key_event(KEY_USER_PLAY_TIME_UPDATE, 0);
|
|
|
|
|
}
|
2026-02-13 13:49:31 +00:00
|
|
|
}
|
|
|
|
|
static void start_timer(void)
|
|
|
|
|
{
|
|
|
|
|
if (tid != 0)
|
|
|
|
|
{
|
|
|
|
|
sys_timer_del(tid);
|
|
|
|
|
tid = 0;
|
|
|
|
|
}
|
|
|
|
|
tid = sys_timer_add(NULL, tid_timer_callback, 200);
|
2025-12-30 08:36:34 +00:00
|
|
|
}
|
|
|
|
|
|
2026-03-18 21:52:10 +00:00
|
|
|
static void eye_led_complete_cb(void)
|
|
|
|
|
{
|
|
|
|
|
kt_ui_post_key_event(KEY_USER_EYE_LED_STOP, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void kt_set_ex_led_color(u8 color)
|
|
|
|
|
{
|
|
|
|
|
switch (color)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
R_LED_OFF();
|
|
|
|
|
G_LED_OFF();
|
|
|
|
|
B_LED_OFF();
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
|
R_LED_ON();
|
|
|
|
|
G_LED_OFF();
|
|
|
|
|
B_LED_OFF();
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
R_LED_OFF();
|
|
|
|
|
G_LED_ON();
|
|
|
|
|
B_LED_OFF();
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
R_LED_OFF();
|
|
|
|
|
G_LED_OFF();
|
|
|
|
|
B_LED_ON();
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
R_LED_ON();
|
|
|
|
|
G_LED_ON();
|
|
|
|
|
B_LED_OFF();
|
|
|
|
|
break;
|
|
|
|
|
case 5:
|
|
|
|
|
R_LED_ON();
|
|
|
|
|
G_LED_OFF();
|
|
|
|
|
B_LED_ON();
|
|
|
|
|
break;
|
|
|
|
|
case 6:
|
|
|
|
|
R_LED_OFF();
|
|
|
|
|
G_LED_ON();
|
|
|
|
|
B_LED_ON();
|
|
|
|
|
break;
|
|
|
|
|
case 7:
|
|
|
|
|
R_LED_ON();
|
|
|
|
|
G_LED_ON();
|
|
|
|
|
B_LED_ON();
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
syscfg_write(CFG_EX_LED_COLOR, &color, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ex_led_init(void)
|
|
|
|
|
{
|
|
|
|
|
R_LED_OFF();
|
|
|
|
|
G_LED_OFF();
|
|
|
|
|
B_LED_OFF();
|
|
|
|
|
|
|
|
|
|
u8 color = 0;
|
|
|
|
|
|
|
|
|
|
int ret = syscfg_read(CFG_EX_LED_COLOR, &color, 1);
|
|
|
|
|
if (ret != 1)
|
|
|
|
|
{
|
|
|
|
|
color = 0;
|
|
|
|
|
}
|
|
|
|
|
kt_set_ex_led_color(color);
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-30 08:36:34 +00:00
|
|
|
void kt_init(void)
|
|
|
|
|
{
|
2026-02-12 13:11:00 +00:00
|
|
|
lcd_st7789_init();
|
2026-03-18 21:52:10 +00:00
|
|
|
eye_led_init();
|
|
|
|
|
eye_led_set_complete_callback(eye_led_complete_cb);
|
2025-12-30 08:36:34 +00:00
|
|
|
|
2026-02-13 13:49:31 +00:00
|
|
|
kt_ui_init();
|
|
|
|
|
start_timer();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
u8 kt_key_event_filter_after(int key_event, int key_value)
|
|
|
|
|
{
|
|
|
|
|
u8 ret = false;
|
|
|
|
|
switch (key_event)
|
|
|
|
|
{
|
2026-03-18 21:52:10 +00:00
|
|
|
case KEY_USER_LED:
|
|
|
|
|
//kt_set_ex_led_color(key_value);
|
|
|
|
|
{
|
|
|
|
|
u8 color = 0;
|
|
|
|
|
int ret = syscfg_read(CFG_EX_LED_COLOR, &color, 1);
|
|
|
|
|
if (ret != 1)
|
|
|
|
|
{
|
|
|
|
|
color = 0;
|
|
|
|
|
}
|
|
|
|
|
color++;
|
|
|
|
|
if (color > 7)
|
|
|
|
|
{
|
|
|
|
|
color = 0;
|
|
|
|
|
}
|
|
|
|
|
kt_set_ex_led_color(color);
|
|
|
|
|
}
|
|
|
|
|
ret = true;
|
|
|
|
|
break;
|
|
|
|
|
case KEY_USER_SETTING:
|
|
|
|
|
if (app_get_curr_task() == APP_MUSIC_TASK)
|
|
|
|
|
{
|
|
|
|
|
kt_ui_post_key_event(key_event, key_value);
|
|
|
|
|
ret = true;
|
|
|
|
|
}
|
|
|
|
|
break;
|
2026-02-13 13:49:31 +00:00
|
|
|
case KEY_MUSIC_NEXT:
|
2026-03-18 21:52:10 +00:00
|
|
|
case KEY_MUSIC_PREV:
|
|
|
|
|
/* 仅在 Music 页设置模式下转发,用于列表焦点移动 */
|
|
|
|
|
if (app_get_curr_task() == APP_MUSIC_TASK && kt_ui_music_setting_mode())
|
|
|
|
|
{
|
|
|
|
|
kt_ui_post_key_event(key_event, key_value);
|
|
|
|
|
ret = true;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case KEY_MUSIC_PP: /* 设置模式下 PP 单击 = 确认 */
|
|
|
|
|
if (app_get_curr_task() == APP_MUSIC_TASK && kt_ui_music_setting_mode())
|
|
|
|
|
{
|
|
|
|
|
kt_ui_post_key_event(key_event, key_value);
|
|
|
|
|
ret = true;
|
|
|
|
|
}
|
|
|
|
|
break;
|
2026-02-13 13:49:31 +00:00
|
|
|
case KEY_USER_PLAY_TIME_UPDATE:
|
|
|
|
|
kt_ui_post_key_event(key_event, key_value);
|
|
|
|
|
ret = true;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
ret = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
2025-12-30 08:36:34 +00:00
|
|
|
}
|