Control Interface

Overview

The control interface. More…

// typedefs

typedef struct _snd_ctl_card_info snd_ctl_card_info_t;
typedef struct _snd_ctl_elem_id snd_ctl_elem_id_t;
typedef struct _snd_ctl_elem_list snd_ctl_elem_list_t;
typedef struct _snd_ctl_elem_info snd_ctl_elem_info_t;
typedef struct _snd_ctl_elem_value snd_ctl_elem_value_t;
typedef struct _snd_ctl_event snd_ctl_event_t;
typedef struct _snd_ctl snd_ctl_t;
typedef struct _snd_sctl snd_sctl_t;

// enums

enum snd_ctl_elem_iface_t;
enum snd_ctl_elem_type_t;
enum snd_ctl_event_type_t;
enum snd_ctl_type_t;

// structs

struct snd_aes_iec958_t;

// global functions

int
snd_card_load(int card);

int
snd_card_next(int* card);

int
snd_card_get_index(const char* name);

int
snd_card_get_name(
    int card,
    char** name
);

int
snd_card_get_longname(
    int card,
    char** name
);

int
snd_device_name_hint(
    int card,
    const char* iface,
    void*** hints
);

int
snd_device_name_free_hint(void** hints);

char*
snd_device_name_get_hint(
    const void* hint,
    const char* id
);

int
snd_ctl_open(
    snd_ctl_t** ctl,
    const char* name,
    int mode
);

int
snd_ctl_open_lconf(
    snd_ctl_t** ctl,
    const char* name,
    int mode,
    snd_config_t* lconf
);

int
snd_ctl_open_fallback(
    snd_ctl_t** ctl,
    snd_config_t* root,
    const char* name,
    const char* orig_name,
    int mode
);

int
snd_ctl_close(snd_ctl_t* ctl);

int
snd_ctl_nonblock(
    snd_ctl_t* ctl,
    int nonblock
);

static
__inline__ int
snd_ctl_abort(snd_ctl_t* ctl);

int
snd_async_add_ctl_handler(
    snd_async_handler_t** handler,
    snd_ctl_t* ctl,
    snd_async_callback_t callback,
    void* private_data
);

snd_ctl_t*
snd_async_handler_get_ctl(snd_async_handler_t* handler);

int
snd_ctl_poll_descriptors_count(snd_ctl_t* ctl);

int
snd_ctl_poll_descriptors(
    snd_ctl_t* ctl,
    struct pollfd* pfds,
    unsigned int space
);

int
snd_ctl_poll_descriptors_revents(
    snd_ctl_t* ctl,
    struct pollfd* pfds,
    unsigned int nfds,
    unsigned short* revents
);

int
snd_ctl_subscribe_events(
    snd_ctl_t* ctl,
    int subscribe
);

int
snd_ctl_card_info(
    snd_ctl_t* ctl,
    snd_ctl_card_info_t* info
);

int
snd_ctl_elem_list(
    snd_ctl_t* ctl,
    snd_ctl_elem_list_t* list
);

int
snd_ctl_elem_info(
    snd_ctl_t* ctl,
    snd_ctl_elem_info_t* info
);

int
snd_ctl_elem_read(
    snd_ctl_t* ctl,
    snd_ctl_elem_value_t* data
);

int
snd_ctl_elem_write(
    snd_ctl_t* ctl,
    snd_ctl_elem_value_t* data
);

int
snd_ctl_elem_lock(
    snd_ctl_t* ctl,
    snd_ctl_elem_id_t* id
);

int
snd_ctl_elem_unlock(
    snd_ctl_t* ctl,
    snd_ctl_elem_id_t* id
);

int
snd_ctl_elem_tlv_read(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    unsigned int* tlv,
    unsigned int tlv_size
);

int
snd_ctl_elem_tlv_write(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    const unsigned int* tlv
);

int
snd_ctl_elem_tlv_command(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    const unsigned int* tlv
);

int
snd_ctl_set_power_state(
    snd_ctl_t* ctl,
    unsigned int state
);

int
snd_ctl_get_power_state(
    snd_ctl_t* ctl,
    unsigned int* state
);

int
snd_ctl_read(
    snd_ctl_t* ctl,
    snd_ctl_event_t* event
);

int
snd_ctl_wait(
    snd_ctl_t* ctl,
    int timeout
);

const char*
snd_ctl_name(snd_ctl_t* ctl);

snd_ctl_type_t
snd_ctl_type(snd_ctl_t* ctl);

const char*
snd_ctl_elem_type_name(snd_ctl_elem_type_t type);

const char*
snd_ctl_elem_iface_name(snd_ctl_elem_iface_t iface);

const char*
snd_ctl_event_type_name(snd_ctl_event_type_t type);

unsigned int
snd_ctl_event_elem_get_mask(const snd_ctl_event_t* obj);

unsigned int
snd_ctl_event_elem_get_numid(const snd_ctl_event_t* obj);

void
snd_ctl_event_elem_get_id(
    const snd_ctl_event_t* obj,
    snd_ctl_elem_id_t* ptr
);

snd_ctl_elem_iface_t
snd_ctl_event_elem_get_interface(const snd_ctl_event_t* obj);

unsigned int
snd_ctl_event_elem_get_device(const snd_ctl_event_t* obj);

unsigned int
snd_ctl_event_elem_get_subdevice(const snd_ctl_event_t* obj);

const char*
snd_ctl_event_elem_get_name(const snd_ctl_event_t* obj);

unsigned int
snd_ctl_event_elem_get_index(const snd_ctl_event_t* obj);

int
snd_ctl_elem_list_alloc_space(
    snd_ctl_elem_list_t* obj,
    unsigned int entries
);

void
snd_ctl_elem_list_free_space(snd_ctl_elem_list_t* obj);

char*
snd_ctl_ascii_elem_id_get(snd_ctl_elem_id_t* id);

int
snd_ctl_ascii_elem_id_parse(
    snd_ctl_elem_id_t* dst,
    const char* str
);

int
snd_ctl_ascii_value_parse(
    snd_ctl_t* handle,
    snd_ctl_elem_value_t* dst,
    snd_ctl_elem_info_t* info,
    const char* value
);

size_t
snd_ctl_elem_id_sizeof(void);

int
snd_ctl_elem_id_malloc(snd_ctl_elem_id_t** ptr);

void
snd_ctl_elem_id_free(snd_ctl_elem_id_t* obj);

void
snd_ctl_elem_id_clear(snd_ctl_elem_id_t* obj);

void
snd_ctl_elem_id_copy(
    snd_ctl_elem_id_t* dst,
    const snd_ctl_elem_id_t* src
);

unsigned int
snd_ctl_elem_id_get_numid(const snd_ctl_elem_id_t* obj);

snd_ctl_elem_iface_t
snd_ctl_elem_id_get_interface(const snd_ctl_elem_id_t* obj);

unsigned int
snd_ctl_elem_id_get_device(const snd_ctl_elem_id_t* obj);

unsigned int
snd_ctl_elem_id_get_subdevice(const snd_ctl_elem_id_t* obj);

const char*
snd_ctl_elem_id_get_name(const snd_ctl_elem_id_t* obj);

unsigned int
snd_ctl_elem_id_get_index(const snd_ctl_elem_id_t* obj);

void
snd_ctl_elem_id_set_numid(
    snd_ctl_elem_id_t* obj,
    unsigned int val
);

void
snd_ctl_elem_id_set_interface(
    snd_ctl_elem_id_t* obj,
    snd_ctl_elem_iface_t val
);

void
snd_ctl_elem_id_set_device(
    snd_ctl_elem_id_t* obj,
    unsigned int val
);

void
snd_ctl_elem_id_set_subdevice(
    snd_ctl_elem_id_t* obj,
    unsigned int val
);

void
snd_ctl_elem_id_set_name(
    snd_ctl_elem_id_t* obj,
    const char* val
);

void
snd_ctl_elem_id_set_index(
    snd_ctl_elem_id_t* obj,
    unsigned int val
);

size_t
snd_ctl_card_info_sizeof(void);

int
snd_ctl_card_info_malloc(snd_ctl_card_info_t** ptr);

void
snd_ctl_card_info_free(snd_ctl_card_info_t* obj);

void
snd_ctl_card_info_clear(snd_ctl_card_info_t* obj);

void
snd_ctl_card_info_copy(
    snd_ctl_card_info_t* dst,
    const snd_ctl_card_info_t* src
);

int
snd_ctl_card_info_get_card(const snd_ctl_card_info_t* obj);

const char*
snd_ctl_card_info_get_id(const snd_ctl_card_info_t* obj);

const char*
snd_ctl_card_info_get_driver(const snd_ctl_card_info_t* obj);

const char*
snd_ctl_card_info_get_name(const snd_ctl_card_info_t* obj);

const char*
snd_ctl_card_info_get_longname(const snd_ctl_card_info_t* obj);

const char*
snd_ctl_card_info_get_mixername(const snd_ctl_card_info_t* obj);

const char*
snd_ctl_card_info_get_components(const snd_ctl_card_info_t* obj);

size_t
snd_ctl_event_sizeof(void);

int
snd_ctl_event_malloc(snd_ctl_event_t** ptr);

void
snd_ctl_event_free(snd_ctl_event_t* obj);

void
snd_ctl_event_clear(snd_ctl_event_t* obj);

void
snd_ctl_event_copy(
    snd_ctl_event_t* dst,
    const snd_ctl_event_t* src
);

snd_ctl_event_type_t
snd_ctl_event_get_type(const snd_ctl_event_t* obj);

size_t
snd_ctl_elem_list_sizeof(void);

int
snd_ctl_elem_list_malloc(snd_ctl_elem_list_t** ptr);

void
snd_ctl_elem_list_free(snd_ctl_elem_list_t* obj);

void
snd_ctl_elem_list_clear(snd_ctl_elem_list_t* obj);

void
snd_ctl_elem_list_copy(
    snd_ctl_elem_list_t* dst,
    const snd_ctl_elem_list_t* src
);

void
snd_ctl_elem_list_set_offset(
    snd_ctl_elem_list_t* obj,
    unsigned int val
);

unsigned int
snd_ctl_elem_list_get_used(const snd_ctl_elem_list_t* obj);

unsigned int
snd_ctl_elem_list_get_count(const snd_ctl_elem_list_t* obj);

void
snd_ctl_elem_list_get_id(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx,
    snd_ctl_elem_id_t* ptr
);

unsigned int
snd_ctl_elem_list_get_numid(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx
);

snd_ctl_elem_iface_t
snd_ctl_elem_list_get_interface(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx
);

unsigned int
snd_ctl_elem_list_get_device(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx
);

