audio: qahw: Implement new api to store data in payload
Implement new api qahw_get_param_data to store Sourcetracking
parameters in given payload.
Change-Id: Ie256d075566ad9072466c8ac72f46dca9e5a0f3a
diff --git a/qahw_api/inc/qahw_api.h b/qahw_api/inc/qahw_api.h
index 5db0fdd..1dc52f2 100644
--- a/qahw_api/inc/qahw_api.h
+++ b/qahw_api/inc/qahw_api.h
@@ -421,6 +421,13 @@
/*returns current QTI HAL version */
int qahw_get_version();
+/* Api to implement get parameters based on keyword param_id
+ * and store data in payload.
+ */
+int qahw_get_param_data(const qahw_module_handle_t *hw_module,
+ qahw_param_id param_id,
+ qahw_param_payload *payload);
+
__END_DECLS
#endif // QTI_AUDIO_HAL_API_H
diff --git a/qahw_api/inc/qahw_defs.h b/qahw_api/inc/qahw_defs.h
index 5e92464..c3def18 100644
--- a/qahw_api/inc/qahw_defs.h
+++ b/qahw_api/inc/qahw_defs.h
@@ -217,6 +217,32 @@
uint32_t reserved[64]; /*reserved for future */
} qahw_in_buffer_t;
+#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;
+
+
__END_DECLS
#endif // QTI_AUDIO_HAL_DEFS_H
diff --git a/qahw_api/src/qahw.c b/qahw_api/src/qahw.c
index 48df887..4025c56 100644
--- a/qahw_api/src/qahw.c
+++ b/qahw_api/src/qahw.c
@@ -91,6 +91,10 @@
static int qahw_list_count;
static pthread_mutex_t qahw_module_init_lock = PTHREAD_MUTEX_INITIALIZER;
+typedef int (*qahwi_get_param_data_t) (const struct audio_device *,
+ qahw_param_id, qahw_param_payload *);
+qahwi_get_param_data_t qahwi_get_param_data;
+
/** Start of internal functions */
/******************************************************************************/
@@ -1208,6 +1212,39 @@
return str_param;
}
+/* Api to implement get parameters based on keyword param_id
+ * and store data in payload.
+ */
+int qahw_get_param_data(const qahw_module_handle_t *hw_module,
+ qahw_param_id param_id,
+ qahw_param_payload *payload)
+{
+ int ret = 0;
+ qahw_module_t *qahw_module = (qahw_module_t *)hw_module;
+ qahw_module_t *qahw_module_temp;
+
+ pthread_mutex_lock(&qahw_module_init_lock);
+ qahw_module_temp = get_qahw_module_by_ptr(qahw_module);
+ pthread_mutex_unlock(&qahw_module_init_lock);
+ if (qahw_module_temp == NULL) {
+ ALOGE("%s:: invalid hw module %p", __func__, qahw_module);
+ goto exit;
+ }
+
+ pthread_mutex_lock(&qahw_module->lock);
+
+ if (qahwi_get_param_data){
+ ret = qahwi_get_param_data (qahw_module->audio_device, param_id, payload);
+ } else {
+ ret = -ENOSYS;
+ ALOGE("%s not supported\n",__func__);
+ }
+ pthread_mutex_unlock(&qahw_module->lock);
+
+exit:
+ return ret;
+}
+
/* Returns audio input buffer size according to parameters passed or
* 0 if one of the parameters is not supported.
* See also get_buffer_size which is for a particular stream.
@@ -1507,6 +1544,11 @@
qahw_module->module = module;
ALOGD("%s::Loaded HAL %s module %p", __func__, ahal_name, qahw_module);
+ qahwi_get_param_data = (qahwi_get_param_data_t) dlsym (module->dso,
+ "qahwi_get_param_data");
+ if (!qahwi_get_param_data)
+ ALOGD("%s::qahwi_get_param_data api is not defined\n",__func__);
+
if (!qahw_list_count)
list_init(&qahw_module_list);
qahw_list_count++;