128 lines
3.7 KiB
C
128 lines
3.7 KiB
C
/* 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 <stdio.h>
|
|
#include <time.h>
|
|
#include <sys/time.h>
|
|
|
|
#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();
|
|
}
|