/* volc rtc example code This example code is in the Public Domain (or CC0 licensed, at your option.) Unless required by applicable law or agreed to in writing, this software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ #include #include #include #include "freertos/idf_additions.h" #include "nvs_flash.h" #include "esp_event.h" #include "esp_netif.h" #include "esp_netif_sntp.h" #include "esp_log.h" #include "esp_timer.h" #include "audio_sys.h" #include "audio_thread.h" #include "esp_peripherals.h" #include "periph_wifi.h" #include "periph_spiffs.h" #include "periph_sdcard.h" #include "audio_mem.h" #include "es8311.h" #include "board.h" #include "volc_rtc.h" // #define ENABLE_TASK_MONITOR static char *TAG = "main"; #if defined(ENABLE_TASK_MONITOR) static void monitor_task(void *arg) { while (1) { audio_sys_get_real_time_stats(); AUDIO_MEM_SHOW(TAG); vTaskDelay(10000 / portTICK_RATE_MS); } } #endif // Pullup to fix the leakage issue of the ES8311 in standby mode. static void set_gpio6_high(void) { gpio_config_t io_conf = { .pin_bit_mask = 1ULL << GPIO_NUM_6, .mode = GPIO_MODE_OUTPUT, .pull_up_en = 0, .pull_down_en = 0, .intr_type = GPIO_INTR_DISABLE }; gpio_config(&io_conf); gpio_set_level(GPIO_NUM_6, 1); } void app_main() { ESP_ERROR_CHECK(nvs_flash_init()); ESP_ERROR_CHECK(esp_netif_init()); ESP_LOGI(TAG, "Initialize board peripherals"); esp_periph_config_t periph_cfg = DEFAULT_ESP_PERIPH_SET_CONFIG(); esp_periph_set_handle_t set = esp_periph_set_init(&periph_cfg); #if CONFIG_ENABLE_RECORDER_DEBUG // Initialize SD Card peripheral audio_board_sdcard_init(set, SD_MODE_1_LINE); #endif periph_spiffs_cfg_t spiffs_cfg = { .root = "/spiffs", .partition_label = "spiffs_data", .max_files = 5, .format_if_mount_failed = true}; esp_periph_handle_t spiffs_handle = periph_spiffs_init(&spiffs_cfg); esp_periph_start(set, spiffs_handle); // Wait until spiffs is mounted while (!periph_spiffs_is_mounted(spiffs_handle)) { vTaskDelay(500 / portTICK_PERIOD_MS); } periph_wifi_cfg_t wifi_cfg = { .wifi_config.sta.ssid = CONFIG_WIFI_SSID, .wifi_config.sta.password = CONFIG_WIFI_PASSWORD, }; esp_periph_handle_t wifi_handle = periph_wifi_init(&wifi_cfg); esp_periph_start(set, wifi_handle); periph_wifi_wait_for_connected(wifi_handle, portMAX_DELAY); esp_sntp_config_t config = ESP_NETIF_SNTP_DEFAULT_CONFIG("pool.ntp.org"); esp_netif_sntp_init(&config); // Wait for time to be set int retry = 0; const int retry_count = 5; while (esp_netif_sntp_sync_wait(1000 / portTICK_PERIOD_MS) == ESP_ERR_TIMEOUT && ++retry < retry_count) { ESP_LOGI(TAG, "Waiting for system time to be set... (%d/%d)", retry, retry_count); } // Set timezone to China Standard Time time_t now = 0; struct tm timeinfo = { 0 }; setenv("TZ", "CST-8", 1); tzset(); localtime_r(&now, &timeinfo); set_gpio6_high(); audio_board_handle_t board_handle = audio_board_init(); audio_hal_ctrl_codec(board_handle->audio_hal, AUDIO_HAL_CODEC_MODE_BOTH, AUDIO_HAL_CTRL_START); audio_hal_set_volume(board_handle->audio_hal, 80); es8311_set_mic_gain(ES8311_MIC_GAIN_0DB); #if defined(ENABLE_TASK_MONITOR) audio_thread_create(NULL, "monitor_task", monitor_task, NULL, 5 * 1024, 13, true, 0); #endif // Init byte rtc engine volc_rtc_init(); }