?lang_form? ?lang_select? ?lang_submit? ?lang_endform?
{HEADER END}
{FILE START}

library

?curdirlinks? - Rev 32

?prevdifflink? - Blame - ?getfile?

/*****************************************************************************
 *  Module for Microchip Graphics Library
 *  Custom display controller driver template
 *****************************************************************************
 * FileName:            MicrochipGraphicsModule.h
 * Dependencies:    p24Fxxxx.h or plib.h
 * Processor:           PIC24F
 * Compiler:            MPLAB C30
 * Linker:                MPLAB LINK30
 * Company:            Microchip Technology Incorporated
 *
 * Software License Agreement
 *
 * Copyright © 2008 Microchip Technology Inc.  All rights reserved.
 * Microchip licenses to you the right to use, modify, copy and distribute
 * Software only when embedded on a Microchip microcontroller or digital
 * signal controller, which is integrated into your product or third party
 * product (pursuant to the sublicense terms in the accompanying license
 * agreement).  
 *
 * You should refer to the license agreement accompanying this Software
 * for additional information regarding your rights and obligations.
 *
 * SOFTWARE AND DOCUMENTATION ARE PROVIDED “AS IS” WITHOUT WARRANTY OF ANY
 * KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY
 * OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR
 * PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR
 * OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION,
 * BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT
 * DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL,
 * INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA,
 * COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY
 * CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF),
 * OR OTHER SIMILAR COSTS.
 *
 * Author                                    Date                               Comment
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Pradeep Budagutta                20 Aug 2009                 Initial Version
 * Pradeep Budagutta                03 Dec 2009                 Added Double Buffering Support
 *****************************************************************************/
#ifndef _CUSTOM_DISPLAY_DRIVER_H
#define _CUSTOM_DISPLAY_DRIVER_H

#ifdef __PIC32MX
#include <plib.h>
#define PMDIN1   PMDIN
#else
#ifdef __PIC24F__
#include <p24Fxxxx.h>
#else
#error CONTROLLER IS NOT SUPPORTED
#endif
#endif

#include "GraphicsConfig.h"
#include "GenericTypeDefs.h"

/*********************************************************************
* Overview: Additional hardware-accelerated functions can be implemented
*           in the driver. These definitions exclude the PutPixel()-based
*           functions in the primitives layer (Primitive.c file) from compilation.
*********************************************************************/

// Define this to implement Font related functions in the driver.
#if (DISP_ORIENTATION == 0) 
//    #define USE_DRV_FONT
#endif

// Define this to implement Line function in the driver.
#define USE_DRV_LINE

// Define this to implement Circle function in the driver.
//#define USE_DRV_CIRCLE

// Define this to implement FillCircle function in the driver.
//#define USE_DRV_FILLCIRCLE

// Define this to implement Bar function in the driver.
#define USE_DRV_BAR

// Define this to implement ClearDevice function in the driver.
#define USE_DRV_CLEARDEVICE

// Define this to implement PutImage function in the driver.
#define USE_DRV_PUTIMAGE

#ifndef DISP_HOR_RESOLUTION
    #error  DISP_HOR_RESOLUTION must be defined in GraphicsConfig.h
#endif

#ifndef DISP_VER_RESOLUTION
    #error  DISP_VER_RESOLUTION must be defined in GraphicsConfig.h
#endif

#ifndef COLOR_DEPTH
    #error  COLOR_DEPTH must be defined in GraphicsConfig.h
#endif

#ifndef DISP_ORIENTATION
    #error  DISP_ORIENTATION must be defined in GraphicsConfig.h
#endif

/*********************************************************************
* Overview: Clipping region control codes to be used with SetClip(...)
*           function. 
*********************************************************************/
#define CLIP_DISABLE       0    // Disables clipping.
#define CLIP_ENABLE        1    // Enables clipping.

/*********************************************************************
* Overview: Some basic colors definitions.
*********************************************************************/
#ifdef USE_PALETTE

    #include "PaletteColorDefines.h"
    
