嗨对话框,
我正在使用DA14580为中心角色应用程序工作。我关注DSPS SDK 5主机示例。我陷入了发现外设GATT配置文件的服务和属性。代码不是很清楚。是否有一些文档或其他一些简单的代码示例,具有中心角色,以显示适当的GATT命令和中心侧的事件。
我正在使用Android智能手机作为外设。
谢谢,Sabasit.
嗨sabasit,
不幸的是,没有关于服务的发现流程的文件。但是,您可以看看RW-BLE-GATT-IS PDF,在其中记录了服务发现命令和消息,您还可以使用邻近监视器应用程序来检查应用程序之间的交互和580中的配置文件发生,它比DSP和消息更简单。
谢谢mt_dialog.
嗨mt_dialog,
基于DSPS SDK 5,I调用函数“PRF_DISC_SVC_SEND_128(&spsc_env-> con_info,spsc_env-> last_svc_req)”,以获取连接的设备服务。之后,“gattc_cmp_evt_handler”在gattc完整事件上调用。在此功能中,我没有正确的配置文件服务处理程序。服务处理程序“spsc_env-> sps.svc.shdl”始终为0x00。
可能是什么原因?
这prf_disc_svc_send_128()函数通过最大和最小可用手柄之间的范围发送gattc_disc_cmd,最大可用手柄1达65535,外围设备应响应可用服务位于数据库中的实际处理程序,当服务定位时,您应该得到一个gattc_disc_svc_ind在您的设备上,指示特定的句柄是外设服务的范围,您应该将该服务的句柄存储在spsc_env-> sps.evc.shdl(启动句柄)中,以便在服务发现完成时,您可以搜索适当的手柄以获取可用特征。请检查一下Gattc_disc_svc_ind_handler在DSPS主机应用程序中。
谢谢你。我们有gattc_disc_svc_ind,它给出了服务的处理程序,并且正确读取了相关的uuid。之后,我们发现了使用prf_disc_char_all_send(..)函数的属性触发gattc_disc_char_ind,它正确地为特征和关联的uuids提供了处理程序。
接下来当我们尝试使用函数rf_read_char_send(&spsc_env-> con_info,0x00,0xff,spsc_env-> abrs.chars [0] .char_hdl);当我们尝试读取两个字节的特征对于简单的读取,这为我们提供了与处理程序函数static int gattc_read_ind_handler(ke_msg_id_t const msgid,struct gattc_read_ind const * param,ke_task_id_t const dest_id,ke_task_id_t const src_id)
但收到的长度是不正确的i.e.ex13而不是2.读取值始终是固定的,即0x022a是错误的,并且它应该随着每次读取而改变它。
你能指导我们做错了什么措施或我们需要在我们结束时检查的东西。外围方面是Android应用程序。
谢谢,
我想我们在功能中使用错误的处理程序rf_read_char_send(&spsc_env-> con_info,0x00,0xff,spsc_env-> abrs.chars [0] .char_hdl);即abrs.chars [0] .char_hdl。应该使用valhdl来解决问题。从客户端开始的特征读写正在运行。
谢谢。
嗨Sabasit!
我还在研究基于核心角色的GATT客户端。我有问题了解GATT客户端的数据流。你能描述GATT客户端的流动吗?优选地,如果您可以共享一个小型代码片段,如何在远程外设上读取和写入简单的128位UUID?
谢谢!
嗨quangng,
如上所述,如果您正在寻找一个示例,您可以查看DSP主机示例并检查主机适用的发现过程以及上面提到的文档,即RW_BLE_GATT_IS解释命令以及预期的响应,查看段落4.4。还通过邮件提供了一些细节。
嗨sabasit,
不幸的是,没有关于服务的发现流程的文件。但是,您可以看看RW-BLE-GATT-IS PDF,在其中记录了服务发现命令和消息,您还可以使用邻近监视器应用程序来检查应用程序之间的交互和580中的配置文件发生,它比DSP和消息更简单。
谢谢mt_dialog.
嗨mt_dialog,
基于DSPS SDK 5,I调用函数“PRF_DISC_SVC_SEND_128(&spsc_env-> con_info,spsc_env-> last_svc_req)”,以获取连接的设备服务。之后,“gattc_cmp_evt_handler”在gattc完整事件上调用。在此功能中,我没有正确的配置文件服务处理程序。服务处理程序“spsc_env-> sps.svc.shdl”始终为0x00。
可能是什么原因?
谢谢,
Sabasit.
嗨sabasit,
这prf_disc_svc_send_128()函数通过最大和最小可用手柄之间的范围发送gattc_disc_cmd,最大可用手柄1达65535,外围设备应响应可用服务位于数据库中的实际处理程序,当服务定位时,您应该得到一个gattc_disc_svc_ind在您的设备上,指示特定的句柄是外设服务的范围,您应该将该服务的句柄存储在spsc_env-> sps.evc.shdl(启动句柄)中,以便在服务发现完成时,您可以搜索适当的手柄以获取可用特征。请检查一下Gattc_disc_svc_ind_handler在DSPS主机应用程序中。
谢谢mt_dialog.
嗨mt_dialog,
谢谢你。我们有gattc_disc_svc_ind,它给出了服务的处理程序,并且正确读取了相关的uuid。之后,我们发现了使用prf_disc_char_all_send(..)函数的属性触发gattc_disc_char_ind,它正确地为特征和关联的uuids提供了处理程序。
接下来当我们尝试使用函数rf_read_char_send(&spsc_env-> con_info,0x00,0xff,spsc_env-> abrs.chars [0] .char_hdl);当我们尝试读取两个字节的特征对于简单的读取,这为我们提供了与处理程序函数static int gattc_read_ind_handler(ke_msg_id_t const msgid,
struct gattc_read_ind const * param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
但收到的长度是不正确的i.e.ex13而不是2.读取值始终是固定的,即0x022a是错误的,并且它应该随着每次读取而改变它。
你能指导我们做错了什么措施或我们需要在我们结束时检查的东西。外围方面是Android应用程序。
谢谢,
我想我们在功能中使用错误的处理程序rf_read_char_send(&spsc_env-> con_info,0x00,0xff,spsc_env-> abrs.chars [0] .char_hdl);即abrs.chars [0] .char_hdl。应该使用valhdl来解决问题。从客户端开始的特征读写正在运行。
谢谢。
嗨Sabasit!
我还在研究基于核心角色的GATT客户端。我有问题了解GATT客户端的数据流。你能描述GATT客户端的流动吗?优选地,如果您可以共享一个小型代码片段,如何在远程外设上读取和写入简单的128位UUID?
谢谢!
嗨quangng,
如上所述,如果您正在寻找一个示例,您可以查看DSP主机示例并检查主机适用的发现过程以及上面提到的文档,即RW_BLE_GATT_IS解释命令以及预期的响应,查看段落4.4。还通过邮件提供了一些细节。
谢谢mt_dialog.