基础用法
本节将详细介绍lib_xua的基本用法,并提供有关如何编程USB音频设备的指南。我们将逐步探讨库的结构、组件之间的交互方式以及在项目中使用lib_xua的方法。
库结构
源代码 src 分为几个目录:
| 目录 | 描 述 |
|---|---|
| core | USB音频应用程序的通用代码 |
| midi | MIDI I/O代码 |
| dfu | 设备固件升级代码 |
| hid | 人机界面设备代码 |
图6:lib_xua结构
请注意,midi和dfu目录可以作为独立库的潜在候选项。
在项目中使用
所有lib_xua函数都可以通过xua.h头文件访问:
#include <xua.h>
另外还需要将lib_xua添加到应用程序Makefile的USED_MODULES字段中:
USED_MODULES = .. lib_xua ...
“无代码”编程模型
虽然可以使用lib_xua提供的构建模块来编写USB音频设备的代码,但我们意识到这对于许多类型的客户或产品可能并不理想。例如,一些用户可能没有丰富的软件开发经验,只想自定义一些基本设置,如字符串、采样率、通道数等。其他用户可能希望完全自定义实现,添加额外功能,如添加DSP,或者可能仅使用提供的部分功能,例如仅使用XUA_AudioHub。
此外,支持的大量功能可能导致大量的任务、硬件资源和通信通道等,每个产品都需要编写相当多的代码。
为了满足前一类用户的需求,XMOS提供了“无代码”选项。简单来说,提供了一个名为main.xc的文件,其中包含预先编写的main()函数以及所有所需的硬件资源声明。基于开发人员在xua_conf.h中提供的选项,生成代码。
使用这种开发模型,用户只需包含带有其设置的xua_conf.h文件,并根据需要选择性地实现任何“用户函数”。除此之外,还需要为硬件平台创建一个XN文件,其中包含用于各种lib_xua功能的端口定义(参见配置与选项)。
这种开发模型还提供了一个完整且经过验证的代码库作为产品的基础。本节描述的行为是lib_xua的默认行为。要禁用此行为,请在应用程序的Makefile或xua_conf.h中将EXCLUDE_USB_AUDIO_MAIN设置为1,详见高级教程。
配置lib_xua
用户可通过可选的头文件xua_conf.h来配置lib_xua的各种构建时选项。为了让构建脚本能够找到该文件,它应该位于应用程序的src目录中的某个位置。
这些构建时选项包括音频类别版本、采样率、通道数等。详见API获取完整列表。
构建系统将根据需要自动包含xua_conf.h头文件 - 开发人员应继续按照之前的指示在工程中包含xua.h。下面是一个简单的示例:
#ifndef _XUA_CONF_H_
#define _XUA_CONF_H_
/* 输出通道数 */
#define XUA_NUM_USB_CHAN_OUT (2)
/* 产品字符串 */
#define XUA_PRODUCT_STR_A2 "My Product"
#endif
用 户函数
为了实现自定义功能,例如配置外部音频硬件、在流开始/停止时进行特殊行为等,用户可以重写各种函数(详见API获取完整列表)。这些函数的默认实现为空。