Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f9308498 authored by Shiv Maliyappanahalli's avatar Shiv Maliyappanahalli
Browse files

hal: add support for all_call_states key

Add support for all_call_states which can be queried by
applications to know call states.

Change-Id: I5ba66186e9d9f6d5769a814f4c1e0627c6f6dd74
parent 31e7e442
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1992,7 +1992,7 @@ static int adev_open_output_stream(struct audio_hw_device *dev,
{
    struct audio_device *adev = (struct audio_device *)dev;
    struct stream_out *out;
    int i, ret;
    int i, ret = 0;

    ALOGV("%s: enter: sample_rate(%d) channel_mask(%#x) devices(%#x) flags(%#x)",
          __func__, config->sample_rate, config->channel_mask, devices, flags);
@@ -2316,7 +2316,7 @@ static char* adev_get_parameters(const struct audio_hw_device *dev,
    pthread_mutex_lock(&adev->lock);

    audio_extn_get_parameters(adev, query, reply);
    voice_extn_get_parameters(adev, query, reply);
    voice_get_parameters(adev, query, reply);
    platform_get_parameters(adev->platform, query, reply);
    str = str_parms_to_str(reply);
    str_parms_destroy(query);
+7 −0
Original line number Diff line number Diff line
@@ -351,6 +351,13 @@ int voice_stop_call(struct audio_device *adev)
    return ret;
}

void voice_get_parameters(struct audio_device *adev,
                          struct str_parms *query,
                          struct str_parms *reply)
{
    voice_extn_get_parameters(adev, query, reply);
}

int voice_set_parameters(struct audio_device *adev, struct str_parms *parms)
{
    char *str;
+2 −0
Original line number Diff line number Diff line
@@ -72,6 +72,8 @@ enum {
int voice_start_call(struct audio_device *adev);
int voice_stop_call(struct audio_device *adev);
int voice_set_parameters(struct audio_device *adev, struct str_parms *parms);
void voice_get_parameters(struct audio_device *adev, struct str_parms *query,
                          struct str_parms *reply);
void voice_init(struct audio_device *adev);
bool voice_is_in_call(struct audio_device *adev);
int voice_set_mic_mute(struct audio_device *dev, bool state);
+42 −8
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@
 */

#define LOG_TAG "voice_extn"
/*#define LOG_NDEBUG 0*/
#define LOG_NDEBUG 0
#define LOG_NDDEBUG 0

#include <errno.h>
@@ -36,6 +36,10 @@

#define AUDIO_PARAMETER_KEY_VSID                "vsid"
#define AUDIO_PARAMETER_KEY_CALL_STATE          "call_state"
#define AUDIO_PARAMETER_KEY_AUDIO_MODE          "audio_mode"
#define AUDIO_PARAMETER_KEY_ALL_CALL_STATES     "all_call_states"

#define VOICE_EXTN_PARAMETER_VALUE_MAX_LEN 256

#define VOICE2_VSID 0x10DC1000
#define VOLTE_VSID  0x10C02000
@@ -432,7 +436,7 @@ int voice_extn_set_parameters(struct audio_device *adev,
            goto done;
        }
    } else {
        ALOGD("%s: Not handled here", __func__);
        ALOGV("%s: Not handled here", __func__);
    }

done:
@@ -440,21 +444,51 @@ done:
    return ret;
}

int get_all_call_states_str(const struct audio_device *adev,
                            char *value)
{
    int ret = 0;
    char *cur_ptr = value;
    int i, len=0;

    for (i = 0; i < MAX_VOICE_SESSIONS; i++) {
        snprintf(cur_ptr, VOICE_EXTN_PARAMETER_VALUE_MAX_LEN - len,
                 "%d:%d,",adev->voice.session[i].vsid,
                 adev->voice.session[i].state.current);
        len = strlen(cur_ptr);
        cur_ptr = cur_ptr + len;
    }
    ALOGV("%s:value=%s", __func__, value);
    return ret;
}

void voice_extn_get_parameters(const struct audio_device *adev,
                               struct str_parms *query,
                               struct str_parms *reply)
{
    int ret;
    char value[32]={0};
    char value[VOICE_EXTN_PARAMETER_VALUE_MAX_LEN] = {0};
    char *str = NULL;

    ret = str_parms_get_str(query, "audio_mode", value,
    ALOGV("%s: enter %s", __func__, str_parms_to_str(query));

    ret = str_parms_get_str(query, AUDIO_PARAMETER_KEY_AUDIO_MODE, value,
                            sizeof(value));
    if (ret >= 0) {
        str_parms_add_int(reply, "audio_mode", adev->mode);
        str_parms_add_int(reply, AUDIO_PARAMETER_KEY_AUDIO_MODE, adev->mode);
    }

    ALOGV("%s: returns %s", __func__, str_parms_to_str(reply));
    ret = str_parms_get_str(query, AUDIO_PARAMETER_KEY_ALL_CALL_STATES,
                            value, sizeof(value));
    if (ret >= 0) {
        ret = get_all_call_states_str(adev, value);
        if (ret) {
            ALOGE("%s: Error fetching call states, err:%d", __func__, ret);
            return;
        }
        str_parms_add_str(reply, AUDIO_PARAMETER_KEY_ALL_CALL_STATES, value);
    }
    ALOGV("%s: exit: returns \"%s\"", __func__, str_parms_to_str(reply));
}

void voice_extn_out_get_parameters(struct stream_out *out,