0. 前言
本文主要介绍alsa-timer相关代码的分析内容。
1. 介绍
官方文档可以参见下面的链接:
官网上对Timer的介绍很简单,我根据自己的使用情况总结如下:
- Timer被设计为使用声卡内部的定时器,但是也可以被其它定时器驱动,比如内核中的 snd_timer.ko 就是一个基于系统定时器的Timer。
- Timer使用循环Buffer来存储信息。
- 定时器最高精度是ns级,但实际的精度依赖于时钟源。
- 可以使用 NONBLOCK 或 BLOCK 的模式打开定时器。
- 如果需要查询Timer的状态,需要使用 timer_query 的接口。
我们后面主要是基于NONBLOCK模式进行分析。
2. Timer ID
Timer ID主要由以下5个字段组成:
名称 | 值 | 说明 |
---|---|---|
class 区分声卡类别 | SNDRV_TIMER_CLASS_GLOBAL | 全局声卡,也就是snd_timer.ko提供的默认Timer,只能有一个 |
SNDRV_TIMER_CLASS_CARD | C |