我已经实现了扫描或广告以及作为1个主设备的从属设备的连接,同时实现了2个从设备的主设备。
现在我需要同时扫描和放大做广告(无论是否作为奴隶或主人),但无法实现。
请有人请指出一个实现此目的的示例或显示一些适合他们的代码片段?
我遵循en.DM00141271 BlueNRG Prog Man Rev 2016年12月6日的指导原则,第4章:BlueNRG多连接时序策略
特别是wrt建议4:
每次开始做广告时:
b)如果不是直接广告,请选择Adver
tising_Interval_Min = Advertising_Interval_Max,使得(Advertising_Interval_Min + 5ms)是最短分配连接间隔的整数倍
我得到的错误是0x85:BLE_STATUS_INTERVAL_TOO_LARGE
工作顺序:
0.初始化Mode4:
uint8_t DataMode = 4;
aci_hal_write_config_data(CONFIG_DATA_MODE_OFFSET,CONFIG_DATA_MODE_LEN,& DataMode));
当然还有双重差距
uint8_t GapRole = GAP_PERIPHERAL_ROLE_IDB05A1 | GAP_CENTRAL_ROLE_IDB05A1;
aci_gap_init_IDB05A1(GapRole,1,strlen(DeviceName),& gapRoleHdl,& devNameHdl,& devAppearHdl));
1.永远开始扫描:
aci_gap_start_selective_conn_establish_proc(ACTIVE_SCAN,96,16,PUBLIC_ADDR,true,2,白名单);
(所以扫描间隔为60毫秒,扫描窗口为10毫秒)
2.从白名单中的两个从属中的一个获取广告并连接:
aci_gap_create_connection(96,16,AddrType,Addr,PUBLIC_ADDR,48,48,2,72,16,16);
(因此扫描参数与上述相同,60毫秒conn间隔,10毫秒conn长度)
3.尝试开始广告(先前开始扫描继续寻找白名单中的第二个奴隶):
aci_gap_set_discoverable(ADV_IND,44,44,PUBLIC_ADDR,NO_WHITE_LIST_USE,0,NULL,0,NULL,0,0)))
(所以55毫秒的广告间隔,遵守建议甚至间隔为(60毫秒 - 5毫秒)
上述调用的返回值始终为0x85。
#simultaneous-scan-& -advertise #ble_status_interval_too_large
以上来自于谷歌翻译
以下为原文
I have achieved scanning or advertising as well as a connection as a slave to 1 master and simultaneously a master of 2 slaves.
Now I need simultaneous scan & advertise (whether or not in connection as a slave or master), but cannot achieve it.
Would someone please point me to an example which achieves this or show some code snippets that worked for them?
I am following guidelines of en.DM00141271 BlueNRG Prog Man Rev 6 Dec 2016, Chapter 4: BlueNRG multiple connections timing strategy
Specifically wrt advice 4:
Every time you start Advertising:
b) If not Direct Advertising, choose Advertising_Interval_Min = Advertising_Interval_Max such that (Advertising_Interval_Min + 5ms) is an integer multiple of the shortest allocated connection interval
The error I am getting is 0x85: BLE_STATUS_INTERVAL_TOO_LARGE
Order of work:
0. initialize Mode4:
uint8_t DataMode = 4;
aci_hal_write_config_data(CONFIG_DATA_MODE_OFFSET, CONFIG_DATA_MODE_LEN, &DataMode));
and of course dual gap role
uint8_t GapRole = GAP_PERIPHERAL_ROLE_IDB05A1 | GAP_CENTRAL_ROLE_IDB05A1;
aci_gap_init_IDB05A1(GapRole, 1, strlen(DeviceName), &gapRoleHdl, &devNameHdl, &devAppearHdl));
1. start scanning forever:
aci_gap_start_selective_conn_establish_proc(ACTIVE_SCAN, 96, 16, PUBLIC_ADDR, true, 2, whitelist);
(so 60-msec scan interval, 10-msec scan window)
2. get advertisement from one of the two slaves in the whitelist and connect:
aci_gap_create_connection(96, 16, AddrType, Addr, PUBLIC_ADDR, 48, 48, 2, 72, 16, 16);
(so same scan parameters as above and 60-msec conn interval, 10-msec conn length)
3. attempt to start advertising (while previously started scan continues looking for second slave in the whitelist):
aci_gap_set_discoverable(ADV_IND, 44, 44, PUBLIC_ADDR, NO_WHITE_LIST_USE, 0, NULL, 0, NULL, 0, 0)))
(so 55-msec advertising interval, obeying advice to be even interval of (60-msec - 5-msec)
Return value of above call is always error 0x85.
#simultaneous-scan-&-advertise #ble_status_interval_too_large