- 通过在
GAP_Init()
API 上将角色设置为GAP_PERIPHERAL_ROLE |GAP_CENTRAL_ROLE
,将一个BLE 设备(称为“主/从设备”)配置为中央设备及外设。假设该设备也定义了相关的服务和特征。 - 通过在
GAP_Init()
API 上将角色设置为GAP_PERIPHERAL_ROLE
,将两个 BLE 设备(称为Slave_A、Slave_B)配置为外设。Slave_A 和 Slave_B 均作为“主/从设备”定义了相同的服务和特征。 - 通过在
GAP_Init()
API 上将角色设置为GAP_CENTRAL_ROLE
,将一个 BLE 设备(称为主设备)配置为中央设备。 - 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);
- 主/从设备执行发现流程,以便发现外设 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()
事件回调通知的广告报告事件发现这两个设备。
- 在发现两个设备后,主/从设备启动两个连接流程(作为中央设备),以便分别连接到 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);
- 一旦主/从设备进入发现模式,它还等待来自被配置为 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()
事件回调函数可得知主/从设备被发现。
- 一旦连接,主设备使用
aci_gatt_write_char_desc()
API 在主/从设备上启用特征通知。 - 在该阶段,由于是 GAP 中央设备,主/从设备接收来自从设备 A、从设备 B 的特征通知,而作为 GAP 外
设,它还能将这些特征值通知主设备。