#ifndef SPEAKER_H
#define SPEAKER_H

#include <stdint.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
#include "freertos/task.h"
#include "driver/i2s_std.h"
#include "driver/gpio.h"
#include "esp_check.h"
#include "sdkconfig.h"
#include "sd.h"

#define SPEAKER_PIN_BCLK  GPIO_NUM_46
#define SPEAKER_PIN_WS    GPIO_NUM_9
#define SPEAKER_PIN_DOUT  GPIO_NUM_3
#define SAMPLE_RATE 44100
#define AUDIO_BUFFER 2048

extern i2s_chan_handle_t tx_chan;

/// Plays a audio file stopping when something is received on `stop_handle`
///
/// `stop_handle` should be of size `uint8_t`.
esp_err_t play_raw_stop_queue(const char *fp, QueueHandle_t stop_handle);
esp_err_t play_raw(const char *fp);

void init_speaker(void);
void play_example();

#endif /* SPEAKER_H */