297 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			297 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | #include "ui/ui.h"
 | |||
|  | #include "app_config.h"
 | |||
|  | #include "ui/ui_style.h"
 | |||
|  | #include "ui/ui_api.h"
 | |||
|  | #include "app_action.h"
 | |||
|  | #include "system/timer.h"
 | |||
|  | #include "font/language_list.h"
 | |||
|  | #include "res/resfile.h"
 | |||
|  | #include "syscfg_id.h"
 | |||
|  | 
 | |||
|  | #if (TCFG_UI_ENABLE && TCFG_SPI_LCD_ENABLE)
 | |||
|  | #include "ui/ui_sys_param.h"
 | |||
|  | 
 | |||
|  | struct SYS_INFO { | |||
|  |     u32 version_log;                 //版本日期
 | |||
|  |     u32 space_log;                   //内存大小
 | |||
|  | }; | |||
|  | 
 | |||
|  | struct UI_DISPLAY { | |||
|  |     u16 backlight_time;             //背光时间
 | |||
|  |     u16 backlight_brightness;       //背光亮度
 | |||
|  | }; | |||
|  | 
 | |||
|  | typedef struct _UI_SYS_PARAM { | |||
|  |     u16 cur_auto_close_time;        //当前设置的关机时间
 | |||
|  |     struct SYS_INFO sys_infomation; //系统信息
 | |||
|  |     struct UI_DISPLAY display;      //显示信息
 | |||
|  | } UI_SYS_PARAM; | |||
|  | 
 | |||
|  | //背光亮度
 | |||
|  | static const char table_system_lcd_value[] = { | |||
|  |     100, | |||
|  |     60, | |||
|  |     30, | |||
|  | }; | |||
|  | 
 | |||
|  | //背光时间
 | |||
|  | static const u16 table_system_lcd_protect[] = { | |||
|  |     0, | |||
|  |     10, | |||
|  |     15, | |||
|  |     30, | |||
|  |     60, | |||
|  | }; | |||
|  | 
 | |||
|  | //自动关机时间
 | |||
|  | static const u16 table_system_auto_close[] = { | |||
|  |     0, | |||
|  |     15 * 60, | |||
|  |     30 * 60, | |||
|  |     60 * 60, | |||
|  |     120 * 60, | |||
|  |     180 * 60, | |||
|  | }; | |||
|  | 
 | |||
|  | static UI_SYS_PARAM sys_param; | |||
|  | volatile static int system_auto_close_timer;                 //自动关机定时器
 | |||
|  | volatile static int system_backlight_timer;                 //背光时间
 | |||
|  | #define __this 	(&sys_param)
 | |||
|  | 
 | |||
|  | extern void sys_enter_soft_poweroff(void *priv); | |||
|  | void auto_power_off_timer_close(void); | |||
|  | //*********************************************************************************//
 | |||
|  | //                                 配置开始                                        //
 | |||
|  | //*********************************************************************************//
 | |||
|  | static void sys_ui_backlight_close() | |||
|  | { | |||
|  |     printf("\n<<<<%s >>>>> \n", __FUNCTION__); | |||
|  |     system_backlight_timer = 0; | |||
|  |     ui_backlight_close(); | |||
|  | } | |||
|  | 
 | |||
|  | void set_sys_param_default(void) | |||
|  | { | |||
|  |     __this->display.backlight_time = 0; | |||
|  |     __this->display.backlight_brightness = 0; | |||
|  |     __this->cur_auto_close_time = 0; | |||
|  |     auto_power_off_timer_close(); | |||
|  | } | |||
|  | 
 | |||
|  | void sys_param_write2vm(void) | |||
|  | { | |||
|  |     syscfg_write(CFG_UI_SYS_INFO, __this, sizeof(UI_SYS_PARAM)); | |||
|  | } | |||
|  | 
 | |||
