/*
 * @file hv_mw_OsdUserdata.h
 * @brief Header file of osd Userdata.
 *
 * @verbatim
 * ==============================================================================
 *                        ##### How to use #####
 * ==============================================================================
 * 
 *
 * @author HiView SoC Software Team
 * @version 1.0.0
 * @date 2022-09-01
 */

#ifndef _HV_MW_OSD_USERDATA_H
#define _HV_MW_OSD_USERDATA_H

#ifdef OSD_ITEM_BIND_USERDATA_BY_TOOL
#include "hv_res_OsdUserdata.h"

#define SET_OSDDATA        (BIT_0)
#define SET_INTERFACE      (BIT_1)
#define SET_RELATED        (BIT_2)
#define SET_FORCE          (BIT_3)
#define SET_ALL            (SET_OSDDATA | SET_INTERFACE | SET_RELATED)
#define SET_ALL_FORCE      (SET_ALL | SET_FORCE)

/**
 * @brief Userdata adjust action
 * @details set to a value, set to default value, value increase, value decrease
 */
typedef enum 
{
    ACT_SET,
    ACT_SET_DEFAULT,
    ACT_INCREASE,
    ACT_DECREASE,
} AdjustAct;

/**
 * @brief 根据当前userdata的osd值进行配置（调用接口）
 * @param[in] enWhichData userdata的id
 */
VOID Hv_Mw_SetFromOsdUserdata(UserdataId enUserdata);

/**
 * @brief 根据当前真实值，同步更新某个userdata的osd值
 * @param[in] enWhichData userdata的id
 */
VOID Hv_Mw_OsdUserdataUpdate(UserdataId enWhichData);

/**
 * @brief 同步更新所有userdata的osd值
 */
VOID Hv_Mw_OsdUserdataUpdateAll(VOID);

/**
 * @brief 获取userdata的映射后的osd值
 * @param[in] enWhichData userdata的id
 * @param[in] sRealValue userdata的osd真实
 * @return userdata的osd值
 */
SHORT16 Hv_Mw_OsdGetMappedOsdValue(UserdataId enWhichData, SHORT16 sRealValue);
#define GET_OSD_MAP_VALUE(Data, RealValue)   Hv_Mw_OsdGetMappedOsdValue(Data, RealValue)

/**
 * @brief 获取userdata的映射后的真实值
 * @param[in] enWhichData userdata的id
 * @param[in] sOsdValue userdata的osd值
 * @return userdata的真实值
 */
SHORT16 Hv_Mw_OsdGetMappedRealValue(UserdataId enWhichData, SHORT16 sOsdValue);
#define GET_REAL_MAP_VALUE(Data, OsdValue)   Hv_Mw_OsdGetMappedRealValue(Data, OsdValue)

/**
 * @brief 调整设置项的值
 * @param[in] enWhichData userdata的id
 * @param[in] enAdjustAct 调整类型：ACT_SET-直接设置，ACT_SET_DEFAULT-设为默认值，ACT_INCREASE-增加，ACT_DECREASE-减少
 * @param[in] sAdjustValue 调整类型的值：直接设置为该值，设为默认值时无效，增加时为增加步长，减少时为减少步长
 * @param[in] ucFlag 设置项标志位：SET_OSDDATA-设置OSD数据（仅影响显示）， SET_INTERFACE-调用系统接口，SET_RELATED-设置关联功能，可同时设置，SET_FORCE-强制设置，不判断等值
 * @return userdata的属性结构体指针
 */
SHORT16 Hv_Mw_OsdAdjustFunction(UserdataId enWhichData, AdjustAct enAdjustAct, SHORT16 sAdjustValue, UCHAR8 ucFlag);
#endif

#endif