unsigned int
snd_ctl_elem_list_get_subdevice(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx
);

const char*
snd_ctl_elem_list_get_name(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx
);

unsigned int
snd_ctl_elem_list_get_index(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx
);

size_t
snd_ctl_elem_info_sizeof(void);

int
snd_ctl_elem_info_malloc(snd_ctl_elem_info_t** ptr);

void
snd_ctl_elem_info_free(snd_ctl_elem_info_t* obj);

void
snd_ctl_elem_info_clear(snd_ctl_elem_info_t* obj);

void
snd_ctl_elem_info_copy(
    snd_ctl_elem_info_t* dst,
    const snd_ctl_elem_info_t* src
);

snd_ctl_elem_type_t
snd_ctl_elem_info_get_type(const snd_ctl_elem_info_t* obj);

int
snd_ctl_elem_info_is_readable(const snd_ctl_elem_info_t* obj);

int
snd_ctl_elem_info_is_writable(const snd_ctl_elem_info_t* obj);

int
snd_ctl_elem_info_is_volatile(const snd_ctl_elem_info_t* obj);

int
snd_ctl_elem_info_is_inactive(const snd_ctl_elem_info_t* obj);

int
snd_ctl_elem_info_is_locked(const snd_ctl_elem_info_t* obj);

int
snd_ctl_elem_info_is_tlv_readable(const snd_ctl_elem_info_t* obj);

int
snd_ctl_elem_info_is_tlv_writable(const snd_ctl_elem_info_t* obj);

int
snd_ctl_elem_info_is_tlv_commandable(const snd_ctl_elem_info_t* obj);

int
snd_ctl_elem_info_is_owner(const snd_ctl_elem_info_t* obj);

int
snd_ctl_elem_info_is_user(const snd_ctl_elem_info_t* obj);

pid_t
snd_ctl_elem_info_get_owner(const snd_ctl_elem_info_t* obj);

unsigned int
snd_ctl_elem_info_get_count(const snd_ctl_elem_info_t* obj);

long
snd_ctl_elem_info_get_min(const snd_ctl_elem_info_t* obj);

long
snd_ctl_elem_info_get_max(const snd_ctl_elem_info_t* obj);

long
snd_ctl_elem_info_get_step(const snd_ctl_elem_info_t* obj);

long long
snd_ctl_elem_info_get_min64(const snd_ctl_elem_info_t* obj);

long long
snd_ctl_elem_info_get_max64(const snd_ctl_elem_info_t* obj);

long long
snd_ctl_elem_info_get_step64(const snd_ctl_elem_info_t* obj);

unsigned int
snd_ctl_elem_info_get_items(const snd_ctl_elem_info_t* obj);

void
snd_ctl_elem_info_set_item(
    snd_ctl_elem_info_t* obj,
    unsigned int val
);

const char*
snd_ctl_elem_info_get_item_name(const snd_ctl_elem_info_t* obj);

int
snd_ctl_elem_info_get_dimensions(const snd_ctl_elem_info_t* obj);

int
snd_ctl_elem_info_get_dimension(
    const snd_ctl_elem_info_t* obj,
    unsigned int idx
);

int
snd_ctl_elem_info_set_dimension(
    snd_ctl_elem_info_t* info,
    const int dimension[4]
);

void
snd_ctl_elem_info_get_id(
    const snd_ctl_elem_info_t* obj,
    snd_ctl_elem_id_t* ptr
);

unsigned int
snd_ctl_elem_info_get_numid(const snd_ctl_elem_info_t* obj);

snd_ctl_elem_iface_t
snd_ctl_elem_info_get_interface(const snd_ctl_elem_info_t* obj);

unsigned int
snd_ctl_elem_info_get_device(const snd_ctl_elem_info_t* obj);

unsigned int
snd_ctl_elem_info_get_subdevice(const snd_ctl_elem_info_t* obj);

const char*
snd_ctl_elem_info_get_name(const snd_ctl_elem_info_t* obj);

unsigned int
snd_ctl_elem_info_get_index(const snd_ctl_elem_info_t* obj);

void
snd_ctl_elem_info_set_id(
    snd_ctl_elem_info_t* obj,
    const snd_ctl_elem_id_t* ptr
);

void
snd_ctl_elem_info_set_numid(
    snd_ctl_elem_info_t* obj,
    unsigned int val
);

void
snd_ctl_elem_info_set_interface(
    snd_ctl_elem_info_t* obj,
    snd_ctl_elem_iface_t val
);

void
snd_ctl_elem_info_set_device(
    snd_ctl_elem_info_t* obj,
    unsigned int val
);

void
snd_ctl_elem_info_set_subdevice(
    snd_ctl_elem_info_t* obj,
    unsigned int val
);

void
snd_ctl_elem_info_set_name(
    snd_ctl_elem_info_t* obj,
    const char* val
);

void
snd_ctl_elem_info_set_index(
    snd_ctl_elem_info_t* obj,
    unsigned int val
);

int
snd_ctl_add_integer_elem_set(
    snd_ctl_t* ctl,
    snd_ctl_elem_info_t* info,
    unsigned int element_count,
    unsigned int member_count,
    long min,
    long max,
    long step
);

int
snd_ctl_add_integer64_elem_set(
    snd_ctl_t* ctl,
    snd_ctl_elem_info_t* info,
    unsigned int element_count,
    unsigned int member_count,
    long long min,
    long long max,
    long long step
);

int
snd_ctl_add_boolean_elem_set(
    snd_ctl_t* ctl,
    snd_ctl_elem_info_t* info,
    unsigned int element_count,
    unsigned int member_count
);

int
snd_ctl_add_enumerated_elem_set(
    snd_ctl_t* ctl,
    snd_ctl_elem_info_t* info,
    unsigned int element_count,
    unsigned int member_count,
    unsigned int items,
    const char*const labels[]
);

int
snd_ctl_add_bytes_elem_set(
    snd_ctl_t* ctl,
    snd_ctl_elem_info_t* info,
    unsigned int element_count,
    unsigned int member_count
);

int
snd_ctl_elem_add_integer(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    unsigned int count,
    long imin,
    long imax,
    long istep
);

int
snd_ctl_elem_add_integer64(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    unsigned int count,
    long long imin,
    long long imax,
    long long istep
);

int
snd_ctl_elem_add_boolean(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    unsigned int count
);

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[]
);

int
snd_ctl_elem_add_iec958(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id
);

int
snd_ctl_elem_remove(
    snd_ctl_t* ctl,
    snd_ctl_elem_id_t* id
);

size_t
snd_ctl_elem_value_sizeof(void);

int
snd_ctl_elem_value_malloc(snd_ctl_elem_value_t** ptr);

void
snd_ctl_elem_value_free(snd_ctl_elem_value_t* obj);

void
snd_ctl_elem_value_clear(snd_ctl_elem_value_t* obj);

void
snd_ctl_elem_value_copy(
    snd_ctl_elem_value_t* dst,
    const snd_ctl_elem_value_t* src
);

int
snd_ctl_elem_value_compare(
    snd_ctl_elem_value_t* left,
    const snd_ctl_elem_value_t* right
);

void
snd_ctl_elem_value_get_id(
    const snd_ctl_elem_value_t* obj,
    snd_ctl_elem_id_t* ptr
);

unsigned int
snd_ctl_elem_value_get_numid(const snd_ctl_elem_value_t* obj);

snd_ctl_elem_iface_t
snd_ctl_elem_value_get_interface(const snd_ctl_elem_value_t* obj);

unsigned int
snd_ctl_elem_value_get_device(const snd_ctl_elem_value_t* obj);

unsigned int
snd_ctl_elem_value_get_subdevice(const snd_ctl_elem_value_t* obj);

const char*
snd_ctl_elem_value_get_name(const snd_ctl_elem_value_t* obj);

unsigned int
snd_ctl_elem_value_get_index(const snd_ctl_elem_value_t* obj);

void
snd_ctl_elem_value_set_id(
    snd_ctl_elem_value_t* obj,
    const snd_ctl_elem_id_t* ptr
);

void
snd_ctl_elem_value_set_numid(
    snd_ctl_elem_value_t* obj,
    unsigned int val
);

void
snd_ctl_elem_value_set_interface(
    snd_ctl_elem_value_t* obj,
    snd_ctl_elem_iface_t val
);

void
snd_ctl_elem_value_set_device(
    snd_ctl_elem_value_t* obj,
    unsigned int val
);

void
snd_ctl_elem_value_set_subdevice(
    snd_ctl_elem_value_t* obj,
    unsigned int val
);

void
snd_ctl_elem_value_set_name(
    snd_ctl_elem_value_t* obj,
    const char* val
);

void
snd_ctl_elem_value_set_index(
    snd_ctl_elem_value_t* obj,
    unsigned int val
);

int
snd_ctl_elem_value_get_boolean(
    const snd_ctl_elem_value_t* obj,
    unsigned int idx
);

long
snd_ctl_elem_value_get_integer(
    const snd_ctl_elem_value_t* obj,
    unsigned int idx
);

long long
snd_ctl_elem_value_get_integer64(
    const snd_ctl_elem_value_t* obj,
    unsigned int idx
);

unsigned int
snd_ctl_elem_value_get_enumerated(
    const snd_ctl_elem_value_t* obj,
    unsigned int idx
);

unsigned char
snd_ctl_elem_value_get_byte(
    const snd_ctl_elem_value_t* obj,
    unsigned int idx
);

void
snd_ctl_elem_value_set_boolean(
    snd_ctl_elem_value_t* obj,
    unsigned int idx,
    long val
);

void
snd_ctl_elem_value_set_integer(
    snd_ctl_elem_value_t* obj,
    unsigned int idx,
    long val
);

void
snd_ctl_elem_value_set_integer64(
    snd_ctl_elem_value_t* obj,
    unsigned int idx,
    long long val
);

void
snd_ctl_elem_value_set_enumerated(
    snd_ctl_elem_value_t* obj,
    unsigned int idx,
    unsigned int val
);

void
snd_ctl_elem_value_set_byte(
    snd_ctl_elem_value_t* obj,
    unsigned int idx,
    unsigned char val
);

void
snd_ctl_elem_set_bytes(
    snd_ctl_elem_value_t* obj,
    void* data,
    size_t size
);

const void*
snd_ctl_elem_value_get_bytes(const snd_ctl_elem_value_t* obj);

void
snd_ctl_elem_value_get_iec958(
    const snd_ctl_elem_value_t* obj,
    snd_aes_iec958_t* ptr
);

void
snd_ctl_elem_value_set_iec958(
    snd_ctl_elem_value_t* obj,
    const snd_aes_iec958_t* ptr
);

