0
点赞
收藏
分享

微信扫一扫

0x01 . BlueNRG-1 BLE同时作为主、从设备的场景是如何实现的?

惠特曼 2022-03-23 阅读 42
  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);
  1. 主/从设备执行发现流程,以便发现外设 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()事件回调通知的广告报告事件发现这两个设备。

  1. 在发现两个设备后,主/从设备启动两个连接流程(作为中央设备),以便分别连接到 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);
  1. 一旦主/从设备进入发现模式,它还等待来自被配置为 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()事件回调函数可得知主/从设备被发现。

  1. 一旦连接,主设备使用 aci_gatt_write_char_desc()API 在主/从设备上启用特征通知。
  2. 在该阶段,由于是 GAP 中央设备,主/从设备接收来自从设备 A、从设备 B 的特征通知,而作为 GAP 外
    设,它还能将这些特征值通知主设备。
举报

相关推荐

0 条评论