📄 guighl.c
字号:
/* $Id: guiGhl.c V1.0 2001/10/22 */
/*************************************************************************
* This source code has been made available to you by EPSON on an AS-IS
* basis. Anyone receiving this source is licensed under EPSON
* copyrights to use it in any way he or she deems fit, including
* copying it, modifying it, compiling it, and redistributing it either
* with or without modifications.
*
* Any person who transfers this source code or any derivative work
* must include the EPSON copyright notice, this paragraph, and the
* preceding two paragraphs in the transferred software.
*
* COPYRIGHT EPSON CORPORATION 2001
* LICENSED MATERIAL - PROGRAM PROPERTY OF EPSON
***********************************************************************/
/***********************************************************************
* FILE: guiGhl.c
* MODULE: Graphic hardware layer
*
* PURPOSE:
* AUTHOR(S): YangCX
* GROUP: GUI Group
* DATE CREATED: 2001/10/22
* REFERENCE DOCUMENT ID:
* MODIFICATIONS:
* Date userName Description
* 2001/10/22 YangCX Create this file
**********************************************************************/
#include <stdlib.h>
#include "sysGUI.h"
#include "guiGhldrv.h"
#include "cBType.h"
#include "Drv_lcd.h"
extern U32 cur_vram_lcdc_addr;
//T_MODULE
T_VOID *InitScrDev(T_VOID)
{
init_dlcd_hardware(); //在这个函数中实现LCD有关的所有初始化工作
return (T_VOID*)cur_vram_lcdc_addr; //返回VRAM的首地址,如果使用的LCD是命令接口的,可返回0.
}
T_MODULE T_VOID SetPalette(
T_GAL_pGC pGC,
T_WORD first,
T_WORD count,
T_GUI_COLOR *cmap
)
{
return;
}
T_MODULE T_VOID GetPalette(
T_GAL_pGC pGC,
T_WORD first,
T_WORD count,
T_GUI_COLOR *cmap
)
{
return;
}
T_MODULE T_VOID DrawPixel(
T_GAL_pGC pGC,
T_WORD x,
T_WORD y,
T_GUI_PIXEL c
)
{
// seDrawPixel(pGC, x,y,c);
T_BYTE* pos_sdramAddr;
T_GHL_Pixel * pos_ptr;
pos_sdramAddr = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*BpP;
pos_ptr = (T_GHL_Pixel *)pos_sdramAddr;
*pos_ptr = c;
}
T_MODULE T_GUI_PIXEL ReadPixel(
T_GAL_pGC pGC,
T_WORD x,
T_WORD y
)
{
// return (T_GUI_PIXEL) seReadPixel(pGC, x,y);
T_GHL_Pixel thispixel ; //用来记录该点色彩信息的变量
T_BYTE* pos_sdramAddr;
T_GHL_Pixel * pos_ptr;
thispixel= 0;
pos_sdramAddr = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*BpP;
pos_ptr = (T_GHL_Pixel *)pos_sdramAddr;
thispixel = *pos_ptr;
return (T_GUI_PIXEL)thispixel;
}
T_MODULE T_VOID DrawHLine(
T_GAL_pGC pGC,
T_WORD x,
T_WORD y,
T_WORD w,
T_GUI_PIXEL c
)
{
T_WORD i, x2;
x2 = x + w;
for (i=x; i<=x2; i++)
DrawPixel(pGC, i, y, c);
}
T_MODULE T_VOID PutHLine (
T_GAL_pGC pGC,
T_WORD x,
T_WORD y,
T_WORD w,
T_VOID* buf
)
{
// lcd_SetHLine( (S16) x, (S16) y, (S16) w, (U16 *) buf);
T_BYTE* desbufAdr;
desbufAdr = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*BpP;
lcd_startDMA((U32)buf, (U32)desbufAdr, (U32)w, NORMAL_DMA);
/* T_WORD i;
T_GHL_Pixel *pData;
pData = (T_GHL_Pixel*)buf;
for(i = 0 ; i<w ; i++)
DrawPixel(pGC, x+i, y, pData[i]);
*/
}
T_MODULE T_VOID GetHLine(
T_GAL_pGC pGC,
T_WORD x,
T_WORD y,
T_WORD w,
T_VOID* buf
)
{
// lcd_GetHLine( (S16) x, (S16) y, (S16) w, (U16 *) buf);
T_BYTE* srcbufAdr;
srcbufAdr = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*BpP;
lcd_startDMA((U32)srcbufAdr, (U32)buf, (U32)w, NORMAL_DMA);
/*
T_WORD i ;
T_GHL_Pixel *pData;
pData = (T_GHL_Pixel*)buf;
for(i = 0 ; i< w ; i++)
pData[i] = ReadPixel(pGC,x+i,y);
*/
}
//T_MODULE
T_VOID DrawVLine(
T_GAL_pGC pGC,
T_WORD x,
T_WORD y,
T_WORD h,
T_GUI_PIXEL c
)
{
T_WORD i, y2;
y2 = y + h;
for(i = y; i < y2; i++)
DrawPixel(pGC, x, i, c);
}
T_MODULE T_VOID PutVLine(
T_GAL_pGC pGC,
T_WORD x,
T_WORD y,
T_WORD h,
T_VOID* buf
)
{
T_WORD i;
T_GHL_Pixel *pData;
pData = (T_GHL_Pixel*)buf;
for(i = 0 ; i<h ; i++)
DrawPixel(pGC, x, y+i, pData[i]);
}
T_MODULE T_VOID GetVLine(
T_GAL_pGC pGC,
T_WORD x,
T_WORD y,
T_WORD h,
T_VOID* buf
)
{
T_WORD i ;
T_GHL_Pixel *pData;
pData = (T_GHL_Pixel*)buf;
for(i = 0 ; i< h ; i++)
pData[i] = ReadPixel(pGC,x,y+i);
}
T_MODULE T_VOID PutBox(
T_GAL_pGC pGC,
T_WORD x,
T_WORD y,
T_WORD w,
T_WORD h,
T_VOID* buf ,
T_WORD BufLen
)
{
// lcd_SetImage( (S16) x, (S16) y, (S16) w, (S16) h, (U16 *)buf, (U32) BufLen);
U32 srcbufAdr, desbufAdr;
int i;
desbufAdr = (U32)pGC->addr + y*pGC->LineLen + x*BpP;
srcbufAdr = (U32)buf;
for (i=0; i<h; i++){
lcd_startDMA(srcbufAdr, desbufAdr, w, NORMAL_DMA);
srcbufAdr+=BufLen;
desbufAdr+=pGC->LineLen;
}
/*
T_GUI_UINT8 *pData;
pData = (T_GUI_UINT8 *)buf;
while(h)
{
PutHLine (pGC, x, y, w, pData);
pData +=BufLen;
h--;
y++;
}
*/
}
T_MODULE T_VOID GetBox(
T_GAL_pGC pGC,
T_WORD x,
T_WORD y,
T_WORD w,
T_WORD h,
T_VOID* buf ,
T_WORD BufLen
)
{
// lcd_GetImage( (S16) x, (S16) y, (S16) w, (S16) h, (U16 *)buf, (U32) BufLen );
U32 srcbufAdr, desbufAdr;
int i;
srcbufAdr = (U32)pGC->addr + y*pGC->LineLen + x*BpP;
desbufAdr = (U32)buf;
for (i=0; i<h; i++){
lcd_startDMA(srcbufAdr, desbufAdr, w, NORMAL_DMA);
srcbufAdr+=pGC->LineLen;
desbufAdr+=BufLen;
}
/*
T_GUI_UINT8 *pData;
pData = (T_GUI_UINT8 *)buf;
while(h)
{
GetHLine (pGC, x, y, w, pData);
pData +=BufLen;
h--;
y++;
}
*/
}
T_MODULE T_VOID PutBoxMask(
T_GAL_pGC pGC,
T_WORD x,
T_WORD y,
T_WORD w,
T_WORD h,
T_VOID *buf,
T_WORD BufLen,
T_GUI_PIXEL cxx
)
{
T_WORD ww, dy,dx;
T_GHL_Pixel dstpixel;
T_GHL_Pixel *pPixel;
T_GUI_UINT8 *pData;
pData = (T_GUI_UINT8 *)buf;
while(h) {
for (dx = 0 ; dx < w ; dx++) {
pPixel = (T_GHL_Pixel *) pData;
dstpixel = pPixel[dx];
if (!((T_GUI_PIXEL)dstpixel == cxx))
DrawPixel(pGC, dx+x, y, dstpixel);
}
pData +=BufLen;
h--;
y++;
}
}
T_MODULE T_VOID CopyBox(
T_GAL_pGC pGC,
T_WORD x1,
T_WORD y1,
T_WORD w,
T_WORD h,
T_WORD x2,
T_WORD y2
)
{
T_WORD size;
T_VOID* p;
size = w * h *BpP;
p = (T_VOID*)malloc(size);
if(p==NULL)
return;
GetBox(pGC,x1,y1,w,h,p,w*BpP);
PutBox(pGC,x2,y2,w,h,p,w*BpP);
free (p);
}
T_MODULE T_VOID Blit(
T_GAL_pGC DstpGC,
T_WORD DstX,
T_WORD DstY,
T_WORD w,
T_WORD h,
T_GAL_pGC SrcpGC,
T_WORD SrcX,
T_WORD SrcY
)
{
T_WORD size;
T_VOID* p;
size = w * h *BpP ;
p = (T_VOID*)malloc(size);
if(p==NULL)
return;
GetBox(SrcpGC,SrcX, SrcY,w,h,p,w*BpP);
PutBox(DstpGC,DstX,DstY,w,h,p,w*BpP);
free (p);
}
/*function MapColor added for porting easily 2002.6.12*/
T_MODULE T_GUI_PIXEL MapColor(
T_GAL_pGC pGC,
T_GUI_COLOR *color
)
{
T_UWORD v;
switch (pGC->bpp)
{
case 1:
v = 0;
if (color->b > 128 && color->g > 128 && color->r > 128)
v = 1;
return v;
case 2:
v = 0;
if (color->b >= 64)
v += 1;
if (color->g >= 64)
v += 2;
if (color->r >= 64)
v += 4;
if (color->b >= 192 || color->g >= 192 || color->r >= 192)
v += 8;
v>>=2;
return v;
case 4:
/* Now this is real fun. Map to standard EGA palette. */
v = 0;
if (color->b ==192 && color->g == 192 && color->r == 192)
{
v += 8;
return v;
}
if (color->b >= 64)
v += 1;
if (color->g >= 64)
v += 2;
if (color->r >= 64)
v += 4;
if (color->b >= 192 || color->g >= 192 || color->r >= 192)
v += 8;
return v;
case 8:
return GAL_RGB2PIXEL332 (color->r, color->g, color->b);
case 15:
return GAL_RGB2PIXEL555 (color->r, color->g, color->b);
case 16:
return GAL_RGB2PIXEL565 (color->r, color->g, color->b);
case 24:
case 32:
return GAL_RGB2PIXEL888 (color->r, color->g, color->b);
}
return GAL_FAILED;
}
T_VOID fnGUI_MemToScreen(T_WORD x1,T_WORD y1,T_WORD x2,T_WORD y2)
{
// lcd_DrawNow();
}
T_WORD fnGUI_GetLCDProperty(T_WORD which)
{
switch(which){
case 0:/*LCD WIDTH*/
return LCDWIDTH;
case 1:/*LCD HEIGHT*/
return LCDHEIGHT;
case 2:/*BPP*/
return LCDBPP;
case 3:/*Byte per Pixel*/
return BpP;
default:
return -1;
}
}
T_GAL_ScreenDevice* tpGAL_ScrDev;
T_GAL_ScreenDevice tGAL_ScrDev = {
LCDWIDTH,/*LCD WIDTH*/
LCDHEIGHT,/*LCD HEIGHT*/
LCDBPP, /*BPP*/
GAL_TYPE_PACKED_PIXELS,
InitScrDev,
SetPalette,
GetPalette,
DrawPixel,
ReadPixel,
DrawHLine,
PutHLine,
GetHLine,
DrawVLine,
PutVLine,
GetVLine,
Blit,
PutBox,
GetBox,
PutBoxMask,
CopyBox,
MapColor /*MapColor function added for porting easily 2002.6.12*/
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -