109 lines
2.6 KiB
C++
109 lines
2.6 KiB
C++
#include <cassert>
|
|
#include <cstdio>
|
|
|
|
#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();
|
|
}
|