In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

Difference between revisions of "Vpad.rpl"

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 22: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