#elif (COLOR_DEPTH == 16)

    #define BLACK               RGB565CONVERT(0,    0,      0)
    #define BRIGHTBLUE          RGB565CONVERT(0,    0,      255)
    #define BRIGHTGREEN         RGB565CONVERT(0,    255,    0)
    #define BRIGHTCYAN          RGB565CONVERT(0,    255,    255)
    #define BRIGHTRED           RGB565CONVERT(255,  0,      0)
    #define BRIGHTMAGENTA       RGB565CONVERT(255,  0,      255)
    #define BRIGHTYELLOW        RGB565CONVERT(255,  255,    0)
    #define BLUE                RGB565CONVERT(0,    0,      128)
    #define GREEN               RGB565CONVERT(0,    128,    0)
    #define CYAN                RGB565CONVERT(0,    128,    128)
    #define RED                 RGB565CONVERT(128,  0,      0)
    #define MAGENTA             RGB565CONVERT(128,  0,      128)
    #define BROWN               RGB565CONVERT(255,  128,    0)
    #define LIGHTGRAY           RGB565CONVERT(128,  128,    128)
    #define DARKGRAY            RGB565CONVERT(64,   64,     64)
    #define LIGHTBLUE           RGB565CONVERT(128,  128,    255)
    #define LIGHTGREEN          RGB565CONVERT(128,  255,    128)
    #define LIGHTCYAN           RGB565CONVERT(128,  255,    255)
    #define LIGHTRED            RGB565CONVERT(255,  128,    128)
    #define LIGHTMAGENTA        RGB565CONVERT(255,  128,    255)
    #define YELLOW              RGB565CONVERT(255,  255,    128)
    #define WHITE               RGB565CONVERT(255,  255,    255)
    
    #define GRAY0                   RGB565CONVERT(224,  224,    224)
    #define GRAY1                   RGB565CONVERT(192,  192,    192)
    #define GRAY2               RGB565CONVERT(160,  160,    160)
    #define GRAY3               RGB565CONVERT(128,  128,    128)
    #define GRAY4               RGB565CONVERT(96,   96,     96)
    #define GRAY5               RGB565CONVERT(64,   64,     64)
    #define GRAY6                   RGB565CONVERT(32,   32,     32)

#elif (COLOR_DEPTH == 8)

    #define BLACK               RGB332CONVERT(0,    0,      0)
    #define BRIGHTBLUE          RGB332CONVERT(0,    0,      255)
    #define BRIGHTGREEN         RGB332CONVERT(0,    255,    0)
    #define BRIGHTCYAN          RGB332CONVERT(0,    255,    255)
    #define BRIGHTRED           RGB332CONVERT(255,  0,      0)
    #define BRIGHTMAGENTA       RGB332CONVERT(255,  0,      255)
    #define BRIGHTYELLOW        RGB332CONVERT(255,  255,    0)
    #define BLUE                RGB332CONVERT(0,    0,      128)
    #define GREEN               RGB332CONVERT(0,    128,    0)
    #define CYAN                RGB332CONVERT(0,    128,    128)
    #define RED                 RGB332CONVERT(128,  0,      0)
    #define MAGENTA             RGB332CONVERT(128,  0,      128)
    #define BROWN               RGB332CONVERT(255,  128,    0)
    #define LIGHTGRAY           RGB332CONVERT(128,  128,    128)
    #define DARKGRAY            RGB332CONVERT(64,   64,     64)
    #define LIGHTBLUE           RGB332CONVERT(128,  128,    255)
    #define LIGHTGREEN          RGB332CONVERT(128,  255,    128)
    #define LIGHTCYAN           RGB332CONVERT(128,  255,    255)
    #define LIGHTRED            RGB332CONVERT(255,  128,    128)
    #define LIGHTMAGENTA        RGB332CONVERT(255,  128,    255)
    #define YELLOW              RGB332CONVERT(255,  255,    128)
    #define WHITE               RGB332CONVERT(255,  255,    255)
    
    #define GRAY0                   RGB332CONVERT(224,  224,    224)
    #define GRAY1                   RGB332CONVERT(192,  192,    192)
    #define GRAY2               RGB332CONVERT(160,  160,    160)
    #define GRAY3               RGB332CONVERT(128,  128,    128)
    #define GRAY4               RGB332CONVERT(96,   96,     96)
    #define GRAY5               RGB332CONVERT(64,   64,     64)
    #define GRAY6                   RGB332CONVERT(32,   32,     32)

