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