/******************************************************************************

Copyright (c) 2005 Analog Devices.  All Rights Reserved.

This software is proprietary and confidential.  By using this software you agree
to the terms of the associated Analog Devices License Agreement.  
*******************************************************************************

$File:		gfx.h $
$Revision: 1.3 $
$Date: 2008/06/06 07:19:35 $

Project:    GFX for testing drivers
Title:      GFX definitions
Author(s):  BJ

Description:
   This is the primary include file for GFX.

References:

Note:

*******************************************************************************

Modification History:
====================
Revision 2.00 - BJ 2006/7/2
	- Updated GFX functions to include canvas to modularize functionality
	- Added PAL support

******************************************************************************/

#ifndef __GFX_H__
#define __GFX_H__


#include <drivers/adi_dev.h>

// QVGA LCD output 24 bit 320 x 240
#define GFX_QVGA_24bit_WIDTH		320
#define GFX_QVGA_24bit_HEIGHT		240

#define GFX_QVGA_24bit_FRAME_WIDTH		GFX_QVGA_24bit_WIDTH
#define GFX_QVGA_24bit_FRAME_HEIGHT		GFX_QVGA_24bit_HEIGHT
#define GFX_QVGA_24bit_FRAME_SIZE		GFX_QVGA_24bit_FRAME_WIDTH*GFX_QVGA_24bit_FRAME_HEIGHT


// VGA LCD output 24 bit 480 x 272
#define GFX_VGA_24bit_WIDTH			480
#define GFX_VGA_24bit_HEIGHT		272

#define GFX_VGA_24bit_FRAME_WIDTH		GFX_VGA_24bit_WIDTH
#define GFX_VGA_24bit_FRAME_HEIGHT		GFX_VGA_24bit_HEIGHT
#define GFX_VGA_24bit_FRAME_SIZE		GFX_VGA_24bit_FRAME_WIDTH*GFX_VGA_24bit_FRAME_HEIGHT


// VGA LCD output
#define GFX_VGA_WIDTH			640
#define GFX_VGA_LEFT			0
#define GFX_VGA_RIGHT			0

#define GFX_VGA_HEIGHT			480
#define GFX_VGA_TOP				33
#define GFX_VGA_BOTTOM			12

#define GFX_VGA_FRAME_WIDTH		(GFX_VGA_WIDTH+GFX_VGA_LEFT+GFX_VGA_RIGHT)
#define GFX_VGA_FRAME_HEIGHT	(GFX_VGA_HEIGHT+GFX_VGA_TOP+GFX_VGA_BOTTOM)
#define GFX_VGA_FRAME_SIZE		(GFX_VGA_FRAME_WIDTH*GFX_VGA_FRAME_HEIGHT)


// NTSC total=858x525 active=720x480

#define GFX_NTSC_WIDTH			720
#define GFX_NTSC_LEFT			2
#define GFX_NTSC_RIGHT			136

#define GFX_NTSC_HEIGHT			480
#define GFX_NTSC_TOP			22
#define GFX_NTSC_BOTTOM			23

#define GFX_NTSC_FRAME_WIDTH	(GFX_NTSC_WIDTH+GFX_NTSC_LEFT+GFX_NTSC_RIGHT)
#define GFX_NTSC_FRAME_HEIGHT	(GFX_NTSC_HEIGHT+GFX_NTSC_TOP+GFX_NTSC_BOTTOM)
#define GFX_NTSC_FRAME_SIZE		(GFX_NTSC_FRAME_WIDTH*GFX_NTSC_FRAME_HEIGHT)


// PAL total=864x625 active=720x576

#define GFX_PAL_WIDTH			720
#define GFX_PAL_LEFT			2
#define GFX_PAL_RIGHT			142

#define GFX_PAL_HEIGHT			576
#define GFX_PAL_TOP				25
#define GFX_PAL_BOTTOM			24

#define GFX_PAL_FRAME_WIDTH		(GFX_PAL_WIDTH+GFX_PAL_LEFT+GFX_PAL_RIGHT)
#define GFX_PAL_FRAME_HEIGHT	(GFX_PAL_HEIGHT+GFX_PAL_TOP+GFX_PAL_BOTTOM)
#define GFX_PAL_FRAME_SIZE		(GFX_PAL_FRAME_WIDTH*GFX_PAL_FRAME_HEIGHT)


typedef enum
{
	GFX_MODE_UNKNOWN,		// gfx mode not set
	GFX_MODE_VGA,			// 16bit VGA
	GFX_MODE_VGA_24bit,		// 24bit VGA	
	GFX_MODE_QVGA_24bit,	// 24bit VGA
	GFX_MODE_PAL,			// Progressive PAL
	GFX_MODE_PALI,			// Interlaced PAL
	GFX_MODE_NTSC,			// Progresive NTSC
	GFX_MODE_NTSCI,			// Interlaced NTSC
} GFX_MODE;


typedef enum
{
    GFX_JUSTIFY_LEFT,
    GFX_JUSTIFY_CENTER,
    GFX_JUSTIFY_RIGHT,
} GFX_JUSTIFY;


typedef struct GFX_CANVAS
{
    u16 *Data;
	GFX_MODE Mode;
	GFX_JUSTIFY Justify;
	u32 Top,Left,Height,Width;
	u32 Colour;
	u8 Font;
	u32 Tab;
	u32 x,y,sx,sy;
} GFX_CANVAS;


u32 gfx_init(GFX_CANVAS *, GFX_MODE,u16 *, long, long, long, long);
u32 gfx_frame(GFX_CANVAS *, u32);

GFX_MODE gfx_getmode(GFX_CANVAS *);
u32 gfx_getframewidth(GFX_CANVAS *);
u32 gfx_getframeheight(GFX_CANVAS *);
u32 gfx_getwidth(GFX_CANVAS *);
u32 gfx_getheight(GFX_CANVAS *);

u32 gfx_setfont(GFX_CANVAS *, u32);
u32 gfx_setjustify(GFX_CANVAS *, GFX_JUSTIFY);
u32 gfx_settab(GFX_CANVAS *, u32);
u32 gfx_getcolour(GFX_CANVAS *, u8,u8,u8);
u32 gfx_setcolour(GFX_CANVAS *, u32);

u32 gfx_goto(GFX_CANVAS *, u32,u32);
u32 gfx_moveto(GFX_CANVAS *, u32,u32);
u32 gfx_printf(GFX_CANVAS *, u8 *,...);

u32 gfx_pixel(GFX_CANVAS *, u32, u32, u32);
u32 gfx_putc(GFX_CANVAS *, u8);
u32 gfx_fill(GFX_CANVAS *, u32);
u32 gfx_line(GFX_CANVAS *, u32, u32, u32, u32, u32);
u32 gfx_lineto(GFX_CANVAS *, u32, u32, u32);
u32 gfx_box(GFX_CANVAS *, u32, u32, u32, u32, u32);
u32 gfx_boxf(GFX_CANVAS *, u32, u32, u32, u32, u32, u32);


#endif

/*****************************************************************************/
