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

#ifndef _HV_APP_OSD_H
#define _HV_APP_OSD_H

#include "hv_mw_OsdEvent.h"
#include "hv_res_OsdMoeRes.h"
#include "hv_drv_OsdTypes.h"

/**
 * @brief 获取OSD旋转类型
 * @return OSD旋转类型
 */
OsdRotationType Hv_App_OsdGetRotateType(VOID);

/**
 * @brief 设置OSD旋转类型
 * @param[in] enRotate 旋转角度枚举类型：0、90、180、270
 */
VOID Hv_App_OsdSetRotateType(OsdRotationType enRotate);

/**
 * @brief 获取OSD语言
 * @return OSD语言
 */
OsdLanguage Hv_App_OsdGetLanguage(VOID);

/**
 * @brief 设置OSD语言
 * @param[in] enLang 语言枚举类型
 */
VOID Hv_App_OsdSetLanguage(OsdLanguage enLang);

/**
 * @brief 获取OSD菜单消失时间类型
 * @return OSD菜单消失时间类型
 */
USHORT16 Hv_App_OsdGetMenuTime(VOID);

/**
 * @brief 设置OSD菜单消失时间类型
 * @param[in] usTimeType 消失时间类型
 */
VOID Hv_App_OsdSetMenuTime(USHORT16 usTimeType);

/**
 * @brief 获取OSD菜单透明度
 * @return OSD菜单透明度
 */
USHORT16 Hv_App_OsdGetTrans(VOID);

/**
 * @brief 设置OSD菜单透明度
 * @param[in] usTrans 透明度（0~128），0-全透，128-不透
 */
VOID Hv_App_OsdSetTrans(USHORT16 usTrans);

/**
 * @brief 获取OSD菜单锁
 * @return OSD菜单锁使能
 */
BOOL Hv_App_OsdGetLock(VOID);

/**
 * @brief 设置OSD菜单锁
 * @param[in] bLock 菜单锁使能
 */
VOID Hv_App_OsdSetLock(BOOL bLock);

/**
 * @brief 获取OSD虚拟准星类型
 * @return OSD虚拟准星类型
 */
USHORT16 Hv_App_OsdGetCrosshair(VOID);

/**
 * @brief 设置OSD虚拟准星类型
 * @param[in] usType 虚拟准星类型
 */
VOID Hv_App_OsdSetCrosshair(USHORT16 usType);

/**
 * @brief 获取OSD动态虚拟准星类型
 * @return OSD动态虚拟准星类型
 */
USHORT16 Hv_App_OsdGetDynCrosshair(VOID);

/**
 * @brief 设置OSD动态虚拟准星类型
 * @param[in] usType 动态虚拟准星类型
 */
VOID Hv_App_OsdSetDynCrosshair(USHORT16 usType);

/**
 * @brief 获取OSD显示实时帧率类型
 * @return OSD显示实时帧率类型
 */
USHORT16 Hv_App_OsdGetFrameRateShow(VOID);

/**
 * @brief 设置OSD显示实时帧率类型
 * @param[in] usType 实时帧率类型
 */
VOID Hv_App_OsdSetFrameRateShow(USHORT16 usType);

/**
 * @brief 获取OSD显示计时器类型
 * @return OSD显示计时器类型
 */
USHORT16 Hv_App_OsdGetTimerCounterShow(VOID);

/**
 * @brief 设置OSD显示计时器类型
 * @param[in] usType 计时器类型
 */
VOID Hv_App_OsdSetTimerCounterShow(USHORT16 usType);

/**
 * @brief 获取OSD自定义按键功能类型
 * @return OSD自定义按键功能类型
 */
USHORT16 Hv_App_OsdGetCustomKey(USHORT16 usKey);

/**
 * @brief 设置OSD自定义按键功能类型
 * @param[in] usKey 键值
 * @param[in] usType 按键类型
 */
VOID Hv_App_OsdSetCustomKey(USHORT16 usKey, USHORT16 usType);

/**
 * @brief 获取OSD菜单位置，百分比
 * @return OSD菜单位置，百分比
 */
USHORT16 Hv_App_OsdGetMenuPostion(BOOL bIsX);

/**
 * @brief 设置OSD菜单位置，百分比
 * @param[in] bIsX 是否设置X方向，否则为Y方向
 * @param[in] usRatio 位置百分比：0~100，屏幕左下角为(0, 0)
 */
VOID Hv_App_OsdSetMenuPostion(BOOL bIsX, USHORT16 usRatio);

/**
 * @brief 隐藏OSD所有界面
 */
VOID Hv_App_OsdHideAll(VOID);

/**
 * @brief 设置OSD菜单显示的fw版本号字符串格式
 * @param[in] pstString 字符串指针
 * @return 字符串长度
 */
USHORT16 Hv_App_OsdSetFirmwareVersionString(UCHAR8 *pucString);

/**
 * @brief 设置OSD菜单显示的timing字符串格式
 * @param[in] pstString 字符串指针
 * @param[in] usH 输入信号宽的值（像素点）
 * @param[in] usV 输入信号高的值（像素点）
 * @param[in] usHz 输入信号的刷新率（Hz）
 * @param[in] bIsVrr 是否为VRR
 * @param[in] bInterlacedMode 是否为Interlaced
 * @return 字符串长度
 */
USHORT16 Hv_App_OsdSetTimingInfoString(UCHAR8 *pstString, USHORT16 usH, USHORT16 usV, USHORT16 usHz, BOOL bIsVrr, BOOL bInterlacedMode);

/**
 * @brief 进行显示/消失LOGO相关设置
 * @param[in] bIsShow HV_TRUE为显示LOGO，否则为隐藏LOGO
 */
VOID Hv_App_Cb_LogoSetting(BOOL bIsShow);

/**
 * @brief OSD业务总接口，负责为硬件绘制组织资源
 * @param[in] pstEventMsg 事件event
 * @return success or failure
 */
Status Hv_App_Cb_OsdOperation(OsdEvent *pstEventMsg);

/**
 * @brief OSD App相关初始化
 */
VOID Hv_App_Cb_OsdInit(VOID);

#endif
