Ktam3874/pitx software guide – Kontron KTAM3874-pITX User Manual

Page 108

Advertising
background image

KTD-S0057-I

Page 104 Linux® Programming Examples (DebianTM)


KTAM3874/pITX Software Guide

/* Transfer method - direct write only using mmap_write functions */

static int direct_write_loop (snd_pcm_t *handle, signed short *samples, snd_pcm_channel_area_t *areas)
{

double phase = 0;

signed short *ptr;

int err, cptr;

while

(1)

{

generate_sine (areas, 0, period_size, &phase);

ptr = samples;

cptr = period_size;

while (cptr > 0)

{

err = snd_pcm_mmap_writei (handle, ptr, cptr);

if (err == -EAGAIN)

continue;

if (err < 0)

{

if (xrun_recovery (handle, err) < 0)

{

printf ("Write error: %s\n", snd_strerror (err));

exit

(EXIT_FAILURE);

}

break;

/* skip one period */

}

ptr += err * channels;

cptr -= err;

}

}
}




static struct transfer_method transfer_methods[] =
{

{ "write", SND_PCM_ACCESS_RW_INTERLEAVED, write_loop },

{ "write_and_poll", SND_PCM_ACCESS_RW_INTERLEAVED, write_and_poll_loop },

{ "async", SND_PCM_ACCESS_RW_INTERLEAVED, async_loop },

{ "async_direct", SND_PCM_ACCESS_MMAP_INTERLEAVED, async_direct_loop },

{ "direct_interleaved", SND_PCM_ACCESS_MMAP_INTERLEAVED, direct_loop },

{ "direct_noninterleaved", SND_PCM_ACCESS_MMAP_NONINTERLEAVED, direct_loop },

{ "direct_write", SND_PCM_ACCESS_MMAP_INTERLEAVED, direct_write_loop },

{ NULL, SND_PCM_ACCESS_RW_INTERLEAVED, NULL }

};


static void help (void)
{
int

k;

Advertising
This manual is related to the following products: