PAD_Read

Syntax

#include <nitro/pad.h>

u16 PAD_Read( void );

Arguments

None.

Return Values

Current key information

In response to prohibited input, such as simultaneous presses of either (1) UP and DOWN or (2) LEFT and RIGHT on the +Control Pad, a filter is applied so that only UP will considered to have been pressed in the former case, and only LEFT will be considered to have been pressed in the latter case.

Description

Gets the information for pressed keys or buttons. The key/button information is the logical sum of the following values.

Value (Definition) State Value (Value)
PAD_BUTTON_A A Button is being pressed 0x0001
PAD_BUTTON_B B Button is being pressed. 0x0002
PAD_BUTTON_SELECT SELECT is being pressed. 0x0004
PAD_BUTTON_START START is being pressed. 0x0008
PAD_KEY_RIGHT +Control Pad Right key is being pressed. 0x0010
PAD_KEY_LEFT +Control Pad Left key is being pressed. 0x0020
PAD_KEY_UP +Control Pad Up key is being pressed. 0x0040
PAD_KEY_DOWN +Control Pad Down key is being pressed. 0x0080
PAD_BUTTON_R R Button is being pressed. 0x0100
PAD_BUTTON_L L Button is being pressed. 0x0200
PAD_BUTTON_X X Button is being pressed. 0x0400
PAD_BUTTON_Y Y Button is being pressed. 0x0800
PAD_BUTTON_DEBUG DEBUG Button is being pressed. 0x2000


The X and Y Buttons can be read from ARM9 because ARM7 checks a general purpose port and writes in a shared region. Therefore, if the ARM7 read module is not operating, the X and Y Buttons cannot be read.

PAD_BUTTON_MASK is defined as the logical sum of all buttons (PAD_BUTTON_...), and PAD_PLUS_KEY_MASK is defined as the logical sum of all keys (PAD_KEY_...). PAD_ALL_MASK is defined as the sum of all buttons and keys.

Only the sum of the X, Y, and DEBUG Buttons read by ARM7 will be defined as PAD_RCNTPORT_MASK. Sums of other buttons are defined as PAD_KEYPORT_MASK.

Bit 13 12 11 10 9 8 7 6 5 4 3 2 1 0
D
e
b
u
g
N
/
A
Y X L
R
D
o
w
n
U
p
L
e
f
t
R
i
g
h
t
S
t
a
r
t
S
e
l
e
c
t
B
A
Value
PAD_BUTTON_MASK 1 0 1 1 1 1 0 0 0 0 1 1 1 1 0x2F0F
PAD_PLUS_KEY_MASK 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0x00F0
PAD_ALL_MASK 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0x2FFF
PAD_RCNPORT_MASK 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0x2C00
PAD_KEYPORT_MASK 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0x03FF

For Example

u16 padData = PAD_Read();

if ( padData & PAD_BUTTON_A )
{
OS_Printf( "You're pushing the A Button\n" );
}

if ( padData & PAD_PLUS_KEY_MASK )
{
OS_Printf( "You're pushing one of the +Control Pad keys\n" );
}

The PAD_Read function reads the KEYINPUT IO register internally, aligns with the value from the RCNT register of the generic port that ARM7 acquired, and returns a value with the Key/Button mask PAD_ALL_MASK applied.

DEBUG Button

The DEBUG Button can be used freely by an application for development purposes. With IS-NITRO-DEBUGGER, the Power Button of the DS connected to the debugger serves as the DEBUG Button. (It will not work as the Power Button.)

The Power button of the TWL system connected to the debugger will also serve as the DEBUG button with IS-TWL-DEBUGGER. However, it will also function as an actual Power button, so its intended purpose is slightly different than that of IS-NITRO-DEBUGGER.

See Also

PAD_DetectFold

Revision History

2008/04/16 Added a description of the prohibited input filter.
2004/08/06 Removed PAD_SetIrq and PAD_ClearIrq from See Also.
2004/04/13 Added the DEBUG button.
2004/02/19 Added the X and Y Buttons.
2003/12/01 Initial version.


CONFIDENTIAL