Sourcecode/tp.c

From DSiBrew

Jump to: navigation, search
/*
    Read touchscreen positions.
 
    Returns 1 if touched, and the average position in xpos and ypos. Otherwise, if not touched, returns 0.
 */
 
u32 TouchRead(u32* xpos, u32* ypos)
{
	int i;
	u8 buf[20];
	u16 x[5];
	u16 y[5];
	u32 xavg;
	u32 yavg;
	u8 state;
 
 
	state = CDC_ReadRegisterEx(3,9);
	if ( (state & 0xC0) == 0x40 )
		return 0;
 
	state = CDC_ReadRegisterEx(3, 14);
	if (state & 2)
		return 0;
 
 
	CDC_ReadRegistersEx(252, 1, buf, 20);
 
	xavg = 0;
	yavg = 0;
 
	for(i=0; i<5; i++)
	{
		x[i] = buf[i*2+1] | (buf[i*2+0]<<8);
		y[i] = buf[10+i*2+1] | (buf[10+i*2+0]<<8);
 
		if (x[i] & 0xF000)
			return 0;
 
		if (y[i] & 0xF000)
			return 0;
 
		xavg += x[i];
		yavg += y[i];
	}
 
	xavg /= 5;
	yavg /= 5;
 
	*xpos = xavg;
	*ypos = yavg;
 
	return 1;
}
Personal tools