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

📄 testtp.c

📁 一个操作系统源代码 用于嵌入式设备 在Vc++环境下仿真 成功移植到多款处理器上
💻 C
字号:
/**************************************************************
* MODIFICATION HISTORY
*        2002/3/13        Pessia           Move vInitLCD() into initial()
*                                                    Move initial() to init.c
 **************************************************************/
#include <stdio.h>
#include <sys\gpc.h>
#include <sys\sysmsg.h>
#include <sys\ppsmtype.h>
#include <sys\vramop.h>

#include <sys\at.h>
#include <sys\key.h>
#include <sys\pen.h>

#include <ppsm.h>
#include <sys\systsk.h>
#include <sys\sysusr.h>
#include <sys\syserr.h>
#include <sys\ppsmmsg.h>

/* Prototype of  Extern Functions */
/* functions for init */
#define VRAM_H 240
#define VRAM_W 160
//#define VRAM_BYTES ((VRAM_W*VRAM_H*BITS_PER_PIXEL)>>3)

SYSTCB	gSysTcbTbl[TASKNUM];	/* Global Task Control Block Table */
ID 		gLcdOwnerTskId=0;		/* task id of LCD owner */
//SYSTCB	*CurTask=NULL;			/* point to current app task's link entry */
SYSTCB	*TaskHead=NULL;		/* Application Task List */

//开辟一个数组,保存将要写到LCDC上的值 60:because a pixel is 2-bit
//unsigned char gram[VRAM_BYTES];

extern void InitLCD( void );
extern void TurnOnLCD(void);
//void PenCalibration2(GC *pGC);

/* Variables for Pen Calibration */
static float kx = 0;
static float bx = 0;
static float ky = 0;
static float by = 0;

static void delay(int i)
{
	int j=0;
	for(;j<i;j++);
}

void Systask()
{
}

void AsixShell()
{
}

#define BYTE_TSF     *((unsigned char *)0xFFFFF907)
static show_addr(unsigned long addr)
{
	int i;
	
#define DELAY_MAX 10000
#define delay()	for(i=0;i<DELAY_MAX;i++){}

	delay();
	BYTE_TSF = '*';
	delay();
	BYTE_TSF = *((char *)addr);
	delay();
	BYTE_TSF = '*';
	delay();
}

