你好团队对话框中,
我已经根据BLE_Central项目编写了一个程序,该项目找到了具有特殊名称或MAC地址的BLE设备。
如果找到设备,则我连接到它,然后我写入特征。
我的问题是:
每次尝试写入外设时,状态为3(ATT_ERROR_WRITE_NOT_PERMITTE),在写入完成事件中。
当我尝试通过NRF Connect应用程序使用我的手机进行操作时,我可以在没有任何问题的情况下读写。
用作外围覆盆子PI,我的手机以及对话框14680。
每次状态为3时。
printf(“开始写\ r \ n”);UINT16_T * MTU = 0;ble_gattc_get_mtu(evt-> conn_idx,mtu);Printf(“MTU率:%U \ R \ n”,* MTU);uint8_t test = 0x00;printf(“uuid:%s \ r \ n”,format_uuid(&charact [0] .uuuid));printf(“写\ r \ n”);BLE_GATTC_WRITE(EVT-> CONN_IDX,FALICLE [0] .HANDLE,FALSE,SIZEOF(测试)和测试);
faract [0]包含来自特性的处理程序。
非常感谢提前努力。
致以最亲切的问候
HDR
设备:
嗨HDR,
感谢您对公共BLE论坛的问题。您能否说明周边是什么?是另一个da14682吗?
谢谢,PM_DIALOG.
我使用带有PyBluez的覆盆子PI作为外设,我的移动电话与上面提到的应用程序和对话框14680.我现在正在尝试一个DA 14682,因为我无法访问14680,因为设备被培养。
嗨hdr
我有同样的要求
你能告诉我什么是写完成的事件以及如何使用?
谢谢
如果我正确理解这一点,请在调用BLE_GATTC_WRITE时调用WRITE_COMPLETED_EVENT并已执行。在我恢复CONN_IDX,处理程序和状态代码中。在我的情况下,状态代码为3,它代表了ATT_ERROR_WRITE_NOT_PERMITTED。
为了描述如何使用事件,我将引用ble_central示例项目。
嗨hdr
我也使用ble_gattc_write,我将write_completed_event添加到app_task.c中如下所示,这是正确的,当ble_gattc_write完成了??
Static const struct ke_msg_handler app_gap_process_handlers[]=
{
{gapm_device_ready_ind,(ke_msg_func_t)gapm_device_ready_ind_handler},
{gapm_cmp_evt,(ke_msg_func_t)gapm_cmp_evt_handler},
{gapc_cmp_evt,(ke_msg_func_t)gapc_cmp_evt_handler},
{gapc_connection_req_ind,(ke_msg_func_t)gapc_connection_req_ind_handler},
{gapc_disconnect_ind,(ke_msg_func_t)gapc_disconnect_ind_handler},
(ke_msg_func_t) gapc_get_dev_info_req_ind_handler}, {GAPC_GET_DEV_INFO_REQ_IND
{gapc_set_dev_info_req_ind,(ke_msg_func_t)gapc_set_dev_info_req_ind_handler},
{gapm_profile_added_ind,(ke_msg_func_t)gapm_profile_added_ind_handler},
(ke_msg_func_t) gapm_adv_report_ind_handler}, {GAPM_ADV_REPORT_IND
(ke_msg_func_t) gapc_param_update_req_ind_handler}, {GAPC_PARAM_UPDATE_REQ_IND
(ke_msg_func_t) gapc_le_pkt_size_ind_handler}, {GAPC_LE_PKT_SIZE_IND
{GAPC_CON_RSSI_IND, (ke_msg_func_t)gapc_get_con_rssi_ind_handler}, //Alex Add 20191030
{gattc_read_ind,(ke_msg_func_t)app_read_ind_handler},// Alex Test 2020 0710
{gattc_sdp_svc_ind,(ke_msg_func_t)app_disc_all_svc},// axx test 2020 0710
{GATTC_CMP_EVT, (ke_msg_func_t)alex_gattc_cmp_evt_handler},//alex test 2020 0716
// {gapc_peer_att_info_ind,(ke_msg_func_t)app_read_dev_ver_ind_handler},// Alex Test 2020 0710
#if(ble_app_sec)
{gapc_security_ind,(ke_msg_func_t)gapc_security_ind_handler},
#万一
};
我想你用的是另一个SDK和Dialog-Chip。
嗨HDR,
感谢您的详细回复。根据蓝牙LE规范:
“如果属性值由于权限而无法写入,那么将发送一个错误响应,并发送错误代码«Write Not allowed»。”
您能否检查特色是否(在外围方面)有写入权限吗?如果是,那么我建议仔细检查中央(DA14682)写入正确的处理程序(Facut [0] .Handle)。
此外,拥有BLE嗅探器日志是非常有帮助的,这样我们就可以了解在空中发生的事情。
谢谢,PM_DIALOG.
你好,
外围设备的特征具有写权限,处理程序应该是正确的。
以下是对话框14682外设(相同的结果状态为3)代码:
使用我的手机,我可以写在特征。
嗨,亚历克斯,
谢谢你的评论,但请提出另一个论坛线程。具体的论坛主题与DA14682和SDK1.0.14相关。据我所知,你们在设计中使用了DA14585和SDK6,所以请用你们的issue创建另一个ticket。
谢谢,PM_DIALOG.
嗨HDR,
桑斯克来了。请您提供BLE Sniffer Capture /
谢谢,PM_DIALOG.
你好,
不幸的是,我们无法进行BLE嗅探。
如果我们找到任何新信息,我们将继续搜索错误并与您联系。
嗨HDR,
是的,任何进一步的投入都会非常有帮助。
谢谢,PM_DIALOG.
你好,
非常感谢您的帮助。我发现了我的错误。
我的手柄确实错了。我应该将evt->value_handle赋给handle_evt_gattc_discover_char方法中的句柄。
非常感谢
hdr
嗨HDR,
很高兴你认为这一点,感谢你的迹象。
谢谢,PM_DIALOG.