|  | void sys_param_init(void) | |||
|  | { | |||
|  |     int ret = 0; | |||
|  |     r_printf("sys_param_init\n"); | |||
|  |     ret = syscfg_read(CFG_UI_SYS_INFO, __this, sizeof(UI_SYS_PARAM)); | |||
|  |     if (ret != sizeof(UI_SYS_PARAM)) { | |||
|  |         r_printf("sys_param read err\n"); | |||
|  |         memset(__this, 0, sizeof(UI_SYS_PARAM)); //暂时默认都为0;
 | |||
|  |         set_sys_param_default(); | |||
|  |         sys_param_write2vm(); | |||
|  |     } else { | |||
|  |         __this->display.backlight_brightness = 0;//屏幕亮度重新开机不设置,默认高亮
 | |||
|  |         sys_param_write2vm(); | |||
|  |     } | |||
|  | 
 | |||
|  |     if (__this->cur_auto_close_time && (!system_auto_close_timer)) { | |||
|  |         //每次重新开机把上次设置的自动关机时间设置进去
 | |||
|  |         system_auto_close_timer = sys_s_hi_timerout_add(NULL, sys_enter_soft_poweroff, (table_system_auto_close[__this->cur_auto_close_time ] * 1000)); | |||
|  |     } | |||
|  | 
 | |||
|  |     if (__this->display.backlight_time && (!system_backlight_timer)) { | |||
|  |         system_backlight_timer = sys_s_hi_timerout_add(NULL, sys_ui_backlight_close, (table_system_lcd_protect[ __this->display.backlight_time] * 1000)); | |||
|  |     } | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | //*********************************************************************************//
 | |||
|  | //                                 系统信息配置                                    //
 | |||
|  | //*********************************************************************************//
 | |||
|  | void set_version_log(u32 log) | |||
|  | { | |||
|  |     __this->sys_infomation.version_log = log; | |||
|  | } | |||
|  | 
 | |||
|  | u32 get_version_log(void) | |||
|  | { | |||
|  |     return __this->sys_infomation.version_log; | |||
|  | } | |||
|  | 
 | |||
|  | void set_space_log(u32 log) | |||
|  | { | |||
|  |     __this->sys_infomation.space_log = log; | |||
|  | } | |||
|  | 
 | |||
|  | u32 get_space_log(void) | |||
|  | { | |||
|  |     return __this->sys_infomation.space_log; | |||
|  | } | |||
|  | 
 | |||
|  | //*********************************************************************************//
 | |||
|  | //                                 自动关机配置                                    //
 | |||
|  | //*********************************************************************************//
 | |||
|  | void set_auto_poweroff_timer(int sel_item) | |||
|  | { | |||
|  |     int time = table_system_auto_close[sel_item]; | |||
|  |     __this->cur_auto_close_time = sel_item; | |||
|  | 
 | |||
|  |     if (time == 0) { | |||
|  |         auto_power_off_timer_close(); | |||
|  |         sys_param_write2vm(); | |||
|  |         return; | |||
|  |     } | |||
|  | 
 | |||
|  |     if (system_auto_close_timer) { | |||
|  |         sys_s_hi_timer_modify(system_auto_close_timer, time * 1000); | |||
|  |     } else { | |||
|  |         system_auto_close_timer = sys_s_hi_timerout_add(NULL, sys_enter_soft_poweroff, (time * 1000)); | |||
|  |     } | |||
|  |     sys_param_write2vm(); | |||
|  | } | |||
|  | 
 | |||
|  | void auto_power_off_timer_close(void) | |||
|  | { | |||
|  |     if (system_auto_close_timer) { | |||
|  |         sys_s_hi_timeout_del(system_auto_close_timer); | |||
|  |         system_auto_close_timer = 0; | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | u16 get_cur_auto_power_time(void) | |||
|  | { | |||
|  |     return __this->cur_auto_close_time; | |||
|  | } | |||
|  | 
 | |||
|  | //*********************************************************************************//
 | |||
|  | //                                 背光配置                                        //
 | |||
|  | //*********************************************************************************//
 | |||
|  | void set_backlight_time(u16 time) | |||
|  | { | |||
|  |     /* __this->display.backlight_time = table_system_lcd_protect[time]; */ | |||
|  | 
 | |||
|  | 
 | |||
|  |     if (time >= sizeof(table_system_lcd_protect) / sizeof(table_system_lcd_protect[0])) { | |||
|  |         return; | |||
|  |     } | |||
|  |     __this->display.backlight_time = time; | |||
|  | 
 | |||
|  |     if (system_backlight_timer) { | |||
|  |         time = table_system_lcd_protect[__this->display.backlight_time]; | |||
|  |         sys_s_hi_timer_modify(system_backlight_timer, time * 1000); | |||
|  |     } | |||
|  | 
 | |||
|  |     if (__this->display.backlight_time && (!system_backlight_timer)) { | |||
|  | 
 | |||
|  |         system_backlight_timer = sys_s_hi_timerout_add(NULL, sys_ui_backlight_close, (table_system_lcd_protect[ __this->display.backlight_time] * 1000)); | |||
|  |     } | |||
|  | 
 | |||
|  |     if (!__this->display.backlight_time && system_backlight_timer) { | |||
|  |         sys_s_hi_timeout_del(system_backlight_timer); | |||
|  |         system_backlight_timer = 0; | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     sys_param_write2vm(); | |||
|  | } | |||
|  | 
 | |||
|  | u16 get_backlight_time_item(void) | |||
|  | { | |||
|  |     return __this->display.backlight_time; | |||
|  | } | |||
|  | 
 | |||
|  | u16 get_backlight_time(void) | |||
|  | { | |||
|  |     return table_system_lcd_protect[__this->display.backlight_time]; | |||
|  | } | |||
|  | 
 | |||
|  | __attribute__((weak)) | |||
|  | void LCD_Set_Brightness(u16 percentage) | |||
|  | { | |||
|  | 
 | |||
|  | } | |||
|  | 
 | |||
|  | void set_backlight_brightness(u16 brightness) | |||
|  | { | |||
|  |     /* __this->display.backlight_brightness = table_system_lcd_value[brightness]; */ | |||
|  |     if (brightness >= sizeof(table_system_lcd_value) / sizeof(table_system_lcd_value[0])) { | |||
|  |         return; | |||
|  |     } | |||
|  |     __this->display.backlight_brightness = brightness; | |||
|  |     brightness = table_system_lcd_value[brightness]; | |||
|  | 
 | |||
|  |     if (brightness) { | |||
|  | #if (TCFG_LCD_OLED_ENABLE && TCFG_SPI_LCD_ENABLE)
 | |||
|  |         extern void OLED_Set_Brightness(u8 percentage); | |||
|  |         OLED_Set_Brightness(brightness); | |||
|  | #else
 | |||
|  |         LCD_Set_Brightness(brightness); | |||
|  | #endif
 | |||
|  |     } | |||
|  | 
 | |||
|  |     sys_param_write2vm(); | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  | u16 get_backlight_brightness_item(void) | |||
|  | { | |||
|  |     return __this->display.backlight_brightness; | |||
|  | } | |||
|  | 
 | |||
|  | u16 get_backlight_brightness(void) | |||
|  | { | |||
|  |     return table_system_lcd_value[__this->display.backlight_brightness]; | |||
|  | } | |||
|  | 
 | |||
|  | //*********************************************************************************//
 | |||
|  | //                                 其他配置                                        //
 | |||
|  | //*********************************************************************************//
 | |||
|  | void set_sys_info_reset(void) | |||
|  | { | |||
|  |     set_sys_param_default(); | |||
|  |     sys_param_write2vm(); | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  | extern int lcd_backlight_status(); | |||
|  | 
 | |||
|  | static int app_key_event(struct sys_event *e) | |||
|  | { | |||
|  |     struct key_event *key = &e->u.key; | |||
|  |     int time; | |||
|  | 
 | |||
|  |     if (system_auto_close_timer) { | |||
|  |         time = table_system_auto_close[__this->cur_auto_close_time ]; | |||
|  |         sys_s_hi_timer_modify(system_auto_close_timer, time * 1000); | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     if (system_backlight_timer) { | |||
|  |         time = table_system_lcd_protect[__this->display.backlight_time]; | |||
|  |         sys_s_hi_timer_modify(system_backlight_timer, time * 1000); | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |     if (!lcd_backlight_status()) { | |||
|  |         e->consumed = 1;//接管按键消息,app应用不会收到消息
 | |||
|  |         if (__this->display.backlight_time && (!system_backlight_timer)) { | |||
|  |             system_backlight_timer = sys_s_hi_timerout_add(NULL, sys_ui_backlight_close, (table_system_lcd_protect[ __this->display.backlight_time] * 1000)); | |||
|  |             ui_backlight_open(); | |||
|  |         } | |||
|  |         return TRUE; | |||
|  |     } | |||
|  | 
 | |||
|  |     return FALSE; | |||
|  | } | |||
|  | 
 | |||
|  | SYS_EVENT_HANDLER(SYS_KEY_EVENT,  app_key_event, 2); | |||
|  | 
 | |||
|  | #endif //TCFG_SPI_LCD_ENABLE
 |