⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcdgpe.h

📁 AU1100嵌入式处理器lcd显示驱动程序
💻 H
字号:
/*
 * File:	lcdgpe.h
 *
 * Purpose:	Au1100 LCD control data structure
 *
 * Author:	Alchemy Semiconductor
 * Date:	February 13, 2002
 */

//    Copyright (c) 2002 BSQUARE Corporation.  All rights reserved.

#ifndef _LCDGPE_H
#define _LCDGPE_H

#include "swcursor.h"
#include "platform.h"

/********************************************************************/
typedef ULONG BitMask[3]; // RGB bitmasks

#define uint32 unsigned long
typedef struct AU1100_LCD_MODE
{
	unsigned short	*description;
	uint32	mode_control;
	uint32	mode_horztiming;
	uint32	mode_verttiming;
	uint32	mode_clkcontrol;
	uint32	mode_pwmdiv;
	uint32	mode_pwmhi;
	uint32	mode_toyclksrc;
	uint32	mode_backlight;

	BitMask *mode_bitmask;
} AU1100_LCD_MODE;

class Au1100LCDSurf;

int isDSTN (uint32 control);

#ifdef DDRAW_ENABLE

class Au1100LCD : public DDGPE

#else

class Au1100LCD : public GPE

#endif // DDRAW_ENABLE
{
//---------------------------------------------------------------------------------------------------------
public:
                Au1100LCD ();
    virtual		~Au1100LCD ();

    virtual SCODE   SetMode ( int modeNo, HPALETTE *pPalette );
#ifdef DDRAW_ENABLE
    virtual SCODE   SetMode ( int modeNo, HPALETTE *pPalette, BOOL bChangeGDISurfaceMode );
    void            GetTicksPerFrame(void);
#endif
#ifdef SHOW_FRAMERATE
    void            DisplayFrameRate(void);
#endif

    virtual SCODE   GetModeInfo ( GPEMode *pMode, int modeNo );
#ifdef DDRAW_ENABLE
    virtual SCODE   GetModeInfoEx ( GPEModeEx *pModeEx, int modeNo );
#endif

    int             GetBpp();

    virtual int     NumModes ();
    virtual VOID    PowerHandler ( BOOL bOff );
	VOID			SetRegisters(VOID);

    // Cursor.cpp:
    virtual SCODE   SetPointerShape ( GPESurf *pMask, GPESurf *pColorSurf, int xHot, int yHot, int cx, int cy );

    virtual SCODE   MovePointer ( int x, int y );

    // Misc.cpp:
    virtual void    GetPhysicalVideoMemory ( unsigned long *pPhysicalMemoryBase, unsigned long *pVideoMemorySize );
    virtual int     InVBlank ();

    virtual SCODE   SetPalette ( const PALETTEENTRY *src, unsigned short firstEntry, unsigned short numEntries );
    virtual ULONG   DrvEscape ( SURFOBJ *pso, ULONG iEsc, ULONG cjIn, PVOID pvIn, ULONG cjOut, PVOID pvOut );

    // Surf.cpp:
    virtual SCODE   AllocSurface ( GPESurf **ppSurf, int width, int height, EGPEFormat format, int surfaceFlags );
    virtual void    SetVisibleSurface ( GPESurf *pSurf );

#ifdef DDRAW_ENABLE
    virtual void    GetVirtualVideoMemory ( unsigned long *pVirtualMemoryBase, unsigned long *pVideoMemorySize );

    virtual SCODE   AllocSurface ( DDGPESurf **ppSurf, int width, int height, EGPEFormat format, EDDGPEPixelFormat pixelFormat, int surfaceFlags	);

    // SetVisibleSurface calls GPE class SetVisibleSurface, therefore, we pass GPESurf as an argument.
    virtual VOID    SetVisibleSurface ( GPESurf* pSurf, BOOL bWaitForVBlank );
	virtual void    WaitForVBlank(void);
    void            CheckVisibleSurface (void);
    virtual int     FlipInProgress (void);
    virtual int     SurfaceBusyFlipping ( DDGPESurf *pSurf );
	virtual	void	VBlankReceived();	// Called when VBlank is entered
#endif DDRAW_ENABLE

    // Line.cpp:
    virtual SCODE   Line ( GPELineParms *pLineParms, EGPEPhase phase );
    SCODE           WrappedEmulatedLine (GPELineParms *lineParameters);

    // Blt.cpp:
    virtual SCODE   BltPrepare ( GPEBltParms *pBltParms );
    virtual SCODE   BltComplete ( GPEBltParms *pBltParms );

//---------------------------------------------------------------------------------------------------------
private:
	AU1100_LCD		*m_Reg;     /* virtual pointer to LCD registers */
	AU1X00_SYS		*m_Sys;
	ULONG			m_pFb;      /* physical address of frame buffer */
	PUCHAR			m_pLAW;     /* virtual pointer to frame buffer  */
	ULONG			m_FbSize;   /* size of frame buffer */
	int				m_words;	/* number of 32-bit words, for LCD DMA engine */
	AU1100_LCD_MODE	*m_mode;
	GPEMode			m_ModeInfo; /* current mode info */
	int				m_nXHot;
	int				m_nYHot;
	int				m_LineSizeInBytes;

    BOOL            m_bCursorForcedOff;

	SOFT_CURSOR		*m_cursor;
		// for rotation support
	int  m_iRotate;
	

#ifdef DDRAW_ENABLE
    SurfaceHeap    *m_pVideoMemory;     // Base entry representing all video memory
#else
    Node2D         *m_p2DVideoMemory;   // Base entry representing all video memory
#endif

    int             m_nBytesPerPixel;

#ifdef SHOW_FRAMERATE
	BOOL            m_bShowFrameRate;
	DWORD           m_dwFrameCount;
	DWORD           m_dwFrameTime;
	DWORD           m_dwFrames;
	DWORD           m_dwFramesLast;
#endif SHOW_FRAMERATE

    unsigned int    m_nTicksPerFrame;       // E.g. 17 for 60 Hz frames, 1mS ticks
    unsigned int    m_nTicksAtFlip;         // TickCount at time flip was requested
    unsigned int    m_nTicksAtResync;       // TickCount when we last waited for VBlank
    Au1100LCDSurf   *m_pOldVisibleSurface;  // Visible surface before flip
    Au1100LCDSurf   *m_pNewVisibleSurface;  // Visible surface after flip

};

#ifdef DDRAW_ENABLE

class Au1100LCDSurf : public DDGPESurf
{
private:
    SurfaceHeap     *m_pSurfaceHeap;

public:
                    Au1100LCDSurf(
                        int width,
                        int height, 
                        ULONG offset, 
                        PVOID pBits,    // virtual address of allocated surface
                        int stride, 
                        EGPEFormat format, 
                        SurfaceHeap *pNode);

                    Au1100LCDSurf(
                        int width, 
                        int height, 
                        ULONG offset, 
                        PVOID pBits, 
                        int stride,
                        EGPEFormat format, 
                        EDDGPEPixelFormat pixelFormat, 
                        SurfaceHeap *pNode);

	virtual         ~Au1100LCDSurf(void);
};

#else // Node2D clase

class Au1100LCDSurf : public GPESurf
{
private:
    Node2D          *m_pNode2D;
public:
					Au1100LCDSurf(int width, int height, ULONG offset, PVOID pBits, int stride, EGPEFormat format, Node2D *pNode);
	virtual         ~Au1100LCDSurf(void);
	int             Top(void) { return m_pNode2D->Top(); }
	int             Left(void) { return m_pNode2D->Left(); }
};
#endif DDRAW_ENABLE

#endif /* _LCDGPE_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -