snd_ctl_hw_t *hw = handle->private_data;
ssize_t res = read(hw->fd, event, sizeof(*event));
if (res <= 0)
- return res;
+ return -errno;
assert(res == sizeof(*event));
return 1;
}
{
snd_ctl_event_t event;
int res;
+ unsigned int count = 0;
assert(hctl);
assert(hctl->ctl);
- while ((res = snd_ctl_read(hctl->ctl, &event)) != 0) {
+ while ((res = snd_ctl_read(hctl->ctl, &event)) != 0 &&
+ res != -EAGAIN) {
if (res < 0)
return res;
res = snd_hctl_handle_event(hctl, &event);
if (res < 0)
return res;
+ count++;
}
- return 0;
+ return count;
}
int snd_hctl_elem_info(snd_hctl_elem_t *elem, snd_ctl_elem_info_t *info)
int snd_mixer_throw_event(snd_mixer_t *mixer, snd_ctl_event_type_t event,
snd_mixer_elem_t *elem)
{
+ mixer->events++;
if (mixer->callback)
return mixer->callback(mixer, event, elem);
return 0;
int snd_mixer_elem_throw_event(snd_mixer_elem_t *elem,
snd_ctl_event_type_t event)
{
+ elem->class->mixer->events++;
if (elem->callback)
return elem->callback(elem, event);
return 0;
{
struct list_head *pos, *next;
assert(mixer);
+ mixer->events = 0;
list_for_each(pos, next, &mixer->slaves) {
int err;
snd_mixer_slave_t *s;
if (err < 0)
return err;
}
- return 0;
+ return mixer->events;
}
struct list_head slaves; /* list of all slaves */
struct list_head classes; /* list of all elem classes */
struct list_head elems; /* list of all elems */
-
unsigned int count;
+ unsigned int events;
snd_mixer_callback_t callback;
void *callback_private;
};