Skip to content

Commit 6d7c9f7

Browse files
committed
fill in I2S.peek()
1 parent 010b6a8 commit 6d7c9f7

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

libraries/I2S/src/I2S.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,20 @@ int I2SClass::read()
179179

180180
int I2SClass::peek()
181181
{
182-
return 0;
182+
uint8_t enableInterrupts = ((__get_PRIMASK() & 0x1) == 0);
183+
int sample = 0;
184+
185+
// disable interrupts,
186+
__disable_irq();
187+
188+
_doubleBuffer.peek(&sample, _bitsPerSample / 8);
189+
190+
if (enableInterrupts) {
191+
// re-enable the interrupts
192+
__enable_irq();
193+
}
194+
195+
return sample;
183196
}
184197

185198
void I2SClass::flush()

libraries/I2S/src/utility/I2SDoubleBuffer.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,23 @@ size_t I2SDoubleBuffer::read(void *buffer, size_t size)
8080
return size;
8181
}
8282

83+
size_t I2SDoubleBuffer::peek(void *buffer, size_t size)
84+
{
85+
size_t avail = available();
86+
87+
if (size > avail) {
88+
size = avail;
89+
}
90+
91+
if (size == 0) {
92+
return 0;
93+
}
94+
95+
memcpy(buffer, &_buffer[_index][_readOffset[_index]], size);
96+
97+
return size;
98+
}
99+
83100
void* I2SDoubleBuffer::data()
84101
{
85102
return (void*)_buffer[_index];

libraries/I2S/src/utility/I2SDoubleBuffer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class I2SDoubleBuffer
3535
size_t availableForWrite();
3636
size_t write(const void *buffer, size_t size);
3737
size_t read(void *buffer, size_t size);
38+
size_t peek(void *buffer, size_t size);
3839
void* data();
3940
size_t available();
4041
void swap(int length = 0);

0 commit comments

Comments
 (0)