int
snd_tlv_parse_dB_info(
    unsigned int* tlv,
    unsigned int tlv_size,
    unsigned int** db_tlvp
);

int
snd_tlv_get_dB_range(
    unsigned int* tlv,
    long rangemin,
    long rangemax,
    long* min,
    long* max
);

int
snd_tlv_convert_to_dB(
    unsigned int* tlv,
    long rangemin,
    long rangemax,
    long volume,
    long* db_gain
);

int
snd_tlv_convert_from_dB(
    unsigned int* tlv,
    long rangemin,
    long rangemax,
    long db_gain,
    long* value,
    int xdir
);

int
snd_ctl_get_dB_range(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    long* min,
    long* max
);

int
snd_ctl_convert_to_dB(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    long volume,
    long* db_gain
);

int
snd_ctl_convert_from_dB(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    long db_gain,
    long* value,
    int xdir
);

// macros

#define SND_CONTROL_DLSYM_VERSION
#define SND_CTL_ASYNC
#define SND_CTL_EVENT_MASK_ADD
#define SND_CTL_EVENT_MASK_INFO
#define SND_CTL_EVENT_MASK_REMOVE
#define SND_CTL_EVENT_MASK_TLV
#define SND_CTL_EVENT_MASK_VALUE
#define SND_CTL_NAME_CAPTURE

#define SND_CTL_NAME_IEC958( \
    expl, \
    direction, \
    what \
)

#define SND_CTL_NAME_IEC958_CON_MASK
#define SND_CTL_NAME_IEC958_DEFAULT
#define SND_CTL_NAME_IEC958_MASK
#define SND_CTL_NAME_IEC958_NONE
#define SND_CTL_NAME_IEC958_PCM_STREAM
#define SND_CTL_NAME_IEC958_PRO_MASK
#define SND_CTL_NAME_IEC958_SWITCH
#define SND_CTL_NAME_IEC958_VOLUME
#define SND_CTL_NAME_NONE
#define SND_CTL_NAME_PLAYBACK
#define SND_CTL_NONBLOCK
#define SND_CTL_POWER_D0
#define SND_CTL_POWER_D1
#define SND_CTL_POWER_D2
#define SND_CTL_POWER_D3
#define SND_CTL_POWER_D3cold
#define SND_CTL_POWER_D3hot
#define SND_CTL_POWER_MASK
#define SND_CTL_READONLY
#define SND_CTL_TLVT_CHMAP_FIXED
#define SND_CTL_TLVT_CHMAP_PAIRED
#define SND_CTL_TLVT_CHMAP_VAR
#define SND_CTL_TLVT_CONTAINER
#define SND_CTL_TLVT_DB_LINEAR
#define SND_CTL_TLVT_DB_MINMAX
#define SND_CTL_TLVT_DB_MINMAX_MUTE
#define SND_CTL_TLVT_DB_RANGE
#define SND_CTL_TLVT_DB_SCALE
#define SND_CTL_TLV_DB_GAIN_MUTE
#define SND_SCTL_NOFREE
#define snd_ctl_card_info_alloca(ptr)
#define snd_ctl_elem_id_alloca(ptr)
#define snd_ctl_elem_info_alloca(ptr)
#define snd_ctl_elem_list_alloca(ptr)
#define snd_ctl_elem_value_alloca(ptr)
#define snd_ctl_event_alloca(ptr)

Detailed Documentation

The control interface. See Control interface page for more details.

Typedefs

typedef struct _snd_ctl_card_info snd_ctl_card_info_t

CTL card info container

typedef struct _snd_ctl_elem_id snd_ctl_elem_id_t

CTL element identifier container

typedef struct _snd_ctl_elem_list snd_ctl_elem_list_t

CTL element identifier list container

typedef struct _snd_ctl_elem_info snd_ctl_elem_info_t

CTL element info container

typedef struct _snd_ctl_elem_value snd_ctl_elem_value_t

CTL element value container

typedef struct _snd_ctl_event snd_ctl_event_t

CTL event container

typedef struct _snd_ctl snd_ctl_t

CTL handle

typedef struct _snd_sctl snd_sctl_t

SCTL type

Global Functions

int
snd_card_load(int card)

Try to load the driver for a card.

Parameters:

card

Card number.

Returns:

1 if driver is present, zero if driver is not present

int
snd_card_next(int* card)

Try to determine the next card.

Tries to determine the next card from given card number. If card number is -1, then the first available card is returned. If the result card number is -1, no more cards are available.

Parameters:

rcard

pointer to card number

Returns:

zero if success, otherwise a negative error code

int
snd_card_get_index(const char* name)

Convert card string to an integer value.

The accepted format is an integer value in ASCII representation or the card identifier (the id parameter for sound-card drivers). The control device name like /dev/snd/controlC0 is accepted, too.

Parameters:

string

String containing card identifier

Returns:

zero if success, otherwise a negative error code

int
snd_card_get_name(
    int card,
    char** name
)

Obtain the card name.

The value returned in name is allocated with strdup and should be freed when no longer used.

Parameters:

card

Card number

name

Result - card name corresponding to card number

Returns:

zero if success, otherwise a negative error code

int
snd_card_get_longname(
    int card,
    char** name
)

Obtain the card long name.

The value returned in name is allocated with strdup and should be freed when no longer used.

Parameters:

card

Card number

name

Result - card long name corresponding to card number

Returns:

zero if success, otherwise a negative error code

int
snd_device_name_hint(
    int card,
    const char* iface,
    void*** hints
)

Get a set of device name hints.

hints will receive a NULL-terminated array of device name hints, which can be passed to snd_device_name_get_hint to extract usable values. When no longer needed, hints should be passed to snd_device_name_free_hint to release resources.

User-defined hints are gathered from namehint.IFACE tree like:

namehint.pcm {


myfile "file:FILE=/tmp/soundwave.raw|Save sound output to /tmp/soundwave.raw"


myplug "plug:front:Do all conversions for front speakers"


}

Note: The device description is separated with ‘|’ char.

Special variables: defaults.namehint.showall specifies if all device definitions are accepted (boolean type).

Parameters:

card

Card number or -1 (means all cards)

iface

Interface identification (like “pcm”, “rawmidi”, “timer”, “seq”)

hints

Result - array of device name hints

Returns:

zero if success, otherwise a negative error code

int
snd_device_name_free_hint(void** hints)

Free a list of device name hints.

Parameters:

hints

List to free

Returns:

zero if success, otherwise a negative error code

char*
snd_device_name_get_hint(
    const void* hint,
    const char* id
)

Extract a value from a hint.

List of valid IDs: NAME - name of device DESC - description of device IOID - input / output identification (“Input” or “Output”), NULL means both

The return value should be freed when no longer needed.

Parameters:

hint

A pointer to hint

id

Hint value to extract (“NAME”, “DESC”, or “IOID”, see below)

Returns:

an allocated ASCII string if success, otherwise NULL

int
snd_ctl_open(
    snd_ctl_t** ctl,
    const char* name,
    int mode
)

Opens a CTL.

Parameters:

ctlp

Returned CTL handle

name

ASCII identifier of the CTL handle

mode

Open mode (see SND_CTL_NONBLOCK, SND_CTL_ASYNC)

Returns:

0 on success otherwise a negative error code

int
snd_ctl_open_lconf(
    snd_ctl_t** ctl,
    const char* name,
    int mode,
    snd_config_t* lconf
)

Opens a CTL using local configuration.

Parameters:

ctlp

Returned CTL handle

name

ASCII identifier of the CTL handle

mode

Open mode (see SND_CTL_NONBLOCK, SND_CTL_ASYNC)

lconf

Local configuration

Returns:

0 on success otherwise a negative error code

int
snd_ctl_open_fallback(
    snd_ctl_t** ctl,
    snd_config_t* root,
    const char* name,
    const char* orig_name,
    int mode
)

Opens a fallback CTL.

Parameters:

ctlp

Returned CTL handle

root

Configuration root

name

ASCII identifier of the CTL handle used as fallback

orig_name

The original ASCII name

mode

Open mode (see SND_CTL_NONBLOCK, SND_CTL_ASYNC)

Returns:

0 on success otherwise a negative error code

int
snd_ctl_close(snd_ctl_t* ctl)

close CTL handle

Closes the specified CTL handle and frees all associated resources.

Parameters:

ctl

CTL handle

Returns:

0 on success otherwise a negative error code

int
snd_ctl_nonblock(
    snd_ctl_t* ctl,
    int nonblock
)

set nonblock mode

Parameters:

ctl

CTL handle

nonblock

0 = block, 1 = nonblock mode, 2 = abort

Returns:

0 on success otherwise a negative error code

int
snd_async_add_ctl_handler(
    snd_async_handler_t** handler,
    snd_ctl_t* ctl,
    snd_async_callback_t callback,
    void* private_data
)

Add an async handler for a CTL.

Parameters:

handler

Returned handler handle

ctl

CTL handle

callback

Callback function

private_data

Callback private data

Returns:

0 otherwise a negative error code on failure

snd_ctl_t*
snd_async_handler_get_ctl(snd_async_handler_t* handler)

Return CTL handle related to an async handler.

Parameters:

handler

Async handler handle

Returns:

CTL handle

int
snd_ctl_poll_descriptors_count(snd_ctl_t* ctl)

get count of poll descriptors for CTL handle

Parameters:

ctl

CTL handle

Returns:

count of poll descriptors

int
snd_ctl_poll_descriptors(
    snd_ctl_t* ctl,
    struct pollfd* pfds,
    unsigned int space
)

get poll descriptors

Parameters:

ctl

CTL handle

pfds

array of poll descriptors

space

space in the poll descriptor array

Returns:

count of filled descriptors

int
snd_ctl_poll_descriptors_revents(
    snd_ctl_t* ctl,
    struct pollfd* pfds,
    unsigned int nfds,
    unsigned short* revents
)

get returned events from poll descriptors

Parameters:

ctl

CTL handle

pfds

array of poll descriptors

nfds

count of poll descriptors

revents

returned events

Returns:

zero if success, otherwise a negative error code

int
snd_ctl_subscribe_events(
    snd_ctl_t* ctl,
    int subscribe
)

Ask to be informed about events (poll, snd_async_add_ctl_handler, snd_ctl_read)

Parameters:

ctl

CTL handle

subscribe

0 = unsubscribe, 1 = subscribe, -1 = check subscribe or not

Returns:

0 on success otherwise a negative error code

int
snd_ctl_card_info(
    snd_ctl_t* ctl,
    snd_ctl_card_info_t* info
)

