📄 lcdgpe.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 + -