510
个编辑
更改
→②扫描
[[文件:PB-GATT-14.png|边框|居中|无框]]
== ②扫描 ②扫描(通信RX) ==
看过了我们的广播功能之后,我们来看下扫描的部分。在ble mesh中,我们的扫描功能scan,就是用于获取数据的,类似于数据通信的RX。
我们需要注意下ad_listener_process()函数,这个函数是将我们扫描到的订阅数据(不符合标准的BLE广播数据,则认为是侦听到的订阅数据)传递到订阅者进行处理(订阅者指的是带订阅功能的模型)。这个是和我们上方说的关注点二ad_listener_subscribe()函数是一脉相承的。
[[文件:SCAN-06.png|边框|居中|无框|1200x1200像素]]然后我们来对照着看一下ad_listener_subscribe()函数以及ad_listener_process()函数。这两个函数一个是定义了侦听订阅,一个是将扫描获取到的数据传递给订阅者。这两者间的运作关系,大家有兴趣的可以继续查阅他的底层代码逻辑处理,一个是向list中添加订阅者信息,一个是将数据通过p_listener->handler()将数据传递给订阅者处理。[[文件:SCAN-07.png|边框|居中|无框|1200x1200像素]][[文件:SCAN-08.png|边框|居中|无框|1200x1200像素]]最终当我们扫描到订阅消息,并调用ad_listener_process()函数传递时,会触发我们注册的回调nrf_mesh_listen(调用ad_listener_subscribe(&m_nrf_mesh_listener)时,在m_nrf_mesh_listener中)。我们来看下nrf_mesh_listen函数中的处理,其中我们先从数据包中解析了数据的类型type,然后根据不同类型的数据进行相应的处理。{| class="wikitable"|+|AD_TYPE_MESH |蓝牙网格物体的AD类型|-|AD_TYPE_BEACON |蓝牙网状信标的AD类型|-|AD_TYPE_PB_ADV |PB-ADV消息的AD类型|-|AD_TYPE_DFU |nRF OpenMesh消息的AD类型|}[[文件:SCAN-09.png|边框|居中|无框|1200x1200像素]]
[[分类:NRF52832DK]]
[[分类:实验手册]]