目录
1. 配置工具功能总述
2. 配置界面示例简介
3. 配置工具实现原理及内部机制分析.
4. 如何自己增加自己的配置界面:
5. 资源文件(提示音/eq等)替换原理及注意事项
1. 配置工具功能总述
配置工具主要实现的两个功能.
1) 程序功能更改
2) 资源文件(提示音/EQ等)替换
且这两功能可以不用重新编译程序, 只需修改配置工具选项后直接下载dcf文件即可.
这样设计的目的在于: 程序编译最终生成dcf文件, 用dcf文件加上配置工具, 可以实现一个代码工程对应多个不同的具体应用方案. 不同方案可以不改源代码,直接配置或新建不同的setting文件即可.方便差异小的方案代码维护及功能更改.
如下: 发出的dcf文件包一般包含以下两个文件(app.dcf和Settings文件夹)
这里的Settings中, 打开可以看到有很多个setting文件, 每个setting文件都对应一个不同的应用方案.
2. 配置界面示例简介
程序最终编译生成dcf文件后, 在下载或导出烧写(prd)时, 还需要选定一个配置文件, 如下:
在这个配置文件(如AB5312_earphone)中, 可以配置不同的程序功能/替换资源文件(提示音/EQ等).
点击 管理配置 后, 打开配置工具, 可以看到以下界面, 可以动态更改各功能, 更改完后不用编译程序,直接下载即可.
3. 配置工具实现原理及内部机制分析.
在Downloader软件打开时, 会自动搜索dcf文件所在目录"Settings\" 下的所有 "*.setting"配置文件, 并在"配置"选项卡中列举出来, 如下图, 如果新加了setting文件, 需要重新启动Downloader, 才能在这时显示了来.
点击管理配置时, DownLoader会根据xcfg.bin(UI脚本xcfg.xm编译生成的)显示各项图形化配置.
xcfg.bin实际上拥有xcfg.xm(UI配置脚本)的所有信息
在"蓝讯蓝牙开发: 蓝牙工程编译及自动下载过程浅析"文章中, 有讲到程序编译前, 会调用xmaker调用脚本, 根据xcfg.xm处理配置选项, 生成配置xcfg.bin文件, 及xcfg.h头文件.
芯片开始运行时, xcfg.h中的xcfg_cb结构体会得到setting文件中的配置值. 实现配置工具与程序的联系.
下面分析一个具体的配置为例:
config(CHECK, "BUCK MODE", "是否设置为BUCK MODE", BUCK_MODE_EN, 1);
这里:
CHECK:
BCK MODE:
是否设置为BUCK MODE: 当鼠标在BUCK MODE选项上时, DownLoader底部会显示这一串提示字符.
1: 表示默认值, 即没有选则配置文件时, BUCK_MODE_EN(也就是程序中的xcfg_cb.buck_mode_en)值为1.
在这个示例中 如果把 BUCK MODE 从关闭改为打开, 并保存. 可以看到对应的AB5312_earphone.setting文件中有如下变化
So, 在dcf下载或导出生产文件(prd)时, Downloader会把setting文件的配置值整合成一个常量段, 下载到flash中, 芯片上电运行时, 此常量段会整体拷贝到xcfg_cb结构体中, 供后面程序使用(当然代码要预先根据不同的配置实现不同的功能), 实现了配置工具和程序的关联.
终上所述:
1. 同一个dcf下载文件, 可以有多个不同的配置文件, 每个文件可以对应一个具体客户方案. 方便客户在不改变代码的情况下做多种方案.
2. 配置工具实质上是改变的是setting文件. 客户也可以不用原厂的配置工具, 有的客户可以自己写工具, 如只改变setting文件中的蓝牙名并保存, 即可实现蓝牙名字更改这种更简洁的可视化配置工具.
4. 如何自己增加自己的配置界面:
只需在xcfg.xm中, 增加相应的选项, 重新编译即可(生成新的xcfg.bin), 并在Downloader中重新打开对应的setting文件, 即可看到新加的配置选项.
如, 以下示例在xcfg.xm中增加了BUCK_MODE_TEST这一项.
config(CHECK, "BUCK MODE_TEST", "BUCK MODE_TEST示例增加", BUCK_MODE_TEST_EN, 1);
重新编译工程, 再调用DownLoader重新打开AB5312_earphone.setting, 可以看到, 新的项增加上去了.
在程序中, 增加相应的处理代码即可.
if (xcfg_cb.buck_mode_test_en) {
//do something
}
至于xcfg.xm脚本的语法, 参考里面其它各种控件写法, 应该不难道猜到.
5. 资源文件(提示音/eq等)替换原理及注意事项
1) 如果替换默认目录"Output\bin\res"的资源文件, 需要重新编译并下载才有效.
"蓝牙工程编译及自动下载过程浅析"一文中的提到, 在编译前的prebuild.bat中, 会把 默认资源目录"Output\bin\res"下所有文件当作资源文件打包生成res.bin和res.h. 供后面程序编译和整合dcf使用.
这点很容易出错,经常听说替换EQ资源后没有效果, 最后查到原来是没有重新编译.
2) 如果替换配置工具选定目录下的资源文件, 则可以不用重新编译工程, 直接下载dcf即可 (注意只会替换掉res下的同名字的资源)
在setting文件打开时, Downloader会扫描编译路径中的 "Output\bin\Settings\Resources"所有文件夹名字, 并把各个文件夹名字显示到"资源目录", 供不同的配置文件使用.
如上图, 这里选的是S6-TWS文件夹(Output\bin\Settings\Resources\S6-TWS), 此文件夹中的各资源 是 默认目录"Output\bin\res"中资源的子集.
在dcf文件下载时, 会把这个选定的资源目录S6-TWS中同名的资源替换掉res.bin(默认目录编译生成的资源文件)中的同名资源, 再下载到芯片flash中.
在res.h中, 可以看到,给出的是各默认资源的起始地址和长度. 也就是说, 在编译生成res.bin时, 必须要有同名资源先占位, 才能实现同名资源文件的替换(替换起始地址和长度即可).
若发现替换掉"资源目录"中的资源后无效, 请检测默认目录中"Output\bin\res"是否有预留同名的资源文件. 如果担心flash空间不够, 在默认res目录中增加0KB的空文件占位预留也可以.