你好
我修改da1458x_sdk \ 5.0.4 \ projects \ target_apps \ ble_examples \ prox_reporter。
请解释指示之间的差异,在prox_reporter项目通知。
迹象是如何解决数据包丢失问题。
请告诉我指示功能的调用过程。
谢谢!
嗨lewuyouc,
所不同的是指示具有数据接收的确认,但通知没有。
嗨pw_dialog.
DA1458x_SDK \ 5.0.4 \项目\ target_apps \ ble_examples \ prox_reporter如何数据接收的确认?
如果发送失败,如何解决它?
谢谢
为了确认数据很好,数据接收器可以将ACK发送到发件人,并且发送方如果在某个时段之后无法获得ACK,则可以再次发送数据。
感谢您的支持。
如果断开连接,则发件人将数据发送到手机始终失败,因此从设备将再次发送数据?或断开连接,从属使用指示错误?
“为了确认数据获好评,接收器可以发回ACK发送者的数据和发送方可以重复发送数据,如果不能获得一定时期后的ACK。”你可以给我一些源代码的参考?
这可以被看作是一个状态机的流动,如果断开状态将被改变,以及,然后相应的操作(而不是重发数据)将被在断开状态采取(例如准备重新连接)。
谢谢,但我需要一个完整的例子。
DA1458x_SDK \ 5.0.4 \项目\ target_apps \ ble_examples \有关指示ble_app_all_in_one是不完整的。
从用户的角度来看,有没有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周边设备发送到中央。毫无疑问,这些数据已被中央接受。
布尔
宜宾
我使用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层将结果反馈给用户层:”我不知道如何获得的结果。
将数据发送给SDK层,你可以找到下面的API在SDK:
空隙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.
嗨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)
案例CUSTS1_VAL_IND_CFM:在user_catch_rest_hndl()可以得到的反馈结果。
不到
“区别是指示有数据接收确认,而通知没有。”
但功能空隙user_catch_rest_hndl(ke_msg_id_t常量MSGID,空隙常量* PARAM,ke_task_id_t const的DEST_ID,ke_task_id_t常量src_id)
案例custs1_val_ntf_cfm:结构custs1_val_ntf_cfm常量* msg_param =(结构custs1_val_ntf_cfm常量*)(PARAM);
///的@ref CUSTS1_VAL_NTF_CFM按摩参数结构custs1_val_ntf_cfm{///连接句柄uint16_t conhdl;///属性的句柄已更新uint16_t手柄;///确认状态uint8_t状态;};
为什么我们可以获得通知反馈状态?
如果通知发送成功,则msg_param-> status = 0x00,否则msg_param-> status = 0x8b。
还通知数据接收的确认无误?
嗨lewuyouc
是的,PW_Dialog是正确的,而不同的是,指示有数据接收的确认,但通知没有。该CUSTS1_VAL_NTF_CFM是从堆栈中确认您已成功推开CUSTS1_VAL_NTF_REQ消息给BLE堆栈。它不是从中央的确认,该数据已成功接收。当你发送通知,你会得到一个CUSTS1_VAL_NTF_CFM(自定义配置文件),一旦你得到这个你就知道,只是发送通知将被传递到中央,这样你就可以直接放置第二个通知。你将不得不等待CUSTS1_VAL_NTF_CFM发送一个通知的相同特性前到达,如果不是你将与后者的值更新值的数据库,当内核推通知到缓冲区这将推动两个通知与同值,由于通知的值是从数据库中获取的。如果你发现任何有用的答案,请标记为“接受”。
谢谢,PM_Dialog
感谢你的回复。
CUSTS1_VAL_IND_CFM和CUSTS1_VAL_NTF_CFM一样吗?确保发送下一个事件。
请告诉我,我的BLE装置如何成功地知道手机接收到的数据?
期待你的答复!
您可以使用指示而不是通知,以便确认数据接收。要从迹象开始,从外设启动(就像通知,而是使用应用程序确认当值达到外围设备时)而不是中央,外围设备只能向中央发送指示而不是相反的方式。因此,为了从外设发送迹象,您只需从应用程序发送该消息,中央不会读取可指示的值,它只是指示中央的价值,中央的外围设备只是确认他收到从外设发送的消息。发送指示时,您应该发出gattc_send_evt_cmd,该消息应该具有响应GattC_CMP_EVT。之后,gattc_cmp_evt将从custs1_task.c中触发gattc_cmp_evt_handler()。请注意,当中央正确接收的中央确认时,将触发指示。为了看看如何申报可滥用的特征,请查看SDK的BLE_APP_PERITEDAL示例。
谢谢,我会尝试这样做。
我们可以用malloc()函数?我需要建立一个长链接。
我是能够理解你正在试图完成的任务,不过是你可以使用它。您可以使用ke_malloc为好。
嗨lewuyouc,
所不同的是指示具有数据接收的确认,但通知没有。
嗨pw_dialog.
DA1458x_SDK \ 5.0.4 \项目\ target_apps \ ble_examples \ prox_reporter如何数据接收的确认?
如果发送失败,如何解决它?
谢谢
嗨lewuyouc,
为了确认数据很好,数据接收器可以将ACK发送到发件人,并且发送方如果在某个时段之后无法获得ACK,则可以再次发送数据。
嗨pw_dialog.
感谢您的支持。
如果断开连接,则发件人将数据发送到手机始终失败,因此从设备将再次发送数据?或断开连接,从属使用指示错误?
“为了确认数据获好评,接收器可以发回ACK发送者的数据和发送方可以重复发送数据,如果不能获得一定时期后的ACK。”你可以给我一些源代码的参考?
嗨lewuyouc,
这可以被看作是一个状态机的流动,如果断开状态将被改变,以及,然后相应的操作(而不是重发数据)将被在断开状态采取(例如准备重新连接)。
嗨pw_dialog.
谢谢,但我需要一个完整的例子。
DA1458x_SDK \ 5.0.4 \项目\ target_apps \ ble_examples \有关指示ble_app_all_in_one是不完整的。
谢谢!
嗨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周边设备发送到中央。毫无疑问,这些数据已被中央接受。
布尔
宜宾
你好
我使用Infimate将我的数据发送到手机。
“上面的命令已经发出后,SDK层将结果反馈给用户层:”我不知道如何获得的结果。
谢谢!
嗨lewuyouc,
将数据发送给SDK层,你可以找到下面的API在SDK:
要在发送数据后得到SDK层的结果,你可以处理程序回调函数中gattc_cmp EVET:
布尔
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)
案例CUSTS1_VAL_IND_CFM:在user_catch_rest_hndl()可以得到的反馈结果。
谢谢!
嗨lewuyouc,
不到
布尔
cyibin.
你好
“区别是指示有数据接收确认,而通知没有。”
但功能空隙user_catch_rest_hndl(ke_msg_id_t常量MSGID,空隙常量* PARAM,ke_task_id_t const的DEST_ID,ke_task_id_t常量src_id)
案例custs1_val_ntf_cfm:
结构custs1_val_ntf_cfm常量* msg_param =(结构custs1_val_ntf_cfm常量*)(PARAM);
///的@ref CUSTS1_VAL_NTF_CFM按摩参数
结构custs1_val_ntf_cfm
{
///连接句柄
uint16_t conhdl;
///属性的句柄已更新
uint16_t手柄;
///确认状态
uint8_t状态;
};
为什么我们可以获得通知反馈状态?
如果通知发送成功,则msg_param-> status = 0x00,否则msg_param-> status = 0x8b。
还通知数据接收的确认无误?
嗨lewuyouc
是的,PW_Dialog是正确的,而不同的是,指示有数据接收的确认,但通知没有。该CUSTS1_VAL_NTF_CFM是从堆栈中确认您已成功推开CUSTS1_VAL_NTF_REQ消息给BLE堆栈。它不是从中央的确认,该数据已成功接收。当你发送通知,你会得到一个CUSTS1_VAL_NTF_CFM(自定义配置文件),一旦你得到这个你就知道,只是发送通知将被传递到中央,这样你就可以直接放置第二个通知。你将不得不等待CUSTS1_VAL_NTF_CFM发送一个通知的相同特性前到达,如果不是你将与后者的值更新值的数据库,当内核推通知到缓冲区这将推动两个通知与同值,由于通知的值是从数据库中获取的。如果你发现任何有用的答案,请标记为“接受”。
谢谢,PM_Dialog
嗨pw_dialog.
感谢你的回复。
CUSTS1_VAL_IND_CFM和CUSTS1_VAL_NTF_CFM一样吗?确保发送下一个事件。
请告诉我,我的BLE装置如何成功地知道手机接收到的数据?
期待你的答复!
嗨lewuyouc,
您可以使用指示而不是通知,以便确认数据接收。要从迹象开始,从外设启动(就像通知,而是使用应用程序确认当值达到外围设备时)而不是中央,外围设备只能向中央发送指示而不是相反的方式。因此,为了从外设发送迹象,您只需从应用程序发送该消息,中央不会读取可指示的值,它只是指示中央的价值,中央的外围设备只是确认他收到从外设发送的消息。发送指示时,您应该发出gattc_send_evt_cmd,该消息应该具有响应GattC_CMP_EVT。之后,gattc_cmp_evt将从custs1_task.c中触发gattc_cmp_evt_handler()。请注意,当中央正确接收的中央确认时,将触发指示。为了看看如何申报可滥用的特征,请查看SDK的BLE_APP_PERITEDAL示例。
谢谢,PM_Dialog
嗨pw_dialog.
谢谢,我会尝试这样做。
我们可以用malloc()函数?我需要建立一个长链接。
嗨lewuyouc,
我是能够理解你正在试图完成的任务,不过是你可以使用它。您可以使用ke_malloc为好。
谢谢,PM_Dialog