1 #include "demo_guix_smart_watch.h"
2
3 /* Extern system time. */
4 extern TIME system_time;
5 static TIME screen_time_record = { -1, -1, -1, -1, -1, -1 };
6
7 /* Define text id list for day of week names. */
8 static GX_RESOURCE_ID day_name_ids[] = {
9 GX_STRING_ID_SUNDAY,
10 GX_STRING_ID_MONDAY,
11 GX_STRING_ID_TUESDAY,
12 GX_STRING_ID_WEDNESDAY,
13 GX_STRING_ID_THURSDAY,
14 GX_STRING_ID_FRIDAY,
15 GX_STRING_ID_SATURDAY
16 };
17
18 /* Define text id list for month names. */
19 static GX_RESOURCE_ID month_name_ids[] = {
20 GX_STRING_ID_JANUARY,
21 GX_STRING_ID_FEBRUARY,
22 GX_STRING_ID_MARCH,
23 GX_STRING_ID_APRIL,
24 GX_STRING_ID_MAY,
25 GX_STRING_ID_JUNE,
26 GX_STRING_ID_JULY,
27 GX_STRING_ID_AUGUST,
28 GX_STRING_ID_SEPTEMBER,
29 GX_STRING_ID_OCTOBER,
30 GX_STRING_ID_NOVEMBER,
31 GX_STRING_ID_DECEMBER
32 };
33
34 /******************************************************************************************/
35 /* Calculate string length. */
36 /******************************************************************************************/
string_length_get(GX_CONST GX_CHAR * input_string,UINT max_string_length)37 static UINT string_length_get(GX_CONST GX_CHAR* input_string, UINT max_string_length)
38 {
39 UINT length = 0;
40
41 if (input_string)
42 {
43 /* Traverse the string. */
44 for (length = 0; input_string[length]; length++)
45 {
46 /* Check if the string length is bigger than the max string length. */
47 if (length >= max_string_length)
48 {
49 break;
50 }
51 }
52 }
53
54 return length;
55 }
56
57 /******************************************************************************************/
58 /* Update clock time. */
59 /******************************************************************************************/
screen_time_update()60 static VOID screen_time_update()
61 {
62 GX_RESOURCE_ID am_pm_text_id;
63 GX_CHAR date_string_buffer[20];
64 GX_STRING string;
65
66 if (system_time.second & 0x1)
67 {
68 gx_widget_fill_color_set(&home_screen.home_screen_time_second_up, GX_COLOR_ID_WHITE, GX_COLOR_ID_WHITE, GX_COLOR_ID_WHITE);
69 gx_widget_fill_color_set(&home_screen.home_screen_time_second_down, GX_COLOR_ID_WHITE, GX_COLOR_ID_WHITE, GX_COLOR_ID_WHITE);
70 }
71 else
72 {
73 gx_widget_fill_color_set(&home_screen.home_screen_time_second_up, GX_COLOR_ID_GRAY, GX_COLOR_ID_GRAY, GX_COLOR_ID_GRAY);
74 gx_widget_fill_color_set(&home_screen.home_screen_time_second_down, GX_COLOR_ID_GRAY, GX_COLOR_ID_GRAY, GX_COLOR_ID_GRAY);
75 }
76
77 if (system_time.hour < 12)
78 {
79 am_pm_text_id = GX_STRING_ID_AM;
80 }
81 else
82 {
83 am_pm_text_id = GX_STRING_ID_PM;
84 }
85
86 if (screen_time_record.hour != system_time.hour)
87 {
88 gx_numeric_prompt_value_set(&home_screen.home_screen_time_hour, system_time.hour);
89 }
90
91 if (screen_time_record.minute != system_time.minute)
92 {
93 gx_numeric_prompt_value_set(&home_screen.home_screen_time_minute, system_time.minute);
94 }
95
96 if (home_screen.home_screen_am_pm.gx_prompt_text_id != am_pm_text_id)
97 {
98 gx_prompt_text_id_set(&home_screen.home_screen_am_pm, am_pm_text_id);
99 }
100
101 if (screen_time_record.day_of_week != system_time.day_of_week)
102 {
103 gx_prompt_text_id_set(&home_screen.home_screen_day_of_week, day_name_ids[system_time.day_of_week]);
104 }
105
106 if ((screen_time_record.month != system_time.month) || (screen_time_record.day != system_time.day))
107 {
108 gx_widget_string_get_ext(&home_screen, month_name_ids[system_time.month - 1], &string);
109
110 if (string.gx_string_ptr)
111 {
112 sprintf(date_string_buffer, ", %s %d", string.gx_string_ptr, system_time.day);
113
114 string.gx_string_ptr = date_string_buffer;
115 string.gx_string_length = string_length_get(date_string_buffer, sizeof(date_string_buffer) - 1);
116 gx_prompt_text_set_ext(&home_screen.home_screen_date, &string);
117 }
118 }
119
120 screen_time_record = system_time;
121 }
122
123 /******************************************************************************************/
124 /* Override the default event processing of "home_screen" to handle signals from my child */
125 /* widgets. */
126 /******************************************************************************************/
home_screen_event_handler(GX_WINDOW * window,GX_EVENT * event_ptr)127 UINT home_screen_event_handler(GX_WINDOW* window, GX_EVENT* event_ptr)
128 {
129 switch (event_ptr->gx_event_type)
130 {
131 case GX_EVENT_SHOW:
132
133 gx_window_event_process(window, event_ptr);
134
135 /* Update clock time. */
136 screen_time_update();
137
138 /* Start a timer to update clock. */
139 gx_system_timer_start(window, SCREEN_CLOCK_TIMER_ID, GX_TICKS_SECOND, GX_TICKS_SECOND);
140
141 return GX_SUCCESS;
142
143 case GX_EVENT_HIDE:
144
145 /* Stop clock timer. */
146 gx_system_timer_stop(window, SCREEN_CLOCK_TIMER_ID);
147
148 return gx_window_event_process(window, event_ptr);
149
150 case USER_EVENT_ANIMATION_START:
151 gx_sprite_start(&home_screen.home_screen_sprite, 0);
152 break;
153
154 case USER_EVENT_ANIMATION_STOP:
155 gx_sprite_stop(&home_screen.home_screen_sprite);
156 break;
157
158 case GX_EVENT_TIMER:
159
160 if (event_ptr->gx_event_payload.gx_event_timer_id == SCREEN_CLOCK_TIMER_ID)
161 {
162 /* Update clock time. */
163 screen_time_update();
164 }
165 break;
166
167 default:
168 return gx_window_event_process(window, event_ptr);
169 }
170
171 return 0;
172 }
173
174 /******************************************************************************************/
175 /* Define format function for numeric prompt to show time. */
176 /******************************************************************************************/
time_format(GX_NUMERIC_PROMPT * prompt,INT value)177 VOID time_format(GX_NUMERIC_PROMPT* prompt, INT value)
178 {
179 if (value < 10)
180 {
181 prompt->gx_numeric_prompt_buffer[0] = '0';
182 prompt->gx_numeric_prompt_buffer[1] = '0' + value;
183 }
184 else if (value < 100)
185 {
186 prompt->gx_numeric_prompt_buffer[0] = '0' + (value / 10);
187 prompt->gx_numeric_prompt_buffer[1] = '0' + (value % 10);
188 }
189 }