#elif (COLOR_DEPTH == 4)

    #define BLACK               0x00
    #define BRIGHTBLUE          0x09
    #define BRIGHTGREEN         0x0C
    #define BRIGHTCYAN          0x0D
    #define BRIGHTRED           0x0A
    #define BRIGHTMAGENTA       0x0B
    #define BRIGHTYELLOW        0x0E
    #define BLUE                0x09
    #define GREEN               0x0C
    #define CYAN                0x0D
    #define RED                 0x0A
    #define MAGENTA             0x0B
    #define BROWN               0x02
    #define LIGHTGRAY           0x07
    #define DARKGRAY            0x07
    #define LIGHTBLUE           0x01
    #define LIGHTGREEN          0x04
    #define LIGHTCYAN           0x05
    #define LIGHTRED            0x02
    #define LIGHTMAGENTA        0x03
    #define YELLOW              0x06
    #define WHITE               0x0F
    
    #define GRAY0                   0x07
    #define GRAY1                   0x07
    #define GRAY2               0x07
    #define GRAY3               0x07
    #define GRAY4               0x07
    #define GRAY5               0x07
    #define GRAY6                   0x07

#elif (COLOR_DEPTH == 2)

    #define BLACK               0x00
    #define BRIGHTBLUE          0x03
    #define BRIGHTGREEN         0x03
    #define BRIGHTCYAN          0x03
    #define BRIGHTRED           0x03
    #define BRIGHTMAGENTA       0x03
    #define BRIGHTYELLOW        0x03
    #define BLUE                0x02
    #define GREEN               0x02
    #define CYAN                0x02
    #define RED                 0x02
    #define MAGENTA             0x02
    #define BROWN               0x02
    #define LIGHTGRAY           0x02
    #define DARKGRAY            0x01
    #define LIGHTBLUE           0x01
    #define LIGHTGREEN          0x01
    #define LIGHTCYAN           0x01
    #define LIGHTRED            0x01
    #define LIGHTMAGENTA        0x01
    #define YELLOW              0x01
    #define WHITE               0x03
    
    #define GRAY0                   0x02
    #define GRAY1                   0x02
    #define GRAY2               0x02
    #define GRAY3               0x01
    #define GRAY4               0x01
    #define GRAY5               0x01
    #define GRAY6                   0x01

#elif (COLOR_DEPTH == 1)

    #define BLACK               0x00
    #define BRIGHTBLUE          0x01
    #define BRIGHTGREEN         0x01
    #define BRIGHTCYAN          0x01
    #define BRIGHTRED           0x01
    #define BRIGHTMAGENTA       0x01
    #define BRIGHTYELLOW        0x01
    #define BLUE                0x01
    #define GREEN               0x01
    #define CYAN                0x01
    #define RED                 0x01
    #define MAGENTA             0x01
    #define BROWN               0x01
    #define LIGHTGRAY           0x00
    #define DARKGRAY            0x00
    #define LIGHTBLUE           0x00
    #define LIGHTGREEN          0x00
    #define LIGHTCYAN           0x00
    #define LIGHTRED            0x00
    #define LIGHTMAGENTA        0x00
    #define YELLOW              0x00
    #define WHITE               0x00
    
    #define GRAY0                   0x01
    #define GRAY1                   0x01
    #define GRAY2               0x01
    #define GRAY3               0x01
    #define GRAY4               0x00
    #define GRAY5               0x00
    #define GRAY6                   0x00

#endif // Color

extern WORD_VAL _color;
extern WORD_VAL _chrcolor;

/*********************************************************************
* Overview: Clipping region control and border settings.
*
*********************************************************************/
// Clipping region enable control
extern SHORT _clipRgn;
// Left clipping region border
extern SHORT _clipLeft;
// Top clipping region border
extern SHORT _clipTop;
// Right clipping region border
extern SHORT _clipRight;
// Bottom clipping region border
extern SHORT _clipBottom;

#define GFX_LCD_TFT  0x01
#define GFX_LCD_MSTN 0x02
#define GFX_LCD_CSTN 0x03
#define GFX_LCD_OFF  0x00