Get card related information.

Parameters:

ctl

CTL handle

info

Card info pointer

Returns:

0 on success otherwise a negative error code

int
snd_ctl_elem_list(
    snd_ctl_t* ctl,
    snd_ctl_elem_list_t* list
)

Get a list of element identifiers.

Parameters:

ctl

CTL handle

list

CTL element identifiers list pointer

Returns:

0 on success otherwise a negative error code

int
snd_ctl_elem_info(
    snd_ctl_t* ctl,
    snd_ctl_elem_info_t* info
)

Get CTL element information.

Parameters:

ctl

CTL handle

info

CTL element id/information pointer

Returns:

0 on success otherwise a negative error code

int
snd_ctl_elem_read(
    snd_ctl_t* ctl,
    snd_ctl_elem_value_t* data
)

Get CTL element value.

Parameters:

ctl

CTL handle

data

Data of an element.

Returns:

0 on success otherwise a negative error code

int
snd_ctl_elem_write(
    snd_ctl_t* ctl,
    snd_ctl_elem_value_t* data
)

Set CTL element value.

Parameters:

ctl

CTL handle

data

Data of an element.

0

on success

>0

on success when value was changed

<0

a negative error code

int
snd_ctl_elem_lock(
    snd_ctl_t* ctl,
    snd_ctl_elem_id_t* id
)

Lock CTL element.

Parameters:

ctl

CTL handle

id

CTL element id pointer

Returns:

0 on success otherwise a negative error code

int
snd_ctl_elem_unlock(
    snd_ctl_t* ctl,
    snd_ctl_elem_id_t* id
)

Unlock CTL element.

Parameters:

ctl

CTL handle

id

CTL element id pointer

Returns:

0 on success otherwise a negative error code

int
snd_ctl_elem_tlv_read(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    unsigned int* tlv,
    unsigned int tlv_size
)

Read structured data from an element set to given buffer.

The format of an array of tlv argument is: tlv[0]: Type. One of SND_CTL_TLVT_XXX. tlv[1]: Length. The length of value in units of byte. tlv[2..]: Value. Depending on the type.

Details are described in <sound/tlv.h>.

Parameters:

ctl

A handle of backend module for control interface.

id

ID of an element.

tlv

An array with members of unsigned int type.

tlv_size

The length of the array.

Returns:

0 on success otherwise a negative error code

int
snd_ctl_elem_tlv_write(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    const unsigned int* tlv
)

Write structured data from given buffer to an element set.

The format of an array of tlv argument is: tlv[0]: Type. One of SND_CTL_TLVT_XXX. tlv[1]: Length. The length of value in units of byte. tlv[2..]: Value. Depending on the type.

Details are described in <sound/tlv.h>.

Parameters:

ctl

A handle of backend module for control interface.

id

ID of an element.

tlv

An array with members of unsigned int type. The second member must represent total bytes of the rest of array.

0

on success

>0

on success when value was changed

<0

a negative error code

int
snd_ctl_elem_tlv_command(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    const unsigned int* tlv
)

Process structured data from given buffer for an element set.

The format of an array of tlv argument is: tlv[0]: Type. One of SND_CTL_TLVT_XXX. tlv[1]: Length. The length of value in units of byte. tlv[2..]: Value. Depending on the type.

Details are described in <sound/tlv.h>.

Parameters:

ctl

A handle of backend module for control interface.

id

ID of an element.

tlv

An array with members of unsigned int type. The second member must represent total bytes of the rest of array.

0

on success

>0

on success when value was changed

<0

a negative error code

int
snd_ctl_set_power_state(
    snd_ctl_t* ctl,
    unsigned int state
)

Set Power State to given SND_CTL_POWER_* value and do the power management.

Parameters:

ctl

CTL handle

state

Desired Power State

Returns:

0 on success otherwise a negative error code

int
snd_ctl_get_power_state(
    snd_ctl_t* ctl,
    unsigned int* state
)

Get actual Power State.

Parameters:

ctl

CTL handle

state

Destination value

Returns:

0 on success otherwise a negative error code

int
snd_ctl_read(
    snd_ctl_t* ctl,
    snd_ctl_event_t* event
)

Read an event.

Parameters:

ctl

CTL handle

event

Event pointer

Returns:

number of events read otherwise a negative error code on failure

int
snd_ctl_wait(
    snd_ctl_t* ctl,
    int timeout
)

Wait for a CTL to become ready (i.e. at least one event pending)

Parameters:

ctl

CTL handle

timeout

maximum time in milliseconds to wait

Returns:

0 otherwise a negative error code on failure

const char*
snd_ctl_name(snd_ctl_t* ctl)

get identifier of CTL handle

Returns the ASCII identifier of given CTL handle. It’s the same identifier specified in snd_ctl_open().

Parameters:

ctl

CTL handle

Returns:

ascii identifier of CTL handle

snd_ctl_type_t
snd_ctl_type(snd_ctl_t* ctl)

get type of CTL handle

Returns the type snd_ctl_type_t of given CTL handle.

Parameters:

ctl

CTL handle

Returns:

type of CTL handle

const char*
snd_ctl_elem_type_name(snd_ctl_elem_type_t type)

get name of a CTL element type

Parameters:

type

CTL element type

Returns:

ascii name of CTL element type

const char*
snd_ctl_elem_iface_name(snd_ctl_elem_iface_t iface)

get name of a CTL element related interface

Parameters:

iface

CTL element related interface

Returns:

ascii name of CTL element related interface

const char*
snd_ctl_event_type_name(snd_ctl_event_type_t type)

get name of a CTL event type

Parameters:

type

CTL event type

Returns:

ascii name of CTL event type

unsigned int
snd_ctl_event_elem_get_mask(const snd_ctl_event_t* obj)

Get event mask for an element related event.

Parameters:

obj

CTL event

Returns:

event mask for element related event

unsigned int
snd_ctl_event_elem_get_numid(const snd_ctl_event_t* obj)

Get element numeric identifier for an element related event.

Parameters:

obj

CTL event

Returns:

element numeric identifier

void
snd_ctl_event_elem_get_id(
    const snd_ctl_event_t* obj,
    snd_ctl_elem_id_t* ptr
)

Get CTL element identifier for an element related event.

Parameters:

obj

CTL event

ptr

Pointer to returned CTL element identifier

snd_ctl_elem_iface_t
snd_ctl_event_elem_get_interface(const snd_ctl_event_t* obj)

Get interface part of CTL element identifier for an element related event.

Parameters:

obj

CTL event

Returns:

interface part of element identifier

unsigned int
snd_ctl_event_elem_get_device(const snd_ctl_event_t* obj)

Get device part of CTL element identifier for an element related event.

Parameters:

obj

CTL event

Returns:

device part of element identifier

unsigned int
snd_ctl_event_elem_get_subdevice(const snd_ctl_event_t* obj)

Get subdevice part of CTL element identifier for an element related event.

Parameters:

obj

CTL event

Returns:

subdevice part of element identifier

const char*
snd_ctl_event_elem_get_name(const snd_ctl_event_t* obj)

Get name part of CTL element identifier for an element related event.

Parameters:

obj

CTL event

Returns:

name part of element identifier

unsigned int
snd_ctl_event_elem_get_index(const snd_ctl_event_t* obj)

Get index part of CTL element identifier for an element related event.

Parameters:

obj

CTL event

Returns:

index part of element identifier

int
snd_ctl_elem_list_alloc_space(
    snd_ctl_elem_list_t* obj,
    unsigned int entries
)

allocate space for CTL element identifiers list

Parameters:

obj

CTL element identifiers list

entries

Entries to allocate

Returns:

0 on success otherwise a negative error code

void
snd_ctl_elem_list_free_space(snd_ctl_elem_list_t* obj)

free previously allocated space for CTL element identifiers list

Parameters:

obj

CTL element identifiers list

char*
snd_ctl_ascii_elem_id_get(snd_ctl_elem_id_t* id)

return ASCII CTL element identifier name

The string is allocated using strdup().

Parameters:

id

CTL identifier

Returns:

ascii identifier of CTL element

int
snd_ctl_ascii_elem_id_parse(
    snd_ctl_elem_id_t* dst,
    const char* str
)

parse ASCII string as CTL element identifier

Parameters:

dst

destination CTL identifier

str

source ASCII string

Returns:

zero on success, otherwise a negative error code

int
snd_ctl_ascii_value_parse(
    snd_ctl_t* handle,
    snd_ctl_elem_value_t* dst,
    snd_ctl_elem_info_t* info,
    const char* value
)

parse ASCII string as CTL element value

Note: For toggle command, the dst must contain previous (current) state (do the snd_ctl_elem_read call to obtain it).

Parameters:

handle

CTL handle

dst

destination CTL element value

info

CTL element info structure

value

source ASCII string

Returns:

zero on success, otherwise a negative error code

size_t
snd_ctl_elem_id_sizeof(void)

get size of snd_ctl_elem_id_t

Returns:

size in bytes

int
snd_ctl_elem_id_malloc(snd_ctl_elem_id_t** ptr)

allocate an invalid snd_ctl_elem_id_t using standard malloc

Parameters:

ptr

returned pointer

Returns:

0 on success otherwise negative error code

void
snd_ctl_elem_id_free(snd_ctl_elem_id_t* obj)

frees a previously allocated snd_ctl_elem_id_t

Parameters:

obj

pointer to object to free

void
snd_ctl_elem_id_clear(snd_ctl_elem_id_t* obj)

clear given snd_ctl_elem_id_t object

Parameters:

obj

pointer to object to clear

void
snd_ctl_elem_id_copy(
    snd_ctl_elem_id_t* dst,
    const snd_ctl_elem_id_t* src
)

copy one snd_ctl_elem_id_t to another

Parameters:

dst

pointer to destination

src

pointer to source

unsigned int
snd_ctl_elem_id_get_numid(const snd_ctl_elem_id_t* obj)

Get numeric identifier from a CTL element identifier.

Parameters:

obj

CTL element identifier

Returns:

CTL element numeric identifier

snd_ctl_elem_iface_t
snd_ctl_elem_id_get_interface(const snd_ctl_elem_id_t* obj)

Get interface part of a CTL element identifier.

Parameters:

obj

CTL element identifier

Returns:

CTL element related interface

unsigned int
snd_ctl_elem_id_get_device(const snd_ctl_elem_id_t* obj)

Get device part of a CTL element identifier.

Parameters:

obj

CTL element identifier

Returns:

CTL element related device

unsigned int
snd_ctl_elem_id_get_subdevice(const snd_ctl_elem_id_t* obj)

Get subdevice part of a CTL element identifier.

