嗨对话小组,
我是新人在BLE中,并尝试根据SDK5.0.4在DA14580上运行BLE_APP_PERITELAL项目。(EVK Pro)中央设备是iPhone App LightBlue。我的最终目标是阅读由iPhone控制的加速度传感器值。
作为第一步,我想看看我是否可以在DA14580上捕获事件,要做它,在回调函数中设置了几个断点,如gattc_write_cmd_ind_handler,custs1_val_ind_req_handler和custs1_val_ntf_req_handler在文件custs1_task.c中。
之后,如果我在闪烁中推送“写新值”,那么我可以看到程序停止在Gattc_write_cmd_ind_handler函数中,这也是预期的。但如果我在闪烁中推动“读”,则程序中的任何事情都不会发生任何事情。LightBlue也显示出“没有价值”的原因是什么?
例如,我知道已经有几个关于这个问题的线程,例如
- 使用通知而不是读取,因为读访问直接BLE堆栈
- SDK 5.0.4将解决它
- 将ble_app_peripheral作为参考
等等
我尝试了所有这些,但没有成功。所以
1.您能告诉我哪个示例代码可以从LightBlue处理“读取”
如果没有这样的例子,你会告诉我我应该做哪些步骤?更多细节对我来说非常有帮助
3.闪烁的右移动应用程序用于测试“读”?如果没有,你会推荐哪个应用程序?
非常感谢
安东
关键词:
设备:
我读取了SDK5.0.4的发行说明,并发现SDK 5.0.4中也支持GattC_Read_cmd_ind。所以我试图做下面的模数到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
在此步骤中,我只需使用消息ID Custs1_Val_Read_ind发送Custs1_Val_Read_ind消息(模拟到Custs1_Val_Write_ind)
3.然后我实现了用于读取文件user_peripheral.c中的user_catch_rest_hndl函数中的2nd 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中显示“没有值”。
但是对于“写入”,我可以看到程序跳入写处理程序,没有断点,它可以打开/关闭LED。
所以它告诉我,Gattc_Read_cmd_ind仍然无法正常工作。“读”处理有什么问题?你能给我更多细节吗?
谢谢
安东
你好,
请参考RW-BLE-GATE。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)
你好,
根据您的建议,我试图首先在哪里读取描述特征,但没有成功:
- 仅在整个项目中搜索“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是“读取”激活浅蓝色之后的事件
- Custs1_val_set_req_handler()应用于设置值
但是在BLE_APP_PERITELAL项目的帮助下,我仍然无法捕获读流
您是否会告诉我浅蓝色和DA14580之间的读取流程有什么细节,详细说明特征?
谢谢
似乎从浅蓝色的读取请求从不传递到DA14580用户应用层,这就是我无法捕获此类事件的原因。(但为什么写作?)如果是真的,请您告诉我我在外围侧的用户应用层中处理中央设备的工作流程是什么?我已经在这个问题上度过了一周,请帮我解决它。非常感谢
安东
我验证了我可以设置ADC_VAL2_CHAR,我可以使用CUSTS1_VAL_SET_REQ从LIGHTBLUE OS读取它。
我还确认了您发现的内容,关于未传递到应用程序层的消息。我正在挖掘这个,一旦找到解决方案就会回复。
我不知道如何使用custs1_val_set_req(),但在研究DSP示例之后,我还确认了一个可以使用custs1_val_set_req设置值。然后可以通过闪烁读取该值。我正在等待您的解决方案,了解用户应用层的读取指示。谢谢
抱歉延迟,只是在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错误响应发送给对等设备。
我想展示我们的客户,即读取传感器数据可以由他的iPhone控制。我虽然因为写入gattc_write_cmd_ind,但是必须有读取的模拟指示。发布说明中提到的部分似乎比gattc_write_cmd_ind更复杂,因此我不确定它是否是正确的方法来做。谢谢你的提示,租约我知道现在释放的部分是正确的方法。票可以关闭。