Hi Gilles,
FYI, below is the git diff showing what I did to bletiny.
Please let me know if there is anything else you need, or if you want me
to try something on my setup.
Chris
diff --git a/apps/bletiny/src/gatt_svr.c b/apps/bletiny/src/gatt_svr.c
index 6001a63..ac6118c 100644
--- a/apps/bletiny/src/gatt_svr.c
+++ b/apps/bletiny/src/gatt_svr.c
@@ -52,7 +52,7 @@ const uint8_t gatt_svr_chr_sec_test_static_uuid[16] = {
0xe1, 0x45, 0x7e, 0x89, 0x9e, 0x65, 0x3a, 0x5c
};
-static uint8_t gatt_svr_sec_test_static_val;
+static uint8_t gatt_svr_sec_test_static_val[40];
static int
gatt_svr_chr_access_alert(uint16_t conn_handle, uint16_t attr_handle,
@@ -108,7 +108,7 @@ static const struct ble_gatt_svc_def gatt_svr_svcs[] = {
.uuid128 = gatt_svr_chr_sec_test_static_uuid,
.access_cb = gatt_svr_chr_access_sec_test,
.flags = BLE_GATT_CHR_F_READ |
- BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_WRITE_ENC,
+ BLE_GATT_CHR_F_WRITE_NO_RSP,
}, {
0, /* No more characteristics in this service. */
} },
On Mon, Dec 05, 2016 at 05:19:58PM -0800, Gilles Boccon-Gibod wrote:
> I'm at apache-mynewt-core,0.9.9.
>
> So that's the latest. I'll try to modify bletiny as suggested earlier and
> see if I can reproduce the issue in that context.
>
> Thanks.
>
> On Mon, Dec 5, 2016 at 4:44 PM, Sterling Hughes <[email protected]> wrote:
>
> > Hi Gilles,
> >
> > What does your project.state file say? If 0-latest != 0.9.9, then you
> > should try newt upgrade. Up until recently, 0-latest pointed to our 0.9
> > release, but now it points to 0.9.9, which is the first beta of 1.0.
> >
> > If project.state says 0.9.0, then issue:
> >
> > newt upgrade -v
> >
> > And it should prompt you to upgrade.
> >
> > Sterling
> >
> >
> > On 5 Dec 2016, at 16:36, Gilles Boccon-Gibod wrote:
> >
> > My project uses this version of mynewt:
> >>
> >> repository.apache-mynewt-core:
> >>
> >> type: github
> >>
> >> vers: 0-latest
> >>
> >> user: apache
> >>
> >> repo: incubator-mynewt-core
> >> Is there a newer version I should try?
> >>
> >> -- Gilles
> >>
> >> On Mon, Dec 5, 2016 at 3:42 PM, Christopher Collins <[email protected]>
> >> wrote:
> >>
> >> Hi Gilles,
> >>>
> >>> On Mon, Dec 05, 2016 at 02:57:40PM -0800, Gilles Boccon-Gibod wrote:
> >>>
> >>>> 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.
> >>>>
> >>>
> >>> Unfortunately, I can't seem to replicate that behavior. Which version
> >>> of Mynewt are you using? I tested this with the develop branch. The
> >>> latest official release (0.9.0) is quite old, so I am a little less
> >>> confident about that one :).
> >>>
> >>> To test this, I used the bletiny sample app with the following
> >>> modifictions:
> >>> * Increase size of the "Security test, static value" characteristic
> >>> to 40 bytes (was: 1 byte).
> >>> * Change this characteristics flags to:
> >>> BLE_GATT_CHR_F_READ | BLE_GATT_CHR_F_WRITE_NO_RSP
> >>> (was:
> >>> BLE_GATT_CHR_F_READ | BLE_GATT_CHR_F_WRITE |
> >>> BLE_GATT_CHR_F_WRITE_ENC)
> >>>
> >>> Here is the procedure I used:
> >>> * Set preferred MTU on both devices to 23.
> >>> * Peripheral begins advertising.
> >>> * Central connects.
> >>> * Central initiates MTU negotiation.
> >>> * Central performs a 40-byte long write
> >>>
> >>> Here is the GDB backtrace on the peripheral showing the callback getting
> >>> executed:
> >>>
> >>> #0 gatt_svr_chr_access_sec_test (conn_handle=1, attr_handle=33,
> >>> ctxt=0x20000f80 <bletiny_stack+1828>, arg=0x0) at gatt_svr.c:218
> >>> #1 0x000144b6 in ble_gatts_val_access (conn_handle=<optimized out>,
> >>> attr_handle=<optimized out>, offset=<optimized out>,
> >>> gatt_ctxt=0x20000f80 <bletiny_stack+1828>, om=0x20000fe0
> >>> <bletiny_stack+1924>, access_cb=0xad35 <gatt_svr_chr_access_sec_test>,
> >>> cb_arg=0x0)
> >>> at ble_gatts.c:348
> >>> #2 0x000144fc in ble_gatts_chr_val_access (conn_handle=<optimized out>,
> >>> attr_handle=<optimized out>, att_op=<optimized out>, offset=<optimized
> >>> out>,
> >>> om=0x20000fe0 <bletiny_stack+1924>, arg=0x200004bc
> >>> <__compound_literal.7+24>) at ble_gatts.c:374
> >>> #3 0x0000f41c in ble_att_svr_write (conn_handle=conn_handle@entry=1,
> >>> entry=<optimized out>, om=om@entry=0x20000fe0 <bletiny_stack+1924>,
> >>> out_att_err=out_att_err@entry=0x20000fdb <bletiny_stack+1919> "",
> >>> offset=0) at ble_att_svr.c:527
> >>> #4 0x000107de in ble_att_svr_prep_write (err_handle=<synthetic pointer>,
> >>> prep_list=0x20000fdc <bletiny_stack+1920>, conn_handle=1)
> >>> at ble_att_svr.c:2371
> >>> #5 ble_att_svr_rx_exec_write (conn_handle=<optimized out>,
> >>> rxom=<optimized out>) at ble_att_svr.c:2608
> >>> #6 0x0000da88 in ble_att_rx (conn_handle=<optimized out>, om=0x2000102c
> >>> <bletiny_stack+2000>) at ble_att.c:461
> >>> #7 0x00016dfc in ble_hs_hci_evt_acl_process (om=0x0) at
> >>> ble_hs_hci_evt.c:664
> >>> #8 0x0001524e in ble_hs_process_rx_data_queue () at ble_hs.c:199
> >>> #9 0x0000bcbe in os_eventq_run (evq=evq@entry=0x200035b8 <bletiny_evq>)
> >>> at os_eventq.c:147
> >>> #10 0x000081ec in bletiny_task_handler (arg=<optimized out>) at
> >>> main.c:1556
> >>> #11 0x00000000 in ?? ()
> >>>
> >>> Here is the bletiny log on the peripheral (there was some contention for
> >>> the console buffer in the middle so part of it looks garbled):
> >>>
> >>>
> >>> b set mtu=23
> >>> b set addr=0a:45:00:11:22:33
> >>> b set adv_data uuid16=0x1811 name=micosa-1 name_is_complete=1 flags=0
> >>> tx_pwr_lvl=-128
> >>> b adv c10467:[ts=on81773388ssb, mod=n4 lev=und dic=geen
> >>> l=0] ble_hs_hci_cmd_send: ogf=0x08 ocf=0x07 len=0
> >>> 10470:[ts=81796824ssb, mod=4 level=0] 0x07 0x20 0x00
> >>> 10471:[ts=81804636ssb, mod=4 level=0] Command complete: cmd_pkts=1
> >>> ogf=0x8
> >>> ocf=0x7 status=0
> >>> 10474:[ts=81828072ssb, mod=4 level=1] GAP procedure initiated: advertise;
> >>> disc_mode=0 peer_addr_type=0 peer_addr=00:00:00:00:00:00
> >>> adv_channel_map=0
> >>> own_addr_type=0 adv_filter_policy=0 adv_itvl_min=0 adv_itvl_max=0
> >>> adv_data_len=17
> >>> 10480:[ts=81874944ssb, mod=4 level=0] ble_hs_hci_cmd_send: ogf=0x08
> >>> ocf=0x06 len=15
> >>> 10483:[ts=81898380ssb, mod=4 level=0] 0x06 0x20 0x0f 0x30 0x00 0x60 0x00
> >>> 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x07 0x00
> >>> 10486:[ts=81921816ssb, mod=4 level=0] Command complete: cmd_pkts=1
> >>> ogf=0x8
> >>> ocf=0x6 status=0
> >>> 10488:[ts=81937440ssb, mod=4 level=0] ble_hs_hci_cmd_send: ogf=0x08
> >>> ocf=0x08 len=32
> >>> 10490:[ts=81953064ssb, mod=4 level=0] 0x08 0x20 0x20 0x14 0x03 0x02 0x11
> >>> 0x18 0x09 0x08 0x6d 0x69 0x63 0x6f 0x73 0x61 0x2d 0x31 0x02 0x0a 0x00
> >>> 0x02
> >>> 0x01 0x06 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
> >>> 10496:[ts=82000000ssb, mod=4 level=0] Command complete: cmd_pkts=1
> >>> ogf=0x8
> >>> ocf=0x8 status=0
> >>> 10498:[ts=82015624ssb, mod=4 level=0] ble_hs_hci_cmd_send: ogf=0x08
> >>> ocf=0x09 len=32
> >>> 10501:[ts=82039060ssb, mod=4 level=0] 0x09 0x20 0x20 0x00 0x00 0x00 0x00
> >>> 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
> >>> 0x00
> >>> 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
> >>> 10507:[ts=82085932ssb, mod=4 level=0] Command complete: cmd_pkts=1
> >>> ogf=0x8
> >>> ocf=0x9 status=0
> >>> 10509:[ts=82101556ssb, mod=4 level=0] ble_hs_hci_cmd_send: ogf=0x08
> >>> ocf=0x0a len=1
> >>> 10511:[ts=82117180ssb, mod=4 level=0] 0x0a 0x20 0x01 0x01
> >>> 10513:[ts=82132804ssb, mod=4 level=0] Command complete: cmd_pkts=1
> >>> ogf=0x8
> >>> ocf=0xa status=0
> >>> 11245:[ts=87851508ssb, mod=4 level=0] LE connection complete. handle=1
> >>> role=1 paddrtype=0 addr=a.b.c.d.e.f local_rpa=0.0.0.0.0.0
> >>> peer_rpa=0.0.0.0.0.0 itvl=40 latency=0 spvn_tmo=256 mca=4
> >>> 11250:connection established; status=0 handle=1 our_ota_addr_type=0
> >>> our_ota_addr=0a:45:00:11:22:33 our_id_addr_type=0
> >>> our_id_addr=0a:45:00:11:22:33 peer_ota_addr_type=0
> >>> peer_ota_addr=0a:0b:0c:0d:0e:0f peer_id_addr_type=0
> >>> peer_id_addr=0a:0b:0c:0d:0e:0f conn_itvl=40 conn_latency=0
> >>> supervision_timeout=256 encrypted=0 authenticated=0 bonded=0
> >>> 11258:[ts=87953064ssb, mod=4 level=0] Number of Completed Packets:
> >>> num_handles=1
> >>> 11261:[ts=87976500ssb, mod=4 level=0] handle:1 pkts:0
> >>> 12442:[ts=97203112ssb, mod=4 level=0] ble_hs_hci_evt_acl_process():
> >>> conn_handle=1 pb=2 len=7 data=0x03 0x00 0x04 0x00 0x02 0x17 0x00
> >>> 12445:[ts=97226548ssb, mod=4 level=0] rxed att command: mtu req; conn=1
> >>> mtu=23
> >>> 12447:[ts=97242172ssb, mod=4 level=0] txed att command: mtu rsp; conn=1
> >>> mtu=23
> >>> 12449:[ts=97257796ssb, mod=4 level=0] host tx hci data; handle=1 length=7
> >>> 12451:[ts=97273420ssb, mod=4 level=0] ble_hs_hci_acl_tx(): 0x01 0x00 0x07
> >>> 0x00 0x03 0x00 0x04 0x00 0x03 0x17 0x00
> >>> 12454:mtu update event; conn_handle=1 cid=4 mtu=23
> >>> 12461:[ts=97351540ssb, mod=4 level=0] Number of Completed Packets:
> >>> num_handles=1
> >>> 12463:[ts=97367164ssb, mod=4 level=0] handle:1 pkts:1
> >>> 15853:[ts=123851508ssb, mod=4 level=0] ble_hs_hci_evt_acl_process():
> >>> conn_handle=1 pb=2 len=27 data=0x17 0x00 0x04 0x00 0x16 0x21 0x00 0x00
> >>> 0x00
> >>> 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02
> >>> 0x02
> >>> 0x02 0x02 0x02
> >>> 15860:[ts=123906192ssb, mod=4 level=0] rxed att command: prep write req;
> >>> conn=1 handle=0x0021 offset=0
> >>> 15862:[ts=123921816ssb, mod=4 level=0] txed att command: prep write rsp;
> >>> conn=1 handle=0x0021 offset=0
> >>> 15865:[ts=123945252ssb, mod=4 level=0] host tx hci data; handle=1
> >>> length=27
> >>> 15867:[ts=123960876ssb, mod=4 level=0] ble_hs_hci_acl_tx(): 0x01 0x00
> >>> 0x1b
> >>> 0x00 0x17 0x00 0x04 0x00 0x17 0x21 0x00 0x00 0x00 0x02 0x02 0x02 0x02
> >>> 0x02
> >>> 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02
> >>> 15885:[ts=124101556ssb, mod=4 level=0] Number of Completed Packets:
> >>> num_handles=1
> >>> 15887:[ts=124117180ssb, mod=4 level=0] handle:1 pkts:1
> >>> 15898:[ts=124203112ssb, mod=4 level=0] ble_hs_hci_evt_acl_process():
> >>> conn_handle=1 pb=2 len=27 data=0x17 0x00 0x04 0x00 0x16 0x21 0x00 0x12
> >>> 0x00
> >>> 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02
> >>> 0x02
> >>> 0x02 0x02 0x02
> >>> 15904:[ts=124249984ssb, mod=4 level=0] rxed att command: prep write req;
> >>> conn=1 handle=0x0021 offset=18
> >>> 15907:[ts=124273420ssb, mod=4 level=0] txed att command: prep write rsp;
> >>> conn=1 handle=0x0021 offset=18
> >>> 15909:[ts=124289044ssb, mod=4 level=0] host tx hci data; handle=1
> >>> length=27
> >>> 15912:[ts=124312480ssb, mod=4 level=0] ble_hs_hci_acl_tx(): 0x01 0x00
> >>> 0x1b
> >>> 0x00 0x17 0x00 0x04 0x00 0x17 0x21 0x00 0x12 0x00 0x02 0x02 0x02 0x02
> >>> 0x02
> >>> 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02 0x02
> >>> 15924:[ts=124406224ssb, mod=4 level=0] Number of Completed Packets:
> >>> num_handles=1
> >>> 15926:[ts=124421848ssb, mod=4 level=0] handle:1 pkts:1
> >>> 15936:[ts=124499968ssb, mod=4 level=0] ble_hs_hci_evt_acl_process():
> >>> conn_handle=1 pb=2 len=13 data=0x09 0x00 0x04 0x00 0x16 0x21 0x00 0x24
> >>> 0x00
> >>> 0x02 0x02 0x02 0x02
> >>> 15941:[ts=124539028ssb, mod=4 level=0] rxed att command: prep write req;
> >>> conn=1 handle=0x0021 offset=36
> >>> 15944:[ts=124562464ssb, mod=4 level=0] txed att command: prep write rsp;
> >>> conn=1 handle=0x0021 offset=36
> >>> 15946:[ts=124578088ssb, mod=4 level=0] host tx hci data; handle=1
> >>> length=13
> >>> 15949:[ts=124601524ssb, mod=4 level=0] ble_hs_hci_acl_tx(): 0x01 0x00
> >>> 0x0d
> >>> 0x00 0x09 0x00 0x04 0x00 0x17 0x21 0x00 0x24 0x00 0x02 0x02 0x02 0x02
> >>> 15962:[ts=124703080ssb, mod=4 level=0] Number of Completed Packets:
> >>> num_handles=1
> >>> 15964:[ts=124718704ssb, mod=4 level=0] handle:1 pkts:1
> >>> 15975:[ts=124804636ssb, mod=4 level=0] ble_hs_hci_evt_acl_process():
> >>> conn_handle=1 pb=2 len=6 data=0x02 0x00 0x04 0x00 0x18 0x01
> >>> 15978:[ts=124828072ssb, mod=4 level=0] rxed att command: exec write req;
> >>> conn=1 flags=0x01
> >>> 19688:[ts=153812448ssb, mod=4 level=0] host tx hci data; handle=1
> >>> length=5
> >>> 19691:[ts=153835884ssb, mod=4 level=0] ble_hs_hci_acl_tx(): 0x01 0x00
> >>> 0x05
> >>> 0x00 0x01 0x00 0x04 0x00 0x19
> >>>
> >>> Thanks,
> >>> Chris
> >>>
> >>>