Merge "hal: remove extra path to resolve compile failure for kona"
diff --git a/configs/sdm710/sdm710.mk b/configs/sdm710/sdm710.mk
index 6710eef..cda0360 100644
--- a/configs/sdm710/sdm710.mk
+++ b/configs/sdm710/sdm710.mk
@@ -263,6 +263,10 @@
 PRODUCT_PROPERTY_OVERRIDES += \
 ro.af.client_heap_size_kbyte=7168
 
+#keep alive is needed by default for ffv
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.keep_alive.disabled=false
+
 # for HIDL related packages
 PRODUCT_PACKAGES += \
     android.hardware.audio@2.0-service \
diff --git a/configs/sdm710/sound_trigger_mixer_paths_wcd9340.xml b/configs/sdm710/sound_trigger_mixer_paths_wcd9340.xml
index 4d1bb31..df61226 100644
--- a/configs/sdm710/sound_trigger_mixer_paths_wcd9340.xml
+++ b/configs/sdm710/sound_trigger_mixer_paths_wcd9340.xml
@@ -342,15 +342,19 @@
         <ctl name="CDC_IF TX5 MUX" value="DEC5" />
         <ctl name="ADC MUX5" value="DMIC" />
         <ctl name="DMIC MUX5" value="DMIC1" />
+        <ctl name="DEC5 Volume" value="96" />
         <ctl name="CDC_IF TX6 MUX" value="DEC6" />
         <ctl name="ADC MUX6" value="DMIC" />
         <ctl name="DMIC MUX6" value="DMIC5" />
+        <ctl name="DEC6 Volume" value="96" />
         <ctl name="CDC_IF TX7 MUX" value="DEC7" />
         <ctl name="ADC MUX7" value="DMIC" />
         <ctl name="DMIC MUX7" value="DMIC2" />
+        <ctl name="DEC7 Volume" value="96" />
         <ctl name="CDC_IF TX8 MUX" value="DEC8" />
         <ctl name="ADC MUX8" value="DMIC" />
         <ctl name="DMIC MUX8" value="DMIC0" />
+        <ctl name="DEC8 Volume" value="96" />
     </path>
 
    <path name="audio-capture">
diff --git a/hal/audio_extn/soundtrigger.c b/hal/audio_extn/soundtrigger.c
index 50bebf7..a233bad 100644
--- a/hal/audio_extn/soundtrigger.c
+++ b/hal/audio_extn/soundtrigger.c
@@ -81,6 +81,7 @@
     AUDIO_EVENT_CAPTURE_STREAM_INACTIVE,
     AUDIO_EVENT_CAPTURE_STREAM_ACTIVE,
     AUDIO_EVENT_BATTERY_STATUS_CHANGED,
+    AUDIO_EVENT_GET_PARAM
 } audio_event_type_t;
 
 typedef enum {
@@ -123,6 +124,13 @@
     int device;
 };
 
+struct sound_trigger_get_param_data {
+    char *param;
+    int sm_handle;
+    struct str_parms *reply;
+};
+
+
 struct audio_event_info {
     union {
         ssr_event_status_t status;
@@ -131,6 +139,7 @@
         struct audio_read_samples_info aud_info;
         char str_value[ST_EVENT_CONFIG_MAX_STR_VALUE];
         struct audio_hal_usecase usecase;
+        struct sound_trigger_get_param_data st_get_param_data;
     } u;
     struct sound_trigger_device_info device_info;
 };
@@ -166,6 +175,11 @@
 #define SOUND_TRIGGER_LIBRARY_PATH "/vendor/lib/hw/sound_trigger.primary.%s.so"
 #endif
 
