Hello,
I am debugging an userspace external io type plugin, written for an ARM based board where the plugin interacts with DSP directly using shared memory.
Every time I have to send period_size data to the DSP, I have my own write/read methods to do so.
I am having a problem accessing the alsa ring buffer, my transfer function looks like following.
static char * temp; static snd_pcm_sframes_t alsa_transfer(snd_pcm_ioplug_t *io, const snd_pcm_channel_area_t *areas, snd_pcm_uframes_t offset, snd_pcm_uframes_t size) {
......
temp = malloc(period_size); memcpy(temp, unsigned char *)areas->addr + (areas->first + areas->step * offset) / 8, period_size); write_to_dsp(temp, period_size); ....... }
All the book keeping is done properly, the first chunk of data is sent properly to DSP and pointer() returns correct value, next time when transfer is called, the memcpy gives segfault. ALSA buffer is an interleaved buffer and I am not using mmap mode. Any idea what might be wrong?
When I do something like this: memcpy(temp, "test data test data", period_size); the data is sent properly to DSP, but alsa buffer data is not getting accessed properly.