verjus edited a comment on issue #552:
URL: https://github.com/apache/mynewt-nimble/issues/552#issuecomment-703181598
I am posting here so as to not open a duplicate issue.
I am having the exact same issue, which I solved in a similar manner. This
is on Linux with the latest version of Nimble. I maintain a list of packets
representing the entire payload that I need to transfer. The total payload is
greater than the MTU but not each packet in the list. I send the first packet
via:
```
struct os_mbuf *om = ble_hs_mbuf_from_flat(node->packet.data,
node->packet.dataSize);
int rc = ble_gattc_notify_custom(conn_handle, alexa_notify_handle, om);
```
and wait for the BLE_GAP_EVENT_NOTIFY_TX event. When I receive this event,
I check event->notify_tx.status and send the next packet in the packet list.
If there are still packets left in the list, it will trigger again a notify_tx
event until there are no packets left in the list and the chain stops.
This appears to work nicely. However, when I stress test it by sending 338
bytes with an MTU of 33, it fails after the 12th packet. The return code is
notify_tx.status = 6, which seems to correspond to BLE_HS_ENOMEM. This would
indicate a heap exhaustion situation. I don't understand how this could be
possible. Aren't the buffers returned to the heap after each call to
ble_gattc_notify_custom? So what am I doing wrong?
Here is how it looks like:
This is the list of packets I am trying to send with a series of
notifications (no indicate):
Packet [1/13] contains: 60 00 00 01 52 18 0a cf 02 0a 24 0a 0f 41 6c 65
78 61 2e 44 69 73 63 6f 76 65 72 79 12 11
Packet [2/13] contains: 60 14 1b 44 69 73 63 6f 76 65 72 2e 52 65 73 70
6f 6e 73 65 12 a6 02 0a a3 02 0a 0e 41 31
Packet [3/13] contains: 60 24 1b 4f 52 32 44 55 50 37 4a 30 35 39 5a 12
0a 4e 69 78 69 65 54 69 6d 65 72 1a 0b 4e
Packet [4/13] contains: 60 34 1b 69 78 69 65 20 54 69 6d 65 72 22 0e 41
58 53 20 49 6e 64 75 73 74 72 69 65 73 5a
Packet [5/13] contains: 60 44 1b 1d 0a 0e 41 6c 65 78 61 49 6e 74 65 72
66 61 63 65 12 06 41 6c 65 72 74 73 1a 03
Packet [6/13] contains: 60 54 1b 31 2e 31 5a 55 0a 0e 41 6c 65 78 61 49
6e 74 65 72 66 61 63 65 12 1a 41 6c 65 78
Packet [7/13] contains: 60 64 1b 61 2e 47 61 64 67 65 74 2e 53 74 61 74
65 4c 69 73 74 65 6e 65 72 1a 03 31 2e 30
Packet [8/13] contains: 60 74 1b 22 22 0a 08 0a 06 74 69 6d 65 72 73 0a
0a 0a 08 74 69 6d 65 69 6e 66 6f 0a 0a 0a
Packet [9/13] contains: 60 84 1b 08 77 61 6b 65 69 6e 66 6f 62 72 0a 01
30 12 40 34 32 37 38 44 43 34 35 34 33 31
Packet [10/13] contains: 60 94 1b 41 33 32 38 41 37 46 41 32 30 44 38 35
36 36 31 36 46 34 44 32 42 37 34 41 44 33
Packet [11/13] contains: 60 a4 1b 34 36 46 35 32 37 42 43 33 34 33 35 36
43 33 37 32 31 33 32 31 38 44 37 43 43 1a
Packet [12/13] contains: 60 b4 1b 01 31 22 0e 41 31 4f 52 32 44 55 50 37
4a 30 35 39 5a 2a 0a 4e 69 78 69 65 54 69
Packet [13/13] contains: 60 c8 11 6d 65 72 32 0c 34 34 30 30 34 39 30 46
36 41 31 30
after the 11th packet, I get:
preparing to send chunk of data size= 30
sending packet number 12 <<<<<<<<
60 b4 1b 01 31 22 0e 41 31 4f 52 32 44 55 50 37
4a 30 35 39 5a 2a 0a 4e 69 78 69 65 54 69
Sending notification now
GATT procedure initiated: notify; att_handle=12
event type= 0x000d
notification update; status=0 <<<<<<<<<< SUCCESS
Notify tx connection_handle = 64
Notify tx attr handle = 12
Notify tx indication = 0
PacketList_send called with:
firstPacket = 0
Resp code = 0
But the following packet (which is the last by design) fails:
Preparing to send chunk of data size= 20
sending packet number 13 <<<<<<<<
60 c8 11 6d 65 72 32 0c 34 34 30 30 34 39 30 46
36 41 31 30
Sending notification now
GATT procedure initiated: notify; att_handle=12
event type= 0x000d
notification update; status=6 <<<<<<<<<< FAILURE
Notify tx connection_handle = 64
Notify tx attr handle = 12
Notify tx indication = 0
PacketList_send called with:
firstPacket = 0
Resp code = 6 <<<
Retry
and never succeed after that.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]