有了 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 中,這樣測試,滿足客戶要求了。
這次博文就到這了!
大大通方案與博文,十分精彩,引人入勝,如果不在登錄狀態的看官,大大通則視為“匆匆之過客”很快就“不見廬山真面目”了,看的正過癮啊!
各位看官!不要著急!只需一個小小的動作而已:登錄!
而且還附帶小編聯繫方式,如有疑問,請在博文下方評論留言,或者私信給我,收到之後會第一時間回復哦!
請多多關注小編與大大通平台,我們會不斷分享最新的熱點技術
評論