void gpc_test ( void )
{
	MSG	msg;
	int i;
//	VRAM vram;
	GC *pGC, tempGC;
	BITMAP bmp;
//	FONT font;
	char text[] = "Weep not for the past, fear not for the future";
	short	sx=0,sy=0,mx=0,my=0;
	
/*	
	vram.widthInPixel = VRAM_W;
	vram.widthInBit = VRAM_W * BITS_PER_PIXEL;
	vram.height = VRAM_H;
	vram.lcdx = 0;
	vram.lcdy = 0;
	vram.ad = ( PIXEL * )gram;
	
	//构造GC
	gc.dotwidth = 1;
	gc.width = VRAM_W;
	gc.height = VRAM_H;
	gc.font = &font;
	gc.cursor = NULL;
	gc.vram = &vram;
	gc.symbol = GPC_GC_SYMBOL;
	gc.lcd_x = 0;
	gc.lcd_y = 0;
	gc.group_operation = 0;
	
	font.Font1 = GPCFONT11A + sizeof( FONTHEADER );
	font.Font1Width = 6;
	font.Font1Height = 12;
	font.Font2 = NULL;
	font.Font2Width = 0;
	font.Font2Height = 0;
*/

	BYTE_TSF='k';
	
	gLcdOwnerTskId = 2;
	pGC = (GC *)SysInitGC(VRAM_W, VRAM_H);
	gSysTcbTbl[1].gc = pGC;
	BYTE_TSF='l';
	
 	InitialPalette();
 	BYTE_TSF='m';
	InitLCD();
	
	show_addr(0xfffff400);
	show_addr(0xfffff401);
	show_addr(0xfffff402);
	show_addr(0xfffff403);
	show_addr(0xfffff408);
	show_addr(0xfffff409);
	show_addr(0xfffff40a);
	show_addr(0xfffff40b);
	show_addr(0xfffff410);
	show_addr(0xfffff411);
	show_addr(0xfffff412);
	show_addr(0xfffff413);
	show_addr(0xfffff418);
	show_addr(0xfffff419);
	show_addr(0xfffff41a);
	show_addr(0xfffff41b);
	show_addr(0xfffff41c);
	show_addr(0xfffff41d);
	show_addr(0xfffff41e);
	show_addr(0xfffff41f);
	show_addr(0xfffff420);
	show_addr(0xfffff421);
	show_addr(0xfffff422);
	show_addr(0xfffff423);
	show_addr(0xfffff428);
	show_addr(0xfffff429);
	show_addr(0xfffff42a);
	show_addr(0xfffff42b);
	show_addr(0xfffff430);
	show_addr(0xfffff431);
	show_addr(0xfffff432);
	show_addr(0xfffff433);
	
	
	show_addr(0xFFFFFA05);
	show_addr(0xFFFFFA06);
	show_addr(0xFFFFFA08);
	show_addr(0xFFFFFA09);
	show_addr(0xFFFFFA0a);
	show_addr(0xFFFFFA0b);
	show_addr(0xFFFFFA18);
	show_addr(0xFFFFFA19);
	show_addr(0xFFFFFA1a);
	show_addr(0xFFFFFA1b);
	show_addr(0xFFFFFA1c);
	show_addr(0xFFFFFA1d);
	show_addr(0xFFFFFA1f);
	show_addr(0xFFFFFA20);
	show_addr(0xFFFFFA21);
	show_addr(0xFFFFFA23);
	show_addr(0xFFFFFA24);
	show_addr(0xFFFFFA25);
	show_addr(0xFFFFFA27);
	show_addr(0xFFFFFA29);
	show_addr(0xFFFFFA2b);
	show_addr(0xFFFFFA2d);
	show_addr(0xFFFFFA31);
	show_addr(0xFFFFFA33);
	show_addr(0xFFFFFA36);
	//show_addr(0xFFFFF428);
	//show_addr(0xFFFFF429);
	//show_addr(0xFFFFF42b);
	
	TurnOnLCD();	
	BYTE_TSF='n';
	

	SysClearScreen( (DWORD)(pGC), GPC_WHITE );
	BYTE_TSF='o';
	//PenCalibration2(&gc);	
	SysDrawLine( (DWORD)(pGC), GPC_RED, 0, 0, 159, 239, GPC_SOLID_LINE, GPC_REPLACE_STYLE );
	
	SysDrawLine( (DWORD)(pGC), GPC_RED, 50, 0, 159, 239, GPC_SOLID_LINE, GPC_REPLACE_STYLE );
	SysDrawLine( (DWORD)(pGC), GPC_RED, 100, 0, 159, 239, GPC_SOLID_LINE, GPC_REPLACE_STYLE );
	SysDrawLine( (DWORD)(pGC), GPC_RED, 140, 0, 159, 239, GPC_SOLID_LINE, GPC_REPLACE_STYLE );
	SysDrawLine( (DWORD)(pGC), GPC_RED, 10, 150, 159, 239, GPC_SOLID_LINE, GPC_REPLACE_STYLE );
	SysDrawLine( (DWORD)(pGC), GPC_RED, 10, 120, 159, 239, GPC_SOLID_LINE, GPC_REPLACE_STYLE );
	SysDrawLine( (DWORD)(pGC), GPC_RED, 10, 110, 159, 239, GPC_SOLID_LINE, GPC_REPLACE_STYLE );
	BYTE_TSF='p';
	SysClearScreen( (DWORD)(pGC), GPC_WHITE );

	for ( i = 0; i < 40; i++ )
	{
		DrawVert(pGC, GPC_BLACK, i, 0, 240, GPC_SOLID_LINE, GPC_REPLACE_STYLE );
		DrawVert(pGC, GPC_BLACK, 40 + i, 0, 240, GPC_DASH_LINE, GPC_REPLACE_STYLE );
		DrawVert(pGC, GPC_WHITE, 80 + i, 0, 240, GPC_DOT_LINE, GPC_REPLACE_STYLE );
		DrawVert(pGC, GPC_BLACK, 120 + i, 0, 240, GPC_DASHDOT_LINE, GPC_REPLACE_STYLE );
	}
	for ( i = 39; i > 0; i-- )
	{
		DrawVert(pGC, GPC_BLACK, i, 0, 240, GPC_SOLID_LINE, GPC_XOR_STYLE );
		DrawVert(pGC, GPC_WHITE, 40 + i, 0, 240, GPC_DASH_LINE, GPC_OR_STYLE );
		DrawVert(pGC, GPC_BLACK, 80 + i, 0, 240, GPC_DOT_LINE, GPC_AND_STYLE );
		DrawVert(pGC, GPC_BLACK, 120 + i, 0, 240, GPC_DASHDOT_LINE, GPC_NOT_STYLE );
	}

	ClearScreen( pGC, GPC_WHITE );

	SysDrawLine( (DWORD)(pGC), GPC_RED, 61, 125, 56, 123, GPC_SOLID_LINE, GPC_REPLACE_STYLE );
	SysDrawLine( (DWORD)(pGC), GPC_RED, 56, 123, 56, 124, GPC_SOLID_LINE, GPC_REPLACE_STYLE );
	SysDrawLine( (DWORD)(pGC), GPC_RED, 56, 124, 56, 123, GPC_SOLID_LINE, GPC_REPLACE_STYLE );
	SysDrawLine( (DWORD)(pGC), GPC_RED, 56, 123, 55, 123, GPC_SOLID_LINE, GPC_REPLACE_STYLE );

	BYTE_TSF='q';
	while (1)
	{
		msg.message = 0xfff;
		SysRecvMessage(&msg, 4000);
		switch(msg.message)
		{
			case SM_PENDOWN :
				BYTE_TSF='x';
				sx = ((POINT *)&msg.lparam)->x;
				sy = ((POINT *)&msg.lparam)->y;
				break;
				
			case SM_PENMOVE :
				BYTE_TSF='y';
				mx = ((POINT *)&msg.lparam)->x;
				my = ((POINT *)&msg.lparam)->y;
				//if ((sx < 160) && (sy <240) && (mx <160) && (my < 240))
				memcpy( &tempGC, pGC, sizeof( GC ) );
				if(!((sx==mx)&&(sy==my)))
					SysDrawLine( ( DWORD )pGC, GPC_BLACK, sx, sy, mx, my, GPC_SOLID_LINE, GPC_REPLACE_STYLE );
//					SysDrawDot( (DWORD)pGC, GPC_BLACK, mx, my, GPC_REPLACE_STYLE );
				if( pGC->vram == 0xffffffff )
					pGC->vram = NULL;
				
				sx = mx;
				sy = my;	
				
				break;
			
			case 0xfff:
				SysDrawLine( ( DWORD )pGC, GPC_BLACK, 0 , 0, 100, 200, GPC_SOLID_LINE, GPC_XOR_STYLE );
				BYTE_TSF='w';
				break;
			default:
				break;
		}	
		
	}
	

}

