[alsa-devel] alsa-gobject Add shared library to operate ALSA Timer character device
alsa-project/alsa-gobject pull request #6 was opened from takaswie:
This request is to add a new library, libalsatimer, to operate ALSA Timer character device.
In design of ALSA Timer core, one character device is added to Linux system. Usually a special file, '/dev/snd/timer' is used for the character device. Userspace applications can enumerate actual timer device to operate the character device.
For enumerations of the timer devices, the library includes a global functions, 'alsatimer_get_device_id_list()'. The timer devices are identified by 'ALSATimerDeviceId' which is a GObject boxed object to handle 'struct snd_timer_id'. The other global functions are available to the timer device, as a wrapper of some ioctl commands below:
* alsatimer_get_device_info() = SNDRV_TIMER_IOCTL_GINFO * alsatimer_get_device_status() = SNDRV_TIMER_IOCTL_GPARAMS * alsatimer_set_device_params() = SNDRV_TIMER_IOCTL_GSTATUS
Userspace applications can allocate timer instances and attach them to the timer device to receive timer events. The library includes 'ALSATimerUserInstance' which is an GObject-derived object to maintain file descriptor of ALSA Timer character device. Usually, the series of below calls are expected to use in the order to start emission of timer events: * alsatimer_user_instance_new() * alsatimer_user_instance_open() * alsatimer_user_instance_attach() * alsatimer_user_instance_set_params() * alsatimer_user_instance_start() * alsatimer_user_instance_stop()
Against the attachment to timer device, there's a way to associate the instance to the another instance as slave. This is achieved by a call of 'alsatimer_user_instance_attach_as_slave()'. The 'ALSATimerDeviceId' is the lack of properties relevant to slave association since the information relevant to slave association in kernel space is not available for userspace application at all and the properties are just used to transfer the information from userspace by one way.
ALSA Timer core supports two types of events, which is switched by 'tread operation'. To handle these two, the library has 'ALSATimerEventData' which is an GObject-derived abstract class. There are two specialized classes from it; 'ALSATimerEventDataTick' and 'ALSATimerEventDataTimestamp'. The former is just for tick event and the latter is for events with its type and timestamp. The selection is done by a call of attach function with the type of event data.
Request URL : https://github.com/alsa-project/alsa-gobject/pull/6 Patch URL : https://github.com/alsa-project/alsa-gobject/pull/6.patch Repository URL: https://github.com/alsa-project/alsa-gobject
participants (1)
-
GitHub pull_request - opened