| /* |
| * SALSA-Lib - Control Interface |
| * |
| * Control privates and macros |
| */ |
| |
| #ifndef __ALSA_CTL_MACROS_H |
| #define __ALSA_CTL_MACROS_H |
| |
| #include "asound.h" |
| #include <stdlib.h> |
| #include <string.h> |
| #include <errno.h> |
| #include <sys/ioctl.h> |
| #include <poll.h> |
| |
| struct _snd_ctl { |
| char *name; |
| snd_ctl_type_t type; |
| int nonblock; |
| int fd; |
| int card; |
| int protocol; |
| struct pollfd pollfd; |
| #if SALSA_HAS_ASYNC_SUPPORT |
| snd_async_handler_t *async; |
| #endif |
| }; |
| |
| |
| #if SALSA_CHECK_ABI |
| #define SALSA_CTL_MAGIC sizeof(struct _snd_ctl) |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_open(snd_ctl_t **ctl, const char *name, int mode) |
| { |
| return _snd_ctl_open(ctl, name, mode, SALSA_CTL_MAGIC); |
| } |
| #endif |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_nonblock(snd_ctl_t *ctl, int nonblock) |
| { |
| return _snd_set_nonblock(ctl->fd, nonblock); |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const char *snd_ctl_name(snd_ctl_t *ctl) |
| { |
| return ctl->name; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| snd_ctl_type_t snd_ctl_type(snd_ctl_t *ctl) |
| { |
| return ctl->type; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_poll_descriptors_count(snd_ctl_t *ctl) |
| { |
| return 1; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_poll_descriptors(snd_ctl_t *ctl, struct pollfd *pfds, |
| unsigned int space) |
| { |
| *pfds = ctl->pollfd; |
| return 1; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_poll_descriptors_revents(snd_ctl_t *ctl, struct pollfd *pfds, |
| unsigned int nfds, unsigned short *revents) |
| { |
| *revents = pfds->revents; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_subscribe_events(snd_ctl_t *ctl, int subscribe) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS, &subscribe) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_card_info(snd_ctl_t *ctl, snd_ctl_card_info_t *info) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_CARD_INFO, info) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_list(snd_ctl_t *ctl, snd_ctl_elem_list_t *list) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_ELEM_LIST, list) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_info(snd_ctl_t *ctl, snd_ctl_elem_info_t *info) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_ELEM_INFO, info) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_add(snd_ctl_t *ctl, snd_ctl_elem_info_t *info) |
| { |
| #if SALSA_HAS_USER_ELEM_SUPPORT |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_ELEM_ADD, info) < 0) |
| return -errno; |
| return 0; |
| #else |
| return -ENXIO; |
| #endif |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_remove(snd_ctl_t *ctl, snd_ctl_elem_id_t *id) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_ELEM_REMOVE, id) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_read(snd_ctl_t *ctl, snd_ctl_elem_value_t *control) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_ELEM_READ, control) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_write(snd_ctl_t *ctl, snd_ctl_elem_value_t *control) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_ELEM_WRITE, control) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_lock(snd_ctl_t *ctl, snd_ctl_elem_id_t *id) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_ELEM_LOCK, id) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_unlock(snd_ctl_t *ctl, snd_ctl_elem_id_t *id) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_ELEM_UNLOCK, id) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_hwdep_next_device(snd_ctl_t *ctl, int *device) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE, device) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_hwdep_info(snd_ctl_t *ctl, snd_hwdep_info_t * info) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_HWDEP_INFO, info) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_pcm_next_device(snd_ctl_t *ctl, int * device) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE, device) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_pcm_info(snd_ctl_t *ctl, snd_pcm_info_t * info) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_PCM_INFO, info) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_pcm_prefer_subdevice(snd_ctl_t *ctl, int subdev) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE, &subdev) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_rawmidi_next_device(snd_ctl_t *ctl, int * device) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE, device) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_rawmidi_info(snd_ctl_t *ctl, snd_rawmidi_info_t * info) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_RAWMIDI_INFO, info) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_rawmidi_prefer_subdevice(snd_ctl_t *ctl, int subdev) |
| { |
| if (ioctl(ctl->fd, SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE, &subdev) < 0) |
| return -errno; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_read(snd_ctl_t *ctl, snd_ctl_event_t *event) |
| { |
| ssize_t res = read(ctl->fd, event, sizeof(*event)); |
| if (res <= 0) |
| return -errno; |
| return 1; |
| } |
| |
| |
| extern const char * const _snd_ctl_elem_type_names[]; |
| extern const char * const _snd_ctl_elem_iface_names[]; |
| extern const char * const _snd_ctl_event_type_names[]; |
| |
| #define snd_ctl_elem_type_name(type) _snd_ctl_elem_type_names[type] |
| #define snd_ctl_elem_iface_name(iface) _snd_ctl_elem_iface_names[iface] |
| #define snd_ctl_event_type_name(type) _snd_ctl_event_type_names[type] |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_list_alloc_space(snd_ctl_elem_list_t *obj, |
| unsigned int entries) |
| { |
| free(obj->pids); |
| obj->pids = (snd_ctl_elem_id_t*)calloc(entries, sizeof(*obj->pids)); |
| if (!obj->pids) { |
| obj->space = 0; |
| return -ENOMEM; |
| } |
| obj->space = entries; |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_list_free_space(snd_ctl_elem_list_t *obj) |
| { |
| free(obj->pids); |
| obj->pids = NULL; |
| obj->space = 0; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_event_elem_get_mask(const snd_ctl_event_t *obj) |
| { |
| return obj->data.elem.mask; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_event_elem_get_id(const snd_ctl_event_t *obj, |
| snd_ctl_elem_id_t *ptr) |
| { |
| *ptr = obj->data.elem.id; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_event_elem_get_numid(const snd_ctl_event_t *obj) |
| { |
| return obj->data.elem.id.numid; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| snd_ctl_elem_iface_t snd_ctl_event_elem_get_interface(const snd_ctl_event_t *obj) |
| { |
| return (snd_ctl_elem_iface_t)obj->data.elem.id.iface; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_event_elem_get_device(const snd_ctl_event_t *obj) |
| { |
| return obj->data.elem.id.device; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_event_elem_get_subdevice(const snd_ctl_event_t *obj) |
| { |
| return obj->data.elem.id.subdevice; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const char *snd_ctl_event_elem_get_name(const snd_ctl_event_t *obj) |
| { |
| return (const char *)obj->data.elem.id.name; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_event_elem_get_index(const snd_ctl_event_t *obj) |
| { |
| return obj->data.elem.id.index; |
| } |
| |
| __snd_define_type(snd_ctl_elem_id); |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_id_get_numid(const snd_ctl_elem_id_t *obj) |
| { |
| return obj->numid; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| snd_ctl_elem_iface_t snd_ctl_elem_id_get_interface(const snd_ctl_elem_id_t *obj) |
| { |
| return (snd_ctl_elem_iface_t)obj->iface; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_id_get_device(const snd_ctl_elem_id_t *obj) |
| { |
| return obj->device; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_id_get_subdevice(const snd_ctl_elem_id_t *obj) |
| { |
| return obj->subdevice; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const char *snd_ctl_elem_id_get_name(const snd_ctl_elem_id_t *obj) |
| { |
| return (const char *)obj->name; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_id_get_index(const snd_ctl_elem_id_t *obj) |
| { |
| return obj->index; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_id_set_numid(snd_ctl_elem_id_t *obj, unsigned int val) |
| { |
| obj->numid = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_id_set_interface(snd_ctl_elem_id_t *obj, |
| snd_ctl_elem_iface_t val) |
| { |
| obj->iface = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_id_set_device(snd_ctl_elem_id_t *obj, unsigned int val) |
| { |
| obj->device = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_id_set_subdevice(snd_ctl_elem_id_t *obj, unsigned int val) |
| { |
| obj->subdevice = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_id_set_name(snd_ctl_elem_id_t *obj, const char *val) |
| { |
| strncpy((char *)obj->name, val, sizeof(obj->name)); |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_id_set_index(snd_ctl_elem_id_t *obj, unsigned int val) |
| { |
| obj->index = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_id_compare_set(const snd_ctl_elem_id_t *id1, const snd_ctl_elem_id_t *id2) |
| { |
| int d; |
| if ((d = id1->iface - id2->iface) || |
| (d = id1->device - id2->device) || |
| (d = id1->subdevice - id2->subdevice) || |
| (d = strcmp((const char *)id1->name, (const char *)id2->name))) |
| return d; |
| return id1->index - id2->index; |
| } |
| |
| __snd_define_type(snd_ctl_card_info); |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_card_info_get_card(const snd_ctl_card_info_t *obj) |
| { |
| return obj->card; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const char *snd_ctl_card_info_get_id(const snd_ctl_card_info_t *obj) |
| { |
| return (const char *)obj->id; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const char *snd_ctl_card_info_get_driver(const snd_ctl_card_info_t *obj) |
| { |
| return (const char *)obj->driver; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const char *snd_ctl_card_info_get_name(const snd_ctl_card_info_t *obj) |
| { |
| return (const char *)obj->name; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const char *snd_ctl_card_info_get_longname(const snd_ctl_card_info_t *obj) |
| { |
| return (const char *)obj->longname; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const char *snd_ctl_card_info_get_mixername(const snd_ctl_card_info_t *obj) |
| { |
| return (const char *)obj->mixername; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const char *snd_ctl_card_info_get_components(const snd_ctl_card_info_t *obj) |
| { |
| return (const char *)obj->components; |
| } |
| |
| __snd_define_type(snd_ctl_event); |
| |
| __SALSA_EXPORT_FUNC |
| snd_ctl_event_type_t snd_ctl_event_get_type(const snd_ctl_event_t *obj) |
| { |
| return (snd_ctl_event_type_t) obj->type; |
| } |
| |
| __snd_define_type(snd_ctl_elem_list); |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_list_set_offset(snd_ctl_elem_list_t *obj, unsigned int val) |
| { |
| obj->offset = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_list_get_used(const snd_ctl_elem_list_t *obj) |
| { |
| return obj->used; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_list_get_count(const snd_ctl_elem_list_t *obj) |
| { |
| return obj->count; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_list_get_id(const snd_ctl_elem_list_t *obj, |
| unsigned int idx, snd_ctl_elem_id_t *ptr) |
| { |
| *ptr = obj->pids[idx]; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_list_get_numid(const snd_ctl_elem_list_t *obj, |
| unsigned int idx) |
| { |
| return obj->pids[idx].numid; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| snd_ctl_elem_iface_t snd_ctl_elem_list_get_interface(const snd_ctl_elem_list_t *obj, |
| unsigned int idx) |
| { |
| return (snd_ctl_elem_iface_t) obj->pids[idx].iface; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_list_get_device(const snd_ctl_elem_list_t *obj, |
| unsigned int idx) |
| { |
| return obj->pids[idx].device; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_list_get_subdevice(const snd_ctl_elem_list_t *obj, |
| unsigned int idx) |
| { |
| return obj->pids[idx].subdevice; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const char *snd_ctl_elem_list_get_name(const snd_ctl_elem_list_t *obj, |
| unsigned int idx) |
| { |
| return (const char *)obj->pids[idx].name; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_list_get_index(const snd_ctl_elem_list_t *obj, |
| unsigned int idx) |
| { |
| return obj->pids[idx].index; |
| } |
| |
| __snd_define_type(snd_ctl_elem_info); |
| |
| __SALSA_EXPORT_FUNC |
| snd_ctl_elem_type_t snd_ctl_elem_info_get_type(const snd_ctl_elem_info_t *obj) |
| { |
| return (snd_ctl_elem_type_t) obj->type; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_info_is_readable(const snd_ctl_elem_info_t *obj) |
| { |
| return !!(obj->_access & SNDRV_CTL_ELEM_ACCESS_READ); |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_info_is_writable(const snd_ctl_elem_info_t *obj) |
| { |
| return !!(obj->_access & SNDRV_CTL_ELEM_ACCESS_WRITE); |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_info_is_volatile(const snd_ctl_elem_info_t *obj) |
| { |
| return !!(obj->_access & SNDRV_CTL_ELEM_ACCESS_VOLATILE); |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_info_is_inactive(const snd_ctl_elem_info_t *obj) |
| { |
| return !!(obj->_access & SNDRV_CTL_ELEM_ACCESS_INACTIVE); |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_info_is_locked(const snd_ctl_elem_info_t *obj) |
| { |
| return !!(obj->_access & SNDRV_CTL_ELEM_ACCESS_LOCK); |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_info_is_owner(const snd_ctl_elem_info_t *obj) |
| { |
| return !!(obj->_access & SNDRV_CTL_ELEM_ACCESS_OWNER); |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_info_is_user(const snd_ctl_elem_info_t *obj) |
| { |
| return !!(obj->_access & SNDRV_CTL_ELEM_ACCESS_USER); |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_info_is_tlv_readable(const snd_ctl_elem_info_t *obj) |
| { |
| #if SALSA_HAS_TLV_SUPPORT |
| return !!(obj->_access & SNDRV_CTL_ELEM_ACCESS_TLV_READ); |
| #else |
| return 0; |
| #endif |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_info_is_tlv_writable(const snd_ctl_elem_info_t *obj) |
| { |
| #if SALSA_HAS_TLV_SUPPORT |
| return !!(obj->_access & SNDRV_CTL_ELEM_ACCESS_TLV_WRITE); |
| #else |
| return 0; |
| #endif |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_info_is_tlv_commandable(const snd_ctl_elem_info_t *obj) |
| { |
| #if SALSA_HAS_TLV_SUPPORT |
| return !!(obj->_access & SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND); |
| #else |
| return 0; |
| #endif |
| } |
| |
| __SALSA_EXPORT_FUNC |
| pid_t snd_ctl_elem_info_get_owner(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->owner; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_info_get_count(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->count; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| long snd_ctl_elem_info_get_min(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->value.integer.min; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| long snd_ctl_elem_info_get_max(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->value.integer.max; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| long snd_ctl_elem_info_get_step(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->value.integer.step; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| long long snd_ctl_elem_info_get_min64(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->value.integer64.min; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| long long snd_ctl_elem_info_get_max64(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->value.integer64.max; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| long long snd_ctl_elem_info_get_step64(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->value.integer64.step; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_info_get_items(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->value.enumerated.items; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_info_set_item(snd_ctl_elem_info_t *obj, unsigned int val) |
| { |
| obj->value.enumerated.item = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const char *snd_ctl_elem_info_get_item_name(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->value.enumerated.name; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_info_get_dimensions(const snd_ctl_elem_info_t *obj) |
| { |
| int i; |
| for (i = 3; i >= 0; i--) |
| if (obj->dimen.d[i]) |
| break; |
| return i + 1; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_info_get_dimension(const snd_ctl_elem_info_t *obj, |
| unsigned int idx) |
| { |
| if (idx >= 3) |
| return 0; |
| return obj->dimen.d[idx]; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_info_get_id(const snd_ctl_elem_info_t *obj, |
| snd_ctl_elem_id_t *ptr) |
| { |
| *ptr = obj->id; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_info_get_numid(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->id.numid; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| snd_ctl_elem_iface_t snd_ctl_elem_info_get_interface(const snd_ctl_elem_info_t *obj) |
| { |
| return (snd_ctl_elem_iface_t) obj->id.iface; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_info_get_device(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->id.device; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_info_get_subdevice(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->id.subdevice; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const char *snd_ctl_elem_info_get_name(const snd_ctl_elem_info_t *obj) |
| { |
| return (const char *)obj->id.name; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_info_get_index(const snd_ctl_elem_info_t *obj) |
| { |
| return obj->id.index; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_info_set_id(snd_ctl_elem_info_t *obj, |
| const snd_ctl_elem_id_t *ptr) |
| { |
| obj->id = *ptr; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_info_set_numid(snd_ctl_elem_info_t *obj, unsigned int val) |
| { |
| obj->id.numid = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_info_set_interface(snd_ctl_elem_info_t *obj, |
| snd_ctl_elem_iface_t val) |
| { |
| obj->id.iface = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_info_set_device(snd_ctl_elem_info_t *obj, unsigned int val) |
| { |
| obj->id.device = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_info_set_subdevice(snd_ctl_elem_info_t *obj, |
| unsigned int val) |
| { |
| obj->id.subdevice = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_info_set_name(snd_ctl_elem_info_t *obj, const char *val) |
| { |
| strncpy((char *)obj->id.name, val, sizeof(obj->id.name)); |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_info_set_index(snd_ctl_elem_info_t *obj, unsigned int val) |
| { |
| obj->id.index = val; |
| } |
| |
| __snd_define_type(snd_ctl_elem_value); |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_get_id(const snd_ctl_elem_value_t *obj, |
| snd_ctl_elem_id_t *ptr) |
| { |
| *ptr = obj->id; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_value_get_numid(const snd_ctl_elem_value_t *obj) |
| { |
| return obj->id.numid; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| snd_ctl_elem_iface_t snd_ctl_elem_value_get_interface(const snd_ctl_elem_value_t *obj) |
| { |
| return (snd_ctl_elem_iface_t) obj->id.iface; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_value_get_device(const snd_ctl_elem_value_t *obj) |
| { |
| return obj->id.device; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_value_get_subdevice(const snd_ctl_elem_value_t *obj) |
| { |
| return obj->id.subdevice; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const char *snd_ctl_elem_value_get_name(const snd_ctl_elem_value_t *obj) |
| { |
| return (const char *)obj->id.name; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_value_get_index(const snd_ctl_elem_value_t *obj) |
| { |
| return obj->id.index; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_set_id(snd_ctl_elem_value_t *obj, |
| const snd_ctl_elem_id_t *ptr) |
| { |
| obj->id = *ptr; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_set_numid(snd_ctl_elem_value_t *obj, unsigned int val) |
| { |
| obj->id.numid = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_set_interface(snd_ctl_elem_value_t *obj, |
| snd_ctl_elem_iface_t val) |
| { |
| obj->id.iface = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_set_device(snd_ctl_elem_value_t *obj, unsigned int val) |
| { |
| obj->id.device = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_set_subdevice(snd_ctl_elem_value_t *obj, |
| unsigned int val) |
| { |
| obj->id.subdevice = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_set_name(snd_ctl_elem_value_t *obj, const char *val) |
| { |
| strncpy((char *)obj->id.name, val, sizeof(obj->id.name)); |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_set_index(snd_ctl_elem_value_t *obj, unsigned int val) |
| { |
| obj->id.index = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| int snd_ctl_elem_value_get_boolean(const snd_ctl_elem_value_t *obj, |
| unsigned int idx) |
| { |
| return obj->value.integer.value[idx]; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| long snd_ctl_elem_value_get_integer(const snd_ctl_elem_value_t *obj, |
| unsigned int idx) |
| { |
| return obj->value.integer.value[idx]; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| long long snd_ctl_elem_value_get_integer64(const snd_ctl_elem_value_t *obj, |
| unsigned int idx) |
| { |
| return obj->value.integer64.value[idx]; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned int snd_ctl_elem_value_get_enumerated(const snd_ctl_elem_value_t *obj, |
| unsigned int idx) |
| { |
| return obj->value.enumerated.item[idx]; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| unsigned char snd_ctl_elem_value_get_byte(const snd_ctl_elem_value_t *obj, |
| unsigned int idx) |
| { |
| return obj->value.bytes.data[idx]; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_set_boolean(snd_ctl_elem_value_t *obj, |
| unsigned int idx, long val) |
| { |
| obj->value.integer.value[idx] = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_set_integer(snd_ctl_elem_value_t *obj, |
| unsigned int idx, long val) |
| { |
| obj->value.integer.value[idx] = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_set_integer64(snd_ctl_elem_value_t *obj, |
| unsigned int idx, long long val) |
| { |
| obj->value.integer64.value[idx] = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_set_enumerated(snd_ctl_elem_value_t *obj, |
| unsigned int idx, unsigned int val) |
| { |
| obj->value.enumerated.item[idx] = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_set_byte(snd_ctl_elem_value_t *obj, unsigned int idx, |
| unsigned char val) |
| { |
| obj->value.bytes.data[idx] = val; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_set_bytes(snd_ctl_elem_value_t *obj, void *data, size_t size) |
| { |
| if (size < sizeof(obj->value.bytes.data)) |
| memcpy(obj->value.bytes.data, data, size); |
| } |
| |
| __SALSA_EXPORT_FUNC |
| const void * snd_ctl_elem_value_get_bytes(const snd_ctl_elem_value_t *obj) |
| { |
| return obj->value.bytes.data; |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_get_iec958(const snd_ctl_elem_value_t *obj, |
| snd_aes_iec958_t *ptr) |
| { |
| memcpy(ptr, &obj->value.iec958, sizeof(*ptr)); |
| } |
| |
| __SALSA_EXPORT_FUNC |
| void snd_ctl_elem_value_set_iec958(snd_ctl_elem_value_t *obj, |
| const snd_aes_iec958_t *ptr) |
| { |
| memcpy(&obj->value.iec958, ptr, sizeof(obj->value.iec958)); |
| } |
| |
| /* |
| */ |
| #if !SALSA_HAS_TLV_SUPPORT |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_elem_tlv_read(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, |
| unsigned int *tlv, unsigned int tlv_size) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_elem_tlv_write(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, |
| const unsigned int *tlv) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_elem_tlv_command(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, |
| const unsigned int *tlv) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_tlv_parse_dB_info(unsigned int *tlv, unsigned int tlv_size, |
| unsigned int **db_tlvp) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_tlv_get_dB_range(unsigned int *tlv, long rangemin, long rangemax, |
| long *min, long *max) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_tlv_convert_to_dB(unsigned int *tlv, long rangemin, long rangemax, |
| long volume, long *db_gain) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax, |
| long db_gain, long *value, int xdir) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_get_dB_range(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, |
| long *min, long *max) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_convert_to_dB(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, |
| long volume, long *db_gain) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_convert_from_dB(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, |
| long db_gain, long *value, int xdir) |
| { |
| return -ENXIO; |
| } |
| #endif /* !SALSA_HAS_TLV_SUPPORT */ |
| |
| /* |
| */ |
| #if !SALSA_HAS_USER_ELEM_SUPPORT |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_elem_add_integer(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, |
| unsigned int count, long min, long max, long step) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_elem_add_integer64(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, |
| unsigned int count, long long min, long long max, |
| long long step) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_elem_add_boolean(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, |
| unsigned int count) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_elem_add_iec958(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_elem_add_enumerated(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, |
| unsigned int count, unsigned int items, |
| const char *const names[]) |
| { |
| return -ENXIO; |
| } |
| #endif /* !SALSA_HAS_USER_ELEM_SUPPORT */ |
| |
| /* |
| * not implemented yet |
| */ |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_open_lconf(snd_ctl_t **ctlp, const char *name, |
| int mode, snd_config_t *lconf) |
| { |
| return -ENXIO; |
| } |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_set_power_state(snd_ctl_t *ctl, unsigned int state) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_ctl_get_power_state(snd_ctl_t *ctl, unsigned int *state) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_device_name_hint(int card, const char *iface, void ***hints) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_device_name_free_hint(void **hints) |
| { |
| return 0; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| char *snd_device_name_get_hint(const void *hint, const char *id) |
| { |
| return NULL; |
| } |
| |
| #if SALSA_HAS_ASYNC_SUPPORT |
| |
| __SALSA_EXPORT_FUNC |
| snd_ctl_t *snd_async_handler_get_ctl(snd_async_handler_t *handler) |
| { |
| return (snd_ctl_t *) handler->rec; |
| } |
| |
| #else |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| int snd_async_add_ctl_handler(snd_async_handler_t **handler, snd_ctl_t *ctl, |
| snd_async_callback_t callback, |
| void *private_data) |
| { |
| return -ENXIO; |
| } |
| |
| __SALSA_EXPORT_FUNC __SALSA_NOT_IMPLEMENTED |
| snd_ctl_t *snd_async_handler_get_ctl(snd_async_handler_t *handler) |
| { |
| return NULL; |
| } |
| |
| #endif /* SALSA_HAS_ASYNC_SUPPORT */ |
| |
| #endif /* __ALSA_CTL_MACROS_H */ |