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
m
Line 12: Line 12:
 
|-
 
|-
 
|VPADSetLcdMode
 
|VPADSetLcdMode
|int VPADSetLcdMode(int padnum, VPADDisplayMode *lcdmode);
+
|int VPADSetLcdMode(int padnum, VPADDisplayMode lcdmode);
 
|Sets LCD mode of gamepad based on ''lcdmode''
 
|Sets LCD mode of gamepad based on ''lcdmode''
 
|-
 
|-

Revision as of 14:45, 30 August 2015

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

Functions

Name Prototype 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 int VPADRead(int padnum, VPADData *buffer, int num_datasets, int *err); Stores raw controller data in buffer for the specified Gamepad

Structures/Enums

VPAD Display Mode

Can be gotten using VPADGetLcdMode().

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;

VPAD Data

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 below.

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
{
    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 */
    char unknown1c[0x52 - 0x1c]; /* Contains accelerometer and gyroscope data somewhere */
    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