CDROMMULTISESSION Struct cdrom_multisession 读取混合型光盘的数据
CDROMRESET 无 重置CD驱动器
CDROM_GET_UPC 无 获得CD的唯一代码
CDROMAUDIOBUFSIZ int 设置音频缓冲区的大小
作为应用程序和设备驱动之间的接口,ioctl()负责将用户请求转换成对硬件设备的操作,它在调用时需要指定三个参数。第一个参数是要对其进行操作的设备描述符;第二个参数是一个整型的数值,它可以用来指定将对硬件进行何种请求;第三个参数是可选的,通常情况下是一个void型的指针,其主要作用是在应用程序和设备驱动之间交换一定数量的信息,具体到CD驱动器来讲一般是指向某个特定结构的指针,这些结构的具体定义可以在<linux/cdrom.h>中找到。
3 编译环境的搭建和检测
安装好的系统中已经有GCC,因此不需要对GCC的问题进行过多的关心。同时系统对设备的控制也在系统安装时自动弄好了,因此搭建环境任务主要是Qt的安装与设置以及光驱是否能够正常工作。
3.1 Qt的安装与测试
Qt的安装有在线安装和离线安装两种方式。这里选择的是离线安装。具体的操作就是先下载好Qt_SDK_Lin32_offline_v1_2_en.run离线包,然后进入虚拟终端进入离线包所放置的位置,运行安装命令:
./ Qt_SDK_Lin32_offline_v1_2_en.run
安装完成后提示没有编译桌面软件的工具链,此时需要手动设置工具链如图2。
图2 Qt工具链的手动设置
图上的工具链即为GCC,这也意着Linux中Qt下的编译是通过GCC进行编译的。
至此,Qt的设置基本就绪。创建一个测试程序来验证是否是正确的。
新建一个工程,选择Widget作为主窗口,在窗口中加入一个Label控件,设置Label的text属性为“Hello Qt!”,编译运行出现结果图3:
图3 测试结果
出现上述结果说明配置正确,Qt能够正常的工作。
3.2 光驱的测试
因为编写的是对CD的播放的程序,因此依赖于光驱的好坏,如果光驱不好,即使编写出来的程序是可运行的,也无法进行验证。因此对光驱好坏的验证是必要的。如果光驱坏了,就需要更换光驱再验证,直到确认光驱是好的为止。
对光驱的检验其实非常简单,只需要一个光驱可支持的CD盘,插入光驱,然后对光驱进行挂载,挂载后,如果查看挂载文件上的内容能够显示出来,就说明光驱是好的,否则就是坏的。测试结果如图4所示
图4 光驱的测试
出现这个结果说明PC机上的光驱是好的,并且显示该音频CD上有11首歌曲,也就是说有11个具有有效数据信息的音轨。实际上音频CD还有一个空白音轨,大约2秒钟,该空白音轨虽然没有数据,但对音频CD的控制等却有很重要的作用。
4 程序的设计
4.1 程序设计目标
程序设计的目标是:使用Qt和设备控制中的ioctl系统调用实现对插入光驱的音频CD进行播放及其他控制以及读取其中的信息。
具体目标如下:
1) 在音频CD插入光驱并挂载(mount)后,打开光驱设备文件
2) 对CD进行播放,在播放的过程中,可以暂停或停止。
3) 播放状态为暂停时能够从暂停处恢复播放,或者直接停止
4) 在播放过程中,再次按播放时,CD从头开始播放
5) 实现上一曲,下一曲
6) 歌曲播放时实时动态的显示播放时间 Linux环境下CD播放器的设计与实现(5):http://www.751com.cn/jisuanji/lunwen_7816.html