2008-12-08 04:36:27 +00:00
|
|
|
/*
|
|
|
|
* wiiuse
|
|
|
|
*
|
|
|
|
* Written By:
|
|
|
|
* Michael Laforest < para >
|
|
|
|
* Email: < thepara (--AT--) g m a i l [--DOT--] com >
|
|
|
|
*
|
|
|
|
* Copyright 2006-2007
|
|
|
|
*
|
|
|
|
* This file is part of wiiuse.
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
* $Header$
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @file
|
|
|
|
*
|
|
|
|
* @brief API header file.
|
|
|
|
*
|
|
|
|
* If this file is included from inside the wiiuse source
|
|
|
|
* and not from a third party program, then wiimote_internal.h
|
|
|
|
* is also included which extends this file.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef WIIUSE_H_INCLUDED
|
|
|
|
#define WIIUSE_H_INCLUDED
|
2009-11-19 22:58:36 +00:00
|
|
|
|
|
|
|
//#define WITH_WIIUSE_DEBUG
|
|
|
|
|
2008-12-08 04:36:27 +00:00
|
|
|
#ifdef _WIN32
|
|
|
|
#include <windows.h>
|
2009-02-16 21:12:00 +00:00
|
|
|
#elif defined(__APPLE__)
|
2010-06-09 19:36:08 +00:00
|
|
|
#include <CoreFoundation/CoreFoundation.h>
|
|
|
|
#include <IOBluetooth/IOBluetoothUserLib.h>
|
2009-02-16 21:12:00 +00:00
|
|
|
#include <string.h>
|
2010-06-09 19:36:08 +00:00
|
|
|
#elif defined(__linux__)
|
2008-12-08 04:36:27 +00:00
|
|
|
#include <bluetooth/bluetooth.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef WIIUSE_INTERNAL_H_INCLUDED
|
|
|
|
#define WCONST
|
|
|
|
#else
|
|
|
|
#define WCONST const
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* led bit masks */
|
|
|
|
#define WIIMOTE_LED_NONE 0x00
|
|
|
|
#define WIIMOTE_LED_1 0x10
|
|
|
|
#define WIIMOTE_LED_2 0x20
|
|
|
|
#define WIIMOTE_LED_3 0x40
|
|
|
|
#define WIIMOTE_LED_4 0x80
|
|
|
|
|
|
|
|
|
|
|
|
/* wiimote option flags */
|
|
|
|
#define WIIUSE_SMOOTHING 0x01
|
|
|
|
#define WIIUSE_CONTINUOUS 0x02
|
|
|
|
#define WIIUSE_ORIENT_THRESH 0x04
|
|
|
|
#define WIIUSE_INIT_FLAGS (WIIUSE_SMOOTHING | WIIUSE_ORIENT_THRESH)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-11-05 16:46:30 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Return the IR sensitivity level.
|
|
|
|
* @param wm Pointer to a wiimote_t structure.
|
|
|
|
* @param lvl [out] Pointer to an int that will hold the level setting.
|
|
|
|
* If no level is set 'lvl' will be set to 0.
|
|
|
|
*/
|
|
|
|
#define WIIUSE_GET_IR_SENSITIVITY(dev, lvl) \
|
|
|
|
do { \
|
|
|
|
if ((wm->state & 0x0200) == 0x0200) *lvl = 1; \
|
|
|
|
else if ((wm->state & 0x0400) == 0x0400) *lvl = 2; \
|
|
|
|
else if ((wm->state & 0x0800) == 0x0800) *lvl = 3; \
|
|
|
|
else if ((wm->state & 0x1000) == 0x1000) *lvl = 4; \
|
|
|
|
else if ((wm->state & 0x2000) == 0x2000) *lvl = 5; \
|
|
|
|
else *lvl = 0; \
|
|
|
|
} while (0)
|
2008-12-08 04:36:27 +00:00
|
|
|
|
External/wiiuse clean up, part 2.
- More removal of unnecessary code
- Windows: Modification of Wiiuse_Find under windows,
instead of always deleting and recreating the whole wiimote_t struct, we do maintain the old one,
adding/removing new wiimotes to/from it
- some wiimote bugfixes, see below for details
Windows related stuff:
Fixed most of the disconnection issues (single and mulitple real wiimotes, both wiimote plugins) (I haven't had a disconnect msg in hours anymore(ms stack)).
Rumble bug should be fixed now(both plugins,pls verify).
Fixed some pair up issues( sometimes you had to press the pair up button up to 3 times, till it paired up your wiimote).
More dongles might be now supported via ms stack, pls try and report back!
Fixed a problem where multiple wiimotes would swap slots on pair-up/addition of a real wiimote (2-4 real wiimotes) (both plugins, but not integrated into new plugin).
Improved ingame auto-pairup for real wiimotes(thx to the new wiiuse_find routine).
Fixed a bug on setting wiimote timeouts, which means changing the timeout was just a dummy earlier.
Most of the stuff concerns stuff in the old wiimote plugin, dont worry, in the end it's important for both plugins. It will get ported to the new plugin sooner or later.:')
Some minor stuff.
This might break osx/linux build and maybe the new plugin realwiimote-wise only. Thx to glennrics to pointing me to some breakings on linux, I didn't fix them all.
PS I hope i haven't forgotten anything, enjoy.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5940 8ced0084-cf51-0410-be5f-012b33b47a6e
2010-07-22 04:31:36 +00:00
|
|
|
|
2008-12-08 04:36:27 +00:00
|
|
|
|
|
|
|
#define WIIUSE_IS_LED_SET(wm, num) ((wm->leds & WIIMOTE_LED_##num) == WIIMOTE_LED_##num)
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Largest known payload is 21 bytes.
|
|
|
|
* Add 2 for the prefix and round up to a power of 2.
|
|
|
|
*/
|
|
|
|
#define MAX_PAYLOAD 32
|
|
|
|
|
|
|
|
/*
|
|
|
|
* This is left over from an old hack, but it may actually
|
|
|
|
* be a useful feature to keep so it wasn't removed.
|
|
|
|
*/
|
External/wiiuse clean up, part 2.
- More removal of unnecessary code
- Windows: Modification of Wiiuse_Find under windows,
instead of always deleting and recreating the whole wiimote_t struct, we do maintain the old one,
adding/removing new wiimotes to/from it
- some wiimote bugfixes, see below for details
Windows related stuff:
Fixed most of the disconnection issues (single and mulitple real wiimotes, both wiimote plugins) (I haven't had a disconnect msg in hours anymore(ms stack)).
Rumble bug should be fixed now(both plugins,pls verify).
Fixed some pair up issues( sometimes you had to press the pair up button up to 3 times, till it paired up your wiimote).
More dongles might be now supported via ms stack, pls try and report back!
Fixed a problem where multiple wiimotes would swap slots on pair-up/addition of a real wiimote (2-4 real wiimotes) (both plugins, but not integrated into new plugin).
Improved ingame auto-pairup for real wiimotes(thx to the new wiiuse_find routine).
Fixed a bug on setting wiimote timeouts, which means changing the timeout was just a dummy earlier.
Most of the stuff concerns stuff in the old wiimote plugin, dont worry, in the end it's important for both plugins. It will get ported to the new plugin sooner or later.:')
Some minor stuff.
This might break osx/linux build and maybe the new plugin realwiimote-wise only. Thx to glennrics to pointing me to some breakings on linux, I didn't fix them all.
PS I hope i haven't forgotten anything, enjoy.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5940 8ced0084-cf51-0410-be5f-012b33b47a6e
2010-07-22 04:31:36 +00:00
|
|
|
#define WIIMOTE_DEFAULT_TIMEOUT 30
|
2008-12-08 04:36:27 +00:00
|
|
|
|
|
|
|
typedef unsigned char byte;
|
|
|
|
typedef char sbyte;
|
|
|
|
|
|
|
|
struct wiimote_t;
|
|
|
|
struct vec3b_t;
|
|
|
|
struct orient_t;
|
|
|
|
struct gforce_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Callback that handles a read event.
|
|
|
|
*
|
|
|
|
* @param wm Pointer to a wiimote_t structure.
|
|
|
|
* @param data Pointer to the filled data block.
|
|
|
|
* @param len Length in bytes of the data block.
|
|
|
|
*
|
|
|
|
* @see wiiuse_init()
|
|
|
|
*
|
|
|
|
* A registered function of this type is called automatically by the wiiuse
|
|
|
|
* library when the wiimote has returned the full data requested by a previous
|
|
|
|
* call to wiiuse_read_data().
|
|
|
|
*/
|
|
|
|
typedef void (*wiiuse_read_cb)(struct wiimote_t* wm, byte* data, unsigned short len);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct read_req_t
|
|
|
|
* @brief Data read request structure.
|
|
|
|
*/
|
|
|
|
struct read_req_t {
|
|
|
|
wiiuse_read_cb cb; /**< read data callback */
|
|
|
|
byte* buf; /**< buffer where read data is written */
|
|
|
|
unsigned int addr; /**< the offset that the read started at */
|
|
|
|
unsigned short size; /**< the length of the data read */
|
2008-11-05 16:46:30 +00:00
|
|
|
unsigned short wait; /**< num bytes still needed to finish read */
|
2008-12-08 04:36:27 +00:00
|
|
|
byte dirty; /**< set to 1 if not using callback and needs to be cleaned up */
|
|
|
|
|
|
|
|
struct read_req_t* next; /**< next read request in the queue */
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct vec2b_t
|
|
|
|
* @brief Unsigned x,y byte vector.
|
|
|
|
*/
|
|
|
|
typedef struct vec2b_t {
|
|
|
|
byte x, y;
|
|
|
|
} vec2b_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct vec3b_t
|
|
|
|
* @brief Unsigned x,y,z byte vector.
|
|
|
|
*/
|
|
|
|
typedef struct vec3b_t {
|
|
|
|
byte x, y, z;
|
|
|
|
} vec3b_t;
|
|
|
|
|
MAJOR and long ago overdue wiiuse and real wiimote sourcecode cleanup. Removed "recording" in old wiimote plugin and other not necessary functions(EEPROM reading, we 'll just do a reconnect instead to use default accel calibration data etc). Recording is not needed anymore(playback of recorded moves should be still working). Everything the recording feature offered, the new wiimote plugin does as well and even more. The cleanup will ease the port of the real wiimote feature into new wiimote plugin, which is still only offering emulated wiimote support. Billiard said he's now on it.:)
Wiimotes are now slighty more responsive and multiple wiimotes should harmonize now slighty better. This clean up was requested/inevitable and should have be done way more earlier. This "might" break osx/linux builds, so please test. If your aware of any "real wiimote" issues please post it in the comments as well(dont forget to state your OS).
Known wiimote issues:
1.) Possible wiimote disconnect on pressing the home button
2.) 1-2 Possible wiimote disconnects directly after starting a game
3.) Rumble causes lag. I don't think this is a wiimote plugin issue itself, I'm not sure tho. It would be interesting to know whether the lag still happens on emulated wiimotes as well, when the game tries to rumble.
4.) Connecting(pairing up and refreshing) a 2nd/3rd/4th real wiimote while having a game running/paused, might swap player slots and cause disconnects at that moment.
If u have more issues, feel free to post them, to have them all here collected once more to get a brief overview.
Apart from that, increase the wiimote read timeout @settings(20-200). If your expecting frequent disconnects, restart dolphin, and don't open the wiimote gui before playing instead directly start games.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5788 8ced0084-cf51-0410-be5f-012b33b47a6e
2010-06-26 02:08:30 +00:00
|
|
|
/**
|
|
|
|
* @struct vec3f_t
|
|
|
|
* @brief unsigned orientation short struct.
|
|
|
|
*/
|
|
|
|
typedef struct vec3s_t {
|
|
|
|
unsigned pitch, roll, yaw;
|
|
|
|
} vec3s_t;
|
2008-12-08 04:36:27 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct vec3f_t
|
|
|
|
* @brief Signed x,y,z float struct.
|
|
|
|
*/
|
|
|
|
typedef struct vec3f_t {
|
|
|
|
float x, y, z;
|
|
|
|
} vec3f_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct orient_t
|
|
|
|
* @brief Orientation struct.
|
|
|
|
*
|
|
|
|
* Yaw, pitch, and roll range from -180 to 180 degrees.
|
|
|
|
*/
|
|
|
|
typedef struct orient_t {
|
|
|
|
float roll; /**< roll, this may be smoothed if enabled */
|
|
|
|
float pitch; /**< pitch, this may be smoothed if enabled */
|
|
|
|
float yaw;
|
|
|
|
|
|
|
|
float a_roll; /**< absolute roll, unsmoothed */
|
|
|
|
float a_pitch; /**< absolute pitch, unsmoothed */
|
|
|
|
} orient_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct gforce_t
|
|
|
|
* @brief Gravity force struct.
|
|
|
|
*/
|
|
|
|
typedef struct gforce_t {
|
|
|
|
float x, y, z;
|
|
|
|
} gforce_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct accel_t
|
|
|
|
* @brief Accelerometer struct. For any device with an accelerometer.
|
|
|
|
*/
|
|
|
|
typedef struct accel_t {
|
|
|
|
struct vec3b_t cal_zero; /**< zero calibration */
|
|
|
|
struct vec3b_t cal_g; /**< 1g difference around 0cal */
|
|
|
|
|
|
|
|
float st_roll; /**< last smoothed roll value */
|
|
|
|
float st_pitch; /**< last smoothed roll pitch */
|
|
|
|
float st_alpha; /**< alpha value for smoothing [0-1] */
|
|
|
|
} accel_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct ir_dot_t
|
|
|
|
* @brief A single IR source.
|
|
|
|
*/
|
|
|
|
typedef struct ir_dot_t {
|
|
|
|
byte visible; /**< if the IR source is visible */
|
|
|
|
|
|
|
|
unsigned int x; /**< interpolated X coordinate */
|
|
|
|
unsigned int y; /**< interpolated Y coordinate */
|
|
|
|
|
|
|
|
short rx; /**< raw X coordinate (0-1023) */
|
|
|
|
short ry; /**< raw Y coordinate (0-767) */
|
|
|
|
|
|
|
|
byte order; /**< increasing order by x-axis value */
|
|
|
|
|
|
|
|
byte size; /**< size of the IR dot (0-15) */
|
|
|
|
} ir_dot_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @enum aspect_t
|
|
|
|
* @brief Screen aspect ratio.
|
|
|
|
*/
|
|
|
|
typedef enum aspect_t {
|
|
|
|
WIIUSE_ASPECT_4_3,
|
|
|
|
WIIUSE_ASPECT_16_9
|
|
|
|
} aspect_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct joystick_t
|
|
|
|
* @brief Joystick calibration structure.
|
|
|
|
*
|
|
|
|
* The angle \a ang is relative to the positive y-axis into quadrant I
|
|
|
|
* and ranges from 0 to 360 degrees. So if the joystick is held straight
|
|
|
|
* upwards then angle is 0 degrees. If it is held to the right it is 90,
|
|
|
|
* down is 180, and left is 270.
|
|
|
|
*
|
|
|
|
* The magnitude \a mag is the distance from the center to where the
|
|
|
|
* joystick is being held. The magnitude ranges from 0 to 1.
|
|
|
|
* If the joystick is only slightly tilted from the center the magnitude
|
|
|
|
* will be low, but if it is closer to the outter edge the value will
|
|
|
|
* be higher.
|
|
|
|
*/
|
|
|
|
typedef struct joystick_t {
|
|
|
|
struct vec2b_t max; /**< maximum joystick values */
|
|
|
|
struct vec2b_t min; /**< minimum joystick values */
|
|
|
|
struct vec2b_t center; /**< center joystick values */
|
2009-09-20 13:31:32 +00:00
|
|
|
struct vec2b_t pos; /**< raw position values */
|
2008-12-08 04:36:27 +00:00
|
|
|
|
|
|
|
float ang; /**< angle the joystick is being held */
|
|
|
|
float mag; /**< magnitude of the joystick (range 0-1) */
|
|
|
|
} joystick_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct nunchuk_t
|
|
|
|
* @brief Nunchuk expansion device.
|
|
|
|
*/
|
|
|
|
typedef struct nunchuk_t {
|
|
|
|
struct accel_t accel_calib; /**< nunchuk accelerometer calibration */
|
|
|
|
struct joystick_t js; /**< joystick calibration */
|
|
|
|
|
|
|
|
int* flags; /**< options flag (points to wiimote_t.flags) */
|
|
|
|
|
|
|
|
byte btns; /**< what buttons have just been pressed */
|
|
|
|
byte btns_held; /**< what buttons are being held down */
|
|
|
|
byte btns_released; /**< what buttons were just released this */
|
2008-11-05 16:46:30 +00:00
|
|
|
|
|
|
|
float orient_threshold; /**< threshold for orient to generate an event */
|
|
|
|
int accel_threshold; /**< threshold for accel to generate an event */
|
2008-12-08 04:36:27 +00:00
|
|
|
|
|
|
|
struct vec3b_t accel; /**< current raw acceleration data */
|
|
|
|
struct orient_t orient; /**< current orientation on each axis */
|
|
|
|
struct gforce_t gforce; /**< current gravity forces on each axis */
|
|
|
|
} nunchuk_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct classic_ctrl_t
|
|
|
|
* @brief Classic controller expansion device.
|
|
|
|
*/
|
|
|
|
typedef struct classic_ctrl_t {
|
|
|
|
short btns; /**< what buttons have just been pressed */
|
|
|
|
short btns_held; /**< what buttons are being held down */
|
|
|
|
short btns_released; /**< what buttons were just released this */
|
|
|
|
|
2009-09-26 04:52:02 +00:00
|
|
|
byte rs_raw;
|
|
|
|
byte ls_raw;
|
|
|
|
|
2008-12-08 04:36:27 +00:00
|
|
|
float r_shoulder; /**< right shoulder button (range 0-1) */
|
|
|
|
float l_shoulder; /**< left shoulder button (range 0-1) */
|
|
|
|
|
|
|
|
struct joystick_t ljs; /**< left joystick calibration */
|
|
|
|
struct joystick_t rjs; /**< right joystick calibration */
|
|
|
|
} classic_ctrl_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct guitar_hero_3_t
|
|
|
|
* @brief Guitar Hero 3 expansion device.
|
|
|
|
*/
|
|
|
|
typedef struct guitar_hero_3_t {
|
|
|
|
short btns; /**< what buttons have just been pressed */
|
2009-09-20 13:31:32 +00:00
|
|
|
short btns_last; /**< what buttons have just been pressed */
|
2008-12-08 04:36:27 +00:00
|
|
|
short btns_held; /**< what buttons are being held down */
|
|
|
|
short btns_released; /**< what buttons were just released this */
|
|
|
|
|
2009-09-20 13:31:32 +00:00
|
|
|
byte wb_raw;
|
2008-12-08 04:36:27 +00:00
|
|
|
float whammy_bar; /**< whammy bar (range 0-1) */
|
|
|
|
|
2009-09-20 13:31:32 +00:00
|
|
|
byte tb_raw;
|
|
|
|
int touch_bar; /**< touch bar */
|
|
|
|
|
2008-12-08 04:36:27 +00:00
|
|
|
struct joystick_t js; /**< joystick calibration */
|
|
|
|
} guitar_hero_3_t;
|
|
|
|
|
2009-06-01 08:39:05 +00:00
|
|
|
/*
|
|
|
|
Wii board
|
|
|
|
*/
|
|
|
|
typedef struct wii_board_t {
|
|
|
|
short tl; /* Interpolated */
|
|
|
|
short tr;
|
|
|
|
short bl;
|
|
|
|
short br; /* End interp */
|
|
|
|
short rtl; /* RAW */
|
|
|
|
short rtr;
|
|
|
|
short rbl;
|
|
|
|
short rbr; /* /RAW */
|
|
|
|
short ltl;
|
|
|
|
short ltr;
|
|
|
|
short lbl;
|
|
|
|
short lbr;
|
|
|
|
short ctl[3]; /* Calibration */
|
|
|
|
short ctr[3];
|
|
|
|
short cbl[3];
|
|
|
|
short cbr[3]; /* /Calibration */
|
2009-09-20 13:31:32 +00:00
|
|
|
float x;
|
|
|
|
float y;
|
2009-06-01 08:39:05 +00:00
|
|
|
} wii_board_t;
|
2008-12-08 04:36:27 +00:00
|
|
|
|
MAJOR and long ago overdue wiiuse and real wiimote sourcecode cleanup. Removed "recording" in old wiimote plugin and other not necessary functions(EEPROM reading, we 'll just do a reconnect instead to use default accel calibration data etc). Recording is not needed anymore(playback of recorded moves should be still working). Everything the recording feature offered, the new wiimote plugin does as well and even more. The cleanup will ease the port of the real wiimote feature into new wiimote plugin, which is still only offering emulated wiimote support. Billiard said he's now on it.:)
Wiimotes are now slighty more responsive and multiple wiimotes should harmonize now slighty better. This clean up was requested/inevitable and should have be done way more earlier. This "might" break osx/linux builds, so please test. If your aware of any "real wiimote" issues please post it in the comments as well(dont forget to state your OS).
Known wiimote issues:
1.) Possible wiimote disconnect on pressing the home button
2.) 1-2 Possible wiimote disconnects directly after starting a game
3.) Rumble causes lag. I don't think this is a wiimote plugin issue itself, I'm not sure tho. It would be interesting to know whether the lag still happens on emulated wiimotes as well, when the game tries to rumble.
4.) Connecting(pairing up and refreshing) a 2nd/3rd/4th real wiimote while having a game running/paused, might swap player slots and cause disconnects at that moment.
If u have more issues, feel free to post them, to have them all here collected once more to get a brief overview.
Apart from that, increase the wiimote read timeout @settings(20-200). If your expecting frequent disconnects, restart dolphin, and don't open the wiimote gui before playing instead directly start games.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5788 8ced0084-cf51-0410-be5f-012b33b47a6e
2010-06-26 02:08:30 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct motionplus_t
|
|
|
|
* @brief Motion Plus expansion device.
|
|
|
|
*/
|
|
|
|
typedef struct motionplus_t {
|
|
|
|
struct vec3s_t calib_zero; /* motion plus gyroscope calibration */
|
|
|
|
struct vec3s_t calib_min;
|
|
|
|
struct vec3s_t calib_max;
|
|
|
|
byte pitchfs; /* fast/slow motion */
|
|
|
|
byte rollfs;
|
|
|
|
byte yawfs;
|
|
|
|
unsigned short pitch; /* current orientation on each axis */
|
|
|
|
unsigned short roll;
|
|
|
|
unsigned short yaw;
|
|
|
|
} motionplus_t;
|
|
|
|
|
|
|
|
|
2008-12-08 04:36:27 +00:00
|
|
|
/**
|
|
|
|
* @struct expansion_t
|
|
|
|
* @brief Generic expansion device plugged into wiimote.
|
|
|
|
*/
|
|
|
|
typedef struct expansion_t {
|
|
|
|
int type; /**< type of expansion attached */
|
|
|
|
|
|
|
|
union {
|
|
|
|
struct nunchuk_t nunchuk;
|
|
|
|
struct classic_ctrl_t classic;
|
|
|
|
struct guitar_hero_3_t gh3;
|
2009-06-01 08:39:05 +00:00
|
|
|
struct wii_board_t wb;
|
2008-12-08 04:36:27 +00:00
|
|
|
};
|
|
|
|
} expansion_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @enum win32_bt_stack_t
|
|
|
|
* @brief Available bluetooth stacks for Windows.
|
|
|
|
*/
|
|
|
|
typedef enum win_bt_stack_t {
|
|
|
|
WIIUSE_STACK_UNKNOWN,
|
|
|
|
WIIUSE_STACK_MS,
|
|
|
|
WIIUSE_STACK_BLUESOLEIL
|
|
|
|
} win_bt_stack_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct wiimote_state_t
|
|
|
|
* @brief Significant data from the previous event.
|
|
|
|
*/
|
|
|
|
typedef struct wiimote_state_t {
|
|
|
|
/* expansion_t */
|
|
|
|
float exp_ljs_ang;
|
|
|
|
float exp_rjs_ang;
|
|
|
|
float exp_ljs_mag;
|
|
|
|
float exp_rjs_mag;
|
|
|
|
unsigned short exp_btns;
|
|
|
|
struct orient_t exp_orient;
|
2008-11-05 16:46:30 +00:00
|
|
|
struct vec3b_t exp_accel;
|
2008-12-08 04:36:27 +00:00
|
|
|
float exp_r_shoulder;
|
|
|
|
float exp_l_shoulder;
|
|
|
|
|
|
|
|
/* ir_t */
|
|
|
|
int ir_ax;
|
|
|
|
int ir_ay;
|
|
|
|
float ir_distance;
|
|
|
|
|
|
|
|
struct orient_t orient;
|
|
|
|
unsigned short btns;
|
|
|
|
|
|
|
|
struct vec3b_t accel;
|
|
|
|
} wiimote_state_t;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @enum WIIUSE_EVENT_TYPE
|
|
|
|
* @brief Events that wiiuse can generate from a poll.
|
|
|
|
*/
|
|
|
|
typedef enum WIIUSE_EVENT_TYPE {
|
|
|
|
WIIUSE_NONE = 0,
|
|
|
|
WIIUSE_EVENT,
|
2008-11-05 16:46:30 +00:00
|
|
|
WIIUSE_STATUS,
|
2008-12-08 04:36:27 +00:00
|
|
|
WIIUSE_CONNECT,
|
2008-11-05 16:46:30 +00:00
|
|
|
WIIUSE_DISCONNECT,
|
|
|
|
WIIUSE_UNEXPECTED_DISCONNECT,
|
|
|
|
WIIUSE_READ_DATA,
|
2008-12-08 04:36:27 +00:00
|
|
|
WIIUSE_NUNCHUK_INSERTED,
|
2008-11-05 16:46:30 +00:00
|
|
|
WIIUSE_NUNCHUK_REMOVED,
|
|
|
|
WIIUSE_CLASSIC_CTRL_INSERTED,
|
|
|
|
WIIUSE_CLASSIC_CTRL_REMOVED,
|
|
|
|
WIIUSE_GUITAR_HERO_3_CTRL_INSERTED,
|
2009-06-01 08:39:05 +00:00
|
|
|
WIIUSE_GUITAR_HERO_3_CTRL_REMOVED,
|
|
|
|
WIIUSE_WII_BOARD_CTRL_INSERTED,
|
MAJOR and long ago overdue wiiuse and real wiimote sourcecode cleanup. Removed "recording" in old wiimote plugin and other not necessary functions(EEPROM reading, we 'll just do a reconnect instead to use default accel calibration data etc). Recording is not needed anymore(playback of recorded moves should be still working). Everything the recording feature offered, the new wiimote plugin does as well and even more. The cleanup will ease the port of the real wiimote feature into new wiimote plugin, which is still only offering emulated wiimote support. Billiard said he's now on it.:)
Wiimotes are now slighty more responsive and multiple wiimotes should harmonize now slighty better. This clean up was requested/inevitable and should have be done way more earlier. This "might" break osx/linux builds, so please test. If your aware of any "real wiimote" issues please post it in the comments as well(dont forget to state your OS).
Known wiimote issues:
1.) Possible wiimote disconnect on pressing the home button
2.) 1-2 Possible wiimote disconnects directly after starting a game
3.) Rumble causes lag. I don't think this is a wiimote plugin issue itself, I'm not sure tho. It would be interesting to know whether the lag still happens on emulated wiimotes as well, when the game tries to rumble.
4.) Connecting(pairing up and refreshing) a 2nd/3rd/4th real wiimote while having a game running/paused, might swap player slots and cause disconnects at that moment.
If u have more issues, feel free to post them, to have them all here collected once more to get a brief overview.
Apart from that, increase the wiimote read timeout @settings(20-200). If your expecting frequent disconnects, restart dolphin, and don't open the wiimote gui before playing instead directly start games.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5788 8ced0084-cf51-0410-be5f-012b33b47a6e
2010-06-26 02:08:30 +00:00
|
|
|
WIIUSE_WII_BOARD_CTRL_REMOVED,
|
|
|
|
WIIUSE_MOTION_PLUS_INSERTED,
|
|
|
|
WIIUSE_MOTION_PLUS_REMOVED
|
2008-12-08 04:36:27 +00:00
|
|
|
} WIIUSE_EVENT_TYPE;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct wiimote_t
|
|
|
|
* @brief Wiimote structure.
|
|
|
|
*/
|
|
|
|
typedef struct wiimote_t {
|
2010-06-09 19:36:08 +00:00
|
|
|
WCONST int unid; /**< user specified id */
|
2008-12-08 04:36:27 +00:00
|
|
|
|
2009-02-16 21:12:00 +00:00
|
|
|
#if defined(__APPLE__)
|
2010-06-09 19:36:08 +00:00
|
|
|
WCONST IOBluetoothDeviceRef *device;
|
|
|
|
WCONST char bdaddr_str[18];
|
|
|
|
#elif defined(__linux__)
|
|
|
|
WCONST bdaddr_t bdaddr; /**< bt address (linux) */
|
|
|
|
WCONST char bdaddr_str[18]; /**< readable bt address */
|
|
|
|
WCONST int out_sock; /**< output socket */
|
|
|
|
WCONST int in_sock; /**< input socket */
|
|
|
|
#elif defined(_WIN32)
|
External/wiiuse clean up, part 2.
- More removal of unnecessary code
- Windows: Modification of Wiiuse_Find under windows,
instead of always deleting and recreating the whole wiimote_t struct, we do maintain the old one,
adding/removing new wiimotes to/from it
- some wiimote bugfixes, see below for details
Windows related stuff:
Fixed most of the disconnection issues (single and mulitple real wiimotes, both wiimote plugins) (I haven't had a disconnect msg in hours anymore(ms stack)).
Rumble bug should be fixed now(both plugins,pls verify).
Fixed some pair up issues( sometimes you had to press the pair up button up to 3 times, till it paired up your wiimote).
More dongles might be now supported via ms stack, pls try and report back!
Fixed a problem where multiple wiimotes would swap slots on pair-up/addition of a real wiimote (2-4 real wiimotes) (both plugins, but not integrated into new plugin).
Improved ingame auto-pairup for real wiimotes(thx to the new wiiuse_find routine).
Fixed a bug on setting wiimote timeouts, which means changing the timeout was just a dummy earlier.
Most of the stuff concerns stuff in the old wiimote plugin, dont worry, in the end it's important for both plugins. It will get ported to the new plugin sooner or later.:')
Some minor stuff.
This might break osx/linux build and maybe the new plugin realwiimote-wise only. Thx to glennrics to pointing me to some breakings on linux, I didn't fix them all.
PS I hope i haven't forgotten anything, enjoy.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5940 8ced0084-cf51-0410-be5f-012b33b47a6e
2010-07-22 04:31:36 +00:00
|
|
|
WCONST char devicepath[255]; /**< unique wiimote reference */
|
|
|
|
//WCONST ULONGLONG btaddr; /**< bt address (windows) */
|
2010-06-09 19:36:08 +00:00
|
|
|
WCONST HANDLE dev_handle; /**< HID handle */
|
|
|
|
WCONST OVERLAPPED hid_overlap; /**< overlap handle */
|
|
|
|
WCONST enum win_bt_stack_t stack; /**< type of bluetooth stack to use */
|
2009-11-19 22:47:57 +00:00
|
|
|
#endif
|
2010-06-09 19:36:08 +00:00
|
|
|
WCONST int timeout; /**< read timeout */
|
|
|
|
WCONST int state; /**< various state flags */
|
|
|
|
WCONST byte leds; /**< currently lit leds */
|
2008-12-08 04:36:27 +00:00
|
|
|
|
2010-06-09 19:36:08 +00:00
|
|
|
WCONST int flags; /**< options flag */
|
2008-11-05 16:46:30 +00:00
|
|
|
|
2008-12-08 04:36:27 +00:00
|
|
|
WCONST byte handshake_state; /**< the state of the connection handshake */
|
|
|
|
|
2010-06-09 19:36:08 +00:00
|
|
|
WCONST struct read_req_t* read_req; /**< list of data read requests */
|
2008-12-08 04:36:27 +00:00
|
|
|
|
2010-06-09 19:36:08 +00:00
|
|
|
WCONST WIIUSE_EVENT_TYPE event; /**< type of event that occured */
|
|
|
|
WCONST byte event_buf[MAX_PAYLOAD]; /**< event buffer */
|
2008-12-08 04:36:27 +00:00
|
|
|
} wiimote;
|
|
|
|
|
|
|
|
|
|
|
|
/*****************************************
|
|
|
|
*
|
|
|
|
* Include API specific stuff
|
|
|
|
*
|
|
|
|
*****************************************/
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
#define WIIUSE_EXPORT_DECL __declspec(dllexport)
|
|
|
|
#define WIIUSE_IMPORT_DECL __declspec(dllimport)
|
|
|
|
#else
|
|
|
|
#define WIIUSE_EXPORT_DECL
|
|
|
|
#define WIIUSE_IMPORT_DECL
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef WIIUSE_COMPILE_LIB
|
|
|
|
#define WIIUSE_EXPORT WIIUSE_EXPORT_DECL
|
|
|
|
#else
|
|
|
|
#define WIIUSE_EXPORT WIIUSE_IMPORT_DECL
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* wiiuse.c */
|
|
|
|
WIIUSE_EXPORT extern const char* wiiuse_version();
|
|
|
|
|
|
|
|
WIIUSE_EXPORT extern struct wiimote_t** wiiuse_init(int wiimotes);
|
|
|
|
WIIUSE_EXPORT extern void wiiuse_disconnected(struct wiimote_t* wm);
|
|
|
|
WIIUSE_EXPORT extern void wiiuse_cleanup(struct wiimote_t** wm, int wiimotes);
|
|
|
|
WIIUSE_EXPORT extern void wiiuse_rumble(struct wiimote_t* wm, int status);
|
|
|
|
WIIUSE_EXPORT extern void wiiuse_set_leds(struct wiimote_t* wm, int leds);
|
2010-06-26 03:02:57 +00:00
|
|
|
WIIUSE_EXPORT extern int wiiuse_write_data(struct wiimote_t* wm, unsigned int addr, byte* data, byte len);
|
2008-12-08 04:36:27 +00:00
|
|
|
|
2010-04-25 22:39:47 +00:00
|
|
|
/* connect.c / io_win.c */
|
External/wiiuse clean up, part 2.
- More removal of unnecessary code
- Windows: Modification of Wiiuse_Find under windows,
instead of always deleting and recreating the whole wiimote_t struct, we do maintain the old one,
adding/removing new wiimotes to/from it
- some wiimote bugfixes, see below for details
Windows related stuff:
Fixed most of the disconnection issues (single and mulitple real wiimotes, both wiimote plugins) (I haven't had a disconnect msg in hours anymore(ms stack)).
Rumble bug should be fixed now(both plugins,pls verify).
Fixed some pair up issues( sometimes you had to press the pair up button up to 3 times, till it paired up your wiimote).
More dongles might be now supported via ms stack, pls try and report back!
Fixed a problem where multiple wiimotes would swap slots on pair-up/addition of a real wiimote (2-4 real wiimotes) (both plugins, but not integrated into new plugin).
Improved ingame auto-pairup for real wiimotes(thx to the new wiiuse_find routine).
Fixed a bug on setting wiimote timeouts, which means changing the timeout was just a dummy earlier.
Most of the stuff concerns stuff in the old wiimote plugin, dont worry, in the end it's important for both plugins. It will get ported to the new plugin sooner or later.:')
Some minor stuff.
This might break osx/linux build and maybe the new plugin realwiimote-wise only. Thx to glennrics to pointing me to some breakings on linux, I didn't fix them all.
PS I hope i haven't forgotten anything, enjoy.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5940 8ced0084-cf51-0410-be5f-012b33b47a6e
2010-07-22 04:31:36 +00:00
|
|
|
#ifdef _WIN32
|
|
|
|
WIIUSE_EXPORT extern int wiiuse_find(struct wiimote_t** wm, int max_wiimotes, int wiimotes);
|
|
|
|
#else
|
2008-12-08 04:36:27 +00:00
|
|
|
WIIUSE_EXPORT extern int wiiuse_find(struct wiimote_t** wm, int max_wiimotes, int timeout);
|
External/wiiuse clean up, part 2.
- More removal of unnecessary code
- Windows: Modification of Wiiuse_Find under windows,
instead of always deleting and recreating the whole wiimote_t struct, we do maintain the old one,
adding/removing new wiimotes to/from it
- some wiimote bugfixes, see below for details
Windows related stuff:
Fixed most of the disconnection issues (single and mulitple real wiimotes, both wiimote plugins) (I haven't had a disconnect msg in hours anymore(ms stack)).
Rumble bug should be fixed now(both plugins,pls verify).
Fixed some pair up issues( sometimes you had to press the pair up button up to 3 times, till it paired up your wiimote).
More dongles might be now supported via ms stack, pls try and report back!
Fixed a problem where multiple wiimotes would swap slots on pair-up/addition of a real wiimote (2-4 real wiimotes) (both plugins, but not integrated into new plugin).
Improved ingame auto-pairup for real wiimotes(thx to the new wiiuse_find routine).
Fixed a bug on setting wiimote timeouts, which means changing the timeout was just a dummy earlier.
Most of the stuff concerns stuff in the old wiimote plugin, dont worry, in the end it's important for both plugins. It will get ported to the new plugin sooner or later.:')
Some minor stuff.
This might break osx/linux build and maybe the new plugin realwiimote-wise only. Thx to glennrics to pointing me to some breakings on linux, I didn't fix them all.
PS I hope i haven't forgotten anything, enjoy.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5940 8ced0084-cf51-0410-be5f-012b33b47a6e
2010-07-22 04:31:36 +00:00
|
|
|
#endif
|
2008-12-08 04:36:27 +00:00
|
|
|
WIIUSE_EXPORT extern int wiiuse_connect(struct wiimote_t** wm, int wiimotes);
|
|
|
|
WIIUSE_EXPORT extern void wiiuse_disconnect(struct wiimote_t* wm);
|
External/wiiuse clean up, part 2.
- More removal of unnecessary code
- Windows: Modification of Wiiuse_Find under windows,
instead of always deleting and recreating the whole wiimote_t struct, we do maintain the old one,
adding/removing new wiimotes to/from it
- some wiimote bugfixes, see below for details
Windows related stuff:
Fixed most of the disconnection issues (single and mulitple real wiimotes, both wiimote plugins) (I haven't had a disconnect msg in hours anymore(ms stack)).
Rumble bug should be fixed now(both plugins,pls verify).
Fixed some pair up issues( sometimes you had to press the pair up button up to 3 times, till it paired up your wiimote).
More dongles might be now supported via ms stack, pls try and report back!
Fixed a problem where multiple wiimotes would swap slots on pair-up/addition of a real wiimote (2-4 real wiimotes) (both plugins, but not integrated into new plugin).
Improved ingame auto-pairup for real wiimotes(thx to the new wiiuse_find routine).
Fixed a bug on setting wiimote timeouts, which means changing the timeout was just a dummy earlier.
Most of the stuff concerns stuff in the old wiimote plugin, dont worry, in the end it's important for both plugins. It will get ported to the new plugin sooner or later.:')
Some minor stuff.
This might break osx/linux build and maybe the new plugin realwiimote-wise only. Thx to glennrics to pointing me to some breakings on linux, I didn't fix them all.
PS I hope i haven't forgotten anything, enjoy.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5940 8ced0084-cf51-0410-be5f-012b33b47a6e
2010-07-22 04:31:36 +00:00
|
|
|
WIIUSE_EXPORT extern void wiiuse_set_timeout(struct wiimote_t** wm, int wiimotes, byte timeout);
|
MAJOR and long ago overdue wiiuse and real wiimote sourcecode cleanup. Removed "recording" in old wiimote plugin and other not necessary functions(EEPROM reading, we 'll just do a reconnect instead to use default accel calibration data etc). Recording is not needed anymore(playback of recorded moves should be still working). Everything the recording feature offered, the new wiimote plugin does as well and even more. The cleanup will ease the port of the real wiimote feature into new wiimote plugin, which is still only offering emulated wiimote support. Billiard said he's now on it.:)
Wiimotes are now slighty more responsive and multiple wiimotes should harmonize now slighty better. This clean up was requested/inevitable and should have be done way more earlier. This "might" break osx/linux builds, so please test. If your aware of any "real wiimote" issues please post it in the comments as well(dont forget to state your OS).
Known wiimote issues:
1.) Possible wiimote disconnect on pressing the home button
2.) 1-2 Possible wiimote disconnects directly after starting a game
3.) Rumble causes lag. I don't think this is a wiimote plugin issue itself, I'm not sure tho. It would be interesting to know whether the lag still happens on emulated wiimotes as well, when the game tries to rumble.
4.) Connecting(pairing up and refreshing) a 2nd/3rd/4th real wiimote while having a game running/paused, might swap player slots and cause disconnects at that moment.
If u have more issues, feel free to post them, to have them all here collected once more to get a brief overview.
Apart from that, increase the wiimote read timeout @settings(20-200). If your expecting frequent disconnects, restart dolphin, and don't open the wiimote gui before playing instead directly start games.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5788 8ced0084-cf51-0410-be5f-012b33b47a6e
2010-06-26 02:08:30 +00:00
|
|
|
|
2010-04-26 10:49:12 +00:00
|
|
|
#ifdef WIN32
|
2010-04-25 22:39:47 +00:00
|
|
|
WIIUSE_EXPORT extern int wiiuse_check_system_notification(unsigned int nMsg, WPARAM wParam, LPARAM lParam);
|
|
|
|
WIIUSE_EXPORT extern int wiiuse_register_system_notification(HWND hwnd);
|
2010-04-26 10:49:12 +00:00
|
|
|
#endif
|
2008-12-08 04:36:27 +00:00
|
|
|
|
2010-07-07 02:19:16 +00:00
|
|
|
#ifdef __linux__
|
|
|
|
int wiiuse_find_more(struct wiimote_t** wm, int max_wiimotes, int timeout);
|
|
|
|
#endif
|
|
|
|
|
2008-12-08 04:36:27 +00:00
|
|
|
/* ir.c */
|
External/wiiuse clean up, part 2.
- More removal of unnecessary code
- Windows: Modification of Wiiuse_Find under windows,
instead of always deleting and recreating the whole wiimote_t struct, we do maintain the old one,
adding/removing new wiimotes to/from it
- some wiimote bugfixes, see below for details
Windows related stuff:
Fixed most of the disconnection issues (single and mulitple real wiimotes, both wiimote plugins) (I haven't had a disconnect msg in hours anymore(ms stack)).
Rumble bug should be fixed now(both plugins,pls verify).
Fixed some pair up issues( sometimes you had to press the pair up button up to 3 times, till it paired up your wiimote).
More dongles might be now supported via ms stack, pls try and report back!
Fixed a problem where multiple wiimotes would swap slots on pair-up/addition of a real wiimote (2-4 real wiimotes) (both plugins, but not integrated into new plugin).
Improved ingame auto-pairup for real wiimotes(thx to the new wiiuse_find routine).
Fixed a bug on setting wiimote timeouts, which means changing the timeout was just a dummy earlier.
Most of the stuff concerns stuff in the old wiimote plugin, dont worry, in the end it's important for both plugins. It will get ported to the new plugin sooner or later.:')
Some minor stuff.
This might break osx/linux build and maybe the new plugin realwiimote-wise only. Thx to glennrics to pointing me to some breakings on linux, I didn't fix them all.
PS I hope i haven't forgotten anything, enjoy.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5940 8ced0084-cf51-0410-be5f-012b33b47a6e
2010-07-22 04:31:36 +00:00
|
|
|
|
2008-11-05 16:46:30 +00:00
|
|
|
WIIUSE_EXPORT extern void wiiuse_set_ir_sensitivity(struct wiimote_t* wm, int level);
|
|
|
|
|
|
|
|
/* io.c */
|
|
|
|
WIIUSE_EXPORT extern int wiiuse_io_read(struct wiimote_t* wm);
|
|
|
|
WIIUSE_EXPORT extern int wiiuse_io_write(struct wiimote_t* wm, byte* buf, int len);
|
2008-12-08 04:36:27 +00:00
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* WIIUSE_H_INCLUDED */
|
|
|
|
|