High level Control Interface

Overview

The high level control interface. More…

// typedefs

typedef struct _snd_hctl_elem snd_hctl_elem_t;
typedef struct _snd_hctl snd_hctl_t;

typedef int (*snd_hctl_compare_t)(
    const snd_hctl_elem_t *e1,
    const snd_hctl_elem_t *e2
    );

typedef int (*snd_hctl_callback_t)(
    snd_hctl_t *hctl,
    unsigned int mask,
    snd_hctl_elem_t *elem
    );

typedef int (*snd_hctl_elem_callback_t)(
    snd_hctl_elem_t *elem,
    unsigned int mask
    );

// global functions

int
snd_hctl_compare_fast(
    const snd_hctl_elem_t* c1,
    const snd_hctl_elem_t* c2
);

int
snd_hctl_open(
    snd_hctl_t** hctl,
    const char* name,
    int mode
);

int
snd_hctl_open_ctl(
    snd_hctl_t** hctlp,
    snd_ctl_t* ctl
);

int
snd_hctl_close(snd_hctl_t* hctl);

int
snd_hctl_nonblock(
    snd_hctl_t* hctl,
    int nonblock
);

static
__inline__ int
snd_hctl_abort(snd_hctl_t* hctl);

int
snd_hctl_poll_descriptors_count(snd_hctl_t* hctl);

int
snd_hctl_poll_descriptors(
    snd_hctl_t* hctl,
    struct pollfd* pfds,
    unsigned int space
);

int
snd_hctl_poll_descriptors_revents(
    snd_hctl_t* ctl,
    struct pollfd* pfds,
    unsigned int nfds,
    unsigned short* revents
);

unsigned int
snd_hctl_get_count(snd_hctl_t* hctl);

int
snd_hctl_set_compare(
    snd_hctl_t* hctl,
    snd_hctl_compare_t hsort
);

snd_hctl_elem_t*
snd_hctl_first_elem(snd_hctl_t* hctl);

snd_hctl_elem_t*
snd_hctl_last_elem(snd_hctl_t* hctl);

snd_hctl_elem_t*
snd_hctl_find_elem(
    snd_hctl_t* hctl,
    const snd_ctl_elem_id_t* id
);

void
snd_hctl_set_callback(
    snd_hctl_t* hctl,
    snd_hctl_callback_t callback
);

void
snd_hctl_set_callback_private(
    snd_hctl_t* hctl,
    void* data
);

void*
snd_hctl_get_callback_private(snd_hctl_t* hctl);

int
snd_hctl_load(snd_hctl_t* hctl);

int
snd_hctl_free(snd_hctl_t* hctl);

int
snd_hctl_handle_events(snd_hctl_t* hctl);

const char*
snd_hctl_name(snd_hctl_t* hctl);

int
snd_hctl_wait(
    snd_hctl_t* hctl,
    int timeout
);

snd_ctl_t*
snd_hctl_ctl(snd_hctl_t* hctl);

snd_hctl_elem_t*
snd_hctl_elem_next(snd_hctl_elem_t* elem);

snd_hctl_elem_t*
snd_hctl_elem_prev(snd_hctl_elem_t* elem);

int
snd_hctl_elem_info(
    snd_hctl_elem_t* elem,
    snd_ctl_elem_info_t* info
);

int
snd_hctl_elem_read(
    snd_hctl_elem_t* elem,
    snd_ctl_elem_value_t* value
);

int
snd_hctl_elem_write(
    snd_hctl_elem_t* elem,
    snd_ctl_elem_value_t* value
);

int
snd_hctl_elem_tlv_read(
    snd_hctl_elem_t* elem,
    unsigned int* tlv,
    unsigned int tlv_size
);

int
snd_hctl_elem_tlv_write(
    snd_hctl_elem_t* elem,
    const unsigned int* tlv
);

int
snd_hctl_elem_tlv_command(
    snd_hctl_elem_t* elem,
    const unsigned int* tlv
);

snd_hctl_t*
snd_hctl_elem_get_hctl(snd_hctl_elem_t* elem);

