⚠️
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 https://www.dialog-semiconductor.com/support . We’ll be fixing bugs / optimising the searching and tagging over the coming days.
15 posts / 0 new
Last post
hdr
Offline
Last seen: 1 year 6 months ago
Joined: 2019-06-11 14:08
BLE central write

Hello Team Dialog,

I have written a program based on the ble_central project, which finds BLE devices with a special name or MAC address.
If a device is found, I connect to it and then I write into a characteristic.
My problem is:
Every time I try to write to the peripheral, the status is 3 (ATT_ERROR_WRITE_NOT_PERMITTED) at the Write-Completed-Event.
When I try to do it with my mobile phone via nRF Connect App, I can read and write without any problems.
Tried out as a peripheral a Raspberry Pi, my mobile phone and also a Dialog 14680.
Every time the status is 3.

printf("start write\r\n");
uint16_t * mtu = 0;
ble_gattc_get_mtu(evt->conn_idx, mtu);

printf("MTU Rate: %u\r\n", *mtu);

uint8_t test = 0x00;
printf("uuid: %s\r\n",format_uuid(&charact[0].uuid));
printf("write\r\n");
ble_gattc_write(evt->conn_idx, charact[0].handle ,false , sizeof(test) ,&test);

charact[0] contains the handler from the Characteristic.

Many thanks for the effort in advance.

Best Regards

HDR

Device: 
PM_Dialog
Offline
Last seen: 2 months 2 weeks ago
Staff
Joined: 2018-02-08 11:03
Hi hdr,

Hi hdr,

Thanks for your question on our public BLE forums. Could you please indicate what is the peripheral? Is another DA14682?

Thanks, PM_Dialog

hdr
Offline
Last seen: 1 year 6 months ago
Joined: 2019-06-11 14:08
I used a Raspberry Pi with

I used a Raspberry Pi with PyBluez as peripheral, my mobile phone with the above mentioned app and a Dialog 14680. I'm now trying a DA 14682 as I can't access the 14680 because the device is potted.

alex.jian
Offline
Last seen: 7 months 2 weeks ago
Joined: 2019-08-28 10:14
HI hdr 

HI hdr 

i have same request 

can you tell me what is Write-Completed-Event and how to use??

thanks

 

hdr
Offline
Last seen: 1 year 6 months ago
Joined: 2019-06-11 14:08
If I understand this

If I understand this correctly, the Write_Completed_Event is called when I call a ble_gattc_write and it has been executed.  In the event I get back the conn_idx, the handler and a status code. In my case the status code is 3, which stands for ATT_ERROR_WRITE_NOT_PERMITTED.

To describe how to use the event, I would refer to the ble_central example project.

alex.jian
Offline
Last seen: 7 months 2 weeks ago
Joined: 2019-08-28 10:14
HI hdr

HI hdr

i also use ble_gattc_write and i add Write_Completed_Event to app_task.c as below , Is this right when ble_gattc_write  Completed??

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},
    {GAPC_GET_DEV_INFO_REQ_IND,             (ke_msg_func_t)gapc_get_dev_info_req_ind_handler},
    {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},
    {GAPM_ADV_REPORT_IND,                   (ke_msg_func_t)gapm_adv_report_ind_handler},
    {GAPC_PARAM_UPDATE_REQ_IND,             (ke_msg_func_t)gapc_param_update_req_ind_handler},
    {GAPC_LE_PKT_SIZE_IND,                  (ke_msg_func_t)gapc_le_pkt_size_ind_handler},
        {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 },   //alex 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},
#endif
};

hdr
Offline
Last seen: 1 year 6 months ago
Joined: 2019-06-11 14:08
I think you use another SDK

I think you use another SDK and Dialog-Chip.

PM_Dialog
Offline
Last seen: 2 months 2 weeks ago
Staff
Joined: 2018-02-08 11:03
Hi hdr,

Hi hdr,

Thanks for your detailed responses. According to Bluetooth LE specifications:

“If the attribute value cannot be written due to permissions then an Error Response shall be sent with the error code «Write Not Permitted». “

Could you please check if the characteristic ( in the Peripheral side ) has write permission? If yes, then I would suggest to double check if the Central (DA14682) writes to the correct handler (charact[0].handle).

Additionally, it would be very helpful to have a BLE sniffer log, so that we can understand what is happening over the air.

Thanks, PM_Dialog

hdr
Offline
Last seen: 1 year 6 months ago
Joined: 2019-06-11 14:08
Hello,

Hello,

The characteristic in the peripheral has the permission write and the handler should be the right one.


static void handle_evt_gattc_discover_char(ble_evt_gattc_discover_char_t *evt)
{
 ...
    if(ble_uuid_equal(&evt->uuid, &list_uuid) || ble_uuid_equal(&evt->uuid, &list_uuid_nb)) {
        charact[0].handle = evt->handle;
        charact[0].uuid = evt->uuid;
    }
 ...
}

Here is my Code from the Dialog 14682 Peripheral(same result status is 3):

        ble_uuid_from_string("6e400002-b5a3-f393-e0a9-e50e24dcca9f", &uuid);
        ble_gatts_add_characteristic(&uuid,GATT_PROP_WRITE, ATT_PERM_RW, 1, 0, NULL, NULL);

With my mobile phone I can write in the characteristic.

 

 

PM_Dialog
Offline
Last seen: 2 months 2 weeks ago
Staff
Joined: 2018-02-08 11:03
Hi Alex,

Hi Alex,

Thanks for you comments but please raise another forum thread. The specific forum topic is related with DA14682 and SDK1.0.14. As far as I know, you are using DA14585 and SDK6 in your design, so please create another ticket with your issue.

Thanks, PM_Dialog

PM_Dialog
Offline
Last seen: 2 months 2 weeks ago
Staff
Joined: 2018-02-08 11:03
Hi hdr,

Hi hdr,

Thansk fro gettign back. Could you please provide a BLE sniffer capture/

Thanks, PM_Dialog

hdr
Offline
Last seen: 1 year 6 months ago
Joined: 2019-06-11 14:08
Hello,

Hello,
unfortunately we have no possibility for BLE sniffing.
We will continue to search for the error and contact you if we find any new information.

PM_Dialog
Offline
Last seen: 2 months 2 weeks ago
Staff
Joined: 2018-02-08 11:03
Hi hdr,

Hi hdr,

Yes please, any further input would be very helpful.

Thanks, PM_Dialog

hdr
Offline
Last seen: 1 year 6 months ago
Joined: 2019-06-11 14:08
Hello,

Hello,
Thanks very much for the help. I found my mistake.
My handle was indeed wrong. I should have assigned evt->value_handle to the handle in the handle_evt_gattc_discover_char method.

Thank you very much

hdr

 

 

PM_Dialog
Offline
Last seen: 2 months 2 weeks ago
Staff
Joined: 2018-02-08 11:03
Hi hdr,

Hi hdr,

Glad that you figured this out and thanks for your indication.

Thanks, PM_Dialog