Parameters:

obj

CTL element identifier

Returns:

CTL element related subdevice

const char*
snd_ctl_elem_id_get_name(const snd_ctl_elem_id_t* obj)

Get name part of a CTL element identifier.

Parameters:

obj

CTL element identifier

Returns:

CTL element name

unsigned int
snd_ctl_elem_id_get_index(const snd_ctl_elem_id_t* obj)

Get index part of a CTL element identifier.

Parameters:

obj

CTL element identifier

Returns:

CTL element index

void
snd_ctl_elem_id_set_numid(
    snd_ctl_elem_id_t* obj,
    unsigned int val
)

Set numeric identifier for a CTL element identifier.

Parameters:

obj

CTL element identifier

val

CTL element numeric identifier

void
snd_ctl_elem_id_set_interface(
    snd_ctl_elem_id_t* obj,
    snd_ctl_elem_iface_t val
)

Set interface part for a CTL element identifier.

Parameters:

obj

CTL element identifier

val

CTL element related interface

void
snd_ctl_elem_id_set_device(
    snd_ctl_elem_id_t* obj,
    unsigned int val
)

Set device part for a CTL element identifier.

Parameters:

obj

CTL element identifier

val

CTL element related device

void
snd_ctl_elem_id_set_subdevice(
    snd_ctl_elem_id_t* obj,
    unsigned int val
)

Set subdevice part for a CTL element identifier.

Parameters:

obj

CTL element identifier

val

CTL element related subdevice

void
snd_ctl_elem_id_set_name(
    snd_ctl_elem_id_t* obj,
    const char* val
)

Set name part for a CTL element identifier.

Parameters:

obj

CTL element identifier

val

CTL element name

void
snd_ctl_elem_id_set_index(
    snd_ctl_elem_id_t* obj,
    unsigned int val
)

Set index part for a CTL element identifier.

Parameters:

obj

CTL element identifier

val

CTL element index

size_t
snd_ctl_card_info_sizeof(void)

get size of snd_ctl_card_info_t

Returns:

size in bytes

int
snd_ctl_card_info_malloc(snd_ctl_card_info_t** ptr)

allocate an invalid snd_ctl_card_info_t using standard malloc

Parameters:

ptr

returned pointer

Returns:

0 on success otherwise negative error code

void
snd_ctl_card_info_free(snd_ctl_card_info_t* obj)

frees a previously allocated snd_ctl_card_info_t

Parameters:

obj

pointer to object to free

void
snd_ctl_card_info_clear(snd_ctl_card_info_t* obj)

clear given snd_ctl_card_info_t object

Parameters:

obj

pointer to object to clear

void
snd_ctl_card_info_copy(
    snd_ctl_card_info_t* dst,
    const snd_ctl_card_info_t* src
)

copy one snd_ctl_card_info_t to another

Parameters:

dst

pointer to destination

src

pointer to source

int
snd_ctl_card_info_get_card(const snd_ctl_card_info_t* obj)

Get card number from a CTL card info.

Parameters:

obj

CTL card info

Returns:

card number

const char*
snd_ctl_card_info_get_id(const snd_ctl_card_info_t* obj)

Get card identifier from a CTL card info.

Parameters:

obj

CTL card info

Returns:

card identifier

const char*
snd_ctl_card_info_get_driver(const snd_ctl_card_info_t* obj)

Get card driver name from a CTL card info.

Parameters:

obj

CTL card info

Returns:

card driver name

const char*
snd_ctl_card_info_get_name(const snd_ctl_card_info_t* obj)

Get card name from a CTL card info.

Parameters:

obj

CTL card info

Returns:

card name

const char*
snd_ctl_card_info_get_longname(const snd_ctl_card_info_t* obj)

Get card long name from a CTL card info.

Parameters:

obj

CTL card info

Returns:

card long name

const char*
snd_ctl_card_info_get_mixername(const snd_ctl_card_info_t* obj)

Get card mixer name from a CTL card info.

Parameters:

obj

CTL card info

Returns:

card mixer name

const char*
snd_ctl_card_info_get_components(const snd_ctl_card_info_t* obj)

Get card component list from a CTL card info.

Parameters:

obj

CTL card info

Returns:

card mixer identifier

size_t
snd_ctl_event_sizeof(void)

get size of snd_ctl_event_t

Returns:

size in bytes

int
snd_ctl_event_malloc(snd_ctl_event_t** ptr)

allocate an invalid snd_ctl_event_t using standard malloc

Parameters:

ptr

returned pointer

Returns:

0 on success otherwise negative error code

void
snd_ctl_event_free(snd_ctl_event_t* obj)

frees a previously allocated snd_ctl_event_t

Parameters:

obj

pointer to object to free

void
snd_ctl_event_clear(snd_ctl_event_t* obj)

clear given snd_ctl_event_t object

Parameters:

obj

pointer to object to clear

void
snd_ctl_event_copy(
    snd_ctl_event_t* dst,
    const snd_ctl_event_t* src
)

copy one snd_ctl_event_t to another

Parameters:

dst

pointer to destination

src

pointer to source

snd_ctl_event_type_t
snd_ctl_event_get_type(const snd_ctl_event_t* obj)

Get type of a CTL event.

Parameters:

obj

CTL event

Returns:

CTL event type

size_t
snd_ctl_elem_list_sizeof(void)

get size of snd_ctl_elem_list_t

Returns:

size in bytes

int
snd_ctl_elem_list_malloc(snd_ctl_elem_list_t** ptr)

allocate an invalid snd_ctl_elem_list_t using standard malloc

Parameters:

ptr

returned pointer

Returns:

0 on success otherwise negative error code

void
snd_ctl_elem_list_free(snd_ctl_elem_list_t* obj)

frees a previously allocated snd_ctl_elem_list_t

Parameters:

obj

pointer to object to free

void
snd_ctl_elem_list_clear(snd_ctl_elem_list_t* obj)

clear given snd_ctl_elem_list_t object

Parameters:

obj

pointer to object to clear

void
snd_ctl_elem_list_copy(
    snd_ctl_elem_list_t* dst,
    const snd_ctl_elem_list_t* src
)

copy one snd_ctl_elem_list_t to another

Parameters:

dst

pointer to destination

src

pointer to source

void
snd_ctl_elem_list_set_offset(
    snd_ctl_elem_list_t* obj,
    unsigned int val
)

Set index of first wanted CTL element identifier in a CTL element identifiers list.

Parameters:

obj

CTL element identifiers list

val

index of CTL element to put at position 0 of list

unsigned int
snd_ctl_elem_list_get_used(const snd_ctl_elem_list_t* obj)

Get number of used entries in CTL element identifiers list.

Parameters:

obj

CTL element identifier list

Returns:

number of used entries

unsigned int
snd_ctl_elem_list_get_count(const snd_ctl_elem_list_t* obj)

Get total count of elements present in CTL device (information present in every filled CTL element identifiers list)

Parameters:

obj

CTL element identifier list

Returns:

total number of elements

void
snd_ctl_elem_list_get_id(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx,
    snd_ctl_elem_id_t* ptr
)

Get CTL element identifier for an entry of a CTL element identifiers list.

Parameters:

obj

CTL element identifier list

idx

Index of entry

ptr

Pointer to returned CTL element identifier

unsigned int
snd_ctl_elem_list_get_numid(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx
)

Get CTL element numeric identifier for an entry of a CTL element identifiers list.

Parameters:

obj

CTL element identifier list

idx

Index of entry

Returns:

CTL element numeric identifier

snd_ctl_elem_iface_t
snd_ctl_elem_list_get_interface(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx
)

Get interface part of CTL element identifier for an entry of a CTL element identifiers list.

Parameters:

obj

CTL element identifier list

idx

Index of entry

Returns:

CTL element related interface

unsigned int
snd_ctl_elem_list_get_device(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx
)

Get device part of CTL element identifier for an entry of a CTL element identifiers list.

Parameters:

obj

CTL element identifier list

idx

Index of entry

Returns:

CTL element related device

unsigned int
snd_ctl_elem_list_get_subdevice(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx
)

Get subdevice part of CTL element identifier for an entry of a CTL element identifiers list.

Parameters:

obj

CTL element identifier list

idx

Index of entry

Returns:

CTL element related subdevice

const char*
snd_ctl_elem_list_get_name(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx
)

Get name part of CTL element identifier for an entry of a CTL element identifiers list.

Parameters:

obj

CTL element identifier list

idx

Index of entry

Returns:

CTL element name

unsigned int
snd_ctl_elem_list_get_index(
    const snd_ctl_elem_list_t* obj,
    unsigned int idx
)

Get index part of CTL element identifier for an entry of a CTL element identifiers list.

Parameters:

obj

CTL element identifier list

idx

Index of entry

Returns:

CTL element index

size_t
snd_ctl_elem_info_sizeof(void)

get size of snd_ctl_elem_info_t

Returns:

size in bytes

int
snd_ctl_elem_info_malloc(snd_ctl_elem_info_t** ptr)

allocate an invalid snd_ctl_elem_info_t using standard malloc

Parameters:

ptr

returned pointer

Returns:

0 on success otherwise negative error code

void
snd_ctl_elem_info_free(snd_ctl_elem_info_t* obj)

frees a previously allocated snd_ctl_elem_info_t

Parameters:

obj

pointer to object to free

void
snd_ctl_elem_info_clear(snd_ctl_elem_info_t* obj)

clear given snd_ctl_elem_info_t object

Parameters:

obj

pointer to object to clear

void
snd_ctl_elem_info_copy(
    snd_ctl_elem_info_t* dst,
    const snd_ctl_elem_info_t* src
)

copy one snd_ctl_elem_info_t to another

Parameters:

dst

pointer to destination

src

pointer to source

snd_ctl_elem_type_t
snd_ctl_elem_info_get_type(const snd_ctl_elem_info_t* obj)

Get type from a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

CTL element content type

int
snd_ctl_elem_info_is_readable(const snd_ctl_elem_info_t* obj)

Get info about readability from a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

0 if element is not readable, 1 if element is readable

int
snd_ctl_elem_info_is_writable(const snd_ctl_elem_info_t* obj)

Get info about writability from a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

0 if element is not writable, 1 if element is not writable

int
snd_ctl_elem_info_is_volatile(const snd_ctl_elem_info_t* obj)

Get info about notification feasibility from a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

0 if all element value changes are notified to subscribed applications, 1 otherwise

int
snd_ctl_elem_info_is_inactive(const snd_ctl_elem_info_t* obj)

Get info about status from a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

0 if element value is not active, 1 if is active

int
snd_ctl_elem_info_is_locked(const snd_ctl_elem_info_t* obj)

