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