Arduino AudioKit HAL
All Classes Files Functions Variables Pages
audiokit_board.h
Go to the documentation of this file.
1 /**
2  * @file audiokit_board.h
3  * @author Phil Schatzmann
4  * @brief Board driver which provides the pin information
5  * @date 2023-5-25
6  *
7  * @copyright Copyright (c) 2021
8  **/
9 
10 #pragma once
11 
12 #ifdef ESP32
13 #include "hal/spi_types.h"
14 #include "driver/spi_slave.h"
15 #include "driver/spi_master.h"
16 #include "driver/i2c.h"
17 #include "driver/i2s.h"
18 #endif
19 #include <string.h>
20 #include "AudioKitSettings.h"
21 #include "audio_hal/audio_error.h"
22 #include "audio_hal/audio_gpio.h"
23 #include "audio_hal/audio_hal.h" // for audio_hal_func_t
24 #include "audio_hal/audio_mem.h"
25 #include "audio_hal/audiokit_board_select.h"
26 #include "audio_hal/audiokit_logger.h"
27 
28 
29 #ifndef ES8311_MCLK_SRC
30 # define ES8311_MCLK_SRC -1
31 #endif
32 
33 #define BUTTON_REC_ID PIN_KEY1
34 #define BUTTON_MODE_ID PIN_KEY2
35 #define BUTTON_SET_ID PIN_KEY3
36 #define BUTTON_PLAY_ID PIN_KEY4
37 #define BUTTON_VOLDOWN_ID PIN_KEY5
38 #define BUTTON_VOLUP_ID PIN_KEY6
39 
40 
41 #define AUDIO_CODEC_DEFAULT_CONFIG() \
42  { \
43  .adc_input = AUDIO_HAL_ADC_INPUT_LINE1, \
44  .dac_output = AUDIO_HAL_DAC_OUTPUT_ALL, \
45  .codec_mode = AUDIO_HAL_CODEC_MODE_BOTH, \
46  .i2s_iface = { \
47  .mode = AUDIO_HAL_MODE_SLAVE, \
48  .fmt = AUDIO_HAL_I2S_NORMAL, \
49  .samples = AUDIO_HAL_48K_SAMPLES, \
50  .bits = AUDIO_HAL_BIT_LENGTH_16BITS, \
51  }, \
52 };
53 
54 
55 /**
56  * Struct with all pins
57  */
59  // SD Card
60  int8_t sd_cs = PIN_AUDIO_KIT_SD_CARD_CS;
61  int8_t sd_miso = PIN_AUDIO_KIT_SD_CARD_MISO;
62  int8_t sd_mosi = PIN_AUDIO_KIT_SD_CARD_MOSI;
63  int8_t sd_clk = PIN_AUDIO_KIT_SD_CARD_CLK;
64  int8_t sd_intr = SDCARD_INTR_GPIO;
65  int8_t sd_max_open_files = SDCARD_OPEN_FILE_NUM_MAX;
66 
67  // I2S
68  int8_t i2s_num = 0;
69  int8_t i2s_mclk = PIN_I2S_AUDIO_KIT_MCLK; // usually 0
70  int8_t i2s_bck = PIN_I2S_AUDIO_KIT_BCK;
71  int8_t i2s_ws = PIN_I2S_AUDIO_KIT_WS;
72  int8_t i2s_out = PIN_I2S_AUDIO_KIT_DATA_OUT;
73  int8_t i2s_in = PIN_I2S_AUDIO_KIT_DATA_IN;
74 
75  int8_t i2s1_mclk = PIN_I2S_AUDIO_KIT_MCLK1; // usually 0
76  int8_t i2s1_bck = PIN_I2S_AUDIO_KIT_BCK1;
77  int8_t i2s1_ws = PIN_I2S_AUDIO_KIT_WS1;
78  int8_t i2s1_out = PIN_I2S_AUDIO_KIT_DATA_OUT1;
79  int8_t i2s1_in = PIN_I2S_AUDIO_KIT_DATA_IN1;
80 
81  // I2C
82  int8_t i2c_num = I2C_NUM_0;
83  int8_t i2c_scl = I2C_MASTER_SCL_IO;
84  int8_t i2c_sda = I2C_MASTER_SDA_IO;
85 
86  int8_t key1 = PIN_KEY1;
87  int8_t key2 = PIN_KEY2;
88  int8_t key3 = PIN_KEY3;
89  int8_t key4 = PIN_KEY4;
90  int8_t key5 = PIN_KEY5;
91  int8_t key6 = PIN_KEY6;
92 
93  int8_t detect_auxin = AUXIN_DETECT_GPIO;
94  int8_t detect_headphone = HEADPHONE_DETECT;
95  int8_t enable_pa = PA_ENABLE_GPIO;
96 
97  int8_t led_green = GREEN_LED_GPIO;
98 
99  int8_t adc_detect = ADC_DETECT;
100  int8_t es7243_mclk = ES7243_MCLK;
101  int8_t es8311_mclk_src = ES8311_MCLK_SRC;
102  int8_t reset_codec = RESET_CODEC;
103  int8_t reset_board = RESET_BOARD;
104  int8_t led_blue = BLUE_LED_GPIO;
105 };
106 
107 /**
108  * Class which provides the pin assingments using the conventions used by ADF
109  */
111 public:
112  void setup(audio_kit_pins pins)
113  {
114  this->pins = pins;
115  }
116 
117  esp_err_t get_i2c_pins(i2c_port_t port, i2c_config_t* i2c_config)
118  {
119  AUDIO_NULL_CHECK(TAG, i2c_config, return ESP_FAIL);
120  if (port == I2C_NUM_0) {
121  i2c_config->sda_io_num = pins.i2c_sda;
122  i2c_config->scl_io_num = pins.i2c_scl;
123  } else if (port == I2C_NUM_1 ) {
124  // we use the same pins like in 0
125  i2c_config->sda_io_num = pins.i2c_sda;
126  i2c_config->scl_io_num = pins.i2c_scl;
127  } else {
128  i2c_config->sda_io_num = -1;
129  i2c_config->scl_io_num = -1;
130  KIT_LOGE("i2c port %d is not supported", port);
131  return ESP_FAIL;
132  }
133 
134  KIT_LOGI("i2c port: %d", port);
135  KIT_LOGI("i2c sda: %d", i2c_config->sda_io_num);
136  KIT_LOGI("i2c scl: %d", i2c_config->scl_io_num);
137 
138  return ESP_OK;
139  }
140 
141  esp_err_t get_i2s_pins(i2s_port_t port, i2s_pin_config_t* i2s_config)
142  {
143  AUDIO_NULL_CHECK(TAG, i2s_config, return ESP_FAIL);
144  if (port == I2S_NUM_0) {
145  i2s_config->bck_io_num = pins.i2s_bck;
146  i2s_config->ws_io_num = pins.i2s_ws;
147  i2s_config->data_out_num = pins.i2s_out;
148  i2s_config->data_in_num = pins.i2s_in;
149  i2s_config->mck_io_num = pins.i2s_mclk;
150  } else if (port == I2S_NUM_1) {
151  i2s_config->bck_io_num = pins.i2s1_bck;
152  i2s_config->ws_io_num = pins.i2s1_ws;
153  i2s_config->data_out_num = pins.i2s1_out;
154  i2s_config->data_in_num = pins.i2s1_in;
155  i2s_config->mck_io_num = pins.i2s1_mclk;
156  } else {
157  //memset(i2s_config, -1, sizeof(i2s_pin_config_t));
158  KIT_LOGE("i2s port %d is not supported", port);
159  return ESP_FAIL;
160  }
161 
162  KIT_LOGI("i2s bck_io_num: %d", i2s_config->bck_io_num);
163  KIT_LOGI("i2s ws_io_num: %d", i2s_config->ws_io_num);
164  KIT_LOGI("i2s data_out_num: %d", i2s_config->data_out_num);
165  KIT_LOGI("i2s data_in_num: %d", i2s_config->data_in_num);
166 
167  return ESP_OK;
168  }
169 
170  esp_err_t get_spi_pins(
171  spi_bus_config_t* spi_config, spi_device_interface_config_t* spi_device_interface_config)
172  {
173  AUDIO_NULL_CHECK(TAG, spi_config, return ESP_FAIL);
174  AUDIO_NULL_CHECK(TAG, spi_device_interface_config, return ESP_FAIL);
175 
176  spi_config->mosi_io_num = -1;
177  spi_config->miso_io_num = -1;
178  spi_config->sclk_io_num = -1;
179  spi_config->quadwp_io_num = -1;
180  spi_config->quadhd_io_num = -1;
181 
182  spi_device_interface_config->spics_io_num = -1;
183 
184  KIT_LOGW("SPI interface is not supported");
185  return ESP_OK;
186  }
187 
188  // sdcard
189 
190  int8_t get_sdcard_intr_gpio(void) { return pins.sd_intr; }
191 
192  int8_t get_sdcard_open_file_num_max(void) { return pins.sd_max_open_files; }
193 
194  // input-output pins
195 
196  int8_t get_auxin_detect_gpio(void) { return pins.detect_auxin; }
197 
198  int8_t get_headphone_detect_gpio(void) { return pins.detect_headphone; }
199 
200  int8_t get_pa_enable_gpio(void) { return pins.enable_pa; }
201 
202  // button pins
203 
204  int8_t get_input_rec_id(void) { return pins.key1; }
205 
206  int8_t get_input_mode_id(void) { return pins.key2; }
207 
208  int8_t get_input_set_id(void) { return pins.key3; }
209 
210  int8_t get_input_play_id(void) { return pins.key4; }
211 
212  int8_t get_input_volup_id(void) { return pins.key5; }
213 
214  int8_t get_input_voldown_id(void) { return pins.key6; }
215  // led pins
216 
217  int8_t get_adc_detect_gpio() { return pins.adc_detect; }
218  int8_t get_es7243_mclk_gpio() { return pins.es7243_mclk; }
219  int8_t get_es8311_mclk_src() { return pins.es8311_mclk_src; }
220  int8_t get_reset_codec_gpio() { return pins.reset_codec; }
221  int8_t get_reset_board_gpio() { return pins.reset_board; }
222  int8_t get_blue_led_gpio() { return pins.led_blue; }
223  int8_t get_green_led_gpio(void) { return pins.led_green; }
224 
225 protected:
226  audio_kit_pins pins;
227 
228 };
AUDIOKIT_BOARD selects a specic board: 1) lyrat_v4_3 2) lyrat_v4_2 3) lyrat_mini_v1_1 4) esp32_s2_kal...