📄 tp.c
字号:
/*""FILE COMMENT""*************************************************************
* System Name : RENESAS T-Engine, micro T-Engine series
* File Name : tp.c
* Version : 1.00.00
* Contents : Touch Panel
* Model : T-Engine/SH7727
* CPU : SH7727
* Compiler : GNU
* OS : T-Kernel
* note : The Software is being delivered to you "AS IS"
* : and Renesas,whether explicitly or implicitly makes
* : no warranty as to its Use or performance.
* : RENESAS AND ITS SUPPLIER DO NOT AND CANNOT WARRANT
* : THE PERFORMANCE OR RESULTS YOU MAY OBTAIN BY USING
* : THE SOFTWARE. AS TO ANY MATTER INCLUDING WITHOUT
* : LIMITATION NONINFRINGEMENT OF THIRD PARTY RIGHTS,
* : MERCHANTABILITY, INTEGRATION, SATISFACTORY QUALITY,
* : OR FITNESS FOR ANY PARTICULAR PURPOSE.
*
* Copyright (c) 2006 RENESAS TECHNOLOGY CORP. All Rights Reserved.
* AND RENESAS SOLUTIONS CORP. All Rights Reserved.
* history : 2006.07.28 ver1.00.00
*""FILE COMMENT END""*********************************************************/
#include <machine.h>
#include <tk/tkernel.h>
#include "tp.h"
#include "sample_main.h"
#include <sys/svc/h8io_svc.h>
#include <device/screen.h>
#include <sys/svc/dp_svc.h>
/* MessageBuffer ID */
LOCAL ID mbfid;
/* interrupt enable/disable flag */
BOOL int_flg;
ID tp_init(void)
{
T_CMBF cmbf;
writeREG(TPLCR, 1, TP_CR_STR | TP_CR_ONI | TP_CR_OFFI);
cmbf.exinf = NULL;
cmbf.mbfatr = TA_TFIFO;
cmbf.bufsz = PD_BUFSZ;
cmbf.maxmsz = PD_MAXMSZ;
mbfid = tk_cre_mbf (&cmbf);
tp_ena_int();
writeREG(TPLSCR,1,TP_20MS);
return mbfid;
}
ER tp_calibration(void)
{
UH onoff,i;
UH dxa = 230,dya = 310;
UH dxb = 10,dyb = 10;
UH txa,tya;
UH txb,tyb;
float dx,dy,x,y;
POS pos;
ER ercd;
LCD_RECT rect;
writeREG(XAPDR, 2, 230); /* A(X,Y)=(230,310) */
writeREG(YAPDR, 2, 310);
writeREG(XBPDR, 2, 10); /* B(X,Y)=(10,10) */
writeREG(YBPDR, 2, 10);
lcd_disp_clear(0xffff); /* WHITE */
rect.Left_top.x = 230;
rect.Left_top.y = 300;
rect.Right_bottom.x = 231;
rect.Right_bottom.y = 319;
rect.Color = 0x0000; /* BLACK */
lcd_rect_write( &rect );
rect.Left_top.x = 220;
rect.Left_top.y = 310;
rect.Right_bottom.x = 239;
rect.Right_bottom.y = 311;
rect.Color = 0x0000; /* BLACK */
lcd_rect_write( &rect );
for(i=0;i<10;i++){ /* position A */
ercd = tp_tch_pen(&onoff, &pos, TMO_FEVR);
if(ercd==E_OK){
if(onoff == TPON){
txa = readREG(XPAR ,2);
tya = readREG(YPAR ,2);
writeREG(XAPAR,2,txa);
writeREG(YAPAR,2,tya);
break;
}
}
}
if(i >= 10){
return E_PAR;
}
lcd_disp_clear(0xffff); /* WHITE */
rect.Left_top.x = 10;
rect.Left_top.y = 0;
rect.Right_bottom.x = 11;
rect.Right_bottom.y = 20;
rect.Color = 0x0000; /* BLACK */
lcd_rect_write( &rect );
rect.Left_top.x = 0;
rect.Left_top.y = 10;
rect.Right_bottom.x = 20;
rect.Right_bottom.y = 11;
rect.Color = 0x0000; /* BLACK */
lcd_rect_write( &rect );
for(i=0;i<10;i++){ /* position B */
ercd = tp_tch_pen(&onoff, &pos, TMO_FEVR);
if(ercd==E_OK){
if(onoff == TPON){
txb = readREG(XPAR ,2);
tyb = readREG(YPAR ,2);
writeREG(XBPAR,2,txb);
writeREG(YBPAR,2,tyb);
break;
}
}
}
if(i >= 10){
return E_PAR;
}
lcd_disp_clear(0xffff); /* WHITE */
if(!(txa<txb && dxa>dxb)) {
return E_PAR;
}
if(!(tya<tyb && dya>dyb)) {
return E_PAR;
}
dx = (float)(dxa-dxb)/(float)(txb-txa);
dy = (float)(dya-dyb)/(float)(tyb-tya);
x = (float)(dx * 1000.0)+0.5;
y = (float)(dy * 1000.0)+0.5;
writeREG(DXDR, 2, (W)x);
writeREG(DYDR, 2, (W)y);
return E_OK;
}
ER tp_tch_pen(UH *onoff,POS *pos,TMO tmout)
{
ER ercd;
PdEvt pdevt;
ercd = tk_rcv_mbf(mbfid, &pdevt, tmout);
*onoff = pdevt.stat;
*pos = pdevt.pos;
if(ercd>0){
return E_OK;
}
else{
return ercd;
}
}
void tp_ena_int(void)
{
UINT imask;
DI(imask);
int_flg = TRUE;
EI(imask);
}
void tp_dis_int(void)
{
UINT imask;
DI(imask);
int_flg = FALSE;
EI(imask);
}
ER tp_set_cyctime(UB time)
{
INT i,cnt = 0;
UB timemsk = 0x01;
if(time == 0) return E_PAR;
for(i=0;i<8;i++){
if(time & timemsk){
cnt++;
if(cnt>1){
return E_PAR;
}
}
timemsk = timemsk << 1;
}
writeREG(TPLSCR, 1, time); /* set sampling interval */
return E_OK;
}
void tp_inthdr(UINT dintno)
{
UB reg_tpsr;
PdEvt evt;
reg_tpsr = readREG(TPLSR, 1);
if(reg_tpsr & 0x04){ /* OFF */
evt.stat = TPOFF;
writeREG(TPLSR, 1, reg_tpsr & ~TP_sr_OFFIF);
}
else { /* ON */
evt.stat = TPON;
writeREG(TPLSR, 1, reg_tpsr & ~TP_sr_ONIF);
}
if(int_flg){
evt.h.evttyp = TDE_PDBUT;
evt.pos.x = readREG(XPDR, 2);
evt.pos.y = readREG(YPDR, 2);
tk_snd_mbf(mbfid, &evt, PD_MAXMSZ,TMO_POL);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -