hfp: extend Features to three way calling and CHLD
authorKrzysztof Wilk <Krzysztofx.Wilk@intel.com>
Mon, 17 Mar 2014 15:47:30 +0000 (16:47 +0100)
committerDenis Kenzior <denkenz@gmail.com>
Wed, 19 Mar 2014 15:15:55 +0000 (10:15 -0500)
src/handsfree.c

index b23cc3a..98f9770 100644 (file)
@@ -50,6 +50,7 @@ struct ofono_handsfree {
        ofono_bool_t voice_recognition;
        ofono_bool_t voice_recognition_pending;
        unsigned int ag_features;
+       unsigned int ag_mpty_features;
        unsigned char battchg;
 
        const struct ofono_handsfree_driver *driver;
@@ -58,11 +59,14 @@ struct ofono_handsfree {
        DBusMessage *pending;
 };
 
-static const char **ag_features_list(unsigned int features)
+static const char **ag_features_list(unsigned int features, unsigned int mpty_features)
 {
-       static const char *list[33];
+       static const char *list[10];
        unsigned int i = 0;
 
+       if (features & HFP_AG_FEATURE_3WAY)
+               list[i++] = "three-way-calling";
+
        if (features & HFP_AG_FEATURE_ECNR)
                list[i++] = "echo-canceling-and-noise-reduction";
 
@@ -72,6 +76,21 @@ static const char **ag_features_list(unsigned int features)
        if (features & HFP_AG_FEATURE_ATTACH_VOICE_TAG)
                list[i++] = "attach-voice-tag";
 
+       if (mpty_features & HFP_AG_CHLD_0)
+               list[i++] = "release-all-held";
+
+       if (mpty_features & HFP_AG_CHLD_1x)
+               list[i++] = "release-specified-active-call";
+
+       if (mpty_features & HFP_AG_CHLD_2x)
+               list[i++] = "private-chat";
+
+       if (mpty_features & HFP_AG_CHLD_3)
+               list[i++] = "create-multiparty";
+
+       if (mpty_features & HFP_AG_CHLD_4)
+               list[i++] = "transfer";
+
        list[i] = NULL;
 
        return list;
@@ -125,6 +144,15 @@ void ofono_handsfree_set_ag_features(struct ofono_handsfree *hf,
        hf->ag_features = ag_features;
 }
 
+void ofono_handsfree_set_ag_chld_features(struct ofono_handsfree *hf,
+                                       unsigned int ag_mpty_features)
+{
+       if (hf == NULL)
+               return;
+
+       hf->ag_mpty_features = ag_mpty_features;
+}
+
 void ofono_handsfree_battchg_notify(struct ofono_handsfree *hf,
                                        unsigned char level)
 {
@@ -181,7 +209,7 @@ static DBusMessage *handsfree_get_properties(DBusConnection *conn,
        ofono_dbus_dict_append(&dict, "VoiceRecognition", DBUS_TYPE_BOOLEAN,
                                &voice_recognition);
 
-       features = ag_features_list(hf->ag_features);
+       features = ag_features_list(hf->ag_features, hf->ag_mpty_features);
        ofono_dbus_dict_append_array(&dict, "Features", DBUS_TYPE_STRING,
                                        &features);