中科蓝讯蓝牙:DownLoader可视化配置工具实现机制, 如何增加自己的自定义配置

目录

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: 表示这个一个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的空文件占位预留也可以.

本章节完, Thanks.

  • 5
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值