void
snd_hctl_elem_get_id(
    const snd_hctl_elem_t* obj,
    snd_ctl_elem_id_t* ptr
);

unsigned int
snd_hctl_elem_get_numid(const snd_hctl_elem_t* obj);

snd_ctl_elem_iface_t
snd_hctl_elem_get_interface(const snd_hctl_elem_t* obj);

unsigned int
snd_hctl_elem_get_device(const snd_hctl_elem_t* obj);

unsigned int
snd_hctl_elem_get_subdevice(const snd_hctl_elem_t* obj);

const char*
snd_hctl_elem_get_name(const snd_hctl_elem_t* obj);

unsigned int
snd_hctl_elem_get_index(const snd_hctl_elem_t* obj);

void
snd_hctl_elem_set_callback(
    snd_hctl_elem_t* obj,
    snd_hctl_elem_callback_t val
);

void*
snd_hctl_elem_get_callback_private(const snd_hctl_elem_t* obj);

void
snd_hctl_elem_set_callback_private(
    snd_hctl_elem_t* obj,
    void* val
);

Detailed Documentation

The high level control interface. See High level control interface page for more details.

Typedefs

typedef struct _snd_hctl_elem snd_hctl_elem_t

HCTL element handle

typedef struct _snd_hctl snd_hctl_t

HCTL handle

typedef int (*snd_hctl_compare_t)(
    const snd_hctl_elem_t *e1,
    const snd_hctl_elem_t *e2
    )

Compare function for sorting HCTL elements.

Parameters:

e1

First element

e2

Second element

Returns:

-1 if e1 < e2, 0 if e1 == e2, 1 if e1 > e2

typedef int (*snd_hctl_callback_t)(
    snd_hctl_t *hctl,
    unsigned int mask,
    snd_hctl_elem_t *elem
    )

HCTL callback function.

Parameters:

hctl

HCTL handle

mask

event mask

elem

related HCTL element (if any)

Returns:

0 on success otherwise a negative error code

typedef int (*snd_hctl_elem_callback_t)(
    snd_hctl_elem_t *elem,
    unsigned int mask
    )

HCTL element callback function.

Parameters:

elem

HCTL element

mask

event mask

Returns:

0 on success otherwise a negative error code

Global Functions

int
snd_hctl_compare_fast(
    const snd_hctl_elem_t* c1,
    const snd_hctl_elem_t* c2
)

A “don’t care” fast compare functions that may be used with snd_hctl_set_compare.

Parameters:

c1

First HCTL element

c2

Second HCTL element

Returns:

-1 if c1 < c2, 0 if c1 == c2, 1 if c1 > c2

int
snd_hctl_open(
    snd_hctl_t** hctl,
    const char* name,
    int mode
)

Opens an HCTL.

Parameters:

hctlp

Returned HCTL handle

name

ASCII identifier of the underlying CTL handle

mode

Open mode (see SND_CTL_NONBLOCK, SND_CTL_ASYNC)

Returns:

0 on success otherwise a negative error code

int
snd_hctl_open_ctl(
    snd_hctl_t** hctlp,
    snd_ctl_t* ctl
)

Opens an HCTL.

Parameters:

hctlp

Returned HCTL handle

ctl

underlying CTL handle

Returns:

0 on success otherwise a negative error code

int
snd_hctl_close(snd_hctl_t* hctl)

close HCTL handle

Closes the specified HCTL handle and frees all associated resources.

Parameters:

hctl

HCTL handle

Returns:

0 on success otherwise a negative error code

int
snd_hctl_nonblock(
    snd_hctl_t* hctl,
    int nonblock
)

set nonblock mode

Parameters:

hctl

HCTL handle

nonblock

0 = block, 1 = nonblock mode

Returns:

0 on success otherwise a negative error code

int
snd_hctl_poll_descriptors_count(snd_hctl_t* hctl)

get count of poll descriptors for HCTL handle

Parameters:

hctl

HCTL handle

Returns:

count of poll descriptors