void PenCalibration2(GC *pGC)
{
	CHAR 	PenDown=0, quit=0, lefttop_pressed=0;
	U16 	x1=0;
	U16		y1=0;
	U16		x2=0;
	U16		y2=0;
	static 	UINT flgptn;
	BYTE	msgtype;	/* message type */
	
	kx = 0;
	ky = 0;
	bx = 0;
	by = 0;
		
	/* Create One GC */
	//pGC = (GC *)SysInitGC(PHY_LCD_W, PHY_LCD_H);
			
	/* draw two crosses: one is on left-top, the other is on right-down */
	SysSetBkColor(( DWORD )pGC, GPC_BLUE);
	SysSetColor(( DWORD )pGC, GPC_WHITE);
	SysClearScreen(( DWORD )pGC, GPC_WHITE);

	SysDrawText(( DWORD )pGC, GPC_BLACK, 10, 25, 100, 120, "Pen Calibration: Please press left-top cross first, and then right-bottom!", GPC_REPLACE_STYLE);
	
	/* (10,10) */
	SysDrawHorz(( DWORD )pGC, GPC_BLACK, 5, 10, 10, GPC_SOLID_LINE, GPC_REPLACE_STYLE);
	SysDrawVert(( DWORD )pGC, GPC_BLACK, 10, 5, 10, GPC_SOLID_LINE, GPC_REPLACE_STYLE);
	
	/* (150,230) */
	SysDrawHorz(( DWORD )pGC, GPC_BLACK, 145, 230, 10, GPC_SOLID_LINE, GPC_REPLACE_STYLE);
	SysDrawVert(( DWORD )pGC, GPC_BLACK, 150, 225, 10, GPC_SOLID_LINE, GPC_REPLACE_STYLE);
	
	while(!quit)
	{
		flgptn = 0;
		/* wait for Interrupt or Tasks' Message */
    	wai_flg(&flgptn, SYS_EVENT, 0xFF, TWF_ORW);
    	
    	if( flgptn & INTPEN_FLG )
    	{
			msgtype = PEN_BUF[PEN_BUF_readcount].flag;
			/* read pen message directly from interrupt buffer PEN_BUF */
			switch(msgtype)
			{
				case SM_PENDOWN:
					act_cyc(TOUCHTIMER,TCY_ON|TCY_INI);
					break;	
			
				case SM_PENMOVE:
					if(!PenDown)
					{
						PenDown = 1;
						if (!lefttop_pressed)
						{				
							y1 = PEN_BUF[PEN_BUF_readcount].y;
							x1 = PEN_BUF[PEN_BUF_readcount].x;
							
							SysClearRec(( DWORD )pGC, GPC_WHITE, 1, 1, 15, 15, GPC_REPLACE_STYLE);
													
							lefttop_pressed = 1;
						}else{
							y2 = PEN_BUF[PEN_BUF_readcount].y;
							x2 = PEN_BUF[PEN_BUF_readcount].x;		
														
							kx =  (150.0-10.0) / (x2 - x1);
							ky =  (230.0-10.0) / (y2 - y1);
							bx = (160.0 -(x1+x2) * kx) / 2 ;
							by = (240.0 -(y1+y2) * ky) / 2 ;
							
							SysClearRec(( DWORD )pGC, GPC_WHITE, 140, 220, 18, 18, GPC_REPLACE_STYLE);
													
							quit = 1;
						}
					}
					break;
					
				case SM_PENUP:
					PenDown = 0;
					PenEnable();
					break;
					
				default:
					break;
			}
			PEN_BUF_readcount = (PEN_BUF_readcount +1) % MAX_PENBUF;
		
			/*2001-11-23 10:50*/
			clr_flg(SYS_EVENT, 0x0000);
		}
		flgptn = 0;
	
		if (PEN_BUF_readcount != PEN_BUF_writecount)
			flgptn |= INTPEN_FLG;
		
		/* yes */
		if( flgptn > 0x1 )
			set_flg(SYS_EVENT, flgptn);
	}

	clr_flg(SYS_EVENT, 0x0000); 	/* clear SYSEVENT */

}


⌨️ 快捷键说明

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