Skip to content

Commit 4013206

Browse files
committed
stm32 parameters
1 parent 2fb7364 commit 4013206

File tree

1 file changed

+71
-5
lines changed

1 file changed

+71
-5
lines changed

src/AudioI2S/I2SSTM32.h

Lines changed: 71 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace audio_tools {
99
/**
1010
* @brief Basic I2S API - for the STM32
1111
* 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!
1313
* @author Phil Schatzmann
1414
* @copyright GPLv3
1515
*/
@@ -38,14 +38,12 @@ class I2SBase {
3838
LOGE("Bits per second not supported: %d", cfg.bits_per_sample);
3939
return false;
4040
}
41-
if (cfg.sample_rate!=44100){
42-
LOGE("Sample rate not supported: %d", cfg.sample_rate);
43-
return false;
44-
}
4541
if (cfg.channels!=2){
4642
LOGE("Channels not supported: %d", cfg.channels);
4743
return false;
4844
}
45+
46+
setupDefaultI2SParameters();
4947

5048
switch(cfg.rx_tx_mode){
5149
case RX_MODE:
@@ -123,6 +121,74 @@ class I2SBase {
123121
p_tx_buffer = nullptr;
124122
}
125123
}
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+
126192
};
127193

128194
}

0 commit comments

Comments
 (0)