处理与回调功能

6个帖子 / 0新
最后一篇文章
阿明
离线
最后一次露面:4年2个月前
加入:2016-09-30 07:23
处理与回调功能

嗨对话,

我不了解SDK中的句柄函数和回调函数之间的区别。
例如,在多链接演示中,有一个函数bd_addr_write_cb(),在关联的服务中,dlg_ml是函数handle_write_req。两者都存储在DLG_ML中:

dlg_mls-> svc.write_req = handle_write_req;
dlg_mls-> addr_write_cb = addr_write_cb;

我什么时候使用句柄函数以及何时回调函数?他们如何通过软件调用?
我想理解这一点,因为我构建了自定义服务。

谢谢
阿明

设备:
mt_dialog
离线
最后一次露面:4个月3天前
职员
加入:2015-06-08 11:34
嗨,阿明,

嗨,阿明,

回调函数是一个代码,该代码被传递给另一个函数作为参数,处理程序函数通常是作为对消息响应执行的函数的类型。在您引用的特定代码上,回调函数作为参数传递给配置文件初始化函数。当触发与特定配置文件相关的BLE活动时,此回调函数被用作处理程序。在他们被称为问题的方式中,这是BLE_ADAPTER的工作,并根据与BLE操作相关的服务进行处理。因此,例如,如果中央写入特定服务,则将调用handle_write_req()。handle_write_req()(配置文件本身实现的处理程序)将检查写入是否在特定的句柄(evt-> handle == dlg_mls-> periph_addr_val_h)中执行,如果这是正确的,则thange_peripheral_address_write the Thand the than您使用的回调函数是为了使配置文件(BD_ADDR_WRITE_CB_T ADDR_WRITE_CB)归化。如果您是指何时传递回调功能以及何时使用由配置文件定义的特定处理程序(特定于应用程序),那么我没有得到“何时使用句柄功能以及何时回调”。

谢谢mt_dialog

阿明
离线
最后一次露面:4年2个月前
加入:2016-09-30 07:23
非常感谢您的详细信息

非常感谢您的详细说明。

与handle_write_req()有关:ble_gatts_set_value()和ble_storage_put_u32()/ble_storage_put_buffer()/...?根据标题文件中的各个描述,所有这些函数在内部数据库中设置了一个值。因此,如果发生写请求,这是将值存储在属性数据库中的最佳方法?

谢谢
阿明

mt_dialog
离线
最后一次露面:4个月3天前
职员
加入:2015-06-08 11:34
嗨,阿明,

嗨,阿明,

ble_gatts_set_value()将值存储在BLE堆栈的内部属性数据库中,ble_storage_put_u32()&ble_storage_put_buffer()如果称为它们将属性存储在闪存中,以便您始终意识到您的属性状态每个可用的连接。大多数配置文件使用ble_storage_put_u32(),以“记住”中央启用通知,以使这些函数具有不同的功能性。因此,如果您想在数据库中存储UPComming值,则BLE_GATTS_SET_VALUE()是您应该使用的函数。

谢谢mt_dialog

阿明
离线
最后一次露面:4年2个月前
加入:2016-09-30 07:23
嗨mt_dialog,

嗨mt_dialog,

哪个内存存储BLE堆栈的内部属性数据库?睡眠模式期间数据库会发生什么?

谢谢
阿明

mt_dialog
离线
最后一次露面:4个月3天前
职员
加入:2015-06-08 11:34
嗨,阿明,

嗨,阿明,

在系统RAM的堆中运行时分配数据库,并保留睡眠期间。

谢谢mt_dialog