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
(add in VPADShutdown())
Line 18: Line 18:
 
|int VPADRead(int padnum, VPADData *buffer, int num_datasets, 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.
 
|}
 
|}
  

Revision as of 04:42, 4 July 2016

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
VPADShutdown void VPADShutdown(void); A deprecated function that was supposed to shut down the 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
#define BUTTON_STICK_R     0x00020000
#define BUTTON_STICK_L     0x00040000
#define BUTTON_TV          0x00010000