1 /* This is a small demo of the high-performance GUIX graphics framework. */
2
3 #include "demo_guix_car_infotainment.h"
4
5 /* Define total number animatin steps. */
6 #define TOTAL_NUMBER_ANIMATION_STEPS 10
7
8 #define CURRENT_NUMBER_VAL_GET(target_val) \
9 (target_val * number_animation_step / TOTAL_NUMBER_ANIMATION_STEPS)
10
11 /* Define sprite frame lists for light animation. */
12 GX_SPRITE_FRAME light_frame_list_1[] = {
13 {GX_PIXELMAP_ID_LLIGHT01, 0, 0, 5, 0, 255},
14 {GX_PIXELMAP_ID_LLIGHT02, 0, 0, 5, 0, 255},
15 {GX_PIXELMAP_ID_LLIGHT03, 0, 0, 5, 0, 255},
16 {GX_PIXELMAP_ID_LLIGHT04, 0, 0, 5, 0, 255},
17 {GX_PIXELMAP_ID_LLIGHT05, 0, 0, 5, 0, 255},
18 {GX_PIXELMAP_ID_LLIGHT06, 0, 0, 5, 0, 255},
19 {GX_PIXELMAP_ID_LLIGHT07, 0, 0, 5, 0, 255},
20 {GX_PIXELMAP_ID_LLIGHT08, 0, 0, 5, 0, 255},
21 {GX_PIXELMAP_ID_LLIGHT09, 0, 0, 5, 0, 255},
22 {GX_PIXELMAP_ID_LLIGHT10, 0, 0, 5, 0, 255},
23 {GX_NULL, 0, 0, 5, 0, 255}
24 };
25
26 GX_SPRITE_FRAME light_frame_list_2[] = {
27 {GX_NULL, 0, 0, 5, 0, 255},
28 {GX_PIXELMAP_ID_LLIGHT10, 0, 0, 5, 0, 255},
29 {GX_PIXELMAP_ID_LLIGHT09, 0, 0, 5, 0, 255},
30 {GX_PIXELMAP_ID_LLIGHT08, 0, 0, 5, 0, 255},
31 {GX_PIXELMAP_ID_LLIGHT07, 0, 0, 5, 0, 255},
32 {GX_PIXELMAP_ID_LLIGHT06, 0, 0, 5, 0, 255},
33 {GX_PIXELMAP_ID_LLIGHT05, 0, 0, 5, 0, 255},
34 {GX_PIXELMAP_ID_LLIGHT04, 0, 0, 5, 0, 255},
35 {GX_PIXELMAP_ID_LLIGHT03, 0, 0, 5, 0, 255},
36 {GX_PIXELMAP_ID_LLIGHT02, 0, 0, 5, 0, 255},
37 {GX_PIXELMAP_ID_LLIGHT01, 0, 0, 5, 0, 255}
38 };
39
40 /* Define variables. */
41 static INT number_animation_step;
42 static INT target_battery_usage = 86;
43 static INT target_miles = 382;
44 static INT target_washer_level = 54;
45 static INT target_light_level = 77;
46 static INT target_air_filter_usage = 74;
47 static INT target_front_left_brake_pad_usage = 61;
48 static INT target_front_right_brake_pad_usage = 65;
49 static INT target_rear_left_brake_pad_usage = 71;
50 static INT target_rear_right_brake_pad_usage = 75;
51 static INT target_front_left_tire_pressure = 35;
52 static INT target_front_right_tire_pressure = 35;
53 static INT target_rear_left_tire_pressure = 38;
54 static INT target_rear_right_tire_pressure = 38;
55
56 /******************************************************************************************/
57 /* Start number animation. */
58 /******************************************************************************************/
number_animation_start()59 static VOID number_animation_start()
60 {
61 number_animation_step = 0;
62 gx_system_timer_start(&vehicle_screen, TIMER_ID_VEHICLE_NUMBER_ANIMATION, 40 / GX_SYSTEM_TIMER_MS, 40 / GX_SYSTEM_TIMER_MS);
63 }
64
65 /******************************************************************************************/
66 /* Update number animation. */
67 /******************************************************************************************/
number_animation_update()68 static VOID number_animation_update()
69 {
70 number_animation_step++;
71
72 gx_numeric_prompt_value_set(&vehicle_screen.vehicle_screen_battery_usage, CURRENT_NUMBER_VAL_GET(target_battery_usage));
73 gx_numeric_prompt_value_set(&vehicle_screen.vehicle_screen_miles, CURRENT_NUMBER_VAL_GET(target_miles));
74 gx_numeric_prompt_value_set(&vehicle_screen.vehicle_screen_windshield_washer_level, CURRENT_NUMBER_VAL_GET(target_washer_level));
75 gx_numeric_prompt_value_set(&vehicle_screen.vehicle_screen_lights_bulbs, CURRENT_NUMBER_VAL_GET(target_light_level));
76 gx_numeric_prompt_value_set(&vehicle_screen.vehicle_screen_air_filter_usage, CURRENT_NUMBER_VAL_GET(target_air_filter_usage));
77 gx_numeric_prompt_value_set(&vehicle_screen.vehicle_screen_front_left_brake_pad, CURRENT_NUMBER_VAL_GET(target_front_left_brake_pad_usage));
78 gx_numeric_prompt_value_set(&vehicle_screen.vehicle_screen_front_right_brake_pad, CURRENT_NUMBER_VAL_GET(target_front_right_brake_pad_usage));
79 gx_numeric_prompt_value_set(&vehicle_screen.vehicle_screen_rear_left_brake_pad, CURRENT_NUMBER_VAL_GET(target_rear_left_brake_pad_usage));
80 gx_numeric_prompt_value_set(&vehicle_screen.vehicle_screen_rear_right_brake_pad, CURRENT_NUMBER_VAL_GET(target_rear_right_brake_pad_usage));
81 gx_numeric_prompt_value_set(&vehicle_screen.vehicle_screen_front_left_tire_pressure, CURRENT_NUMBER_VAL_GET(target_front_left_tire_pressure));
82 gx_numeric_prompt_value_set(&vehicle_screen.vehicle_screen_front_right_tire_pressure, CURRENT_NUMBER_VAL_GET(target_front_right_tire_pressure));
83 gx_numeric_prompt_value_set(&vehicle_screen.vehicle_screen_rear_left_tire_pressure, CURRENT_NUMBER_VAL_GET(target_rear_left_tire_pressure));
84 gx_numeric_prompt_value_set(&vehicle_screen.vehicle_screen_rear_right_tire_pressure, CURRENT_NUMBER_VAL_GET(target_rear_right_tire_pressure));
85
86 if (number_animation_step == TOTAL_NUMBER_ANIMATION_STEPS)
87 {
88 gx_system_timer_stop(&vehicle_screen, TIMER_ID_VEHICLE_NUMBER_ANIMATION);
89 }
90 }
91
92 /******************************************************************************************/
93 /* Override the default event processing of "vehicle_screen" to handle signals from my */
94 /* child widgets. */
95 /******************************************************************************************/
vehicle_screen_event_process(GX_WINDOW * window,GX_EVENT * event_ptr)96 UINT vehicle_screen_event_process(GX_WINDOW *window, GX_EVENT *event_ptr)
97 {
98 GX_SPRITE *sprite;
99
100 switch (event_ptr->gx_event_type)
101 {
102 case GX_EVENT_SHOW:
103 /* Start number animation. */
104 number_animation_start();
105
106 screen_base_event_process(window, event_ptr);
107 break;
108
109 case GX_EVENT_TIMER:
110 if (event_ptr->gx_event_payload.gx_event_timer_id == TIMER_ID_VEHICLE_NUMBER_ANIMATION)
111 {
112 /* Update number animation. */
113 number_animation_update();
114 }
115 else
116 {
117 screen_base_event_process(window, event_ptr);
118 }
119 break;
120
121 case GX_SIGNAL(ID_LIGHT_SPRITE_LEFT, GX_EVENT_SPRITE_COMPLETE):
122 case GX_SIGNAL(ID_LIGHT_SPRITE_RIGHT, GX_EVENT_SPRITE_COMPLETE):
123 gx_widget_find(window, event_ptr->gx_event_sender, 2, &sprite);
124
125 /* Toggle light frame list. */
126 if (sprite->gx_sprite_frame_list[0].gx_sprite_frame_pixelmap == light_frame_list_1[0].gx_sprite_frame_pixelmap)
127 {
128 gx_sprite_frame_list_set(sprite, light_frame_list_2, sizeof(light_frame_list_2) / sizeof(GX_SPRITE_FRAME));
129 }
130 else
131 {
132 gx_sprite_frame_list_set(sprite, light_frame_list_1, sizeof(light_frame_list_1) / sizeof(GX_SPRITE_FRAME));
133 }
134
135 gx_sprite_start(sprite, 0);
136 break;
137
138 case GX_SIGNAL(ID_MODE_ECO_BTN, GX_EVENT_RADIO_SELECT):
139 /* Update vechile mode to ECO. */
140 gx_prompt_text_id_set(&main_screen.main_screen_vehicle_mode_text, GX_STRING_ID_ECO);
141 gx_icon_pixelmap_set(&main_screen.main_screen_vehicle_mode_icon, GX_PIXELMAP_ID_V_MODE_BTN_ICON_ECO, GX_PIXELMAP_ID_V_MODE_BTN_ICON_ECO);
142 break;
143
144 case GX_SIGNAL(ID_MODE_COMFORT_BTN, GX_EVENT_RADIO_SELECT):
145 /* Update vechile mode to Comfort. */
146 gx_prompt_text_id_set(&main_screen.main_screen_vehicle_mode_text, GX_STRING_ID_COMFORT);
147 gx_icon_pixelmap_set(&main_screen.main_screen_vehicle_mode_icon, GX_PIXELMAP_ID_HOME_MODE_BTN_ICON_COMFORT, GX_PIXELMAP_ID_HOME_MODE_BTN_ICON_COMFORT);
148 break;
149
150 case GX_SIGNAL(ID_MODE_SPORT_BTN, GX_EVENT_RADIO_SELECT):
151 /* Update vechile mode to Sport. */
152 gx_prompt_text_id_set(&main_screen.main_screen_vehicle_mode_text, GX_STRING_ID_SPORT);
153 gx_icon_pixelmap_set(&main_screen.main_screen_vehicle_mode_icon, GX_PIXELMAP_ID_HOME_MODE_BTN_ICON_SPORT, GX_PIXELMAP_ID_HOME_MODE_BTN_ICON_SPORT);
154 break;
155
156 default:
157 return screen_base_event_process(window, event_ptr);
158 }
159
160 return 0;
161 }