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

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

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 外设,它还能将这些特征值通知主设备。

相关文章
|
存储 安全 算法
【BLE】 BLE配对绑定保姆级介绍
实现蓝牙通信安全,除了paring/bonding这种底层方式,用户也可以在应用层去实现相同功能,两者从功能上和安全性上没有本质区别,只不过应用层自己实现的话,需要自己选择密码算法,密钥生成,密钥交换等,如果你不是这方面的专家,你的应用就有可能会存在安全漏洞。设备跟手机绑定成功后,手机再次重连这个设备时,就会自动跳过service discovery过程,换句话说,配对的时候手机会把设备所有服务和characteristic的handle保存下来,二次重连的时候,直接用以前保存的handle值去操作设备。
3050 1
【BLE】 BLE配对绑定保姆级介绍
|
2月前
Netty 与硬件设备交互,下行命令时(服务对设备),如何等待设备响应,再进行业务操作解决方案
Netty 与硬件设备交互,下行命令时(服务对设备),如何等待设备响应,再进行业务操作解决方案
|
6月前
I/O设备与主机信息传送的方式(程序查询方式,程序中断方式,DMA方式)
I/O设备与主机信息传送的方式(程序查询方式,程序中断方式,DMA方式
315 0
|
6月前
|
编解码 计算机视觉 Python
IPC机制在jetson中实现硬解码视频流数据通信的逻辑解析
IPC机制在jetson中实现硬解码视频流数据通信的逻辑解析
188 0
|
物联网 开发工具 芯片
BLE蓝牙连接不稳定以及突然断开的原因和解决方法
在开发BLE的时候经常会遇到连接突然断开的情况,比如刚连接上就断开、连接成功之后传输数据随机断开(有时候连接很稳定不断开)。以上这些断开连接的情况或多或少都遇到过,很是让人头疼。当然咸鱼也不例外,也碰到过BLE突然断开的问题。咸鱼根据自己的经验做一些这方面的总结,希望能对大家有所帮助。
1486 0
BLE蓝牙连接不稳定以及突然断开的原因和解决方法
4G、Wifi、蓝牙所谓的AT指令模式和数据透传模式到底是什么意思?
4G、Wifi、蓝牙所谓的AT指令模式和数据透传模式到底是什么意思?
518 0
|
JavaScript
组件通信BUS模式及原理
vue组件通信方式是个老生常谈的话题了,最全面的莫过于 vuex,最简单的就是父子组件 props 传值,今天我们重点来说说经常提到的 bus 模式。
|
Android开发
RK3399平台开发系列讲解(系统修改记录篇)1.13、安卓系统hal层修改最大支持摄像头数量
RK3399平台开发系列讲解(系统修改记录篇)1.13、安卓系统hal层修改最大支持摄像头数量
186 0