Get info whether an element is locked.

Parameters:

obj

CTL element id/info

Returns:

0 if element value is currently changeable, 1 if it’s locked by another application

int
snd_ctl_elem_info_is_tlv_readable(const snd_ctl_elem_info_t* obj)

Get info about TLV readability from a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

0 if element’s TLV is not readable, 1 if element’s TLV is readable

int
snd_ctl_elem_info_is_tlv_writable(const snd_ctl_elem_info_t* obj)

Get info about TLV writeability from a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

0 if element’s TLV is not writable, 1 if element’s TLV is writable

int
snd_ctl_elem_info_is_tlv_commandable(const snd_ctl_elem_info_t* obj)

Get info about TLV command possibility from a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

0 if element’s TLV command is not possible, 1 if element’s TLV command is supported

int
snd_ctl_elem_info_is_owner(const snd_ctl_elem_info_t* obj)

Get info if I own an element.

Parameters:

obj

CTL element id/info

Returns:

0 if element value is currently changeable, 1 if it’s locked by another application

int
snd_ctl_elem_info_is_user(const snd_ctl_elem_info_t* obj)

Get info if it’s a user element.

Parameters:

obj

CTL element id/info

Returns:

0 if element value is a system element, 1 if it’s a user-created element

pid_t
snd_ctl_elem_info_get_owner(const snd_ctl_elem_info_t* obj)

Get owner of a locked element.

Parameters:

obj

CTL element id/info

Returns:

value entries count

unsigned int
snd_ctl_elem_info_get_count(const snd_ctl_elem_info_t* obj)

Get number of value entries from a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

value entries count

long
snd_ctl_elem_info_get_min(const snd_ctl_elem_info_t* obj)

Get minimum value from a SND_CTL_ELEM_TYPE_INTEGER CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

Minimum value

long
snd_ctl_elem_info_get_max(const snd_ctl_elem_info_t* obj)

Get maximum value from a SND_CTL_ELEM_TYPE_INTEGER CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

Maximum value

long
snd_ctl_elem_info_get_step(const snd_ctl_elem_info_t* obj)

Get value step from a SND_CTL_ELEM_TYPE_INTEGER CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

Step

long long
snd_ctl_elem_info_get_min64(const snd_ctl_elem_info_t* obj)

Get minimum value from a SND_CTL_ELEM_TYPE_INTEGER64 CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

Minimum value

long long
snd_ctl_elem_info_get_max64(const snd_ctl_elem_info_t* obj)

Get maximum value from a SND_CTL_ELEM_TYPE_INTEGER64 CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

Maximum value

long long
snd_ctl_elem_info_get_step64(const snd_ctl_elem_info_t* obj)

Get value step from a SND_CTL_ELEM_TYPE_INTEGER64 CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

Step

unsigned int
snd_ctl_elem_info_get_items(const snd_ctl_elem_info_t* obj)

Get number of items available from a SND_CTL_ELEM_TYPE_ENUMERATED CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

items count

void
snd_ctl_elem_info_set_item(
    snd_ctl_elem_info_t* obj,
    unsigned int val
)

Select item in a SND_CTL_ELEM_TYPE_ENUMERATED CTL element id/info.

Parameters:

obj

CTL element id/info

val

item number

const char*
snd_ctl_elem_info_get_item_name(const snd_ctl_elem_info_t* obj)

Get name for selected item in a SND_CTL_ELEM_TYPE_ENUMERATED CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

name of chosen item

int
snd_ctl_elem_info_get_dimensions(const snd_ctl_elem_info_t* obj)

Get count of dimensions for given element.

Parameters:

obj

CTL element id/info

Returns:

zero value if no dimensions are defined, otherwise positive value with count of dimensions

int
snd_ctl_elem_info_get_dimension(
    const snd_ctl_elem_info_t* obj,
    unsigned int idx
)

Get specified of dimension width for given element.

Parameters:

obj

CTL element id/info

idx

The dimension index

Returns:

zero value if no dimension width is defined, otherwise positive value with with of specified dimension

int
snd_ctl_elem_info_set_dimension(
    snd_ctl_elem_info_t* info,
    const int dimension[4]
)

Set width to a specified dimension level of given element information.

-EINVAL

Invalid arguments are given as parameters.

This function is added in version 1.1.2.

Parameters:

info

Information of an element.

dimension

Dimension width for each level by member unit.

Returns:

Zero on success, otherwise a negative error code.

void
snd_ctl_elem_info_get_id(
    const snd_ctl_elem_info_t* obj,
    snd_ctl_elem_id_t* ptr
)

Get CTL element identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

ptr

Pointer to returned CTL element identifier

unsigned int
snd_ctl_elem_info_get_numid(const snd_ctl_elem_info_t* obj)

Get element numeric identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

element numeric identifier

snd_ctl_elem_iface_t
snd_ctl_elem_info_get_interface(const snd_ctl_elem_info_t* obj)

Get interface part of CTL element identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

interface part of element identifier

unsigned int
snd_ctl_elem_info_get_device(const snd_ctl_elem_info_t* obj)

Get device part of CTL element identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

device part of element identifier

unsigned int
snd_ctl_elem_info_get_subdevice(const snd_ctl_elem_info_t* obj)

Get subdevice part of CTL element identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

subdevice part of element identifier

const char*
snd_ctl_elem_info_get_name(const snd_ctl_elem_info_t* obj)

Get name part of CTL element identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

name part of element identifier

unsigned int
snd_ctl_elem_info_get_index(const snd_ctl_elem_info_t* obj)

Get index part of CTL element identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

Returns:

index part of element identifier

void
snd_ctl_elem_info_set_id(
    snd_ctl_elem_info_t* obj,
    const snd_ctl_elem_id_t* ptr
)

Set CTL element identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

ptr

CTL element identifier

void
snd_ctl_elem_info_set_numid(
    snd_ctl_elem_info_t* obj,
    unsigned int val
)

Set element numeric identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

val

element numeric identifier

void
snd_ctl_elem_info_set_interface(
    snd_ctl_elem_info_t* obj,
    snd_ctl_elem_iface_t val
)

Set interface part of CTL element identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

val

interface part of element identifier

void
snd_ctl_elem_info_set_device(
    snd_ctl_elem_info_t* obj,
    unsigned int val
)

Set device part of CTL element identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

val

device part of element identifier

void
snd_ctl_elem_info_set_subdevice(
    snd_ctl_elem_info_t* obj,
    unsigned int val
)

Set subdevice part of CTL element identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

val

subdevice part of element identifier

void
snd_ctl_elem_info_set_name(
    snd_ctl_elem_info_t* obj,
    const char* val
)

Set name part of CTL element identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

val

name part of element identifier

void
snd_ctl_elem_info_set_index(
    snd_ctl_elem_info_t* obj,
    unsigned int val
)

Set index part of CTL element identifier of a CTL element id/info.

Parameters:

obj

CTL element id/info

val

index part of element identifier

int
snd_ctl_add_integer_elem_set(
    snd_ctl_t* ctl,
    snd_ctl_elem_info_t* info,
    unsigned int element_count,
    unsigned int member_count,
    long min,
    long max,
    long step
)

Create and add some user-defined control elements of integer type.

This function creates some user elements with integer type. These elements are not controlled by device drivers in kernel. They can be operated by the same way as usual elements added by the device drivers.

The name field of id must be set with unique value to identify new control elements. After returning, all fields of id are filled. A element can be identified by the combination of name and index, or by numid.

All of members in the new elements are locked. The value of each member is initialized with the minimum value.

-EBUSY

A element with ID id already exists.

-EINVAL

Some arguments include invalid value; i.e. ID field in info has no name, or the number of members is not between 1 to 127.

-ENOMEM

Out of memory, or there are too many user elements.

-ENXIO

This backend module does not support user elements of integer type.

-ENODEV

Device unplugged.

This function is added in version 1.1.2.

Parameters:

ctl

A handle of backend module for control interface.

info

Common iformation for a new element set, with ID of the first new element.

element_count

The number of elements added by this operation.

member_count

The number of members which a element has to represent its states.

min

Minimum value for each member of the elements.

max

Maximum value for each member of the elements.

step

The step of value for each member in the elements.

Returns:

Zero on success, otherwise a negative error code.

int
snd_ctl_add_integer64_elem_set(
    snd_ctl_t* ctl,
    snd_ctl_elem_info_t* info,
    unsigned int element_count,
    unsigned int member_count,
    long long min,
    long long max,
    long long step
)

Create and add some user-defined control elements of integer64 type.

This function creates some user elements with integer64 type. These elements are not controlled by device drivers in kernel. They can be operated by the same way as usual elements added by the device drivers.

The name field of id must be set with unique value to identify new control elements. After returning, all fields of id are filled. A element can be identified by the combination of name and index, or by numid.

All of members in the new elements are locked. The value of each member is initialized with the minimum value.

-EBUSY

A element with ID id already exists.

-EINVAL

Some arguments include invalid value; i.e. ID has no name, or the number of members is not between 1 to 127.

-ENOMEM

Out of memory, or there are too many user elements.

-ENXIO

This backend module does not support user elements of integer64 type.

-ENODEV

Device unplugged.

This function is added in version 1.1.2.

Parameters:

ctl

A handle of backend module for control interface.

info

Common iformation for a new element set, with ID of the first new element.

element_count

The number of elements added by this operation.

member_count

The number of members which a element has to represent its states.

min

Minimum value for each member of the elements.

max

Maximum value for each member of the elements.

step

The step of value for each member in the elements.

Returns:

Zero on success, otherwise a negative error code.

int
snd_ctl_add_boolean_elem_set(
    snd_ctl_t* ctl,
    snd_ctl_elem_info_t* info,
    unsigned int element_count,
    unsigned int member_count
)

Create and add some user-defined control elements of boolean type.

This function creates some user elements with boolean type. These elements are not controlled by device drivers in kernel. They can be operated by the same way as usual elements added by the device drivers.

The name field of id must be set with unique value to identify new control elements. After returning, all fields of id are filled. A element can be identified by the combination of name and index, or by numid.

All of members in the new elements are locked. The value of each member is initialized with false.

-EBUSY

A element with ID id already exists.

-EINVAL

Some parameters include invalid value; i.e. ID has no name, or the number of members is not between 1 to 127.

-ENOMEM

Out of memory, or there are too many user elements.

-ENXIO

This backend module does not support user elements of boolean type.

-ENODEV

Device unplugged.

This function is added in version 1.1.2.

Parameters:

ctl

A handle of backend module for control interface.

info