int
snd_hctl_poll_descriptors(
    snd_hctl_t* hctl,
    struct pollfd* pfds,
    unsigned int space
)

get poll descriptors

Parameters:

hctl

HCTL handle

pfds

array of poll descriptors

space

space in the poll descriptor array

Returns:

count of filled descriptors

int
snd_hctl_poll_descriptors_revents(
    snd_hctl_t* ctl,
    struct pollfd* pfds,
    unsigned int nfds,
    unsigned short* revents
)

get returned events from poll descriptors

Parameters:

hctl

HCTL handle

pfds

array of poll descriptors

nfds

count of poll descriptors

revents

returned events

Returns:

zero if success, otherwise a negative error code

unsigned int
snd_hctl_get_count(snd_hctl_t* hctl)

Get number of loaded elements for an HCTL.

Parameters:

hctl

HCTL handle

Returns:

elements count

int
snd_hctl_set_compare(
    snd_hctl_t* hctl,
    snd_hctl_compare_t hsort
)

Change HCTL compare function and reorder elements.

Parameters:

hctl

HCTL handle

compare

Element compare function

Returns:

0 on success otherwise a negative error code

snd_hctl_elem_t*
snd_hctl_first_elem(snd_hctl_t* hctl)

get first element for an HCTL

Parameters:

hctl

HCTL handle

Returns:

pointer to first element

snd_hctl_elem_t*
snd_hctl_last_elem(snd_hctl_t* hctl)

get last element for an HCTL

Parameters:

hctl

HCTL handle

Returns:

pointer to last element

snd_hctl_elem_t*
snd_hctl_find_elem(
    snd_hctl_t* hctl,
    const snd_ctl_elem_id_t* id
)

Search an HCTL element.

Parameters:

hctl

HCTL handle

id

Element identifier

Returns:

pointer to found HCTL element or NULL if it does not exists

void
snd_hctl_set_callback(
    snd_hctl_t* hctl,
    snd_hctl_callback_t callback
)

Set callback function for an HCTL.

Parameters:

hctl

HCTL handle

callback

callback function

void
snd_hctl_set_callback_private(
    snd_hctl_t* hctl,
    void* data
)

Set callback private value for an HCTL.

Parameters:

hctl

HCTL handle

callback_private

callback private value

void*
snd_hctl_get_callback_private(snd_hctl_t* hctl)

Get callback private value for an HCTL.

Parameters:

hctl

HCTL handle

Returns:

callback private value

int
snd_hctl_load(snd_hctl_t* hctl)

Load an HCTL with all elements and sort them.

Parameters:

hctl

HCTL handle

Returns:

0 on success otherwise a negative error code

int
snd_hctl_free(snd_hctl_t* hctl)

free HCTL loaded elements

Parameters:

hctl

HCTL handle

Returns:

0 on success otherwise a negative error code

int
snd_hctl_handle_events(snd_hctl_t* hctl)

Handle pending HCTL events invoking callbacks.

Parameters:

hctl

HCTL handle

Returns:

0 otherwise a negative error code on failure

const char*
snd_hctl_name(snd_hctl_t* hctl)

get identifier of HCTL handle

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

Parameters:

hctl

HCTL handle

Returns:

ascii identifier of HCTL handle

int
snd_hctl_wait(
    snd_hctl_t* hctl,
    int timeout
)

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

Parameters:

hctl

HCTL handle

timeout

maximum time in milliseconds to wait

0

timeout occurred

1

an event is pending

Returns:

a positive value on success otherwise a negative error code

snd_ctl_t*
snd_hctl_ctl(snd_hctl_t* hctl)

Get a ctl handle associated to the given hctl handle.

Parameters:

hctl

HCTL handle

Returns:

a ctl handle otherwise NULL

snd_hctl_elem_t*
snd_hctl_elem_next(snd_hctl_elem_t* elem)

get next HCTL element

Parameters:

elem

HCTL element

Returns:

pointer to next element

snd_hctl_elem_t*
snd_hctl_elem_prev(snd_hctl_elem_t* elem)

