RK3568修改蓝牙显示的名字

一、概述

         有时候需要修改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

### 修改RK3568设备的显示屏分辨率 对于RK3568平台上的显示器分辨率调整,通常涉及几个方面的工作。如果目标是在启动时自动应用特定的分辨率,则可能需要编辑内核参数或修改EDID数据以适应所需的分辨率设置。 #### 方法一:通过U-Boot环境变量设定启动分辨率 一种常见的做法是利用U-Boot中的环境变量来指定启动时使用的视频模式。这可以通过向`bootargs`添加额外的参数完成: ```bash setenv bootargs "console=ttyS2,1500000 root=/dev/mmcblk0p2 rw video=HDMI-A-1:1920x1080@60" saveenv ``` 上述命令设置了HDMI输出为1920x1080像素、刷新率为60Hz的模式[^1]。请注意这里的端口号(如`HDMI-A-1`)可能会因具体的硬件设计而有所不同;因此,在实际操作前应当查阅主板的手册确认确切名称。 #### 方法二:修改EDID数据 另一种更为底层的方式是对嵌入式系统的帧缓冲区控制器进行编程,即直接修改EDID(Extended Display Identification Data)。这种方法适用于希望永久改变默认输出分辨率的情况。可以参照类似的操作流程针对RK3568芯片组执行相应的改动[^3]。 需要注意的是,修改EDID是一个较为复杂的过程,涉及到对BIOS/固件级别的调整,建议由熟悉Linux内核开发以及ARM架构的专业人员来进行。 #### 方法三:使用图形化工具或命令行实用程序 某些情况下,也可以借助于操作系统自带的GUI工具或是第三方软件包来简化这一过程。例如,在运行Android或其他基于Linux发行版的情况下,可以直接进入桌面环境下的显示设置选项中调节分辨率大小[^2]。而对于那些更倾向于命令行工作的开发者来说,还可以考虑采用诸如`xrandr`这样的命令行工具来动态切换不同的分辨率配置。 ```bash xrandr --output HDMI-0 --mode 1920x1080 ``` 此命令会尝试将连接至第一个HDMI接口(`HDMI-0`)的外部监视器设为1920×1080分辨率。不过要注意的是,并不是所有的物理连接都支持任意给定的分辨率组合,所以最好先查询所用显示器的技术规格书了解其兼容性列表。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值