#define STN_DISPLAY_WIDTH_4  0x00
#define STN_DISPLAY_WIDTH_8  0x01
#define STN_DISPLAY_WIDTH_16 0x02

#define GFX_1_BPP  0x00
#define GFX_2_BPP  0x01
#define GFX_4_BPP  0x02
#define GFX_8_BPP  0x03
#define GFX_16_BPP 0x04

#if (COLOR_DEPTH == 1)
    #define GFX_BITS_PER_PIXEL                  GFX_1_BPP
    #define GFX_COLOR_MASK                      0x0001
#elif (COLOR_DEPTH == 2)
    #define GFX_BITS_PER_PIXEL                  GFX_2_BPP
    #define GFX_COLOR_MASK                      0x0003
#elif (COLOR_DEPTH == 4)
    #define GFX_BITS_PER_PIXEL                  GFX_4_BPP
    #define GFX_COLOR_MASK                      0x000F
#elif (COLOR_DEPTH == 8)
    #define GFX_BITS_PER_PIXEL                  GFX_8_BPP
    #define GFX_COLOR_MASK                      0x00FF
#else
    #define GFX_BITS_PER_PIXEL                  GFX_16_BPP
    #define GFX_COLOR_MASK                      0xFFFF
#endif

#define GFX_COMMAND_QUEUE_LENGTH            16

#define GFX_ACTIVE_HIGH                     1
#define GFX_ACTIVE_LOW                      0

/* RCC GPU Commands */
#define RCC_SRCADDR                         0x62000000ul
#define RCC_DESTADDR                        0x63000000ul
#define RCC_RECTSIZE                        0x64000000ul
#define RCC_COLOR                           0x66000000ul
#define RCC_STARTCOPY                       0x67000000ul

#define RCC_SOLID_FILL                      0x00000000ul
#define RCC_COPY                            0x00000080ul
#define RCC_TRANSPARENT_COPY                0x00000300ul

#define RCC_ROP_0                           0x00000000ul
#define RCC_ROP_1                           0x00000008ul
#define RCC_ROP_2                           0x00000010ul
#define RCC_ROP_3                           0x00000018ul
#define RCC_ROP_4                           0x00000020ul
#define RCC_ROP_5                           0x00000028ul
#define RCC_ROP_6                           0x00000030ul
#define RCC_ROP_7                           0x00000038ul
#define RCC_ROP_8                           0x00000040ul
#define RCC_ROP_9                           0x00000048ul
#define RCC_ROP_A                           0x00000050ul
#define RCC_ROP_B                           0x00000058ul
#define RCC_ROP_C                           0x00000060ul
#define RCC_ROP_D                           0x00000068ul
#define RCC_ROP_E                           0x00000070ul
#define RCC_ROP_F                           0x00000078ul

#define RCC_SRC_ADDR_CONTINUOUS             0x00000002ul
#define RCC_SRC_ADDR_DISCONTINUOUS          0x00000000ul
#define RCC_DEST_ADDR_CONTINUOUS            0x00000004ul
#define RCC_DEST_ADDR_DISCONTINUOUS         0x00000000ul

#define GFX_SetCommand(c)                   { DWORD command = c; G1CMDL = ((DWORD_VAL)(command)).word.LW; G1CMDH = ((DWORD_VAL)(command)).word.HW; Nop(); }

#define GFX_SetDisplayArea(a)               { DWORD address = a; G1DPADRL = ((DWORD_VAL)(address)).word.LW; G1DPADRH = ((DWORD_VAL)(address)).word.HW; }
#define GFX_SetWorkArea1(a)                 { DWORD address = a; G1W1ADRL = ((DWORD_VAL)(address)).word.LW; G1W1ADRH = ((DWORD_VAL)(address)).word.HW; }
#define GFX_SetWorkArea2(a)                 { DWORD address = a; G1W2ADRL = ((DWORD_VAL)(address)).word.LW; G1W2ADRH = ((DWORD_VAL)(address)).word.HW; }

