#include #include #include "sdkconfig.h" #include "esp_event.h" #include "esp_log.h" #include "esp_system.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "nvs.h" #include "nvs_flash.h" #include "esp_sleep.h" #include "epd.hpp" #include "led.hpp" #include "network.hpp" #include "provider.hpp" #include "test_image.h" static const char *TAG = "ClientMain"; extern "C" void app_main() { ESP_LOGI(TAG, "Hello, Calendink Client!"); // Initialize NVS esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } ESP_ERROR_CHECK(ret); ESP_ERROR_CHECK(esp_event_loop_create_default()); setup_led(); static uint8 display_buffer[96000]; bool received_from_provider = false; // Connect to WiFi ESP_LOGI(TAG, "Initializing WiFi connection"); initialize_network(); esp_err_t err = connect_wifi(CONFIG_CALENDINK_WIFI_SSID, CONFIG_CALENDINK_WIFI_PASSWORD, false); if (err == ESP_OK) { uint8_t retries = 1; do { err = check_wifi_connection(retries); if (err != ESP_OK) { ESP_LOGW(TAG, "WiFi connection check timeout, retrying... (%d)", retries); led_blink_number(3, 255, 0, 0); } retries++; } while (err == ESP_ERR_TIMEOUT && retries <= CONFIG_CALENDINK_WIFI_RETRIES); } if (err == ESP_OK) { ESP_LOGI(TAG, "Successfully connected to WiFi!"); ESP_LOGI(TAG, "Fetching screen from Provider..."); received_from_provider = test_provider_communication(display_buffer, sizeof(display_buffer)); ESP_LOGI(TAG, "Provider result: %s", received_from_provider ? "SUCCESS" : "FAILED"); } else { ESP_LOGE(TAG, "Failed to connect to WiFi."); } turn_off_led(); ESP_LOGI(TAG, "Initializing EPD"); epd_init(); epd_init_display(true); if (received_from_provider) { ESP_LOGI(TAG, "Drawing image from Provider"); epd_draw_bitmap_grayscale(epd_color::WHITE, display_buffer); } else { ESP_LOGW(TAG, "Drawing fallback test image"); epd_draw_bitmap_grayscale(epd_color::WHITE, gImage_4G1); } epd_refresh(); epd_shutdown_display(); if (err == ESP_OK) { disconnect_wifi(); shutdown_network(); } ESP_LOGI(TAG, "Waiting 5 seconds before deep sleep..."); vTaskDelay(pdMS_TO_TICKS(15000)); ESP_LOGI(TAG, "Entering Deep Sleep for 60 seconds..."); esp_sleep_enable_timer_wakeup(30ULL * 1000000ULL); esp_deep_sleep_start(); }