From e81f58c7425a92469f1e4701d920db1e8ea851c8 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Fri, 18 Dec 2015 15:29:36 +0100 Subject: [PATCH] hfp: generalized hfp ag cmd generator --- src/hfp_ag.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/hfp_ag.c b/src/hfp_ag.c index d204f568b..4b4de8e08 100644 --- a/src/hfp_ag.c +++ b/src/hfp_ag.c @@ -383,8 +383,11 @@ static int hfp_ag_call_services_join(char * buffer, int buffer_size){ return offset; } -// returns next segment to store -static int hfp_ag_retrieve_indicators_cmd_via_generator(uint16_t cid, hfp_connection_t * context, int start_segment){ +static int hfp_ag_cmd_via_generator(uint16_t cid, hfp_connection_t * context, + int start_segment, int num_segments, + int (*get_segment_len)(hfp_connection_t * context, int segment), + void (*store_segment) (hfp_connection_t * context, int segment, uint8_t * buffer)){ + // assumes: can send now == true // assumes: num segments > 0 rfcomm_reserve_packet_buffer(); @@ -392,11 +395,10 @@ static int hfp_ag_retrieve_indicators_cmd_via_generator(uint16_t cid, hfp_connec uint8_t * data = rfcomm_get_outgoing_buffer(); int offset = 0; int segment = start_segment; - int num_segments = hfp_ag_indicators_cmd_generator_num_segments(context); while (segment < num_segments){ - int segment_len = hfp_ag_indicators_cmd_generator_get_segment_len(context, segment); + int segment_len = get_segment_len(context, segment); if (offset + segment_len <= mtu){ - hgp_ag_indicators_cmd_generator_store_segment(context, segment, data+offset); + store_segment(context, segment, data+offset); offset += segment_len; segment++; } @@ -405,6 +407,13 @@ static int hfp_ag_retrieve_indicators_cmd_via_generator(uint16_t cid, hfp_connec return segment; } +// returns next segment to store +static int hfp_ag_retrieve_indicators_cmd_via_generator(uint16_t cid, hfp_connection_t * context, int start_segment){ + int num_segments = hfp_ag_indicators_cmd_generator_num_segments(context); + return hfp_ag_cmd_via_generator(cid, context, start_segment, num_segments, + hfp_ag_indicators_cmd_generator_get_segment_len, hgp_ag_indicators_cmd_generator_store_segment); +} + static int hfp_ag_retrieve_indicators_status_cmd(uint16_t cid){ char buffer[40]; int offset = snprintf(buffer, sizeof(buffer), "\r\n%s:", HFP_INDICATOR);