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

644 lines
27 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 "include.h"
#include "func.h"
#include "app_variable.h"
#include "m_remind.h"
#if TRACE_EN
#define TRACE(...) printf(__VA_ARGS__)
#else
#define TRACE(...)
#endif
//组件ID
enum {
//按键
COMPO_ID_BTN_CONTINUE = 1,
COMPO_ID_BTN_ACLOCK_HOUR,
COMPO_ID_BTN_ACLOCK_MIN,
COMPO_ID_BTN_YES_CLICK,
COMPO_ID_BTN_NO_CLICK,
//图像
COMPO_ID_PIC_SELECT_HOUR,
COMPO_ID_PIC_SELECT_MIN,
//数字
COMPO_ID_NUM_ACLOCK_SET_HOUR_UU,
COMPO_ID_NUM_ACLOCK_SET_HOUR_UP,
COMPO_ID_NUM_ACLOCK_SET_HOUR,
COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN,
COMPO_ID_NUM_ACLOCK_SET_HOUR_DD,
COMPO_ID_NUM_ACLOCK_SET_MIN_UU,
COMPO_ID_NUM_ACLOCK_SET_MIN_UP,
COMPO_ID_NUM_ACLOCK_SET_MIN,
COMPO_ID_NUM_ACLOCK_SET_MIN_DOWN,
COMPO_ID_NUM_ACLOCK_SET_MIN_DD,
};
typedef struct disturd_set_num_item_t_ {
u32 res_addr;
int num_cnt;
u16 num_id;
s16 load_id;
int val;
s16 x;
s16 y;
bool visible_en;
} disturd_set_num_item_t;
typedef struct f_disturd_sub_set_t_ {
disturd_set_num_item_t set_num_item[11];
area_t size;
u16 num_height;
s16 hcnt;
s16 mcnt;
u32 start_num;
u32 end_num;
s32 momentum_dy;
} f_disturd_sub_set_t;
#define DISTURD_SET_NUM_ITEM_CNT ((int)(sizeof(tbl_disturd_set_num_item) / sizeof(tbl_disturd_set_num_item[0])))
#define ALARM_NUM_PIC_OFFSET_X 57 //时间框的中心坐标
#define ALARM_NUM_PIC_CENTER_Y 126
#define ALARM_TXT_ITEM_H_X 64
#define ALARM_TXT_ITEM_M_X 178
#define ALARM_TXT_ITEM_Y 36
#define ALARM_TXT_ITEM_Y_OFFSET 45
#define TOUCH_HEIGHT ALARM_TXT_ITEM_Y_OFFSET * 3
#define ALARM_CLOCK_SET_NUM_POS_Y_START ALARM_TXT_ITEM_Y
#define ALARM_CLOCK_SET_NUM_POS_Y(y_start,space,cnt) (y_start)+(space)*(cnt)
#define SELECTOR_FRICTION 16 // 摩擦力,用于减少动量
#define SELECTOR_MOMENTUM_FACTOR 6 // 动量因子,用于控制滑动的敏感度和速度
//搞个数字item创建时遍历一下
static const disturd_set_num_item_t tbl_disturd_set_num_item[] = {
/* res_addr, num_cnt, num_id, load_num_id val, x, y, visible_en */
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_HOUR_UU, COMPO_ID_NUM_ACLOCK_SET_HOUR_UU, 22, ALARM_TXT_ITEM_H_X, ALARM_TXT_ITEM_Y, true},
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_HOUR_UP, COMPO_ID_NUM_ACLOCK_SET_HOUR_UP, 23, ALARM_TXT_ITEM_H_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET, true},
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_HOUR, COMPO_ID_NUM_ACLOCK_SET_HOUR, 0, ALARM_TXT_ITEM_H_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET*2, true},
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN, COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN, 1, ALARM_TXT_ITEM_H_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET*3, true},
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_HOUR_DD, COMPO_ID_NUM_ACLOCK_SET_HOUR_DD, 2, ALARM_TXT_ITEM_H_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET*4, true},
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_MIN_UU, COMPO_ID_NUM_ACLOCK_SET_MIN_UU, 58, ALARM_TXT_ITEM_M_X, ALARM_TXT_ITEM_Y, true},
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_MIN_UP, COMPO_ID_NUM_ACLOCK_SET_MIN_UP, 59, ALARM_TXT_ITEM_M_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET, true},
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_MIN, COMPO_ID_NUM_ACLOCK_SET_MIN, 0, ALARM_TXT_ITEM_M_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET*2, true},
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_MIN_DOWN, COMPO_ID_NUM_ACLOCK_SET_MIN_DOWN, 1, ALARM_TXT_ITEM_M_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET*3, true},
{UI_BUF_0FONT_FONT_NUM_24_BIN, 2, COMPO_ID_NUM_ACLOCK_SET_MIN_DD, COMPO_ID_NUM_ACLOCK_SET_MIN_DD, 2, ALARM_TXT_ITEM_M_X, ALARM_TXT_ITEM_Y+ALARM_TXT_ITEM_Y_OFFSET*4, true},
};
//获取 时分 上一个和下一个的数字
static u8 func_disturd_get_time_cal(s8 num, bool hour_en, u8 mode) //mode 0:返回当前hour/min1返回上一个hour/min2返回下一个hour/min
{
if (num < 0) {
if (hour_en) {
num += 24;
} else {
num += 60;
}
}
if (mode == 1) {
if (hour_en) {
if (num == 0 || num > 23) {
return 23;
}
} else {
if (num == 0 || num > 59) {
return 59;
}
}
return num - 1;
} else if (mode == 2){
if (hour_en) {
if (num >= 23) {
return 0;
}
} else {
if (num >= 59) {
return 0;
}
}
return num + 1;
} else {
if (hour_en) {
if (num > 23) {
return 23;
}
} else {
if (num > 59) {
return 59;
}
}
return num;
}
}
//创建定时勿扰设置窗体
compo_form_t *func_disturd_sub_set_form_create(void)
{
//新建窗体和背景
compo_form_t *frm = compo_form_create(true);
//设置标题栏
compo_form_set_mode(frm, COMPO_FORM_MODE_SHOW_TITLE | COMPO_FORM_MODE_SHOW_TIME);
if(SysVariable.disturd_sel) {
compo_form_set_title(frm, i18n[STR_DISTURD_TIM_END]);
} else {
compo_form_set_title(frm, i18n[STR_DISTURD_TIM_START]);
}
//图片,三个蓝色小框框
compo_picturebox_t *pic_cen = compo_picturebox_create(frm, UI_BUF_SETTING_SETTIME_SELECT_BIN);
compo_setid(pic_cen, COMPO_ID_PIC_SELECT_HOUR);
compo_picturebox_set_pos(pic_cen, GUI_SCREEN_CENTER_X - ALARM_NUM_PIC_OFFSET_X, ALARM_NUM_PIC_CENTER_Y);
compo_picturebox_t *pic_rig = compo_picturebox_create(frm, UI_BUF_SETTING_SETTIME_DEFAULT_BIN);
compo_setid(pic_rig, COMPO_ID_PIC_SELECT_MIN);
compo_picturebox_set_pos(pic_rig, GUI_SCREEN_CENTER_X + ALARM_NUM_PIC_OFFSET_X, ALARM_NUM_PIC_CENTER_Y);
//创建数字
compo_textbox_t *num;
char str_buff[4];
u8 hour, min;
if(SysVariable.disturd_sel) {
if (func_cb.last == FUNC_ALARM_CLOCK_SUB_EDIT) {
hour = SysVariable.disturd_end_time_sec / 3600;
min = (SysVariable.disturd_end_time_sec % 3600) / 60;
} else {
hour = SysVariable.disturd_end_time_sec / 3600;
min = (SysVariable.disturd_end_time_sec % 3600) / 60;
}
} else {
if (func_cb.last == FUNC_ALARM_CLOCK_SUB_EDIT) {
hour = SysVariable.disturd_start_time_sec / 3600;
min = (SysVariable.disturd_start_time_sec % 3600) / 60;
} else {
hour = SysVariable.disturd_start_time_sec / 3600;
min = (SysVariable.disturd_start_time_sec % 3600) / 60;
}
}
for (u8 idx = 0; idx < DISTURD_SET_NUM_ITEM_CNT; idx++) {
num = compo_textbox_create(frm, tbl_disturd_set_num_item[idx].num_cnt);
compo_textbox_set_font(num, tbl_disturd_set_num_item[idx].res_addr);
compo_setid(num, tbl_disturd_set_num_item[idx].num_id);
compo_textbox_set_pos(num, tbl_disturd_set_num_item[idx].x, tbl_disturd_set_num_item[idx].y);
compo_textbox_set_visible(num, tbl_disturd_set_num_item[idx].visible_en);
if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UU) { //上上次的时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(hour, 1, 1), 1, 1));
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UP) { //上次的时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(hour, 1, 1));
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR) { //当前时间
snprintf(str_buff, sizeof(str_buff), "%02d", hour);
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN) { //下次时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(hour, 1, 2));
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DD) { //下下次时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(hour, 1, 2), 1, 2));
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_UU) {
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(min, 0, 1), 0, 1));
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_UP) {
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(min, 0, 1));
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN) {
snprintf(str_buff, sizeof(str_buff), "%02d", min);
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_DOWN) {
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(min, 0, 2));
} else if (tbl_disturd_set_num_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_DD) {
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(min, 0, 2), 0, 2));
}
compo_textbox_set(num, str_buff);
}
// 上方渐变图层
s16 offset_y = 30;
compo_shape_t *shape_up = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
compo_shape_set_color(shape_up, COLOR_BLACK);
compo_shape_set_align_center(shape_up, false);
compo_shape_set_location(shape_up, 0, offset_y, GUI_SCREEN_WIDTH, 31);
offset_y += 31;
for (int i = 0; i < 20; i++)
{
shape_up = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
compo_shape_set_color(shape_up, COLOR_BLACK);
compo_shape_set_align_center(shape_up, false);
compo_shape_set_location(shape_up, 0, offset_y + (i * 2), GUI_SCREEN_WIDTH, 2);
compo_shape_set_alpha(shape_up, 255 - (i * 6));
}
// 下方渐变图层
offset_y = 153;
for (int i = 0; i < 20; i++)
{
compo_shape_t *shape_down = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
compo_shape_set_color(shape_down, COLOR_BLACK);
compo_shape_set_align_center(shape_down, false);
compo_shape_set_location(shape_down, 0, offset_y + 2, GUI_SCREEN_WIDTH, 2);
compo_shape_set_alpha(shape_down, 141 + (i * 6));
offset_y += 2;
}
compo_shape_t *shape_down = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
compo_shape_set_color(shape_down, COLOR_BLACK);
compo_shape_set_align_center(shape_down, false);
compo_shape_set_location(shape_down, 0, offset_y, GUI_SCREEN_WIDTH, 100);
/* 两个滑动区域 */
compo_button_t *btn = compo_button_create(frm);
compo_setid(btn, COMPO_ID_BTN_ACLOCK_HOUR);
compo_button_set_location(btn, GUI_SCREEN_CENTER_X - ALARM_NUM_PIC_OFFSET_X, GUI_SCREEN_CENTER_Y, 100, 200);
btn = compo_button_create(frm);
compo_setid(btn, COMPO_ID_BTN_ACLOCK_MIN);
compo_button_set_location(btn, GUI_SCREEN_CENTER_X + ALARM_NUM_PIC_OFFSET_X, GUI_SCREEN_CENTER_Y, 100, 200);
// 新建按钮
btn = compo_button_create_by_image(frm, UI_BUF_COMMON_NO_BIN);
compo_setid(btn, COMPO_ID_BTN_NO_CLICK);
compo_button_set_pos(btn, 59, 263);
btn = compo_button_create_by_image(frm, UI_BUF_ALARM_CLOCK_YES_BIN);
compo_setid(btn, COMPO_ID_BTN_YES_CLICK);
compo_button_set_pos(btn, 181, 263);
return frm;
}
static void disturd_set_num_pos_cal(s32 dy, u8 id, bool press)
{
f_disturd_sub_set_t *f_alarm_set = (f_disturd_sub_set_t*)func_cb.f_cb;
u16 num_height = f_alarm_set->num_height;
static s32 last_dy = 0;
s8 dir = 0;
s32 distance = 0;
disturd_set_num_item_t *time_item;
u8 ofs = 0;
if (id == COMPO_ID_BTN_ACLOCK_HOUR) {
ofs = 0;
time_item = &f_alarm_set->set_num_item[0];
} else if (id == COMPO_ID_BTN_ACLOCK_MIN) {
ofs = 5;
time_item = &f_alarm_set->set_num_item[5];
}
if (press) {
f_alarm_set->momentum_dy = (dy - last_dy) * SELECTOR_MOMENTUM_FACTOR; // 使用整数计算来增强动量效应
distance = dy - last_dy;
} else {
distance = f_alarm_set->momentum_dy;
if (f_alarm_set->momentum_dy > 0) {
f_alarm_set->momentum_dy -= SELECTOR_FRICTION; // 减少正向动量
if (f_alarm_set->momentum_dy < 0) {
f_alarm_set->momentum_dy = 0; // 防止动量变为负数
}
} else if (f_alarm_set->momentum_dy < 0) {
f_alarm_set->momentum_dy += SELECTOR_FRICTION; // 减少负向动量
if (f_alarm_set->momentum_dy > 0) {
f_alarm_set->momentum_dy = 0; // 防止动量变为正数
}
}
if (abs(f_alarm_set->momentum_dy) < SELECTOR_FRICTION) { // 动量小于摩擦力时,停止滚动
f_alarm_set->momentum_dy = 0;
dy = 0;
last_dy = 0;
distance = 0;
}
}
time_item[0].y += distance;
time_item[1].y += distance;
time_item[2].y += distance;
time_item[3].y += distance;
time_item[4].y += distance;
for (int i=0; i<5; i++) {
if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UP+ofs) {
if ((time_item[i].y - (ALARM_NUM_PIC_CENTER_Y - TOUCH_HEIGHT/2)) <= -num_height) {
dir = -1;
break;
} else if (press == false && ((time_item[i].y - (ALARM_NUM_PIC_CENTER_Y - TOUCH_HEIGHT/2)) <= -num_height/2)) {
dir = -1;
break;
}
} else if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN+ofs) {
if (time_item[i].y >= (ALARM_NUM_PIC_CENTER_Y + TOUCH_HEIGHT/2 + num_height)) {
dir = 1;
break;
} else if (press == false && (time_item[i].y >= (ALARM_NUM_PIC_CENTER_Y + TOUCH_HEIGHT/2 + num_height/2))) {
dir = 1;
break;
}
}
}
if (dir) {
for(int i=0; i<5; i++) {
time_item[i].load_id += dir;
if (time_item[i].load_id < COMPO_ID_NUM_ACLOCK_SET_HOUR_UU+ofs) {
time_item[i].load_id = COMPO_ID_NUM_ACLOCK_SET_HOUR_DD+ofs;
} else if (time_item[i].load_id > COMPO_ID_NUM_ACLOCK_SET_HOUR_DD+ofs) {
time_item[i].load_id = COMPO_ID_NUM_ACLOCK_SET_HOUR_UU+ofs;
}
}
if (id == COMPO_ID_BTN_ACLOCK_HOUR) {
f_alarm_set->hcnt += dir;
} else if (id == COMPO_ID_BTN_ACLOCK_MIN) {
f_alarm_set->mcnt += dir;
}
}
if (press == false || dir) {
for(int i=0; i<5; i++) {
if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UU+ofs) {
time_item[i].visible_en = true;
time_item[i].num_cnt = 2;
time_item[i].y = ALARM_CLOCK_SET_NUM_POS_Y(ALARM_CLOCK_SET_NUM_POS_Y_START,ALARM_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_ACLOCK_SET_HOUR_UU-COMPO_ID_NUM_ACLOCK_SET_HOUR_UU);
} else if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DD+ofs) {
time_item[i].visible_en = true;
time_item[i].num_cnt = 2;
time_item[i].y = ALARM_CLOCK_SET_NUM_POS_Y(ALARM_CLOCK_SET_NUM_POS_Y_START,ALARM_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_ACLOCK_SET_HOUR_DD-COMPO_ID_NUM_ACLOCK_SET_HOUR_UU);
} else if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UP+ofs) {
time_item[i].visible_en = true;
time_item[i].num_cnt = 2;
time_item[i].y = ALARM_CLOCK_SET_NUM_POS_Y(ALARM_CLOCK_SET_NUM_POS_Y_START,ALARM_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_ACLOCK_SET_HOUR_UP-COMPO_ID_NUM_ACLOCK_SET_HOUR_UU);
} else if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR+ofs) {
time_item[i].visible_en = true;
time_item[i].num_cnt = 2;
time_item[i].y = ALARM_CLOCK_SET_NUM_POS_Y(ALARM_CLOCK_SET_NUM_POS_Y_START,ALARM_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_ACLOCK_SET_HOUR-COMPO_ID_NUM_ACLOCK_SET_HOUR_UU);
} else if (time_item[i].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN+ofs) {
time_item[i].visible_en = true;
time_item[i].num_cnt = 2;
time_item[i].y = ALARM_CLOCK_SET_NUM_POS_Y(ALARM_CLOCK_SET_NUM_POS_Y_START,ALARM_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN-COMPO_ID_NUM_ACLOCK_SET_HOUR_UU);
}
}
}
for (int i=0; i<5; i++) {
compo_textbox_t *num = compo_getobj_byid(time_item[i].num_id);
compo_textbox_set_pos(num, time_item[i].x, time_item[i].y);
compo_textbox_set_visible(num, time_item[i].visible_en);
}
last_dy = dy;
}
static void func_disturd_set_move_handle(u8 id)
{
f_disturd_sub_set_t *f_alarm_set = (f_disturd_sub_set_t*)func_cb.f_cb;
disturd_set_num_item_t *time_item;
bool flag_press = 0;
u32 tick = tick_get();
s32 dx = 0, dy = 0; //坐标差量
char str_buff[4];
if (id == COMPO_ID_BTN_ACLOCK_HOUR) {
time_item = &f_alarm_set->set_num_item[0];
} else if (id == COMPO_ID_BTN_ACLOCK_MIN) {
time_item = &f_alarm_set->set_num_item[5];
}
u8 hour, min;
if(SysVariable.disturd_sel) {
if (func_cb.last == FUNC_ALARM_CLOCK_SUB_EDIT) {
hour = f_alarm_set->end_num / 3600;
min = (f_alarm_set->end_num % 3600) / 60;
} else {
hour = f_alarm_set->end_num / 3600;
min = (f_alarm_set->end_num % 3600) / 60;
}
} else {
if (func_cb.last == FUNC_ALARM_CLOCK_SUB_EDIT) {
hour = f_alarm_set->start_num / 3600;
min = (f_alarm_set->start_num % 3600) / 60;
} else {
hour = f_alarm_set->start_num / 3600;
min = (f_alarm_set->start_num % 3600) / 60;
}
}
s8 hour_disp = hour, min_disp = min;
for (;;) {
flag_press = ctp_get_dxy(&dx, &dy);
//printf("x:%d, y:%d\n",dx, dy);
disturd_set_num_pos_cal(dy, id, flag_press);
if (!flag_press && f_alarm_set->momentum_dy) {
while (!tick_check_expire(tick, 15))
;
}
hour_disp = (hour - f_alarm_set->hcnt) % 24;
min_disp = (min - f_alarm_set->mcnt) % 60;
/* 15ms刷新一下数字框 */
if (tick_check_expire(tick, 15)) {
tick = tick_get();
if (id == COMPO_ID_BTN_ACLOCK_HOUR) {
for (int idx = 0; idx < 5; idx++) {
compo_textbox_t *num = compo_getobj_byid(time_item[idx].num_id);
if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UU) { //上上次的时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(hour_disp, 1, 1), 1, 1));
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_UP) { //上次的时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(hour_disp, 1, 1));
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR) { //当前时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(hour_disp, 1, 0));
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DOWN) { //下次时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(hour_disp, 1, 2));
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_HOUR_DD) { //下下次时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(hour_disp, 1, 2), 1, 2));
}
compo_textbox_set(num, str_buff);
}
} else if (id == COMPO_ID_BTN_ACLOCK_MIN){
for (int idx = 0; idx < 5; idx++) {
compo_textbox_t *num = compo_getobj_byid(time_item[idx].num_id);
if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_UU) { //上上次的时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(min_disp, 0, 1), 0, 1));
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_UP) { //上次的时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(min_disp, 0, 1));
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN) { //当前时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(min_disp, 0, 0));
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_DOWN) { //下次时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(min_disp, 0, 2));
} else if (time_item[idx].load_id == COMPO_ID_NUM_ACLOCK_SET_MIN_DD) { //下下次时间
snprintf(str_buff, sizeof(str_buff), "%02d", func_disturd_get_time_cal(func_disturd_get_time_cal(min_disp, 0, 2), 0, 2));
}
compo_textbox_set(num, str_buff);
}
}
}
if (!flag_press && f_alarm_set->momentum_dy == 0) {
f_alarm_set->hcnt = 0;
f_alarm_set->mcnt = 0;
hour = func_disturd_get_time_cal(hour_disp, 1, 0);
min = func_disturd_get_time_cal(min_disp, 0, 0);
if (SysVariable.disturd_sel) {
// SysVariable.disturd_end_time_sec = hour * 3600 + min * 60;
f_alarm_set->end_num = hour * 3600 + min * 60;
} else {
// SysVariable.disturd_start_time_sec = hour * 3600 + min * 60;
f_alarm_set->start_num = hour * 3600 + min * 60;
}
// printf("total_sec:%d, hour:%d, min:%d\n",SysVariable.disturd_start_time_sec, hour, min);
break;
}
evt_message(msg_dequeue());
func_process();
}
}
//触摸按钮效果处理
static void func_disturd_sub_set_button_touch_handle(void)
{
int id = compo_get_button_id();
compo_picturebox_t *select_min_pic = compo_getobj_byid(COMPO_ID_PIC_SELECT_MIN);
compo_picturebox_t *select_hour_pic = compo_getobj_byid(COMPO_ID_PIC_SELECT_HOUR);
switch (id) {
case COMPO_ID_BTN_ACLOCK_HOUR:
case COMPO_ID_BTN_ACLOCK_MIN:
/* 更新选择状态 */
compo_picturebox_set(select_min_pic, id == COMPO_ID_BTN_ACLOCK_MIN ? UI_BUF_SETTING_SETTIME_SELECT_BIN : UI_BUF_SETTING_SETTIME_DEFAULT_BIN);
compo_picturebox_set(select_hour_pic, id == COMPO_ID_BTN_ACLOCK_HOUR ? UI_BUF_SETTING_SETTIME_SELECT_BIN : UI_BUF_SETTING_SETTIME_DEFAULT_BIN);
func_disturd_set_move_handle(id);
break;
default:
break;
}
}
//释放按钮效果处理
static void func_disturd_sub_set_button_release_handle(void)
{
return;
}
//单击按钮
static void func_disturd_sub_set_button_click(void)
{
int id = compo_get_button_id();
f_disturd_sub_set_t *f_alarm_set = (f_disturd_sub_set_t*) func_cb.f_cb;
switch (id) {
case COMPO_ID_BTN_YES_CLICK:
func_switch_to_assign_screen(FUNC_SET_SUB_DISTURD, false);
if (SysVariable.disturd_sel) {
SysVariable.disturd_end_time_sec = f_alarm_set->end_num;
} else {
SysVariable.disturd_start_time_sec = f_alarm_set->start_num;
}
task_stack_pop();
break;
case COMPO_ID_BTN_NO_CLICK:
func_switch_to_assign_screen(FUNC_SET_SUB_DISTURD, true);
break;
default:
break;
}
judge_disturd();
func_disturd_sub_set_button_release_handle();
}
//定时勿扰设置功能事件处理
static void func_disturd_sub_set_process(void)
{
func_process();
}
//定时勿扰设置功能消息处理
static void func_disturd_sub_set_message(size_msg_t msg)
{
switch (msg) {
case MSG_CTP_TOUCH:
func_disturd_sub_set_button_touch_handle();
break;
case MSG_CTP_CLICK:
func_disturd_sub_set_button_click();
break;
case MSG_CTP_SHORT_UP:
case MSG_CTP_SHORT_DOWN:
case MSG_CTP_SHORT_LEFT:
case MSG_CTP_LONG:
func_disturd_sub_set_button_release_handle();
break;
case MSG_CTP_SHORT_RIGHT:
break;
case MSG_QDEC_BACKWARD:
case MSG_QDEC_FORWARD:
break;
default:
func_message(msg);
break;
}
}
//进入定时勿扰设置功能
static void func_disturd_sub_set_enter(void)
{
func_cb.f_cb = func_zalloc(sizeof(f_disturd_sub_set_t));
f_disturd_sub_set_t *f_alarm_set = (f_disturd_sub_set_t *)func_cb.f_cb;
memcpy(f_alarm_set->set_num_item, tbl_disturd_set_num_item, sizeof(tbl_disturd_set_num_item));
func_cb.frm_main = func_disturd_sub_set_form_create();
/* 初始化时间数据 */
if (SysVariable.disturd_sel) {
f_alarm_set->end_num = SysVariable.disturd_end_time_sec;
} else {
f_alarm_set->start_num = SysVariable.disturd_start_time_sec;
}
// f_alarm_set->size = gui_image_get_size(UI_BUF_ALARM_CLOCK_NUM_BIN);
f_alarm_set->num_height = widget_text_get_height();
func_cb.enter_tick = tick_get();
}
//退出定时勿扰设置功能
static void func_disturd_sub_set_exit(void)
{
printf("%s\n",__func__);
func_cb.last = FUNC_DISTURD_SUB_SET;
compo_form_destroy(func_cb.frm_main);
func_free(func_cb.f_cb);
func_cb.frm_main = NULL;
func_cb.f_cb = NULL;
}
//定时勿扰设置功能
void func_disturd_sub_set(void)
{
printf("%s\n", __func__);
func_disturd_sub_set_enter();
while (func_cb.sta == FUNC_DISTURD_SUB_SET) {
func_disturd_sub_set_process();
func_disturd_sub_set_message(msg_dequeue());
}
func_disturd_sub_set_exit();
}