summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2014-01-27 11:54:21 -0600
committerDenis Kenzior <denkenz@gmail.com>2014-10-20 13:40:28 -0500
commit39f08a5e1ce8f183b6d4322623ba9ee5bdaca30b (patch)
treee8573945f807d847e17f6d20e715b4026e5ecb0a /drivers
parent6c0f90fc1b0802fc425f92a904b6a8ae55647266 (diff)
downloadofono-39f08a5e1ce8f183b6d4322623ba9ee5bdaca30b.tar.bz2
hfp: Track supported / active indicators
This information is obtained during SLC establishment
Diffstat (limited to 'drivers')
-rw-r--r--drivers/hfpmodem/slc.c20
-rw-r--r--drivers/hfpmodem/slc.h3
2 files changed, 20 insertions, 3 deletions
diff --git a/drivers/hfpmodem/slc.c b/drivers/hfpmodem/slc.c
index d438eb33..1ad80a9f 100644
--- a/drivers/hfpmodem/slc.c
+++ b/drivers/hfpmodem/slc.c
@@ -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)
{
struct slc_establish_data *sed = user_data;
+ struct hfp_slc_info *info = sed->info;
GAtResultIter iter;
int hf_indicator;
int enabled;
+ unsigned int i;
if (!ok)
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",
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);
@@ -163,11 +174,14 @@ static void bind_support_cb(gboolean ok, GAtResult *result, gpointer user_data)
goto error;
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);
- if (hf_indicator == HFP_HF_INDICATOR_ENHANCED_SAFETY)
- ofono_info("Distracted Driving Reduction");
+ info->hf_indicators[info->num_hf_indicators] = hf_indicator;
+ info->num_hf_indicators += 1;
}
if (!g_at_result_iter_close_list(&iter))
diff --git a/drivers/hfpmodem/slc.h b/drivers/hfpmodem/slc.h
index fe98d999..6e2f415a 100644
--- a/drivers/hfpmodem/slc.h
+++ b/drivers/hfpmodem/slc.h
@@ -39,6 +39,9 @@ struct hfp_slc_info {
unsigned int hf_features;
unsigned char cind_pos[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);