audio: hal: Add new get_param_data api

Implement get_param_data api to store Sourcetracking
parameters in payload.

Change-Id: Idd8c3ddbe053237ea642c61dcc8441ed404e9c75
diff --git a/Makefile.am b/Makefile.am
index 57c0c82..299385d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,2 +1,7 @@
-SUBDIRS = hal qahw_api qahw_api/test
+SUBDIRS = hal
+
+if QAHW_SUPPORT
+SUBDIRS += qahw_api qahw_api/test
+endif
+
 ACLOCAL_AMFLAGS = -I m4
diff --git a/configure.ac b/configure.ac
index b3fe8cc..cbc082c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -56,6 +56,8 @@
 
 AM_CONDITIONAL(USE_GLIB, test "x${with_glib}" = "xyes")
 
+AM_CONDITIONAL([QAHW_SUPPORT], [test x$BOARD_SUPPORTS_QAHW = xtrue])
+
 AM_CONDITIONAL([HDMI_EDID],    [test x$AUDIO_FEATURE_ENABLED_HDMI_EDID = xtrue])
 AM_CONDITIONAL([FM_POWER_OPT], [test x$AUDIO_FEATURE_ENABLED_FM_POWER_OPT = xtrue])
 AM_CONDITIONAL([USBAUDIO], [test x$AUDIO_FEATURE_ENABLED_USBAUDIO = xtrue])
diff --git a/hal/audio_extn/audio_defs.h b/hal/audio_extn/audio_defs.h
index cfd29e0..ee4f7d4 100644
--- a/hal/audio_extn/audio_defs.h
+++ b/hal/audio_extn/audio_defs.h
@@ -111,4 +111,30 @@
  */
 #define AUDIO_INPUT_FLAG_TIMESTAMP 0x80000000
 
+/* MAX SECTORS for sourcetracking feature */
+#define MAX_SECTORS 8
+
+struct qahw_source_tracking_param {
+    uint8_t   vad[MAX_SECTORS];
+    uint16_t  doa_speech;
+    uint16_t  doa_noise[3];
+    uint8_t   polar_activity[360];
+};
+
+struct qahw_sound_focus_param {
+    uint16_t  start_angle[MAX_SECTORS];
+    uint8_t   enable[MAX_SECTORS];
+    uint16_t  gain_step;
+};
+
+typedef union {
+    struct qahw_source_tracking_param st_params;
+    struct qahw_sound_focus_param sf_params;
+} qahw_param_payload;
+
+typedef enum {
+    QAHW_PARAM_SOURCE_TRACK,
+    QAHW_PARAM_SOUND_FOCUS
+} qahw_param_id;
+
 #endif /* AUDIO_DEFS_H */
diff --git a/hal/audio_extn/source_track.c b/hal/audio_extn/source_track.c
index 0a0b970..d34ed6b 100644
--- a/hal/audio_extn/source_track.c
+++ b/hal/audio_extn/source_track.c
@@ -502,6 +502,36 @@
     }
 }
 
+int audio_extn_get_soundfocus_data(const struct audio_device *adev,
+                                   struct sound_focus_param *payload)
+{
+    int ret = 0;
+    int bitmask =0;
+    struct sound_focus_param *sound_focus_data = payload;
+
+    bitmask = BITMASK_AUDIO_PARAMETER_KEYS_SOUND_FOCUS;
+
+    ret = get_soundfocus_sourcetracking_data(adev, bitmask,
+                    sound_focus_data, NULL);
+
+    return ret ;
+}
+
+int audio_extn_get_sourcetrack_data(const struct audio_device *adev,
+                              struct source_tracking_param *payload)
+{
+    int ret = 0;
+    int bitmask = 0;
+    struct source_tracking_param *source_tracking_data = payload;
+
+    bitmask = BITMASK_AUDIO_PARAMETER_KEYS_SOURCE_TRACKING;
+
+    ret = get_soundfocus_sourcetracking_data(adev, bitmask,
+                    NULL, source_tracking_data);
+
+    return ret ;
+}
+
 void audio_extn_source_track_get_parameters(const struct audio_device *adev,
                                             struct str_parms *query,
                                             struct str_parms *reply)
diff --git a/hal/audio_hw_extn_api.c b/hal/audio_hw_extn_api.c
index bfeda9b..c4a3cdf 100644
--- a/hal/audio_hw_extn_api.c
+++ b/hal/audio_hw_extn_api.c
@@ -48,6 +48,39 @@
 };
 #endif
 
+int qahwi_get_param_data(const struct audio_device *adev,
+                         qahw_param_id param_id, qahw_param_payload *payload)
+{
+    int ret = 0;
+
+    if (adev == NULL) {
+        ALOGE("%s::INVALID PARAM\n",__func__);
+        return -EINVAL;
+    }
+
+    if (payload == NULL) {
+        ALOGE("%s::INVALID PAYLOAD VALUE\n",__func__);
+        return -EINVAL;
+    }
+
+    switch (param_id) {
+        case QAHW_PARAM_SOUND_FOCUS:
+              ret = audio_extn_get_soundfocus_data(adev,
+                     (struct qahw_sound_focus_param *)payload);
+              break;
+        case QAHW_PARAM_SOURCE_TRACK:
+              ret = audio_extn_get_sourcetrack_data(adev,
+                     (struct qahw_source_tracking_param*)payload);
+              break;
+       default:
+             ALOGE("%s::INVALID PARAM ID:%d\n",__func__,param_id);
+             ret = -EINVAL;
+             break;
+
+        return ret;
+        }
+}
+
 ssize_t qahwi_in_read_v2(struct audio_stream_in *stream, void* buffer,
                           size_t bytes, uint64_t *timestamp)
 {