/*
 * @file hv_app_Function.h
 * @brief Header file of function.
 *
 * @verbatim
 * ==============================================================================
 *                        ##### How to use #####
 * ==============================================================================
 * (+) Use () to .
 *
 * @author HiView SoC Software Team
 * @version 1.0.0
 * @date 2022-09-01
 */

#ifndef __HV_APP_FUNCTION_H__
#define __HV_APP_FUNCTION_H__

#include "hv_comm_DataType.h"
#include "hv_comm_Define.h"
#include "ProjectConfig.h"
#include "hv_mw_OsdUserdata.h"

/* Display Mode struct define */
typedef struct _DisplayModeParam
{
    UCHAR8 ucBrightness;
    UCHAR8 ucContrast;
} DisplayModeParam;

/**
 * @brief 设置项
 * @param[in] enWhichData userdata的id
 * @param[in] sOsdValue 要设置的值
 * @param[in] ucFlag 设置项标志位：SET_OSDDATA-设置OSD数据（仅影响显示）， SET_INTERFACE-调用系统接口，SET_RELATED-设置关联功能，可同时设置，SET_FORCE-强制设置，不判断等值
 */
VOID Hv_App_SetFuncInterface(UserdataId enWhichData, SHORT16 sOsdValue, UCHAR8 ucFlag);

/**
 * @brief 获取userdata的真实值及默认值
 * @param[in] enWhichData userdata的id
 * @param[in] psRealValue 真实值
 * @param[in] psRealDefaultValue 真实默认值
 */
VOID Hv_App_GetRealValue(UserdataId enWhichData, SHORT16 *psRealValue, SHORT16 *psRealDefaultValue);

/**
 * @brief 获取userdata的属性
 * @param[in] enWhichData userdata的id
 * @param[in] pstProp userdata的属性结构体指针
 */
VOID Hv_App_GetOsdUserdataProp(UserdataId enWhichData, UserdataProp* pstProp);

/**
 * @brief 获取userdata的值
 * @param[in] enWhichData userdata的id
 * @return userdata的值
 */
SHORT16 Hv_App_GetOsdDataValue(UserdataId enWhichData);

#ifdef OSD_CHECK_DISABLE_BY_EACH_ITEM
/**
 * @brief 检查Item是否需要禁用
 * @param[in] usItemId item的id
 * @return BOOL HV_TURE-需要禁用，HV_FALSE-无需禁用
 */
BOOL Hv_App_Cb_ItemCheckDisable(USHORT16 usItemId);
#else
/**
 * @brief 通过条件检查并更新OSD菜单的item禁用项
 */
VOID Hv_App_CheckItemDisableState(VOID);
#endif


/**
 * @brief 检查Item是否需要隐藏
 * @param[in] usItemId item的id
 * @return BOOL HV_TURE-需要隐藏，HV_FALSE-无需隐藏
 */
BOOL Hv_App_Cb_ItemCheckDisableHide(USHORT16 usItemId);

/**
 * @brief 初始化所有userdata对应设置
 */
VOID Hv_App_InitToUserSetting(VOID);

/**
 * @brief 恢复到出厂模式
 */
VOID Hv_App_ResetToFactorySetting(VOID);

/**
 * @brief 根据当前timing来更新配置
 */
VOID Hv_App_UpdateSettingByCurrentTiming(VOID);

VOID Hv_App_SetDefaultSetting(BOOL bSetDefault);
VOID Hv_App_SetDefaultStandardDisplayMode(BOOL bIsHdr, UCHAR8 ucFlag);

/**
 * @brief Set HDMI OSD value for osd interface
 * @param[in] hdmi format value
 */
VOID Hv_App_OsdSetHdmiFormat(SHORT16 sRealValue);
/**
 * @brief Get HDMI OSD value for osd interface
 * @param[out] hdmi format value
 * @param[out] hdmi format default value
 */
VOID Hv_App_OsdGetHdmiFormat(SHORT16 *psRealValue, SHORT16 *psRealDefaultValue);

#endif
