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

KTD-S0057-I
Page 98 Linux® Programming Examples (DebianTM)
KTAM3874/pITX Software Guide
static int async_loop (snd_pcm_t *handle, signed short *samples, snd_pcm_channel_area_t *areas)
{
struct async_private_data data;
snd_async_handler_t
*ahandler;
int err, count;
data.samples = samples;
data.areas = areas;
data.phase = 0;
err = snd_async_add_pcm_handler (&ahandler, handle, async_callback, &data);
if (err < 0)
{
printf ("Unable to register async handler\n");
exit
(EXIT_FAILURE);
}
for (count = 0; count < 2; count++)
{
generate_sine (areas, 0, period_size, &data.phase);
err = snd_pcm_writei (handle, samples, period_size);
if (err < 0)
{
printf ("Initial write error: %s\n", snd_strerror (err));
exit
(EXIT_FAILURE);
}
if (err != period_size)
{
printf ("Initial write error: written %i expected %li\n", err, period_size);
exit
(EXIT_FAILURE);
}
}
if (snd_pcm_state (handle) == SND_PCM_STATE_PREPARED)
{
err = snd_pcm_start (handle);
if (err < 0)
{
printf ("Start error: %s\n", snd_strerror (err));
exit
(EXIT_FAILURE);
}
}
/* because all other work is done in the signal handler suspend the process */
while
(1)
{
sleep
(1);
}
}