I am running a simple BLE app on an nRF52 DK board. In it simplest mode, the app advertises a GATT server with a WriteNoResponse characteristic. When I write to this characteristic from a GATT client (a mac in my case), my access callback is properly invoked, and I can get the characteristic value when this value is "normal" (i.e no more than MTU-3 bytes). For testing, I set the MTU to 23 with: ble_att_set_preferred_mtu(23);
I can verify that writing a 20 byte value works fine, as I get a callback with ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR However, if I write a value that's 21 bytes or more, the callback is never invoked. At the GATT level, writing a long attribute involves different GATT commands, namely BLE_ATT_OP_PREP_WRITE_REQ and BLE_ATT_OP_EXEC_WRITE_REQ, instead of the one-shot BLE_ATT_OP_WRITE_REQ. If I enable DEBUG logging, I can see that the BLE_ATT_OP_EXEC_WRITE_REQ is received and processed, but there's no callback to my code. Here's what the log looks like (this is for a 21 bytes value, with the MTU set at 23): 1687:[ts=13179676ssb, mod=64 level=1] mtu update event; conn_handle=1 cid=4 mtu=23 ... 58955:[ts=460585900ssb, mod=4 level=0] ble_hs_hci_evt_acl_process(): handle=1 pb=2 len=27 data= 0x17 0x00 0x04 0x00 0x16 0x16 0x00 0x00 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 58961:[ts=460632772ssb, mod=4 level=0] rxed att command: prep write req; conn=1 handle=0x0016 o ffset=0 58963:[ts=460648396ssb, mod=4 level=0] txed att command: prep write rsp; conn=1 handle=0x0016 o ffset=0 58966:[ts=460671832ssb, mod=4 level=0] host tx hci data; handle=1 length=27 58968:[ts=460687456ssb, mod=4 level=0] ble_hs_hci_acl_tx(): 0x01 0x00 0x1b 0x00 0x17 0x00 0x04 0x00 0x17 0x16 0x00 0x00 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 58976:[ts=460749952ssb, mod=4 level=0] ble_hs_hci_evt_acl_process(): handle=1 pb=2 len=6 data=0 x02 0x00 0x04 0x00 0x18 0x00 58979:[ts=460773388ssb, mod=4 level=0] rxed att command: exec write req; conn=1 flags=0x00 58981:[ts=460789012ssb, mod=4 level=0] host tx hci data; handle=1 length=5 58983:[ts=460804636ssb, mod=4 level=0] ble_hs_hci_acl_tx(): 0x01 0x00 0x05 0x00 0x01 0x00 0x04 0x00 0x19 58986:[ts=460828072ssb, mod=4 level=0] Number of Completed Packets: num_handles=1 58988:[ts=460843696ssb, mod=4 level=0] handle:1 pkts:1 58991:[ts=460867132ssb, mod=4 level=0] Number of Completed Packets: num_handles=1 58993:[ts=460882756ssb, mod=4 level=0] handle:1 pkts:1
