无法从iPhone应用程序读取特征值(浅蓝色)

9个帖子/ 0新
最后发表
muxf.
离线
最后看到:3年5个月前
加入:2016-07-25事故发生
无法从iPhone应用程序读取特征值(浅蓝色)

嗨,对话框的团队,

我是BLE的新手,尝试在DA14580上运行基于SDK5.0.4的ble_app_peripheral项目。中心设备是iPhone应用程序LightBlue。我的最终目标是读取iPhone控制的加速器传感器值。

作为第一步,我想看看我是否可以在DA14580上捕获事件,要做它,在回调函数中设置了几个断点,如gattc_write_cmd_ind_handler,custs1_val_ind_req_handler和custs1_val_ntf_req_handler在文件custs1_task.c中。

之后,如果我在LightBlue中按下“write new value”,那么我可以看到程序在gattc_write_cmd_ind_handler函数中停止,这也是预期的。但是如果我按下浅蓝色的“读”键,程序中什么也不会发生。浅蓝色也表示“没有价值”,原因是什么?

例如,我知道已经有几个线程在讨论这个问题了

-使用通知而不是读,因为读直接访问BLE堆栈
SDK 5.0.4会修复的
-以ble_app_peripheral为例
等等

这些我都试过了,但都没有成功。所以

1.您能告诉我哪个示例代码可以从LightBlue处理“读取”
2.如果没有这样的例子,请告诉我接下来要做哪些步骤?多说一点细节对我很有帮助
3.LightBlue是否适合测试“阅读”?如果没有,你会推荐哪款应用呢?

非常感谢

安东

关键词:
设备:
muxf.
离线
最后看到:3年5个月前
加入:2016-07-25事故发生
我读了发布说明

我读了SDK5.0.4的发布说明,发现GATTC_READ_CMD_IND现在也支持SDK5.0.4。所以我尝试对GATTC_WRITE_CMD_IND做如下模拟:

1.在custs1_task.c中添加GATTC_READ_CMD_IND的处理程序定义
{GATTC_READ_CMD_IND (ke_msg_func_t) gattc_read_cmd_ind_handler}

2.在Custs1_task.c中实现gattc_read_cmd_ind_handler
在这一步中,我只发送custs1_val_read_ind消息(模拟custs1_val_write_ind),消息ID为custs1_val_read_ind

3.然后实现切换用例,读取文件user_peripherl .c中user_catch_rest_hndl函数中的第二个ADC值
...
案例CUSTS1_VAL_READ_IND:

struct musts1_val_read_ind const * msg_param =(struct custs1_val_read_ind const *)(param);
交换机(msg_param->句柄)

案例CUST1_IDX_ADC_VAL_2_VAL:
int sta = 0;
休息;
默认值:
休息;

}休息;
...
4.我将断点设置为int sta=0,然后运行LightBlue将ADC第二个值的“再次读取”。(iPhone和DA14580之间的连接可以很好地建立)如前所述,此时,我没有看到程序跳转到断点,并且在LightBlue中显示“no value”。
但是对于“写”,我可以看到程序跳转到写处理程序,并且没有断点,它可以打开/关闭LED。

所以它告诉我,Gattc_Read_cmd_ind仍然无法正常工作。“读”处理有什么问题?你能给我更多细节吗?
谢谢

安东

JK_Dialog
离线
最后看到:5个月32分钟前
工作人员
加入:2016-08-22 23:07
你好,

你好,

请参考RW-BLE-GATT-IS。GATTC_READ_CMD_IND不是有效命令。请参阅接口规范第21页,使用GATTC_READ_IND进行回调。

此外,在ble_app_peripheral的基本版本中,没有向值特征中写入任何内容。但是,描述属性是由浅蓝色应用程序写入和读取的。在应用程序的连接上,iPhone会读取所有的描述特征,你应该在这里得到一个回调。

试着替换上面的小变化,然后在580上,试着改变值特征并验证你能读懂值。

使用下面的处理程序设置值:

静态INT CUSTS1_VAL_SET_REQ_HANDLER(KE_MSG_ID_T CONST MSGID,
struct musts1_val_set_req const * param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)