#define GFX_SetSrcAddress(s)                GFX_SetCommand(RCC_SRCADDR | (s));      /* Don't do error checking or error corrections */
#define GFX_SetDestAddress(d)               GFX_SetCommand(RCC_DESTADDR | (d));     /* Don't do error checking or error corrections */
#define GFX_SetRectSize(width, height)      GFX_SetCommand(RCC_RECTSIZE | (((DWORD)(width)) << 12) | (DWORD)height)     /* Don't do error checking or error corrections */
#define GFX_SetColor(color)                 GFX_SetCommand(RCC_COLOR | (color & GFX_COLOR_MASK))       /* Don't do error checking or error corrections */
#define GFX_StartCopy(type_of_copy, rop, src_addr_type, dest_addr_type)     GFX_SetCommand(RCC_STARTCOPY | type_of_copy | rop | src_addr_type | dest_addr_type)     /* Don't do error checking or error corrections */

#define CHR_FGCOLOR                         0x50000000ul
#define CHR_BGCOLOR                         0x51000000ul
#define CHR_FONTBASE                        0x52000000ul
#define CHR_PRINTCHAR                       0x53000000ul
#define CHR_TEXTAREASTART                   0x58000000ul
#define CHR_TEXTAREAEND                     0x59000000ul
#define CHR_PRINTPOS                        0x5A000000ul

#define CHR_TRANSPARENT                     0x00800000ul
#define CHR_OPAQUE                          0x00000000ul

#define GFX_SetCharFgColor(color)           { _chrcolor.Val = color; GFX_SetCommand(CHR_FGCOLOR | color); }
#define GFX_SetCharBgColor(color)           GFX_SetCommand(CHR_BGCOLOR | color)
#define GFX_SetFont(fontaddress)            GFX_SetCommand(CHR_FONTBASE | fontaddress)
#define GFX_SetStartXY(x, y)                GFX_SetCommand(CHR_TEXTAREASTART | ((DWORD)x) << 12 | y)
#define GFX_SetEndXY(x, y)                  GFX_SetCommand(CHR_TEXTAREAEND | ((DWORD)x) << 12 | y)
#define GFX_SetPrintXY(x, y)                GFX_SetCommand(CHR_PRINTPOS | ((DWORD)x) << 12 | y)
#define GFX_PrintChar(character, transparency)      GFX_SetCommand(CHR_PRINTCHAR | transparency | character)

#define IPU_SRCOFFSET                       0x71000000ul
#define IPU_DSTOFFSET                       0x72000000ul
#define IPU_DSTSIZE                         0x74000000ul

#define GFX_SetCompressedSource(address)    GFX_SetCommand(IPU_SRCOFFSET | address)
#define GFX_SetDecompressionDest(address)   GFX_SetCommand(IPU_DSTOFFSET | address)
#define GFX_SetDecompressSize(bytes)        GFX_SetCommand(IPU_DSTSIZE | bytes)
#define GFX_FinalBlock()                    (G1IPU & 0x0001)
#define GFX_DecomperssionDone()             (G1IPU & 0x0002)
#define GFX_DecompressionError()            (G1IPU & 0x003C)
#define GFX_WrapAroundError()               (G1IPU & 0x0004)
#define GFX_BlockLengthError()              (G1IPU & 0x0008)
#define GFX_UndefinedBlockError()           (G1IPU & 0x0010)
#define GFX_HuffmannError()                 (G1IPU & 0x0020)

#define GFX_GetFreeCommandSpace()               (GFX_COMMAND_QUEUE_LENGTH - _GCMDCNT)
#define GFX_WaitForCommandQueue(n)              while(GFX_GetFreeCommandSpace() < (n));
#define GFX_IsRccGpuBusy()                      (_RCCBUSY)
#define GFX_IsIpuGpuBusy()                      (_IPUBUSY)
#define GFX_IsChrGpuBusy()                      (_CHRBUSY)
#define GFX_IsPuGpuBusy()                       (_PUBUSY)
#define GFX_WaitForRccGpu()                     while(_RCCBUSY);
#define GFX_WaitForIpuGpu()                     while(_IPUBUSY);
#define GFX_WaitForChrGpu()                     while(_CHRBUSY);
#define GFX_WaitForGpu()                        while(_PUBUSY);

