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