Line 6:
Line 6:
!Prototype
!Prototype
!Description
!Description
+
|-
+
|VPADGetLcdMode
+
|int VPADGetLcdMode(int padnum, VPADDisplayMode *lcdmode);
+
|Gets LCD mode of gamepad and stores it in ''lcdmode''
+
|-
+
|VPADSetLcdMode
+
|int VPADSetLcdMode(int padnum, VPADDisplayMode lcdmode);
+
|Sets LCD mode of gamepad based on ''lcdmode''
|-
|-
|VPADRead
|VPADRead
−
|int VPADRead(int padnum, void *buffer, int length, int *err);
+
|int VPADRead(int padnum, VPADData *buffer, int num_datasets, int *err);
|Stores raw controller data in ''buffer'' for the specified Gamepad
|Stores raw controller data in ''buffer'' for the specified Gamepad
+
|-
+
|VPADShutdown
+
|void VPADShutdown(void);
+
|A deprecated function that was supposed to shut down the Gamepad.
|}
|}
−
==Structures==
+
==Structures/Enums==
+
===VPAD Display Mode===
+
Can be gotten using VPADGetLcdMode().
+
+
<syntaxhighlight lang="C">
+
typedef enum {
+
DISPLAY_MODE_STANDBY = 0, /* This is probably the mode you can set as a user in HOME - Turn display off */
+
DISPLAY_MODE_OFF = 1, /* This turns off the display completely, the gamepad can be used as a pure input controller */
+
DISPLAY_MODE_DEFAULT = 0xFF /* Default mode */
+
} VPADDisplayMode;
+
</syntaxhighlight>
+
===VPAD Data===
===VPAD Data===
−
Can be gotten using VPADRead(), length seems to control the max amount of "datasets" to keep. A single dataset containing raw controller data is 0xAC bytes.
+
Can be gotten using VPADRead(), num_datasets seems to control the max amount of "datasets" to keep. A single dataset containing raw controller data is 0xAC bytes. The first three words of a datset are bitmasks of the flags listed [[vpad.rpl#Buttons|below]].
<syntaxhighlight lang="C">
<syntaxhighlight lang="C">
+
typedef struct
+
{
+
float x, y;
+
} Vec2D;
+
+
typedef struct
+
{
+
float x, y, z;
+
} Vec3D;
+
typedef struct
typedef struct
{
{
Line 26:
Line 59:
typedef struct
typedef struct
{
{
−
char unknown0[0x2 - 0x0];
+
Vec3D X,Y,Z;
−
uint16_t buttons; /* Bitmask of button flags below */
+
} VPADOrientation;
−
char unknown4[0xc - 0x4];
+
+
typedef struct
+
{
+
uint32_t btn_hold; /* Held buttons */
+
uint32_t btn_trigger; /* Buttons that are pressed at that instant */
+
uint32_t btn_release; /* Released buttons */
Vec2D lstick, rstick; /* Each contains 4-byte X and Y components */
Vec2D lstick, rstick; /* Each contains 4-byte X and Y components */
−
char unknown1c[0x52 - 0x1c];
+
Vec3D acc; /* Accelerometer value */
+
f32 accValue; /* Accelerometer magnitude */
+
f32 accSpeed; /* Accelerometer variation */
+
Vec2D accVertical; /* Vertical direction of DRC */
+
Vec3D gyro; /* Gyro data */
+
Vec3D angle; /* Angle data */
+
s8 vpadErr; /* Error status */
VPADTPData tpdata; /* Normal touchscreen data */
VPADTPData tpdata; /* Normal touchscreen data */
VPADTPData tpdata1; /* Modified touchscreen data 1 */
VPADTPData tpdata1; /* Modified touchscreen data 1 */
VPADTPData tpdata2; /* Modified touchscreen data 2 */
VPADTPData tpdata2; /* Modified touchscreen data 2 */
−
char unknown6a[0xa0 - 0x6a];
+
VPADOrientation dir; /* Orientation in three-dimensional space */
−
uint8_t volume;
+
BOOL headphoneStatus; /* Headphone status (TRUE : headphones are inserted) */
−
uint8_t battery; /* 0 to 6 */
+
Vec3D magnet; /* Magnetometer value */
−
uint8_t unk_volume; /* One less than volume */
+
u8 volume; /* Slide Volume value (0 - 255) */
−
char unknowna4[0xac - 0xa4];
+
u8 batteryLevel; /* Battery level ( 0 - 6 ) */
+
u8 micStatus; /* Mic status */
+
u8 volumeCalibrated; /* One less than volume */
+
u8 __paddings__[7];
} VPADData;
} VPADData;
</syntaxhighlight>
</syntaxhighlight>
Line 61:
Line 108:
#define BUTTON_HOME 0x0002
#define BUTTON_HOME 0x0002
#define BUTTON_SYNC 0x0001
#define BUTTON_SYNC 0x0001
+
#define BUTTON_STICK_R 0x00020000
+
#define BUTTON_STICK_L 0x00040000
+
#define BUTTON_TV 0x00010000
+
</syntaxhighlight>
</syntaxhighlight>