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