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

KTD-S0057-I
Page 102 Linux® Programming Examples (DebianTM)
KTAM3874/pITX Software Guide
/* Transfer method - direct write only */
static int direct_loop (snd_pcm_t *handle, signed short *samples ATTRIBUTE_UNUSED,
snd_pcm_channel_area_t
*areas
ATTRIBUTE_UNUSED)
{
double phase = 0;
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 err, first = 1;
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));
return
err;
}
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));
return
err;
}
}
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));
return
err;
}
first = 1;
continue;
}
if (avail < period_size)
{
if
(first)
{
first = 0;
err = snd_pcm_start (handle);