CSR8670学习笔记:自定义ADK configuration tool配置项

为了方便大家学习,现与我爱蓝牙网联合推出【QCC300x/CSR867x/QCC30xx/QCC51xx开发板】。

技术交流QQ群号:743434463
开发板会员QQ群号:725398389(凭订单号入群,赠独家学习资料)
——————————正文分割线———————————–

1. 引言

ADK configuration tool是高通ADK自带的应用程序配置工具,我总结其有如下几个优点:

  • 模板通用:可见的配置项会自动匹配到正确的应用程序模板和硬件平台。
  • 使用简单:当开发者需要关联物理按键动作与用户按键事件时,只需修改user interface中的user event和buttons选项即可。整个过程没有代码改动,也没有编译下载等操作,非软件专业的人员即能胜任,几乎是零软件门槛。
  • 灵活加载:当应用程序打开或关闭预编译选项(比如ENABLE_AVRCP等),配置项中的关联部分会随之出现或消失。

遗憾的是,ADK configuration tool并没有明显的用于添加自定义配置项的接口。这带来两个主要问题:

  • 在开发和调试一些自定义配置功能时不得不反复修改编译,效率很低。
  • 在应用程序运行过程中,如需改动自定义的配置项,不知道该保存在什么位置。

最近接到一个项目,需要在sink例程引用source例程的很多代码,逼得我非得搞懂自定义配置项的方法。经过一段时间的摸索,还真整出活儿来,最终效果图如下:
CSR8670学习笔记:自定义ADK configuration tool配置项_第1张图片
可以看到基本上将source config tool的配置原样不动地搬移到sink config tool的界面下。

欣喜之余,不忘把方法分享给读者,希望能对各位的学习有所帮助。

2. 理解ADK configuration系统

首先我们来看一下整个配置系统的基本要素和相互关联:
CSR8670学习笔记:自定义ADK configuration tool配置项_第2张图片
有两个实体,主机PC端和目标设备。ADK配置工具调用AHI接口访,问目标设备的Config Store库,读取非易失存储器内的数据,在PC界面以格式化的形式显示出来。经常有初学者遇到ADK config tool连接超时,根源就是这个AHI接口没有正常工作,需要在项目的编译选项里指定。

现在新的问题是,ADK configuration tool如何知道界面应该显示哪些配置项,以及这些配置项的当前值呢?这就要从配置项的生成说起了:
CSR8670学习笔记:自定义ADK configuration tool配置项_第3张图片

  • 在源代码层,config_build.mak文件、global definitions.xml文件、module_configurations文件夹中的所有xml文件经过预处理后,自动生成了config set definition.h/c文件和各个module对应的config module.h文件,也自动生成了pskey_map.xml文件,这个文件用于分配USER_PSKEY给所有config set。换句话说,开发人员不需要关注config set具体的物理存放位置。
    CSR8670学习笔记:自定义ADK configuration tool配置项_第4张图片
  • 上述文件,一方面,与引用config set的源文件一起参与编译,生成最终的应用的二进制文件;另一方面压缩后生成config_definition.gz文件。两个文件都保存在文件系统中。
  • 在配置模式下,ADK config tool通过AHI接口从文件系统中读取config_definition.gz文件,解压出xml文件,加载并生成选项页面。此时开发人员点击read键,主机通过AHI接口从ps_dynamic_config_store中读取所有的配置值并显示。
    CSR8670学习笔记:自定义ADK configuration tool配置项_第5张图片
  • 应用程序在运行过程中,应用程序通过config_store接口访问配置值。
    CSR8670学习笔记:自定义ADK configuration tool配置项_第6张图片

3. 合入source例程的配置项

  • 修改config_build.mak文件:
ifneq (,$(findstring ENABLE_AOV,$(DEFS)))
    USED_MODULES+=sink_aov_module_def.xml
endif

USED_MODULES+=source_a2dp_module_def.xml
USED_MODULES+=source_avrcp_module_def.xml
USED_MODULES+=source_private_data_module_def.xml
  • 上述三个source例程的xml文件放入module_configurations文件夹
  • 修改global_config.xml,添加一级配置选项卡
    CSR8670学习笔记:自定义ADK configuration tool配置项_第7张图片
  • 修改三个xml文件,将其中每一项配置的ConfigGroupPath属性关联到一级配置选项卡
  • 工程路径下添加上述3个xml文件对应的.c/.h源码,如source_a2dp.c/.h等
  • 重新编译工程,打开ADK config tool,进入配置模式,查看新增配置项

4. 总结

在掌握了ADK configuration tool配置项的自定义方法后,可以在flash的用户区存储非易失的变量,给自定义功能创造了便利的条件。需要注意的是用户区空间有限,仅能存储简单的变量,如需保存较大的文件,可在FileSystem中创建分区表单独存放。

5. 参考文档

  • ADK configuration tool user guide
  • ADK application configuration architecture
  • ADK application configuration system
  • ADK application configuration XML definitions

你可能感兴趣的:(CSR8670蓝牙芯片软件开发)