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;
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";
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;
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)
{
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);