原生SDK编译后,很多参数全部是默认的配置,比如经典蓝牙设备的名称,BLE设备的名称,ANC默认使能与否等。
那么,如何在工程中把这些默认的参数配置成期望的值呢?
SDK默认这些参数的配置位置为:
bta_sdk\mcu\project\ab1565_ab1568_evk\apps\XXXXX\config_bin\XXXX\nvkey.xml
比如经典蓝牙设备的名称:
<!-- Default device name -->
<NVKey KeyID="0xF202">
<Value>777559696E4853</Value>
</NVKey>
再比如BLE广播的名称:
<!-- Default BLE device name -->
<NVKey KeyID="0x3901">
<Value>777559696E424C45</Value>
</NVKey>
ANC默认开关:
<!--- 0x01XXXX:enable ANC, 0x00XXX:Disable ANC -->
<NVKey KeyID="0xE1E0">
<Value>0x010100000000000000000000</Value>
</NVKey>
注意:xml中的属性的值不可以是字符串,正常情况下,我们应该从下面工具比较的结果的直接复制过来填到对应的属性的值中,以免每次生成的固件都要重新修改这些属性的值。
那么,如何确定期望的参数在哪个位置改呢?
可以通过Took.Kit工具来查看,比如我们要改蓝牙的名称,打开编译好的固件好,输入期望的参数值,然后保存,保存后,可以通过工具栏中的比较工能来查看是哪个值记录的该配置参数。
点击比较后,会弹出最后一次修改前后的变化内容(假设电脑 已经安装了WinMerge的比较工具,当然也可以用其它比较工具),如下图所示:
通过查异可以得知0x3901为蓝牙设备名称,因此,回过来再打开nvkey.xml文件,找到0x3901这个属性,然后把它的值改成期望的内容,然后重新编译即可。
代码中设置名称
代码中配置蓝牙设备名称的文件是:btcustomer_config.c,函数:bt_customer_config_get_gap_config(),如下图所示,其中两个名称的宏的值为:
NVKEYID_APP_DEVICE_NAME_USER_DEFINED的值为0xF203
NVKEYID_APP_DEVICE_NAME_DEFAULT 的值为0xF202
其中0xF202正上nvkey.xml中所提到的设备名称配置,该值 会被烧写到芯片指定的参数区域,然后代码通过nvkeyread_data()来获取参数的配置值。上面图片中的逻辑是,如果没有用户自定义设备名称(0xF203),则读取默认的名称(0xF202),如果默认的也没有,则H_+6个默认的蓝牙MAC地址做为设备的名称;
所以,我们也可以通过在代码处强制给其命名。
设备的所支持的参数ID值定义在文件mcu/middleware/MTK/nvdm/inc/nvkey_id_list.h中,如下图所示:
因此,可以用此为线索来在nvkey.xml中进行默认参数的配置。