Common iformation for a new element set, with ID of the first new element.

element_count

The number of elements added by this operation.

member_count

The number of members which a element has to represent its states.

int
snd_ctl_add_enumerated_elem_set(
    snd_ctl_t* ctl,
    snd_ctl_elem_info_t* info,
    unsigned int element_count,
    unsigned int member_count,
    unsigned int items,
    const char*const labels[]
)

Create and add some user-defined control elements of enumerated type.

This function creates some user elements with enumerated type. These elements are not controlled by device drivers in kernel. They can be operated by the same way as usual elements added by the device drivers.

The name field of id must be set with unique value to identify new control elements. After returning, all fields of id are filled. A element can be identified by the combination of name and index, or by numid.

All of members in the new elements are locked. The value of each member is initialized with the first entry of labels.

-EBUSY

A control element with ID id already exists.

-EINVAL

Some arguments include invalid value; i.e. element_count is not between 1 to 127, or items is not at least one, or a string in labels is empty, or longer than 63 bytes, or total length of the labels requires more than 64 KiB storage.

-ENOMEM

Out of memory, or there are too many user control elements.

-ENXIO

This driver does not support (enumerated) user controls.

-ENODEV

Device unplugged.

This function is added in version 1.1.2.

Parameters:

ctl

A handle of backend module for control interface.

info

Common iformation for a new element set, with ID of the first new element.

element_count

The number of elements added by this operation.

member_count

The number of members which a element has to represent its states.

items

Range of possible values (0 … items - 1).

labels

An array containing items strings.

Returns:

Zero on success, otherwise a negative error code.

int
snd_ctl_add_bytes_elem_set(
    snd_ctl_t* ctl,
    snd_ctl_elem_info_t* info,
    unsigned int element_count,
    unsigned int member_count
)

Create and add some user-defined control elements of bytes type.

This function creates some user elements with bytes type. These elements are not controlled by device drivers in kernel. They can be operated by the same way as usual elements added by the device drivers.

The name field of id must be set with unique value to identify new control elements. After returning, all fields of id are filled. A element can be identified by the combination of name and index, or by numid.

All of members in the new elements are locked. The value of each member is initialized with the minimum value.

-EBUSY

A element with ID id already exists.

-EINVAL

Some arguments include invalid value; i.e. ID has no name, or the number of members is not between 1 to 511.

-ENOMEM

Out of memory, or there are too many user elements.

-ENXIO

This backend module does not support user elements of bytes type.

-ENODEV

Device unplugged.

This function is added in version 1.1.2.

Parameters:

ctl

A handle of backend module for control interface.

info

Common iformation for a new element set, with ID of the first new element.

element_count

The number of elements added by this operation.

member_count

The number of members which a element has to represent its states.

Returns:

Zero on success, otherwise a negative error code.

int
snd_ctl_elem_add_integer(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    unsigned int count,
    long imin,
    long imax,
    long istep
)

Create and add an user-defined control element of integer type.

This is a wrapper function to snd_ctl_add_integer_elem_set() for a control element. This doesn’t fill the id data with full information, thus it’s recommended to use snd_ctl_add_integer_elem_set(), instead.

int
snd_ctl_elem_add_integer64(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    unsigned int count,
    long long imin,
    long long imax,
    long long istep
)

Create and add an user-defined control element of integer64 type.

This is a wrapper function to snd_ctl_add_integer64_elem_set() for a single control element. This doesn’t fill the id data with full information, thus it’s recommended to use snd_ctl_add_integer64_elem_set(), instead.

int
snd_ctl_elem_add_boolean(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    unsigned int count
)

Create and add an user-defined control element of boolean type.

This is a wrapper function to snd_ctl_add_boolean_elem_set() for a single control element. This doesn’t fill the id data with full information, thus it’s recommended to use snd_ctl_add_boolean_elem_set(), instead.

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[]
)

Create and add a user-defined control element of enumerated type.

This is a wrapper function to snd_ctl_add_enumerated_elem_set() for a single control element. This doesn’t fill the id data with full information, thus it’s recommended to use snd_ctl_add_enumerated_elem_set(), instead.

This function is added in version 1.0.25.

int
snd_ctl_elem_add_iec958(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id
)

Create and add a user-defined control element of IEC958 type.

This function creates an user element with IEC958 type. This element is not controlled by device drivers in kernel. It can be operated by the same way as usual elements added by the device drivers.

The name field of id must be set with unique value to identify a new control element. After returning, all fields of id are filled. A element can be identified by the combination of name and index, or by numid.

A member in the new element is locked and filled with zero.

-EBUSY

A control element with ID id already exists.

-EINVAL

ID has no name.

-ENOMEM

Out of memory, or there are too many user elements.

-ENXIO

This backend module does not support user elements of IEC958 type.

-ENODEV

Device unplugged.

Parameters:

ctl

A handle of backend module for control interface.

id

ID of the new control element.

int
snd_ctl_elem_remove(
    snd_ctl_t* ctl,
    snd_ctl_elem_id_t* id
)

Remove an user CTL element.

Parameters:

ctl

CTL handle

id

CTL element identification

Returns:

0 on success otherwise a negative error code

size_t
snd_ctl_elem_value_sizeof(void)

Get size of data structure for an element.

Returns:

Size in bytes.

int
snd_ctl_elem_value_malloc(snd_ctl_elem_value_t** ptr)

Allocate an invalid snd_ctl_elem_value_t using standard malloc(3).

Parameters:

ptr

Returned pointer for data of an element.

Returns:

0 on success otherwise negative error code.

void
snd_ctl_elem_value_free(snd_ctl_elem_value_t* obj)

Frees a previously allocated data of an element.

Parameters:

obj

Data of an element.

void
snd_ctl_elem_value_clear(snd_ctl_elem_value_t* obj)

Clear given data of an element.

Parameters:

obj

Data of an element.

void
snd_ctl_elem_value_copy(
    snd_ctl_elem_value_t* dst,
    const snd_ctl_elem_value_t* src
)

Copy two data of elements.

Parameters:

dst

Pointer to destination.

src

Pointer to source.

int
snd_ctl_elem_value_compare(
    snd_ctl_elem_value_t* left,
    const snd_ctl_elem_value_t* right
)

Compare one data of an element to the other.

Parameters:

left

Pointer to first data.

right

Pointer to second data.

Returns:

0 on match, less than or greater than otherwise, see memcmp(3).

void
snd_ctl_elem_value_get_id(
    const snd_ctl_elem_value_t* obj,
    snd_ctl_elem_id_t* ptr
)

Get element identifier from given data of an element.

Parameters:

obj

Data of an element.

ptr

Pointer for element identifier.

unsigned int
snd_ctl_elem_value_get_numid(const snd_ctl_elem_value_t* obj)

Get element numeric identifier from given data of an element.

Parameters:

obj

Data of an element.

Returns:

Element numeric identifier.

snd_ctl_elem_iface_t
snd_ctl_elem_value_get_interface(const snd_ctl_elem_value_t* obj)

Get interface part of element identifier from given data of an element.

Parameters:

obj

Data of an element.

Returns:

Interface part of element identifier.

unsigned int
snd_ctl_elem_value_get_device(const snd_ctl_elem_value_t* obj)

Get device part of element identifier from given data of an element.

Parameters:

obj

Data of an element.

Returns:

Device part of element identifier.

unsigned int
snd_ctl_elem_value_get_subdevice(const snd_ctl_elem_value_t* obj)

Get subdevice part of element identifier from given data of an element.

Parameters:

obj

Data of an element.

Returns:

Subdevice part of element identifier.

const char*
snd_ctl_elem_value_get_name(const snd_ctl_elem_value_t* obj)

Get name part of element identifier from given data of an element.

Parameters:

obj

Data of an element.

Returns:

Name part of element identifier.

unsigned int
snd_ctl_elem_value_get_index(const snd_ctl_elem_value_t* obj)

Get index part of element identifier from given data of an element.

Parameters:

obj

Data of an element.

Returns:

Index part of element identifier.

void
snd_ctl_elem_value_set_id(
    snd_ctl_elem_value_t* obj,
    const snd_ctl_elem_id_t* ptr
)

Set element identifier to given data of an element.

Parameters:

obj

Data of an element.

ptr

Pointer to an element identifier.

void
snd_ctl_elem_value_set_numid(
    snd_ctl_elem_value_t* obj,
    unsigned int val
)

Set numeric identifier to given data of an element.

Parameters:

obj

Data of an element.

val

Value for numeric identifier.

void
snd_ctl_elem_value_set_interface(
    snd_ctl_elem_value_t* obj,
    snd_ctl_elem_iface_t val
)

Set interface part of element identifier to given data of an element.

Parameters:

obj

Data of an element.

val

Value for interface part of element identifier.

void
snd_ctl_elem_value_set_device(
    snd_ctl_elem_value_t* obj,
    unsigned int val
)

Set device part of element identifier to given data of an element.

Parameters:

obj

Data of an element.

val

Value for device part of element identifier.

void
snd_ctl_elem_value_set_subdevice(
    snd_ctl_elem_value_t* obj,
    unsigned int val
)

Set subdevice part of element identifier to given data of an element.

Parameters:

obj

Data of an element.

val

Value for subdevice part of element identifier.

void
snd_ctl_elem_value_set_name(
    snd_ctl_elem_value_t* obj,
    const char* val
)

Set name part of element identifier to given data of an element.

Parameters:

obj

Data of an element.

val

Value for name part of element identifier,

void
snd_ctl_elem_value_set_index(
    snd_ctl_elem_value_t* obj,
    unsigned int val
)

Set index part of element identifier to given data of an element.

Parameters:

obj

Data of an element.

val

Value for index part of element identifier.

int
snd_ctl_elem_value_get_boolean(
    const snd_ctl_elem_value_t* obj,
    unsigned int idx
)

Get value of a specified member from given data as an element of boolean type.

Parameters:

obj

Data of an element.

idx

Index of member in the element.

Returns:

Value for the member.

long
snd_ctl_elem_value_get_integer(
    const snd_ctl_elem_value_t* obj,
    unsigned int idx
)

Get value of a specified member from given data as an element of integer type.

Parameters:

obj

Data of an element.

idx

Index of member in the element.

Returns:

Value for the member.

long long
snd_ctl_elem_value_get_integer64(
    const snd_ctl_elem_value_t* obj,
    unsigned int idx
)

Get value of a specified member from given data as an element of integer64 type.

Parameters:

obj

Data of an element.

idx

Index of member in the element.

Returns:

Value for the member.

unsigned int
snd_ctl_elem_value_get_enumerated(
    const snd_ctl_elem_value_t* obj,
    unsigned int idx
)

