diff --git a/.gitignore b/.gitignore index e10eb29..ad17804 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ # 忽略根目录下的 build 文件夹(包括其所有子文件/子文件夹) /build +# 忽略根目录下的uniapp_code文件夹(这是APP端的业务) +/uniapp_code + # 忽略 macOS 系统文件 .DS_Store diff --git a/main/ble/ble.c b/main/ble/ble.c index a9f15ae..716c2a0 100644 --- a/main/ble/ble.c +++ b/main/ble/ble.c @@ -76,6 +76,7 @@ static esp_attr_control_t control_image_edit = { // 图片传输服务 static esp_gatt_srvc_id_t server_id_image = { + .id.uuid.len = ESP_UUID_LEN_16, .id.uuid.uuid.uuid16 = IMAGE_SERVICE_UUID, .id.inst_id = IMAGE_SERVICE_INSTID, .is_primary = true, @@ -216,7 +217,7 @@ static void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_ image_service_handle, &image_write_uuid, ESP_GATT_PERM_WRITE, - ESP_GATT_CHAR_PROP_BIT_WRITE, + ESP_GATT_CHAR_PROP_BIT_WRITE | ESP_GATT_CHAR_PROP_BIT_WRITE_NR, &char_val_image_write, &control_image_write ); @@ -224,7 +225,7 @@ static void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_ image_service_handle, &image_edit_uuid, ESP_GATT_PERM_WRITE, - ESP_GATT_CHAR_PROP_BIT_WRITE, + ESP_GATT_CHAR_PROP_BIT_WRITE | ESP_GATT_CHAR_PROP_BIT_WRITE_NR, &char_val_image_edit, &control_image_edit ); @@ -263,24 +264,27 @@ static void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_ img_data = malloc((int)firstMeg.len); filepath = malloc(sizeof(char) * 33); sprintf(filepath,"/spiflash/%s",firstMeg.filename); - file_img = fopen(filepath,"w"); + file_img = fopen(filepath,"wb"); ESP_LOGI(CONN_TAG,"传输通道建立成功,数据指针:%p,文件名称:%s,文件大小:%d",img_data,firstMeg.filename,(int)firstMeg.len); } }else if(SendStatus.isSend){ - ESP_LOGI(CONN_TAG, "获取到数据:第:%d包,是否结束:%d",*value+1,*(value+1)); + ESP_LOGI(CONN_TAG, "获取到数据:第:%d包,长度:%d,是否结束:%d",*value+1,(int)param->write.len,*(value+1)); uint8_t isEnd = *(value + 1); uint8_t port = *(value); uint8_t *data = value + 2; memcpy(img_data + SendStatus.port,data,(int)param->write.len-2); SendStatus.port += param->write.len-2; if(isEnd){ + ESP_LOGI(CONN_TAG,"数据接收完毕,累计:%d字节,预期:%d字节,首字节:%02X %02X", + (int)SendStatus.port,(int)firstMeg.len,img_data[0],img_data[1]); fwrite(img_data,sizeof(uint8_t),firstMeg.len,file_img); fclose(file_img); SendStatus.isSend = false; SendStatus.port = 0; ESP_LOGI(CONN_TAG,"图片接收成功"); nvs_change_img(firstMeg.filename); - app_img_change(firstMeg.filename); + // 导航到ScreenImg显示新图片(内部刷新列表+设置索引+切换界面) + ble_image_navigate(firstMeg.filename); free(img_data); free(filepath); } @@ -293,7 +297,7 @@ static void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_ memcpy(imgName, value, 23); if(type == 0xff){ nvs_change_img(imgName); - app_img_change(imgName); + ble_image_navigate(imgName); }else if(type == 0xF1){ remove(filepath); SendStatus.isSend = false; diff --git a/main/fatfs/fatfs.c b/main/fatfs/fatfs.c index ee9bd56..ec6d296 100644 --- a/main/fatfs/fatfs.c +++ b/main/fatfs/fatfs.c @@ -568,12 +568,6 @@ esp_err_t DecodeImg(char *imgpath,uint8_t** imgData,esp_jpeg_image_output_t *out free(*imgData); return ESP_FAIL; } - if (imgEncoderData[file_stat.st_size - 2] != 0xFF || imgEncoderData[file_stat.st_size - 1] != 0xD9) { - ESP_LOGE(TAG, "JPEG结束标记缺失"); - free(imgEncoderData); - free(*imgData); - return ESP_FAIL; - } fclose(f); uint32_t outbuf_size = 360 * 360 * sizeof(uint8_t) * 2; esp_jpeg_image_cfg_t jpeg_cfg = { diff --git a/main/pages/include/pages.h b/main/pages/include/pages.h index 14a2e57..6d457b6 100644 --- a/main/pages/include/pages.h +++ b/main/pages/include/pages.h @@ -15,3 +15,7 @@ uint8_t pwm_get_brightness(void); // 获取当前亮度值 // 图片管理函数 const char* get_current_image(void); // 获取当前图片文件名 bool delete_current_image(void); // 删除当前图片 +void init_spiffs_image_list(void); // 初始化/扫描SPIFFS图片列表 +void free_spiffs_image_list(void); // 重置图片列表 +bool set_image_index_by_name(const char *name); // 根据文件名设置当前图片索引 +void ble_image_navigate(const char *filename); // BLE接收后导航到ScreenImg显示 diff --git a/main/pages/pages.c b/main/pages/pages.c index cba4ccb..e0c0669 100644 --- a/main/pages/pages.c +++ b/main/pages/pages.c @@ -6,6 +6,9 @@ #include "jpeg_decoder.h" #include "../ui/screens/ui_ScreenImg.h" #include + +// 前向声明界面切换函数 +extern void _ui_screen_change(lv_obj_t **target, lv_scr_load_anim_t fademode, int spd, int delay, void (*target_init)(void)); #include #include #include @@ -665,6 +668,48 @@ void free_spiffs_image_list(void) { ESP_LOGI("IMG_LIST", "图片列表已重置"); } +// 根据文件名设置当前图片索引 +bool set_image_index_by_name(const char *name) { + if(!image_list_initialized || spiffs_image_count == 0 || !name) { + return false; + } + for(int i = 0; i < spiffs_image_count; i++) { + if(strcmp(spiffs_image_files[i], name) == 0) { + current_image_index = i; + ESP_LOGI("IMG_LIST", "设置图片索引为 %d: %s", i, name); + return true; + } + } + ESP_LOGW("IMG_LIST", "未找到图片: %s", name); + return false; +} + +// BLE接收图片后导航到ScreenImg显示 +void ble_image_navigate(const char *filename) { + // 刷新图片列表 + free_spiffs_image_list(); + init_spiffs_image_list(); + + // 设置当前索引为新接收的图片 + set_image_index_by_name(filename); + + // 检查是否已在ScreenImg界面 + lvgl_port_lock(0); + bool already_on_screen = (lv_scr_act() == ui_ScreenImg); + if (!already_on_screen) { + // 不在ScreenImg,导航过去(SCREEN_LOADED事件会触发update_ui_ImgBle) + _ui_screen_change(&ui_ScreenImg, LV_SCR_LOAD_ANIM_NONE, 0, 0, &ui_ScreenImg_screen_init); + } + lvgl_port_unlock(); + + // 已在ScreenImg时,_ui_screen_change不会触发SCREEN_LOADED,需手动更新图片 + if (already_on_screen) { + update_ui_ImgBle(filename); + } + + ESP_LOGI("IMG_LIST", "BLE导航到ScreenImg显示: %s", filename); +} + // 获取当前图片文件名 const char* get_current_image(void) { if(!image_list_initialized || spiffs_image_count == 0) { @@ -788,6 +833,7 @@ void update_ui_ImgBle(const char *img_name) { ESP_LOGI("IMG_UI", "ui_ImgBle图片更新成功: %s", img_name); } else { ESP_LOGE("IMG_UI", "图片解码失败,错误码: %d", ret); + ui_img_data = NULL; } } diff --git a/main/ui/screens/ui_ScreenImg.c b/main/ui/screens/ui_ScreenImg.c index d7926f4..9622149 100644 --- a/main/ui/screens/ui_ScreenImg.c +++ b/main/ui/screens/ui_ScreenImg.c @@ -78,23 +78,17 @@ void ui_event_ImageDel(lv_event_t * e) { void ui_event_ScreenImg( lv_event_t * e) { lv_event_code_t event_code = lv_event_get_code(e); -// 界面加载完成事件:首次进入时才初始化图片 +// 界面加载完成事件:每次进入都显示当前图片 if ( event_code == LV_EVENT_SCREEN_LOADED ) { - if (first_load) { - first_load = false; + // 初始化图片列表(内部有guard,不会重复初始化) + init_spiffs_image_list(); - // 初始化图片列表 - init_spiffs_image_list(); - - // 获取第一张可用图片 - const char *first_img = get_current_image(); - if (first_img) { - // 显示第一张SPIFFS图片 - update_ui_ImgBle(first_img); - } else { - // 没有图片,保持显示UI资源图片 ui_img_s1_png - ESP_LOGI("ScreenImg", "SPIFFS无可用图片,显示默认UI图片"); - } + // 每次进入界面都显示当前图片(支持BLE导航和手势切换回来) + const char *current_img = get_current_image(); + if (current_img) { + update_ui_ImgBle(current_img); + } else { + ESP_LOGI("ScreenImg", "SPIFFS无可用图片,显示默认UI图片"); } // 每次加载界面时检查是否需要显示 ContainerDle diff --git a/sdkconfig b/sdkconfig index 9789391..023258b 100644 --- a/sdkconfig +++ b/sdkconfig @@ -14,7 +14,6 @@ CONFIG_SOC_GDMA_SUPPORTED=y CONFIG_SOC_AHB_GDMA_SUPPORTED=y CONFIG_SOC_GPTIMER_SUPPORTED=y CONFIG_SOC_LCDCAM_SUPPORTED=y -CONFIG_SOC_LCDCAM_CAM_SUPPORTED=y CONFIG_SOC_LCDCAM_I80_LCD_SUPPORTED=y CONFIG_SOC_LCDCAM_RGB_LCD_SUPPORTED=y CONFIG_SOC_MCPWM_SUPPORTED=y @@ -102,7 +101,7 @@ CONFIG_SOC_CPU_HAS_FPU=y CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 -CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=0x40 +CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 CONFIG_SOC_SIMD_PREFERRED_DATA_ALIGNMENT=16 CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=4096 CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16 @@ -209,7 +208,7 @@ CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y CONFIG_SOC_LP_IO_CLOCK_IS_INDEPENDENT=y -CONFIG_SOC_SDM_GROUPS=1 +CONFIG_SOC_SDM_GROUPS=y CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 CONFIG_SOC_SDM_CLK_SUPPORT_APB=y CONFIG_SOC_SPI_PERIPH_NUM=3 @@ -370,9 +369,6 @@ CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y CONFIG_SOC_BLUFI_SUPPORTED=y CONFIG_SOC_ULP_HAS_ADC=y CONFIG_SOC_PHY_COMBO_MODULE=y -CONFIG_SOC_LCDCAM_CAM_SUPPORT_RGB_YUV_CONV=y -CONFIG_SOC_LCDCAM_CAM_PERIPH_NUM=1 -CONFIG_SOC_LCDCAM_CAM_DATA_WIDTH_MAX=16 CONFIG_IDF_CMAKE=y CONFIG_IDF_TOOLCHAIN="gcc" CONFIG_IDF_TOOLCHAIN_GCC=y @@ -840,7 +836,6 @@ CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y CONFIG_BT_BLE_42_DTM_TEST_EN=y CONFIG_BT_BLE_42_ADV_EN=y CONFIG_BT_BLE_42_SCAN_EN=y -CONFIG_BT_BLE_VENDOR_HCI_EN=y # CONFIG_BT_BLE_HIGH_DUTY_ADV_INTERVAL is not set # CONFIG_BT_ABORT_WHEN_ALLOCATION_FAILS is not set # end of Bluedroid Options @@ -1062,7 +1057,6 @@ CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y # CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set # CONFIG_ESP_TLS_PSK_VERIFICATION is not set # CONFIG_ESP_TLS_INSECURE is not set -CONFIG_ESP_TLS_DYN_BUF_STRATEGY_SUPPORTED=y # end of ESP-TLS # @@ -1089,12 +1083,6 @@ CONFIG_ESP_ERR_TO_NAME_LOOKUP=y CONFIG_ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y # end of Common ESP-related -# -# ESP-Driver:Camera Controller Configurations -# -# CONFIG_CAM_CTLR_DVP_CAM_ISR_CACHE_SAFE is not set -# end of ESP-Driver:Camera Controller Configurations - # # ESP-Driver:GPIO Configurations # @@ -1415,11 +1403,8 @@ CONFIG_ESP_PHY_RF_CAL_PARTIAL=y # CONFIG_ESP_PHY_RF_CAL_NONE is not set # CONFIG_ESP_PHY_RF_CAL_FULL is not set CONFIG_ESP_PHY_CALIBRATION_MODE=0 -CONFIG_ESP_PHY_PLL_TRACK_PERIOD_MS=1000 # CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set # CONFIG_ESP_PHY_RECORD_USED_TIME is not set -CONFIG_ESP_PHY_IRAM_OPT=y -# CONFIG_ESP_PHY_DEBUG is not set # end of PHY # @@ -2099,7 +2084,6 @@ CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 # CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set # CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y -# CONFIG_MBEDTLS_SSL_KEYING_MATERIAL_EXPORT is not set CONFIG_MBEDTLS_PKCS7_C=y # end of mbedTLS v3.x related @@ -3083,7 +3067,6 @@ CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_DIS=y CONFIG_SW_COEXIST_ENABLE=y CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE=y CONFIG_ESP_WIFI_SW_COEXIST_ENABLE=y -# CONFIG_CAM_CTLR_DVP_CAM_ISR_IRAM_SAFE is not set # CONFIG_MCPWM_ISR_IN_IRAM is not set # CONFIG_EVENT_LOOP_PROFILING is not set CONFIG_POST_EVENTS_FROM_ISR=y diff --git a/设备运行日志.md b/设备运行日志.md index c93897e..e69de29 100644 --- a/设备运行日志.md +++ b/设备运行日志.md @@ -1,282 +0,0 @@ -rdzleo@RdzleodeMac-Studio dzbj % '/Users/rdzleo/.espressif/python_env/idf5.4_py3.13_env/bin/python3' '/Users/rd -zleo/esp/esp-idf/v5.4.2/esp-idf/tools/idf_monitor.py' -p /dev/tty.usbmodem834401 -b 115200 --toolchain-prefix x -tensa-esp32s3-elf- --make ''/Users/rdzleo/.espressif/python_env/idf5.4_py3.13_env/bin/python3' '/Users/rdzleo/e -sp/esp-idf/v5.4.2/esp-idf/tools/idf.py'' --target esp32s3 '/Users/rdzleo/Desktop/dzbj/build/program.elf' ---- Warning: Serial ports accessed as /dev/tty.* will hang gdb if launched. ---- Using /dev/cu.usbmodem834401 instead... ---- esp-idf-monitor 1.8.0 on /dev/cu.usbmodem834401 115200 ---- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H - This driver is aESP-ROM:esp32s3-20210327 -Build:Mar 27 2021 -rst:0x15 (USB_UART_CHIP_RESET),boot:0x2b (SPI_FAST_FLASH_BOOT) -Saved PC:0x40048836 ---- 0x40048836: uart_tx_one_char_uart in ROM -SPIWP:0xee -mode:DIO, clock div:1 -load:0x3fce2820,len:0x16d0 -load:0x403c8700,len:0x4 -load:0x403c8704,len:0xec8 -load:0x403cb700,len:0x3160 -entry 0x403c8950 -I (26) boot: ESP-IDF v5.4.2-dirty 2nd stage bootloader -I (27) boot: compile time Feb 9 2026 10:08:02 -I (27) boot: Multicore bootloader -I (27) boot: chip revision: v0.2 -I (30) boot: efuse block revision: v1.3 -I (34) qio_mode: Enabling default flash chip QIO -I (38) boot.esp32s3: Boot SPI Speed : 80MHz -I (42) boot.esp32s3: SPI Mode : QIO -I (46) boot.esp32s3: SPI Flash Size : 16MB -I (50) boot: Enabling RNG early entropy source... -I (54) boot: Partition Table: -I (57) boot: ## Label Usage Type ST Offset Length -I (63) boot: 0 nvs WiFi data 01 02 00009000 00006000 -I (70) boot: 1 phy_init RF data 01 01 0000f000 00001000 -I (76) boot: 2 factory factory app 00 00 00010000 00400000 -I (83) boot: 3 storage Unknown data 01 82 00410000 00200000 -I (89) boot: End of partition table -I (92) esp_image: segment 0: paddr=00010020 vaddr=3c060020 size=78508h (492808) map -I (173) esp_image: segment 1: paddr=00088530 vaddr=3fc98600 size=03688h ( 13960) load -I (176) esp_image: segment 2: paddr=0008bbc0 vaddr=40374000 size=04458h ( 17496) load -I (180) esp_image: segment 3: paddr=00090020 vaddr=42000020 size=5c8ech (379116) map -I (241) esp_image: segment 4: paddr=000ec914 vaddr=40378458 size=1015ch ( 65884) load -I (253) esp_image: segment 5: paddr=000fca78 vaddr=600fe000 size=0001ch ( 28) load -I (262) boot: Loaded app from partition at offset 0x10000 -I (262) boot: Disabling RNG early entropy source... -I (272) octal_psram: ECC is enabled -I (272) octal_psram: vendor id : 0x0d (AP) -I (272) octal_psram: dev id : 0x02 (generation 3) -I (273) octal_psram: density : 0x03 (64 Mbit) -I (277) octal_psram: good-die : 0x01 (Pass) -I (282) octal_psram: Latency : 0x01 (Fixed) -I (286) octal_psram: VCC : 0x01 (3V) -I (290) octal_psram: SRF : 0x01 (Fast Refresh) -I (295) octal_psram: BurstType : 0x00 ( Wrap) -I (299) octal_psram: BurstLen : 0x03 (1024 Byte) -I (304) octal_psram: Readlatency : 0x02 (10 cycles@Fixed) -I (309) octal_psram: DriveStrength: 0x00 (1/1) -I (314) MSPI Timing: PSRAM timing tuning index: 5 -I (318) esp_psram: Found 8MB PSRAM device -I (322) esp_psram: Speed: 80MHz -I (364) mmu_psram: Read only data copied and mapped to SPIRAM -I (395) mmu_psram: Instructions copied and mapped to SPIRAM -I (396) cpu_start: Multicore app -I (795) esp_psram: SPI SRAM memory test OK -I (803) cpu_start: Pro cpu start user code -I (803) cpu_start: cpu freq: 160000000 Hz -I (803) app_init: Application information: -I (804) app_init: Project name: program -I (807) app_init: App version: 1 -I (811) app_init: Compile time: Feb 9 2026 10:07:49 -I (816) app_init: ELF file SHA256: fe13bd2c7... -I (820) app_init: ESP-IDF: v5.4.2-dirty -I (824) efuse_init: Min chip rev: v0.0 -I (828) efuse_init: Max chip rev: v0.99 -I (832) efuse_init: Chip rev: v0.2 -I (836) heap_init: Initializing. RAM available for dynamic allocation: -I (842) heap_init: At 3FCACCB0 len 0003CA60 (242 KiB): RAM -I (847) heap_init: At 3FCE9710 len 00005724 (21 KiB): RAM -I (853) heap_init: At 3FCF0000 len 00008000 (32 KiB): DRAM -I (858) heap_init: At 600FE01C len 00001FCC (7 KiB): RTCRAM -I (863) esp_psram: Adding pool of 6784K of PSRAM memory to heap allocator -I (870) esp_psram: Adding pool of 30K of PSRAM memory gap generated due to end address alignment of drom to the heap allocator -I (881) spi_flash: detected chip: generic -I (884) spi_flash: flash io: qio -W (888) i2c: This driver is an old driver, please migrate your application code to adapt `driver/i2c_master.h` -I (897) sleep_gpio: Configure to isolate all GPIO pins in sleep state -I (904) sleep_gpio: Enable automatic switching of GPIO sleep configuration -I (910) coexist: coex firmware version: 7b9a184 -I (914) coexist: coexist rom version e7ae62f -I (919) main_task: Started on CPU0 -I (929) esp_psram: Reserving pool of 32K of internal memory for DMA/internal allocations -I (929) main_task: Calling app_main() -I (929) MAIN: Starting system initialization... -I (939) MAIN: 1. Initializing I2C... -I (939) MAIN: I2C initialized successfully -I (949) MAIN: 2. Initializing NVS... -I (949) MAIN: NVS initialized successfully -I (949) MAIN: 3. Initializing LCD... -I (959) gpio: GPIO[7]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 -I (959) st77916: LCD panel create success, version: 1.0.1 -W (1109) st77916: The 3Ah command has been used and will be overwritten by external initialization sequence -I (1229) MAIN: LCD initialized successfully -I (1229) MAIN: 4. Initializing touch controller... -I (1229) gpio: GPIO[4]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:2 -I (1229) gpio: GPIO[6]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 -I (1639) CST816S: IC id: 182 -I (1639) LCD: Touch controller initialized successfully -I (1639) MAIN: Touch controller initialized -I (1639) MAIN: 5. Initializing LVGL... -I (1639) LVGL: Starting LVGL task -I (1639) LCD: LVGL buffer size: 21600 bytes (W: 360, Lines: 30) -I (1649) LCD: Touch controller added to LVGL -I (1649) MAIN: LVGL initialized successfully -I (1759) MAIN: LVGL task started -I (1759) MAIN: 6. Initializing FATFS... -I (1809) FATFS: SPIFFS: Total size: 1920401, Used: 78061 -I (1809) MAIN: FATFS initialized successfully -I (1809) MAIN: 7. Initializing PWM backlight... -I (1809) MAIN: PWM backlight initialized successfully -I (1809) MAIN: 8. Processing SPIFFS... -I (1879) FATFS: 文件名: /spiflash/03.jpg,大小:8805 -I (1879) FATFS: 文件名: /spiflash/02.jpg,大小:20498 -I (1879) FATFS: 文件名: /spiflash/default.jpg,大小:47430 -I (1909) MAIN: 9. Initializing SquareLine UI... -I (1969) MAIN: SquareLine UI initialized -I (1969) MAIN: 10. Waiting for UI rendering... -I (2039) MAIN: Rendering step 1 completed -I (2089) MAIN: Rendering step 2 completed -I (2139) MAIN: Rendering step 3 completed -I (2139) MAIN: UI rendering completed -I (2139) MAIN: System initialization finished successfully! -I (2139) main_task: Returned from app_main() -I (6789) LVGL: Touch detected: x=175, y=36, count=1 -I (6819) LVGL: Touch detected: x=178, y=41, count=1 -I (6849) LVGL: Touch detected: x=183, y=50, count=1 -I (6879) LVGL: Touch detected: x=190, y=65, count=1 -I (6929) LVGL: Touch detected: x=208, y=122, count=1 -I (6959) LVGL: Touch detected: x=218, y=161, count=1 -I (6989) LVGL: Touch detected: x=232, y=201, count=1 -I (7019) LVGL: Touch detected: x=251, y=243, count=1 -I (7049) LVGL: Touch detected: x=263, y=265, count=1 -I (7829) LVGL: Touch detected: x=191, y=328, count=1 -I (7859) LVGL: Touch detected: x=192, y=326, count=1 -I (7889) LVGL: Touch detected: x=195, y=313, count=1 -I (7919) LVGL: Touch detected: x=199, y=287, count=1 -I (9389) LVGL: Touch detected: x=200, y=34, count=1 -I (9419) LVGL: Touch detected: x=200, y=34, count=1 -I (9449) LVGL: Touch detected: x=200, y=34, count=1 -I (9479) LVGL: Touch detected: x=201, y=36, count=1 -I (9509) LVGL: Touch detected: x=205, y=49, count=1 -I (9539) LVGL: Touch detected: x=209, y=66, count=1 -I (9579) LVGL: Touch detected: x=217, y=100, count=1 -I (9609) LVGL: Touch detected: x=221, y=121, count=1 -I (9639) LVGL: Touch detected: x=227, y=141, count=1 -I (9669) LVGL: Touch detected: x=235, y=161, count=1 -I (9699) LVGL: Touch detected: x=243, y=178, count=1 -I (10509) LVGL: Touch detected: x=195, y=326, count=1 -I (10539) LVGL: Touch detected: x=195, y=325, count=1 -I (10569) LVGL: Touch detected: x=198, y=313, count=1 -I (10599) LVGL: Touch detected: x=201, y=290, count=1 -I (11409) LVGL: Touch detected: x=10, y=157, count=1 -I (11439) LVGL: Touch detected: x=10, y=157, count=1 -I (11469) LVGL: Touch detected: x=11, y=157, count=1 -I (11499) LVGL: Touch detected: x=23, y=157, count=1 -I (11529) LVGL: Touch detected: x=45, y=157, count=1 -I (11559) LVGL: Touch detected: x=87, y=157, count=1 -I (11589) LVGL: Touch detected: x=142, y=157, count=1 -I (11619) LVGL: Touch detected: x=221, y=157, count=1 -I (11649) LVGL: Touch detected: x=258, y=157, count=1 -I (12189) LVGL: Touch detected: x=352, y=159, count=1 -I (12219) LVGL: Touch detected: x=352, y=159, count=1 -I (12249) LVGL: Touch detected: x=351, y=159, count=1 -I (12279) LVGL: Touch detected: x=332, y=156, count=1 -I (12309) LVGL: Touch detected: x=305, y=152, count=1 -I (12339) LVGL: Touch detected: x=273, y=146, count=1 -I (12369) LVGL: Touch detected: x=245, y=141, count=1 -I (12399) LVGL: Touch detected: x=217, y=137, count=1 -I (12429) LVGL: Touch detected: x=187, y=132, count=1 -I (12969) LVGL: Touch detected: x=165, y=36, count=1 -I (12999) LVGL: Touch detected: x=165, y=36, count=1 -I (13029) LVGL: Touch detected: x=166, y=40, count=1 -I (13059) LVGL: Touch detected: x=171, y=56, count=1 -I (13089) LVGL: Touch detected: x=180, y=86, count=1 -I (13139) LVGL: Touch detected: x=195, y=137, count=1 -I (13169) LVGL: Touch detected: x=205, y=168, count=1 -I (13199) LVGL: Touch detected: x=215, y=193, count=1 -I (13709) LVGL: Touch detected: x=181, y=321, count=1 -I (13739) LVGL: Touch detected: x=179, y=312, count=1 -I (13769) LVGL: Touch detected: x=178, y=291, count=1 -I (14309) LVGL: Touch detected: x=211, y=25, count=1 -I (14339) LVGL: Touch detected: x=211, y=25, count=1 -I (14369) LVGL: Touch detected: x=211, y=28, count=1 -I (14399) LVGL: Touch detected: x=214, y=39, count=1 -I (14429) LVGL: Touch detected: x=221, y=62, count=1 -I (14469) LVGL: Touch detected: x=241, y=112, count=1 -I (14499) LVGL: Touch detected: x=252, y=139, count=1 -I (14529) LVGL: Touch detected: x=262, y=161, count=1 -I (14559) LVGL: Touch detected: x=277, y=189, count=1 -I (14589) LVGL: Touch detected: x=287, y=203, count=1 -I (15279) LVGL: Touch detected: x=173, y=324, count=1 -I (15309) LVGL: Touch detected: x=173, y=320, count=1 -I (15339) LVGL: Touch detected: x=175, y=309, count=1 -I (15369) LVGL: Touch detected: x=178, y=286, count=1 -I (15879) LVGL: Touch detected: x=216, y=56, count=1 -I (15909) LVGL: Touch detected: x=216, y=56, count=1 -I (15939) LVGL: Touch detected: x=216, y=56, count=1 -I (15969) LVGL: Touch detected: x=216, y=57, count=1 -I (15999) LVGL: Touch detected: x=219, y=64, count=1 -I (16029) LVGL: Touch detected: x=227, y=86, count=1 -I (16079) LVGL: Touch detected: x=243, y=129, count=1 -I (16109) LVGL: Touch detected: x=253, y=156, count=1 -I (16139) LVGL: Touch detected: x=262, y=177, count=1 -I (16709) LVGL: Touch detected: x=11, y=134, count=1 -I (16739) LVGL: Touch detected: x=24, y=136, count=1 -I (16769) LVGL: Touch detected: x=52, y=139, count=1 -I (16799) LVGL: Touch detected: x=124, y=146, count=1 -I (16829) LVGL: Touch detected: x=172, y=151, count=1 -I (16859) LVGL: Touch detected: x=217, y=154, count=1 -I (16889) LVGL: Touch detected: x=261, y=154, count=1 -I (16919) LVGL: Touch detected: x=308, y=153, count=1 -I (17699) LVGL: Touch detected: x=203, y=27, count=1 -I (17729) LVGL: Touch detected: x=203, y=28, count=1 -I (17759) LVGL: Touch detected: x=205, y=36, count=1 -I (17789) LVGL: Touch detected: x=207, y=52, count=1 -I (17819) LVGL: Touch detected: x=213, y=79, count=1 -I (17849) LVGL: Touch detected: x=227, y=116, count=1 -I (17879) LVGL: Touch detected: x=241, y=151, count=1 -I (18419) LVGL: Touch detected: x=97, y=130, count=1 -I (18449) LVGL: Touch detected: x=97, y=130, count=1 -I (20399) LVGL: Touch detected: x=196, y=32, count=1 -I (20429) LVGL: Touch detected: x=197, y=35, count=1 -I (20459) LVGL: Touch detected: x=199, y=42, count=1 -I (20489) LVGL: Touch detected: x=201, y=55, count=1 -I (20519) LVGL: Touch detected: x=205, y=77, count=1 -I (20549) LVGL: Touch detected: x=211, y=104, count=1 -I (20579) LVGL: Touch detected: x=233, y=158, count=1 -I (20999) LVGL: Touch detected: x=180, y=337, count=1 -I (21029) LVGL: Touch detected: x=180, y=333, count=1 -I (21059) LVGL: Touch detected: x=179, y=315, count=1 -I (25709) LVGL: Touch detected: x=208, y=35, count=1 -I (25739) LVGL: Touch detected: x=208, y=35, count=1 -I (25769) LVGL: Touch detected: x=208, y=38, count=1 -I (25799) LVGL: Touch detected: x=208, y=48, count=1 -I (25829) LVGL: Touch detected: x=208, y=66, count=1 -I (25869) LVGL: Touch detected: x=212, y=132, count=1 -I (25899) LVGL: Touch detected: x=213, y=150, count=1 -I (25929) LVGL: Touch detected: x=216, y=195, count=1 -I (25959) LVGL: Touch detected: x=218, y=214, count=1 -I (25989) LVGL: Touch detected: x=223, y=227, count=1 -I (26529) LVGL: Touch detected: x=15, y=118, count=1 -I (26559) LVGL: Touch detected: x=15, y=118, count=1 -I (26589) LVGL: Touch detected: x=22, y=119, count=1 -I (26619) LVGL: Touch detected: x=44, y=123, count=1 -I (26649) LVGL: Touch detected: x=85, y=130, count=1 -I (26679) LVGL: Touch detected: x=157, y=141, count=1 -I (26709) LVGL: Touch detected: x=198, y=148, count=1 -I (26739) LVGL: Touch detected: x=233, y=152, count=1 -I (27189) LVGL: Touch detected: x=352, y=168, count=1 -I (27219) LVGL: Touch detected: x=352, y=168, count=1 -I (27249) LVGL: Touch detected: x=348, y=168, count=1 -I (27279) LVGL: Touch detected: x=324, y=167, count=1 -I (27309) LVGL: Touch detected: x=294, y=164, count=1 -I (27339) LVGL: Touch detected: x=252, y=161, count=1 -I (27369) LVGL: Touch detected: x=208, y=157, count=1 -I (27399) LVGL: Touch detected: x=180, y=153, count=1 -I (27429) LVGL: Touch detected: x=161, y=148, count=1 -I (27909) LVGL: Touch detected: x=166, y=336, count=1 -I (27939) LVGL: Touch detected: x=166, y=328, count=1 -I (28479) LVGL: Touch detected: x=199, y=325, count=1 -I (28509) LVGL: Touch detected: x=199, y=325, count=1 -I (28539) LVGL: Touch detected: x=198, y=322, count=1 -I (28569) LVGL: Touch detected: x=196, y=312, count=1 -I (28599) LVGL: Touch detected: x=195, y=292, count=1 -I (28629) LVGL: Touch detected: x=196, y=254, count=1 -I (28659) LVGL: Touch detected: x=201, y=162, count=1 -I (29139) LVGL: Touch detected: x=209, y=15, count=1 -I (29169) LVGL: Touch detected: x=209, y=16, count=1 -I (29199) LVGL: Touch detected: x=209, y=28, count=1 -I (29229) LVGL: Touch detected: x=212, y=55, count=1 -I (29279) LVGL: Touch detected: x=225, y=123, count=1 -I (29309) LVGL: Touch detected: x=235, y=166, count=1 -I (29339) LVGL: Touch detected: x=243, y=199, count=1 \ No newline at end of file