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

652 lines
27 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"
#include "spirit_island_api.h"
#if TRACE_EN
#define TRACE(...) printf(__VA_ARGS__)
#else
#define TRACE(...)
#endif
#if defined(TJD_REMOVE_COVER_SCREEN)
#define SHAPE_CENTER_Y_ONE (71 + 30 + 10) //第1个矩形框中心点所在y坐标
#define SHAPE_CENTER_Y_TWO (153 + 33 + 10) //第2个矩形框中心点所在y坐标
#define SHAPE_CENTER_Y_THR (227 + 33 + 10) //第3个矩形框中心点所在y坐标
// #define SHAPE_CENTER_Y_FOU (301 + 33 + 10) //第4个矩形框中心点所在y坐标
#define SHAPE_CENTER_Y_FIV (301 + 33 + 10) //第5个矩形框中心点所在y坐标
#define SHAPE_CENTER_Y_SIX (398 + 33 + 10) //第6个矩形框中心点所在y坐标
#define SHAPE_CENTER_Y_SEV (472 + 33 + 10) //第7个矩形框中心点所在y坐标449
// #define SHAPE_CENTER_Y_EIG (620 + 33) //第8个矩形框中心点所在y坐标
#else
#define SHAPE_CENTER_Y_ONE (71 + 30 + 10) //第1个矩形框中心点所在y坐标
#define SHAPE_CENTER_Y_TWO (153 + 33 + 10) //第2个矩形框中心点所在y坐标
#define SHAPE_CENTER_Y_THR (227 + 33 + 10) //第3个矩形框中心点所在y坐标
#define SHAPE_CENTER_Y_FOU (301 + 33 + 10) //第4个矩形框中心点所在y坐标
#define SHAPE_CENTER_Y_FIV (375 + 33 + 10) //第5个矩形框中心点所在y坐标
#define SHAPE_CENTER_Y_SIX (449 + 33 + 10) //第6个矩形框中心点所在y坐标
#define SHAPE_CENTER_Y_SEV (546 + 33 + 10) //第7个矩形框中心点所在y坐标
// #define SHAPE_CENTER_Y_EIG (620 + 33) //第8个矩形框中心点所在y坐标
#endif
#define BRIGHTNESS_X GUI_SCREEN_CENTER_X
#define BRIGHTNESS_Y SHAPE_CENTER_Y_ONE
#define BRIGHTNESS_WID 120 // 亮度条宽度
#define BRIGHTNESS_HEI 4
#define BRIGHTNESS_CLICK_WID 12 // 不可减宽度
#define BRIGHTNESS_CLICK_VAL ((BRIGHTNESS_WID ) / MAX_BRIGHTNESS_LEVEL) // 每级亮度所占的宽度——(亮度条宽度-不可减宽度)/最大亮度等级
//组件ID
enum {
//按键
COMPO_ID_BTN_REDUCE = 1,
COMPO_ID_BTN_INCREASE,
COMPO_ID_BTN_SLEEP_SCREEN,
COMPO_ID_BTN_BESIDELAMP,
COMPO_ID_BTN_COVER_SCREEN,
COMPO_ID_BTN_SPIRIT_ISLAND,
COMPO_ID_BTN_PINCH_ANSWER,
COMPO_ID_BTN_RAISE,
//图像
// COMPO_ID_PIC_LEVEL1, //亮度等级 1~5
// COMPO_ID_PIC_LEVEL2,
// COMPO_ID_PIC_LEVEL3,
// COMPO_ID_PIC_LEVEL4,
// COMPO_ID_PIC_LEVEL5,
COMPO_ID_BRIGHTNESS_FORGROUND,
COMPO_ID_PIC_NULL,
COMPO_ID_PIC_SWITCH_THD, //床头钟开关
COMPO_ID_PIC_SWITCH_CTS, //盖手熄屏开关
COMPO_ID_PIC_SWITCH_TIS, //灵动岛开关
COMPO_ID_PIC_SWITCH_TAP, //捏手接听开关
COMPO_ID_PIC_SWITCH_RTS, //抬手亮屏开关
// COMPO_ID_PIC_REDUCE_CLICK, //按钮触摸效果图
// COMPO_ID_PIC_INCREASE_CLICK,
};
typedef struct f_light_t_ {
page_tp_move_t *ptm;
int last_y_move;
u8 light_level;
point_t pt;
bool touch_flag;
s16 bar_value;
s16 bar_value_before;
} f_light_t;
typedef struct light_item_t_ {
s16 x;
s16 y;
s16 w;
s16 h;
u16 bind_id;
u8 alpha;
u32 res_addr; //图片
u32 str_idx; //文字
u16 color;
bool visible_en;
} light_item_t;
// #define LIGHT_SHAPE_ITEM_CNT ((int)(sizeof(tbl_light_shape_item) / sizeof(tbl_light_shape_item[0])))
#define GRET_SHAPE_ITEM_CNT ((int)(sizeof(tbl_gret_shape_item) / sizeof(tbl_gret_shape_item[0])))
#define TXT_ITEM_CNT ((int)(sizeof(tbl_txt_item) / sizeof(tbl_txt_item[0])))
#define PIC_ITEM_CNT ((int)(sizeof(tbl_pic_item) / sizeof(tbl_pic_item[0])))
#define BTN_ITEM_CNT ((int)(sizeof(tbl_light_btn_item) / sizeof(tbl_light_btn_item[0])))
// //五个绿色亮度 圆角矩形 item创建时遍历一下
// static const light_item_t tbl_light_shape_item[] = {
// {.x = 70, .y = SHAPE_CENTER_Y_ONE, .w = 22, .h = 6, .bind_id = COMPO_ID_PIC_LEVEL1, .alpha = 100},
// {.x = 95, .y = SHAPE_CENTER_Y_ONE, .w = 22, .h = 6, .bind_id = COMPO_ID_PIC_LEVEL2, .alpha = 100},
// {.x = 120, .y = SHAPE_CENTER_Y_ONE, .w = 22, .h = 6, .bind_id = COMPO_ID_PIC_LEVEL3, .alpha = 100},
// {.x = 145, .y = SHAPE_CENTER_Y_ONE, .w = 22, .h = 6, .bind_id = COMPO_ID_PIC_LEVEL4, .alpha = 100},
// {.x = 170, .y = SHAPE_CENTER_Y_ONE, .w = 22, .h = 6, .bind_id = COMPO_ID_PIC_LEVEL5, .alpha = 100},
// };
//灰色背景item创建时遍历一下
static const light_item_t tbl_gret_shape_item[] = {
{.x = GUI_SCREEN_CENTER_X, .y = SHAPE_CENTER_Y_ONE, .w = 236, .h = 60, },
{.x = GUI_SCREEN_CENTER_X, .y = SHAPE_CENTER_Y_TWO, .w = 236, .h = 66, },
{.x = GUI_SCREEN_CENTER_X, .y = SHAPE_CENTER_Y_THR, .w = 236, .h = 66, },
#ifndef TJD_REMOVE_COVER_SCREEN
{.x = GUI_SCREEN_CENTER_X, .y = SHAPE_CENTER_Y_FOU, .w = 236, .h = 66, },
#endif
{.x = GUI_SCREEN_CENTER_X, .y = SHAPE_CENTER_Y_FIV, .w = 236, .h = 66, },
{.x = GUI_SCREEN_CENTER_X, .y = SHAPE_CENTER_Y_SIX, .w = 236, .h = 66, },
{.x = GUI_SCREEN_CENTER_X, .y = SHAPE_CENTER_Y_SEV, .w = 236, .h = 66, },
// {.x = GUI_SCREEN_CENTER_X, .y = SHAPE_CENTER_Y_EIG, .w = 236, .h = 66, },//屏蔽一个后续放熄屏时钟
};
//文字 item创建时遍历一下
static const light_item_t tbl_txt_item[] = {
{.x = 15, .y = SHAPE_CENTER_Y_ONE - 53, .w = 200, .h = 30, .str_idx = STR_LIGHT , .color = COLOR_GRAY},
{.x = 12, .y = SHAPE_CENTER_Y_TWO - 22, .w = 150, .h = 30, .str_idx = STR_SETTING_DOUSING, .color = COLOR_WHITE},
{.x = 12, .y = SHAPE_CENTER_Y_THR - 10, .w = 150, .h = 30, .str_idx = STR_SPIRIT_ISLAND, .color = COLOR_WHITE},
#ifndef TJD_REMOVE_COVER_SCREEN
{.x = 12, .y = SHAPE_CENTER_Y_FOU - 10, .w = 150, .h = 30, .str_idx = STR_COVER_THE_HAND, .color = COLOR_WHITE},
#endif
{.x = 12, .y = SHAPE_CENTER_Y_FIV - 10, .w = 150, .h = 30, .str_idx = STR_PINCH_ANSWER, .color = COLOR_WHITE},
{.x = 12, .y = SHAPE_CENTER_Y_SIX - 10, .w = 150, .h = 30, .str_idx = STR_WAKE_SCREEN, .color = COLOR_WHITE},
{.x = 15, .y = SHAPE_CENTER_Y_SIX - 56, .w = 200, .h = 30, .str_idx = STR_WAKE_SCREEN, .color = COLOR_GRAY},
{.x = 12, .y = SHAPE_CENTER_Y_SEV - 10, .w = 150, .h = 30, .str_idx = STR_BEDSIED_CLOCK, .color = COLOR_WHITE},
// {.x = 12, .y = SHAPE_CENTER_Y_EIG - 10, .w = 150, .h = 30, .str_idx = , .color = COLOR_WHITE},//屏蔽一个后续放熄屏时钟
};
//图片 item
static const light_item_t tbl_pic_item[] = {
{.x = 27, .y = SHAPE_CENTER_Y_ONE, .bind_id = COMPO_ID_PIC_NULL, .res_addr = UI_BUF_SETTING_LIGHT_DOWN_BIN ,},
{.x = 213, .y = SHAPE_CENTER_Y_ONE, .bind_id = COMPO_ID_PIC_NULL, .res_addr = UI_BUF_SETTING_LIGHT_UP_BIN,},
{.x = 217, .y = SHAPE_CENTER_Y_TWO, .bind_id = COMPO_ID_PIC_NULL, .res_addr = UI_BUF_COMMON_RIGHT_BIN,},
{.x = 202, .y = SHAPE_CENTER_Y_THR, .bind_id = COMPO_ID_PIC_SWITCH_TIS, .res_addr = UI_BUF_COMMON_OFF_BIN,},
#ifndef TJD_REMOVE_COVER_SCREEN
{.x = 202, .y = SHAPE_CENTER_Y_FOU, .bind_id = COMPO_ID_PIC_SWITCH_CTS, .res_addr = UI_BUF_COMMON_OFF_BIN,},
#endif
{.x = 202, .y = SHAPE_CENTER_Y_FIV, .bind_id = COMPO_ID_PIC_SWITCH_TAP, .res_addr = UI_BUF_COMMON_OFF_BIN,},
{.x = 202, .y = SHAPE_CENTER_Y_SIX, .bind_id = COMPO_ID_PIC_SWITCH_RTS, .res_addr = UI_BUF_COMMON_OFF_BIN,},
{.x = 202, .y = SHAPE_CENTER_Y_SEV, .bind_id = COMPO_ID_PIC_SWITCH_THD, .res_addr = UI_BUF_COMMON_OFF_BIN,},
};
//触摸 item
//五个绿色亮度 圆角矩形 item创建时遍历一下
static const light_item_t tbl_light_btn_item[] = {
{.x = 27, .y = SHAPE_CENTER_Y_ONE, .w = 50, .h = 50, .bind_id = COMPO_ID_BTN_REDUCE, },
{.x = 213, .y = SHAPE_CENTER_Y_ONE, .w = 50, .h = 50, .bind_id = COMPO_ID_BTN_INCREASE, },
{.x = 120, .y = SHAPE_CENTER_Y_TWO, .w = 236, .h = 66, .bind_id = COMPO_ID_BTN_SLEEP_SCREEN, },
{.x = 202, .y = SHAPE_CENTER_Y_THR, .w = 60, .h = 36, .bind_id = COMPO_ID_BTN_SPIRIT_ISLAND, },
#ifndef TJD_REMOVE_COVER_SCREEN
{.x = 202, .y = SHAPE_CENTER_Y_FOU, .w = 60, .h = 36, .bind_id = COMPO_ID_BTN_COVER_SCREEN, },
#endif
{.x = 202, .y = SHAPE_CENTER_Y_FIV, .w = 60, .h = 36, .bind_id = COMPO_ID_BTN_PINCH_ANSWER, },
{.x = 202, .y = SHAPE_CENTER_Y_SIX, .w = 60, .h = 36, .bind_id = COMPO_ID_BTN_RAISE, },
{.x = 202, .y = SHAPE_CENTER_Y_SEV, .w = 60, .h = 36, .bind_id = COMPO_ID_BTN_BESIDELAMP, },
};
//创建亮度调节窗体,创建窗体中不要使用功能结构体 func_cb.f_cb
compo_form_t *func_light_form_create(void)
{
//新建窗体和背景
compo_form_t *frm = compo_form_create(true);
// compo_form_add_image(frm, UI_BUF_SETTING_LIGHT_LIGHT_BIN, GUI_SCREEN_CENTER_X, 105);
// compo_form_add_image(frm, UI_BUF_COMMON_BG1_BIN, GUI_SCREEN_CENTER_X, 200);
//设置标题栏
compo_form_set_mode(frm, COMPO_FORM_MODE_SHOW_TITLE | COMPO_FORM_MODE_SHOW_TIME);
compo_form_set_title(frm, i18n[STR_DISPLAY_AND_LIGHT]);
//创建 圆角矩形背景框
compo_shape_t *grey_shape[GRET_SHAPE_ITEM_CNT];
for(u8 idx =0; idx < GRET_SHAPE_ITEM_CNT; idx++){
grey_shape[idx] = compo_radius_shape_create(frm, COMPO_SHAPE_TYPE_ROUNDED_RECTANGLE,33);
compo_setid(grey_shape[idx], tbl_gret_shape_item[idx].bind_id);
compo_shape_set_color(grey_shape[idx], make_color(75, 75, 75));
compo_shape_set_location(grey_shape[idx], tbl_gret_shape_item[idx].x, tbl_gret_shape_item[idx].y, tbl_gret_shape_item[idx].w, tbl_gret_shape_item[idx].h);
}
//创建顶部 亮度圆角矩形框 左边的黑色线条
compo_shape_t *grey_btn_one_lef ;
grey_btn_one_lef = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
compo_shape_set_color(grey_btn_one_lef, COLOR_BLACK);
compo_shape_set_location(grey_btn_one_lef, 52, SHAPE_CENTER_Y_ONE, 1, 60);
//创建顶部 亮度圆角矩形框 右边的黑色线条
compo_shape_t *grey_btn_one_rig ;
grey_btn_one_rig = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
compo_shape_set_color(grey_btn_one_rig, COLOR_BLACK);
compo_shape_set_location(grey_btn_one_rig, 188, SHAPE_CENTER_Y_ONE, 1, 60);
//新建所有图片
compo_picturebox_t *pic[PIC_ITEM_CNT];
for(u8 idx = 0;idx <PIC_ITEM_CNT;idx ++){
pic[idx] = compo_picturebox_create(frm, tbl_pic_item[idx].res_addr);
compo_setid(pic[idx], tbl_pic_item[idx].bind_id);
compo_picturebox_set_pos(pic[idx], tbl_pic_item[idx].x, tbl_pic_item[idx].y);
}
//创建 所有点触区域
compo_button_t *btn[BTN_ITEM_CNT];
for(u8 idx = 0;idx <PIC_ITEM_CNT;idx ++){
btn[idx] = compo_button_create(frm);
compo_setid(btn[idx], tbl_light_btn_item[idx].bind_id);
compo_button_set_location(btn[idx], tbl_light_btn_item[idx].x,tbl_light_btn_item[idx].y,tbl_light_btn_item[idx].w,tbl_light_btn_item[idx].h);
}
// 亮度背景
compo_shape_t *light_bg = compo_radius_shape_create(frm, COMPO_SHAPE_TYPE_ROUNDED_RECTANGLE, BRIGHTNESS_HEI / 2 - 1); // 这里给宽度半径的一半锯齿太严重削了1
compo_shape_set_color(light_bg, make_color(38, 103, 65));
compo_shape_set_location(light_bg, GUI_SCREEN_CENTER_X, SHAPE_CENTER_Y_ONE, BRIGHTNESS_WID, BRIGHTNESS_HEI);
// 亮度进度条
int width = SysVariable.brightness_percent * (BRIGHTNESS_WID - BRIGHTNESS_HEI) / (100);
if (width > BRIGHTNESS_WID - BRIGHTNESS_CLICK_WID)
width = BRIGHTNESS_WID - BRIGHTNESS_CLICK_WID;
compo_shape_t *light_cur = compo_radius_shape_create(frm, COMPO_SHAPE_TYPE_ROUNDED_RECTANGLE, BRIGHTNESS_HEI / 2 - 1);
compo_setid(light_cur, COMPO_ID_BRIGHTNESS_FORGROUND);
compo_shape_set_align_center(light_cur, false); // 不居中了,居中后进度条长度不好算
compo_shape_set_color(light_cur, make_color(12, 227, 103));
compo_shape_set_location(light_cur, (GUI_SCREEN_WIDTH - BRIGHTNESS_WID) / 2, SHAPE_CENTER_Y_ONE - 2, BRIGHTNESS_CLICK_WID + width, BRIGHTNESS_HEI);
// //亮度中间五个绿色圆角矩形
// compo_shape_t *shape_level[LIGHT_SHAPE_ITEM_CNT];
// for(u8 idx =0; idx < LIGHT_SHAPE_ITEM_CNT; idx++){
// shape_level[idx] = compo_radius_shape_create(frm, COMPO_SHAPE_TYPE_ROUNDED_RECTANGLE,1);
// compo_setid(shape_level[idx], tbl_light_shape_item[idx].bind_id);
// compo_shape_set_color(shape_level[idx], make_color(12, 227, 103));
// compo_shape_set_location(shape_level[idx], tbl_light_shape_item[idx].x, tbl_light_shape_item[idx].y, tbl_light_shape_item[idx].w, tbl_light_shape_item[idx].h);
// compo_shape_set_alpha(shape_level[idx], tbl_light_shape_item[idx].alpha);
// }
printf("%s-->light_level:%d\n",__func__, SysVariable.light_level);
// for (u8 i=0; i<SysVariable.light_level; i++) {
// // compo_picturebox_set_visible(pic_level[i],true);
// compo_shape_set_alpha(shape_level[i], 255);
// }
//创建除了 自动熄屏 时长之外所有的 文字
compo_textbox_t *txt[TXT_ITEM_CNT];
for(u8 idx =0; idx < TXT_ITEM_CNT; idx++){
txt[idx] = compo_textbox_create(frm, 50);
compo_textbox_set_font(txt[idx], UI_BUF_0FONT_FONT_BIN);
compo_textbox_set_align_center(txt[idx],FALSE);
compo_textbox_set_forecolor(txt[idx], tbl_txt_item[idx].color);
compo_textbox_set_location(txt[idx], tbl_txt_item[idx].x, tbl_txt_item[idx].y, tbl_txt_item[idx].w, tbl_txt_item[idx].h);
compo_textbox_set_autoroll_mode(txt[idx], TEXT_AUTOROLL_MODE_SROLL_CIRC);
compo_textbox_set(txt[idx], i18n[tbl_txt_item[idx].str_idx]);
}
//创建 熄屏时长秒数文字
compo_textbox_t *txt_s = compo_textbox_create(frm, 60);
compo_textbox_set_font(txt_s, UI_BUF_0FONT_FONT_BIN);
compo_textbox_set_align_center(txt_s,FALSE);
compo_textbox_set_location(txt_s, 12, SHAPE_CENTER_Y_TWO, 150, 30);
compo_textbox_set_autoroll_mode(txt_s, TEXT_AUTOROLL_MODE_SROLL_CIRC);
if(SysVariable.sleep_time == (-1)){
compo_textbox_set(txt_s, i18n[STR_NEVER]);
}
else{
char buf[20];
memset(buf, 0, sizeof(buf));
snprintf(buf, sizeof(buf), "%d s", (int)(SysVariable.sleep_time/10));
compo_textbox_set(txt_s, buf);
}
return frm;
}
//按钮状态更新
static void func_light_btn_pic_update(void)
{
compo_picturebox_t *thd_pic = compo_getobj_byid(COMPO_ID_PIC_SWITCH_THD);
compo_picturebox_t *cts_pic = compo_getobj_byid(COMPO_ID_PIC_SWITCH_CTS);
compo_picturebox_t *tis_pic = compo_getobj_byid(COMPO_ID_PIC_SWITCH_TIS);
compo_picturebox_t *tap_pic = compo_getobj_byid(COMPO_ID_PIC_SWITCH_TAP);
compo_picturebox_t *rts_pic = compo_getobj_byid(COMPO_ID_PIC_SWITCH_RTS);
//床头钟
if(SysVariable.charingWatchSwitch) {
compo_picturebox_set(thd_pic, UI_BUF_COMMON_ON_BIN);
} else {
compo_picturebox_set(thd_pic, UI_BUF_COMMON_OFF_BIN);
}
#ifndef TJD_REMOVE_COVER_SCREEN
//盖手熄屏
if(SysVariable.capping_hand_offscreen_flag) {
compo_picturebox_set(cts_pic, UI_BUF_COMMON_ON_BIN);
} else {
compo_picturebox_set(cts_pic, UI_BUF_COMMON_OFF_BIN);
}
#endif
//灵动岛
if(SysVariable.SpiritIslandSwitch) {
compo_picturebox_set(tis_pic, UI_BUF_COMMON_ON_BIN);
} else {
compo_picturebox_set(tis_pic, UI_BUF_COMMON_OFF_BIN);
}
// 捏手接听
if(SysVariable.handle_knob_flag) {
compo_picturebox_set(tap_pic, UI_BUF_COMMON_ON_BIN);
} else {
compo_picturebox_set(tap_pic, UI_BUF_COMMON_OFF_BIN);
}
//抬手亮屏
if(SysVariable.funtionSwitch & FUNTION_RAISE_HAND_DISPLAY) {
compo_picturebox_set(rts_pic, UI_BUF_COMMON_ON_BIN);
} else {
compo_picturebox_set(rts_pic, UI_BUF_COMMON_OFF_BIN);
}
}
//释放按钮效果处理
static void func_light_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_light_button_click(void)
{
int id = compo_get_button_id();
f_light_t *f_light = (f_light_t *)func_cb.f_cb;
compo_shape_t *light_cur = compo_getobj_byid(COMPO_ID_BRIGHTNESS_FORGROUND);
// compo_shape_t *shape_level[5];
// shape_level[0] = compo_getobj_byid(COMPO_ID_PIC_LEVEL1);
// shape_level[1] = compo_getobj_byid(COMPO_ID_PIC_LEVEL2);
// shape_level[2] = compo_getobj_byid(COMPO_ID_PIC_LEVEL3);
// shape_level[3] = compo_getobj_byid(COMPO_ID_PIC_LEVEL4);
// shape_level[4] = compo_getobj_byid(COMPO_ID_PIC_LEVEL5);
switch (id)
{
// 减少亮度
case COMPO_ID_BTN_REDUCE:
if (SysVariable.light_level >= 1 && SysVariable.light_level <= MAX_BRIGHTNESS_LEVEL)
{
// SysVariable.light_level--;
f_light->bar_value -= BRIGHTNESS_CLICK_VAL;
if (f_light->bar_value < 0)
{
f_light->bar_value = 0;
}
}
break;
// 增加亮度
case COMPO_ID_BTN_INCREASE:
if (SysVariable.light_level >= 0 && SysVariable.light_level < MAX_BRIGHTNESS_LEVEL)
{
// SysVariable.light_level++;
f_light->bar_value += BRIGHTNESS_CLICK_VAL;
if (f_light->bar_value > (BRIGHTNESS_WID - BRIGHTNESS_CLICK_WID))
{
f_light->bar_value = (BRIGHTNESS_WID - BRIGHTNESS_CLICK_WID);
}
}
break;
// 熄屏时长
case COMPO_ID_BTN_SLEEP_SCREEN:
// 切入应用
{
u8 func_sta = FUNC_SET_SUB_DOUSING;
compo_form_t *frm = func_create_form(func_sta);
func_switching(FUNC_SWITCH_ZOOM_FADE_ENTER | FUNC_SWITCH_AUTO, NULL);
compo_form_destroy(frm);
func_switch_to_assign_screen(func_sta, false);
}
break;
// 床头钟
case COMPO_ID_BTN_BESIDELAMP:
SysVariable.charingWatchSwitch = !SysVariable.charingWatchSwitch;
break;
#ifndef TJD_REMOVE_COVER_SCREEN
// 盖手熄屏
case COMPO_ID_BTN_COVER_SCREEN:
SysVariable.capping_hand_offscreen_flag = !SysVariable.capping_hand_offscreen_flag;
break;
#endif
// 灵动岛
case COMPO_ID_BTN_SPIRIT_ISLAND:
SysVariable.SpiritIslandSwitch = !SysVariable.SpiritIslandSwitch;
if (SysVariable.SpiritIslandSwitch == true)
{
if (bt_cb.music_playing == true)
{
si_activated_task(music, 0);
}
}
break;
// 捏手接听
case COMPO_ID_BTN_PINCH_ANSWER:
SysVariable.handle_knob_flag = !SysVariable.handle_knob_flag;
break;
// 抬手亮屏
case COMPO_ID_BTN_RAISE:
if (SysVariable.funtionSwitch & FUNTION_RAISE_HAND_DISPLAY)
{
SysVariable.funtionSwitch &= ~(FUNTION_RAISE_HAND_DISPLAY);
}
else
{
SysVariable.funtionSwitch |= FUNTION_RAISE_HAND_DISPLAY;
}
ble_function_protocol_packetsend();
break;
default:
break;
}
// for (u8 i=0; i<5; i++) {
// if (i < SysVariable.light_level) {
// // compo_picturebox_set_visible(pic_level[i],true);
// compo_shape_set_alpha(shape_level[i], 255);
// } else {
// // compo_picturebox_set_visible(pic_level[i],false);
// compo_shape_set_alpha(shape_level[i], 100);
// }
// }
SysVariable.light_level = (f_light->bar_value) / BRIGHTNESS_CLICK_VAL+1;
// 满进度条情况下应该会超出最大亮度等级,重置一下
if (SysVariable.light_level > MAX_BRIGHTNESS_LEVEL)
SysVariable.light_level = MAX_BRIGHTNESS_LEVEL;
tft_bglight_set_level(SysVariable.light_level, false);
if (light_cur)
compo_shape_set_location(light_cur, (GUI_SCREEN_WIDTH - BRIGHTNESS_WID) / 2, SHAPE_CENTER_Y_ONE - 2,
SysVariable.light_level * (BRIGHTNESS_WID) / (MAX_BRIGHTNESS_LEVEL), BRIGHTNESS_HEI);
func_light_btn_pic_update();
func_light_button_release_handle();
}
//处理设置亮度进度条
void compo_general_brightness_ctr(f_light_t *f_clk)
{
compo_shape_t *light_cur = compo_getobj_byid(COMPO_ID_BRIGHTNESS_FORGROUND);
s32 dx = 0;
s32 dy = 0;
if (f_clk->touch_flag)
{
f_clk->touch_flag = ctp_get_dxy(&dx, &dy);
printf("dx = %d \n", dx);
if (f_clk->touch_flag)
{
// 亮度可供滑动范围
if (f_clk->bar_value + dx >= 0 && f_clk->bar_value + dx <= (BRIGHTNESS_WID - BRIGHTNESS_CLICK_WID))
{
printf("f_clk->bar_value = %d!!\n", f_clk->bar_value);
if (f_clk->bar_value < 0)
f_clk->bar_value = 0;
if (f_clk->bar_value > (BRIGHTNESS_WID - BRIGHTNESS_CLICK_WID))
f_clk->bar_value = BRIGHTNESS_WID - BRIGHTNESS_CLICK_WID;
compo_shape_set_location(light_cur, (GUI_SCREEN_WIDTH - BRIGHTNESS_WID) / 2, BRIGHTNESS_Y - BRIGHTNESS_HEI / 2, BRIGHTNESS_CLICK_WID + f_clk->bar_value + dx, BRIGHTNESS_HEI);
f_clk->bar_value_before = dx;
// 根据当前进度条所在位置范围内,设置亮度等级,最左边的圆直径不动,后续剩余可变动范围为 BRIGHTNESS_WID - BRIGHTNESS_HEI,每级的范围是BRIGHTNESS_CLICK_VAL
// 系统当前亮度等级 = 进度条宽度 / 每级范围 + 1即最低为1级最高为MAX_BRIGHTNESS_LEVEL
SysVariable.light_level = (f_clk->bar_value + dx) / BRIGHTNESS_CLICK_VAL + 1;
// 满进度条情况下应该会超出最大亮度等级,重置一下
if (SysVariable.light_level > MAX_BRIGHTNESS_LEVEL)
SysVariable.light_level = MAX_BRIGHTNESS_LEVEL;
printf("SysVariable.light_level = %d!!\n", SysVariable.light_level);
tft_bglight_set_level(SysVariable.light_level, false);
}
}
else
{
f_clk->bar_value += f_clk->bar_value_before;
if (f_clk->bar_value < 0)
f_clk->bar_value = 0;
if (f_clk->bar_value > (BRIGHTNESS_WID - BRIGHTNESS_CLICK_WID))
f_clk->bar_value = BRIGHTNESS_WID - BRIGHTNESS_CLICK_WID;
compo_shape_set_location(light_cur, (GUI_SCREEN_WIDTH - BRIGHTNESS_WID) / 2, BRIGHTNESS_Y - BRIGHTNESS_HEI / 2, BRIGHTNESS_CLICK_WID + f_clk->bar_value, BRIGHTNESS_HEI);
}
}
}
//亮度调节功能事件处理
static void func_light_process(void)
{
f_light_t *f_light = (f_light_t *)func_cb.f_cb;
func_light_btn_pic_update();
compo_general_brightness_ctr(f_light);
compo_page_move_process(f_light->ptm);
func_process();
}
//亮度调节功能消息处理
static void func_light_message(size_msg_t msg)
{
f_light_t *f_light = (f_light_t *)func_cb.f_cb;
f_light->pt = ctp_get_sxy();
switch (msg) {
case MSG_CTP_TOUCH:
// /*如果tp点触范围在第一行的亮度范围内*/
// if (abs_s(f_light->pt.x - (BRIGHTNESS_WID/2)) * 2 <= BRIGHTNESS_WID && abs_s(f_light->pt.y - 30) * 2 <= SHAPE_CENTER_Y_ONE) {
// f_light->touch_flag = true;
// }
// else{
compo_page_move_touch_handler(f_light->ptm);
// }
break;
case MSG_CTP_CLICK:
func_light_button_click();
uint8_t level_tmp = SysVariable.light_level;
if(level_tmp < 1)
{
level_tmp = 1;
}
else if(level_tmp > MAX_BRIGHTNESS_LEVEL)
{
level_tmp = MAX_BRIGHTNESS_LEVEL;
}
tft_bglight_set_level(level_tmp,false);
break;
case MSG_CTP_SHORT_UP:
case MSG_CTP_SHORT_DOWN:
case MSG_CTP_LONG:
func_light_button_release_handle();
break;
case MSG_CTP_SHORT_LEFT:
/*这里如果还是亮度条的高度太难触发了,改成第一个灰色矩形框的宽度*/
if (abs_s(f_light->pt.x - BRIGHTNESS_X) * 2 <= BRIGHTNESS_WID && abs_s(f_light->pt.y - BRIGHTNESS_Y) * 2 <= 60) {
f_light->touch_flag = true;
}
else{
func_light_button_release_handle();
}
break;
case MSG_CTP_SHORT_RIGHT:
if (abs_s(f_light->pt.x - BRIGHTNESS_X) * 2 <= BRIGHTNESS_WID && abs_s(f_light->pt.y - BRIGHTNESS_Y) * 2 <= 60) {
f_light->touch_flag = true;
} else{
func_light_button_release_handle();
func_message(msg);
}
break;
case MSG_QDEC_BACKWARD:
if (func_cb.flag_sort) { //快捷应用状态下不滚动页面
func_message(msg);
} else {
compo_page_move_set_by_pages(f_light->ptm, -1);
}
break;
case MSG_QDEC_FORWARD:
if (func_cb.flag_sort) {
func_message(msg);
} else {
compo_page_move_set_by_pages(f_light->ptm, 1);
}
break;
default:
func_message(msg);
break;
}
}
//进入亮度调节功能
static void func_light_enter(void)
{
func_cb.f_cb = func_zalloc(sizeof(f_light_t));
if(SysVariable.sleep_time != 50&&SysVariable.sleep_time != 100&&SysVariable.sleep_time != 150&&SysVariable.sleep_time != 300&&SysVariable.sleep_time != 600&&SysVariable.sleep_time != 3000)
{
SysVariable.sleep_time =50;
}
func_cb.frm_main = func_light_form_create();
func_light_btn_pic_update();
f_light_t *f_light = (f_light_t *)func_cb.f_cb;
f_light->bar_value = SysVariable.brightness_percent*(BRIGHTNESS_WID - BRIGHTNESS_CLICK_WID)/100;
f_light->ptm = (page_tp_move_t *)func_zalloc(sizeof(page_tp_move_t));
page_move_info_t info = {
.title_used = FALSE,
.page_size = 620, //除标题外页面总长度
.page_count = 1,
.up_over_perc = 10,
.down_over_perc = 10,
};
compo_page_move_init(f_light->ptm, func_cb.frm_main->page_body, &info);
}
//退出亮度调节功能
static void func_light_exit(void)
{
f_light_t *f_light = (f_light_t *)func_cb.f_cb;
SysVariable.brightness_percent = (f_light->bar_value) * 100 / (BRIGHTNESS_WID - BRIGHTNESS_CLICK_WID);
func_cb.last = FUNC_LIGHT;
if (f_light->ptm) {
func_free(f_light->ptm);
}
SysVariable.duty_flag = true;
}
//亮度调节功能
void func_light(void)
{
printf("%s\n", __func__);
func_light_enter();
while (func_cb.sta == FUNC_LIGHT) {
func_light_process();
func_light_message(msg_dequeue());
}
func_light_exit();
}