hfp: Track supported / active indicators

This information is obtained during SLC establishment
This commit is contained in:
Denis Kenzior 2014-01-27 11:54:21 -06:00
parent 6c0f90fc1b
commit 39f08a5e1c
2 changed files with 20 additions and 3 deletions

View File

@ -117,9 +117,11 @@ static void slc_established(struct slc_establish_data *sed)
static void bind_query_cb(gboolean ok, GAtResult *result, gpointer user_data) static void bind_query_cb(gboolean ok, GAtResult *result, gpointer user_data)
{ {
struct slc_establish_data *sed = user_data; struct slc_establish_data *sed = user_data;
struct hfp_slc_info *info = sed->info;
GAtResultIter iter; GAtResultIter iter;
int hf_indicator; int hf_indicator;
int enabled; int enabled;
unsigned int i;
if (!ok) if (!ok)
goto error; goto error;
@ -135,6 +137,15 @@ static void bind_query_cb(gboolean ok, GAtResult *result, gpointer user_data)
ofono_info("AG wants indicator %d %s", ofono_info("AG wants indicator %d %s",
hf_indicator, enabled ? "enabled" : "disabled"); hf_indicator, enabled ? "enabled" : "disabled");
for (i = 0; i < info->num_hf_indicators; i++) {
if (info->hf_indicators[i] != hf_indicator)
continue;
info->hf_indicator_active_map |= enabled << i;
}
ofono_info("Active map: %02x", info->hf_indicator_active_map);
} }
slc_established(sed); slc_established(sed);
@ -163,11 +174,14 @@ static void bind_support_cb(gboolean ok, GAtResult *result, gpointer user_data)
goto error; goto error;
while (g_at_result_iter_next_number(&iter, &hf_indicator)) { while (g_at_result_iter_next_number(&iter, &hf_indicator)) {
ofono_info("AG supports the following indicator: %d", if (info->num_hf_indicators >= 20)
goto error;
ofono_info("AG supports the following HF indicator: %d",
hf_indicator); hf_indicator);
if (hf_indicator == HFP_HF_INDICATOR_ENHANCED_SAFETY) info->hf_indicators[info->num_hf_indicators] = hf_indicator;
ofono_info("Distracted Driving Reduction"); info->num_hf_indicators += 1;
} }
if (!g_at_result_iter_close_list(&iter)) if (!g_at_result_iter_close_list(&iter))

View File

@ -39,6 +39,9 @@ struct hfp_slc_info {
unsigned int hf_features; unsigned int hf_features;
unsigned char cind_pos[HFP_INDICATOR_LAST]; unsigned char cind_pos[HFP_INDICATOR_LAST];
unsigned int cind_val[HFP_INDICATOR_LAST]; unsigned int cind_val[HFP_INDICATOR_LAST];
unsigned short hf_indicators[20];
unsigned char num_hf_indicators;
unsigned int hf_indicator_active_map;
}; };
void hfp_slc_info_init(struct hfp_slc_info *info, guint16 version); void hfp_slc_info_init(struct hfp_slc_info *info, guint16 version);