Skip to content

Commit f42c6f5

Browse files
committed
Fix portenta PDM.setBufferSize()
1 parent c315f5f commit f42c6f5

File tree

5 files changed

+23
-4
lines changed

5 files changed

+23
-4
lines changed

libraries/PDM/src/PDM.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class PDMClass
4040

4141
void setGain(int gain);
4242
void setBufferSize(int bufferSize);
43+
size_t getBufferSize();
4344

4445
// private:
4546
void IrqHandler(bool halftranfer);

libraries/PDM/src/stm32/PDM.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,21 @@ void PDMClass::setBufferSize(int bufferSize)
113113
_doubleBuffer.setSize(bufferSize);
114114
}
115115

116+
size_t PDMClass::getBufferSize()
117+
{
118+
return _doubleBuffer.getSize();
119+
}
120+
116121
void PDMClass::IrqHandler(bool halftranfer)
117122
{
118123
if (_doubleBuffer.available() == 0) {
119124
g_pcmbuf = (uint16_t*)_doubleBuffer.data();
120125
audio_pendsv_callback();
121126
_doubleBuffer.swap(_doubleBuffer.availableForWrite());
122-
}
123127

124-
if (_onReceive) {
128+
if (_onReceive) {
125129
_onReceive();
130+
}
126131
}
127132
}
128133

@@ -135,6 +140,10 @@ void PDMIrqHandler(bool halftranfer)
135140
void PDMsetBufferSize(int size) {
136141
PDM.setBufferSize(size);
137142
}
143+
144+
size_t PDMgetBufferSize() {
145+
return PDM.getBufferSize();
146+
}
138147
}
139148

140149
PDMClass PDM(0, 0, 0);

libraries/PDM/src/stm32/audio.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,11 @@ int py_audio_init(size_t channels, uint32_t frequency, int gain_db, float highpa
303303
PDM_Filter_setConfig(&PDM_FilterHandler[i], &PDM_FilterConfig[i]);
304304
}
305305

306-
PDMsetBufferSize(samples_per_channel * g_o_channels * sizeof(int16_t));
307-
//g_pcmbuf = malloc(samples_per_channel * g_channels * sizeof(int16_t));
306+
uint32_t min_buff_size = samples_per_channel * g_o_channels * sizeof(int16_t);
307+
uint32_t buff_size = PDMgetBufferSize();
308+
if(buff_size < min_buff_size) {
309+
PDMsetBufferSize(min_buff_size);
310+
}
308311

309312
return 1;
310313
}

libraries/PDM/src/utility/PDMDoubleBuffer.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ void PDMDoubleBuffer::setSize(int size)
3737
reset();
3838
}
3939

40+
size_t PDMDoubleBuffer::getSize()
41+
{
42+
return _size;
43+
}
44+
4045
void PDMDoubleBuffer::reset()
4146
{
4247
_buffer[0] = (uint8_t*)realloc(_buffer[0], _size);

libraries/PDM/src/utility/PDMDoubleBuffer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class PDMDoubleBuffer
3131
virtual ~PDMDoubleBuffer();
3232

3333
void setSize(int size);
34+
size_t getSize();
3435

3536
void reset();
3637

0 commit comments

Comments
 (0)