@@ -9,7 +9,7 @@ namespace audio_tools {
9
9
/* *
10
10
* @brief Basic I2S API - for the STM32
11
11
* Depends on https://github.com/pschatzmann/STM32F411-i2s-prototype
12
- * We just add a write and read buffer!
12
+ * We just add a write and read buffer and pass some parameters to the STM32 API !
13
13
* @author Phil Schatzmann
14
14
* @copyright GPLv3
15
15
*/
@@ -38,14 +38,12 @@ class I2SBase {
38
38
LOGE (" Bits per second not supported: %d" , cfg.bits_per_sample );
39
39
return false ;
40
40
}
41
- if (cfg.sample_rate !=44100 ){
42
- LOGE (" Sample rate not supported: %d" , cfg.sample_rate );
43
- return false ;
44
- }
45
41
if (cfg.channels !=2 ){
46
42
LOGE (" Channels not supported: %d" , cfg.channels );
47
43
return false ;
48
44
}
45
+
46
+ setupDefaultI2SParameters ();
49
47
50
48
switch (cfg.rx_tx_mode ){
51
49
case RX_MODE:
@@ -123,6 +121,74 @@ class I2SBase {
123
121
p_tx_buffer = nullptr ;
124
122
}
125
123
}
124
+
125
+ void setupDefaultI2SParameters () {
126
+ i2s_default_samplerate = getSampleRate (cfg);
127
+ i2s_default_mode = getMode (cfg);
128
+ i2s_default_standard = getStandard (cfg);
129
+ i2s_default_fullduplexmode = cfg.rx_tx_mode == RXTX_MODE ? I2S_FULLDUPLEXMODE_ENABLE : I2S_FULLDUPLEXMODE_DISABLE;
130
+ }
131
+
132
+ uint32_t getMode (I2SConfig &cfg){
133
+ if (cfg.is_master ) {
134
+ switch (cfg.rx_tx_mode ){
135
+ case RX_MODE:
136
+ return I2S_MODE_MASTER_RX;
137
+ case TX_MODE:
138
+ return I2S_MODE_MASTER_TX;
139
+ default :
140
+ LOGE (" RXTX_MODE not supported" );
141
+ return I2S_MODE_MASTER_TX;
142
+ }
143
+ } else {
144
+ switch (cfg.rx_tx_mode ){
145
+ case RX_MODE:
146
+ return I2S_MODE_SLAVE_RX;
147
+ case TX_MODE:
148
+ return I2S_MODE_SLAVE_TX;
149
+ default :
150
+ LOGE (" RXTX_MODE not supported" );
151
+ return I2S_MODE_SLAVE_TX;
152
+ }
153
+ }
154
+ }
155
+
156
+
157
+ uint32_t getStandard (I2SConfig &cfg){
158
+ uint32_t result;
159
+ switch (cfg.i2s_format ) {
160
+ case I2S_PHILIPS_FORMAT:
161
+ return I2S_STANDARD_PHILIPS;
162
+ case I2S_STD_FORMAT:
163
+ case I2S_LSB_FORMAT:
164
+ case I2S_RIGHT_JUSTIFIED_FORMAT:
165
+ return I2S_STANDARD_MSB;
166
+ case I2S_MSB_FORMAT:
167
+ case I2S_LEFT_JUSTIFIED_FORMAT:
168
+ return I2S_STANDARD_LSB;
169
+ }
170
+ return I2S_STANDARD_PHILIPS;
171
+ }
172
+
173
+ uint32_t getSampleRate (I2SConfig &cfg){
174
+ switch (cfg.sample_rate ){
175
+ case I2S_AUDIOFREQ_192K:
176
+ case I2S_AUDIOFREQ_96K:
177
+ case I2S_AUDIOFREQ_48K:
178
+ case I2S_AUDIOFREQ_44K:
179
+ case I2S_AUDIOFREQ_32K:
180
+ case I2S_AUDIOFREQ_22K:
181
+ case I2S_AUDIOFREQ_16K:
182
+ case I2S_AUDIOFREQ_11K:
183
+ case I2S_AUDIOFREQ_8K:
184
+ return cfg.sample_rate ;
185
+ default :
186
+ LOGE (" Unsupported sample rate: %u" , cfg.sample_rate );
187
+ return cfg.sample_rate ;
188
+ }
189
+ }
190
+
191
+
126
192
};
127
193
128
194
}
0 commit comments