From aba39421e983becdc421597286297eda9de102e1 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Wed, 30 Mar 2016 10:21:23 +0200 Subject: [PATCH] hfp_ag: fix sending outgoing cmds in chunks --- src/classic/hfp_ag.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/classic/hfp_ag.c b/src/classic/hfp_ag.c index 17f9bfc83..880d1ea61 100644 --- a/src/classic/hfp_ag.c +++ b/src/classic/hfp_ag.c @@ -388,6 +388,7 @@ static int hfp_ag_cmd_via_generator(uint16_t cid, hfp_connection_t * hfp_connect // assumes: can send now == true // assumes: num segments > 0 + // assumes: individual segments are smaller than MTU rfcomm_reserve_packet_buffer(); int mtu = rfcomm_get_max_frame_size(cid); uint8_t * data = rfcomm_get_outgoing_buffer(); @@ -395,11 +396,11 @@ static int hfp_ag_cmd_via_generator(uint16_t cid, hfp_connection_t * hfp_connect int segment = start_segment; while (segment < num_segments){ int segment_len = get_segment_len(hfp_connection, segment); - if (offset + segment_len <= mtu){ - store_segment(hfp_connection, segment, data+offset); - offset += segment_len; - segment++; - } + if (offset + segment_len > mtu) break; + // append segement + store_segment(hfp_connection, segment, data+offset); + offset += segment_len; + segment++; } rfcomm_send_prepared(cid, offset); return segment;