/*
 * Copyright (C) 2018 Synaptics Incorporated. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND
 * SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES,
 * INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY
 * INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR
 * CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE
 * OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND
 * BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF
 * COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT
 * DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY
 * TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS.
 */

#ifndef SHOW_GUI_H
#define SHOW_GUI_H
#include "com_type.h"
#define NUM_BUFFERS	(2)
#define MAX_ISR_COUNT 300

//#define USE_RES_1080P
//#define USE_RES_720P
#define USE_RES_480P

//#define BOOTLOGO_ANIM

/*
 * DVI  -> 0
 * HDMI -> 1
 */
#define HDMI_MODE 1

#if defined(USE_RES_1080P)
    //Output Resolution
    #define MV_SYSTEM_XRES 1920
    #define MV_SYSTEM_YRES 1080
#elif defined(USE_RES_720P)
    //Output Resolution
    #define MV_SYSTEM_XRES 1280
    #define MV_SYSTEM_YRES 720
#elif defined(USE_RES_480P)
    //Output Resolution
    #define MV_SYSTEM_XRES 640
    #define MV_SYSTEM_YRES 480
#endif

typedef enum {
    CENTER,
    TOP_LEFT,
    TOP_RIGHT,
    BOT_LEFT,
    BOT_RIGHT
} LOGO_POSITION;

INT32 MV_VPP_Init(VOID);
VOID MV_VPP_Deinit(VOID);
VOID MV_VPP_Enable_IRQ();
VOID MV_VPP_DisplayPatternFrame(INT32 x, INT32 y, INT32 logo_width,
            INT32 logo_height, INT32 logo_stride, VOID *yuv_logo);
VOID VPP_ISR_Handler_irq();
#endif
