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

📄 guighl.c

📁 一款SmartPhone的驱动代码
💻 C
字号:
/***********************************************************************
 * 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 "sysLCDC.h"
#include "sysMCU.h"



extern T_BYTE VRAM[LCDHEIGHT*LCDWIDTH*2];
T_EXTERN T_BOOL	 bInstantPaint;

T_MODULE T_VOID *InitScrDev(T_VOID)
{
	init_dlcd_hardware();		// initial the LCD hardware
//	return (T_VOID*)VRAM;
	return (T_VOID*)(MAIN_WINDOW_ADDRESS+HalInfo.dwMemoryAddress);
	
}

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)
{
	T_BYTE *pTemp;
	pTemp = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*2;
	*(T_UHWORD *)pTemp = (T_UHWORD)c;

	if(bInstantPaint)
	{
//		StartDMA(0,y,(LCDWIDTH-1),y,(unsigned short *)&(VRAM[y*pGC->LineLen]),(MAIN_WINDOW_ADDRESS+y*pGC->LineLen));
	}
}

T_MODULE T_GUI_PIXEL ReadPixel(T_GAL_pGC pGC, T_WORD x, T_WORD y)
{


	T_BYTE *pTemp;
	T_UHWORD temp;

	pTemp = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*2;
	temp = *(T_UHWORD *)pTemp;
 	return (T_GUI_PIXEL)temp;
}

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;
	T_BYTE *pTemp;

	pTemp = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*2;
	
	for(i=0;i<w;i++)
	{
		*(T_UHWORD *)pTemp = (unsigned short)c;
	    pTemp += 2;
	}

	if(bInstantPaint)
	{
//		StartDMA(0,y,(LCDWIDTH-1),y,(unsigned short *)&(VRAM[y*pGC->LineLen]),(MAIN_WINDOW_ADDRESS+y*pGC->LineLen));

	}

}

T_MODULE T_VOID	PutHLine (T_GAL_pGC pGC, T_WORD x, T_WORD y, T_WORD w, T_VOID* buf)
{
	T_BYTE *pData;
	T_BYTE *pTemp;

	pTemp = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*2;
	pData = (T_BYTE*)buf;
	
	memcpy(pTemp,pData,w*2);

	if(bInstantPaint)
	{
//		StartDMA(0,y,(LCDWIDTH-1),y,(unsigned short *)&(VRAM[y*pGC->LineLen]),(MAIN_WINDOW_ADDRESS+y*pGC->LineLen));

	}
}

T_MODULE T_VOID	GetHLine(T_GAL_pGC pGC, T_WORD x, T_WORD y, T_WORD w, T_VOID* buf)
{
	T_BYTE *pData;
	T_BYTE *pTemp;

	pTemp = (T_BYTE*)pGC->addr + y*pGC->LineLen + x*2;
	pData = (T_BYTE*)buf;
	memcpy(pData,pTemp,w*2);
}

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;

   for(i = y;i < y + h;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_UHWORD *pData;
	T_UHWORD temp;

	pData = (T_UHWORD*)buf;

	for(i = y;i< y + h;i++)
	{
		temp = *pData++;
		DrawPixel(pGC,x,i,temp);
	}

}

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_UHWORD *pData;
	T_BYTE *pTemp;

	pTemp = (T_BYTE*)pGC->addr;
	pData = (T_UHWORD*)buf;

	for(i = y;i< y + h;i++)
	{
		*pData++ = *(T_UHWORD *)(pTemp + i*pGC->LineLen + x*2);
	}
}

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)
{
	T_BYTE *pData;
	T_BYTE *pTemp;
	T_WORD srcwidth = BufLen;
	T_WORD hTemp,yTemp;
	T_BYTE *pTempAddr;

	pTempAddr = (T_BYTE*)pGC->addr;
	pData = (T_BYTE*)buf;
	hTemp = h;
	yTemp = y;

	while(h)
	{
		pTemp = pData;
		memcpy((pTempAddr+y*pGC->LineLen+x*2),pData,w*2);
		pData +=srcwidth;
		h--;
		y++;
	}
	
	if(bInstantPaint)
	{
//		StartDMA(0,yTemp,(LCDWIDTH-1),yTemp+hTemp,(unsigned short *)&(VRAM[yTemp*pGC->LineLen]),(MAIN_WINDOW_ADDRESS+y*pGC->LineLen));

	}
}

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)
{
	T_BYTE *pData;
	T_BYTE *pTemp;
	T_WORD dstwidth = BufLen;
	T_BYTE *pTempAddr;

	pTempAddr = pGC->addr;
	pData = (T_BYTE*)buf;

	while(h)
	{
		pTemp = pData;
		memcpy(pData,(pTempAddr+y*pGC->LineLen+x*2),w*2);
		pData +=dstwidth;
		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 width,dx;
	T_UHWORD dstpixel;
	T_GUI_UINT8 *pData;
	T_UHWORD *pTemp;
	T_WORD srcwidth = BufLen;
	T_WORD hTemp,yTemp;
	T_BYTE *pTempAddr;

	pTempAddr = pGC->addr;
	pData = (T_GUI_UINT8*)buf;
	hTemp = h;
	yTemp = y;

	while(h)
	{
		width = w;
		dx = x;
		pTemp = (T_UHWORD*)pData;
		while(width)
		{
			dstpixel = *(T_UHWORD *)pTemp++;

			if ((T_GUI_PIXEL)dstpixel != cxx)
				*(T_UHWORD *)(pTempAddr + y*pGC->LineLen + dx*2) = dstpixel;
			width--;
			dx++;
		}
		pData +=srcwidth;
		h--;
		y++;
	}
	if(bInstantPaint)
	{
//		StartDMA(0,yTemp,(LCDWIDTH-1),yTemp+hTemp,(unsigned short *)&(VRAM[yTemp*pGC->LineLen]),(MAIN_WINDOW_ADDRESS+y*pGC->LineLen));

	}
}

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 *2;
    p = (T_VOID*)malloc(size);
    if(p==NULL)
    	return;

    GetBox(pGC,x1,y1,w,h,p,w*2);
    PutBox(pGC,x2,y2,w,h,p,w*2);

    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 *2 ;
    p = (T_VOID*)malloc(size);
    if(p==NULL)
    	return;

    GetBox(SrcpGC,SrcX,SrcY,w,h,p,w*2);
    PutBox(DstpGC,DstX,DstY,w,h,p,w*2);

    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:
	#ifdef GUI_4440PALETTE
		return GAL_RGB2PIXEL4440(color->r, color->g, color->b);
	#else
		return GAL_RGB2PIXEL565 (color->r, color->g, color->b);
	#endif
	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)
{
//	StartDMA(0,0,x2,y2,(unsigned short *)&(VRAM[0]),MAIN_WINDOW_ADDRESS);
}

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;
	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 + -