-
Notifications
You must be signed in to change notification settings - Fork 0
3.4. What about the touchscreen?
Let's use the libnds examples "hello_world" code in the following discussion. I have rewritten the main block in order to highlight the most important parts related to touch screen:
touchPosition touchXY;
consoleDemoInit();
while(1)
{
swiWaitForVBlank();
scanKeys();
touchRead(&touchXY);
goto_xy(0,16);
iprintf("Touch x = %04X, %04X\n", touchXY.rawx, touchXY.px);
iprintf("Touch y = %04X, %04X\n", touchXY.rawy, touchXY.py);
}
touchPosition
is a struct that stores touch data. The points of interest are the members px
and py
, which represent the touch point coordinates. There are also some rawx
/rawy
values. The relation between the raw and point coordinates seems to be the following:
touchXY.rawx == (touchXY.px - (touchXY.px==0 || touchXY.px==255)) << 4;
touchXY.rawy == (touchXY.py - (touchXY.py==0 || touchXY.py==191)) << 4;
touchPosition
also contains some "raw cross panel resistance" values probably related to the touch pressure (needs to be tested).
As explained in 3.3. Handling key input, the touch also counts as a key, so you must call scanKeys()
before attempting to read touch data.
This is where fetching touch data actually happens. By passing a touchPosition
reference to touchRead
, its properties are updated with the latest values of touch positions. Now we can freely use touchXY.px
and touchXY.py
in any way we want.
libnds Practical Wiki - This is an independent work of learning and exposing the facts about NDS programming. I am not affiliated in any way with Nintendo, devkitPro organization or libnds developers.