/*********************************************************************
* Function:  void ResetDevice()
*
* Overview: Initializes LCD module.
*
* PreCondition: none
*
* Input: none
*
* Output: none
*
* Side Effects: none
*
********************************************************************/
void ResetDevice(void);

/*********************************************************************
* Macros:  GetMaxX()
*
* Overview: Returns maximum horizontal coordinate.
*
* PreCondition: none
*
* Input: none
*
* Output: Maximum horizontal coordinate.
*
* Side Effects: none
*
********************************************************************/
#if (DISP_ORIENTATION == 90) || (DISP_ORIENTATION == 270)

#define GetMaxX() (DISP_VER_RESOLUTION-1)

#elif (DISP_ORIENTATION == 0) || (DISP_ORIENTATION == 180)

#define GetMaxX() (DISP_HOR_RESOLUTION-1)

#endif

/*********************************************************************
* Macros:  GetMaxY()
*
* Overview: Returns maximum vertical coordinate.
*
* PreCondition: none
*
* Input: none
*
* Output: Maximum vertical coordinate.
*
* Side Effects: none
*
********************************************************************/
#if (DISP_ORIENTATION == 90) || (DISP_ORIENTATION == 270)

#define GetMaxY() (DISP_HOR_RESOLUTION-1)

#elif (DISP_ORIENTATION == 0) || (DISP_ORIENTATION == 180)

#define GetMaxY() (DISP_VER_RESOLUTION-1)

#endif

/*********************************************************************
* Macros:  SetColor(color)
*
* Overview: Sets current drawing color.
*
* PreCondition: none
*
* Input: color - Color coded in 5:6:5 RGB format.
*
* Output: none
*
* Side Effects: none
*
********************************************************************/
#define SetColor(color) _color.Val = color;

/*********************************************************************
* Macros:  GetColor()
*
* Overview: Returns current drawing color.
*
* PreCondition: none
*
* Input: none
*
* Output: Color coded in 5:6:5 RGB format.
*
* Side Effects: none
*
********************************************************************/
#define GetColor() _color.Val

/*********************************************************************
* Macros:  SetActivePage(page)
*
* Overview: Sets active graphic page.
*
* PreCondition: none
*
* Input: page - Graphic page number.
*
* Output: none
*
* Side Effects: none
*
********************************************************************/
#define SetActivePage(page)

/*********************************************************************
* Macros: SetVisualPage(page)
*
* Overview: Sets graphic page to display.
*
* PreCondition: none
*
* Input: page - Graphic page number
*
* Output: none
*
* Side Effects: none
*
********************************************************************/
#define SetVisualPage(page)

/*********************************************************************
* Function: WORD MoveBlock(DWORD srcAddr, DWORD dstAddr, 
*                                                  DWORD srcOffset, DWORD dstOffset, 
*                                      WORD srcType, WORD dstType, 
*                          WORD width, WORD height)
*
* PreCondition: none
*
* Input: srcAddr - the base address of the data to be moved
*        dstAddr - the base address of the new location of the moved data 
*        srcOffset - offset of the data to be moved with respect to the 
*                                        source base address.
*        dstOffset - offset of the new location of the moved data respect 
*                                        to the source base address.
*        srcType - sets the source type (continuous or discontinuous)
*        dstType - sets the source type (continuous or discontinuous) 
*        width - width of the block of data to be moved
*        height - height of the block of data to be moved
*
* Output: none
*
* Side Effects: none
*
* Overview: puts pixel
*
* Note: none
*
********************************************************************/
WORD MoveBlock(DWORD srcAddr, DWORD dstAddr, DWORD srcOffset, DWORD dstOffset, 
                           WORD srcType, WORD dstType, WORD width, WORD height);

/*********************************************************************
* Function: WORD ScrollLeft(SHORT left, SHORT top,  
*                                                       SHORT right, SHORT bottom, SHORT delta)
*
* PreCondition: none
*
* Input: left - left position of the scrolled rectangle
*        top - top position of the scrolled rectangle
*        right - right position of the scrolled rectangle
*        bottom - bottom position of the scrolled rectangle
*        delta - defines the scroll delta
*
* Output: none
*
* Side Effects: none
*
* Overview: Scrolls the rectangular area defined by left, top, right, bottom by delta pixels.
*
* Note: none
*
********************************************************************/
WORD ScrollLeft(SHORT left, SHORT top, SHORT right, SHORT bottom, SHORT delta);
                                                        
