xref: /OK3568_Linux_fs/app/lvgl_demo/rk_demo/home/home_ui.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #include <stdio.h>
2*4882a593Smuzhiyun #include <stdlib.h>
3*4882a593Smuzhiyun #include <stdint.h>
4*4882a593Smuzhiyun #include <time.h>
5*4882a593Smuzhiyun #include <unistd.h>
6*4882a593Smuzhiyun #include <sys/types.h>
7*4882a593Smuzhiyun #include <sys/wait.h>
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <lvgl/lvgl.h>
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include "furniture_control_ui.h"
12*4882a593Smuzhiyun #include "home_ui.h"
13*4882a593Smuzhiyun #include "setting_ui.h"
14*4882a593Smuzhiyun #include "Rk_wifi.h"
15*4882a593Smuzhiyun #include "main.h"
16*4882a593Smuzhiyun #include "smart_home_ui.h"
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun ///////////////////// VARIABLES ////////////////////
19*4882a593Smuzhiyun uint32_t LV_EVENT_GET_COMP_CHILD;
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun static lv_obj_t * ui_Screen1 = NULL;
22*4882a593Smuzhiyun static lv_obj_t * ui_box_main = NULL;
23*4882a593Smuzhiyun static lv_obj_t * ui_smart_home_box = NULL;
24*4882a593Smuzhiyun static lv_obj_t * ui_furniture_control_box = NULL;
25*4882a593Smuzhiyun static lv_obj_t * ui_phone_box = NULL;
26*4882a593Smuzhiyun static lv_obj_t * ui_setting_box = NULL;
27*4882a593Smuzhiyun static lv_obj_t * ui_wifi;
28*4882a593Smuzhiyun static lv_obj_t * ui_smart_home;
29*4882a593Smuzhiyun static lv_obj_t * ui_furniture_control;
30*4882a593Smuzhiyun static lv_obj_t * ui_phone;
31*4882a593Smuzhiyun static lv_obj_t * ui_setting;
32*4882a593Smuzhiyun static lv_obj_t * ui_Label_time;
33*4882a593Smuzhiyun static lv_obj_t * ui_Label1;
34*4882a593Smuzhiyun static lv_obj_t * ui_Label4;
35*4882a593Smuzhiyun static lv_obj_t * ui_Label3;
36*4882a593Smuzhiyun static lv_obj_t * ui_Label6;
37*4882a593Smuzhiyun static lv_obj_t * ui_logo;
38*4882a593Smuzhiyun static lv_obj_t * bg_pic;
39*4882a593Smuzhiyun static lv_timer_t * timer_date;
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun ///////////////////// ANIMATIONS ////////////////////
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun ///////////////////// FUNCTIONS ////////////////////
44*4882a593Smuzhiyun extern int wifi_connected(void);
45*4882a593Smuzhiyun 
page_switch(lv_event_t * e)46*4882a593Smuzhiyun void page_switch(lv_event_t * e)
47*4882a593Smuzhiyun {
48*4882a593Smuzhiyun     void (*func)(void) = lv_event_get_user_data(e);
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun     if (func)
51*4882a593Smuzhiyun         func();
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun     lv_timer_del(timer_date);
54*4882a593Smuzhiyun     lv_obj_del(ui_Screen1);
55*4882a593Smuzhiyun     ui_Screen1 = NULL;
56*4882a593Smuzhiyun }
57*4882a593Smuzhiyun 
home_page_jump_furniture_control_callback(lv_event_t * event)58*4882a593Smuzhiyun void home_page_jump_furniture_control_callback(lv_event_t* event) {
59*4882a593Smuzhiyun     printf("page_jump_furniture_control_callback is into \n");
60*4882a593Smuzhiyun     furniture_control_ui_init();
61*4882a593Smuzhiyun     lv_timer_del(timer_date);
62*4882a593Smuzhiyun     lv_obj_del(ui_Screen1);
63*4882a593Smuzhiyun     ui_Screen1 = NULL;
64*4882a593Smuzhiyun }
65*4882a593Smuzhiyun 
date_update(lv_timer_t * timer)66*4882a593Smuzhiyun static void date_update(lv_timer_t * timer)
67*4882a593Smuzhiyun {
68*4882a593Smuzhiyun     time_t time_ptr;
69*4882a593Smuzhiyun     struct tm * tim;
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun     time(&time_ptr);
72*4882a593Smuzhiyun     tim = localtime(&time_ptr);
73*4882a593Smuzhiyun     //printf("update time %04d-%02d-%02d %02d:%02d \n", tim->tm_year + 1900, tim->tm_mon + 1, tim->tm_mday, tim->tm_hour, tim->tm_min);
74*4882a593Smuzhiyun     lv_label_set_text_fmt(ui_Label_time, "%04d-%02d-%02d %02d:%02d", tim->tm_year + 1900, tim->tm_mon + 1, tim->tm_mday, tim->tm_hour, tim->tm_min);
75*4882a593Smuzhiyun     if (wifi_connected() == RK_WIFI_State_CONNECTED) {
76*4882a593Smuzhiyun         lv_img_set_src(ui_wifi, IMG_WIFI_ON);
77*4882a593Smuzhiyun     }else {
78*4882a593Smuzhiyun         lv_img_set_src(ui_wifi, IMG_WIFI_OFF);
79*4882a593Smuzhiyun     }
80*4882a593Smuzhiyun }
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun ///////////////////// SCREENS ////////////////////
ui_Screen1_screen_init(void)83*4882a593Smuzhiyun void ui_Screen1_screen_init(void)
84*4882a593Smuzhiyun {
85*4882a593Smuzhiyun     ui_Screen1 = lv_obj_create(NULL);
86*4882a593Smuzhiyun     lv_obj_clear_flag(ui_Screen1, LV_OBJ_FLAG_SCROLLABLE);      /// Flags
87*4882a593Smuzhiyun     lv_obj_set_style_bg_img_opa(ui_Screen1, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun     bg_pic = lv_img_create(ui_Screen1);
90*4882a593Smuzhiyun     lv_obj_set_pos(bg_pic, 0, 0);
91*4882a593Smuzhiyun     lv_img_set_src(bg_pic, BG_PIC_0);
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun     ui_box_main = lv_obj_create(ui_Screen1);
94*4882a593Smuzhiyun     lv_obj_remove_style_all(ui_box_main);
95*4882a593Smuzhiyun     lv_obj_set_width(ui_box_main, lv_pct(100));
96*4882a593Smuzhiyun     lv_obj_set_height(ui_box_main, lv_pct(33));
97*4882a593Smuzhiyun     lv_obj_align(ui_box_main, LV_ALIGN_TOP_LEFT, 0, lv_pct(33));
98*4882a593Smuzhiyun     lv_obj_set_flex_flow(ui_box_main, LV_FLEX_FLOW_ROW);//行
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun     //Smart home page
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun     ui_smart_home_box = lv_obj_create(ui_box_main);
103*4882a593Smuzhiyun     lv_obj_remove_style_all(ui_smart_home_box);
104*4882a593Smuzhiyun     lv_obj_set_width(ui_smart_home_box, lv_pct(25));
105*4882a593Smuzhiyun     lv_obj_set_height(ui_smart_home_box, lv_pct(100));
106*4882a593Smuzhiyun     lv_obj_align(ui_smart_home_box, LV_ALIGN_TOP_LEFT, 0, 0);
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun     ui_smart_home = lv_obj_create(ui_smart_home_box);
109*4882a593Smuzhiyun     lv_obj_set_width(ui_smart_home, 130);
110*4882a593Smuzhiyun     lv_obj_set_height(ui_smart_home, 130);
111*4882a593Smuzhiyun     lv_obj_set_align(ui_smart_home, LV_ALIGN_CENTER);
112*4882a593Smuzhiyun     lv_obj_clear_flag(ui_smart_home, LV_OBJ_FLAG_SCROLLABLE);      /// Flags
113*4882a593Smuzhiyun     lv_obj_set_style_bg_color(ui_smart_home, lv_color_hex(0xDED6D6), LV_PART_MAIN | LV_STATE_DEFAULT);
114*4882a593Smuzhiyun     lv_obj_set_style_bg_opa(ui_smart_home, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
115*4882a593Smuzhiyun     lv_obj_set_style_bg_img_src(ui_smart_home, IMG_SMART_HOME, LV_PART_MAIN | LV_STATE_DEFAULT);
116*4882a593Smuzhiyun     lv_obj_add_event_cb(ui_smart_home, page_switch, LV_EVENT_CLICKED, smart_home_ui_init);
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun     ui_Label1 = lv_label_create(ui_smart_home_box);
119*4882a593Smuzhiyun     lv_obj_set_width(ui_Label1, LV_SIZE_CONTENT);   /// 1
120*4882a593Smuzhiyun     lv_obj_set_height(ui_Label1, LV_SIZE_CONTENT);    /// 1
121*4882a593Smuzhiyun     lv_obj_align(ui_Label1, LV_ALIGN_TOP_LEFT, 4, 135);
122*4882a593Smuzhiyun     lv_obj_set_align(ui_Label1, LV_ALIGN_CENTER);
123*4882a593Smuzhiyun     lv_obj_add_style(ui_Label1, &style_txt_m, LV_PART_MAIN);
124*4882a593Smuzhiyun     lv_obj_set_style_text_color(ui_Label1, lv_color_white(), LV_PART_MAIN);
125*4882a593Smuzhiyun     lv_label_set_text(ui_Label1, "智能家居");
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun     //furniture_control
128*4882a593Smuzhiyun     ui_furniture_control_box = lv_obj_create(ui_box_main);
129*4882a593Smuzhiyun     lv_obj_remove_style_all(ui_furniture_control_box);
130*4882a593Smuzhiyun     lv_obj_set_width(ui_furniture_control_box, lv_pct(25));
131*4882a593Smuzhiyun     lv_obj_set_height(ui_furniture_control_box, lv_pct(100));
132*4882a593Smuzhiyun     lv_obj_align(ui_furniture_control_box, LV_ALIGN_TOP_LEFT, 0, 0);
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun     ui_furniture_control = lv_obj_create(ui_furniture_control_box);
135*4882a593Smuzhiyun     lv_obj_set_width(ui_furniture_control, 130);
136*4882a593Smuzhiyun     lv_obj_set_height(ui_furniture_control, 130);
137*4882a593Smuzhiyun     lv_obj_set_align(ui_furniture_control, LV_ALIGN_CENTER);
138*4882a593Smuzhiyun     lv_obj_clear_flag(ui_furniture_control, LV_OBJ_FLAG_SCROLLABLE);      /// Flags
139*4882a593Smuzhiyun     lv_obj_set_style_bg_color(ui_furniture_control, lv_color_hex(0xDED6D6), LV_PART_MAIN | LV_STATE_DEFAULT);
140*4882a593Smuzhiyun     lv_obj_set_style_bg_opa(ui_furniture_control, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
141*4882a593Smuzhiyun     lv_obj_set_style_bg_img_src(ui_furniture_control, IMG_FURNITURE, LV_PART_MAIN | LV_STATE_DEFAULT);
142*4882a593Smuzhiyun     if (ui_furniture_control != NULL) {
143*4882a593Smuzhiyun         lv_obj_add_event_cb(ui_furniture_control, home_page_jump_furniture_control_callback, LV_EVENT_CLICKED, NULL);
144*4882a593Smuzhiyun     }
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun     ui_Label4 = lv_label_create(ui_furniture_control_box);
147*4882a593Smuzhiyun     lv_obj_set_width(ui_Label4, LV_SIZE_CONTENT);   /// 1
148*4882a593Smuzhiyun     lv_obj_set_height(ui_Label4, LV_SIZE_CONTENT);    /// 1
149*4882a593Smuzhiyun     lv_obj_align(ui_Label4, LV_ALIGN_TOP_LEFT, 4, 135);
150*4882a593Smuzhiyun     lv_obj_set_align(ui_Label4, LV_ALIGN_CENTER);
151*4882a593Smuzhiyun     lv_obj_add_style(ui_Label4, &style_txt_m, LV_PART_MAIN);
152*4882a593Smuzhiyun     lv_obj_set_style_text_color(ui_Label4, lv_color_white(), LV_PART_MAIN);
153*4882a593Smuzhiyun     lv_label_set_text(ui_Label4, "家电显控");
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun     //phone page
157*4882a593Smuzhiyun     ui_phone_box = lv_obj_create(ui_box_main);
158*4882a593Smuzhiyun     lv_obj_remove_style_all(ui_phone_box);
159*4882a593Smuzhiyun     lv_obj_set_width(ui_phone_box, lv_pct(25));
160*4882a593Smuzhiyun     lv_obj_set_height(ui_phone_box, lv_pct(100));
161*4882a593Smuzhiyun     lv_obj_align(ui_phone_box, LV_ALIGN_TOP_LEFT, 0, 0);
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun     ui_phone = lv_obj_create(ui_phone_box);
164*4882a593Smuzhiyun     lv_obj_set_width(ui_phone, 130);
165*4882a593Smuzhiyun     lv_obj_set_height(ui_phone, 130);
166*4882a593Smuzhiyun     lv_obj_set_align(ui_phone, LV_ALIGN_CENTER);
167*4882a593Smuzhiyun     lv_obj_clear_flag(ui_phone, LV_OBJ_FLAG_SCROLLABLE);      /// Flags
168*4882a593Smuzhiyun     lv_obj_set_style_bg_color(ui_phone, lv_color_hex(0xDED6D6), LV_PART_MAIN | LV_STATE_DEFAULT);
169*4882a593Smuzhiyun     lv_obj_set_style_bg_opa(ui_phone, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
170*4882a593Smuzhiyun     lv_obj_set_style_bg_img_src(ui_phone, IMG_PHONE, LV_PART_MAIN | LV_STATE_DEFAULT);
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun     ui_Label3 = lv_label_create(ui_phone_box);
173*4882a593Smuzhiyun     lv_obj_set_width(ui_Label3, LV_SIZE_CONTENT);   /// 1
174*4882a593Smuzhiyun     lv_obj_set_height(ui_Label3, LV_SIZE_CONTENT);    /// 1
175*4882a593Smuzhiyun     lv_obj_align(ui_Label3, LV_ALIGN_TOP_LEFT, 4, 135);
176*4882a593Smuzhiyun     lv_obj_set_align(ui_Label3, LV_ALIGN_CENTER);
177*4882a593Smuzhiyun     lv_obj_add_style(ui_Label3, &style_txt_m, LV_PART_MAIN);
178*4882a593Smuzhiyun     lv_obj_set_style_text_color(ui_Label3, lv_color_white(), LV_PART_MAIN);
179*4882a593Smuzhiyun     lv_label_set_text(ui_Label3, "楼宇对讲");
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun     //setting page
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun     ui_setting_box = lv_obj_create(ui_box_main);
184*4882a593Smuzhiyun     lv_obj_remove_style_all(ui_setting_box);
185*4882a593Smuzhiyun     lv_obj_set_width(ui_setting_box, lv_pct(25));
186*4882a593Smuzhiyun     lv_obj_set_height(ui_setting_box, lv_pct(100));
187*4882a593Smuzhiyun     lv_obj_align(ui_setting_box, LV_ALIGN_TOP_LEFT, 0, 0);
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun     ui_setting = lv_obj_create(ui_setting_box);
190*4882a593Smuzhiyun     lv_obj_set_width(ui_setting, 130);
191*4882a593Smuzhiyun     lv_obj_set_height(ui_setting, 130);
192*4882a593Smuzhiyun     lv_obj_set_align(ui_setting, LV_ALIGN_CENTER);
193*4882a593Smuzhiyun     lv_obj_clear_flag(ui_setting, LV_OBJ_FLAG_SCROLLABLE);      /// Flags
194*4882a593Smuzhiyun     lv_obj_set_style_bg_color(ui_setting, lv_color_hex(0xDED6D6), LV_PART_MAIN | LV_STATE_DEFAULT);
195*4882a593Smuzhiyun     lv_obj_set_style_bg_opa(ui_setting, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
196*4882a593Smuzhiyun     lv_obj_set_style_bg_img_src(ui_setting, IMG_SETTING, LV_PART_MAIN | LV_STATE_DEFAULT);
197*4882a593Smuzhiyun     lv_obj_add_event_cb(ui_setting, page_switch, LV_EVENT_CLICKED, setting_ui_init);
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun     ui_Label6 = lv_label_create(ui_setting_box);
200*4882a593Smuzhiyun     lv_obj_set_width(ui_Label6, LV_SIZE_CONTENT);   /// 1
201*4882a593Smuzhiyun     lv_obj_set_height(ui_Label6, LV_SIZE_CONTENT);    /// 1
202*4882a593Smuzhiyun     lv_obj_align(ui_Label6, LV_ALIGN_TOP_LEFT, 4, 135);
203*4882a593Smuzhiyun     lv_obj_set_align(ui_Label6, LV_ALIGN_CENTER);
204*4882a593Smuzhiyun     lv_obj_add_style(ui_Label6, &style_txt_m, LV_PART_MAIN);
205*4882a593Smuzhiyun     lv_obj_set_style_text_color(ui_Label6, lv_color_white(), LV_PART_MAIN);
206*4882a593Smuzhiyun     lv_label_set_text(ui_Label6, "设置");
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun     ui_wifi = lv_img_create(ui_Screen1);
209*4882a593Smuzhiyun     lv_obj_align(ui_wifi, LV_ALIGN_TOP_RIGHT, -10, 10);
210*4882a593Smuzhiyun     lv_obj_set_width(ui_wifi, LV_SIZE_CONTENT);   /// 64
211*4882a593Smuzhiyun     lv_obj_set_height(ui_wifi, LV_SIZE_CONTENT);    /// 64
212*4882a593Smuzhiyun     lv_img_set_zoom(ui_wifi, 120);
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun     ui_Label_time = lv_label_create(ui_Screen1);
215*4882a593Smuzhiyun     lv_obj_set_width(ui_Label_time, LV_SIZE_CONTENT);   /// 1
216*4882a593Smuzhiyun     lv_obj_set_height(ui_Label_time, LV_SIZE_CONTENT);    /// 1
217*4882a593Smuzhiyun     lv_obj_align(ui_Label_time, LV_ALIGN_TOP_RIGHT, -100, 30);
218*4882a593Smuzhiyun     date_update(NULL);
219*4882a593Smuzhiyun     timer_date = lv_timer_create(date_update, 1000, NULL);
220*4882a593Smuzhiyun     lv_timer_enable(timer_date);
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun     ui_logo = lv_img_create(ui_Screen1);
223*4882a593Smuzhiyun     lv_img_set_src(ui_logo, IMG_RK_LOGO);
224*4882a593Smuzhiyun     lv_obj_set_width(ui_logo, LV_SIZE_CONTENT);   /// 186
225*4882a593Smuzhiyun     lv_obj_set_height(ui_logo, LV_SIZE_CONTENT);    /// 90
226*4882a593Smuzhiyun     lv_obj_align(ui_logo, LV_ALIGN_TOP_LEFT, 10, 10);
227*4882a593Smuzhiyun     lv_obj_add_flag(ui_logo, LV_OBJ_FLAG_ADV_HITTEST);     /// Flags
228*4882a593Smuzhiyun     lv_obj_clear_flag(ui_logo, LV_OBJ_FLAG_SCROLLABLE);      /// Flags
229*4882a593Smuzhiyun     lv_img_set_zoom(ui_logo, 150);
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun }
232*4882a593Smuzhiyun 
home_ui_init(void)233*4882a593Smuzhiyun void home_ui_init(void)
234*4882a593Smuzhiyun {
235*4882a593Smuzhiyun     if (!ui_Screen1)
236*4882a593Smuzhiyun         ui_Screen1_screen_init();
237*4882a593Smuzhiyun     lv_disp_load_scr(ui_Screen1);
238*4882a593Smuzhiyun     //lv_scr_load_anim(ui_Screen1, LV_SCR_LOAD_ANIM_NONE,
239*4882a593Smuzhiyun     //                 0, 0, true);
240*4882a593Smuzhiyun }
241*4882a593Smuzhiyun 
rk_demo_init(void)242*4882a593Smuzhiyun void rk_demo_init(void)
243*4882a593Smuzhiyun {
244*4882a593Smuzhiyun     LV_EVENT_GET_COMP_CHILD = lv_event_register_id();
245*4882a593Smuzhiyun 
246*4882a593Smuzhiyun     lv_disp_t * dispp = lv_disp_get_default();
247*4882a593Smuzhiyun     lv_theme_t * theme = lv_theme_default_init(dispp, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED),
248*4882a593Smuzhiyun                                                false, LV_FONT_DEFAULT);
249*4882a593Smuzhiyun     lv_disp_set_theme(dispp, theme);
250*4882a593Smuzhiyun 
251*4882a593Smuzhiyun     home_ui_init();
252*4882a593Smuzhiyun }
253