+#define SVA_PARAM_DIRECTION_OF_ARRIVAL "st_direction_of_arrival"
+#define SVA_PARAM_CHANNEL_INDEX "st_channel_index"
+
+#define MAX_STR_LENGTH_FFV_PARAMS 30
+#define MAX_FFV_SESSION_ID 100
 /*
  * Current proprietary API version used by AHAL. Queried by STHAL
  * for compatibility check with AHAL
@@ -585,12 +599,46 @@
     }
 }
 
+static int extract_sm_handle(const char *keys, char *paramstr) {
+    char *tmpstr, *token;
+    char *inputstr = NULL;
+    int value = -EINVAL;
+
+    if (keys == NULL || paramstr == NULL)
+        goto exit;
+
+    inputstr = strdup(keys);
+    token =strtok_r(inputstr,":",&tmpstr);
+
+    if (token == NULL)
+        goto exit;
+
+    ALOGD("%s input string <%s> param string <%s>", __func__, keys,token);
+    strlcpy(paramstr, token, MAX_STR_LENGTH_FFV_PARAMS);
+    token =strtok_r(NULL,":=",&tmpstr);
+
+    if (token == NULL)
+        goto exit;
+
+    value = atoi(token);
+    if (value > 0 && value < MAX_FFV_SESSION_ID)
+        ALOGD(" %s SVA sm handle<=%d>",__func__, value);
+
+exit:
+    if (inputstr != NULL)
+        free(inputstr);
+
+    return value;
+}
 void audio_extn_sound_trigger_get_parameters(const struct audio_device *adev __unused,
-                       struct str_parms *query, struct str_parms *reply)
+                                             struct str_parms *query,
+                                             struct str_parms *reply)
 {
     audio_event_info_t event;
     int ret;
-    char value[32];
+    char value[32], paramstr[MAX_STR_LENGTH_FFV_PARAMS];
+
+    ALOGD("%s input string<%s>", __func__, str_parms_to_str(query));
 
     ret = str_parms_get_str(query, "SVA_EXEC_MODE_STATUS", value,
                                                   sizeof(value));
@@ -598,6 +646,23 @@
         st_dev->st_callback(AUDIO_EVENT_SVA_EXEC_MODE_STATUS, &event);
         str_parms_add_int(reply, "SVA_EXEC_MODE_STATUS", event.u.value);
     }
+
+    ret = extract_sm_handle(str_parms_to_str(query), paramstr);
+
+    if ((ret >= 0) && !strncmp(paramstr, SVA_PARAM_DIRECTION_OF_ARRIVAL,
+            MAX_STR_LENGTH_FFV_PARAMS)) {
+        event.u.st_get_param_data.sm_handle = ret;
+        event.u.st_get_param_data.param = SVA_PARAM_DIRECTION_OF_ARRIVAL;
+        event.u.st_get_param_data.reply = reply;
+        st_dev->st_callback(AUDIO_EVENT_GET_PARAM, &event);
+    } else if ((ret >=0) && !strncmp(paramstr, SVA_PARAM_CHANNEL_INDEX,
+            MAX_STR_LENGTH_FFV_PARAMS)) {
+        event.u.st_get_param_data.sm_handle = ret;
+        event.u.st_get_param_data.param = SVA_PARAM_CHANNEL_INDEX;
+        event.u.st_get_param_data.reply = reply;
+        st_dev->st_callback(AUDIO_EVENT_GET_PARAM, &event);
+    }
+
 }
 
 int audio_extn_sound_trigger_init(struct audio_device *adev)
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 99c291c..7d6db15 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -6928,9 +6928,12 @@
 static char* adev_get_parameters(const struct audio_hw_device *dev,
                                  const char *keys)
 {
+    ALOGD("%s:%s", __func__, keys);
+
     struct audio_device *adev = (struct audio_device *)dev;
     struct str_parms *reply = str_parms_create();
     struct str_parms *query = str_parms_create_str(keys);
+
     char *str;
     char value[256] = {0};
     int ret = 0;
@@ -6982,7 +6985,7 @@
     str_parms_destroy(query);
     str_parms_destroy(reply);
 
-    ALOGV("%s: exit: returns - %s", __func__, str);
+    ALOGD("%s: exit: returns - %s", __func__, str);
     return str;
 }