*/
#define SOUND_TYPE_NUM SOUND_TYPE_VOICE + 1
+#define SOUND_TYPE_INTERNAL_NUM SOUND_TYPE_BIXBY + 1
/**
* @internal
SOUND_STREAM_TYPE_MEDIA_NETWORK_SOURCE, /**< Sound stream type for network source media (Since 5.5) */
} sound_stream_type_internal_e;
+/**
+ * @brief Enumeration for sound type for internal.
+ * @since_tizen 6.0
+ */
+typedef enum {
+ SOUND_TYPE_BIXBY, /**< Sound type for Bixby */
+} sound_type_internal_e;
+
/**
* @internal
* @brief Enumeration for sound filters.
*/
int sound_manager_get_mute(sound_type_e type, bool *muted);
+/**
+ * @brief Called when the volume has changed.
+ * @since_tizen 6.0
+ * @param[in] type The internal sound type
+ * @param[in] level The new volume level
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre sound_manager_set_volume_internal() will invoke this callback if you register it using sound_manager_add_volume_changed_cb_internal().
+ * @see sound_manager_add_volume_changed_cb_internal()
+ * @see sound_manager_remove_volume_changed_cb_internal()
+ */
+typedef void (*sound_manager_volume_changed_cb_internal) (sound_type_internal_e type, unsigned int level, void *user_data);
+
+/**
+ * @brief Gets the maximum volume level supported for a particular sound type.
+ * @since_tizen 6.0
+ * @param[in] type The internal sound type
+ * @param[out] max The maximum volume level
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see sound_manager_set_volume_internal()
+ * @see sound_manager_get_volume_internal()
+ */
+int sound_manager_get_max_volume_internal(sound_type_internal_e type, int *max);
+
+/**
+ * @brief Sets the volume level specified for a particular sound type.
+ * @since_tizen 6.0
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/volume.set
+ * @param[in] type The internal sound type
+ * @param[in] level The volume level to be set
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SOUND_MANAGER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system
+ * @see sound_manager_get_max_volume_internal()
+ * @see sound_manager_get_volume_internal()
+ */
+int sound_manager_set_volume_internal(sound_type_internal_e type, int level);
+
+/**
+ * @brief Gets the volume level specified for a particular sound type.
+ * @since_tizen 6.0
+ * @param[in] type The internal sound type
+ * @param[out] level The current volume level
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system
+ * @see sound_manager_get_max_volume_internal()
+ * @see sound_manager_set_volume_internal()
+ */
+int sound_manager_get_volume_internal(sound_type_internal_e type, int *level);
+
+/**
+ * @brief Gets the type of the sound being currently played.
+ * @since_tizen 6.0
+ * @param[out] type The internal sound type
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SOUND_MANAGER_ERROR_NO_PLAYING_SOUND No playing sound
+ * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system
+ */
+int sound_manager_get_current_sound_type_internal(sound_type_internal_e *type);
+
+/**
+ * @brief Adds a callback function to be invoked when the volume level is changed.
+ * @since_tizen 6.0
+ * @param[in] callback Callback function to indicate change in volume
+ * @param[in] user_data The user data to be passed to the callback function
+ * @param[out] id The callback id
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system
+ * @post sound_manager_volume_changed_cb_internal() will be invoked.
+ * @see sound_manager_remove_volume_changed_cb_internal()
+ * @see sound_manager_volume_changed_cb_internal()
+ */
+int sound_manager_add_volume_changed_cb_internal(sound_manager_volume_changed_cb_internal callback, void *user_data, int *id);
+
+/**
+ * @brief Removes the volume change callback.
+ * @since_tizen 6.0
+ * @param[in] id The id of the callback to remove
+ * @return 0 on success, otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system
+ * @see sound_manager_add_volume_changed_cb_internal()
+ */
+int sound_manager_remove_volume_changed_cb_internal(int id);
+
/**
* @internal
* @brief Creates a handle for stream information.
-
/*
* Copyright (c) 2015 - 2018 Samsung Electronics Co., Ltd All Rights Reserved
*
*/
#define SOUND_TYPE_NUM SOUND_TYPE_VOICE + 1
+#define SOUND_TYPE_INTERNAL_NUM SOUND_TYPE_BIXBY + 1
/**
* @internal
SOUND_STREAM_TYPE_MEDIA_COMPRESSED, /**< Sound stream type for compressed media (Since 4.0) */
} sound_stream_type_internal_e;
+/**
+ * @brief Enumeration for sound type for internal.
+ * @since_tizen 6.0
+ */
+typedef enum {
+ SOUND_TYPE_BIXBY, /**< Sound type for Bixby */
+} sound_type_internal_e;
+
/**
* @internal
* @brief Enumeration for sound filters.
*/
int sound_manager_get_mute(sound_type_e type, bool *muted);
+/**
+ * @brief Called when the volume has changed.
+ * @since_tizen 6.0
+ * @param[in] type The internal sound type
+ * @param[in] level The new volume level
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre sound_manager_set_volume_internal() will invoke this callback if you register it using sound_manager_add_volume_changed_cb_internal().
+ * @see sound_manager_add_volume_changed_cb_internal()
+ * @see sound_manager_remove_volume_changed_cb_internal()
+ */
+typedef void (*sound_manager_volume_changed_cb_internal) (sound_type_internal_e type, unsigned int level, void *user_data);
+
+/**
+ * @brief Gets the maximum volume level supported for a particular sound type.
+ * @since_tizen 6.0
+ * @param[in] type The internal sound type
+ * @param[out] max The maximum volume level
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see sound_manager_set_volume_internal()
+ * @see sound_manager_get_volume_internal()
+ */
+int sound_manager_get_max_volume_internal(sound_type_internal_e type, int *max);
+
+/**
+ * @brief Sets the volume level specified for a particular sound type.
+ * @since_tizen 6.0
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/volume.set
+ * @param[in] type The internal sound type
+ * @param[in] level The volume level to be set
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SOUND_MANAGER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system
+ * @see sound_manager_get_max_volume_internal()
+ * @see sound_manager_get_volume_internal()
+ */
+int sound_manager_set_volume_internal(sound_type_internal_e type, int level);
+
+/**
+ * @brief Gets the volume level specified for a particular sound type.
+ * @since_tizen 6.0
+ * @param[in] type The internal sound type
+ * @param[out] level The current volume level
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system
+ * @see sound_manager_get_max_volume_internal()
+ * @see sound_manager_set_volume_internal()
+ */
+int sound_manager_get_volume_internal(sound_type_internal_e type, int *level);
+
+/**
+ * @brief Gets the type of the sound being currently played.
+ * @since_tizen 6.0
+ * @param[out] type The internal sound type
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SOUND_MANAGER_ERROR_NO_PLAYING_SOUND No playing sound
+ * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system
+ */
+int sound_manager_get_current_sound_type_internal(sound_type_internal_e *type);
+
+/**
+ * @brief Adds a callback function to be invoked when the volume level is changed.
+ * @since_tizen 6.0
+ * @param[in] callback Callback function to indicate change in volume
+ * @param[in] user_data The user data to be passed to the callback function
+ * @param[out] id The callback id
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system
+ * @post sound_manager_volume_changed_cb_internal() will be invoked.
+ * @see sound_manager_remove_volume_changed_cb_internal()
+ * @see sound_manager_volume_changed_cb_internal()
+ */
+int sound_manager_add_volume_changed_cb_internal(sound_manager_volume_changed_cb_internal callback, void *user_data, int *id);
+
+/**
+ * @brief Removes the volume change callback.
+ * @since_tizen 6.0
+ * @param[in] id The id of the callback to remove
+ * @return 0 on success, otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system
+ * @see sound_manager_add_volume_changed_cb_internal()
+ */
+int sound_manager_remove_volume_changed_cb_internal(int id);
+
/**
* @internal
* @brief Creates a handle for stream information.
int _convert_sound_type(sound_type_e sound_type, const char **volume_type);
+int _convert_sound_type_for_internal(sound_type_internal_e sound_type, const char **volume_type);
+
int _convert_sound_type_to_enum(const char *sound_type, sound_type_e *sound_type_enum);
+int _convert_sound_type_to_enum_for_internal(const char *sound_type, sound_type_internal_e *sound_type_enum);
+
int _get_volume_max_level(const char *direction, const char *volume_type, unsigned int *max_level);
int _get_volume_level(const char *direction, const char *volume_type, unsigned int *level);
Name: capi-media-sound-manager
Summary: Sound Manager library
-Version: 0.6.0
+Version: 0.6.1
Release: 0
Group: Multimedia/API
License: Apache-2.0
ret = _get_current_volume_type(DIRECTION_OUT_STR, &volume_type);
if (ret == MM_ERROR_NONE) {
ret = _convert_sound_type_to_enum((const char*)volume_type, type);
- LOGI("type=%d", *type);
+ if (ret == MM_ERROR_NONE)
+ LOGI("type=%d", *type);
}
return _convert_sound_manager_error_code(__func__, ret);
return _convert_sound_manager_error_code(__func__, ret);
}
+int sound_manager_get_max_volume_internal(sound_type_internal_e type, int *max)
+{
+ const char *volume_type = NULL;
+ unsigned int max_level = 0;
+ int ret = MM_ERROR_NONE;
+
+ SM_NULL_ARG_CHECK(max);
+ if (type >= SOUND_TYPE_INTERNAL_NUM)
+ return _convert_sound_manager_error_code(__func__, MM_ERROR_INVALID_ARGUMENT);
+
+ ret = _convert_sound_type_for_internal(type, &volume_type);
+ if (ret == MM_ERROR_NONE) {
+ ret = _get_volume_max_level(DIRECTION_OUT_STR, volume_type, &max_level);
+ if (ret == MM_ERROR_NONE)
+ *max = (int)max_level -1; /* actual volume step can be max step - 1 */
+ }
+
+ return _convert_sound_manager_error_code(__func__, ret);
+}
+
+int sound_manager_set_volume_internal(sound_type_internal_e type, int level)
+{
+ int ret = MM_ERROR_NONE;
+
+ if (type >= SOUND_TYPE_INTERNAL_NUM)
+ return _convert_sound_manager_error_code(__func__, MM_ERROR_INVALID_ARGUMENT);
+ if (level < 0)
+ return _convert_sound_manager_error_code(__func__, MM_ERROR_INVALID_ARGUMENT);
+
+ ret = mm_sound_volume_set_value_internal(type, level);
+ LOGI("type=%d, level=%d", type, level);
+
+ return _convert_sound_manager_error_code(__func__, ret);
+}
+
+int sound_manager_get_volume_internal(sound_type_internal_e type, int *level)
+{
+ int ret = MM_ERROR_NONE;
+ unsigned int uvolume;
+
+ if (type >= SOUND_TYPE_INTERNAL_NUM)
+ return _convert_sound_manager_error_code(__func__, MM_ERROR_INVALID_ARGUMENT);
+ if (level == NULL)
+ return _convert_sound_manager_error_code(__func__, MM_ERROR_INVALID_ARGUMENT);
+
+ ret = mm_sound_volume_get_value_internal(type, &uvolume);
+ if (ret == MM_ERROR_NONE)
+ *level = uvolume;
+
+ LOGI("type=%d, level=%d", type, *level);
+
+ return _convert_sound_manager_error_code(__func__, ret);
+}
+
+int sound_manager_get_current_sound_type_internal(sound_type_internal_e *type)
+{
+ int ret = MM_ERROR_NONE;
+ char *volume_type = NULL;
+
+ if (type == NULL)
+ return _convert_sound_manager_error_code(__func__, MM_ERROR_INVALID_ARGUMENT);
+
+ /* get the volume type of the current playing stream */
+ ret = _get_current_volume_type(DIRECTION_OUT_STR, &volume_type);
+ if (ret == MM_ERROR_NONE) {
+ ret = _convert_sound_type_to_enum_for_internal((const char*)volume_type, type);
+ if (ret == MM_ERROR_NONE)
+ LOGI("type=%d", *type);
+ }
+
+ return _convert_sound_manager_error_code(__func__, ret);
+}
+
+int sound_manager_add_volume_changed_cb_internal(sound_manager_volume_changed_cb_internal callback, void *user_data, int *id)
+{
+ int ret = MM_ERROR_NONE;
+
+ if (!callback || !id)
+ return _convert_sound_manager_error_code(__func__, MM_ERROR_INVALID_ARGUMENT);
+
+ ret = mm_sound_add_volume_changed_callback_internal((mm_sound_volume_changed_cb_internal)callback, user_data, (unsigned int*)id);
+
+ return _convert_sound_manager_error_code(__func__, ret);
+}
+
+int sound_manager_remove_volume_changed_cb_internal(int id)
+{
+ int ret = MM_ERROR_NONE;
+
+ if (id < 0)
+ return _convert_sound_manager_error_code(__func__, MM_ERROR_INVALID_ARGUMENT);
+
+ ret = mm_sound_remove_volume_changed_callback_internal(id);
+
+ return _convert_sound_manager_error_code(__func__, ret);
+}
+
int sound_manager_create_stream_information_internal(sound_stream_type_internal_e stream_type, sound_stream_focus_state_changed_cb callback, void *user_data, sound_stream_info_h *stream_info)
{
int ret = MM_ERROR_NONE;
#define VCONF_PATH_PREFIX_VOLUME "file/private/sound/volume/"
#define VCONF_PATH_MAX 64
+#define SM_SOUND_TYPE_CHECK(x_sound_type, x_error) \
+if (!strncmp(x_sound_type, "system", strlen(x_sound_type)) || \
+ !strncmp(x_sound_type, "notification", strlen(x_sound_type)) || \
+ !strncmp(x_sound_type, "alarm", strlen(x_sound_type)) || \
+ !strncmp(x_sound_type, "ringtone", strlen(x_sound_type)) || \
+ !strncmp(x_sound_type, "media", strlen(x_sound_type)) || \
+ !strncmp(x_sound_type, "call", strlen(x_sound_type)) || \
+ !strncmp(x_sound_type, "voip", strlen(x_sound_type)) || \
+ !strncmp(x_sound_type, "voice", strlen(x_sound_type))) \
+ return x_error; \
+
+#define SM_INTERNAL_SOUND_TYPE_CHECK(x_sound_type, x_error) \
+if (!strncmp(x_sound_type, "bixby", strlen(x_sound_type))) \
+ return x_error; \
+
//LCOV_EXCL_START
int _convert_dbus_error(const char *error_msg)
{
return MM_ERROR_NONE;
}
+//LCOV_EXCL_START
+int _convert_sound_type_for_internal(sound_type_internal_e sound_type, const char **volume_type)
+{
+ SM_NULL_ARG_CHECK_FOR_PRIV(volume_type);
+
+ switch (sound_type) {
+ case SOUND_TYPE_BIXBY:
+ *volume_type = "bixby";
+ break;
+ }
+ LOGI("volume_type[%s]", *volume_type);
+
+ return MM_ERROR_NONE;
+}
+//LCOV_EXCL_STOP
+
int _convert_sound_type_to_enum(const char *sound_type, sound_type_e *sound_type_enum)
{
SM_NULL_ARG_CHECK_FOR_PRIV(sound_type);
*sound_type_enum = SOUND_TYPE_VOICE;
} else {
//LCOV_EXCL_START
+ SM_INTERNAL_SOUND_TYPE_CHECK(sound_type, MM_ERROR_SOUND_VOLUME_NO_INSTANCE);
LOGE("not supported sound_type(%s)", sound_type);
return MM_ERROR_INVALID_ARGUMENT;
//LCOV_EXCL_STOP
return MM_ERROR_NONE;
}
//LCOV_EXCL_START
+int _convert_sound_type_to_enum_for_internal(const char *sound_type, sound_type_internal_e *sound_type_enum)
+{
+ SM_NULL_ARG_CHECK_FOR_PRIV(sound_type);
+ SM_NULL_ARG_CHECK_FOR_PRIV(sound_type_enum);
+
+ if (!strncmp(sound_type, "bixby", strlen(sound_type))) {
+ *sound_type_enum = SOUND_TYPE_BIXBY;
+ } else {
+ SM_SOUND_TYPE_CHECK(sound_type, MM_ERROR_SOUND_VOLUME_NO_INSTANCE);
+ LOGE("not supported internal sound_type(%s)", sound_type);
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ return MM_ERROR_NONE;
+}
+
int _convert_device_type_enum_to_str(sound_device_type_e device_type, char **device_type_str)
{
SM_NULL_ARG_CHECK_FOR_PRIV(device_type_str);
CURRENT_STATUS_SET_VOLUME,
CURRENT_STATUS_GET_VOLUME,
CURRENT_STATUS_GET_CURRENT_SOUND_TYPE,
+ CURRENT_STATUS_GET_MAX_VOLUME_INTERNAL,
+ CURRENT_STATUS_SET_VOLUME_INTERNAL,
+ CURRENT_STATUS_GET_VOLUME_INTERNAL,
+ CURRENT_STATUS_GET_CURRENT_SOUND_TYPE_INTERNAL,
CURRENT_STATUS_SET_MUTE,
CURRENT_STATUS_GET_MUTE,
CURRENT_STATUS_ADD_VOLUME_CHANGED_CB,
CURRENT_STATUS_REMOVE_VOLUME_CHANGED_CB,
+ CURRENT_STATUS_ADD_VOLUME_CHANGED_CB_INTERNAL,
+ CURRENT_STATUS_REMOVE_VOLUME_CHANGED_CB_INTERNAL,
CURRENT_STATUS_SET_DEVICE_MASK,
CURRENT_STATUS_GET_DEVICE_MASK,
CURRENT_STATUS_PRINT_DEVICE_LIST,
virtual_sound_stream_h g_vstream_h = NULL;
sound_stream_ducking_h g_stream_ducking_h = NULL;
int g_volume_cb_id;
+int g_internal_volume_cb_id;
int g_device_conn_cb_id;
int g_device_state_cb_id;
int g_device_running_cb_id;
g_menu_state = CURRENT_STATUS_GET_VOLUME;
else if (strncmp(cmd, "gt", MAX_CMD_LEN) == 0)
g_menu_state = CURRENT_STATUS_GET_CURRENT_SOUND_TYPE;
+ else if (strncmp(cmd, "gxi", MAX_CMD_LEN) == 0)
+ g_menu_state = CURRENT_STATUS_GET_MAX_VOLUME_INTERNAL;
+ else if (strncmp(cmd, "svi", MAX_CMD_LEN) == 0)
+ g_menu_state = CURRENT_STATUS_SET_VOLUME_INTERNAL;
+ else if (strncmp(cmd, "gvi", MAX_CMD_LEN) == 0)
+ g_menu_state = CURRENT_STATUS_GET_VOLUME_INTERNAL;
+ else if (strncmp(cmd, "gti", MAX_CMD_LEN) == 0)
+ g_menu_state = CURRENT_STATUS_GET_CURRENT_SOUND_TYPE_INTERNAL;
else if (strncmp(cmd, "av", MAX_CMD_LEN) == 0)
g_menu_state = CURRENT_STATUS_ADD_VOLUME_CHANGED_CB;
else if (strncmp(cmd, "rv", MAX_CMD_LEN) == 0)
g_menu_state = CURRENT_STATUS_REMOVE_VOLUME_CHANGED_CB;
+ else if (strncmp(cmd, "avi", MAX_CMD_LEN) == 0)
+ g_menu_state = CURRENT_STATUS_ADD_VOLUME_CHANGED_CB_INTERNAL;
+ else if (strncmp(cmd, "rvi", MAX_CMD_LEN) == 0)
+ g_menu_state = CURRENT_STATUS_REMOVE_VOLUME_CHANGED_CB_INTERNAL;
else if (strncmp(cmd, "sm", MAX_CMD_LEN) == 0)
g_menu_state = CURRENT_STATUS_SET_MUTE;
else if (strncmp(cmd, "gm", MAX_CMD_LEN) == 0)
g_print("gv. Get Volume \t");
g_print("sv. Set Volume \n");
g_print("gt. Get Current Sound Type \t");
+ g_print("gxi. *Get Max Volume \t");
+ g_print("gvi. *Get Volume \t");
+ g_print("svi. *Set Volume \n");
+ g_print("gti. *Get Current Sound Type \t");
g_print("gm. *Get Mute \t");
g_print("sm. *Set Mute \n");
g_print("av. Add Volume Changed CB \t");
g_print("rv. Remove Volume Changed CB \n");
+ g_print("avi. *Add Volume Changed CB \t");
+ g_print("rvi. *Remove Volume Changed CB \n");
#ifndef TIZEN_FEATURE_TV_PROD
g_print("mgx. *Get Max Master Volume \t");
g_print("mgv. *Get Master Volume \t");
g_print("*** input sound type(0:SYSTEM 1:NOTIFICATION 2:ALARM 3:RINGTONE 4:MEDIA 5:CALL 6:VOIP 7:VOICE)\n");
else if (g_menu_state == CURRENT_STATUS_SET_VOLUME) {
if (flag == 0)
- g_print("*** input sound type and desired volume level(0:SYSTEM 1:NOTIFICATION 2:ALARM 3:RINGTONE 4:MEDIA 5:CALL 6:VOIP 7:VOICE, (0~max volum))\n");
+ g_print("*** input sound type and desired volume level(0:SYSTEM 1:NOTIFICATION 2:ALARM 3:RINGTONE 4:MEDIA 5:CALL 6:VOIP 7:VOICE, (0~max volume))\n");
flag = 1;
} else if (g_menu_state == CURRENT_STATUS_GET_VOLUME)
g_print("*** input sound type(0:SYSTEM 1:NOTIFICATION 2:ALARM 3:RINGTONE 4:MEDIA 5:CALL 6:VOIP 7:VOICE)\n");
else if (g_menu_state == CURRENT_STATUS_GET_CURRENT_SOUND_TYPE)
g_print("*** press enter to get current sound type\n");
+ else if (g_menu_state == CURRENT_STATUS_GET_MAX_VOLUME_INTERNAL)
+ g_print("*** input sound type(0:BIXBY)\n");
+ else if (g_menu_state == CURRENT_STATUS_SET_VOLUME_INTERNAL) {
+ if (flag == 0)
+ g_print("*** input sound type and desired volume level(0:BIXBY (0~max volume))\n");
+ flag = 1;
+ } else if (g_menu_state == CURRENT_STATUS_GET_VOLUME_INTERNAL)
+ g_print("*** input sound type(0:BIXBY)\n");
+ else if (g_menu_state == CURRENT_STATUS_GET_CURRENT_SOUND_TYPE_INTERNAL)
+ g_print("*** press enter to get current sound type\n");
else if (g_menu_state == CURRENT_STATUS_SET_MUTE) {
if (flag == 0)
g_print("*** input sound type and desired mute state(0:SYSTEM 1:NOTIFICATION 2:ALARM 3:RINGTONE 4:MEDIA 5:CALL 6:VOIP 7:VOICE, (0:unmute, 1:mute))\n");
g_print("*** press enter to add volume changed cb\n");
else if (g_menu_state == CURRENT_STATUS_REMOVE_VOLUME_CHANGED_CB)
g_print("*** press enter to remove volume changed cb\n");
+ else if (g_menu_state == CURRENT_STATUS_ADD_VOLUME_CHANGED_CB_INTERNAL)
+ g_print("*** press enter to add volume changed cb for internal\n");
+ else if (g_menu_state == CURRENT_STATUS_REMOVE_VOLUME_CHANGED_CB_INTERNAL)
+ g_print("*** press enter to remove volume changed cb for internal\n");
else if (g_menu_state == CURRENT_STATUS_SET_DEVICE_MASK)
g_print("*** input device mask (0:ALL, 1:INTERNAL, 2:EXTERNAL, 3:INPUT, 4:OUTPUT, 5:BOTH, 6:ACTIVATED, 7:DEACTIVATED, b:back to the menu)\n");
else if (g_menu_state == CURRENT_STATUS_GET_DEVICE_MASK)
return 1;
}
+int convert_sound_type_internal(sound_type_internal_e *type, char *cmd)
+{
+ int sound_type_n = atoi(cmd);
+ if (sound_type_n > SOUND_TYPE_BIXBY) {
+ g_print("not supported sound type(%d)\n", sound_type_n);
+ return 0;
+ } else {
+ switch (sound_type_n) {
+ case 0:
+ *type = SOUND_TYPE_BIXBY;
+ break;
+ }
+ }
+ return 1;
+}
+
void _volume_changed_cb(sound_type_e type, unsigned int volume, void *user_data)
{
g_print("***the volume has changed. the volume of this sound type(%d) is : %d \n", type, volume);
}
+void _volume_changed_cb_internal(sound_type_internal_e type, unsigned int volume, void *user_data)
+{
+ g_print("***the internal volume has changed. the volume of this sound type(%d) is : %d \n", type, volume);
+}
+
/* If failed to get some property, just give some default value */
void _get_device_props_simple(sound_device_h device, int *id, const char **type, char **name,
const char **direc, const char **state, int *vendor_id, int *product_id, bool *is_running)
reset_menu_state();
break;
}
+ case CURRENT_STATUS_GET_MAX_VOLUME_INTERNAL: {
+ sound_type_internal_e type;
+ int max;
+ if (convert_sound_type_internal(&type, cmd) == 1) {
+ if (sound_manager_get_max_volume_internal(type, &max) != SOUND_MANAGER_ERROR_NONE)
+ g_print("failt to get max volume\n");
+ else
+ g_print("the max volume of this type(%d) is %d\n", type, max);
+ }
+ reset_menu_state();
+ break;
+ }
+ case CURRENT_STATUS_SET_VOLUME_INTERNAL: {
+ static int cnt = 0;
+ static sound_type_internal_e type;
+ int volume;
+ switch (cnt) {
+ case 0:
+ if (convert_sound_type_internal(&type, cmd) == 1)
+ cnt++;
+ else
+ reset_menu_state();
+ break;
+ case 1:
+ volume = atoi(cmd);
+ if (sound_manager_set_volume_internal(type, volume) != SOUND_MANAGER_ERROR_NONE)
+ g_print("fail to set volume(%d) check sound type(%d)'s available volume level\n", volume, type);
+ else
+ g_print("set volume success : sound type(%d), volume(%d)\n", type, volume);
+ cnt = 0;
+ reset_menu_state();
+ break;
+ default:
+ break;
+ }
+ break;
+ }
+ case CURRENT_STATUS_GET_VOLUME_INTERNAL: {
+ sound_type_internal_e type;
+ int volume;
+ if (convert_sound_type_internal(&type, cmd) == 1) {
+ if (sound_manager_get_volume_internal(type, &volume) != SOUND_MANAGER_ERROR_NONE)
+ g_print("fail to get volume\n");
+ else
+ g_print("current volume of this type(%d) is : %d\n", type, volume);
+ }
+ reset_menu_state();
+ break;
+ }
+ case CURRENT_STATUS_GET_CURRENT_SOUND_TYPE_INTERNAL: {
+ sound_type_internal_e type;
+ if (sound_manager_get_current_sound_type_internal(&type) != SOUND_MANAGER_ERROR_NONE)
+ g_print("fail to get current sound type\n");
+ else
+ g_print("current sound type is (%d)\n", type);
+ reset_menu_state();
+ break;
+ }
case CURRENT_STATUS_SET_MUTE: {
static int cnt = 0;
static sound_type_e type;
g_print("success to remove volume changed cb, id[%d]\n", g_volume_cb_id);
reset_menu_state();
break;
+ }
+ case CURRENT_STATUS_ADD_VOLUME_CHANGED_CB_INTERNAL: {
+ if (sound_manager_add_volume_changed_cb_internal(_volume_changed_cb_internal, NULL, &g_internal_volume_cb_id) != SOUND_MANAGER_ERROR_NONE)
+ g_print("fail to add volume changed cb\n");
+ else
+ g_print("success to add volume changed cb, id[%d]\n", g_internal_volume_cb_id);
+ reset_menu_state();
+ break;
+ }
+ case CURRENT_STATUS_REMOVE_VOLUME_CHANGED_CB_INTERNAL: {
+ if (sound_manager_remove_volume_changed_cb_internal(g_internal_volume_cb_id) != SOUND_MANAGER_ERROR_NONE)
+ g_print("fail to remove volume changed cb, id[%d]\n", g_internal_volume_cb_id);
+ else
+ g_print("success to remove volume changed cb, id[%d]\n", g_internal_volume_cb_id);
+ reset_menu_state();
+ break;
}
case CURRENT_STATUS_SET_DEVICE_MASK: {
if (strncmp(cmd, "0", 1) == 0) {