KallistiOS  2.0.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
Data Structures | Macros | Typedefs | Functions
purupuru.h File Reference

Definitions for using the Puru Puru (Jump) Pack. More...

#include <sys/cdefs.h>
#include <arch/types.h>
#include <dc/maple.h>

Go to the source code of this file.

Data Structures

struct  purupuru_effect
 Effect generation structure. More...

Macros

#define PURUPURU_EFFECT2_UINTENSITY(x)   (x << 4)
 Upper-nibble of effect2 convenience macro.
#define PURUPURU_EFFECT2_LINTENSITY(x)   (x)
 Lower-nibble of effect2 convenience macro.
#define PURUPURU_EFFECT2_DECAY   (8 << 4)
 Give a decay effect to the rumble on some packs.
#define PURUPURU_EFFECT2_PULSE   (8)
 Give a pulse effect to the rumble.
#define PURUPURU_EFFECT1_INTENSITY(x)   (x << 4)
 Upper nibble of effect1 convenience macro.
#define PURUPURU_EFFECT1_PULSE   (8 << 4)
 Give a pulse effect to the rumble.
#define PURUPURU_EFFECT1_POWERSAVE   (15)
 Ignore this command.
#define PURUPURU_SPECIAL_MOTOR1   (1 << 4)
 Select motor #1.
#define PURUPURU_SPECIAL_MOTOR2   (1 << 7)
 Select motor #2.
#define PURUPURU_SPECIAL_PULSE   (1)
 Yet another pulse effect.

Typedefs

typedef struct purupuru_effect purupuru_effect_t
 Effect generation structure.

Functions

int purupuru_rumble (maple_device_t *dev, purupuru_effect_t *effect)
 Send an effect to a jump pack.
int purupuru_rumble_raw (maple_device_t *dev, uint32 effect)
 Send a raw effect to a jump pack.

Detailed Description

Definitions for using the Puru Puru (Jump) Pack.

This file contains the definitions needed to access maple jump pack devices. Puru Puru was Sega's internal name for the device, hence why its referred to in this way here.

This driver is largely based off of information provided by Kamjin on the DCEmulation forums. See http://dcemulation.org/phpBB/viewtopic.php?f=29&t=48462 if you're interested in the original documentation.

Also, its important to note that not all Jump Packs are created equal. Some of the stuff in here does not do what it seems like it should on many devices. The "decay" setting, for instance, does not seem to work on Sega Puru Purus, and actually makes most (if not all) effects do absolutely nothing. Basically, its all a big guess-and-test game to get things to work the way you might like. Don't be surprised if you manage to set up something that does absolutely nothing on the first try.

Author:
Lawrence Sebald

Macro Definition Documentation

#define PURUPURU_EFFECT1_INTENSITY (   x)    (x << 4)

Upper nibble of effect1 convenience macro.

This macro is for setting the upper nibble of the effect1 field of the purupuru_effect_t. This value works with the lower nibble of the effect2 field to increase the intensity of the rumble effect. Valid values are 0-7.

See also:
PURUPURU_EFFECT2_LINTENSITY
#define PURUPURU_EFFECT1_POWERSAVE   (15)

Ignore this command.

Most jump packs will ignore commands with this set in effect1, apparently.

#define PURUPURU_EFFECT1_PULSE   (8 << 4)

Give a pulse effect to the rumble.

This probably should be used with PURUPURU_EFFECT2_PULSE as well.

See also:
PURUPURU_EFFECT2_PULSE
#define PURUPURU_EFFECT2_DECAY   (8 << 4)

Give a decay effect to the rumble on some packs.

#define PURUPURU_EFFECT2_LINTENSITY (   x)    (x)

Lower-nibble of effect2 convenience macro.

This macro is for setting the lower nibble of the effect2 field of the purupuru_effect_t. This value works with the upper nibble of the effect1 field to increase the intensity of the rumble effect. Valid values are 0-7.

See also:
PURUPURU_EFFECT1_INTENSITY
#define PURUPURU_EFFECT2_PULSE   (8)

Give a pulse effect to the rumble.

This probably should be used with PURUPURU_EFFECT1_PULSE as well.

See also:
PURUPURU_EFFECT1_PULSE
#define PURUPURU_EFFECT2_UINTENSITY (   x)    (x << 4)

Upper-nibble of effect2 convenience macro.

This macro is for setting the upper nibble of the effect2 field of the purupuru_effect_t. This apparently lowers the rumble's intensity somewhat. Valid values are 0-7.

#define PURUPURU_SPECIAL_MOTOR1   (1 << 4)

Select motor #1.

Most jump packs only have one motor, but on things that do have more than one motor (like PS1->Dreamcast controller adapters that support rumble), this selects the first motor.

#define PURUPURU_SPECIAL_MOTOR2   (1 << 7)

Select motor #2.

Most jump packs only have one motor, but on things that do have more than one motor (like PS1->Dreamcast controller adapters that support rumble), this selects the second motor.

#define PURUPURU_SPECIAL_PULSE   (1)

Yet another pulse effect.

This supposedly creates a sharp pulse effect.


Typedef Documentation

Effect generation structure.

This structure is used for convenience to send an effect to the jump pack. This, along with the various macros in this file can give a slightly better idea of the effect being generated than using the raw values.


Function Documentation

int purupuru_rumble ( maple_device_t dev,
purupuru_effect_t effect 
)

Send an effect to a jump pack.

This function sends an effect created with the purupuru_effect_t structure to a jump pack to be executed.

Parameters:
devThe device to send the command to.
effectThe effect to send.
Return values:
MAPLE_EOKOn success.
MAPLE_EAGAINIf the command couldn't be sent. Try again later.
MAPLE_ETIMEOUTIf the command timed out while blocking.
int purupuru_rumble_raw ( maple_device_t dev,
uint32  effect 
)

Send a raw effect to a jump pack.

This function sends an effect to a jump pack to be executed. This is for if you (for some reason) don't want to use purupuru_effect_t to build the effect up.

Parameters:
devThe device to send the command to.
effectThe effect to send.
Return values:
MAPLE_EOKOn success.
MAPLE_EAGAINIf the command couldn't be sent. Try again later.
MAPLE_ETIMEOUTIf the command timed out while blocking.