Skip to content

Commit 0de71ae

Browse files
committed
Implement setGain() API with range 0-8
1 parent 0970595 commit 0de71ae

File tree

3 files changed

+8
-6
lines changed

3 files changed

+8
-6
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
//PORTENTA_H7 min -12 max 51
4242
//NANO 33 BLE SENSe min 0 max 80
43+
//NICLA_VISION min 0 max 8
4344
void setGain(int gain);
4445
void setBufferSize(int bufferSize);
4546
size_t getBufferSize();

libraries/PDM/src/nicla_vision/PDM.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ int PDMClass::begin(int channels, int sampleRate) {
5858
_samplerate = sampleRate;
5959

6060
if (_gain == -1) {
61-
_gain = 24;
61+
_gain = 3;
6262
}
6363

6464
g_pcmbuf = (uint16_t*)_doubleBuffer.data();
@@ -104,9 +104,7 @@ void PDMClass::onReceive(void(*function)(void))
104104
void PDMClass::setGain(int gain)
105105
{
106106
_gain = gain;
107-
if(_init == 1) {
108-
py_audio_gain_set(gain);
109-
}
107+
py_audio_gain_set(gain);
110108
}
111109

112110
void PDMClass::setBufferSize(int bufferSize)

libraries/PDM/src/nicla_vision/audio.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ static uint32_t HAL_RCC_DFSDM1_CLK_ENABLED=0;
3535

3636
static uint32_t DFSDM1_Init = 0;
3737

38+
static int attenuation = 5;
39+
3840
ALIGN_32BYTES(int32_t RecBuff[PDM_BUFFER_SIZE]);
3941

4042
#define SaturaLH(N, L, H) (((N)<(L))?(L):(((N)>(H))?(H):(N)))
@@ -391,6 +393,7 @@ int py_audio_init(size_t channels, uint32_t frequency)
391393

392394
void py_audio_gain_set(int gain_db)
393395
{
396+
attenuation = 8 - gain_db;
394397
}
395398

396399
void py_audio_deinit()
@@ -414,15 +417,15 @@ void audio_pendsv_callback(void)
414417
xfer_status &= ~(DMA_XFER_HALF);
415418

416419
for (int i=0; i<PDM_BUFFER_SIZE/2; i++) {
417-
((int16_t*)g_pcmbuf)[i] = SaturaLH((RecBuff[i] >> 8), -32768, 32767);
420+
((int16_t*)g_pcmbuf)[i] = SaturaLH((RecBuff[i] >> attenuation), -32768, 32767);
418421
}
419422
} else if ((xfer_status & DMA_XFER_FULL)) { // Check for transfer complete.
420423
// Clear buffer state.
421424
xfer_status &= ~(DMA_XFER_FULL);
422425

423426
for(int i = 0; i < PDM_BUFFER_SIZE/2; i++)
424427
{
425-
((int16_t*)g_pcmbuf)[i] = SaturaLH((RecBuff[PDM_BUFFER_SIZE/2 + i] >> 8), -32768, 32767);
428+
((int16_t*)g_pcmbuf)[i] = SaturaLH((RecBuff[PDM_BUFFER_SIZE/2 + i] >> attenuation), -32768, 32767);
426429
}
427430
}
428431
}

0 commit comments

Comments
 (0)