/*********************************************************************
* Function: void PutPixel(SHORT x, SHORT y)
*
* Overview: Puts pixel with the given x,y coordinate position.
*
* PreCondition: none
*
* Input: x - x position of the pixel.
*                y - y position of the pixel.
*
* Output: none
*
* Side Effects: none
*
********************************************************************/
void PutPixel(SHORT x, SHORT y);

/*********************************************************************
* Function: WORD GetPixel(SHORT x, SHORT y)
*
* Overview: Returns pixel color at the given x,y coordinate position.
*
* PreCondition: none
*
* Input: x - x position of the pixel.
*                y - y position of the pixel.
*
* Output: pixel color
*
* Side Effects: none
*
********************************************************************/
WORD GetPixel(SHORT x, SHORT y);

/*********************************************************************
* Function: SetClipRgn(left, top, right, bottom)
*
* Overview: Sets clipping region.
*
* PreCondition: none
*
* Input: left - Defines the left clipping region border.
*                top - Defines the top clipping region border.
*                right - Defines the right clipping region border.
*            bottom - Defines the bottom clipping region border.
*
* Output: none
*
* Side Effects: none
*
********************************************************************/
void SetClipRgn(SHORT left, SHORT top, SHORT right, SHORT bottom);

/*********************************************************************
* Macros: GetClipLeft()
*
* Overview: Returns left clipping border.
*
* PreCondition: none
*
* Input: none
*
* Output: Left clipping border.
*
* Side Effects: none
*
********************************************************************/
#define GetClipLeft() _clipLeft

/*********************************************************************
* Macros: GetClipRight()
*
* Overview: Returns right clipping border.
*
* PreCondition: none
*
* Input: none
*
* Output: Right clipping border.
*
* Side Effects: none
*
********************************************************************/
#define GetClipRight() _clipRight

/*********************************************************************
* Macros: GetClipTop()
*
* Overview: Returns top clipping border.
*
* PreCondition: none
*
* Input: none
*
* Output: Top clipping border.
*
* Side Effects: none
*
********************************************************************/
#define GetClipTop() _clipTop

/*********************************************************************
* Macros: GetClipBottom()
*
* Overview: Returns bottom clipping border.
*
* PreCondition: none
*
* Input: none
*
* Output: Bottom clipping border.
*
* Side Effects: none
*
********************************************************************/
#define GetClipBottom() _clipBottom

/*********************************************************************
* Function: SetClip(control)
*
* Overview: Enables/disables clipping.
*
* PreCondition: none
*
* Input: control - Enables or disables the clipping.
*                       - 0: Disable clipping
*                       - 1: Enable clipping
*
* Output: none
*
* Side Effects: none
*
********************************************************************/
void SetClip(BYTE control);

/*********************************************************************
* Macros: IsDeviceBusy()
*
* Overview: Returns non-zero if LCD controller is busy 
*           (previous drawing operation is not completed).
*
* PreCondition: none
*
* Input: none
*
* Output: Busy status.
*
* Side Effects: none
*
********************************************************************/
#define IsDeviceBusy()  (GFX_GetFreeCommandSpace() < 4)

/*********************************************************************
* Function:  BYTE Decompress(DWORD SrcAddress, DWORD DestAddress, DWORD nbytes);
*
* Overview: Decompresses the nbytes number of data at SrcAddress and
*           places starting from DestAddress. (Blocking)
*
* PreCondition: SrcAddress must point to the start of a compressed block.
*
* Input: SrcAddress  - Source address
*        DestAddress - Destination address
*        nbytes      - Number of bytes to be decompressed
*
* Output: error flag
*
* Side Effects: Modifies workarea_1 & workarea_2 registers.
*
********************************************************************/
BYTE Decompress(DWORD SrcAddress, DWORD DestAddress, DWORD nbytes);

