1 /**
2 * @file lv_demo_high_res_api_example.c
3 *
4 */
5
6 /*********************
7 * INCLUDES
8 *********************/
9
10 #include "lv_demo_high_res.h"
11 #if LV_USE_DEMO_HIGH_RES
12
13 /*********************
14 * DEFINES
15 *********************/
16
17 /**********************
18 * TYPEDEFS
19 **********************/
20
21 /**********************
22 * STATIC PROTOTYPES
23 **********************/
24
25 static void exit_cb(lv_demo_high_res_api_t * api);
26 static void output_subject_observer_cb(lv_observer_t * observer, lv_subject_t * subject);
27 static void locked_observer_cb(lv_observer_t * observer, lv_subject_t * subject);
28 static void locked_timer_cb(lv_timer_t * t);
29 static void delete_timer_cb(lv_event_t * e);
30 static void clock_timer_cb(lv_timer_t * t);
31
32 /**********************
33 * STATIC VARIABLES
34 **********************/
35
36 /**********************
37 * MACROS
38 **********************/
39
40 /**********************
41 * GLOBAL FUNCTIONS
42 **********************/
43
lv_demo_high_res_api_example(const char * assets_path,const char * logo_path,const char * slides_path)44 void lv_demo_high_res_api_example(const char * assets_path, const char * logo_path, const char * slides_path)
45 {
46 lv_demo_high_res_api_t * api = lv_demo_high_res(assets_path, logo_path, slides_path, exit_cb);
47
48 /* see lv_demo_high_res.h for documentation of the available subjects */
49 lv_subject_set_int(&api->subjects.volume, 50);
50 lv_subject_set_pointer(&api->subjects.month_name, "August");
51 lv_subject_set_int(&api->subjects.month_day, 1);
52 lv_subject_set_pointer(&api->subjects.week_day_name, "Wednesday");
53 lv_subject_set_int(&api->subjects.temperature_outdoor, 16 * 10); /* 16 degrees C */
54 lv_subject_set_int(&api->subjects.main_light_temperature, 4500); /* 4500 degrees K */
55 lv_subject_set_int(&api->subjects.thermostat_target_temperature, 25 * 10); /* 25 degrees C */
56 lv_subject_set_pointer(&api->subjects.wifi_ssid, "my home Wi-Fi network");
57 lv_subject_set_pointer(&api->subjects.wifi_ip, "192.168.1.1");
58
59 lv_subject_add_observer(&api->subjects.music_play, output_subject_observer_cb, (void *)"music_play");
60 lv_subject_add_observer(&api->subjects.locked, output_subject_observer_cb, (void *)"locked");
61 lv_subject_add_observer(&api->subjects.volume, output_subject_observer_cb, (void *)"volume");
62 lv_subject_add_observer(&api->subjects.main_light_temperature, output_subject_observer_cb,
63 (void *)"main_light_temperature");
64 lv_subject_add_observer(&api->subjects.main_light_intensity, output_subject_observer_cb,
65 (void *)"main_light_intensity");
66 lv_subject_add_observer(&api->subjects.thermostat_fan_speed, output_subject_observer_cb,
67 (void *)"thermostat_fan_speed");
68 lv_subject_add_observer(&api->subjects.thermostat_target_temperature, output_subject_observer_cb,
69 (void *)"thermostat_target_temperature");
70
71 /* unlock after being locked for 3 seconds */
72 lv_timer_t * locked_timer = lv_timer_create_basic();
73 lv_obj_add_event_cb(api->base_obj, delete_timer_cb, LV_EVENT_DELETE, locked_timer);
74 lv_subject_add_observer(&api->subjects.locked, locked_observer_cb, locked_timer);
75
76 /* slowly increment the time */
77 lv_timer_t * clock_timer = lv_timer_create(clock_timer_cb, 10000, api);
78 lv_obj_add_event_cb(api->base_obj, delete_timer_cb, LV_EVENT_DELETE, clock_timer);
79 }
80
81 /**********************
82 * STATIC FUNCTIONS
83 **********************/
84
exit_cb(lv_demo_high_res_api_t * api)85 static void exit_cb(lv_demo_high_res_api_t * api)
86 {
87 lv_obj_delete(api->base_obj);
88 }
89
output_subject_observer_cb(lv_observer_t * observer,lv_subject_t * subject)90 static void output_subject_observer_cb(lv_observer_t * observer, lv_subject_t * subject)
91 {
92 const char * subject_name = lv_observer_get_user_data(observer);
93 LV_LOG_USER("%s output subject value: %"PRId32, subject_name, lv_subject_get_int(subject));
94 }
95
locked_observer_cb(lv_observer_t * observer,lv_subject_t * subject)96 static void locked_observer_cb(lv_observer_t * observer, lv_subject_t * subject)
97 {
98 if(lv_subject_get_int(subject)) {
99 /* unlock after being locked for 3 seconds */
100 lv_timer_t * timer = lv_observer_get_user_data(observer);
101 lv_timer_set_cb(timer, locked_timer_cb);
102 lv_timer_set_period(timer, 3000);
103 lv_timer_set_user_data(timer, subject);
104 lv_timer_set_repeat_count(timer, 1);
105 lv_timer_set_auto_delete(timer, false);
106 lv_timer_resume(timer);
107 }
108 }
109
locked_timer_cb(lv_timer_t * t)110 static void locked_timer_cb(lv_timer_t * t)
111 {
112 lv_subject_t * locked_subject = lv_timer_get_user_data(t);
113 lv_subject_set_int(locked_subject, 0);
114 }
115
delete_timer_cb(lv_event_t * e)116 static void delete_timer_cb(lv_event_t * e)
117 {
118 lv_timer_t * timer = lv_event_get_user_data(e);
119 lv_timer_delete(timer);
120 }
121
clock_timer_cb(lv_timer_t * t)122 static void clock_timer_cb(lv_timer_t * t)
123 {
124 /* slowly increment the time */
125 lv_demo_high_res_api_t * api = lv_timer_get_user_data(t);
126 int32_t minutes = lv_subject_get_int(&api->subjects.minute);
127 minutes += 1;
128 if(minutes > 59) {
129 minutes = 0;
130 int32_t hour = lv_subject_get_int(&api->subjects.hour);
131 hour += 1;
132 if(hour > 12) {
133 hour = 1;
134 }
135 lv_subject_set_int(&api->subjects.hour, hour);
136 }
137 lv_subject_set_int(&api->subjects.minute, minutes);
138 }
139
140 #endif /*LV_USE_DEMO_HIGH_RES*/
141