Feature: 支持 LVGL 作为嵌入式显示屏的底层。 #7
							
								
								
									
										21
									
								
								main/gui.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								main/gui.c
									
									
									
									
									
								
							| @@ -1,8 +1,4 @@ | |||||||
| /* | #pragma once | ||||||
|  * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD |  | ||||||
|  * |  | ||||||
|  * SPDX-License-Identifier: CC0-1.0 |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  |  | ||||||
| @@ -34,10 +30,10 @@ static const char *GUI_TAG = "LVGL_GUI"; | |||||||
| //	EF 87 AB | //	EF 87 AB | ||||||
| #define APP_WIFI_GOOD_SYMBOL "\xEF\x87\xAB" | #define APP_WIFI_GOOD_SYMBOL "\xEF\x87\xAB" | ||||||
|  |  | ||||||
| // EE 87 8C |  | ||||||
| #define APP_CONNECTED_SYMBOL "\xEE\x87\x8C" |  | ||||||
| // EE 87 8B | // EE 87 8B | ||||||
| #define APP_DISCONNECTED_SYMBOL "\xEE\x87\x8B" | #define APP_CONNECTED_SYMBOL "\xEE\x87\x8B" | ||||||
|  | // EE 87 8C | ||||||
|  | #define APP_DISCONNECTED_SYMBOL "\xEE\x87\x8C" | ||||||
|  |  | ||||||
| // EE 8A 9E | // EE 8A 9E | ||||||
| #define APP_TIMER_SYMBOL "\xEE\x8A\x9E" | #define APP_TIMER_SYMBOL "\xEE\x8A\x9E" | ||||||
| @@ -144,13 +140,14 @@ static void gui_set_wifi_connecting() { | |||||||
|  |  | ||||||
| static void gui_set_wifi_connected() { | static void gui_set_wifi_connected() { | ||||||
|   lv_anim_del(wifi_label, NULL); |   lv_anim_del(wifi_label, NULL); | ||||||
|  |   vTaskDelay(300 / portTICK_PERIOD_MS); | ||||||
|   lv_obj_clear_flag(wifi_label, LV_OBJ_FLAG_HIDDEN); |   lv_obj_clear_flag(wifi_label, LV_OBJ_FLAG_HIDDEN); | ||||||
|   lv_label_set_text(wifi_label, APP_WIFI_GOOD_SYMBOL); |   lv_label_set_text(wifi_label, APP_WIFI_GOOD_SYMBOL); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void gui_set_wifi_disconnected() { | static void gui_set_wifi_disconnected() { | ||||||
|   lv_anim_del(&wifi_label, NULL); |   lv_anim_del(&wifi_label, NULL); | ||||||
|  |   vTaskDelay(300 / portTICK_PERIOD_MS); | ||||||
|   lv_obj_clear_flag(wifi_label, LV_OBJ_FLAG_HIDDEN); |   lv_obj_clear_flag(wifi_label, LV_OBJ_FLAG_HIDDEN); | ||||||
|   lv_label_set_text(wifi_label, APP_WIFI_WEAK_SYMBOL); |   lv_label_set_text(wifi_label, APP_WIFI_WEAK_SYMBOL); | ||||||
| } | } | ||||||
| @@ -160,13 +157,15 @@ static void gui_set_server_connecting() { | |||||||
| } | } | ||||||
|  |  | ||||||
| static void gui_set_server_connected() { | static void gui_set_server_connected() { | ||||||
|   lv_anim_del(&desktop_label, NULL); |   lv_anim_del(desktop_label, NULL); | ||||||
|  |   vTaskDelay(300 / portTICK_PERIOD_MS); | ||||||
|   lv_obj_clear_flag(desktop_label, LV_OBJ_FLAG_HIDDEN); |   lv_obj_clear_flag(desktop_label, LV_OBJ_FLAG_HIDDEN); | ||||||
|   lv_label_set_text(desktop_label, APP_CONNECTED_SYMBOL); |   lv_label_set_text(desktop_label, APP_CONNECTED_SYMBOL); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void gui_set_server_disconnected() { | static void gui_set_server_disconnected() { | ||||||
|   lv_anim_del(&desktop_label, NULL); |   lv_anim_del(desktop_label, NULL); | ||||||
|  |   vTaskDelay(300 / portTICK_PERIOD_MS); | ||||||
|   lv_obj_clear_flag(desktop_label, LV_OBJ_FLAG_HIDDEN); |   lv_obj_clear_flag(desktop_label, LV_OBJ_FLAG_HIDDEN); | ||||||
|   lv_label_set_text(desktop_label, APP_DISCONNECTED_SYMBOL); |   lv_label_set_text(desktop_label, APP_DISCONNECTED_SYMBOL); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -52,7 +52,7 @@ void app_main(void) { | |||||||
|     gui_set_wifi_disconnected(); |     gui_set_wifi_disconnected(); | ||||||
|   } |   } | ||||||
|   udp_server_init(); |   udp_server_init(); | ||||||
|   // service_discovery_init(); |   service_discovery_init(); | ||||||
|   // vTaskDelay(pdMS_TO_TICKS(1000)); |   // vTaskDelay(pdMS_TO_TICKS(1000)); | ||||||
|   // mqtt_app_start(); |   // mqtt_app_start(); | ||||||
|   // if (waiting_for_mqtt_connected()) { |   // if (waiting_for_mqtt_connected()) { | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ | |||||||
| #include "esp_wifi.h" | #include "esp_wifi.h" | ||||||
| #include "freertos/FreeRTOS.h" | #include "freertos/FreeRTOS.h" | ||||||
| #include "freertos/task.h" | #include "freertos/task.h" | ||||||
|  | #include "gui.c" | ||||||
| #include "light.c" | #include "light.c" | ||||||
| #include "lwip/err.h" | #include "lwip/err.h" | ||||||
| #include "lwip/sockets.h" | #include "lwip/sockets.h" | ||||||
| @@ -20,6 +21,9 @@ | |||||||
|  |  | ||||||
| static const char *UDP_SERVER_TAG = "UDP_SERVER"; | static const char *UDP_SERVER_TAG = "UDP_SERVER"; | ||||||
|  |  | ||||||
|  | static bool desktop_connected = false; | ||||||
|  | static uint64_t last_desktop_ping_at = 0; | ||||||
|  |  | ||||||
| static void udp_server_task(void *pvParameters) { | static void udp_server_task(void *pvParameters) { | ||||||
|   char rx_buffer[1024]; |   char rx_buffer[1024]; | ||||||
|   char addr_str[128]; |   char addr_str[128]; | ||||||
| @@ -84,6 +88,7 @@ static void udp_server_task(void *pvParameters) { | |||||||
|  |  | ||||||
|           switch (rx_buffer[0]) { |           switch (rx_buffer[0]) { | ||||||
|             case 1: |             case 1: | ||||||
|  |               last_desktop_ping_at = esp_timer_get_time(); | ||||||
|               sendto(sock, rx_buffer, 1, 0, (struct sockaddr *)&source_addr, |               sendto(sock, rx_buffer, 1, 0, (struct sockaddr *)&source_addr, | ||||||
|                      sizeof(source_addr)); |                      sizeof(source_addr)); | ||||||
|               break; |               break; | ||||||
| @@ -127,8 +132,28 @@ static void udp_server_task(void *pvParameters) { | |||||||
|   vTaskDelete(NULL); |   vTaskDelete(NULL); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static void change_desktop_connection_status(bool connected) { | ||||||
|  |   desktop_connected = connected; | ||||||
|  |   if (connected) { | ||||||
|  |     gui_set_server_connected(); | ||||||
|  |   } else { | ||||||
|  |     gui_set_server_disconnected(); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void desktop_online_check_task(void *pvParameters) { | ||||||
|  |   while (1) { | ||||||
|  |     if (esp_timer_get_time() - last_desktop_ping_at > 5000000) {  // 2 seconds | ||||||
|  |       change_desktop_connection_status(false); | ||||||
|  |     } else { | ||||||
|  |       change_desktop_connection_status(true); | ||||||
|  |     } | ||||||
|  |     vTaskDelay(1000 / portTICK_PERIOD_MS); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| void udp_server_init(void) { | void udp_server_init(void) { | ||||||
|   ESP_ERROR_CHECK(nvs_flash_init()); |  | ||||||
|   ESP_ERROR_CHECK(esp_netif_init()); |  | ||||||
|   xTaskCreate(udp_server_task, "udp_server", 4096, (void *)AF_INET, 5, NULL); |   xTaskCreate(udp_server_task, "udp_server", 4096, (void *)AF_INET, 5, NULL); | ||||||
|  |   xTaskCreate(desktop_online_check_task, "desktop_online_check", 4096, NULL, 10, | ||||||
|  |               NULL); | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user