Get value of a specified member from given data as an element of enumerated type.

Parameters:

obj

Data of an element.

idx

Index of member in the element.

Returns:

Value for the member. This is an index of name set in the element.

unsigned char
snd_ctl_elem_value_get_byte(
    const snd_ctl_elem_value_t* obj,
    unsigned int idx
)

Get value of a specified member from given data as an element of bytes type.

Parameters:

obj

Data of an element.

idx

Index of member in the element.

Returns:

Value for the member.

void
snd_ctl_elem_value_set_boolean(
    snd_ctl_elem_value_t* obj,
    unsigned int idx,
    long val
)

Set value of a specified member to given data as an element of boolean type.

Parameters:

obj

Data of an element.

idx

Index of member in the element.

val

Value for the member.

void
snd_ctl_elem_value_set_integer(
    snd_ctl_elem_value_t* obj,
    unsigned int idx,
    long val
)

Set value of a specified member to given data as an element of integer type.

Parameters:

obj

Data of an element.

idx

Index of member in the element.

val

Value for the member.

void
snd_ctl_elem_value_set_integer64(
    snd_ctl_elem_value_t* obj,
    unsigned int idx,
    long long val
)

Set value of a specified member to given data as an element of integer64 type.

Parameters:

obj

Data of an element.

idx

Index of member in the element.

val

Value for the member.

void
snd_ctl_elem_value_set_enumerated(
    snd_ctl_elem_value_t* obj,
    unsigned int idx,
    unsigned int val
)

Set value of a specified member to given data as an element of enumerated type.

Parameters:

obj

Data of an element.

idx

Index of member in the element.

val

Value for the member.

void
snd_ctl_elem_value_set_byte(
    snd_ctl_elem_value_t* obj,
    unsigned int idx,
    unsigned char val
)

Set value for a specified member to given data as an element of byte type.

Parameters:

obj

Data of an element.

idx

Index of member in the element.

val

Value for the member.

void
snd_ctl_elem_set_bytes(
    snd_ctl_elem_value_t* obj,
    void* data,
    size_t size
)

Set values to given data as an element of bytes type.

Parameters:

obj

Data of an element.

data

Pointer for byte array.

size

The number of bytes included in the memory block.

const void*
snd_ctl_elem_value_get_bytes(const snd_ctl_elem_value_t* obj)

Get memory block from given data as an element of bytes type.

Parameters:

obj

Data of an element.

Returns:

Pointer for byte array.

void
snd_ctl_elem_value_get_iec958(
    const snd_ctl_elem_value_t* obj,
    snd_aes_iec958_t* ptr
)

Get value from given data to given pointer as an element of IEC958 type.

Parameters:

obj

Data of an element.

ptr

Pointer to IEC958 data.

void
snd_ctl_elem_value_set_iec958(
    snd_ctl_elem_value_t* obj,
    const snd_aes_iec958_t* ptr
)

Set value from given pointer to given data as an element of IEC958 type.

Parameters:

obj

Data of an element.

ptr

Pointer to IEC958 data.

int
snd_tlv_parse_dB_info(
    unsigned int* tlv,
    unsigned int tlv_size,
    unsigned int** db_tlvp
)

Parse TLV stream and retrieve dB information.

This function parses the given TLV source and stores the TLV start point if the TLV information regarding dB conversion is found. The stored TLV pointer can be passed to the convesion functions snd_tlv_convert_to_dB(), snd_tlv_convert_from_dB() and snd_tlv_get_dB_range().

Parameters:

tlv

the TLV source

tlv_size

the byte size of TLV source

db_tlvp

the pointer stored the dB TLV information

Returns:

the byte size of dB TLV information if found in the given TLV source, or a negative error code.

int
snd_tlv_get_dB_range(
    unsigned int* tlv,
    long rangemin,
    long rangemax,
    long* min,
    long* max
)

Get the dB min/max values.

Parameters:

tlv

the TLV source returned by snd_tlv_parse_dB_info()

rangemin

the minimum value of the raw volume

rangemax

the maximum value of the raw volume

min

the pointer to store the minimum dB value (in 0.01dB unit)

max

the pointer to store the maximum dB value (in 0.01dB unit)

Returns:

0 if successful, or a negative error code

int
snd_tlv_convert_to_dB(
    unsigned int* tlv,
    long rangemin,
    long rangemax,
    long volume,
    long* db_gain
)

Convert the given raw volume value to a dB gain.

Parameters:

tlv

the TLV source returned by snd_tlv_parse_dB_info()

rangemin

the minimum value of the raw volume

rangemax

the maximum value of the raw volume

volume

the raw volume value to convert

db_gain

the dB gain (in 0.01dB unit)

Returns:

0 if successful, or a negative error code

int
snd_tlv_convert_from_dB(
    unsigned int* tlv,
    long rangemin,
    long rangemax,
    long db_gain,
    long* value,
    int xdir
)

Convert from dB gain to the corresponding raw value.

Parameters:

tlv

the TLV source returned by snd_tlv_parse_dB_info()

rangemin

the minimum value of the raw volume

rangemax

the maximum value of the raw volume

db_gain

the dB gain to convert (in 0.01dB unit)

value

the pointer to store the converted raw volume value

xdir

the direction for round-up. The value is round up when this is positive.

Returns:

0 if successful, or a negative error code

int
snd_ctl_get_dB_range(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    long* min,
    long* max
)

Get the dB min/max values on the given control element.

Parameters:

ctl

the control handler

id

the element id

min

the pointer to store the minimum dB value (in 0.01dB unit)

max

the pointer to store the maximum dB value (in 0.01dB unit)

Returns:

0 if successful, or a negative error code

int
snd_ctl_convert_to_dB(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    long volume,
    long* db_gain
)

Convert the volume value to dB on the given control element.

Parameters:

ctl

the control handler

id

the element id

volume

the raw volume value to convert

db_gain

the dB gain (in 0.01dB unit)

Returns:

0 if successful, or a negative error code

int
snd_ctl_convert_from_dB(
    snd_ctl_t* ctl,
    const snd_ctl_elem_id_t* id,
    long db_gain,
    long* value,
    int xdir
)

Convert from dB gain to the raw volume value on the given control element.

Parameters:

ctl

the control handler

id

the element id

db_gain

the dB gain to convert (in 0.01dB unit)

value

the pointer to store the converted raw volume value

xdir

the direction for round-up. The value is round up when this is positive.

Returns:

0 if successful, or a negative error code

Macros

#define SND_CONTROL_DLSYM_VERSION

dlsym version for interface entry callback

#define SND_CTL_ASYNC

Async notification (flag for open mode)

#define SND_CTL_EVENT_MASK_ADD

Element has been added

#define SND_CTL_EVENT_MASK_INFO

Element info has been changed

#define SND_CTL_EVENT_MASK_REMOVE

Element has been removed (Warning: test this first and if set don’t test the other masks)

#define SND_CTL_EVENT_MASK_TLV

Element’s TLV value has been changed

#define SND_CTL_EVENT_MASK_VALUE

Element value has been changed

#define SND_CTL_NAME_CAPTURE

CTL name helper

#define SND_CTL_NAME_IEC958( \
    expl, \
    direction, \
    what \
)

Element name for IEC958 (S/PDIF)

#define SND_CTL_NAME_IEC958_CON_MASK

CTL name helper

#define SND_CTL_NAME_IEC958_DEFAULT

CTL name helper

#define SND_CTL_NAME_IEC958_MASK

CTL name helper

#define SND_CTL_NAME_IEC958_NONE

CTL name helper

#define SND_CTL_NAME_IEC958_PCM_STREAM

CTL name helper

#define SND_CTL_NAME_IEC958_PRO_MASK

CTL name helper

#define SND_CTL_NAME_IEC958_SWITCH

CTL name helper

#define SND_CTL_NAME_IEC958_VOLUME

CTL name helper

#define SND_CTL_NAME_NONE

CTL name helper

#define SND_CTL_NAME_PLAYBACK

CTL name helper

#define SND_CTL_NONBLOCK

Non blocking mode (flag for open mode)

#define SND_CTL_POWER_D0

ACPI/PCI Power State D0

#define SND_CTL_POWER_D1

ACPI/PCI Power State D1

#define SND_CTL_POWER_D2

ACPI/PCI Power State D2

#define SND_CTL_POWER_D3

ACPI/PCI Power State D3

#define SND_CTL_POWER_D3cold

ACPI/PCI Power State D3cold

#define SND_CTL_POWER_D3hot

ACPI/PCI Power State D3hot

#define SND_CTL_POWER_MASK

Mask for the major Power State identifier

#define SND_CTL_READONLY

Read only (flag for open mode)

#define SND_CTL_TLVT_CHMAP_FIXED

TLV type - fixed channel map positions

#define SND_CTL_TLVT_CHMAP_PAIRED

TLV type - pair-wise swappable channel map positions

#define SND_CTL_TLVT_CHMAP_VAR

TLV type - freely swappable channel map positions

#define SND_CTL_TLVT_CONTAINER

TLV type - Container

#define SND_CTL_TLVT_DB_LINEAR

TLV type - linear volume

#define SND_CTL_TLVT_DB_MINMAX

TLV type - dB scale specified by min/max values

#define SND_CTL_TLVT_DB_MINMAX_MUTE

TLV type - dB scale specified by min/max values (with mute)

#define SND_CTL_TLVT_DB_RANGE

TLV type - dB range container

#define SND_CTL_TLVT_DB_SCALE

TLV type - basic dB scale

#define SND_CTL_TLV_DB_GAIN_MUTE

Mute state

#define SND_SCTL_NOFREE

Don’t destroy the ctl handle when close

#define snd_ctl_card_info_alloca(ptr)

allocate an invalid snd_ctl_card_info_t using standard alloca

Parameters:

ptr

returned pointer

#define snd_ctl_elem_id_alloca(ptr)

allocate an invalid snd_ctl_elem_id_t using standard alloca

Parameters:

ptr

returned pointer

#define snd_ctl_elem_info_alloca(ptr)

allocate an invalid snd_ctl_elem_info_t using standard alloca

Parameters:

ptr

returned pointer

#define snd_ctl_elem_list_alloca(ptr)

allocate an invalid snd_ctl_elem_list_t using standard alloca

Parameters:

ptr

returned pointer

#define snd_ctl_elem_value_alloca(ptr)

allocate an invalid snd_ctl_elem_value_t using standard alloca

Parameters:

ptr

returned pointer

#define snd_ctl_event_alloca(ptr)

allocate an invalid snd_ctl_event_t using standard alloca

Parameters:

ptr

returned pointer