Changes

785 bytes added ,  03:24, 21 March 2010
<source lang=cpp>

/*
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;
}
</source>
143

edits