#ifndef _HV_DRV_OSDSHIFT_H
#define _HV_DRV_OSDSHIFT_H

#include "hv_drv_Osd.h"
#include "hv_comm_DataType.h"

VOID Hv_Drv_OsdShift_Init(VOID);
VOID Hv_Drv_OsdShift_CopyDirectly(OsdRowInfo *pstRowInfo, const UCHAR8 *pucMatrix, USHORT16 usOffset);
BOOL Hv_Drv_OsdShift_General(OsdRowInfo *pstRowInfo, const UCHAR8 *pucMatrix, USHORT16 usOffset, UCHAR8 ucDelta);
BOOL Hv_Drv_OsdShift_16_1Bit(OsdRowInfo *pstRowInfo, const UCHAR8 *pucMatrix, USHORT16 usOffset, UCHAR8 ucRealWidth);
BOOL Hv_Drv_OsdShift_16_2Bit(OsdRowInfo *pstRowInfo, const UCHAR8 *pucMatrix, USHORT16 usOffset, UCHAR8 ucRealWidth);
BOOL Hv_Drv_OsdShift_WriteCharacter(OsdRowInfo *pstRowInfo, const UCHAR8 *pucMatrix, USHORT16 usOffset, UCHAR8 ucRealWidth);
BOOL Hv_Drv_OsdShift_WriteBlank(UCHAR8 ucWidth);
VOID Hv_Drv_OsdShift_InitTransaction(OsdRowInfo *pstRowInfo, BOOL bIsUpdate, BOOL bUseUpdateRegion);
VOID Hv_Drv_OsdShift_Preserve(UCHAR8 *pucBuffer, UCHAR8 *pucRealWidth);
VOID Hv_Drv_OsdShift_Restore(UCHAR8 *pucBuffer, UCHAR8 ucRealWidth);
UCHAR8 Hv_Drv_OsdShift_EndTransaction(BOOL bReturnRealWidth);

#if (HV_PROJECT_CONFIG_OSD_MARQUEE == HV_CONFIG_ON)
VOID Hv_Drv_OsdShift_SetReplaceEnable(OsdIndexColumn *pstColumn, BOOL bEnable);
OsdIndexColumn *Hv_Drv_OsdShift_GetCurrentColumn(VOID);
BOOL Hv_Drv_OsdShift_IsReplace(VOID);
VOID Hv_Drv_OsdShift_DropNext(VOID);
#endif

#endif
