嗨,对话框中,
我正在使用DA14580为中心角色应用程序工作。我下面是DSPS SDK 5主机的例子。我突然发现了GATT外围配置文件的服务和属性。代码不是很清楚。是否有一些文档或其他具有中心角色的简单代码示例来显示中心端GATT命令和事件的适当流程。
我使用Android智能手机作为外设。
谢谢,sabasit
嗨sabasit,
不幸的是,没有关于服务发现流程的文档。但是你可以看一看服务发现的RW-BLE-GATT-IS pdf命令和消息记录,您还可以使用近距离监视应用程序为了检查应用程序之间的交互和概要文件在580年发生,它比需求方和简单的消息。
由于MT_dialog
嗨MT_dialog,
基于DSPS SDK 5,我在连接时调用函数“prf_disc_svc_send_128(&spsc_env->con_info, spsc_env->last_svc_req)”来获取已连接设备的服务。在GATTC complete事件上调用“gattc_cmp_evt_handler”之后。在这个函数中,我没有得到正确的配置文件服务处理程序。服务处理程序"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(启动句柄),这样当服务发现完成时,您就可以搜索可用特征的适当句柄。请检查DSPS主机应用程序中的gattc_disc_svc_ind_handler。
谢谢你!我们得到了GATTC_DISC_SVC_IND,它给出了服务的处理程序,并且正确读取了相关的UUID。之后,我们使用prf_disc_char_all_send(..)函数发现属性,该函数触发GATTC_DISC_CHAR_IND,并正确地给出特征处理程序和关联的uuid。
接下来,当我们试图读取两个字节的特征值时,使用函数rf_read_char_send(&spsc_env->con_info, 0x00, 0xFF, spsc_env->abr .chars[0].char_hdl);对于简单的读取,这给了我们事件GATTC_READ_IND和handler函数gattc_read_ind const *param,ke_task_id_t const dest_id,ke_task_id_t const src_id)
但是接收到的长度是不正确的,即0x13而不是2。而值读是固定的,即0x022A,这是错误的,它应该是改变与每次读取。
你能告诉我们哪些步骤是错误的,哪些是我们需要检查的吗?外围设备是一个Android应用程序。
谢谢,
我猜我们使用错误的处理程序在函数rf_read_char_send(&spsc_env->con_info, 0x00, 0xFF, spsc_env->abr .chars[0].char_hdl);即abrs.chars [0] .char_hdl。应该使用valhdl来解决这个问题。客户端特有的读写正在工作。
谢谢。
嗨sabasit !
我也在为GATT客户端工作一个基于中心角色的设备。我理解GATT客户端的数据流程有问题。你能描述一下关贸总协定客户端的流程吗?如果可以共享一个小代码片段,那么如何在远程外设上读取和写入一个简单的128位UUID ?
谢谢你!
嗨quangng,
正如上面提到的,如果你正在寻找一个例子,你可以看一下DSPS HOST的例子,检查主机应用的发现过程,还有上面提到的文档,RW_BLE_GATT_IS解释了命令以及预期的响应,检查第4.4段。也有一些细节通过邮件提供。
嗨sabasit,
不幸的是,没有关于服务发现流程的文档。但是你可以看一看服务发现的RW-BLE-GATT-IS pdf命令和消息记录,您还可以使用近距离监视应用程序为了检查应用程序之间的交互和概要文件在580年发生,它比需求方和简单的消息。
由于MT_dialog
嗨MT_dialog,
基于DSPS SDK 5,我在连接时调用函数“prf_disc_svc_send_128(&spsc_env->con_info, spsc_env->last_svc_req)”来获取已连接设备的服务。在GATTC complete事件上调用“gattc_cmp_evt_handler”之后。在这个函数中,我没有得到正确的配置文件服务处理程序。服务处理程序"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(启动句柄),这样当服务发现完成时,您就可以搜索可用特征的适当句柄。请检查DSPS主机应用程序中的gattc_disc_svc_ind_handler。
由于MT_dialog
嗨MT_dialog,
谢谢你!我们得到了GATTC_DISC_SVC_IND,它给出了服务的处理程序,并且正确读取了相关的UUID。之后,我们使用prf_disc_char_all_send(..)函数发现属性,该函数触发GATTC_DISC_CHAR_IND,并正确地给出特征处理程序和关联的uuid。
接下来,当我们试图读取两个字节的特征值时,使用函数rf_read_char_send(&spsc_env->con_info, 0x00, 0xFF, spsc_env->abr .chars[0].char_hdl);对于简单的读取,这给了我们事件GATTC_READ_IND和handler函数
gattc_read_ind const *param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
但是接收到的长度是不正确的,即0x13而不是2。而值读是固定的,即0x022A,这是错误的,它应该是改变与每次读取。
你能告诉我们哪些步骤是错误的,哪些是我们需要检查的吗?外围设备是一个Android应用程序。
谢谢,
我猜我们使用错误的处理程序在函数rf_read_char_send(&spsc_env->con_info, 0x00, 0xFF, spsc_env->abr .chars[0].char_hdl);即abrs.chars [0] .char_hdl。应该使用valhdl来解决这个问题。客户端特有的读写正在工作。
谢谢。
嗨sabasit !
我也在为GATT客户端工作一个基于中心角色的设备。我理解GATT客户端的数据流程有问题。你能描述一下关贸总协定客户端的流程吗?如果可以共享一个小代码片段,那么如何在远程外设上读取和写入一个简单的128位UUID ?
谢谢你!
嗨quangng,
正如上面提到的,如果你正在寻找一个例子,你可以看一下DSPS HOST的例子,检查主机应用的发现过程,还有上面提到的文档,RW_BLE_GATT_IS解释了命令以及预期的响应,检查第4.4段。也有一些细节通过邮件提供。
由于MT_dialog