/*
 * audio.c
 *
 *  Created on: 1 jul. 2019
 *      Author: dismuntel
 */


#include <stdio.h>
#include <string.h>

#include "audio.h"
#include "../configuration.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_spi_flash.h"
#include "esp_err.h"
//#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE
#include "esp_log.h"
#include "esp_partition.h"
#include "driver/i2s.h"
#include "audio_element.h"
#include "audio_pipeline.h"
#include "audio_event_iface.h"
#include "audio_common.h"
#include "i2s_stream.h"
#include "esp_peripherals.h"
#include "periph_wifi.h"
#include "board.h"
#include "audio_def.h"

static const char *TAG = "AUD";

audio_board_handle_t board_handle;

audio_element_handle_t audio_i2s_stream_reader;
audio_element_handle_t audio_i2s_stream_writer;

void audio_init(void){
	ESP_LOGI(TAG, "[ 0 ] Start audio codec chip");
	board_handle = audio_board_init();
	audio_hal_ctrl_codec(board_handle->audio_hal, AUDIO_HAL_CODEC_MODE_BOTH, AUDIO_HAL_CTRL_START);

	//READER
	i2s_stream_cfg_t i2s_cfg_reader = I2S_STREAM_CFG_DEFAULT();
	i2s_cfg_reader.type = AUDIO_STREAM_READER;
	i2s_cfg_reader.task_core = 1;
	audio_i2s_stream_reader = i2s_stream_init(&i2s_cfg_reader);
	audio_element_info_t i2s_info_reader = {0};
	audio_element_getinfo(audio_i2s_stream_reader, &i2s_info_reader);
	i2s_info_reader.bits = I2S_BITS;
	i2s_info_reader.channels = I2S_CHANNEL;
	i2s_info_reader.sample_rates = I2S_SAMPLE_RATE;
	audio_element_setinfo(audio_i2s_stream_reader, &i2s_info_reader);

	//WRITER
	i2s_stream_cfg_t i2s_cfg_writer = I2S_STREAM_CFG_DEFAULT();
	i2s_cfg_writer.task_core = 1;
	i2s_cfg_writer.type = AUDIO_STREAM_WRITER;
	i2s_cfg_writer.i2s_config.sample_rate = I2S_SAMPLE_RATE;
	audio_i2s_stream_writer = i2s_stream_init(&i2s_cfg_writer);

}

void audio_close(void){

	audio_element_deinit(audio_i2s_stream_reader);
	audio_element_deinit(audio_i2s_stream_writer);

}

void audio_set_volume(uint8_t val){
	audio_hal_set_volume(board_handle->audio_hal, val);
}

audio_element_handle_t * audio_get_i2s_reader(void){return &audio_i2s_stream_reader;}
audio_element_handle_t * audio_get_i2s_writer(void){return &audio_i2s_stream_writer;}

