有了 idea,就看怎么实现了,针对原相2822 Mouse,需要在ble.cvoid ble_adv_start(uint8_t pairing_en) 中,修改发送广播的数据结构。
名字是swift pair 蓝牙播报方式,修改成自前样机的形式,就可以测试了!
uint8_t adv_data[31]; 是存储广播数据的,只有31字节,按照swift pair 定义,这个31字节,只有11字节的空间留给蓝牙名称,由于在swift pair 广播时,不需要显示蓝牙名称,只要跟着系统显示成“蓝牙”(中文简体),
“Mouse”(英文系统)即可。
因而adv_data不需要存储蓝牙名称数据,需要在另一个数组里存储蓝牙名字,连接成功后就会显示这个名字,此处蓝牙名称存储在 uint8_t scan_data[31]中,同时广播出去。
实现代码如下:
void ble_adv_start(uint8_t pairing_en)
{
uint8_t dev_name_sz_l = strlen(DEVICE_NAME);
// prepare template for adv
memcpy(adv_data, adv_template, sizeof(adv_template));
adv_data_sz = sizeof(adv_template);
if (pairing_en == 1)
{
SetAdvParam();
……
}
else
{
_check_bond_and_set_param();
}
if (get_pairing_flag())
{
_update_dev_addr(1);
#ifdef CONFIG_ENABLE_RPA
ble_enable_privacy_pairing();
#endif
// swift pair process
if ( get_pairing_flag() != 0 \
&& sizeof(swift_pair) <= (sizeof(adv_data) - adv_data_sz))
{
memcpy(&adv_data[adv_data_sz], swift_pair, sizeof(swift_pair));
adv_data_sz += sizeof(swift_pair);
}
scan_data[0] = 0x02;
scan_data[1] = 0x0A;
switch (pxi_ble_tx_power_get())
{
case RF_TX_POWER_0_PLUS_DBM:
scan_data[2] = 0x01;
break;
case RF_TX_POWER_4_PLUS_DBM:
scan_data[2] = 0x04;
break;
case RF_TX_POWER_20_MINUS_DBM:
scan_data[2] = 0xEC;
break;
default:
scan_data[2] = 0x00;
break;
}
scan_data_sz = 3;
scan_data[scan_data_sz] = dev_name_sz_l + 1;
#if (CONFIG_DEV_NAME_TYPE == SHORTENED_LOCAL_NAME)
scan_data[scan_data_sz + 1] = 0x08;
#elif (CONFIG_DEV_NAME_TYPE == COMPLETE_LOCAL_NAME)
scan_data[scan_data_sz + 1] = 0x09;
#endif
memcpy(&scan_data[scan_data_sz + 2], (uint8_t*)DEVICE_NAME, dev_name_sz_l);
scan_data_sz += (dev_name_sz_l + 2);
pxi_gap_s_adv_data_set(adv_data, adv_data_sz, scan_data, scan_data_sz);
}
else
{
pxi_gap_s_adv_data_set(adv_data, 3, 0, 0);
}
pxi_gap_s_adv_start();
}
以上操作是要把 DEVICE_NAME 改到,scan_data 中,这样测试,满足客户要求了。
这次博文就到这了!
大大通方案与博文,十分精彩,引人入胜,如果不在登录状态的看官,大大通则视为“匆匆之过客”很快就“不见庐山真面目”了,看的正过瘾啊!
各位看官!不要着急!只需一个小小的动作而已:登录!
而且还附带小编联系方式,如有疑问,请在博文下方评论留言,或者私信给我,收到之后会第一时间回复哦!
请多多关注小编与大大通平台,我们会不断分享最新的热点技术
评论