一、概述
有时候需要修改RK3568设备这一端蓝牙在其他设备上显示的名字,例如有时要改成客户品牌的名字或者改成方案的名字,这个就需要修改默认的设备名称。
二、问题分析
系统设置中显示的蓝牙设备名字,是在使能蓝牙功能的时候,在bt中介层里进行设置的默认名字,后面用户可以手动在系统设置进行修改。
1.设备使能的时候调用BTIF_dm_enable()
//Android/system/bt/btif/src/btif_dm.cc
void BTIF_dm_enable() {
BD_NAME bdname;
bt_status_t status;
bt_property_t prop;
prop.type = BT_PROPERTY_BDNAME;
prop.len = BD_NAME_LEN;
prop.val = (void*)bdname;
status = btif_storage_get_adapter_property(&prop);
if (status == BT_STATUS_SUCCESS) {
/* A name exists in the storage. Make this the device name */
BTA_DmSetDeviceName((char*)prop.val);
} else {
/* Storage does not have a name yet.
* Use the default name and write it to the chip
*/
BTA_DmSetDeviceName(btif_get_default_local_name());
}
2.调用btif_get_default_local_name()获取设备的默认名字,从代码中可以看出,设备名字为空时,会首先读取BTM_DEF_LOCAL_NAME这个宏是否为空,如果不为空则将其值作为设备的默认名字返回给上一级
//Android/system/bt/btif/src/btif_dm.cc
static char* btif_get_default_local_name() {
if (btif_default_local_name[0] == '\0') {
int max_len = sizeof(btif_default_local_name) - 1;
if (BTM_DEF_LOCAL_NAME[0] != '\0') {
strncpy(btif_default_local_name, BTM_DEF_LOCAL_NAME, max_len);
} else {
char prop_model[PROPERTY_VALUE_MAX];
osi_property_get(PROPERTY_PRODUCT_MODEL, prop_model, "");
strncpy(btif_default_local_name, prop_model, max_len);
}
btif_default_local_name[max_len] = '\0';
}
return btif_default_local_name;
}
3.调用BTA_DmSetDeviceName()将btif_get_default_local_name返回的名字设置到系统中
//Android/system/bt/bta/dm/bta_dm_api.cc
/** This function sets the Bluetooth name of local device */
void BTA_DmSetDeviceName(char* p_name) {
std::vector<uint8_t> name(BD_NAME_LEN + 1);
strlcpy((char*)name.data(), p_name, BD_NAME_LEN + 1);
do_in_main_thread(FROM_HERE, base::Bind(bta_dm_set_dev_name, name));
}
三、解决方案
从上面的分析可以知道,设备的默认名字会首先从BTM_DEF_LOCAL_NAME这个宏获取,所以只要修改这个宏的值即可修改默认蓝牙设备名字。
搜索代码发现这个宏是在Android/device/rockchip/rk356x/bluetooth/bdroid_buildcfg.h中定义,所以修改它的值即可
--- a/Android/device/rockchip/rk356x/bluetooth/bdroid_buildcfg.h
+++ b/Android/device/rockchip/rk356x/bluetooth/bdroid_buildcfg.h
@@ -17,8 +17,10 @@
#ifndef _BDROID_BUILDCFG_H
#define _BDROID_BUILDCFG_H
-#define BTM_DEF_LOCAL_NAME "rk3566"
+#define BTM_DEF_LOCAL_NAME "rk3568"
#define BTA_DM_COD {0x1A, 0x01, 0x10}
#define BLE_PRIVACY_SPT FALSE