⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
18个帖子/ 0新
最后一篇
Lewuyouc.
离线
最后一次露面:1年8个月前
加入:2016-07-18 01:38
指示和通知

你好

我修改da1458x_sdk \ 5.0.4 \ projects \ target_apps \ ble_examples \ prox_reporter。

请解释指示与Prox_reporter项目之间的差异。

迹象是如何解决数据包丢失问题。

请告诉我指示函数的调用过程。

谢谢!

关键词:
设备:
pw_dialog.
离线
最后一次露面:3周6天前
职员
加入:2019-04-03 02:54
嗨Lewuyouc,

嗨Lewuyouc,

差异是指示有数据接收的确认,但通知没有。

Lewuyouc.
离线
最后一次露面:1年8个月前
加入:2016-07-18 01:38
嗨pw_dialog

嗨pw_dialog

da1458x_sdk \ 5.0.4 \ projects \ target_apps \ ble_examples \ prox_reporter如何确认收到的数据?

如果发送失败,如何解决它?

谢谢

pw_dialog.
离线
最后一次露面:3周6天前
职员
加入:2019-04-03 02:54
嗨Lewuyouc,

嗨Lewuyouc,

为了确认数据很好,数据接收器可以将ACK发送到发件人,并且发送方如果在某个时段之后无法获得ACK,则可以再次发送数据。

Lewuyouc.
离线
最后一次露面:1年8个月前
加入:2016-07-18 01:38
嗨pw_dialog

嗨pw_dialog

谢谢您的支持。

如果断开连接,则发件人将数据发送到手机始终失败,因此从设备将再次发送数据?或断开连接,从属使用指示错误?

“要确认数据很好,数据接收器可以将ACK发送回发件人,并且发送者可以重复发送数据如果在某个时段之后无法获得ACK。”你能给我一些源代码参考吗?

pw_dialog.
离线
最后一次露面:3周6天前
职员
加入:2019-04-03 02:54
嗨Lewuyouc,

嗨Lewuyouc,

这可以被视为状态机流,如果断开状态也会被改变,则将在断开状态(例如,准备重新连接)中进行相应的动作(而不是重新发送数据)。

Lewuyouc.
离线
最后一次露面:1年8个月前
加入:2016-07-18 01:38
嗨pw_dialog

嗨pw_dialog

谢谢,但我需要一个完整的例子。

da1458x_sdk \ 5.0.4 \ projects \ target_apps \ ble_example \ ble_app_all_in_one关于指示是不完整的。

谢谢!

cyibin.
离线
最后一次露面:6个月1周前
职员
加入:2017-12-14 02:48
嗨Lewuyouc,

嗨Lewuyouc,

从用户的角度来看,IND和NOTF之间没有任何差异。用户可以做的只是为了向SDK发送命令并等待其反馈。用户无法看到进程的源代码。

要发送NOTF,使用gattc_notify参数的gattc_send_evt_cmd从用户图层发送到SDK图层。

发送一个人,使用gattc_indicate参数的gattc_send_evt_cmd从用户图层发送到SDK层。

在发送上述命令之后,SDK层将反馈结果到用户层:

对于NOTF,no_error状态表示数据已从BLE外设发送数据。我们不知道BLE中央是否已收到。

对于IND,NO_ERROR状态表示数据已从BLE外设发送到Central。毫无疑问,中央收到了数据。

布尔

宜宾

Lewuyouc.
离线
最后一次露面:1年8个月前
加入:2016-07-18 01:38
你好

你好

我使用Infimate将我的数据发送到手机。

struct musts1_val_ind_req * req = ke_msg_alloc_dyn(custs1_val_ind_req,task_custs1,task_app,custs1_val_ind_req,def_cust1_indicatabled_char_len);req-> conhdl = app_env-> conhdl;req-> handle = cust1_idx_indicateable_val;req-> length = def_cust1_indicatable_char_len;memcpy(req-> value,&status_value,def_cust1_indicateable_char_len);KE_MSG_SEND(REQ);

“在发送上面的命令后,SDK层会将结果反馈给用户层:”我不知道如何获得结果。

谢谢!

cyibin.
离线
最后一次露面:6个月1周前
职员
加入:2017-12-14 02:48
嗨Lewuyouc,

嗨Lewuyouc,

要将数据发送到SDK图层,您可以在SDK中找到以下API:

