mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	Updated to new timer API
This commit is contained in:
		
							parent
							
								
									6a949ee804
								
							
						
					
					
						commit
						9c084c4ba6
					
				
					 8 changed files with 234 additions and 18 deletions
				
			
		
							
								
								
									
										12
									
								
								src/Versions
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								src/Versions
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -88,3 +88,15 @@ ALSA_0.9.0rc8 {
 | 
			
		|||
    snd_pcm_status_get_htstamp;
 | 
			
		||||
 | 
			
		||||
} ALSA_0.9.0rc4;
 | 
			
		||||
 | 
			
		||||
ALSA_0.9.0 {
 | 
			
		||||
  global:
 | 
			
		||||
 | 
			
		||||
    snd_timer_query_info;
 | 
			
		||||
    snd_timer_query_params;
 | 
			
		||||
    snd_timer_query_status;
 | 
			
		||||
    snd_timer_params_set_exclusive;
 | 
			
		||||
    snd_timer_params_get_exclusive;
 | 
			
		||||
    snd_timer_params_set_filter;
 | 
			
		||||
    snd_timer_params_get_filter;
 | 
			
		||||
} ALSA_0.9.0rc8;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			@ -575,6 +565,40 @@ int snd_timer_params_get_auto_start(snd_timer_params_t * params)
 | 
			
		|||
	return params->flags & SNDRV_TIMER_PSFLG_AUTO ? 1 : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \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
 | 
			
		||||
| 
						 | 
				
			
			@ -617,6 +641,37 @@ long snd_timer_params_get_queue_size(snd_timer_params_t * params)
 | 
			
		|||
	return params->queue_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \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
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -220,6 +220,56 @@ int snd_timer_query_next_device(snd_timer_query_t *timer, snd_timer_id_t *tid)
 | 
			
		|||
	return timer->ops->next_device(timer, 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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue