2025-04-11 09:40:32 +08:00

393 lines
14 KiB
C

#include "lvgl.h"
#include <stdio.h>
#include <stdlib.h>
#include "ostask.h"
#include "osasys.h"
#include "bsp.h"
#include "bsp_custom.h"
#include DEBUG_LOG_HEADER_FILE
#ifdef FEATURE_SUBSYS_STATUS_ENABLE
#include "status.h"
extern StatusT gStatus;
extern utc_timer_value_t gUtcTime;
#endif
#include "ui.h"
#include "ui_helpers.h"
#if LV_MEM_CUSTOM == 0 && LV_MEM_SIZE < (60ul * 1024ul)
#error Insufficient memory. Please set LV_MEM_SIZE to at least 60KB.
#endif
#define APP_TRACE(subId, argLen, format, ...) \
ECOMM_TRACE(UNILOG_REF_APP, subId, P_VALUE, argLen, format, ##__VA_ARGS__)
lv_disp_t *dispp = NULL;
lv_theme_t *theme = NULL;
lv_timer_t *lvgl_time = NULL;
lv_obj_t *ui_status;
lv_obj_t *bat_label;
lv_obj_t *net_label;
lv_obj_t *usb_label;
lv_obj_t *gnss_label;
lv_obj_t *bell_label;
lv_obj_t *call_label;
lv_obj_t *time_label;
lv_obj_t **bar_label;
char show_time_str[] = "2024-03-06 10:00";
uint8_t hour = 10;
uint8_t mins = 0;
uint8_t secs = 0;
uint8_t day = 6;
uint8_t mon = 3;
uint16_t year = 2024;
#include "pwrkey.h"
#ifdef FEATURE_SUBSYS_OPENHAL_ENABLE
#include "api_tp.h"
#include "api_scr.h"
#include "api_comm.h"
extern uint32_t scr_dev_UsrId;
extern uint8_t backLightVal;
#endif
void ui_Pwroff_cb(lv_timer_t * tmr)
{
#ifdef FEATURE_SUBSYS_OPENHAL_ENABLE
backLightVal = 0;
api_scr_ioctl(scr_dev_UsrId,SCREEN_BACKLIGHT, &backLightVal);
#endif
pwrKeyStartPowerOff();
}
void ui_bar_update(uiShowBits flag)
{
// APP_TRACE(ui_bar_update,1,"0x%X",flag);
if (flag & UI_BAR_LTE)
{
lv_obj_clear_flag(net_label, LV_OBJ_FLAG_HIDDEN);
}
else
{
lv_obj_add_flag(net_label, LV_OBJ_FLAG_HIDDEN);
}
if(flag & UI_BAR_SIM)
{
lv_label_set_text(ui_Home_SIM,"已插SIM卡");
lv_obj_set_style_text_font(ui_Home_SIM, &ui_font_song16, LV_PART_MAIN|LV_STATE_DEFAULT);
// lv_obj_clear_flag(ui_Home_SIM, LV_OBJ_FLAG_HIDDEN);
}
else
{
lv_label_set_text(ui_Home_SIM,"未插SIM卡");
lv_obj_set_style_text_font(ui_Home_SIM, &ui_font_song16, LV_PART_MAIN|LV_STATE_DEFAULT);
// lv_obj_add_flag(ui_Home_SIM, LV_OBJ_FLAG_HIDDEN);
}
if(flag & UI_BAR_USB)
{
lv_obj_clear_flag(usb_label, LV_OBJ_FLAG_HIDDEN);
}
else
{
lv_obj_add_flag(usb_label, LV_OBJ_FLAG_HIDDEN);
}
if (flag & UI_BAR_CALL)
{
lv_obj_clear_flag(call_label, LV_OBJ_FLAG_HIDDEN);
}
else
{
lv_obj_add_flag(call_label, LV_OBJ_FLAG_HIDDEN);
}
if (flag & UI_BAR_BELL)
{
lv_obj_clear_flag(bell_label, LV_OBJ_FLAG_HIDDEN);
}
else
{
lv_obj_add_flag(bell_label, LV_OBJ_FLAG_HIDDEN);
}
if(flag & UI_BAR_CHARGING)
{
lv_label_set_text(bat_label, LV_SYMBOL_CHARGE);
}
else if(flag & UI_BAR_BAT_LACK)
{
lv_label_set_text(bat_label, LV_SYMBOL_BATTERY_EMPTY);
}
else if(flag & UI_BAR_BAT_HALF)
{
lv_label_set_text(bat_label, LV_SYMBOL_BATTERY_2);
}
else if(flag & UI_BAR_BAT_FULL)
{
lv_label_set_text(bat_label, LV_SYMBOL_BATTERY_FULL);
}
}
void ui_evt_update(uiShowBits flag)
{
// APP_TRACE(ui_evt_update,1,"0x%X",flag);
#ifdef FEATURE_IMS_ENABLE
if (flag & UI_CALL_ACCEPT)
{
_ui_screen_change(&ui_Call, LV_SCR_LOAD_ANIM_FADE_ON, 0, 0, &ui_Call_screen_init);
lv_obj_clear_flag(ui_Incoming, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(ui_Dialout, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(ui_Call_Incon1, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(ui_Call_Incon2, LV_OBJ_FLAG_HIDDEN);
lv_obj_clear_flag(ui_Call_Incon3, LV_OBJ_FLAG_HIDDEN);
}
if (flag & UI_CALL_CANCEL)
{
_ui_screen_change(&ui_Menu1, LV_SCR_LOAD_ANIM_FADE_ON, 0, 0, &ui_Menu1_screen_init);
}
if (flag & UI_CALL_RINING)
{
_ui_screen_change(&ui_Call, LV_SCR_LOAD_ANIM_FADE_ON, 0, 0, &ui_Call_screen_init);
lv_obj_clear_flag(ui_Incoming, LV_OBJ_FLAG_HIDDEN);
lv_obj_clear_flag(ui_Call_Incon1, LV_OBJ_FLAG_HIDDEN);
lv_obj_clear_flag(ui_Call_Incon2, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(ui_Call_Incon3, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(ui_Dialout, LV_OBJ_FLAG_HIDDEN);
}
if (flag & UI_DIALING_OUT && ui_Call)
{
_ui_screen_change(&ui_Call, LV_SCR_LOAD_ANIM_FADE_ON, 0, 0, &ui_Call_screen_init);
lv_obj_add_flag(ui_Incoming, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(ui_Call_Incon1, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(ui_Call_Incon2, LV_OBJ_FLAG_HIDDEN);
lv_obj_clear_flag(ui_Dialout, LV_OBJ_FLAG_HIDDEN);
lv_obj_clear_flag(ui_Call_Incon3, LV_OBJ_FLAG_HIDDEN);
}
if (flag & UI_SMS_RECEIVE) //接收到新短信
{
extern int sms_load(int rank);
sms_load(0);
_ui_screen_change(&ui_Chat, LV_SCR_LOAD_ANIM_FADE_ON, 0, 0, &ui_Chat_screen_init);
}
if (flag & UI_SMS_DELIVER) //短信发送成功
{
LV_LOG_USER("SMS TX OK");
if(ui_sms_tx_flag) lv_obj_clear_flag(ui_sms_tx_flag, LV_OBJ_FLAG_HIDDEN);
// _ui_screen_change(&ui_Chat, LV_SCR_LOAD_ANIM_FADE_ON, 0, 0, &ui_Chat_screen_init);
}
#endif
if (flag & UI_EVT_POWROFF) //关机动画
{
lv_timer_t *pwroff_timer = lv_timer_create(ui_Pwroff_cb, 5000, 0);
lv_disp_load_scr(ui_Charging);
// _ui_screen_change(&ui_Splash, LV_SCR_LOAD_ANIM_FADE_ON, 0, 0, &ui_Splash_screen_init);
}
}
/**
\fn
\brief
\return
*/
static lv_style_t style_bar;
void ui_bar_init(uiShowBits flag)
{
ui_status = lv_obj_create(lv_layer_top());
lv_obj_set_width( ui_status, lv_pct(100));
lv_obj_set_height( ui_status, 20);
lv_obj_set_style_bg_opa( ui_status, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
net_label = lv_label_create(ui_status);
lv_label_set_text(net_label, LV_SYMBOL_HOME);
// lv_label_set_text(net_label,"CONNECT"); //后期可改为图标
lv_obj_align(net_label, LV_ALIGN_TOP_LEFT, 2, 2);
time_label = lv_label_create(ui_status);
lv_label_set_text(time_label, show_time_str);
lv_obj_align_to(time_label, net_label, LV_ALIGN_OUT_RIGHT_TOP, 8, 0);
lv_obj_add_flag(time_label, LV_OBJ_FLAG_HIDDEN);
bat_label = lv_label_create(ui_status);
lv_label_set_text(bat_label, LV_SYMBOL_BATTERY_3);
lv_obj_align(bat_label, LV_ALIGN_TOP_RIGHT, -4, 2);
usb_label = lv_label_create(ui_status);
lv_label_set_text(usb_label, LV_SYMBOL_USB);
lv_obj_align_to(usb_label, bat_label, LV_ALIGN_OUT_LEFT_TOP, -4, 0);
gnss_label = lv_label_create(ui_status);
lv_label_set_text(gnss_label, LV_SYMBOL_GPS);
lv_obj_align_to(gnss_label, usb_label, LV_ALIGN_OUT_LEFT_TOP, -4, 0);
lv_obj_add_flag(gnss_label, LV_OBJ_FLAG_HIDDEN);
call_label = lv_label_create(ui_status);
lv_label_set_text(call_label, LV_SYMBOL_CALL);
lv_obj_align_to(call_label, gnss_label, LV_ALIGN_OUT_LEFT_TOP, -4, 0);
bell_label = lv_label_create(ui_status);
lv_label_set_text(bell_label, LV_SYMBOL_BELL);
lv_obj_align_to(bell_label, call_label, LV_ALIGN_OUT_LEFT_TOP, -4, 0);
// lv_obj_add_flag(bell_label, LV_OBJ_FLAG_HIDDEN);
ui_bar_update(flag);
// obj = lv_bar_create(main_page);
// lv_bar_set_range(obj, -1000, 2000);
// lv_obj_set_size(obj1, 20, 200);
}
/**
\fn
\brief
\return
*/
void ui_back()
{
_ui_screen_change(&ui_Menu1, LV_SCR_LOAD_ANIM_FADE_ON, 0, 0, &ui_Menu1_screen_init);
}
///////////////////// ANIMATIONS ////////////////////
void Up_Animation( lv_obj_t *TargetObject, int delay)
{
ui_anim_user_data_t *PropertyAnimation_0_user_data = lv_mem_alloc(sizeof(ui_anim_user_data_t));
PropertyAnimation_0_user_data->target = TargetObject;
PropertyAnimation_0_user_data->val = -1;
lv_anim_t PropertyAnimation_0;
lv_anim_init(&PropertyAnimation_0);
lv_anim_set_time(&PropertyAnimation_0, 200);
lv_anim_set_user_data(&PropertyAnimation_0, PropertyAnimation_0_user_data);
lv_anim_set_custom_exec_cb(&PropertyAnimation_0, _ui_anim_callback_set_y );
lv_anim_set_values(&PropertyAnimation_0, -30, 0 );
lv_anim_set_path_cb( &PropertyAnimation_0, lv_anim_path_ease_out);
lv_anim_set_delay( &PropertyAnimation_0, delay + 0 );
lv_anim_set_deleted_cb( &PropertyAnimation_0, _ui_anim_callback_free_user_data );
lv_anim_set_playback_time(&PropertyAnimation_0, 0);
lv_anim_set_playback_delay(&PropertyAnimation_0, 0);
lv_anim_set_repeat_count(&PropertyAnimation_0, 0);
lv_anim_set_repeat_delay(&PropertyAnimation_0, 0);
lv_anim_set_early_apply( &PropertyAnimation_0, false );
lv_anim_set_get_value_cb(&PropertyAnimation_0, &_ui_anim_callback_get_y );
lv_anim_start(&PropertyAnimation_0);
ui_anim_user_data_t *PropertyAnimation_1_user_data = lv_mem_alloc(sizeof(ui_anim_user_data_t));
PropertyAnimation_1_user_data->target = TargetObject;
PropertyAnimation_1_user_data->val = -1;
lv_anim_t PropertyAnimation_1;
lv_anim_init(&PropertyAnimation_1);
lv_anim_set_time(&PropertyAnimation_1, 100);
lv_anim_set_user_data(&PropertyAnimation_1, PropertyAnimation_1_user_data);
lv_anim_set_custom_exec_cb(&PropertyAnimation_1, _ui_anim_callback_set_opacity );
lv_anim_set_values(&PropertyAnimation_1, 0, 255 );
lv_anim_set_path_cb( &PropertyAnimation_1, lv_anim_path_linear);
lv_anim_set_delay( &PropertyAnimation_1, delay + 0 );
lv_anim_set_deleted_cb( &PropertyAnimation_1, _ui_anim_callback_free_user_data );
lv_anim_set_playback_time(&PropertyAnimation_1, 0);
lv_anim_set_playback_delay(&PropertyAnimation_1, 0);
lv_anim_set_repeat_count(&PropertyAnimation_1, 0);
lv_anim_set_repeat_delay(&PropertyAnimation_1, 0);
lv_anim_set_early_apply( &PropertyAnimation_1, true );
lv_anim_start(&PropertyAnimation_1);
}
void scrolldot_Animation(lv_obj_t *TargetObject, int delay)
{
ui_anim_user_data_t *PropertyAnimation_0_user_data = lv_mem_alloc(sizeof(ui_anim_user_data_t));
PropertyAnimation_0_user_data->target = TargetObject;
PropertyAnimation_0_user_data->val = -1;
lv_anim_t PropertyAnimation_0;
lv_anim_init(&PropertyAnimation_0);
lv_anim_set_time(&PropertyAnimation_0, 300);
lv_anim_set_user_data(&PropertyAnimation_0, PropertyAnimation_0_user_data);
lv_anim_set_custom_exec_cb(&PropertyAnimation_0, _ui_anim_callback_set_y );
lv_anim_set_values(&PropertyAnimation_0, 30, -8 );
lv_anim_set_path_cb( &PropertyAnimation_0, lv_anim_path_ease_out);
lv_anim_set_delay( &PropertyAnimation_0, delay + 0 );
lv_anim_set_deleted_cb( &PropertyAnimation_0, _ui_anim_callback_free_user_data );
lv_anim_set_playback_time(&PropertyAnimation_0, 0);
lv_anim_set_playback_delay(&PropertyAnimation_0, 0);
lv_anim_set_repeat_count(&PropertyAnimation_0, 0);
lv_anim_set_repeat_delay(&PropertyAnimation_0, 0);
lv_anim_set_early_apply( &PropertyAnimation_0, true );
lv_anim_start(&PropertyAnimation_0);
}
lv_obj_t *ui_initial_actions0 = NULL;
void ui_event_initial_actions( lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
lv_obj_t * target = lv_event_get_target(e);
if ( event_code == LV_EVENT_SCREEN_LOAD_START)
{
// uint8_t hour = (((gUtcTime.UTCtimer2 >> 24) & 0xFF) + 8) % 24;
// uint8_t mins = ((gUtcTime.UTCtimer2 >> 16) & 0xFF);
// uint8_t secs = ((gUtcTime.UTCtimer2 >> 8) & 0xFF);
sec_Animation(ui_Sec, 0, 3600);
// hour_Animation(ui_Min, mins);
// hour_Animation(ui_Hour, hour);
}
}
void ui_timer_cb(lv_timer_t * tmr)
{
if(gUtcTime.UTCsecs > 1702546376)
{
lv_obj_clear_flag(time_label, LV_OBJ_FLAG_HIDDEN);
}
year = (gUtcTime.UTCtimer1 >> 16);
mon = ((gUtcTime.UTCtimer1 >> 8) & 0xFF);
day = ((gUtcTime.UTCtimer1 ) & 0xFF);
uint8_t buff = (((gUtcTime.UTCtimer2 >> 24) & 0xFF) + 8) % 24;
if(hour != buff){
hour = buff;
hour_Animation(ui_Hour, 0, (hour % 12 +1) * 300);
}
buff = ((gUtcTime.UTCtimer2 >> 16) & 0xFF);
if(mins != buff){
mins = buff;
min_Animation(ui_Min, 0, mins*60);
}
secs = ((gUtcTime.UTCtimer2 >> 8) & 0xFF);
memset(show_time_str,0,sizeof(show_time_str));
sprintf(show_time_str, "%02u:%02u", hour, mins);
lv_label_set_text(ui_Clock_Number,show_time_str);
memset(show_time_str,0,sizeof(show_time_str));
sprintf(show_time_str,"%04u-%02u-%02u %02u:%02u", year, mon, day, hour, mins);
lv_label_set_text(time_label, show_time_str);
}
void ui_init(uiShowBits flag)
{
// APP_TRACE(ui_init,1,"0x%X",flag);
if (flag & UI_READY)
{
LV_EVENT_GET_COMP_CHILD = lv_event_register_id();
dispp = lv_disp_get_default();
theme = lv_theme_basic_init(dispp);
lv_disp_set_theme(dispp, theme);
// ui_Splash_screen_init();
ui_Clock_screen_init();
ui_Menu1_screen_init();
ui_Menu2_screen_init();
ui_Home_screen_init();
ui_Call_screen_init();
ui_Dial_screen_init();
ui_Chat_screen_init();
ui_Chip_screen_init();
ui_Alarm_screen_init();
ui_Music_Player_screen_init();
ui_Recorder_screen_init();
ui_Setting_screen_init();
ui_Weather_screen_init();
ui_Charging_screen_init();
ui_initial_actions0 = lv_obj_create(NULL);
lv_obj_add_event_cb(ui_initial_actions0, ui_event_initial_actions, LV_EVENT_ALL, NULL);
lv_disp_load_scr(ui_initial_actions0);
ui_bar_init(flag);
lv_disp_load_scr(ui_Home);
lvgl_time = lv_timer_create(ui_timer_cb, 5000, 0);
}
else
{
ui_Charging_screen_init();
lv_disp_load_scr(ui_Charging);
}
}