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

📄 guighl.c

📁 The combined demo is dedicated for S1C33L05, so DMT33L05 should be used to load and run the demo. F
💻 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 + -