xref: /OK3568_Linux_fs/app/lvgl_demo/rk_demo/setting/bt_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 
7 #include <lvgl/lvgl.h>
8 
9 #include "main.h"
10 #include "cJSON.h"
11 #include "ui_resource.h"
12 
13 static int init_done = 0;
14 
15 static lv_obj_t * bg;
16 static lv_obj_t * item_scan;
17 static lv_obj_t * item_scan_icon;
18 
19 static lv_obj_t * part_switch;
20 static lv_obj_t * part_saved;
21 static lv_obj_t * part_scaned;
22 
23 static lv_obj_t * bt_label;
24 static lv_obj_t * bt_switch;
25 
26 static lv_obj_t * item_label_saved;
27 static lv_obj_t * item_label_scaned;
28 
29 static lv_obj_t * item_list_saved;
30 static lv_obj_t * item_list_scaned;
31 
32 static lv_timer_t * timer;
33 
34 static lv_anim_t icon_anim;
35 
36 static lv_style_t style_txt;
37 static lv_style_t style_list;
38 
39 static volatile bool rkbt_gonff = false;
40 static int bt_result = 0;
41 
42 static void lv_saved_bt_list(lv_obj_t * parent);
43 
bt_connected(void)44 int bt_connected(void)
45 {
46     return 0;
47 }
48 
read_saved_bt(int check)49 static void read_saved_bt(int check)
50 {
51 }
52 
style_init(void)53 static void style_init(void)
54 {
55     lv_style_init(&style_txt);
56     lv_style_set_text_font(&style_txt, ttf_main_s.font);
57     lv_style_set_text_color(&style_txt, lv_color_make(0xff, 0x23, 0x23));
58 
59     lv_style_init(&style_list);
60     lv_style_set_text_font(&style_list, ttf_main_m.font);
61     lv_style_set_text_color(&style_list, lv_color_black());
62 }
63 
icon_anim_end(lv_anim_t * anim)64 static void icon_anim_end(lv_anim_t *anim)
65 {
66     if (!init_done)
67         return;
68 
69     lv_obj_clear_flag(item_scan, LV_OBJ_FLAG_HIDDEN);
70     lv_obj_add_flag(item_scan_icon, LV_OBJ_FLAG_HIDDEN);
71 }
72 
icon_anim_cb(void * var,int32_t v)73 static void icon_anim_cb(void * var, int32_t v)
74 {
75     lv_img_set_angle(var, v);
76 }
77 
scan_btn_cb(lv_event_t * e)78 static void scan_btn_cb(lv_event_t * e)
79 {
80     lv_obj_add_flag(item_scan, LV_OBJ_FLAG_HIDDEN);
81     lv_obj_clear_flag(item_scan_icon, LV_OBJ_FLAG_HIDDEN);
82     lv_anim_start(&icon_anim);
83 }
84 
label_drawed_cb(lv_event_t * e)85 static void label_drawed_cb(lv_event_t * e)
86 {
87     if (!item_scan)
88         return;
89 
90     lv_obj_align_to(item_scan, lv_event_get_target(e),
91                     LV_ALIGN_OUT_TOP_RIGHT, 0, 0);
92 }
93 
bt_update(lv_timer_t * timer)94 static void bt_update(lv_timer_t * timer)
95 {
96     if (bt_result)
97     {
98         lv_anim_del(&icon_anim, NULL);
99         bt_result = 0;
100     }
101 }
102 
switch_toggled(lv_event_t * e)103 static void switch_toggled(lv_event_t * e)
104 {
105     lv_obj_t * sw = lv_event_get_target(e);
106 
107     if (lv_obj_has_state(sw, LV_STATE_CHECKED))
108     {
109         lv_obj_clear_flag(item_label_saved,
110                           LV_OBJ_FLAG_HIDDEN);
111         lv_obj_clear_flag(part_saved,
112                           LV_OBJ_FLAG_HIDDEN);
113         lv_obj_clear_flag(item_label_scaned,
114                           LV_OBJ_FLAG_HIDDEN);
115         lv_obj_clear_flag(part_scaned,
116                           LV_OBJ_FLAG_HIDDEN);
117         lv_obj_clear_flag(item_scan,
118                           LV_OBJ_FLAG_HIDDEN);
119     }
120     else
121     {
122         lv_obj_add_flag(item_label_saved,
123                           LV_OBJ_FLAG_HIDDEN);
124         lv_obj_add_flag(part_saved,
125                           LV_OBJ_FLAG_HIDDEN);
126         lv_obj_add_flag(item_label_scaned,
127                           LV_OBJ_FLAG_HIDDEN);
128         lv_obj_add_flag(part_scaned,
129                           LV_OBJ_FLAG_HIDDEN);
130         lv_obj_add_flag(item_scan,
131                           LV_OBJ_FLAG_HIDDEN);
132     }
133 }
134 
menu_bt_init(lv_obj_t * parent)135 lv_obj_t * menu_bt_init(lv_obj_t * parent)
136 {
137     style_init();
138 
139     bg = lv_obj_create(parent);
140     lv_obj_remove_style_all(bg);
141     lv_obj_set_size(bg, lv_pct(100), lv_pct(100));
142     lv_obj_set_flex_flow(bg, LV_FLEX_FLOW_COLUMN);
143     lv_obj_center(bg);
144 
145     part_switch = lv_obj_create(bg);
146     lv_obj_set_width(part_switch, lv_pct(100));
147     lv_obj_set_height(part_switch, LV_SIZE_CONTENT);
148     lv_obj_add_style(part_switch, &style_txt, LV_PART_MAIN);
149 
150     bt_label = lv_label_create(part_switch);
151     lv_obj_align(bt_label, LV_ALIGN_LEFT_MID, 0, 0);
152     lv_label_set_text(bt_label, "BT");
153     lv_obj_add_style(bt_label, &style_txt, LV_PART_MAIN);
154     bt_switch = lv_switch_create(part_switch);
155     lv_obj_align(bt_switch, LV_ALIGN_RIGHT_MID, 0, 0);
156     lv_obj_add_state(bt_switch, LV_STATE_CHECKED);
157     lv_obj_add_event_cb(bt_switch, switch_toggled, LV_EVENT_VALUE_CHANGED, NULL);
158 
159     item_label_saved = lv_label_create(bg);
160     lv_label_set_text(item_label_saved, "已保存设备");
161     lv_obj_add_style(item_label_saved, &style_txt, LV_PART_MAIN);
162 
163     part_saved = lv_obj_create(bg);
164     lv_obj_remove_style_all(part_saved);
165     lv_obj_set_width(part_saved, lv_pct(100));
166     lv_obj_set_height(part_saved, LV_SIZE_CONTENT);
167     lv_obj_set_flex_flow(part_saved, LV_FLEX_FLOW_COLUMN);
168 
169     item_label_scaned = lv_label_create(bg);
170     lv_label_set_text(item_label_scaned, "可用设备");
171     lv_obj_add_style(item_label_scaned, &style_txt, LV_PART_MAIN);
172 
173     part_scaned = lv_obj_create(bg);
174     lv_obj_remove_style_all(part_scaned);
175     lv_obj_set_width(part_scaned, lv_pct(100));
176     lv_obj_set_height(part_scaned, LV_SIZE_CONTENT);
177     lv_obj_set_flex_flow(part_scaned, LV_FLEX_FLOW_COLUMN);
178 
179     lv_obj_add_event_cb(part_scaned, label_drawed_cb, LV_EVENT_DRAW_POST_END, NULL);
180 
181     item_list_saved = lv_list_create(part_saved);
182     lv_obj_set_size(item_list_saved, lv_pct(100), LV_SIZE_CONTENT);
183     lv_obj_add_style(item_list_saved, &style_list, LV_PART_MAIN);
184     lv_list_add_btn(item_list_saved, NULL, "无");
185 
186     item_list_scaned = lv_list_create(part_scaned);
187     lv_obj_set_size(item_list_scaned, lv_pct(100), LV_SIZE_CONTENT);
188     lv_obj_add_style(item_list_scaned, &style_list, LV_PART_MAIN);
189     lv_list_add_btn(item_list_scaned, NULL, "无");
190 
191     read_saved_bt(1);
192 
193     item_scan = lv_label_create(bg);
194     lv_label_set_text(item_scan, "刷新");
195     lv_obj_add_style(item_scan, &style_txt, LV_PART_MAIN);
196     lv_obj_align_to(item_scan, part_scaned, LV_ALIGN_OUT_TOP_RIGHT, 0, 0);
197     lv_obj_add_event_cb(item_scan, scan_btn_cb, LV_EVENT_CLICKED, NULL);
198     lv_obj_add_flag(item_scan, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_IGNORE_LAYOUT);
199 
200     item_scan_icon = lv_img_create(bg);
201     lv_img_set_src(item_scan_icon, WIFI_SCANNING);
202     lv_img_set_angle(item_scan_icon, 0);
203     lv_obj_align_to(item_scan_icon, item_scan, LV_ALIGN_CENTER, 0, 0);
204     lv_obj_add_flag(item_scan_icon, LV_OBJ_FLAG_HIDDEN | LV_OBJ_FLAG_IGNORE_LAYOUT);
205 
206     lv_anim_init(&icon_anim);
207     lv_anim_set_var(&icon_anim, item_scan_icon);
208     lv_anim_set_values(&icon_anim, 0, 3600);
209     lv_anim_set_time(&icon_anim, 1000);
210     lv_anim_set_exec_cb(&icon_anim, icon_anim_cb);
211     lv_anim_set_path_cb(&icon_anim, lv_anim_path_linear);
212     lv_anim_set_deleted_cb(&icon_anim, icon_anim_end);
213     lv_anim_set_repeat_count(&icon_anim, 3/*LV_ANIM_REPEAT_INFINITE*/);
214     scan_btn_cb(NULL);
215 
216     timer = lv_timer_create(bt_update, 1000, NULL);
217     lv_timer_enable(timer);
218 
219     init_done = 1;
220 
221     return bg;
222 }
223 
menu_bt_deinit(void)224 void menu_bt_deinit(void)
225 {
226     init_done = 0;
227     lv_timer_del(timer);
228     lv_anim_set_deleted_cb(&icon_anim, NULL);
229     lv_anim_set_exec_cb(&icon_anim, NULL);
230     lv_anim_del(&icon_anim, NULL);
231     lv_obj_del(bg);
232     bg = NULL;
233 }
234 
235