diff options
author | Jaroslav Kysela <perex@perex.cz> | 2003-03-04 20:01:06 +0000 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2003-03-04 20:01:06 +0000 |
commit | 9c084c4ba6a4cda677cfe1213b51cc1e4afeb3ed (patch) | |
tree | d4a3bede326b80fd80c9fc1335dd7f7ffe4b59c1 /src/timer | |
parent | 6a949ee804670d9d3de6f1f8aaaa4e247ad8e90c (diff) | |
download | alsa-lib-9c084c4ba6a4cda677cfe1213b51cc1e4afeb3ed.tar.gz |
Updated to new timer API
Diffstat (limited to 'src/timer')
-rw-r--r-- | src/timer/timer.c | 89 | ||||
-rw-r--r-- | src/timer/timer_hw.c | 9 | ||||
-rw-r--r-- | src/timer/timer_local.h | 3 | ||||
-rw-r--r-- | src/timer/timer_query.c | 50 | ||||
-rw-r--r-- | src/timer/timer_query_hw.c | 30 |
5 files changed, 171 insertions, 10 deletions
diff --git a/src/timer/timer.c b/src/timer/timer.c index 10e5ec67..8b366e66 100644 --- a/src/timer/timer.c +++ b/src/timer/timer.c @@ -466,16 +466,6 @@ const char *snd_timer_info_get_name(snd_timer_info_t * info) return info->name; } -/** - * \brief get maximum timer ticks - * \param info pointer to #snd_timer_info_t structure - * \return maximum timer ticks - */ -long snd_timer_info_get_ticks(snd_timer_info_t * info) -{ - assert(info); - return info->ticks; -} /** * \brief get timer resolution in us @@ -576,6 +566,40 @@ int snd_timer_params_get_auto_start(snd_timer_params_t * params) } /** + * \brief set timer exclusive use + * \param params pointer to #snd_timer_params_t structure + */ +#ifndef DOXYGEN +void INTERNAL(snd_timer_params_set_exclusive)(snd_timer_params_t * params, int exclusive) +#else +void snd_timer_params_set_exclusive(snd_timer_params_t * params, int exclusive) +#endif +{ + assert(params); + if (exclusive) + params->flags |= SNDRV_TIMER_PSFLG_EXCLUSIVE; + else + params->flags &= ~SNDRV_TIMER_PSFLG_EXCLUSIVE; +} +default_symbol_version(__snd_timer_params_set_exclusive, snd_timer_params_set_exclusive, ALSA_0.9.0); + +/** + * \brief determine if timer has exclusive flag + * \param params pointer to #snd_timer_params_t structure + * \return nonzero if timer has exclusive flag + */ +#ifndef DOXYGEN +int INTERNAL(snd_timer_params_get_exclusive)(snd_timer_params_t * params) +#else +int snd_timer_params_get_exclusive(snd_timer_params_t * params) +#endif +{ + assert(params); + return params->flags & SNDRV_TIMER_PSFLG_EXCLUSIVE ? 1 : 0; +} +default_symbol_version(__snd_timer_params_get_exclusive, snd_timer_params_get_exclusive, ALSA_0.9.0); + +/** * \brief set timer ticks * \param params pointer to #snd_timer_params_t structure */ @@ -618,6 +642,37 @@ long snd_timer_params_get_queue_size(snd_timer_params_t * params) } /** + * \brief set timer event filter + * \param params pointer to #snd_timer_params_t structure + */ +#ifndef DOXYGEN +void INTERNAL(snd_timer_params_set_filter)(snd_timer_params_t * params, unsigned int filter) +#else +void snd_timer_params_set_filter(snd_timer_params_t * params, unsigned int filter) +#endif +{ + assert(params); + params->filter = filter; +} +default_symbol_version(__snd_timer_params_set_filter, snd_timer_params_set_filter, ALSA_0.9.0); + +/** + * \brief get timer event filter + * \param params pointer to #snd_timer_params_t structure + * \return timer event filter + */ +#ifndef DOXYGEN +unsigned int INTERNAL(snd_timer_params_get_filter)(snd_timer_params_t * params) +#else +unsigned int snd_timer_params_get_filter(snd_timer_params_t * params) +#endif +{ + assert(params); + return params->filter; +} +default_symbol_version(__snd_timer_params_get_filter, snd_timer_params_get_filter, ALSA_0.9.0); + +/** * \brief set parameters for timer handle * \param timer timer handle * \param params pointer to a #snd_timer_params_t structure @@ -796,3 +851,17 @@ ssize_t snd_timer_read(snd_timer_t *timer, void *buffer, size_t size) assert(buffer || size == 0); return timer->ops->read(timer, buffer, size); } + +/** + * \brief (DEPRECATED) get maximum timer ticks + * \param info pointer to #snd_timer_info_t structure + * \return maximum timer ticks + */ +long snd_timer_info_get_ticks(snd_timer_info_t * info) +{ + assert(info); + return 1; +} +#ifndef DOC_HIDDEN +link_warning(snd_timer_info_get_ticks, "Warning: snd_timer_info_get_ticks is deprecated"); +#endif diff --git a/src/timer/timer_hw.c b/src/timer/timer_hw.c index b20c0aa2..2ea2aa98 100644 --- a/src/timer/timer_hw.c +++ b/src/timer/timer_hw.c @@ -233,6 +233,15 @@ int snd_timer_hw_open(snd_timer_t **handle, const char *name, int dev_class, int close(fd); return -SND_ERROR_INCOMPATIBLE_VERSION; } + if (mode & SND_TIMER_OPEN_TREAD) { + int arg = 1; + if (ioctl(fd, SNDRV_TIMER_IOCTL_TREAD, &arg) < 0) { + ret = -errno; + close(fd); + SNDERR("extended read is not supported (SNDRV_TIMER_IOCTL_TREAD)"); + return ret; + } + } memset(&sel, 0, sizeof(sel)); sel.id.dev_class = dev_class; sel.id.dev_sclass = dev_sclass; diff --git a/src/timer/timer_local.h b/src/timer/timer_local.h index bbe8f0c7..f11bce34 100644 --- a/src/timer/timer_local.h +++ b/src/timer/timer_local.h @@ -52,6 +52,9 @@ int snd_timer_hw_open(snd_timer_t **handle, const char *name, int dev_class, int typedef struct { int (*close)(snd_timer_query_t *timer); int (*next_device)(snd_timer_query_t *timer, snd_timer_id_t *tid); + int (*info)(snd_timer_query_t *timer, snd_timer_ginfo_t *info); + int (*params)(snd_timer_query_t *timer, snd_timer_gparams_t *info); + int (*status)(snd_timer_query_t *timer, snd_timer_gstatus_t *info); } snd_timer_query_ops_t; struct _snd_timer_query { diff --git a/src/timer/timer_query.c b/src/timer/timer_query.c index 497460f7..d381d2ac 100644 --- a/src/timer/timer_query.c +++ b/src/timer/timer_query.c @@ -221,6 +221,56 @@ int snd_timer_query_next_device(snd_timer_query_t *timer, snd_timer_id_t *tid) } /** + * \brief obtain the timer global information + * \param timer timer handle + * \param info timer information + * \return 0 on success otherwise a negative error code + */ +#ifndef DOXYGEN +int INTERNAL(snd_timer_query_info)(snd_timer_query_t *timer, snd_timer_ginfo_t *info) +#else +int snd_timer_query_info(snd_timer_query_t *timer, snd_timer_ginfo_t *info) +#endif +{ + assert(timer); + assert(info); + return timer->ops->info(timer, info); +} +default_symbol_version(__snd_timer_query_info, snd_timer_query_info, ALSA_0.9.0); + +/** + * \brief set the timer global parameters + * \param timer timer handle + * \param params timer parameters + * \return 0 on success otherwise a negative error code + */ +#ifndef DOXYGEN +int INTERNAL(snd_timer_query_params)(snd_timer_query_t *timer, snd_timer_gparams_t *params) +#else +int snd_timer_query_params(snd_timer_query_t *timer, snd_timer_gparams_t *params) +#endif +{ + assert(timer); + assert(params); + return timer->ops->params(timer, params); +} +default_symbol_version(__snd_timer_query_params, snd_timer_query_params, ALSA_0.9.0); + +/** + * \brief get the timer global status + * \param timer timer handle + * \param status timer status + * \return 0 on success otherwise a negative error code + */ +int snd_timer_query_status(snd_timer_query_t *timer, snd_timer_gstatus_t *status) +{ + assert(timer); + assert(status); + return timer->ops->status(timer, status); +} +default_symbol_version(__snd_timer_query_status, snd_timer_query_status, ALSA_0.9.0); + +/** * \brief get size of the snd_timer_id_t structure in bytes * \return size of the snd_timer_id_t structure in bytes */ diff --git a/src/timer/timer_query_hw.c b/src/timer/timer_query_hw.c index feded1f8..18178d6d 100644 --- a/src/timer/timer_query_hw.c +++ b/src/timer/timer_query_hw.c @@ -54,9 +54,39 @@ static int snd_timer_query_hw_next_device(snd_timer_query_t *handle, snd_timer_i return 0; } +static int snd_timer_query_hw_info(snd_timer_query_t *handle, snd_timer_ginfo_t *info) +{ + if (!handle || !info) + return -EINVAL; + if (ioctl(handle->poll_fd, SNDRV_TIMER_IOCTL_GINFO, info) < 0) + return -errno; + return 0; +} + +static int snd_timer_query_hw_params(snd_timer_query_t *handle, snd_timer_gparams_t *params) +{ + if (!handle || !params) + return -EINVAL; + if (ioctl(handle->poll_fd, SNDRV_TIMER_IOCTL_GPARAMS, params) < 0) + return -errno; + return 0; +} + +static int snd_timer_query_hw_status(snd_timer_query_t *handle, snd_timer_gstatus_t *status) +{ + if (!handle || !status) + return -EINVAL; + if (ioctl(handle->poll_fd, SNDRV_TIMER_IOCTL_GSTATUS, status) < 0) + return -errno; + return 0; +} + static snd_timer_query_ops_t snd_timer_query_hw_ops = { close: snd_timer_query_hw_close, next_device: snd_timer_query_hw_next_device, + info: snd_timer_query_hw_info, + params: snd_timer_query_hw_params, + status: snd_timer_query_hw_status }; int snd_timer_query_hw_open(snd_timer_query_t **handle, const char *name, int mode) |