/**
 * @file hv_drv_OsdGraphic.h
 * @brief Osd driver layer Graphic interface.
 * @verbatim
 * ==============================================================================
 *                        ##### How to use this driver #####
 * ==============================================================================
 * (+) Use Hv_Drv_OsdGraphic_Init(...) to disable graphic layer.
 * (+) Use Hv_Drv_OsdGraphic_DrawGraphic(...) to draw graphic.
 * @endverbatim
 *
 * @author HiView SoC Software Team
 * @version 0.0.1
 * @date 2022-08-22
 */

#ifndef __HV_DRV_OSDGRAPHIC_H
#define __HV_DRV_OSDGRAPHIC_H

#include "hv_mw_OsdComm.h"

#if (HV_PROJECT_CONFIG_OSD_GRAPHIC == HV_CONFIG_ON)

/**
 * @brief  get graphic layer is enable/disable
 * @param[in] None
 * @return BOOL enable/disable
 */
BOOL Hv_Drv_OsdGraphic_GetEnable(VOID);

/**
 * @brief enable/disable graphic layer
 * @param[in] bEnable enable/disable status
 * @return VOID without return
 */
VOID Hv_Drv_OsdGraphic_SetEnable(BOOL bEnable);

/**
 * @brief wait DMA copy of graphic data to finish
 * @param[in] None
 * @return HV_SUCCESS if transfer done, otherwise HV_FAILURE
 */
Status Hv_Drv_OsdGraphic_WaitTransferDone(VOID);

/**
 * @brief draw graphic component
 * @param[in] pstGraphic component structure describing graphic data
 * @return VOID without return
 */
VOID Hv_Drv_OsdGraphic_DrawGraphic(const OsdGraphic *pstGraphic, const OsdGraphicAddition *pstGraphicAddition);

VOID Hv_Drv_OsdGraphic_ClearCPUCanvas();

Status Hv_Drv_OsdGraphic_InitCPUCanvas(OsdGraphic *pstGraphic);

Status Hv_Drv_OsdGraphic_DrawCPUCanvasPoint(USHORT16 usX, USHORT16 usY, UINT32 uiColor);

VOID Hv_Drv_OsdGraphic_SwitchCPUCanvasBuffer(VOID);

VOID Hv_Drv_OsdGraphic_ShowCPUCanvas(VOID);

VOID Hv_Drv_OsdGraphic_CPUCanvasStep();
#endif

/**
 * @brief Graphic layer init function
 * @param[in] None
 * @return VOID without return
 */
VOID Hv_Drv_OsdGraphic_Init(VOID);

#endif