typedef struct
{
    WORD X;
    WORD Y;
    WORD W;
    WORD H;
} RectangleArea;

#ifdef USE_DOUBLE_BUFFERING

    #define GFX_MAX_INVALIDATE_AREAS 5

extern BYTE blInvalidateAll;
extern BYTE blEnableDoubleBuffering;
extern volatile BYTE blDisplayUpdatePending;
extern BYTE NoOfInvalidatedRectangleAreas;
extern RectangleArea InvalidatedArea[GFX_MAX_INVALIDATE_AREAS];

/*********************************************************************
* Macros:  SwitchOnDoubleBuffering()
*
* Overview: Switches on the double buffering.
*           The drawing is done on the draw buffer.
*           This also causes copying of the frame buffer to draw buffer once.
*
* PreCondition: none
*
* Input: none
*
* Output: none
*
* Side Effects: none
*
********************************************************************/
#define SwitchOnDoubleBuffering()       if(blEnableDoubleBuffering == 0) \
                                        { blEnableDoubleBuffering = 1; InvalidateAll(); }

/*********************************************************************
* Macros:  SwitchOffDoubleBuffering()
*
* Overview: Switches off the double buffering.
*           The drawing is done on the display buffer.
*
* PreCondition: none
*
* Input: none
*
* Output: none
*
* Side Effects: none
*
********************************************************************/
#define SwitchOffDoubleBuffering()      if(blEnableDoubleBuffering == 1) \
                                        { UpdateDisplayNow(); \
                                          _drawbuffer = (_drawbuffer == GFX_BUFFER1)? GFX_BUFFER2: GFX_BUFFER1; \
                                          blEnableDoubleBuffering = 0; }

/*********************************************************************
* Macros:  IsDisplayUpdatePending()
*
* Overview: Returns id the display updation is pending.
*
* PreCondition: none
*
* Input: none
*
* Output: none
*
* Side Effects: none
*
********************************************************************/
#define IsDisplayUpdatePending()    blDisplayUpdatePending

/*********************************************************************
* Macros:  InvalidateAll()
*
* Overview: Invalidates the whole screen
*
* PreCondition: none
*
* Input: none
*
* Output: none
*
* Side Effects: none
*
********************************************************************/
#define InvalidateAll()                 blInvalidateAll = 1;

/*********************************************************************
* Function:  void InvalidateRectangle(WORD left, WORD top, WORD right, WORD bottom)
*
* Overview: Invalidates the specified rectangular area and if the
*           invalidated areas exceed the GFX_MAX_INVALIDATE_AREAS,
*           whole area is marked as invalidate
*
* PreCondition: None
*
* Input: left,top - top left corner coordinates,
*        right,bottom - bottom right corner coordinates
*
* Output: None
*
* Side Effects: Only copies back the invalidated areas to the draw -
*               buffer after the exchange of draw and frame buffers
*
********************************************************************/
void InvalidateRectangle(WORD x, WORD y, WORD w, WORD h);

/*********************************************************************
* Function:  void UpdateDisplayNow(void)
*
* Overview: Synchronizes the draw and frame buffers immediately
*
* PreCondition: none
*
* Input: none
*
* Output: none
*
* Side Effects: none
*
********************************************************************/
void UpdateDisplayNow(void);

/*********************************************************************
* Function:  void RequestDisplayUpdate(void)
*
* Overview: Synchronizes the draw and frame buffers at next VBlank
*
* PreCondition: none
*
* Input: none
*
* Output: none
*
* Side Effects: none
*
********************************************************************/
void RequestDisplayUpdate(void);

#else

#define SwitchOnDoubleBuffering()
#define SwitchOffDoubleBuffering()
#define IsDisplayUpdatePending() 0
#define InvalidateAll()
#define InvalidateRectangle(x, y, w, h)
#define ExchangeDrawAndFrameBuffers()
#define UpdateDisplayNow()
#define RequestDisplayUpdate()

#endif //USE_DOUBLE_BUFFERING

#ifdef USE_PALETTE
    #include "Graphics\Palette.h"
#endif

#endif // _CUSTOM_DISPLAY_DRIVER_H
{FILE END}
{FOOTER START}

Powered by WebSVN v2.8.3