KT24-1110_65E-HA-651B/apps/soundbox/ui/lcd/STYLE_02/fm_action.c
2024-11-10 18:44:17 +08:00

482 lines
11 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "ui/ui.h"
#include "app_config.h"
#include "ui/ui_style.h"
#include "ui/ui_api.h"
#include "app_task.h"
#include "system/timer.h"
#include "key_event_deal.h"
#include "audio_config.h"
#include "jiffies.h"
#include "fm/fm_api.h"
#include "fm/fm_rw.h"
#include "app_power_manage.h"
#include "asm/charge.h"
#ifndef CONFIG_MEDIA_NEW_ENABLE
#include "application/audio_eq_drc_apply.h"
#else
#include "audio_eq.h"
#endif
#if (TCFG_UI_ENABLE&&(CONFIG_UI_STYLE == STYLE_JL_SOUNDBOX))
#if (TCFG_APP_FM_EN)
#define STYLE_NAME JL
extern int ui_hide_main(int id);
extern int ui_show_main(int id);
extern void key_ui_takeover(u8 on);
extern int fm_server_msg_post(int msg);
extern void fm_volume_up();
extern void fm_volume_down();
extern void power_off_deal(struct sys_event *event, u8 step);
extern u8 fm_get_cur_channel(void);
static int fm_fre_handler(const char *type, u32 arg)
{
printf(">>%s\n", __FUNCTION__);
u16 fre = fm_manage_get_fre();//8750
struct unumber num;
num.type = TYPE_NUM;
num.numbs = 2;
num.number[0] = fm_get_cur_channel();
num.number[1] = get_total_mem_channel();
ui_number_update_by_id(FM_CH, &num);
num.numbs = 2;
num.number[0] = fre / 100 % 1000;
num.number[1] = fre / 10 % 10;
ui_number_update_by_id(FM_FREQ, &num);
//显示进度图标是从87开始
ui_slider_set_persent_by_id(FM_SLIDER, (fre - 8700) * 100 / (REAL_FREQ_MAX - 8700));
return 0;
}
static const struct uimsg_handl ui_msg_handler[] = {
{ "fm_fre", fm_fre_handler }, /* 设置fm频率显示*/
{ NULL, NULL}, /* 必须以此结尾! */
};
static int fm_mode_onchange(void *ctr, enum element_change_event e, void *arg)
{
struct window *window = (struct window *)ctr;
switch (e) {
case ON_CHANGE_INIT:
puts("\n***fm_mode_onchange***\n");
/* key_ui_takeover(1); */
ui_register_msg_handler(ID_WINDOW_FM, ui_msg_handler);
/*
* 注册APP消息响应
*/
break;
case ON_CHANGE_RELEASE:
/*
* 要隐藏一下系统菜单页面防止在系统菜单插入USB进入USB页面
*/
break;
default:
return false;
}
return false;
}
REGISTER_UI_EVENT_HANDLER(ID_WINDOW_FM)
.onchange = fm_mode_onchange,
.onkey = NULL,
.ontouch = NULL,
};
static void fm_layout_init(int id)
{
u16 fre = fm_manage_get_fre();//8750
struct unumber num;
num.type = TYPE_NUM;
num.numbs = 2;
num.number[0] = fm_get_cur_channel();
num.number[1] = get_total_mem_channel();
ui_number_update_by_id(FM_CH, &num);
num.numbs = 2;
num.number[0] = fre / 100 % 1000;
num.number[1] = fre / 10 % 10;
ui_number_update_by_id(FM_FREQ, &num);
//显示进度图标是从87开始
ui_slider_set_persent_by_id(FM_SLIDER, (fre - 8700) * 100 / (REAL_FREQ_MAX - 8700));
}
static int fm_layout_onchange(void *ctr, enum element_change_event e, void *arg)
{
struct layout *layout = (struct layout *)ctr;
switch (e) {
case ON_CHANGE_INIT:
layout_on_focus(layout);
ui_set_call(fm_layout_init, 0);
break;
case ON_CHANGE_RELEASE:
layout_lose_focus(layout);
break;
case ON_CHANGE_FIRST_SHOW:
break;
default:
break;
}
return FALSE;
}
static void fm_vol_timeout(void *p);
static int fm_layout_onkey(void *ctr, struct element_key_event *e)
{
printf("fm_layout_onkey %d\n", e->value);
switch (e->value) {
case KEY_OK:
app_task_put_key_msg(KEY_MUSIC_PP, 0);
break;
case KEY_MENU:
if (ui_get_disp_status_by_id(FM_MENU_LAYOUT) <= 0) {
printf("FM_MENU_LAYOUT\n");
ui_show(FM_MENU_LAYOUT);
}
break;
case KEY_UP:
app_task_put_key_msg(KEY_FM_PREV_STATION, 0);
break;
case KEY_DOWN:
app_task_put_key_msg(KEY_FM_NEXT_STATION, 0);
break;
case KEY_VOLUME_INC:
case KEY_VOLUME_DEC:
if (ui_get_disp_status_by_id(FM_VOL_LAYOUT) <= 0) {
ui_show(FM_VOL_LAYOUT);
}
break;
case KEY_MODE:
ui_hide_curr_main();
ui_show_main(ID_WINDOW_SYS);
break;
case KEY_POWER_START:
case KEY_POWER:
power_off_deal(NULL, e->value - KEY_POWER_START);
break;
default:
return false;
break;
}
return true;
}
REGISTER_UI_EVENT_HANDLER(FM_LAYOUT)
.onchange = fm_layout_onchange,
.onkey = fm_layout_onkey,
.ontouch = NULL,
};
static int fm_menu_list_onkey(void *ctr, struct element_key_event *e)
{
struct ui_grid *grid = (struct ui_grid *)ctr;
int sel_item = 0;
printf("ui key %s %d\n", __FUNCTION__, e->value);
switch (e->value) {
case KEY_OK:
sel_item = ui_grid_cur_item(grid);
switch (sel_item) {
case 0:
app_task_put_key_msg(KEY_FM_SCAN_ALL, 0);
ui_hide(FM_MENU_LAYOUT);
break;
case 1:
app_task_put_key_msg(KEY_FM_DEL_STATION, 0);
ui_hide(FM_MENU_LAYOUT);
break;
case 2:
ui_hide(FM_MENU_LAYOUT);
break;
}
break;
default:
return false;
}
return false;
}
REGISTER_UI_EVENT_HANDLER(FM_MENU_LIST)
.onchange = NULL,
.onkey = fm_menu_list_onkey,
.ontouch = NULL,
};
static u16 fm_timer = 0;
static void fm_vol_timeout(void *p)
{
int id = (int)(p);
if (ui_get_disp_status_by_id(id) == TRUE) {
ui_hide(id);
}
fm_timer = 0;
}
static int fm_vol_layout_onkey(void *ctr, struct element_key_event *e)
{
printf("bt_vol_layout_onkey %d\n", e->value);
struct unumber num;
u8 vol;
if (fm_timer) {
sys_timer_modify(fm_timer, 3000);
}
switch (e->value) {
case KEY_MENU:
break;
case KEY_UP:
case KEY_VOLUME_INC:
fm_volume_up();
vol = app_audio_get_volume(APP_AUDIO_CURRENT_STATE);
num.type = TYPE_NUM;
num.numbs = 1;
num.number[0] = vol;
ui_number_update_by_id(FM_VOL_NUM, &num);
break;
case KEY_DOWN:
case KEY_VOLUME_DEC:
fm_volume_down();
vol = app_audio_get_volume(APP_AUDIO_CURRENT_STATE);
num.type = TYPE_NUM;
num.numbs = 1;
num.number[0] = vol;
ui_number_update_by_id(FM_VOL_NUM, &num);
break;
default:
return false;
break;
}
return true;
}
static void vol_init(int id)
{
struct unumber num;
num.type = TYPE_NUM;
num.numbs = 1;
num.number[0] = app_audio_get_volume(APP_AUDIO_CURRENT_STATE);
ui_number_update_by_id(FM_VOL_NUM, &num);
}
static int fm_vol_layout_onchange(void *ctr, enum element_change_event e, void *arg)
{
struct layout *layout = (struct layout *)ctr;
struct unumber num;
u8 vol;
switch (e) {
case ON_CHANGE_INIT:
layout_on_focus(layout);
if (!fm_timer) {
fm_timer = sys_timeout_add((void *)FM_VOL_LAYOUT, fm_vol_timeout, 3000);
}
break;
case ON_CHANGE_RELEASE:
layout_lose_focus(layout);
if (fm_timer) {
sys_timeout_del(fm_timer);
fm_timer = 0;
}
break;
case ON_CHANGE_FIRST_SHOW:
ui_set_call(vol_init, 0);
break;
default:
break;
}
return FALSE;
}
REGISTER_UI_EVENT_HANDLER(FM_VOL_LAYOUT)
.onchange = fm_vol_layout_onchange,
.onkey = fm_vol_layout_onkey,
.ontouch = NULL,
};
/************************************************************
fm模式控件初始化
************************************************************/
static int fm_slider_onchange(void *ctr, enum element_change_event e, void *arg)
{
struct ui_slider *slider = (struct ui_slider *)ctr;
u16 fre = 0;
switch (e) {
case ON_CHANGE_INIT:
fre = fm_manage_get_fre();//8750
slider->persent = VIRTUAL_FREQ(fre) * 100 / MAX_CHANNEL;
break;
default:
return FALSE;
}
return FALSE;
}
REGISTER_UI_EVENT_HANDLER(FM_SLIDER)
.onchange = fm_slider_onchange,
.onkey = NULL,
.ontouch = NULL,
};
static int fm_vol_num_onchange(void *ctr, enum element_change_event e, void *arg)
{
struct ui_number *num = (struct ui_number *)ctr;
switch (e) {
case ON_CHANGE_INIT:
num->nums = 1;
num->number[0] = app_audio_get_volume(APP_AUDIO_CURRENT_STATE);
break;
default:
return FALSE;
}
return FALSE;
}
REGISTER_UI_EVENT_HANDLER(FM_VOL_NUM)
.onchange = fm_vol_num_onchange,
.onkey = NULL,
.ontouch = NULL,
};
static int fm_ch_num_onchange(void *ctr, enum element_change_event e, void *arg)
{
struct ui_number *num = (struct ui_number *)ctr;
switch (e) {
case ON_CHANGE_INIT:
num->nums = 2;
num->number[0] = fm_get_cur_channel();
num->number[1] = get_total_mem_channel();
break;
default:
return FALSE;
}
return FALSE;
}
REGISTER_UI_EVENT_HANDLER(FM_CH)
.onchange = fm_ch_num_onchange,
.onkey = NULL,
.ontouch = NULL,
};
static int fm_freq_onchange(void *ctr, enum element_change_event e, void *arg)
{
struct ui_number *num = (struct ui_number *)ctr;
u16 fre = 0;
switch (e) {
case ON_CHANGE_INIT:
fre = fm_manage_get_fre();//8750
num->nums = 2;
num->number[0] = fre / 100 % 1000;
num->number[1] = fre / 10 % 10;
break;
default:
return FALSE;
}
return FALSE;
}
REGISTER_UI_EVENT_HANDLER(FM_FREQ)
.onchange = fm_freq_onchange,
.onkey = NULL,
.ontouch = NULL,
};
static void battery_timer(void *priv)
{
int incharge = 0;//充电标志
int id = (int)(priv);
static u8 percent = 0;
static u8 percent_last = 0;
if (get_charge_online_flag()) { //充电时候图标动态效果
if (percent > get_vbat_percent()) {
percent = 0;
}
ui_battery_set_level_by_id(id, percent, incharge); //充电标志,ui可以显示不一样的图标
percent += 20;
} else {
percent = get_vbat_percent();
if (percent != percent_last) {
ui_battery_set_level_by_id(id, percent, incharge); //充电标志,ui可以显示不一样的图标,需要工具设置
percent_last = percent;
}
}
}
static int battery_onchange(void *ctr, enum element_change_event e, void *arg)
{
struct ui_battery *battery = (struct ui_battery *)ctr;
static u32 timer = 0;
int incharge = 0;//充电标志
switch (e) {
case ON_CHANGE_INIT:
ui_battery_set_level(battery, get_vbat_percent(), incharge);
if (!timer) {
timer = sys_timer_add((void *)battery->elm.id, battery_timer, 1 * 1000); //传入的id就是BT_BAT
}
break;
case ON_CHANGE_FIRST_SHOW:
break;
case ON_CHANGE_RELEASE:
if (timer) {
sys_timer_del(timer);
timer = 0;
}
break;
default:
return false;
}
return false;
}
REGISTER_UI_EVENT_HANDLER(FM_BAT)
.onchange = battery_onchange,
.ontouch = NULL,
};
#endif //#if (TCFG_APP_FM_EN)
#endif