indication and notify

⚠️
Hi there.. thanks for coming to the forums. Exciting news! we’re now in the process of moving to our new forum platform that will offer better functionality and is contained within the main Dialog website. All posts and accounts have been migrated. We’re now accepting traffic on the new forum only - please POST any new threads at//www.wsdof.com/support. We’ll be fixing bugs / optimising the searching and tagging over the coming days.
18个帖子/ 0新
Last post
lewuyouc
Offline
最后一次露面:1年8个月前
加入:2016-07-18 01:38
indication and notify

Hi

I modify DA1458x_SDK\5.0.4\projects\target_apps\ble_examples\prox_reporter.

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

Indication is how to solve the problem of packet loss.

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

谢谢!

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

嗨Lewuyouc,

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

lewuyouc
Offline
最后一次露面:1年8个月前
加入:2016-07-18 01:38
Hi PW_Dialog

Hi PW_Dialog

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

if send fail,how to solve it?

谢谢

pw_dialog.
Offline
最后一次露面:3周3天前
Staff
加入:2019-04-03 02:54
嗨Lewuyouc,

嗨Lewuyouc,

To confirm the data is well received, data receiver could send back ack to sender, and sender may send the data again if can't get the ack after certain period.

lewuyouc
Offline
最后一次露面:1年8个月前
加入:2016-07-18 01:38
Hi PW_Dialog

Hi PW_Dialog

Thank you for your support.

if disconnect,the sender send data to phone is always fail, so the slave will aiways send data again? or disconnect,the slave use indication is wrong?

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

pw_dialog.
Offline
最后一次露面:3周3天前
Staff
加入:2019-04-03 02:54
嗨Lewuyouc,

嗨Lewuyouc,

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

lewuyouc
Offline
最后一次露面:1年8个月前
加入:2016-07-18 01:38
Hi PW_Dialog

Hi PW_Dialog

谢谢,But I need a indication complete example.

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

谢谢!

CYibin
Offline
最后一次露面:6 months 1 week ago
Staff
加入:2017-12-14 02:48
嗨Lewuyouc,

嗨Lewuyouc,

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

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

To send a IND, the使用gattc_indicate参数的gattc_send_evt_cmd从用户图层发送到SDK层。

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

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

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

布尔

宜宾

lewuyouc
Offline
最后一次露面:1年8个月前
加入:2016-07-18 01:38
Hi

Hi

I use infication send my data to phone.

struct custs1_val_ind_req* req = KE_MSG_ALLOC_DYN(CUSTS1_VAL_IND_REQ, TASK_CUSTS1, TASK_APP, custs1_val_ind_req, DEF_CUST1_INDICATEABLE_CHAR_LEN); req->conhdl = app_env->conhdl; req->handle = CUST1_IDX_INDICATEABLE_VAL; req->length = DEF_CUST1_INDICATEABLE_CHAR_LEN; memcpy(req->value, &status_value, DEF_CUST1_INDICATEABLE_CHAR_LEN); ke_msg_send(req);

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

谢谢!

CYibin
Offline
最后一次露面:6 months 1 week ago
Staff
加入:2017-12-14 02:48
嗨Lewuyouc,

嗨Lewuyouc,

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

void prf_server_send_event(prf_env_struct *p_env, bool indication, uint16_t handle) { // Allocate the GATT notification message struct 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); // Fill in the parameter structure req->req_type = ((indication) ? GATTC_INDICATE : GATTC_NOTIFY); req->handle = handle; // Send the event ke_msg_send(req); }

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

static int gattc_cmp_evt_handler(ke_msg_id_t const msgid, struct gattc_cmp_evt const *param, ke_task_id_t const dest_id, ke_task_id_t const src_id) { if (param->req_type == GATTC_NOTIFY) { // Inform the application that the notification PDU has been sent over the air. struct custs1_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->status; ke_msg_send(cfm); } else if (param->req_type == GATTC_INDICATE) { // Inform the application that the indication has been confirmed by the peer device. struct custs1_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
Offline
最后一次露面: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
Offline
最后一次露面:6 months 1 week ago
Staff
加入:2017-12-14 02:48
嗨Lewuyouc,不客气br cyibin

嗨Lewuyouc,

不客气

布尔

CYibin

lewuyouc
Offline
最后一次露面:1年8个月前
加入:2016-07-18 01:38
Hi

Hi

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

但函数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)

case 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.
{
/// Connection handle
uint16_t conhdl;
///掌握已更新的属性
UINT16_T手柄;
/// Confirmation status
UINT8_T状态;
};

why we can get notify feedback status?

if notify send success,the msg_param->status=0x00,else the msg_param->status=0x8B.

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

PM_DIALOG.
在线的
最后一次露面:10分18秒前
Staff
加入: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
Offline
最后一次露面:1年8个月前
加入:2016-07-18 01:38
Hi PW_Dialog

Hi PW_Dialog

感谢你的回复。

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

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

Looking forward to your reply!

PM_DIALOG.
在线的
最后一次露面:10分18秒前
Staff
加入:2018-02-08 11:03
嗨Lewuyouc,

嗨Lewuyouc,

You could use indications instead of notifications in order to have a confirmation of data receiving. To start with the indications are initiated from the peripheral (just like notifications but with application confirmation when the value reaches the peripheral) and not the central, the peripheral can only send indications towards the central and not the other way around. So in order to send an indication from a peripheral you just have to send that message from your application, the central doesn't read the indicatable value, it is just the peripheral that indicates that value to the central, the central just confirms that he received the message sent from the peripheral. When you send an indication, you should issue a GATTC_SEND_EVT_CMD and that message should have as a response a GATTC_CMP_EVT. After that, the GATTC_CMP_EVT will trigger the gattc_cmp_evt_handler() from the custs1_task.c. Be aware that the indication will be triggered when there is a confirmation from the central that the indication is correctly received by the central. In order to see how to declare an indictable characteristic, please take a look at the ble_app_peripheral example of the SDK.

谢谢,PM_DIALOG.

lewuyouc
Offline
最后一次露面:1年8个月前
加入:2016-07-18 01:38
Hi PW_Dialog

Hi PW_Dialog

谢谢,我会试着这样做。

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

PM_DIALOG.
在线的
最后一次露面:10分18秒前
Staff
加入:2018-02-08 11:03
嗨Lewuyouc,

嗨Lewuyouc,

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

谢谢,PM_DIALOG.