88 lines
3.1 KiB
C++
88 lines
3.1 KiB
C++
/****************************************************************************
|
|
* Aug 3 22:21:17 2020
|
|
* Copyright 2020 Dirk Brosswick
|
|
* Email: dirk.brosswick@googlemail.com
|
|
****************************************************************************/
|
|
|
|
/*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*/
|
|
#include "config.h"
|
|
#include "driver/i2s.h"
|
|
|
|
#include "sound.h"
|
|
#include "gui/sound/snd_start.h"
|
|
#include "gui/sound/snd_signal.h"
|
|
|
|
EventGroupHandle_t sound_event_handle = NULL;
|
|
TaskHandle_t _sound_Task;
|
|
void sound_Task( void * pvParameters );
|
|
|
|
void sound_setup( void ) {
|
|
|
|
esp_err_t err;
|
|
|
|
i2s_config_t i2s_config = {
|
|
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX),
|
|
.sample_rate = 8000,
|
|
.bits_per_sample = I2S_BITS_PER_SAMPLE_32BIT,
|
|
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
|
|
.communication_format = (i2s_comm_format_t)(I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB),
|
|
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, // high interrupt priority
|
|
.dma_buf_count = 8,
|
|
.dma_buf_len = 64 //Interrupt level 1
|
|
};
|
|
|
|
i2s_pin_config_t pin_config = {
|
|
.bck_io_num = TWATCH_DAC_IIS_BCK, //this is BCK pin
|
|
.ws_io_num = TWATCH_DAC_IIS_WS, // this is LRCK pin
|
|
.data_out_num = TWATCH_DAC_IIS_DOUT, // this is DATA output pin
|
|
.data_in_num = -1 //Not used
|
|
};
|
|
|
|
err = i2s_driver_install( I2S_PORT, &i2s_config, 0, NULL);
|
|
if (err != ESP_OK) {
|
|
log_e("Failed installing driver: %d\r\n", err );
|
|
while (true);
|
|
}
|
|
|
|
err = i2s_set_pin( I2S_PORT, &pin_config);
|
|
if (err != ESP_OK) {
|
|
log_e("Failed settings pin config: %d\r\n", err );
|
|
while (true);
|
|
}
|
|
|
|
sound_event_handle = xEventGroupCreate();
|
|
|
|
xTaskCreate( sound_Task, /* Function to implement the task */
|
|
"sound Task", /* Name of the task */
|
|
2000, /* Stack size in words */
|
|
NULL, /* Task input parameter */
|
|
1, /* Priority of the task */
|
|
&_sound_Task ); /* Task handle. */
|
|
|
|
}
|
|
|
|
void sound_Task( void * pvParameters ) {
|
|
esp_err_t err;
|
|
size_t written = 0;
|
|
|
|
err = i2s_write( I2S_PORT, start_raw, sizeof(start_raw), &written, portMAX_DELAY );
|
|
if (err != ESP_OK) {
|
|
log_e("Failed write bytes: %d\r\n", err );
|
|
}
|
|
i2s_stop( I2S_PORT );
|
|
vTaskDelete( NULL );
|
|
} |