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

KTD-S0057-I
Page 99 Linux® Programming Examples (DebianTM)
KTAM3874/pITX Software Guide
/* Transfer method - asynchronous notification + direct write */
static void async_direct_callback (snd_async_handler_t *ahandler)
{
snd_pcm_t *handle = snd_async_handler_get_pcm (ahandler);
struct async_private_data *data = snd_async_handler_get_callback_private (ahandler);
const snd_pcm_channel_area_t *my_areas;
snd_pcm_uframes_t offset, frames, size;
snd_pcm_sframes_t avail, commitres;
snd_pcm_state_t
state;
int first = 0, err;
while
(1)
{
state = snd_pcm_state (handle);
if (state == SND_PCM_STATE_XRUN)
{
err = xrun_recovery (handle, -EPIPE);
if (err < 0)
{
printf ("XRUN recovery failed: %s\n", snd_strerror (err));
exit
(EXIT_FAILURE);
}
first = 1;
}
else if (state == SND_PCM_STATE_SUSPENDED)
{
err = xrun_recovery (handle, -ESTRPIPE);
if (err < 0)
{
printf ("SUSPEND recovery failed: %s\n", snd_strerror (err));
exit
(EXIT_FAILURE);
}
}
avail = snd_pcm_avail_update (handle);
if (avail < 0)
{
err = xrun_recovery (handle, avail);
if (err < 0)
{
printf ("avail update failed: %s\n", snd_strerror (err));
exit
(EXIT_FAILURE);
}
first = 1;
continue;
}
if (avail < period_size)
{
if
(first)
{