你好,
我想实现一个GATT特性,智能手机发送一个读取查询,DA14680用一个变量的值进行应答(在运行时改变)。因此,我研究了电池服务,以了解如何实现它。
电池服务的行为与我希望自己的服务完全一样——您可以查询它并获取一个不断变化的变量作为返回。然而,是什么困扰着我(在文件sdk/ble services/src/bas.c中):
据我所知,当发送读取查询时,它由函数“handle\u Read\u req()”处理。但是,当我调试程序并在此函数中设置断点时,从智能手机向此特征发送读取查询,该断点永远不会到达/激活,但智能手机仍会收到电池电量值。因此,如果您能解释查询答案是如何生成/发送的,那就太好了。:-)
我的问题背景:在我的应用程序中,一旦接收到读取查询,DA14680需要在将变量作为响应发送之前执行一些算术运算,我想将这些操作放在句柄或回调函数中,但我不确定可以使用哪个函数。。。
我知道可以通过ble_gatts_set_value()-函数更改响应值,但我希望仅在读取查询时调用/使用该函数,以避免轮询该函数和浪费计算能力。
提前谢谢
菲利普
设备:
嗨,德桑布,
从外围设备到电话设备的应答直接从堆栈发送。在580的情况下,堆栈将读取数据库值并用适当的值反馈给电话。现在在5.0.4 SDK中有一种方法可以捕获读数指示,请查看以下链接以了解更多详细信息https://support.dialog-semiconductor.com/gattcreadcmdind-da14580.
关于第二个问题,为了让处理程序处理与自定义概要文件的交互,您必须遵循allready实现概要文件的示例,让我们以bas概要文件的bas_init()函数为例。您将看到有一个结构,它将容纳有关概要文件的所有信息,包括每个事件(连接、读取、写入等)的处理程序。因此,您必须为自定义概要文件实现类似的功能,并为结构的read_req成员提供类似的回调函数,完成后,您必须使用ble_service_add()添加服务,以便管理器触发事件,您还可以在第7.2.2段的UM-B-044 DA1468x软件平台参考.pdf中找到一些文档。通过执行上述操作,每次都会有读/写etc请求,相应的处理程序将被触发。
谢谢你的对话
谢谢你的回答,不幸的是我选择了错误的“类别”,我只使用DA14680而不是580,所以我想知道你回答的第一部分是否也适用于DA14680?因为这就是我所经历的-所以我不能停止handle_read_req()中的程序,因为读取查询是由堆栈处理的?
嗨,德桑布,
不,这不代表68x系列,使用68x,您应该能够在中央处理器尝试读取您的特征时立即停止读取请求,但您仍然需要为该特定特征实现handle_read_req()函数,并且您还需要在创建特征时启用该特征。因此,当使用ble_gatts_add_characteristic()创建特征时,参数gatts_flag_t flags如果设置为gatts_flag_CHAR_READ_REQ将请求重新路由到应用程序级,您将能够在应用程序级捕获请求,然后您必须使用ble_gatts_read_cfm()手动发送确认值。
谢谢你的对话
非常感谢你!!它现在就像一个符咒。:-)