zephyr_i2s_dev.c:
static void *i2s_thread_in(void *arg)
{
struct i2s_strm *i2s_stream = (struct i2s_strm *) arg;
uint32_t block_size;
uint8_t *buf = NULL;
uint8_t half_transfer = 1;
int ret;
buf = i2s_stream->i2s_buf;
while (1)
{
if(!start_stream) {
k_sleep(K_MSEC(10));
}
else
{
ret = i2s_buf_read(i2s_dev_rx, buf, &block_size);
//printf("I2S_READ: %p size %u ret=%d\n",buf,block_size,ret);
if (ret < 0)
{
printf("I2S_IN: Failed to read data: %d\n", ret);
//break;
}
else
{
//printf("I2S_IN: Read data size=%u\n",block_size);
if(half_transfer)
{
BSP_AUDIO_IN_HalfTransfer_CallBack();
buf += ZEPHYR_AUDIO_BLOCK_SIZE;
half_transfer = 0;
}
else
{
BSP_AUDIO_IN_TransferComplete_CallBack();
buf = i2s_stream->i2s_buf;
half_transfer = 1;
}
}
}
if (i2s_stream->state != I2S_STREAM_RUNNING)
{
printf("Exit i2s_in_thread\n");
break;
}
}
return NULL;
}
zephyr_audio_dev.c:
......................................
static void zephyr_audio_in_update_buffer(int buf_index) {
zephyr_adc.buf = &zephyr_audio_in_bufs[0] + buf_index * ZEPHYR_AUDIO_BLOCK_SIZE;
Pa_StartStream(zephyr_hw_in.stream);
}
void BSP_AUDIO_IN_HalfTransfer_CallBack(void) {
if (zephyr_hw_in.zephyr_audio_running) {
zephyr_audio_in_update_buffer(0);
}
}
void BSP_AUDIO_IN_TransferComplete_CallBack(void) {
if (zephyr_hw_in.zephyr_audio_running) {
zephyr_audio_in_update_buffer(1);
}
}