muxf.
离线
最后看到:3年5个月前
加入:2016-07-25事故发生
你好,

你好,
根据你的建议,我先试着找出描述特征在哪里会被阅读,但是没有成功:

- 仅在整个项目中搜索“cust1_adc_val_2_user_desc”--->仅在客户数据库定义中显示(user_custs1_def.c)

- 在整个项目中搜索“gattc_read_ind”--->“gattc_read_ind”可以通过文件prf_utils.c中的函数prf_client_att_info_rsp()调用
--->但它(prf_client_att_info_rsp())永远不会被其他函数调用。

-在函数prf_client_att_info_rsp()中设置断点,然后运行浅蓝色,可以很好地建立连接,但程序不会跳转
导入函数prf_client_att_info_rsp()

简介:

到目前为止,我掌握了你的帮助
- GATTC_READ_IND是浅蓝色激活的“read”后的事件
-应该使用custs1_val_set_req_handler()来设置值
但是在BLE_APP_PERITELAL项目的帮助下,我仍然无法捕获读流

您是否会告诉我浅蓝色和DA14580之间的读取流程有什么细节,详细说明特征?

谢谢

muxf.
离线
最后看到:3年5个月前
加入:2016-07-25事故发生
似乎读到

似乎来自Light Blue的读请求从来没有传递到DA14580用户应用层,这就是为什么我不能捕捉到这样的事件。(但是为什么可以写呢?)如果是真的,请问我在外设用户应用层的中心设备上处理这样的读请求的工作流程是怎样的?这个问题我已经花了一个星期了,请帮我解决。非常感谢

安东

JK_Dialog
离线
最后看到:5个月32分钟前
工作人员
加入:2016-08-22 23:07
我验证了我可以设置

我验证了可以设置ADC_VAL2_CHAR,并且可以使用custs1_val_set_req从lightBlue操作系统读取它。

我还确认了您发现的内容,关于未传递到应用程序层的消息。我正在挖掘这个,一旦找到解决方案就会回复。

muxf.
离线
最后看到:3年5个月前
加入:2016-07-25事故发生
我不知道怎么用

我不知道如何使用custs1_val_set_req(),但在研究DSP示例之后,我还确认了一个可以使用custs1_val_set_req设置值。然后可以通过闪烁读取该值。我正在等待您的解决方案,了解用户应用层的读取指示。谢谢

JK_Dialog
离线
最后看到:5个月32分钟前
工作人员
加入:2016-08-22 23:07
抱歉延迟,只是

抱歉延迟,只是在Thsi上获得一些答案。此外,我可以问你为什么需要这个功能的申请吗?此外,您是否读到了软件发行说明中的​​读取,描述了对事件注册?以下是如何实现此功能的基本原则:

***********************************************************************************************************************

介绍ATTS_READ_REQ_IND消息。该消息包含对等设备请求读取的属性的句柄。

要求此机制的任务通常使用dg_register_task_for_read_request()C API在DB创建时间下注册ATTS_READ_REQ_IND消息。

在接收到ATTS_READ_REQ_IND消息后,任务可以修改ATT DB,然后它必须通过调用dg_atts_read_cfm()来应答。有两个用例:

任务决定请求请求有效,(可选地)修改DB中的值,最终通过在DG_atts_read_cfm()的status_code参数中传递att_err_no_error来回复。这导致将ATT读取响应声发送到对等设备。

任务决定读取请求无效,并通过将ATT错误代码传递给DG_Atts_Read_cfm()来响应。这导致将ATT错误响应发送给对等设备。

muxf.
离线
最后看到:3年5个月前
加入:2016-07-25事故发生
我想展示一下我们的

我想展示我们的客户,即读取传感器数据可以由他的iPhone控制。我虽然因为写入gattc_write_cmd_ind,但是必须有读取的模拟指示。发布说明中提到的部分似乎比gattc_write_cmd_ind更复杂,因此我不确定它是否是正确的方法来做。谢谢你的提示,租约我知道现在释放的部分是正确的方法。票可以关闭。