mcu_ab568x/app/projects/AB5681F_240_32M/functions/func_volume.c
2025-05-30 18:03:10 +08:00

202 lines
6.2 KiB
C
Raw Permalink 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 "include.h"
#include "func.h"
#include "app_variable.h"
#if TRACE_EN
#define TRACE(...) printf(__VA_ARGS__)
#else
#define TRACE(...)
#endif
typedef struct f_volume_t_ {
} f_volume_t;
enum {
//按键
COMPO_ID_BTN_REDUCE = 1,
COMPO_ID_BTN_INCREASE,
//图像
COMPO_ID_PIC_LEVEL1, //等级 1~5
COMPO_ID_PIC_LEVEL2,
COMPO_ID_PIC_LEVEL3,
COMPO_ID_PIC_LEVEL4,
COMPO_ID_PIC_LEVEL5,
COMPO_ID_PIC_REDUCE_CLICK, //按钮触摸效果图
COMPO_ID_PIC_INCREASE_CLICK,
};
typedef struct volume_disp_pic_item_t_ {
u32 res_addr;
u16 pic_id;
s16 x;
s16 y;
bool visible_en;
} volume_disp_pic_item_t;
#define VOLUME_DISP_PIC_ITEM_CNT ((int)(sizeof(tbl_volume_disp_pic_item) / sizeof(tbl_volume_disp_pic_item[0])))
//图片item创建时遍历一下
static const volume_disp_pic_item_t tbl_volume_disp_pic_item[] = {
{UI_BUF_COMMON_BG2_BIN, COMPO_ID_PIC_LEVEL1, 108, GUI_SCREEN_CENTER_Y + 20, false},
{UI_BUF_COMMON_BG2_BIN, COMPO_ID_PIC_LEVEL2, 134, GUI_SCREEN_CENTER_Y + 20, false},
{UI_BUF_COMMON_BG2_BIN, COMPO_ID_PIC_LEVEL3, 160, GUI_SCREEN_CENTER_Y + 20, false},
{UI_BUF_COMMON_BG2_BIN, COMPO_ID_PIC_LEVEL4, 186, GUI_SCREEN_CENTER_Y + 20, false},
{UI_BUF_COMMON_BG2_BIN, COMPO_ID_PIC_LEVEL5, 212, GUI_SCREEN_CENTER_Y + 20, false},
};
//创建调节音量窗体
compo_form_t *func_volume_form_create(void)
{
//新建窗体和背景
compo_form_t *frm = compo_form_create(true);
// compo_form_add_image(frm, UI_BUF_COMMON_BG1_BIN, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y + 20);
compo_form_add_image(frm, UI_BUF_ICON_VOLUME_BIN, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y - 50);
//设置标题栏
compo_form_set_mode(frm, COMPO_FORM_MODE_SHOW_TITLE | COMPO_FORM_MODE_SHOW_TIME);
compo_form_set_title(frm, i18n[STR_VOLUME]);
//新建按钮
compo_button_t *btn;
btn = compo_button_create_by_image(frm, UI_BUF_COMMON_REDUCE_BIN);
compo_setid(btn, COMPO_ID_BTN_REDUCE);
compo_button_set_pos(btn, 54,GUI_SCREEN_CENTER_Y+ 20);
btn = compo_button_create_by_image(frm, UI_BUF_COMMON_INCREASE_BIN);
compo_setid(btn, COMPO_ID_BTN_INCREASE);
compo_button_set_pos(btn, 200, GUI_SCREEN_CENTER_Y+ 20);
//新建图像
compo_picturebox_t *pic_level[5];
for (u8 idx = 0; idx < VOLUME_DISP_PIC_ITEM_CNT; idx++) {
pic_level[idx] = compo_picturebox_create(frm, tbl_volume_disp_pic_item[idx].res_addr);
compo_setid(pic_level[idx], tbl_volume_disp_pic_item[idx].pic_id);
compo_picturebox_set_pos(pic_level[idx], tbl_volume_disp_pic_item[idx].x, tbl_volume_disp_pic_item[idx].y);
compo_picturebox_set_visible(pic_level[idx], tbl_volume_disp_pic_item[idx].visible_en);
}
// compo_picturebox_t *pic_button;
// pic_button = compo_picturebox_create(frm, UI_BUF_COMMON_REDUCE_CLICK_BIN);
// compo_setid(pic_button, COMPO_ID_PIC_REDUCE_CLICK);
// compo_picturebox_set_pos(pic_button, 54, 309);
// compo_picturebox_set_visible(pic_button, GUI_SCREEN_CENTER_Y + 20);
// pic_button = compo_picturebox_create(frm, UI_BUF_COMMON_INCREASE_CLICK_BIN);
// compo_setid(pic_button, COMPO_ID_PIC_INCREASE_CLICK);
// compo_picturebox_set_pos(pic_button, 200, GUI_SCREEN_CENTER_Y + 20);
// compo_picturebox_set_visible(pic_button, false);
compo_picturebox_set_visible(pic_level[0], true);
for (u8 i=0; i<VOL_MAX; i+=4) {
if (i < SysVariable.vol) {
compo_picturebox_set_visible(pic_level[i/4 + 1], true);
} else {
compo_picturebox_set_visible(pic_level[i/4 + 1], false);
}
}
return frm;
}
//音量功能事件处理
static void func_volume_process(void)
{
func_process();
}
//释放按钮效果处理
static void func_volume_button_release_handle(void)
{
compo_picturebox_t *pic_reduce = compo_getobj_byid(COMPO_ID_PIC_REDUCE_CLICK);
compo_picturebox_t *pic_increase = compo_getobj_byid(COMPO_ID_PIC_INCREASE_CLICK);
compo_picturebox_set_visible(pic_reduce, false);
compo_picturebox_set_visible(pic_increase, false);
}
//单击按钮
static void func_volume_button_click(void)
{
int id = compo_get_button_id();
compo_picturebox_t *pic_level[5];
pic_level[0] = compo_getobj_byid(COMPO_ID_PIC_LEVEL1);
pic_level[1] = compo_getobj_byid(COMPO_ID_PIC_LEVEL2);
pic_level[2] = compo_getobj_byid(COMPO_ID_PIC_LEVEL3);
pic_level[3] = compo_getobj_byid(COMPO_ID_PIC_LEVEL4);
pic_level[4] = compo_getobj_byid(COMPO_ID_PIC_LEVEL5);
switch (id) {
case COMPO_ID_BTN_REDUCE:
if (SysVariable.vol > 0 && SysVariable.vol <= VOL_MAX) {
SysVariable.vol -= 4;
}
break;
case COMPO_ID_BTN_INCREASE:
if (SysVariable.vol >= 0 && SysVariable.vol < VOL_MAX) {
SysVariable.vol += 4;
}
break;
default:
break;
}
for (u8 i=0; i<VOL_MAX; i++) {
if (i < SysVariable.vol) {
compo_picturebox_set_visible(pic_level[i/4 + 1], true);
} else {
compo_picturebox_set_visible(pic_level[i/4 + 1], false);
}
}
func_volume_button_release_handle();
}
//音量功能消息处理
static void func_volume_message(size_msg_t msg)
{
switch (msg) {
case MSG_CTP_CLICK:
func_volume_button_click();
break;
case MSG_CTP_SHORT_UP:
break;
case MSG_CTP_SHORT_DOWN:
break;
case MSG_CTP_LONG:
break;
default:
func_message(msg);
break;
}
}
//进入音量控制功能
static void func_volume_enter(void)
{
func_cb.f_cb = func_zalloc(sizeof(f_volume_t));
func_cb.frm_main = func_volume_form_create();
}
//退出音量功能
static void func_volume_exit(void)
{
func_cb.last = FUNC_VOLUME;
}
//音量功能
void func_volume(void)
{
printf("%s\n", __func__);
func_volume_enter();
while (func_cb.sta == FUNC_VOLUME) {
func_volume_process();
func_volume_message(msg_dequeue());
}
func_volume_exit();
}