Fix invalid format string
[platform/adaptation/emulator/audio-hal-emul.git] / tizen-audio-volume.c
index f3e3d66..e645f31 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * audio-hal
  *
- * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2015 - 2016 Samsung Electronics Co., Ltd. All rights reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 #include "tizen-audio-internal.h"
 
-#define VOLUME_INI_DEFAULT_PATH     "/usr/etc/mmfw_audio_volume.ini"
+#define VOLUME_INI_DEFAULT_PATH     SYSCONFDIR"/multimedia/mmfw_audio_volume.ini" /* SYSCONFDIR is defined at .spec */
 #define VOLUME_INI_TEMP_PATH        "/opt/system/mmfw_audio_volume.ini"
 #define VOLUME_VALUE_MAX            (1.0f)
 #define GAIN_VALUE_MAX              (1.0f)
 
+uint32_t g_master_volume_level = 100;
+
 static const char *g_volume_vconf[AUDIO_VOLUME_TYPE_MAX] = {
     "file/private/sound/volume/system",         /* AUDIO_VOLUME_TYPE_SYSTEM */
     "file/private/sound/volume/notification",   /* AUDIO_VOLUME_TYPE_NOTIFICATION */
@@ -135,7 +137,7 @@ static void __dump_tb(audio_hal_t *ah)
         snprintf(dump_str_ptr, 8, "%6s:", vol_type_str);
         dump_str_ptr += strlen(dump_str_ptr);
 
-        for (vol_level_idx = 0; vol_level_idx < volume_value_table->volume_level_max[vol_type_idx]; vol_level_idx++) {
+        for (vol_level_idx = 0; vol_level_idx < ah->volume.volume_level_max[vol_type_idx]; vol_level_idx++) {
             snprintf(dump_str_ptr, 6, "%01.2f ", volume_value_table->volume[vol_type_idx][vol_level_idx]);
             dump_str_ptr += strlen(dump_str_ptr);
         }
@@ -198,7 +200,7 @@ static audio_return_t __load_volume_value_table_from_ini(audio_hal_t *ah)
     for (vol_type_idx = 0; vol_type_idx < AUDIO_VOLUME_TYPE_MAX; vol_type_idx++) {
         const char *vol_type_str = __get_volume_type_string_by_idx(vol_type_idx);
 
-        volume_value_table->volume_level_max[vol_type_idx] = 0;
+        ah->volume.volume_level_max[vol_type_idx] = 0;
         size = strlen(table_str) + strlen(vol_type_str) + 2;
         key = malloc(size);
         if (key) {
@@ -211,11 +213,11 @@ static audio_return_t __load_volume_value_table_from_ini(audio_hal_t *ah)
                     double vol_value = 0.0f;
                     if (strncmp(token, "0", strlen(token)))
                         vol_value = pow(10.0, (atof(token) - 100) / 20.0);
-                    volume_value_table->volume[vol_type_idx][volume_value_table->volume_level_max[vol_type_idx]++] = vol_value;
+                    volume_value_table->volume[vol_type_idx][ah->volume.volume_level_max[vol_type_idx]++] = vol_value;
                     token = strtok_r(NULL, delimiter, &ptr);
                 }
             } else {
-                volume_value_table->volume_level_max[vol_type_idx] = 1;
+                ah->volume.volume_level_max[vol_type_idx] = 1;
                 for (vol_level_idx = 0; vol_level_idx < AUDIO_VOLUME_LEVEL_MAX; vol_level_idx++) {
                     volume_value_table->volume[vol_type_idx][vol_level_idx] = VOLUME_VALUE_MAX;
                 }
@@ -305,16 +307,13 @@ audio_return_t _audio_volume_deinit(audio_hal_t *ah)
 audio_return_t audio_get_volume_level_max(void *audio_handle, audio_volume_info_t *info, uint32_t *level)
 {
     audio_hal_t *ah = (audio_hal_t *)audio_handle;
-    audio_volume_value_table_t *volume_value_table;
 
     AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
     AUDIO_RETURN_VAL_IF_FAIL(info, AUDIO_ERR_PARAMETER);
     AUDIO_RETURN_VAL_IF_FAIL(level, AUDIO_ERR_PARAMETER);
-    AUDIO_RETURN_VAL_IF_FAIL(ah->volume.volume_value_table, AUDIO_ERR_PARAMETER);
 
     /* Get max volume level by device & type */
-    volume_value_table = ah->volume.volume_value_table;
-    *level = volume_value_table->volume_level_max[__get_volume_idx_by_string_type(info->type)];
+    *level = ah->volume.volume_level_max[__get_volume_idx_by_string_type(info->type)];
 
     AUDIO_LOG_DEBUG("get_[%s] volume_level_max: %d", info->type, *level);
 
@@ -329,6 +328,11 @@ audio_return_t audio_get_volume_level(void *audio_handle, audio_volume_info_t *i
     AUDIO_RETURN_VAL_IF_FAIL(info, AUDIO_ERR_PARAMETER);
     AUDIO_RETURN_VAL_IF_FAIL(level, AUDIO_ERR_PARAMETER);
 
+    if (!strncmp(info->type, "master", strlen("master"))) {
+        *level = g_master_volume_level;
+        return AUDIO_RET_OK;
+    }
+
     *level = ah->volume.volume_level[__get_volume_idx_by_string_type(info->type)];
 
     AUDIO_LOG_INFO("get [%s] volume_level: %d, direction(%d)", info->type, *level, info->direction);
@@ -349,7 +353,7 @@ audio_return_t audio_get_volume_value(void *audio_handle, audio_volume_info_t *i
 
     /* Get basic volume by device & type & level */
     volume_value_table = ah->volume.volume_value_table;
-    if (volume_value_table->volume_level_max[__get_volume_idx_by_string_type(info->type)] < level)
+    if (ah->volume.volume_level_max[__get_volume_idx_by_string_type(info->type)] < level)
         *value = VOLUME_VALUE_MAX;
     else
         *value = volume_value_table->volume[__get_volume_idx_by_string_type(info->type)][level];
@@ -367,6 +371,11 @@ audio_return_t audio_set_volume_level(void *audio_handle, audio_volume_info_t *i
 
     AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
     AUDIO_RETURN_VAL_IF_FAIL(info, AUDIO_ERR_PARAMETER);
+    if (!strncmp(info->type, "master", strlen("master"))) {
+        g_master_volume_level = level;
+        return AUDIO_RET_OK;
+    }
+    AUDIO_RETURN_VAL_IF_FAIL((ah->volume.volume_level_max[__get_volume_idx_by_string_type(info->type)] >= level), AUDIO_ERR_PARAMETER);
 
     /* Update volume level */
     ah->volume.volume_level[__get_volume_idx_by_string_type(info->type)] = level;
@@ -384,6 +393,8 @@ audio_return_t audio_get_volume_mute(void *audio_handle, audio_volume_info_t *in
     AUDIO_RETURN_VAL_IF_FAIL(info, AUDIO_ERR_PARAMETER);
     AUDIO_RETURN_VAL_IF_FAIL(mute, AUDIO_ERR_PARAMETER);
 
+    /* TODO. Not implemented */
+
     return audio_ret;
 }
 
@@ -395,5 +406,7 @@ audio_return_t audio_set_volume_mute(void *audio_handle, audio_volume_info_t *in
     AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
     AUDIO_RETURN_VAL_IF_FAIL(info, AUDIO_ERR_PARAMETER);
 
+    /* TODO. Not implemented */
+
     return audio_ret;
 }