Vpad.rpl: Difference between revisions

From WiiUBrew
Jump to navigation Jump to search
Keys: Convert button bitflags into C defines
VPAD Data: Convert VPAD data to struct form
Line 15: Line 15:
===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(), length seems to control the max amount of "datasets" to keep. A single dataset containing raw controller data is 0xAC bytes.
{| class="wikitable"
 
!Offset
<syntaxhighlight lang="C">
!Length
typedef struct
!Description
{
|-
    uint16_t x, y;              /* Touch coordinates */
|2
    uint16_t touched;            /* 1 = Touched, 0 = Not touched */
|2
    uint16_t validity;          /* 0 = All valid, 1 = X invalid, 2 = Y invalid, 3 = Both invalid? */
|Buttons, ABXY, Left, Right, Up, Down in that order (bits)
} VPADTPData;
|-
 
|3
typedef struct
|1
{
|Buttons, ZL, ZR, L, R, +, -, Power/Home, Sync in that order (bits)
    char unknown0[0x2 - 0x0];
|-
    uint16_t buttons;            /* Bitmask of button flags below */
|12
    char unknown4[0xc - 0x4];
|8
    Vec2D lstick, rstick;        /* Each contains 4-byte X and Y components */
|Left Joystick, vectors for X and Y
    char unknown1c[0x52 - 0x1c];
|-
    VPADTPData tpdata;          /* Normal touchscreen data */
|20
    VPADTPData tpdata1;          /* Modified touchscreen data 1 */
|8
    VPADTPData tpdata2;          /* Modified touchscreen data 2 */
|Right Joystick, vectors for X and Y
    char unknown6a[0xa0 - 0x6a];
|-
    uint8_t volume;
!colspan="3"|Touchscreen Input
    uint8_t battery;            /* 0 to 6 */
|-
    uint8_t unk_volume;          /* One less than volume */
|82
    char unknowna4[0xac - 0xa4];
|2
} VPADData;
|Touchscreen X
</syntaxhighlight>
|-
|84
|2
|Touchscreen Y
|-
|86
|2
|Flag for if touchscreen is currently being touched (1 = Yes, 0 = No)
|-
|88
|2
|Coordinate validation (0 = All Valid, 1 = Invalid X, 2 = Invalid Y, 3 = Both Invalid)
|-
|90
|2
|Modified Touchscreen X?
|-
|92
|2
|Modified Touchscreen Y?
|-
|94
|2
|Modified Flag for if touchscreen is currently being touched (1 = Yes, 0 = No)?
|-
|96
|2
|Modified Coordinate validation (0 = All Valid, 1 = Invalid X, 2 = Invalid Y, 3 = Both Invalid)?
|-
|98
|2
|Modified Touchscreen X?
|-
|100
|2
|Modified Touchscreen Y?
|-
|102
|2
|Modified Flag for if touchscreen is currently being touched (1 = Yes, 0 = No)?
|-
|104
|2
|Modified Coordinate validation (0 = All Valid, 1 = Invalid X, 2 = Invalid Y, 3 = Both Invalid)?
|-
!colspan="3"|Other Data
|-
|160
|1
|Something related to volume slider
|-
|161
|1
|Battery related. Charge level? out of 6
|-
|163
|1
|Something related to volume slider(one less than 0xA0)
|-
|164
|8
|Padding?
|}


== Defines ==
== Defines ==

Revision as of 21:10, 9 April 2015

This controls communication with the Gamepad, internally called VPAD by this library. It uses the VPADBASE library internally.

Functions

Name Prototype Description
VPADRead int VPADRead(int padnum, void *buffer, int length, int *err); Stores raw controller data in buffer for the specified Gamepad

Structures

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.

typedef struct
{
    uint16_t x, y;               /* Touch coordinates */
    uint16_t touched;            /* 1 = Touched, 0 = Not touched */
    uint16_t validity;           /* 0 = All valid, 1 = X invalid, 2 = Y invalid, 3 = Both invalid? */
} VPADTPData;

typedef struct
{
    char unknown0[0x2 - 0x0];
    uint16_t buttons;            /* Bitmask of button flags below */
    char unknown4[0xc - 0x4];
    Vec2D lstick, rstick;        /* Each contains 4-byte X and Y components */
    char unknown1c[0x52 - 0x1c];
    VPADTPData tpdata;           /* Normal touchscreen data */
    VPADTPData tpdata1;          /* Modified touchscreen data 1 */
    VPADTPData tpdata2;          /* Modified touchscreen data 2 */
    char unknown6a[0xa0 - 0x6a];
    uint8_t volume;
    uint8_t battery;             /* 0 to 6 */
    uint8_t unk_volume;          /* One less than volume */
    char unknowna4[0xac - 0xa4];
} VPADData;

Defines

Buttons

#define BUTTON_A        0x8000
#define BUTTON_B        0x4000
#define BUTTON_X        0x2000
#define BUTTON_Y        0x1000
#define BUTTON_LEFT     0x0800
#define BUTTON_RIGHT    0x0400
#define BUTTON_UP       0x0200
#define BUTTON_DOWN     0x0100
#define BUTTON_ZL       0x0080
#define BUTTON_ZR       0x0040
#define BUTTON_L        0x0020
#define BUTTON_R        0x0010
#define BUTTON_PLUS     0x0008
#define BUTTON_MINUS    0x0004
#define BUTTON_HOME     0x0002
#define BUTTON_SYNC     0x0001