get previous HCTL element

Parameters:

elem

HCTL element

Returns:

pointer to previous element

int
snd_hctl_elem_info(
    snd_hctl_elem_t* elem,
    snd_ctl_elem_info_t* info
)

Get information for an HCTL element.

Parameters:

elem

HCTL element

info

HCTL element information

Returns:

0 otherwise a negative error code on failure

int
snd_hctl_elem_read(
    snd_hctl_elem_t* elem,
    snd_ctl_elem_value_t* value
)

Get value for an HCTL element.

Parameters:

elem

HCTL element

value

HCTL element value

Returns:

0 otherwise a negative error code on failure

int
snd_hctl_elem_write(
    snd_hctl_elem_t* elem,
    snd_ctl_elem_value_t* value
)

Set value for an HCTL element.

Parameters:

elem

HCTL element

value

HCTL element value

0

on success

>1

on success when value was changed

<0

a negative error code on failure

int
snd_hctl_elem_tlv_read(
    snd_hctl_elem_t* elem,
    unsigned int* tlv,
    unsigned int tlv_size
)

Get TLV value for an HCTL element.

Parameters:

elem

HCTL element

tlv

TLV array for value

tlv_size

size of TLV array in bytes

Returns:

0 otherwise a negative error code on failure

int
snd_hctl_elem_tlv_write(
    snd_hctl_elem_t* elem,
    const unsigned int* tlv
)

Set TLV value for an HCTL element.

Parameters:

elem

HCTL element

tlv

TLV array for value

0

on success

>1

on success when value was changed

<0

a negative error code on failure

int
snd_hctl_elem_tlv_command(
    snd_hctl_elem_t* elem,
    const unsigned int* tlv
)

Set TLV value for an HCTL element.

Parameters:

elem

HCTL element

tlv

TLV array for value

0

on success

>1

on success when value was changed

<0

a negative error code on failure

snd_hctl_t*
snd_hctl_elem_get_hctl(snd_hctl_elem_t* elem)

Get HCTL handle for an HCTL element.

Parameters:

elem

HCTL element

Returns:

HCTL handle

void
snd_hctl_elem_get_id(
    const snd_hctl_elem_t* obj,
    snd_ctl_elem_id_t* ptr
)

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

Parameters:

obj

CTL element id/value

ptr

Pointer to returned CTL element identifier

unsigned int
snd_hctl_elem_get_numid(const snd_hctl_elem_t* obj)

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

Parameters:

obj

CTL element id/value

Returns:

element numeric identifier

snd_ctl_elem_iface_t
snd_hctl_elem_get_interface(const snd_hctl_elem_t* obj)

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

Parameters:

obj

CTL element id/value

Returns:

interface part of element identifier

unsigned int
snd_hctl_elem_get_device(const snd_hctl_elem_t* obj)

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

Parameters:

obj

CTL element id/value

Returns:

device part of element identifier

unsigned int
snd_hctl_elem_get_subdevice(const snd_hctl_elem_t* obj)

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

Parameters:

obj

CTL element id/value

Returns:

subdevice part of element identifier

const char*
snd_hctl_elem_get_name(const snd_hctl_elem_t* obj)

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

Parameters:

obj

CTL element id/value

Returns:

name part of element identifier

unsigned int
snd_hctl_elem_get_index(const snd_hctl_elem_t* obj)

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

Parameters:

obj

CTL element id/value

Returns:

index part of element identifier

void
snd_hctl_elem_set_callback(
    snd_hctl_elem_t* obj,
    snd_hctl_elem_callback_t val
)

Set callback function for an HCTL element.

Parameters:

obj

HCTL element

val

callback function

void*
snd_hctl_elem_get_callback_private(const snd_hctl_elem_t* obj)

Get callback private value for an HCTL element.

Parameters:

obj

HCTL element

Returns:

callback private value

void
snd_hctl_elem_set_callback_private(
    snd_hctl_elem_t* obj,
    void* val
)

Set callback private value for an HCTL element.

Parameters:

obj

HCTL element

val

callback private value