空隙prf_server_send_event(prf_env_struct * p_env,布尔指示,uint16_t手柄){//分配关贸总协定通知消息结构gattc_send_evt_cmd * REQ = KE_MSG_ALLOC(GATTC_SEND_EVT_CMD,KE_BUILD_ID(TASK_GATTC,p_env-> con_info.conidx),p_env-> con_info.prf_id,gattc_send_evt_cmd);//填写参数结构req-> req_type =((指示)?gattc_indicate:gattc_notify);req-> handle = handle;//发送事件ke_msg_send(req);}

要在发送数据后从SDK图层获取结果,您可以在回调函数中处理GattC_CMP EVET:

静态int gattc_cmp_evt_handler(ke_msg_id_t const msgs,struct gattc_cmp_evt const * param,ke_task_d_t const dest_id,ke_task_id_t const src_id){if(param-> req_type == gattc_notify){//通知应用程序已在空中发送通知PDU。struct musts1_val_ntf_cfm * cfm = ke_msg_alloc(custs1_val_ntf_cfm,custs1_env.con_info.appid,custs1_env.con_info.prf_id,custs1_val_ntf_cfm);cfm-> handle = custs1_env.ntf_handle;cfm-> conhdl = gapc_get_conhdl(custs1_env.con_info.conidx);cfm-> status = param->状态;KE_MSG_SEND(CFM);}否则if(param-> req_type == gattc_indicate){//通知应用程序通过对等设备确认指示。struct musts1_val_ind_cfm * cfm = ke_msg_alloc(custs1_val_ind_cfm,custs1_env.con_info.appid,custs1_env.con_info.prf_id,custs1_val_ind_cfm);cfm-> handle = custs1_env.ind_handle;cfm-> conhdl = gapc_get_conhdl(custs1_env.con_info.conidx); cfm->status = param->status; ke_msg_send(cfm); } return (KE_MSG_CONSUMED); }

布尔

cyibin.

Lewuyouc.
离线
最后一次露面:1年8个月前
加入:2016-07-18 01:38
嗨,Cyibin.

嗨,Cyibin.

谢谢你的支持。

void user_catch_rest_hndl(ke_msg_id_t const msgid,
void const * param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)

Case Musts1_Val_ind_cfm:在user_catch_rest_hndl()中可以获得反馈结果。

谢谢!

cyibin.
离线
最后一次露面:6个月1周前
职员
加入:2017-12-14 02:48
嗨Lewuyouc,不客气br cyibin

嗨Lewuyouc,

不到

布尔

cyibin.

Lewuyouc.
离线
最后一次露面:1年8个月前
加入:2016-07-18 01:38
你好

你好

“不同之处在于指示已经确认data receiving, but notify does not. "

但函数void user_catch_rest_hndl(ke_msg_id_t const msgs,void const * param,ke_task_id_t const dest_id,ke_task_id_t const src_id)

案例custs1_val_ntf_cfm:
struct musts1_val_ntf_cfm const * msg_param =(struct custs1_val_ntf_cfm const *)(param);

/// @ref custs1_val_ntf_cfm按摩的参数
struct musts1_val_ntf_cfm.
{
///连接句柄
uint16_t conhdl;
///掌握已更新的属性
UINT16_T手柄;
///确认状态
UINT8_T状态;
};

为什么我们可以获得通知反馈状态?

如果通知发送成功,则msg_param-> status = 0x00,否则msg_param-> status = 0x8b。

通知也可以确认收到数据?

PM_DIALOG.
离线
最后一次露面:22小时24分钟前
职员
加入:2018-02-08 11:03
嗨Lewuyouc.

嗨Lewuyouc.

是的,pw_dialog是正确的,不同的是指示有数据收到的数据,但通知没有。Custs1_Val_ntf_cfm是您将Custs1_Val_ntf_req消息按到BLE堆栈的堆栈中的确认。它不是从中央成功收到数据的确认。每当您发送通知时,您将获得CUSTS1_VAL_NTF_CFM(对于自定义配置文件),一旦您获得此操作,您就会知道只需发送通知即可将其传送到中央,因此您可以直接放置第二个通知。您必须等待Custs1_val_ntf_cfm在发送相同特征的下一个通知之前到达,如果不是,请使用后一个值更新值的数据库,并且当内核将通知推入缓冲区时,它将推送两个通知值,因为从数据库中获取通知的值。如果您发现有用的任何答案,请将其标记为“已接受”。

谢谢,PM_DIALOG.

Lewuyouc.
离线
最后一次露面:1年8个月前
加入:2016-07-18 01:38
嗨pw_dialog

嗨pw_dialog

感谢你的回复。

SO CUSTS1_VAL_IND_CFM与CUSTS1_VAL_NTF_CFM相同?custs1_val_ind_cfm确保发送下一个事件。

请告诉我,我的ble设备如何知道手机成功收到数据?

期待你的答复!

PM_DIALOG.
离线
最后一次露面:22小时24分钟前
职员
加入:2018-02-08 11:03
嗨Lewuyouc,

嗨Lewuyouc,

您可以使用指示而不是通知,以便确认数据接收。要从迹象开始,从外设启动(就像通知,而是使用应用程序确认当值达到外围设备时)而不是中央,外围设备只能向中央发送指示而不是相反的方式。因此,为了从外设发送迹象,您只需从应用程序发送该消息,中央不会读取可指示的值,它只是指示中央的价值,中央的外围设备只是确认他收到从外设发送的消息。发送指示时,您应该发出gattc_send_evt_cmd,该消息应该具有响应GattC_CMP_EVT。之后,gattc_cmp_evt将从custs1_task.c中触发gattc_cmp_evt_handler()。请注意,当中央正确接收的中央确认时,将触发指示。为了看看如何申报可滥用的特征,请查看SDK的BLE_APP_PERITEDAL示例。

谢谢,PM_DIALOG.

Lewuyouc.
离线
最后一次露面:1年8个月前
加入:2016-07-18 01:38
嗨pw_dialog

嗨pw_dialog

谢谢,我会尝试这样做。

我们可以使用malloc()函数吗?我需要创建一个长链接。

PM_DIALOG.
离线
最后一次露面:22小时24分钟前
职员
加入:2018-02-08 11:03
嗨Lewuyouc,

嗨Lewuyouc,

我能够理解你想要完成的东西,但是你可以使用它。您也可以使用ke_malloc。

谢谢,PM_DIALOG.