1. 通过在 GAP_Init()API 上将角色设置为 GAP_PERIPHERAL_ROLE |GAP_CENTRAL_ROLE,将一个BLE 设备(称为“主/从设备”)配置为中央设备及外设。假设该设备也定义了相关的服务和特征。
2. 通过在GAP_Init() API 上将角色设置为 GAP_PERIPHERAL_ROLE,将两个 BLE 设备(称为Slave_A、Slave_B)配置为外设。Slave_A 和 Slave_B 均作为“主/从设备”定义了相同的服务和特征。
3. 通过在 GAP_Init()API 上将角色设置为 GAP_CENTRAL_ROLE,将一个 BLE 设备(称为主设备)配置为中央设备。
4. Slave_A 和 Slave_B 设备均进入发现模式:
ret =aci_gap_set_discoverable(Advertising_Type=0x00, Advertising_Interval_Min=0x20, Advertising_Interval_Max=0x100, Own_Address_Type= 0x0; Advertising_Filter_Policy= 0x00; Local_Name_Length=0x05, Local_Name=[0x08,0x74,0x65,0x73,0x74], Service_Uuid_length = 0; Service_Uuid_length = NULL; Slave_Conn_Interval_Min = 0x0006, Slave_Conn_Interval_Max = 0x0008);
5.主/从设备执行发现流程,以便发现外设 Slave_A 和 Slave_B:
ret = aci_gap_start_gen_disc_proc (LE_Scan_Interval=0x10, LE_Scan_Window=0x10, Own_Address_Type = 0x0, Filter_Duplicates = 0x0);
通过使用 hci_le_advertising_report_event()事件回调通知的广告报告事件发现这两个设备。
6.在发现两个设备后,主/从设备启动两个连接流程(作为中央设备),以便分别连接到 Slave_A 和Slave_B 设备:
ret= aci_gap_create_connection(LE_Scan_Interval=0x0010, LE_Scan_Window=0x0010 Peer_Address_Type= ”Slave_A 地址类型” Peer_Address= ”Slave_A 地址, Own_Address_Type = 0x0; Conn_Interval_Min=0x6c, Conn_Interval_Max=0x6c, Conn_Latency=0x00, Supervision_Timeout=0xc80, Minimum_CE_Length=0x000c, Maximum_CE_Length=0x000c);
ret= aci_gap_create_connection(LE_Scan_Interval=0x0010, LE_Scan_Window=0x0010, Peer_Address_Type= ”Slave_B 地址类型”, Peer_Address= ”Slave_B 地址”, Own_Address_Type = 0x0; Conn_Interval_Min=0x6c, Conn_Interval_Max=0x6c, Conn_Latency=0x00, Supervision_Timeout=0xc80, Minimum_CE_Length=0x000c, Maximum_CE_Length=0x000c);
7.一旦连接,主/从设备使用 aci_gatt_write_char_desc()API 对二者启用特征通知。Slave_A 和Slave_B 设备使用aci_gatt_upd_char_val()API 启动特征通知。
8.在该阶段,主/从设备进入发现模式(作为外设):
ret =aci_gap_set_discoverable(Advertising_Type=0x00, Advertising_Interval_Min=0x20, Advertising_Interval_Max=0x100, Own_Address_Type= 0x0; Advertising_Filter_Policy= 0x00; Local_Name_Length=0x05, Local_Name=[0x08,0x74,0x65,0x73,0x74], Service_Uuid_length = 0; Service_Uuid_List = NULL; Slave_Conn_Interval_Min = 0x0006, Slave_Conn_Interval_Max = 0x0008);
9.一旦主/从设备进入发现模式,它还等待来自被配置为 GAP 中央设备的其他 BLE 设备(称为主设备)的
连接请求。主设备启动发现流程,以便发现主/从设备:
ret = aci_gap_start_gen_disc_proc(LE_Scan_Interval=0x10, LE_Scan_Window=0x10, Own_Address_Type = 0x0, Filter_Duplicates = 0x0);
10.一旦发现主/从设备,主设备启动连接流程以便与之连接:
ret= aci_gap_create_connection(LE_Scan_Interval=0x0010, LE_Scan_Window=0x0010, Peer_Address_Type= ”Master&Slave address type”, Peer_Address= ” Master&Slave address", Own_Address_Type = 0x0; Conn_Interval_Min=0x6c, Conn_Interval_Max=0x6c, Conn_Latency=0x00, Supervision_Timeout=0xc80, Minimum _CE_Lenght=0x000c Maximum_CE_Length=0x000c);
通过使用hci_le_advertising_report_event()事件回调函数可得知主/从设备被发现。
11.一旦连接,主设备使用 aci_gatt_write_char_desc()API 在主/从设备上启用特征通知。
12.在该阶段,由于是 GAP 中央设备,主/从设备接收来自从设备 A、从设备 B 的特征通知,而作为 GAP 外设,它还能将这些特征值通知主设备。