自定义蓝牙名字过长,广播显示不全
原因:nrf52832默认使用蓝牙4.x的广播,它的广播包数据只有32byte数据,当广播已经包含足够多的数据的时候,广播每次过长就会显示部分名称,即便你选择"BLE_ADVDATA_FULL_NAME"也一样。解决办法是使用蓝牙5.0,它的容量就会增加到254byte,具体添加代码如下:
/
- @brief Function for initializing the Advertising functionality.
/
void advertising_init(void)
{
uint32_t err_code;
ble_advertising_init_t adv_data;
ble_advdata_service_data_t service_data; //定义蓝牙服务数据到广播包中
int8_t tx_power_level = TX_POWER_LEVEL; //设置发射功率
memset(&adv_data, 0, sizeof(adv_data));
adv_data.advdata.name_type = BLE_ADVDATA_FULL_NAME;
adv_data.advdata.include_appearance = true;
adv_data.advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;
adv_data.advdata.p_tx_power_level = &tx_power_level;
adv_data.advdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]);
adv_data.advdata.uuids_complete.p_uuids = m_adv_uuids;
uint8_t my_adv_manuf_data[6] = {0};
memcpy(my_adv_manuf_data, passwords, 6);
ble_advdata_manuf_data_t manuf_specific_data; //定义制造商数据结构体变量
manuf_specific_data.company_identifier = 0x0059; //0x0059是Nordic的制造商ID
manuf_specific_data.data.p_data = my_adv_manuf_data; //指向自定义数据
manuf_specific_data.data.size = sizeof(my_adv_manuf_data); //自定义数据的大小
adv_data.advdata.p_manuf_specific_data = &manuf_specific_data; //定义自定义数据到广播包中
adv_data.config.ble_adv_fast_enabled = true;
adv_data.config.ble_adv_fast_interval = APP_ADV_INTERVAL;
adv_data.config.ble_adv_fast_timeout = APP_ADV_DURATION;
adv_data.evt_handler = on_adv_evt;
//添加蓝牙5.0***//
adv_data.config.ble_adv_primary_phy = BLE_GAP_PHY_1MBPS;
adv_data.config.ble_adv_secondary_phy = BLE_GAP_PHY_2MBPS;
adv_data.config.ble_adv_extended_enabled = true;
//***********************************************************//
err_code = ble_advertising_init(&m_advertising, &adv_data);
APP_ERROR_CHECK(err_code);
ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG);
}
注意:只能添加advdata的数据,srdata的数据在开启5.0之后添加会出错。加粗样式**