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

617 lines
25 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"
#if TRACE_EN
#define TRACE(...) printf(__VA_ARGS__)
#else
#define TRACE(...)
#endif
#define TOUCH_HEIGHT (GUI_SCREEN_WIDTH-GUI_SCREEN_WIDTH/3)
//组件ID
enum {
//按键
COMPO_ID_BTN_YES = 1,
COMPO_ID_BTN_NO,
COMPO_ID_BTN_SETTIME_HOUR,
COMPO_ID_BTN_SETTIME_MIN,
//图像
COMPO_ID_PIC_CONTINUE_CLICK,
COMPO_ID_PIC_SELECT_HOUR,
COMPO_ID_PIC_SELECT_MIN,
//数字
COMPO_ID_NUM_TIME_SET_HOUR_UU,
COMPO_ID_NUM_TIME_SET_HOUR_UP,
COMPO_ID_NUM_TIME_SET_HOUR,
COMPO_ID_NUM_TIME_SET_HOUR_DOWN,
COMPO_ID_NUM_TIME_SET_HOUR_DD,
COMPO_ID_NUM_TIME_SET_MIN_UU,
COMPO_ID_NUM_TIME_SET_MIN_UP,
COMPO_ID_NUM_TIME_SET_MIN,
COMPO_ID_NUM_TIME_SET_MIN_DOWN,
COMPO_ID_NUM_TIME_SET_MIN_DD,
};
typedef struct settime_set_num_item_t_ {
int num_cnt;
u16 num_id;
s16 load_id;
int val;
s16 x;
s16 y;
bool visible_en;
} settime_set_num_item_t;
typedef struct f_set_time_t_ {
settime_set_num_item_t set_num_item[11];
area_t size;
u16 num_height;
s16 hcnt;
s16 mcnt;
s8 hour;
s8 min;
s32 momentum_dy;
} f_set_time_t;
#define SETTIME_SET_NUM_ITEM_CNT ((int)(sizeof(tbl_settime_set_num_item) / sizeof(tbl_settime_set_num_item[0])))
#define SETTIME_NUM_PIC_OFFSET_X 32 //各个蓝色框之间的x轴偏移量
#define SETTIME_NUM_PIC_CENTER_Y 66 //图片中间蓝色框框中心y坐标
#define SETTIME_TXT_ITEM_T_X (GUI_SCREEN_CENTER_X-SETTIME_NUM_PIC_OFFSET_X) //左边时间 x中心坐标
#define SETTIME_TXT_ITEM_H_X GUI_SCREEN_CENTER_X //中间时间 x中心坐标
#define SETTIME_TXT_ITEM_M_X (GUI_SCREEN_CENTER_X+SETTIME_NUM_PIC_OFFSET_X) //右边时间 x中心坐标
#define SETTIME_TXT_ITEM_Y 16 //中间时间 y中心坐标
#define SETTIME_TXT_ITEM_Y_OFFSET 24 //上下每个 时间的y轴偏移量
#define TOUCH_HEIGHT SETTIME_TXT_ITEM_Y_OFFSET * 3
#define SETTIME_SET_NUM_POS_Y_START SETTIME_TXT_ITEM_Y
#define SETTIME_SET_NUM_POS_Y(y_start,space,cnt) (y_start)+(space)*(cnt)
#define SELECTOR_FRICTION 16 // 摩擦力,用于减少动量
#define SELECTOR_MOMENTUM_FACTOR 6 // 动量因子,用于控制滑动的敏感度和速度
//搞个数字item创建时遍历一下
static const settime_set_num_item_t tbl_settime_set_num_item[] = {
/* num_cnt, num_id, load_num_id val, x, y, visible_en */
{2, COMPO_ID_NUM_TIME_SET_HOUR_UU, COMPO_ID_NUM_TIME_SET_HOUR_UU, 22, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y, true},
{2, COMPO_ID_NUM_TIME_SET_HOUR_UP, COMPO_ID_NUM_TIME_SET_HOUR_UP, 23, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET, true},
{2, COMPO_ID_NUM_TIME_SET_HOUR, COMPO_ID_NUM_TIME_SET_HOUR, 0, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*2, true},
{2, COMPO_ID_NUM_TIME_SET_HOUR_DOWN, COMPO_ID_NUM_TIME_SET_HOUR_DOWN, 1, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*3, true},
{2, COMPO_ID_NUM_TIME_SET_HOUR_DD, COMPO_ID_NUM_TIME_SET_HOUR_DD, 2, SETTIME_TXT_ITEM_T_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*4, true},
{2, COMPO_ID_NUM_TIME_SET_MIN_UU, COMPO_ID_NUM_TIME_SET_MIN_UU, 58, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y, true},
{2, COMPO_ID_NUM_TIME_SET_MIN_UP, COMPO_ID_NUM_TIME_SET_MIN_UP, 59, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET, true},
{2, COMPO_ID_NUM_TIME_SET_MIN, COMPO_ID_NUM_TIME_SET_MIN, 0, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*2, true},
{2, COMPO_ID_NUM_TIME_SET_MIN_DOWN, COMPO_ID_NUM_TIME_SET_MIN_DOWN, 1, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*3, true},
{2, COMPO_ID_NUM_TIME_SET_MIN_DD, COMPO_ID_NUM_TIME_SET_MIN_DD, 2, SETTIME_TXT_ITEM_M_X, SETTIME_TXT_ITEM_Y+SETTIME_TXT_ITEM_Y_OFFSET*4, true},
};
//获取 时分 上一个和下一个的数字
static u8 func_alarm_clock_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;
}
}
//创建时间设置窗体,创建窗体中不要使用功能结构体 func_cb.f_cb
compo_form_t *func_set_time_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);
compo_form_set_title(frm, i18n[STR_SETTING_TIME]);
// 图片,蓝色小框框
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, SETTIME_TXT_ITEM_T_X, SETTIME_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, SETTIME_TXT_ITEM_M_X, SETTIME_NUM_PIC_CENTER_Y);
//创建数字
compo_textbox_t *txt_num;
u8 hour, min;
hour = SysVariable.Rtc.hour;
min = SysVariable.Rtc.min;
char buf[4];
for (u8 idx = 0; idx < SETTIME_SET_NUM_ITEM_CNT; idx++) {
txt_num = compo_textbox_create(frm, tbl_settime_set_num_item[idx].num_cnt);
compo_textbox_set_font(txt_num, UI_BUF_0FONT_FONT_DIN_LIGHT_NUM_15_BIN);
compo_setid(txt_num, tbl_settime_set_num_item[idx].num_id);
compo_textbox_set_align_center(txt_num, true);
compo_textbox_set_pos(txt_num, tbl_settime_set_num_item[idx].x, tbl_settime_set_num_item[idx].y);
compo_textbox_set_visible(txt_num, tbl_settime_set_num_item[idx].visible_en);
memset(buf, 0, sizeof(buf));
if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UU) { //上上次的时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(hour, 1, 1), 1, 1));
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UP) { //上次的时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(hour, 1, 1));
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR) { //当前时间
snprintf(buf, sizeof(buf), "%02d", hour);
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DOWN) { //下次时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(hour, 1, 2));
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DD) { //下下次时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(hour, 1, 2), 1, 2));
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_UU) {
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(min, 0, 1), 0, 1));
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_UP) {
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(min, 0, 1));
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN) {
snprintf(buf, sizeof(buf), "%02d", min);
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_DOWN) {
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(min, 0, 2));
} else if (tbl_settime_set_num_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_DD) {
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(min, 0, 2), 0, 2));
}
compo_textbox_set(txt_num, buf);
}
// 上方渐变图层
s16 offset_y = 5;
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, 10);
offset_y += 5;
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 = 80;
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, 53);
//创建按钮
compo_button_t *btn;
btn = compo_button_create_by_image(frm, UI_BUF_COMMON_NO_BIN);
compo_setid(btn, COMPO_ID_BTN_NO);
compo_button_set_pos(btn, 1+31, 122+18);
btn = compo_button_create_by_image(frm, UI_BUF_ALARM_CLOCK_YES_BIN);
compo_setid(btn, COMPO_ID_BTN_YES);
compo_button_set_pos(btn, 65+31, 122+18);
/* 两个滑动区域 */
btn = compo_button_create(frm);
compo_setid(btn, COMPO_ID_BTN_SETTIME_HOUR);
compo_button_set_location(btn, GUI_SCREEN_CENTER_X - SETTIME_NUM_PIC_OFFSET_X, GUI_SCREEN_CENTER_Y, 40, TOUCH_HEIGHT);
btn = compo_button_create(frm);
compo_setid(btn, COMPO_ID_BTN_SETTIME_MIN);
compo_button_set_location(btn, GUI_SCREEN_CENTER_X + SETTIME_NUM_PIC_OFFSET_X, GUI_SCREEN_CENTER_Y, 40, TOUCH_HEIGHT);
return frm;
}
static void alarm_clock_set_num_pos_cal(s32 dy, u8 id, bool press)
{
f_set_time_t *f_set_time = (f_set_time_t*)func_cb.f_cb;
u16 num_height = f_set_time->num_height;
static s32 last_dy = 0;
s8 dir = 0;
s32 distance = 0;
settime_set_num_item_t *time_item;
u8 ofs = 0;
if (id == COMPO_ID_BTN_SETTIME_HOUR) {
ofs = 0;
time_item = &f_set_time->set_num_item[0];
} else if (id == COMPO_ID_BTN_SETTIME_MIN) {
ofs = 5;
time_item = &f_set_time->set_num_item[5];
}
if (press) {
f_set_time->momentum_dy = (dy - last_dy) * SELECTOR_MOMENTUM_FACTOR; // 使用整数计算来增强动量效应
distance = dy - last_dy;
} else {
distance = f_set_time->momentum_dy;
if (f_set_time->momentum_dy > 0) {
f_set_time->momentum_dy -= SELECTOR_FRICTION; // 减少正向动量
if (f_set_time->momentum_dy < 0) {
f_set_time->momentum_dy = 0; // 防止动量变为负数
}
} else if (f_set_time->momentum_dy < 0) {
f_set_time->momentum_dy += SELECTOR_FRICTION; // 减少负向动量
if (f_set_time->momentum_dy > 0) {
f_set_time->momentum_dy = 0; // 防止动量变为正数
}
}
if (abs(f_set_time->momentum_dy) < SELECTOR_FRICTION) { // 动量小于摩擦力时,停止滚动
f_set_time->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;
if (distance || !press) {
printf("[%d]-->", time_item[2].y);
}
for (int i=0; i<5; i++) {
if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UP+ofs) {
if ((time_item[i].y - (SETTIME_NUM_PIC_CENTER_Y - TOUCH_HEIGHT/2)) <= -num_height) {
dir = -1;
break;
} else if (press == false && ((time_item[i].y - (SETTIME_NUM_PIC_CENTER_Y - TOUCH_HEIGHT/2)) <= -num_height/2)) {
dir = -1;
break;
}
} else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DOWN+ofs) {
if (time_item[i].y >= (SETTIME_NUM_PIC_CENTER_Y + TOUCH_HEIGHT/2 + num_height)) {
dir = 1;
break;
} else if (press == false && (time_item[i].y >= (SETTIME_NUM_PIC_CENTER_Y + TOUCH_HEIGHT/2 + num_height/2))) {
dir = 1;
break;
}
}
}
if (dir) {
printf("dir\n");
for(int i=0; i<5; i++) {
time_item[i].load_id += dir;
if (time_item[i].load_id < COMPO_ID_NUM_TIME_SET_HOUR_UU+ofs) {
time_item[i].load_id = COMPO_ID_NUM_TIME_SET_HOUR_DD+ofs;
} else if (time_item[i].load_id > COMPO_ID_NUM_TIME_SET_HOUR_DD+ofs) {
time_item[i].load_id = COMPO_ID_NUM_TIME_SET_HOUR_UU+ofs;
}
}
if (id == COMPO_ID_BTN_SETTIME_HOUR) {
f_set_time->hcnt += dir;
if (dir && f_set_time->hour == 0) {
f_set_time->hour = 24;
}
f_set_time->hour = (f_set_time->hour - dir) % 24;
} else if (id == COMPO_ID_BTN_SETTIME_MIN) {
f_set_time->mcnt += dir;
if (dir && f_set_time->min == 0) {
f_set_time->min = 60;
}
f_set_time->min = (f_set_time->min - dir) % 60;
}
}
if (press == false || dir) {
for(int i=0; i<5; i++) {
if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UU+ofs) {
time_item[i].visible_en = true;
time_item[i].num_cnt = 2;
time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR_UU-COMPO_ID_NUM_TIME_SET_HOUR_UU);
} else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DD+ofs) {
time_item[i].visible_en = true;
time_item[i].num_cnt = 2;
time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR_DD-COMPO_ID_NUM_TIME_SET_HOUR_UU);
} else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UP+ofs) {
time_item[i].visible_en = true;
time_item[i].num_cnt = 2;
time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR_UP-COMPO_ID_NUM_TIME_SET_HOUR_UU);
} else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR+ofs) {
time_item[i].visible_en = true;
time_item[i].num_cnt = 2;
time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR-COMPO_ID_NUM_TIME_SET_HOUR_UU);
} else if (time_item[i].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DOWN+ofs) {
time_item[i].visible_en = true;
time_item[i].num_cnt = 2;
time_item[i].y = SETTIME_SET_NUM_POS_Y(SETTIME_SET_NUM_POS_Y_START,SETTIME_TXT_ITEM_Y_OFFSET,COMPO_ID_NUM_TIME_SET_HOUR_DOWN-COMPO_ID_NUM_TIME_SET_HOUR_UU);
}
}
}
for (int i=0; i<5; i++) {
compo_textbox_t *txt_num = compo_getobj_byid(time_item[i].num_id);
compo_textbox_set_align_center(txt_num, true);
compo_textbox_set_pos(txt_num, time_item[i].x, time_item[i].y);
compo_textbox_set_visible(txt_num, time_item[i].visible_en);
}
if (distance || !press) {
printf("[%d]\n", time_item[2].y);
}
last_dy = dy;
}
static void func_alarm_clock_set_move_handle(u8 id)
{
f_set_time_t *f_set_time = (f_set_time_t*)func_cb.f_cb;
settime_set_num_item_t *time_item;
bool flag_press = 0;
u32 tick = tick_get();
s32 dx = 0, dy = 0; //坐标差量
char buf[4];
if (id == COMPO_ID_BTN_SETTIME_HOUR) {
time_item = &f_set_time->set_num_item[0];
} else if (id == COMPO_ID_BTN_SETTIME_MIN) {
time_item = &f_set_time->set_num_item[5];
}
for (;;) {
flag_press = ctp_get_dxy(&dx, &dy);
//printf("x:%d, y:%d\n",dx, dy);
alarm_clock_set_num_pos_cal(dy, id, flag_press);
if (!flag_press && f_set_time->momentum_dy) {
while (!tick_check_expire(tick, 15))
;
}
/* 15ms刷新一下数字框 */
if (tick_check_expire(tick, 15)) {
tick = tick_get();
if (id == COMPO_ID_BTN_SETTIME_HOUR) {
for (int idx = 0; idx < 5; idx++) {
memset(buf, 0, sizeof(buf));
compo_textbox_t *txt_num = compo_getobj_byid(time_item[idx].num_id);
if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UU) { //上上次的时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(f_set_time->hour, 1, 1), 1, 1));
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_UP) { //上次的时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->hour, 1, 1));
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR) { //当前时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->hour, 1, 0));
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DOWN) { //下次时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->hour, 1, 2));
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_HOUR_DD) { //下下次时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(f_set_time->hour, 1, 2), 1, 2));
}
compo_textbox_set(txt_num, buf);
}
} else if (id == COMPO_ID_BTN_SETTIME_MIN){
for (int idx = 0; idx < 5; idx++) {
memset(buf, 0, sizeof(buf));
compo_textbox_t *txt_num = compo_getobj_byid(time_item[idx].num_id);
if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_UU) { //上上次的时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(f_set_time->min, 0, 1), 0, 1));
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_UP) { //上次的时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->min, 0, 1));
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN) { //当前时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->min, 0, 0));
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_DOWN) { //下次时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(f_set_time->min, 0, 2));
} else if (time_item[idx].load_id == COMPO_ID_NUM_TIME_SET_MIN_DD) { //下下次时间
snprintf(buf, sizeof(buf), "%02d", func_alarm_clock_get_time_cal(func_alarm_clock_get_time_cal(f_set_time->min, 0, 2), 0, 2));
}
compo_textbox_set(txt_num, buf);
}
}
}
if (!flag_press && f_set_time->momentum_dy == 0) {
f_set_time->hcnt = 0;
f_set_time->mcnt = 0;
break;
}
evt_message(msg_dequeue());
func_process();
}
}
//触摸按钮效果处理
static void func_set_time_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_YES:
// case COMPO_ID_BTN_NO:
// compo_picturebox_set_visible(pic_click, true);
// break;
case COMPO_ID_BTN_SETTIME_HOUR:
case COMPO_ID_BTN_SETTIME_MIN:
/* 更新选择状态 */
compo_picturebox_set(select_min_pic, id == COMPO_ID_BTN_SETTIME_MIN ? UI_BUF_SETTING_SETTIME_SELECT_BIN : UI_BUF_SETTING_SETTIME_DEFAULT_BIN);
compo_picturebox_set(select_hour_pic, id == COMPO_ID_BTN_SETTIME_HOUR ? UI_BUF_SETTING_SETTIME_SELECT_BIN : UI_BUF_SETTING_SETTIME_DEFAULT_BIN);
func_alarm_clock_set_move_handle(id);
break;
default:
break;
}
}
//释放按钮效果处理
static void func_set_time_button_release_handle(void)
{
// compo_picturebox_t *pic_click = compo_getobj_byid(COMPO_ID_PIC_CONTINUE_CLICK);
// compo_picturebox_set_visible(pic_click, false);
}
//单击按钮
static void func_set_time_button_click(void)
{
f_set_time_t *f_set_time = (f_set_time_t*)func_cb.f_cb;
int id = compo_get_button_id();
tm_t tm;
tm = rtc_clock_get();
switch (id) {
case COMPO_ID_BTN_YES:
tm.hour =f_set_time->hour;
tm.min = f_set_time->min;
SysVariable.Rtc.hour = f_set_time->hour;
SysVariable.Rtc.min = f_set_time->min;
rtc_clock_set(tm);
func_switch_to_assign_screen(FUNC_SET_SUB_TIME, true);
break;
case COMPO_ID_BTN_NO:
func_switch_to_assign_screen(FUNC_SET_SUB_TIME, true);
break;
default:
break;
}
func_set_time_button_release_handle();
}
//时间设置功能事件处理
static void func_set_time_process(void)
{
func_process();
}
//时间设置功能消息处理
static void func_set_time_message(size_msg_t msg)
{
switch (msg) {
case MSG_CTP_TOUCH:
func_set_time_button_touch_handle();
break;
case MSG_CTP_CLICK:
func_set_time_button_click();
break;
case MSG_CTP_SHORT_UP:
case MSG_CTP_SHORT_DOWN:
case MSG_CTP_SHORT_LEFT:
case MSG_CTP_LONG:
func_set_time_button_release_handle();
break;
case MSG_CTP_SHORT_RIGHT:
func_set_time_button_release_handle();
func_message(msg);
break;
case MSG_QDEC_BACKWARD:
case MSG_QDEC_FORWARD:
break;
default:
func_message(msg);
break;
}
}
//进入时间设置功能
static void func_set_time_enter(void)
{
func_cb.f_cb = func_zalloc(sizeof(f_set_time_t));
func_cb.frm_main = func_set_time_form_create();
f_set_time_t *f_set_time = (f_set_time_t*) func_cb.f_cb;
memcpy(f_set_time->set_num_item, tbl_settime_set_num_item, sizeof(tbl_settime_set_num_item));
// f_set_time->size = gui_image_get_size(UI_BUF_ALARM_CLOCK_NUM_BIN);
f_set_time->num_height = widget_text_get_height();
f_set_time->hour = SysVariable.Rtc.hour;
f_set_time->min = SysVariable.Rtc.min;
func_cb.enter_tick = tick_get();
}
//退出时间设置功能
static void func_set_time_exit(void)
{
printf("%s\n",__func__);
func_cb.last = FUNC_SET_TIME;
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_set_time(void)
{
printf("%s\n", __func__);
func_set_time_enter();
while (func_cb.sta == FUNC_SET_TIME) {
func_set_time_process();
func_set_time_message(msg_dequeue());
}
func_set_time_exit();
}