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

Page 103

Advertising
background image

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)

{

Advertising
This manual is related to the following products: