


enum AUDIO_OUTPUT_TYPE{
    AUDIO_OUTPUT_TYPE_NORMAL = 0,
    AUDIO_OUTPUT_TYPE_BT,
    AUDIO_OUTPUT_TYPE_AM,
    AUDIO_OUTPUT_TYPE_SUBMIX
};

int audio_output_type = AUDIO_OUTPUT_TYPE_NORMAL;
bool masterMute=false;
bool btvPlayback=true;
bool nuguPlayback=false;
bool childLimitedMute=false;

void setHdmiAudioOuput(){
    if(masterMute){
        // fix_me. set HDMI mute
        return;
    }
 
    if(nuguPlayback || (!btvPlayback) || (audio_output_type ==AUDIO_OUTPUT_TYPE_SUBMIX) ){
        if((audio_output_type ==AUDIO_OUTPUT_TYPE_BT)||(audio_output_type ==AUDIO_OUTPUT_TYPE_AM)){ 
            // fix_me. set HDMI mute
            return;
        }
        else {
            // fix_me. set HDMI unmute
            return;
        }
    }

    if(childLimitedMute){
        if(audio_output_type ==AUDIO_OUTPUT_TYPE_SUBMIX){
            // fix_me. set HDMI unmute
            return;
        }
        else{
            // fix_me. set HDMI mute
            return;
        }
    }
    if((audio_output_type ==AUDIO_OUTPUT_TYPE_BT)||(audio_output_type ==AUDIO_OUTPUT_TYPE_AM)){
        // fix_me. set HDMI mute
        return;
    }

    // fix_me. set HDMI unmute
    return;
}

static int adev_set_parameters (struct audio_hw_device *dev, const char *kvpairs)
{
....
    ret = str_parms_get_str (parms, "audio_output_type", value, sizeof (value) );
    if (ret >= 0) {
        ALOGI("adev_set_parameters()  audio_output_type: %s\n", value);
        if (strcmp (value, "bt") == 0) audio_output_type=AUDIO_OUTPUT_TYPE_BT;
        else if (strcmp (value, "am") == 0) audio_output_type=AUDIO_OUTPUT_TYPE_AM;
        else if (strcmp (value, "submix") == 0) audio_output_type=AUDIO_OUTPUT_TYPE_SUBMIX;
        else audio_output_type=AUDIO_OUTPUT_TYPE_NORMAL;

        setHdmiAudioOuput();
        goto exit;
    }

    ret = str_parms_get_str (parms, "audio_master_mute", value, sizeof (value) );
    if (ret >= 0) {
        ALOGI("adev_set_parameters()  audio_master_mute: %s\n", value);
        if (strcmp (value, "mute") == 0) masterMute=true;
        else masterMute=false;

        setHdmiAudioOuput();
        goto exit;
    }

    ret = str_parms_get_str (parms, "btv_playback", value, sizeof (value) );
    if (ret >= 0) {
        ALOGI("adev_set_parameters()  btv_playback: %s\n", value);
        if (strcmp (value, "off") == 0) btvPlayback=false;
        else btvPlayback=true;

        setHdmiAudioOuput();
        goto exit;
    }

    ret = str_parms_get_str (parms, "nugu_playback", value, sizeof (value) );
    if (ret >= 0) {
        ALOGI("adev_set_parameters()  nugu_playback: %s\n", value);
        if (strcmp (value, "on") == 0) nuguPlayback=true;
        else nuguPlayback=false;

        setHdmiAudioOuput();
        goto exit;
    }

    ret = str_parms_get_str (parms, "child_limited_mute", value, sizeof (value) );
    if (ret >= 0) {
        ALOGI("adev_set_parameters()  child_limited_mute: %s\n", value);
        if (strcmp (value, "mute") == 0) childLimitedMute=true;
        else childLimitedMute=false;

        setHdmiAudioOuput();
        goto exit;
    }
...
}
