最近在浏览shinelk大侠的大侠关于OSS音频驱动,
对于dsp读函数的不理解,请shinelk大侠解释一下,谢了
在写函数中:
smdk2410_audio_write中,
(chunksize = s->fragsize - b->size;
if (chunksize > count)
chunksize = count;
DPRINTK("2: write %d to %d\n", chunksize, s->buf_idx);
if (copy_from_user(b->start + b->size, buffer, chunksize)) {
由于b->size在audio_setup_buf()中被设为0
memset(s->buffers, 0, sizeof(audio_buf_t) * s->nbfrags);
所以第一次进行放音时,数据从用户空间写到音频DMA映射缓冲区,然后被
DMA到声卡。
现在的问题是:
当在但在读函数中smdk2410_audio_read,有点看不懂了,因为初始化b->size为0,
那chunksize为0,怎么进行录音呢?音频缓冲区的数据时codec经过ADC后,
DMA进去的,是不是哪里更新了b->size?
chunksize = b->size;
if (chunksize > count)
chunksize = count;
DPRINTK("read %d from %d\n", chunksize, s->buf_idx);
//---------------------------add by shinelk---------------------------------------
if(audio_channels == 1){
buf = (b->start + s->fragsize - b->size);
for(i = 0;i < chunksize/2;i += 2){
for(j = 0;j < 2;j++)
tmp[i+j] = *(buf + i*2 +j);
}
if (copy_to_user(buffer,tmp,chunksize/2))