diff --git a/Externals/WiiUse/Inc/wiiuse.h b/Externals/WiiUse/Inc/wiiuse.h
index 00434420cd..2d7e5b0924 100644
--- a/Externals/WiiUse/Inc/wiiuse.h
+++ b/Externals/WiiUse/Inc/wiiuse.h
@@ -611,18 +611,11 @@ 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_toggle_rumble(struct wiimote_t* wm);
WIIUSE_EXPORT extern void wiiuse_set_leds(struct wiimote_t* wm, int leds);
-WIIUSE_EXPORT extern void wiiuse_motion_sensing(struct wiimote_t* wm, int status);
WIIUSE_EXPORT extern int wiiuse_read_data(struct wiimote_t* wm, byte* buffer, unsigned int offset, unsigned short len);
WIIUSE_EXPORT extern int wiiuse_write_data(struct wiimote_t* wm, unsigned int addr, byte* data, byte len);
-WIIUSE_EXPORT extern void wiiuse_status(struct wiimote_t* wm);
-WIIUSE_EXPORT extern struct wiimote_t* wiiuse_get_by_id(struct wiimote_t** wm, int wiimotes, int unid);
WIIUSE_EXPORT extern int wiiuse_set_flags(struct wiimote_t* wm, int enable, int disable);
-WIIUSE_EXPORT extern float wiiuse_set_smooth_alpha(struct wiimote_t* wm, float alpha);
-WIIUSE_EXPORT extern void wiiuse_set_bluetooth_stack(struct wiimote_t** wm, int wiimotes, enum win_bt_stack_t type);
-WIIUSE_EXPORT extern void wiiuse_set_orient_threshold(struct wiimote_t* wm, float threshold);
-WIIUSE_EXPORT extern void wiiuse_resync(struct wiimote_t* wm);
WIIUSE_EXPORT extern void wiiuse_set_timeout(struct wiimote_t** wm, int wiimotes, byte normal_timeout, byte exp_timeout);
-WIIUSE_EXPORT extern void wiiuse_set_accel_threshold(struct wiimote_t* wm, int threshold);
+
/* connect.c */
WIIUSE_EXPORT extern int wiiuse_find(struct wiimote_t** wm, int max_wiimotes, int timeout);
@@ -633,20 +626,11 @@ WIIUSE_EXPORT extern int wiiuse_check_system_notification(unsigned int nMsg, WPA
WIIUSE_EXPORT extern int wiiuse_register_system_notification(HWND hwnd);
#endif
-/* events.c */
-WIIUSE_EXPORT extern int wiiuse_poll(struct wiimote_t** wm, int wiimotes);
-
/* ir.c */
-WIIUSE_EXPORT extern void wiiuse_set_ir(struct wiimote_t* wm, int status);
-WIIUSE_EXPORT extern void wiiuse_set_ir_vres(struct wiimote_t* wm, unsigned int x, unsigned int y);
WIIUSE_EXPORT extern void wiiuse_set_ir_position(struct wiimote_t* wm, enum ir_position_t pos);
WIIUSE_EXPORT extern void wiiuse_set_aspect_ratio(struct wiimote_t* wm, enum aspect_t aspect);
WIIUSE_EXPORT extern void wiiuse_set_ir_sensitivity(struct wiimote_t* wm, int level);
-/* nunchuk.c */
-WIIUSE_EXPORT extern void wiiuse_set_nunchuk_orient_threshold(struct wiimote_t* wm, float threshold);
-WIIUSE_EXPORT extern void wiiuse_set_nunchuk_accel_threshold(struct wiimote_t* wm, int threshold);
-
/* 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);
diff --git a/Externals/WiiUse/Win32/wiiuse.dll b/Externals/WiiUse/Win32/wiiuse.dll
index 9b86e1aa18..a708d495c0 100644
Binary files a/Externals/WiiUse/Win32/wiiuse.dll and b/Externals/WiiUse/Win32/wiiuse.dll differ
diff --git a/Externals/WiiUse/Win32/wiiuse.lib b/Externals/WiiUse/Win32/wiiuse.lib
index d4d8af08d5..8c9a6da971 100644
Binary files a/Externals/WiiUse/Win32/wiiuse.lib and b/Externals/WiiUse/Win32/wiiuse.lib differ
diff --git a/Externals/WiiUse/X64/wiiuse.dll b/Externals/WiiUse/X64/wiiuse.dll
index 8a8191bac9..2febe627ce 100644
Binary files a/Externals/WiiUse/X64/wiiuse.dll and b/Externals/WiiUse/X64/wiiuse.dll differ
diff --git a/Externals/WiiUse/X64/wiiuse.lib b/Externals/WiiUse/X64/wiiuse.lib
index d98cbbff85..bb4392d16a 100644
Binary files a/Externals/WiiUse/X64/wiiuse.lib and b/Externals/WiiUse/X64/wiiuse.lib differ
diff --git a/Externals/WiiUseSrc/Src/Makefile b/Externals/WiiUseSrc/Src/Makefile
index bab5b140f4..4d56436aac 100644
--- a/Externals/WiiUseSrc/Src/Makefile
+++ b/Externals/WiiUseSrc/Src/Makefile
@@ -48,14 +48,9 @@ INCLUDES = -I.
# Generate a list of object files
#
OBJS = \
- $(OBJ_DIR)/classic.o \
- $(OBJ_DIR)/dynamics.o \
- $(OBJ_DIR)/events.o \
$(OBJ_DIR)/io.o \
$(OBJ_DIR)/io_nix.o \
$(OBJ_DIR)/ir.o \
- $(OBJ_DIR)/nunchuk.o \
- $(OBJ_DIR)/guitar_hero_3.o \
$(OBJ_DIR)/wiiuse.o
###############################
diff --git a/Externals/WiiUseSrc/Src/SConscript b/Externals/WiiUseSrc/Src/SConscript
index 3f3136d50b..0a4ae06843 100644
--- a/Externals/WiiUseSrc/Src/SConscript
+++ b/Externals/WiiUseSrc/Src/SConscript
@@ -8,14 +8,8 @@ if (env['HAVE_BLUEZ'] != 1 and sys.platform != 'darwin'):
Return()
files = [
- "classic.c",
- "dynamics.c",
- "events.c",
"io.c",
"ir.c",
- "nunchuk.c",
- "guitar_hero_3.c",
- "wiiboard.c",
"wiiuse.c",
]
diff --git a/Externals/WiiUseSrc/Src/classic.c b/Externals/WiiUseSrc/Src/classic.c
deleted file mode 100644
index 1534fcaf2d..0000000000
--- a/Externals/WiiUseSrc/Src/classic.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * 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 .
- *
- * $Header$
- *
- */
-
-/**
- * @file
- * @brief Classic controller expansion device.
- */
-
-#include
-#include
-#include
-
-#ifdef WIN32
- #include
-#endif
-
-#include "definitions.h"
-#include "wiiuse_internal.h"
-#include "dynamics.h"
-#include "events.h"
-#include "classic.h"
-
-static void classic_ctrl_pressed_buttons(struct classic_ctrl_t* cc, short now);
-
-/**
- * @brief Handle the handshake data from the classic controller.
- *
- * @param cc A pointer to a classic_ctrl_t structure.
- * @param data The data read in from the device.
- * @param len The length of the data block, in bytes.
- *
- * @return Returns 1 if handshake was successful, 0 if not.
- */
-int classic_ctrl_handshake(struct wiimote_t* wm, struct classic_ctrl_t* cc, byte* data, unsigned short len) {
- int i;
- int offset = 0;
-
- cc->btns = 0;
- cc->btns_held = 0;
- cc->btns_released = 0;
- cc->r_shoulder = 0;
- cc->l_shoulder = 0;
-
- /* decrypt data */
- for (i = 0; i < len; ++i)
- data[i] = (data[i] ^ 0x17) + 0x17;
-
- if (data[offset] == 0xFF) {
- /*
- * Sometimes the data returned here is not correct.
- * This might happen because the wiimote is lagging
- * behind our initialization sequence.
- * To fix this just request the handshake again.
- *
- * Other times it's just the first 16 bytes are 0xFF,
- * but since the next 16 bytes are the same, just use
- * those.
- */
- if (data[offset + 16] == 0xFF) {
- /* get the calibration data */
- byte* handshake_buf = (byte *)malloc(EXP_HANDSHAKE_LEN * sizeof(byte));
-
- WIIUSE_DEBUG("Classic controller handshake appears invalid, trying again.");
- wiiuse_read_data_cb(wm, handshake_expansion, handshake_buf, WM_EXP_MEM_CALIBR, EXP_HANDSHAKE_LEN);
-
- return 0;
- } else
- offset += 16;
- }
-
-
- /* joystick stuff */
- cc->ljs.max.x = data[0 + offset] / 4;
- cc->ljs.min.x = data[1 + offset] / 4;
- cc->ljs.center.x = data[2 + offset] / 4;
- cc->ljs.max.y = data[3 + offset] / 4;
- cc->ljs.min.y = data[4 + offset] / 4;
- cc->ljs.center.y = data[5 + offset] / 4;
-
- cc->rjs.max.x = data[6 + offset] / 8;
- cc->rjs.min.x = data[7 + offset] / 8;
- cc->rjs.center.x = data[8 + offset] / 8;
- cc->rjs.max.y = data[9 + offset] / 8;
- cc->rjs.min.y = data[10 + offset] / 8;
- cc->rjs.center.y = data[11 + offset] / 8;
-
- /* handshake done */
- wm->expansion.type = EXP_CLASSIC;
-
- wm->timeout = WIIMOTE_DEFAULT_TIMEOUT;
-
- return 1;
-}
-
-
-/**
- * @brief The classic controller disconnected.
- *
- * @param cc A pointer to a classic_ctrl_t structure.
- */
-void classic_ctrl_disconnected(struct classic_ctrl_t* cc) {
- memset(cc, 0, sizeof(struct classic_ctrl_t));
-}
-
-
-
-/**
- * @brief Handle classic controller event.
- *
- * @param cc A pointer to a classic_ctrl_t structure.
- * @param msg The message specified in the event packet.
- */
-void classic_ctrl_event(struct classic_ctrl_t* cc, byte* msg) {
- int i;
-
- /* decrypt data */
- for (i = 0; i < 6; ++i)
- msg[i] = (msg[i] ^ 0x17) + 0x17;
-
- classic_ctrl_pressed_buttons(cc, BIG_ENDIAN_SHORT(*(short*)(msg + 4)));
-
- /* left/right buttons */
- cc->ls_raw = (((msg[2] & 0x60) >> 2) | ((msg[3] & 0xE0) >> 5));
- cc->rs_raw = (msg[3] & 0x1F);
-
- /*
- * TODO - LR range hardcoded from 0x00 to 0x1F.
- * This is probably in the calibration somewhere.
- */
- cc->r_shoulder = ((float)cc->rs_raw / 0x1F);
- cc->l_shoulder = ((float)cc->ls_raw / 0x1F);
-
- /* calculate joystick orientation */
-
- cc->ljs.pos.x = (msg[0] & 0x3F);
- cc->ljs.pos.y = (msg[1] & 0x3F);
- cc->rjs.pos.x = ((msg[0] & 0xC0) >> 3) | ((msg[1] & 0xC0) >> 5) | ((msg[2] & 0x80) >> 7);
- cc->rjs.pos.y = (msg[2] & 0x1F);
-
- calc_joystick_state(&cc->ljs, cc->ljs.pos.x, cc->ljs.pos.y);
- calc_joystick_state(&cc->rjs, cc->rjs.pos.x, cc->rjs.pos.y);
-}
-
-
-/**
- * @brief Find what buttons are pressed.
- *
- * @param cc A pointer to a classic_ctrl_t structure.
- * @param msg The message byte specified in the event packet.
- */
-static void classic_ctrl_pressed_buttons(struct classic_ctrl_t* cc, short now) {
- /* message is inverted (0 is active, 1 is inactive) */
- now = ~now & CLASSIC_CTRL_BUTTON_ALL;
-
- /* pressed now & were pressed, then held */
- cc->btns_held = (now & cc->btns);
-
- /* were pressed or were held & not pressed now, then released */
- cc->btns_released = ((cc->btns | cc->btns_held) & ~now);
-
- /* buttons pressed now */
- cc->btns = now;
-}
diff --git a/Externals/WiiUseSrc/Src/classic.h b/Externals/WiiUseSrc/Src/classic.h
deleted file mode 100644
index 356f6a458b..0000000000
--- a/Externals/WiiUseSrc/Src/classic.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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 .
- *
- * $Header$
- *
- */
-
-/**
- * @file
- * @brief Classic controller expansion device.
- */
-
-#ifndef CLASSIC_H_INCLUDED
-#define CLASSIC_H_INCLUDED
-
-#include "wiiuse_internal.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int classic_ctrl_handshake(struct wiimote_t* wm, struct classic_ctrl_t* cc, byte* data, unsigned short len);
-
-void classic_ctrl_disconnected(struct classic_ctrl_t* cc);
-
-void classic_ctrl_event(struct classic_ctrl_t* cc, byte* msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // CLASSIC_H_INCLUDED
diff --git a/Externals/WiiUseSrc/Src/dynamics.c b/Externals/WiiUseSrc/Src/dynamics.c
deleted file mode 100644
index 10d6ad1b04..0000000000
--- a/Externals/WiiUseSrc/Src/dynamics.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * 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 .
- *
- * $Header$
- *
- */
-
-/**
- * @file
- * @brief Handles the dynamics of the wiimote.
- *
- * The file includes functions that handle the dynamics
- * of the wiimote. Such dynamics include orientation and
- * motion sensing.
- */
-
-#include
-#include
-#include
-
-#ifdef WIN32
- #include
-#endif
-
-#include "definitions.h"
-#include "wiiuse_internal.h"
-#include "ir.h"
-#include "dynamics.h"
-
-/**
- * @brief Calculate the roll, pitch, yaw.
- *
- * @param ac An accelerometer (accel_t) structure.
- * @param accel [in] Pointer to a vec3b_t structure that holds the raw acceleration data.
- * @param orient [out] Pointer to a orient_t structure that will hold the orientation data.
- * @param rorient [out] Pointer to a orient_t structure that will hold the non-smoothed orientation data.
- * @param smooth If smoothing should be performed on the angles calculated. 1 to enable, 0 to disable.
- *
- * Given the raw acceleration data from the accelerometer struct, calculate
- * the orientation of the device and set it in the \a orient parameter.
- */
-void calculate_orientation(struct accel_t* ac, struct vec3b_t* accel, struct orient_t* orient, int smooth) {
- float xg, yg, zg;
- float x, y, z;
-
- /*
- * roll - use atan(z / x) [ ranges from -180 to 180 ]
- * pitch - use atan(z / y) [ ranges from -180 to 180 ]
- * yaw - impossible to tell without IR
- */
-
- /* yaw - set to 0, IR will take care of it if it's enabled */
- orient->yaw = 0.0f;
-
- /* find out how much it has to move to be 1g */
- xg = (float)ac->cal_g.x;
- yg = (float)ac->cal_g.y;
- zg = (float)ac->cal_g.z;
-
- /* find out how much it actually moved and normalize to +/- 1g */
- x = ((float)accel->x - (float)ac->cal_zero.x) / xg;
- y = ((float)accel->y - (float)ac->cal_zero.y) / yg;
- z = ((float)accel->z - (float)ac->cal_zero.z) / zg;
-
- /* make sure x,y,z are between -1 and 1 for the tan functions */
- if (x < -1.0f) x = -1.0f;
- else if (x > 1.0f) x = 1.0f;
- if (y < -1.0f) y = -1.0f;
- else if (y > 1.0f) y = 1.0f;
- if (z < -1.0f) z = -1.0f;
- else if (z > 1.0f) z = 1.0f;
-
- /* if it is over 1g then it is probably accelerating and not reliable */
- if (abs(accel->x - ac->cal_zero.x) <= ac->cal_g.x) {
- /* roll */
- x = RAD_TO_DEGREE(atan2f(x, z));
-
- orient->roll = x;
- orient->a_roll = x;
- }
-
- if (abs(accel->y - ac->cal_zero.y) <= ac->cal_g.y) {
- /* pitch */
- y = RAD_TO_DEGREE(atan2f(y, z));
-
- orient->pitch = y;
- orient->a_pitch = y;
- }
-
- /* smooth the angles if enabled */
- if (smooth) {
- apply_smoothing(ac, orient, SMOOTH_ROLL);
- apply_smoothing(ac, orient, SMOOTH_PITCH);
- }
-}
-
-
-/**
- * @brief Calculate the gravity forces on each axis.
- *
- * @param ac An accelerometer (accel_t) structure.
- * @param accel [in] Pointer to a vec3b_t structure that holds the raw acceleration data.
- * @param gforce [out] Pointer to a gforce_t structure that will hold the gravity force data.
- */
-void calculate_gforce(struct accel_t* ac, struct vec3b_t* accel, struct gforce_t* gforce) {
- float xg, yg, zg;
-
- /* find out how much it has to move to be 1g */
- xg = (float)ac->cal_g.x;
- yg = (float)ac->cal_g.y;
- zg = (float)ac->cal_g.z;
-
- /* find out how much it actually moved and normalize to +/- 1g */
- gforce->x = ((float)accel->x - (float)ac->cal_zero.x) / xg;
- gforce->y = ((float)accel->y - (float)ac->cal_zero.y) / yg;
- gforce->z = ((float)accel->z - (float)ac->cal_zero.z) / zg;
-}
-
-
-/**
- * @brief Calculate the angle and magnitude of a joystick.
- *
- * @param js [out] Pointer to a joystick_t structure.
- * @param x The raw x-axis value.
- * @param y The raw y-axis value.
- */
-void calc_joystick_state(struct joystick_t* js, float x, float y) {
- float rx, ry, ang;
-
- /*
- * Since the joystick center may not be exactly:
- * (min + max) / 2
- * Then the range from the min to the center and the center to the max
- * may be different.
- * Because of this, depending on if the current x or y value is greater
- * or less than the assoicated axis center value, it needs to be interpolated
- * between the center and the minimum or maxmimum rather than between
- * the minimum and maximum.
- *
- * So we have something like this:
- * (x min) [-1] ---------*------ [0] (x center) [0] -------- [1] (x max)
- * Where the * is the current x value.
- * The range is therefore -1 to 1, 0 being the exact center rather than
- * the middle of min and max.
- */
- if (x == js->center.x)
- rx = 0;
- else if (x >= js->center.x)
- rx = ((float)(x - js->center.x) / (float)(js->max.x - js->center.x));
- else
- rx = ((float)(x - js->min.x) / (float)(js->center.x - js->min.x)) - 1.0f;
-
- if (y == js->center.y)
- ry = 0;
- else if (y >= js->center.y)
- ry = ((float)(y - js->center.y) / (float)(js->max.y - js->center.y));
- else
- ry = ((float)(y - js->min.y) / (float)(js->center.y - js->min.y)) - 1.0f;
-
- /* calculate the joystick angle and magnitude */
- ang = RAD_TO_DEGREE(atanf(ry / rx));
- ang -= 90.0f;
- if (rx < 0.0f)
- ang -= 180.0f;
- js->ang = absf(ang);
- js->mag = (float) sqrt((rx * rx) + (ry * ry));
-}
-
-
-void apply_smoothing(struct accel_t* ac, struct orient_t* orient, int type) {
- switch (type) {
- case SMOOTH_ROLL:
- {
- /* it's possible last iteration was nan or inf, so set it to 0 if that happened */
- if (isnan(ac->st_roll) || isinf(ac->st_roll))
- ac->st_roll = 0.0f;
-
- /*
- * If the sign changes (which will happen if going from -180 to 180)
- * or from (-1 to 1) then don't smooth, just use the new angle.
- */
- if (((ac->st_roll < 0) && (orient->roll > 0)) || ((ac->st_roll > 0) && (orient->roll < 0))) {
- ac->st_roll = orient->roll;
- } else {
- orient->roll = ac->st_roll + (ac->st_alpha * (orient->a_roll - ac->st_roll));
- ac->st_roll = orient->roll;
- }
-
- return;
- }
-
- case SMOOTH_PITCH:
- {
- if (isnan(ac->st_pitch) || isinf(ac->st_pitch))
- ac->st_pitch = 0.0f;
-
- if (((ac->st_pitch < 0) && (orient->pitch > 0)) || ((ac->st_pitch > 0) && (orient->pitch < 0))) {
- ac->st_pitch = orient->pitch;
- } else {
- orient->pitch = ac->st_pitch + (ac->st_alpha * (orient->a_pitch - ac->st_pitch));
- ac->st_pitch = orient->pitch;
- }
-
- return;
- }
- }
-}
-
-
-void calc_balanceboard_state(struct wii_board_t *wb)
-{
- /*
- Interpolate values
- Calculations borrowed from wiili.org - No names to mention sadly :( http://www.wiili.org/index.php/Wii_Balance_Board_PC_Drivers
- */
-
- if(wb->rtrctr[1])
- {
- wb->tr = 17.0f*(float)(wb->rtr-wb->ctr[0])/(float)(wb->ctr[1]-wb->ctr[0]);
- }
- else
- {
- wb->tr = 17.0f*(float)(wb->rtr-wb->ctr[1])/(float)(wb->ctr[2]-wb->ctr[1]) + 17.0f;
- }
-
- if(wb->rtlctl[1])
- {
- wb->tl = 17.0f*(float)(wb->rtl-wb->ctl[0])/(float)(wb->ctl[1]-wb->ctl[0]);
- }
- else
- {
- wb->tl = 17.0f*(float)(wb->rtl-wb->ctl[1])/(float)(wb->ctl[2]-wb->ctl[1]) + 17.0f;
- }
-
- if(wb->rbrcbr[1])
- {
- wb->br = 17.0f*(float)(wb->rbr-wb->cbr[0])/(float)(wb->cbr[1]-wb->cbr[0]);
- }
- else
- {
- wb->br = 17.0f*(float)(wb->rbr-wb->cbr[1])/(float)(wb->cbr[2]-wb->cbr[1]) + 17.0f;
- }
-
- if(wb->rblcbl[1])
- {
- wb->bl = 17.0f*(float)(wb->rbl-wb->cbl[0])/(float)(wb->cbl[1]-wb->cbl[0]);
- }
- else
- {
- wb->bl = 17.0f*(float)(wb->rbl-wb->cbl[1])/(float)(wb->cbl[2]-wb->cbl[1]) + 17.0f;
- }
-
- wb->x = (wb->tr+wb->br) - (wb->tl+wb->bl)/2.0f;
- wb->y = (wb->bl+wb->br) - (wb->tl+wb->tr)/2.0f;
-}
diff --git a/Externals/WiiUseSrc/Src/dynamics.h b/Externals/WiiUseSrc/Src/dynamics.h
deleted file mode 100644
index 66ea8a4a5d..0000000000
--- a/Externals/WiiUseSrc/Src/dynamics.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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 .
- *
- * $Header$
- *
- */
-
-/**
- * @file
- * @brief Handles the dynamics of the wiimote.
- *
- * The file includes functions that handle the dynamics
- * of the wiimote. Such dynamics include orientation and
- * motion sensing.
- */
-
-#ifndef DYNAMICS_H_INCLUDED
-#define DYNAMICS_H_INCLUDED
-
-#include "wiiuse_internal.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void calculate_orientation(struct accel_t* ac, struct vec3b_t* accel, struct orient_t* orient, int smooth);
-void calculate_gforce(struct accel_t* ac, struct vec3b_t* accel, struct gforce_t* gforce);
-void calc_joystick_state(struct joystick_t* js, float x, float y);
-void apply_smoothing(struct accel_t* ac, struct orient_t* orient, int type);
-void calc_balanceboard_state(struct wii_board_t *wb);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // DYNAMICS_H_INCLUDED
diff --git a/Externals/WiiUseSrc/Src/events.c b/Externals/WiiUseSrc/Src/events.c
deleted file mode 100644
index 3d015f6972..0000000000
--- a/Externals/WiiUseSrc/Src/events.c
+++ /dev/null
@@ -1,810 +0,0 @@
-/*
- * 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 .
- *
- * $Header$
- *
- */
-
-/**
- * @file
- * @brief Handles wiimote events.
- *
- * The file includes functions that handle the events
- * that are sent from the wiimote to us.
- */
-
-#include
-
-#ifndef WIN32
- #include
- #include
- #include
-#else
- #include
-#endif
-
-#include
-#include
-#include
-
-#include "definitions.h"
-#include "io.h"
-#include "wiiuse_internal.h"
-#include "dynamics.h"
-#include "ir.h"
-#include "nunchuk.h"
-#include "classic.h"
-#include "guitar_hero_3.h"
-#include "wiiboard.h"
-#include "events.h"
-
-static void idle_cycle(struct wiimote_t* wm);
-static void clear_dirty_reads(struct wiimote_t* wm);
-static void propagate_event(struct wiimote_t* wm, byte event, byte* msg);
-static void event_data_read(struct wiimote_t* wm, byte* msg);
-static void event_status(struct wiimote_t* wm, byte* msg);
-static void handle_expansion(struct wiimote_t* wm, byte* msg);
-
-static void save_state(struct wiimote_t* wm);
-static int state_changed(struct wiimote_t* wm);
-
-/**
- * @brief Poll the wiimotes for any events.
- *
- * @param wm An array of pointers to wiimote_t structures.
- * @param wiimotes The number of wiimote_t structures in the \a wm array.
- *
- * @return Returns number of wiimotes that an event has occured on.
- *
- * It is necessary to poll the wiimote devices for events
- * that occur. If an event occurs on a particular wiimote,
- * the event variable will be set.
- */
-int wiiuse_poll(struct wiimote_t** wm, int wiimotes) {
- int evnt = 0;
-
- /*
- * Windows, Unix and Apple
- */
- int i;
-
- if (!wm) return 0;
-
- for (i = 0; i < wiimotes; ++i) {
- wm[i]->event = WIIUSE_NONE;
-
- if (wiiuse_io_read(wm[i])) {
- /* propagate the event */
- propagate_event(wm[i], wm[i]->event_buf[1], wm[i]->event_buf+2);
- evnt += (wm[i]->event != WIIUSE_NONE);
-
- /* clear out the event buffer */
- memset(wm[i]->event_buf, 0, sizeof(wm[i]->event_buf));
- } else {
- idle_cycle(wm[i]);
- }
- }
-
- return evnt;
-}
-
-
-/**
- * @brief Called on a cycle where no significant change occurs.
- *
- * @param wm Pointer to a wiimote_t structure.
- */
-static void idle_cycle(struct wiimote_t* wm) {
- /*
- * Smooth the angles.
- *
- * This is done to make sure that on every cycle the orientation
- * angles are smoothed. Normally when an event occurs the angles
- * are updated and smoothed, but if no packet comes in then the
- * angles remain the same. This means the angle wiiuse reports
- * is still an old value. Smoothing needs to be applied in this
- * case in order for the angle it reports to converge to the true
- * angle of the device.
- */
- if (WIIUSE_USING_ACC(wm) && WIIMOTE_IS_FLAG_SET(wm, WIIUSE_SMOOTHING)) {
- apply_smoothing(&wm->accel_calib, &wm->orient, SMOOTH_ROLL);
- apply_smoothing(&wm->accel_calib, &wm->orient, SMOOTH_PITCH);
- }
-
- /* clear out any old read requests */
- clear_dirty_reads(wm);
-}
-
-
-/**
- * @brief Clear out all old 'dirty' read requests.
- *
- * @param wm Pointer to a wiimote_t structure.
- */
-static void clear_dirty_reads(struct wiimote_t* wm) {
- struct read_req_t* req = wm->read_req;
-
- while (req && req->dirty) {
- WIIUSE_DEBUG("Cleared old read request for address: %x", req->addr);
-
- wm->read_req = req->next;
- free(req);
- req = wm->read_req;
- }
-}
-
-
-/**
- * @brief Analyze the event that occured on a wiimote.
- *
- * @param wm An array of pointers to wiimote_t structures.
- * @param event The event that occured.
- * @param msg The message specified in the event packet.
- *
- * Pass the event to the registered event callback.
- */
-static void propagate_event(struct wiimote_t* wm, byte event, byte* msg) {
- save_state(wm);
-
- switch (event) {
- case WM_RPT_BTN:
- {
- /* button */
- wiiuse_pressed_buttons(wm, msg);
- break;
- }
- case WM_RPT_BTN_ACC:
- {
- /* button - motion */
- wiiuse_pressed_buttons(wm, msg);
-
- wm->accel.x = msg[2];
- wm->accel.y = msg[3];
- wm->accel.z = msg[4];
-
- /* calculate the remote orientation */
- calculate_orientation(&wm->accel_calib, &wm->accel, &wm->orient, WIIMOTE_IS_FLAG_SET(wm, WIIUSE_SMOOTHING));
-
- /* calculate the gforces on each axis */
- calculate_gforce(&wm->accel_calib, &wm->accel, &wm->gforce);
-
- break;
- }
- case WM_RPT_READ:
- {
- /* data read */
- event_data_read(wm, msg);
-
- /* yeah buttons may be pressed, but this wasn't an "event" */
- return;
- }
- case WM_RPT_CTRL_STATUS:
- {
- /* controller status */
- event_status(wm, msg);
-
- /* don't execute the event callback */
- return;
- }
- case WM_RPT_BTN_EXP:
- {
- /* button - expansion */
- wiiuse_pressed_buttons(wm, msg);
- handle_expansion(wm, msg+2);
-
- break;
- }
- case WM_RPT_BTN_ACC_EXP:
- {
- /* button - motion - expansion */
- wiiuse_pressed_buttons(wm, msg);
-
- wm->accel.x = msg[2];
- wm->accel.y = msg[3];
- wm->accel.z = msg[4];
-
- calculate_orientation(&wm->accel_calib, &wm->accel, &wm->orient, WIIMOTE_IS_FLAG_SET(wm, WIIUSE_SMOOTHING));
- calculate_gforce(&wm->accel_calib, &wm->accel, &wm->gforce);
-
- handle_expansion(wm, msg+5);
-
- break;
- }
- case WM_RPT_BTN_ACC_IR:
- {
- /* button - motion - ir */
- wiiuse_pressed_buttons(wm, msg);
-
- wm->accel.x = msg[2];
- wm->accel.y = msg[3];
- wm->accel.z = msg[4];
-
- calculate_orientation(&wm->accel_calib, &wm->accel, &wm->orient, WIIMOTE_IS_FLAG_SET(wm, WIIUSE_SMOOTHING));
- calculate_gforce(&wm->accel_calib, &wm->accel, &wm->gforce);
-
- /* ir */
- calculate_extended_ir(wm, msg+5);
-
- break;
- }
- case WM_RPT_BTN_IR_EXP:
- {
- /* button - ir - expansion */
- wiiuse_pressed_buttons(wm, msg);
- handle_expansion(wm, msg+12);
-
- /* ir */
- calculate_basic_ir(wm, msg+2);
-
- break;
- }
- case WM_RPT_BTN_ACC_IR_EXP:
- {
- /* button - motion - ir - expansion */
- wiiuse_pressed_buttons(wm, msg);
-
- wm->accel.x = msg[2];
- wm->accel.y = msg[3];
- wm->accel.z = msg[4];
-
- calculate_orientation(&wm->accel_calib, &wm->accel, &wm->orient, WIIMOTE_IS_FLAG_SET(wm, WIIUSE_SMOOTHING));
- calculate_gforce(&wm->accel_calib, &wm->accel, &wm->gforce);
-
- handle_expansion(wm, msg+15);
-
- /* ir */
- calculate_basic_ir(wm, msg+5);
-
- break;
- }
- case WM_RPT_WRITE:
- {
- /* write feedback - safe to skip */
- break;
- }
- default:
- {
- WIIUSE_WARNING("Unknown event, can not handle it [Code 0x%x].", event);
- return;
- }
- }
-
- /* was there an event? */
- if (state_changed(wm))
- wm->event = WIIUSE_EVENT;
-}
-
-
-/**
- * @brief Find what buttons are pressed.
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param msg The message specified in the event packet.
- */
-void wiiuse_pressed_buttons(struct wiimote_t* wm, byte* msg) {
- short now;
-
- /* convert to big endian */
- now = BIG_ENDIAN_SHORT(*(short*)msg) & WIIMOTE_BUTTON_ALL;
-
- /* pressed now & were pressed, then held */
- wm->btns_held = (now & wm->btns);
-
- /* were pressed or were held & not pressed now, then released */
- wm->btns_released = ((wm->btns | wm->btns_held) & ~now);
-
- /* buttons pressed now */
- wm->btns = now;
-}
-
-
-/**
- * @brief Received a data packet from a read request.
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param msg The message specified in the event packet.
- *
- * Data from the wiimote comes in packets. If the requested
- * data segment size is bigger than one packet can hold then
- * several packets will be received. These packets are first
- * reassembled into one, then the registered callback function
- * that handles data reads is invoked.
- */
-static void event_data_read(struct wiimote_t* wm, byte* msg) {
- /* we must always assume the packet received is from the most recent request */
- byte err;
- byte len;
- unsigned short offset;
- struct read_req_t* req = wm->read_req;
-
- wiiuse_pressed_buttons(wm, msg);
-
- /* find the next non-dirty request */
- while (req && req->dirty)
- req = req->next;
-
- /* if we don't have a request out then we didn't ask for this packet */
- if (!req) {
- WIIUSE_WARNING("Received data packet when no request was made.");
- return;
- }
-
- err = msg[2] & 0x0F;
-
- if (err == 0x08)
- WIIUSE_WARNING("Unable to read data - address does not exist.");
- else if (err == 0x07)
- WIIUSE_WARNING("Unable to read data - address is for write-only registers.");
- else if (err)
- WIIUSE_WARNING("Unable to read data - unknown error code %x.", err);
-
- if (err) {
- /* this request errored out, so skip it and go to the next one */
-
- /* delete this request */
- wm->read_req = req->next;
- free(req);
-
- /* if another request exists send it to the wiimote */
- if (wm->read_req)
- wiiuse_send_next_pending_read_request(wm);
-
- return;
- }
-
- len = ((msg[2] & 0xF0) >> 4) + 1;
- offset = BIG_ENDIAN_SHORT(*(unsigned short*)(msg + 3));
- req->addr = (req->addr & 0xFFFF);
-
- req->wait -= len;
- if (req->wait >= req->size)
- /* this should never happen */
- req->wait = 0;
-
- WIIUSE_DEBUG("Received read packet:");
- WIIUSE_DEBUG(" Packet read offset: %i bytes", offset);
- WIIUSE_DEBUG(" Request read offset: %i bytes", req->addr);
- WIIUSE_DEBUG(" Read offset into buf: %i bytes", offset - req->addr);
- WIIUSE_DEBUG(" Read data size: %i bytes", len);
- WIIUSE_DEBUG(" Still need: %i bytes", req->wait);
-
- /* reconstruct this part of the data */
- memcpy((req->buf + offset - req->addr), (msg + 5), len);
-
- #ifdef WITH_WIIUSE_DEBUG
- {
- int i = 0;
- printf("Read: ");
- for (; i < req->size - req->wait; ++i)
- printf("%x ", req->buf[i]);
- printf("\n");
- }
- #endif
-
- /* if all data has been received, execute the read event callback or generate event */
- if (!req->wait) {
- if (req->cb) {
- /* this was a callback, so invoke it now */
- req->cb(wm, req->buf, req->size);
-
- /* delete this request */
- wm->read_req = req->next;
- free(req);
- } else {
- /*
- * This should generate an event.
- * We need to leave the event in the array so the client
- * can access it still. We'll flag is as being 'dirty'
- * and give the client one cycle to use it. Next event
- * we will remove it from the list.
- */
- wm->event = WIIUSE_READ_DATA;
- req->dirty = 1;
- }
-
- /* if another request exists send it to the wiimote */
- if (wm->read_req)
- wiiuse_send_next_pending_read_request(wm);
- }
-}
-
-
-/**
- * @brief Read the controller status.
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param msg The message specified in the event packet.
- *
- * Read the controller status and execute the registered status callback.
- */
-static void event_status(struct wiimote_t* wm, byte* msg) {
- int led[4] = {0};
- int attachment = 0;
- int ir = 0;
- int exp_changed = 0;
-
- /*
- * An event occured.
- * This event can be overwritten by a more specific
- * event type during a handshake or expansion removal.
- */
- wm->event = WIIUSE_STATUS;
-
- wiiuse_pressed_buttons(wm, msg);
-
- /* find what LEDs are lit */
- if (msg[2] & WM_CTRL_STATUS_BYTE1_LED_1) led[0] = 1;
- if (msg[2] & WM_CTRL_STATUS_BYTE1_LED_2) led[1] = 1;
- if (msg[2] & WM_CTRL_STATUS_BYTE1_LED_3) led[2] = 1;
- if (msg[2] & WM_CTRL_STATUS_BYTE1_LED_4) led[3] = 1;
-
- /* is an attachment connected to the expansion port? */
- if ((msg[2] & WM_CTRL_STATUS_BYTE1_ATTACHMENT) == WM_CTRL_STATUS_BYTE1_ATTACHMENT)
- attachment = 1;
-
- /* is the speaker enabled? */
- if ((msg[2] & WM_CTRL_STATUS_BYTE1_SPEAKER_ENABLED) == WM_CTRL_STATUS_BYTE1_SPEAKER_ENABLED)
- WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_SPEAKER);
-
- /* is IR sensing enabled? */
- if ((msg[2] & WM_CTRL_STATUS_BYTE1_IR_ENABLED) == WM_CTRL_STATUS_BYTE1_IR_ENABLED)
- ir = 1;
-
- /* find the battery level and normalize between 0 and 1 */
- wm->battery_level = (msg[5] / (float)WM_MAX_BATTERY_CODE);
-
- /* expansion port */
- if (attachment && !WIIMOTE_IS_SET(wm, WIIMOTE_STATE_EXP)) {
- /* send the initialization code for the attachment */
- handshake_expansion(wm, NULL, 0);
- exp_changed = 1;
- } else if (!attachment && WIIMOTE_IS_SET(wm, WIIMOTE_STATE_EXP)) {
- /* attachment removed */
- disable_expansion(wm);
- exp_changed = 1;
- }
-
- if (!attachment) {
- WIIUSE_DEBUG("Setting timeout to normal %i ms.", wm->normal_timeout);
- wm->timeout = wm->normal_timeout;
- }
-
- /*
- * From now on the remote will only send status packets.
- * We need to send a WIIMOTE_CMD_REPORT_TYPE packet to
- * reenable other incoming reports.
- */
- if (exp_changed && WIIMOTE_IS_SET(wm, WIIMOTE_STATE_IR)) {
- /*
- * Since the expansion status changed IR needs to
- * be reset for the new IR report mode.
- */
- WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_IR);
- wiiuse_set_ir(wm, 1);
- } else
- wiiuse_set_report_type(wm);
-}
-
-
-/**
- * @brief Handle data from the expansion.
- *
- * @param wm A pointer to a wiimote_t structure.
- * @param msg The message specified in the event packet for the expansion.
- */
-static void handle_expansion(struct wiimote_t* wm, byte* msg) {
- switch (wm->expansion.type) {
- case EXP_NUNCHUK:
- nunchuk_event(&wm->expansion.nunchuk, msg);
- break;
- case EXP_CLASSIC:
- classic_ctrl_event(&wm->expansion.classic, msg);
- break;
- case EXP_GUITAR_HERO_3:
- guitar_hero_3_event(&wm->expansion.gh3, msg);
- break;
- case EXP_WII_BOARD:
- wii_board_event(&wm->expansion.wb, msg);
- break;
- default:
- break;
- }
-}
-
-
-/**
- * @brief Handle the handshake data from the expansion device.
- *
- * @param wm A pointer to a wiimote_t structure.
- * @param data The data read in from the device.
- * @param len The length of the data block, in bytes.
- *
- * Tries to determine what kind of expansion was attached
- * and invoke the correct handshake function.
- *
- * If the data is NULL then this function will try to start
- * a handshake with the expansion.
- */
-void handshake_expansion(struct wiimote_t* wm, byte* data, unsigned short len) {
- int wid;
-
- if (!data) {
- byte* handshake_buf;
- byte buf = 0x00;
-
- if (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_EXP))
- disable_expansion(wm);
-
- /* increase the timeout until the handshake completes */
- WIIUSE_DEBUG("Setting timeout to expansion %i ms.", wm->exp_timeout);
- wm->timeout = wm->exp_timeout;
-
- wiiuse_write_data(wm, WM_EXP_MEM_ENABLE, &buf, 1);
-
- /* get the calibration data */
- handshake_buf = (byte *)malloc(EXP_HANDSHAKE_LEN * sizeof(byte));
- wiiuse_read_data_cb(wm, handshake_expansion, handshake_buf, WM_EXP_MEM_CALIBR, EXP_HANDSHAKE_LEN);
-
- /* tell the wiimote to send expansion data */
- WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_EXP);
-
- return;
- }
-
- wid = BIG_ENDIAN_LONG(*(int*)(data + 220));
-
- /* call the corresponding handshake function for this expansion */
- switch (wid) {
- case EXP_ID_CODE_NUNCHUK:
- {
- if (nunchuk_handshake(wm, &wm->expansion.nunchuk, data, len))
- wm->event = WIIUSE_NUNCHUK_INSERTED;
- break;
- }
- case EXP_ID_CODE_CLASSIC_CONTROLLER:
- {
- if (classic_ctrl_handshake(wm, &wm->expansion.classic, data, len))
- wm->event = WIIUSE_CLASSIC_CTRL_INSERTED;
- break;
- }
- case EXP_ID_CODE_GUITAR:
- {
- if (guitar_hero_3_handshake(wm, &wm->expansion.gh3, data, len))
- wm->event = WIIUSE_GUITAR_HERO_3_CTRL_INSERTED;
- break;
- }
- case EXP_ID_CODE_WII_BOARD:
- {
- if (wii_board_handshake(wm, &wm->expansion.wb, data, len))
- wm->event = WIIUSE_WII_BOARD_CTRL_INSERTED;
- break;
- }
- default:
- {
- WIIUSE_WARNING("Unknown expansion type. Code: 0x%x", wid);
- break;
- }
- }
-
- free(data);
-}
-
-
-
-/**
- * @brief Disable the expansion device if it was enabled.
- *
- * @param wm A pointer to a wiimote_t structure.
- * @param data The data read in from the device.
- * @param len The length of the data block, in bytes.
- *
- * If the data is NULL then this function will try to start
- * a handshake with the expansion.
- */
-void disable_expansion(struct wiimote_t* wm) {
- if (!WIIMOTE_IS_SET(wm, WIIMOTE_STATE_EXP))
- return;
-
- /* tell the assoicated module the expansion was removed */
- switch (wm->expansion.type) {
- case EXP_NUNCHUK:
- nunchuk_disconnected(&wm->expansion.nunchuk);
- wm->event = WIIUSE_NUNCHUK_REMOVED;
- break;
- case EXP_CLASSIC:
- classic_ctrl_disconnected(&wm->expansion.classic);
- wm->event = WIIUSE_CLASSIC_CTRL_REMOVED;
- break;
- case EXP_GUITAR_HERO_3:
- guitar_hero_3_disconnected(&wm->expansion.gh3);
- wm->event = WIIUSE_GUITAR_HERO_3_CTRL_REMOVED;
- break;
- case EXP_WII_BOARD:
- wii_board_disconnected(&wm->expansion.wb);
- wm->event = WIIUSE_WII_BOARD_CTRL_REMOVED;
- break;
- default:
- break;
- }
-
- WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_EXP);
- wm->expansion.type = EXP_NONE;
-
-}
-
-
-/**
- * @brief Save important state data.
- * @param wm A pointer to a wiimote_t structure.
- */
-static void save_state(struct wiimote_t* wm) {
- /* wiimote */
- wm->lstate.btns = wm->btns;
- wm->lstate.accel = wm->accel;
-
- /* ir */
- if (WIIUSE_USING_IR(wm)) {
- wm->lstate.ir_ax = wm->ir.ax;
- wm->lstate.ir_ay = wm->ir.ay;
- wm->lstate.ir_distance = wm->ir.distance;
- }
-
- /* expansion */
- switch (wm->expansion.type) {
- case EXP_NUNCHUK:
- wm->lstate.exp_ljs_ang = wm->expansion.nunchuk.js.ang;
- wm->lstate.exp_ljs_mag = wm->expansion.nunchuk.js.mag;
- wm->lstate.exp_btns = wm->expansion.nunchuk.btns;
- wm->lstate.exp_accel = wm->expansion.nunchuk.accel;
- break;
-
- case EXP_CLASSIC:
- wm->lstate.exp_ljs_ang = wm->expansion.classic.ljs.ang;
- wm->lstate.exp_ljs_mag = wm->expansion.classic.ljs.mag;
- wm->lstate.exp_rjs_ang = wm->expansion.classic.rjs.ang;
- wm->lstate.exp_rjs_mag = wm->expansion.classic.rjs.mag;
- wm->lstate.exp_r_shoulder = wm->expansion.classic.r_shoulder;
- wm->lstate.exp_l_shoulder = wm->expansion.classic.l_shoulder;
- wm->lstate.exp_btns = wm->expansion.classic.btns;
- break;
-
- case EXP_GUITAR_HERO_3:
- wm->lstate.exp_ljs_ang = wm->expansion.gh3.js.ang;
- wm->lstate.exp_ljs_mag = wm->expansion.gh3.js.mag;
- wm->lstate.exp_r_shoulder = wm->expansion.gh3.whammy_bar;
- wm->lstate.exp_btns = wm->expansion.gh3.btns;
- break;
- case EXP_NONE:
- break;
- }
-}
-
-
-/**
- * @brief Determine if the current state differs significantly from the previous.
- * @param wm A pointer to a wiimote_t structure.
- * @return 1 if a significant change occured, 0 if not.
- */
-static int state_changed(struct wiimote_t* wm) {
- #define STATE_CHANGED(a, b) if (a != b) return 1
-
- #define CROSS_THRESH(last, now, thresh) \
- do { \
- if (WIIMOTE_IS_FLAG_SET(wm, WIIUSE_ORIENT_THRESH)) { \
- if ((diff_f(last.roll, now.roll) >= thresh) || \
- (diff_f(last.pitch, now.pitch) >= thresh) || \
- (diff_f(last.yaw, now.yaw) >= thresh)) \
- { \
- last = now; \
- return 1; \
- } \
- } else { \
- if (last.roll != now.roll) return 1; \
- if (last.pitch != now.pitch) return 1; \
- if (last.yaw != now.yaw) return 1; \
- } \
- } while (0)
-
- #define CROSS_THRESH_XYZ(last, now, thresh) \
- do { \
- if (WIIMOTE_IS_FLAG_SET(wm, WIIUSE_ORIENT_THRESH)) { \
- if ((diff_f(last.x, now.x) >= thresh) || \
- (diff_f(last.y, now.y) >= thresh) || \
- (diff_f(last.z, now.z) >= thresh)) \
- { \
- last = now; \
- return 1; \
- } \
- } else { \
- if (last.x != now.x) return 1; \
- if (last.y != now.y) return 1; \
- if (last.z != now.z) return 1; \
- } \
- } while (0)
-
- /* ir */
- if (WIIUSE_USING_IR(wm)) {
- STATE_CHANGED(wm->lstate.ir_ax, wm->ir.ax);
- STATE_CHANGED(wm->lstate.ir_ay, wm->ir.ay);
- STATE_CHANGED(wm->lstate.ir_distance, wm->ir.distance);
- }
-
- /* accelerometer */
- if (WIIUSE_USING_ACC(wm)) {
- /* raw accelerometer */
- CROSS_THRESH_XYZ(wm->lstate.accel, wm->accel, wm->accel_threshold);
-
- /* orientation */
- CROSS_THRESH(wm->lstate.orient, wm->orient, wm->orient_threshold);
- }
-
- /* expansion */
- switch (wm->expansion.type) {
- case EXP_NUNCHUK:
- {
- STATE_CHANGED(wm->lstate.exp_ljs_ang, wm->expansion.nunchuk.js.ang);
- STATE_CHANGED(wm->lstate.exp_ljs_mag, wm->expansion.nunchuk.js.mag);
- STATE_CHANGED(wm->lstate.exp_btns, wm->expansion.nunchuk.btns);
-
- CROSS_THRESH(wm->lstate.exp_orient, wm->expansion.nunchuk.orient, wm->expansion.nunchuk.orient_threshold);
- CROSS_THRESH_XYZ(wm->lstate.exp_accel, wm->expansion.nunchuk.accel, wm->expansion.nunchuk.accel_threshold);
- break;
- }
- case EXP_CLASSIC:
- {
- STATE_CHANGED(wm->lstate.exp_ljs_ang, wm->expansion.classic.ljs.ang);
- STATE_CHANGED(wm->lstate.exp_ljs_mag, wm->expansion.classic.ljs.mag);
- STATE_CHANGED(wm->lstate.exp_rjs_ang, wm->expansion.classic.rjs.ang);
- STATE_CHANGED(wm->lstate.exp_rjs_mag, wm->expansion.classic.rjs.mag);
- STATE_CHANGED(wm->lstate.exp_r_shoulder, wm->expansion.classic.r_shoulder);
- STATE_CHANGED(wm->lstate.exp_l_shoulder, wm->expansion.classic.l_shoulder);
- STATE_CHANGED(wm->lstate.exp_btns, wm->expansion.classic.btns);
- break;
- }
- case EXP_GUITAR_HERO_3:
- {
- STATE_CHANGED(wm->lstate.exp_ljs_ang, wm->expansion.gh3.js.ang);
- STATE_CHANGED(wm->lstate.exp_ljs_mag, wm->expansion.gh3.js.mag);
- STATE_CHANGED(wm->lstate.exp_r_shoulder, wm->expansion.gh3.whammy_bar);
- STATE_CHANGED(wm->lstate.exp_btns, wm->expansion.gh3.btns);
- break;
- }
- case EXP_WII_BOARD:
- {
- STATE_CHANGED(wm->expansion.wb.ltr,wm->expansion.wb.tr);
- STATE_CHANGED(wm->expansion.wb.ltl,wm->expansion.wb.tl);
- STATE_CHANGED(wm->expansion.wb.lbr,wm->expansion.wb.br);
- STATE_CHANGED(wm->expansion.wb.lbl,wm->expansion.wb.bl);
- break;
- }
- case EXP_NONE:
- {
- break;
- }
- }
-
- STATE_CHANGED(wm->lstate.btns, wm->btns);
-
- return 0;
-}
diff --git a/Externals/WiiUseSrc/Src/events.h b/Externals/WiiUseSrc/Src/events.h
deleted file mode 100644
index 12fa74281d..0000000000
--- a/Externals/WiiUseSrc/Src/events.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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 .
- *
- * $Header$
- *
- */
-
-/**
- * @file
- * @brief Handles wiimote events.
- *
- * The file includes functions that handle the events
- * that are sent from the wiimote to us.
- */
-
-#ifndef EVENTS_H_INCLUDED
-#define EVENTS_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void wiiuse_pressed_buttons(struct wiimote_t* wm, byte* msg);
-
-void handshake_expansion(struct wiimote_t* wm, byte* data, unsigned short len);
-void disable_expansion(struct wiimote_t* wm);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif // EVENTS_H_INCLUDED
diff --git a/Externals/WiiUseSrc/Src/guitar_hero_3.c b/Externals/WiiUseSrc/Src/guitar_hero_3.c
deleted file mode 100644
index 9a31ac06b9..0000000000
--- a/Externals/WiiUseSrc/Src/guitar_hero_3.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * 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 .
- *
- * $Header$
- *
- */
-
-/**
- * @file
- * @brief Guitar Hero 3 expansion device.
- */
-
-#include
-#include
-#include
-
-#ifdef WIN32
- #include
-#endif
-
-#include "definitions.h"
-#include "wiiuse_internal.h"
-#include "dynamics.h"
-#include "events.h"
-#include "guitar_hero_3.h"
-
-static void guitar_hero_3_pressed_buttons(struct guitar_hero_3_t* gh3, short now);
-
-/**
- * @brief Handle the handshake data from the guitar.
- *
- * @param cc A pointer to a classic_ctrl_t structure.
- * @param data The data read in from the device.
- * @param len The length of the data block, in bytes.
- *
- * @return Returns 1 if handshake was successful, 0 if not.
- */
-int guitar_hero_3_handshake(struct wiimote_t* wm, struct guitar_hero_3_t* gh3, byte* data, unsigned short len) {
- /*
- * The good fellows that made the Guitar Hero 3 controller
- * failed to factory calibrate the devices. There is no
- * calibration data on the device.
- */
-
- gh3->btns = 0;
- gh3->btns_held = 0;
- gh3->btns_released = 0;
- gh3->wb_raw = 0;
- gh3->whammy_bar = 0.0f;
- gh3->tb_raw = 0;
- gh3->touch_bar = -1;
-
- /* joystick stuff */
- gh3->js.max.x = GUITAR_HERO_3_JS_MAX_X;
- gh3->js.min.x = GUITAR_HERO_3_JS_MIN_X;
- gh3->js.center.x = GUITAR_HERO_3_JS_CENTER_X;
- gh3->js.max.y = GUITAR_HERO_3_JS_MAX_Y;
- gh3->js.min.y = GUITAR_HERO_3_JS_MIN_Y;
- gh3->js.center.y = GUITAR_HERO_3_JS_CENTER_Y;
-
- /* handshake done */
- wm->event = WIIUSE_GUITAR_HERO_3_CTRL_INSERTED;
- wm->expansion.type = EXP_GUITAR_HERO_3;
-
- wm->timeout = WIIMOTE_DEFAULT_TIMEOUT;
-
- return 1;
-}
-
-
-/**
- * @brief The guitar disconnected.
- *
- * @param cc A pointer to a classic_ctrl_t structure.
- */
-void guitar_hero_3_disconnected(struct guitar_hero_3_t* gh3) {
- memset(gh3, 0, sizeof(struct guitar_hero_3_t));
-}
-
-
-
-/**
- * @brief Handle guitar event.
- *
- * @param cc A pointer to a classic_ctrl_t structure.
- * @param msg The message specified in the event packet.
- */
-void guitar_hero_3_event(struct guitar_hero_3_t* gh3, byte* msg) {
- int i;
-
- /* decrypt data */
- for (i = 0; i < 6; ++i)
- msg[i] = (msg[i] ^ 0x17) + 0x17;
-
- guitar_hero_3_pressed_buttons(gh3, BIG_ENDIAN_SHORT(*(short*)(msg + 4)));
-
- gh3->js.pos.x = (msg[0] & GUITAR_HERO_3_JS_MASK);
- gh3->js.pos.y = (msg[1] & GUITAR_HERO_3_JS_MASK);
- gh3->tb_raw = (msg[2] & GUITAR_HERO_3_TOUCH_MASK);
- gh3->wb_raw = (msg[3] & GUITAR_HERO_3_WHAMMY_MASK);
-
- /* touch bar */
- gh3->touch_bar = 0;
- if (gh3->tb_raw > 0x1B)
- gh3->touch_bar = GUITAR_HERO_3_TOUCH_ORANGE;
- else if (gh3->tb_raw > 0x18)
- gh3->touch_bar = GUITAR_HERO_3_TOUCH_ORANGE | GUITAR_HERO_3_TOUCH_BLUE;
- else if (gh3->tb_raw > 0x15)
- gh3->touch_bar = GUITAR_HERO_3_TOUCH_BLUE;
- else if (gh3->tb_raw > 0x13)
- gh3->touch_bar = GUITAR_HERO_3_TOUCH_BLUE | GUITAR_HERO_3_TOUCH_YELLOW;
- else if (gh3->tb_raw > 0x10)
- gh3->touch_bar = GUITAR_HERO_3_TOUCH_YELLOW;
- else if (gh3->tb_raw > 0x0D)
- gh3->touch_bar = GUITAR_HERO_3_TOUCH_AVAILABLE;
- else if (gh3->tb_raw > 0x0B)
- gh3->touch_bar = GUITAR_HERO_3_TOUCH_YELLOW | GUITAR_HERO_3_TOUCH_RED;
- else if (gh3->tb_raw > 0x08)
- gh3->touch_bar = GUITAR_HERO_3_TOUCH_RED;
- else if (gh3->tb_raw > 0x05)
- gh3->touch_bar = GUITAR_HERO_3_TOUCH_RED | GUITAR_HERO_3_TOUCH_GREEN;
- else if (gh3->tb_raw > 0x02)
- gh3->touch_bar = GUITAR_HERO_3_TOUCH_GREEN;
-
- /* whammy bar */
- gh3->whammy_bar = (msg[3] - GUITAR_HERO_3_WHAMMY_BAR_MIN) / (float)(GUITAR_HERO_3_WHAMMY_BAR_MAX - GUITAR_HERO_3_WHAMMY_BAR_MIN);
-
- /* joy stick */
- calc_joystick_state(&gh3->js, gh3->js.pos.x, gh3->js.pos.y);
-
-}
-
-
-/**
- * @brief Find what buttons are pressed.
- *
- * @param cc A pointer to a classic_ctrl_t structure.
- * @param msg The message byte specified in the event packet.
- */
-static void guitar_hero_3_pressed_buttons(struct guitar_hero_3_t* gh3, short now) {
-
- /* message is inverted (0 is active, 1 is inactive) */
- now = ~now & GUITAR_HERO_3_BUTTON_ALL;
-
- /* preserve old btns pressed */
- gh3->btns_last = gh3->btns;
-
- /* pressed now & were pressed, then held */
- gh3->btns_held = (now & gh3->btns);
-
- /* were pressed or were held & not pressed now, then released */
- gh3->btns_released = ((gh3->btns | gh3->btns_held) & ~now);
-
- /* buttons pressed now */
- gh3->btns = now;
-}
diff --git a/Externals/WiiUseSrc/Src/guitar_hero_3.h b/Externals/WiiUseSrc/Src/guitar_hero_3.h
deleted file mode 100644
index bb58c60d8c..0000000000
--- a/Externals/WiiUseSrc/Src/guitar_hero_3.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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 .
- *
- * $Header$
- *
- */
-
-/**
- * @file
- * @brief Guitar Hero 3 expansion device.
- */
-
-#ifndef GUITAR_HERO_3_H_INCLUDED
-#define GUITAR_HERO_3_H_INCLUDED
-
-#include "wiiuse_internal.h"
-
-#define GUITAR_HERO_3_JS_MASK 0x3F
-#define GUITAR_HERO_3_TOUCH_MASK 0x1F
-#define GUITAR_HERO_3_WHAMMY_MASK 0x1F
-
-#define GUITAR_HERO_3_JS_MIN_X 0x05
-#define GUITAR_HERO_3_JS_MAX_X 0x3C
-#define GUITAR_HERO_3_JS_CENTER_X 0x20
-#define GUITAR_HERO_3_JS_MIN_Y 0x05
-#define GUITAR_HERO_3_JS_MAX_Y 0x3A
-#define GUITAR_HERO_3_JS_CENTER_Y 0x20
-#define GUITAR_HERO_3_WHAMMY_BAR_MIN 0x0F
-#define GUITAR_HERO_3_WHAMMY_BAR_MAX 0x1A
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int guitar_hero_3_handshake(struct wiimote_t* wm, struct guitar_hero_3_t* gh3, byte* data, unsigned short len);
-
-void guitar_hero_3_disconnected(struct guitar_hero_3_t* gh3);
-
-void guitar_hero_3_event(struct guitar_hero_3_t* gh3, byte* msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // GUITAR_HERO_3_H_INCLUDED
diff --git a/Externals/WiiUseSrc/Src/io.c b/Externals/WiiUseSrc/Src/io.c
index 65b362770a..3f3c3f4aa6 100644
--- a/Externals/WiiUseSrc/Src/io.c
+++ b/Externals/WiiUseSrc/Src/io.c
@@ -95,20 +95,10 @@ void wiiuse_handshake(struct wiimote_t* wm, byte* data, unsigned short len) {
accel->cal_g.x, accel->cal_g.y, accel->cal_g.z);
- /* request the status of the wiimote to see if there is an expansion */
- wiiuse_status(wm);
-
WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_HANDSHAKE);
WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_HANDSHAKE_COMPLETE);
wm->handshake_state++;
- /* now enable IR if it was set before the handshake completed */
- if (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_IR)) {
- WIIUSE_DEBUG("Handshake finished, enabling IR.");
- WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_IR);
- wiiuse_set_ir(wm, 1);
- }
-
break;
}
default:
diff --git a/Externals/WiiUseSrc/Src/io_win.c b/Externals/WiiUseSrc/Src/io_win.c
index 15c68b0d84..52a529e6d3 100644
--- a/Externals/WiiUseSrc/Src/io_win.c
+++ b/Externals/WiiUseSrc/Src/io_win.c
@@ -120,7 +120,7 @@ int wiiuse_find(struct wiimote_t** wm, int max_wiimotes, int timeout) {
continue;
}
- /* do the handshake */
+ /* do the handshake * shouldn't be needed as well, I'm gonna leave first it tho*/
wiiuse_handshake(wm[found], NULL, 0);
WIIUSE_INFO("Connected to wiimote [id %i].", wm[found]->unid);
diff --git a/Externals/WiiUseSrc/Src/ir.c b/Externals/WiiUseSrc/Src/ir.c
index ab1ba519e4..8f87f360eb 100644
--- a/Externals/WiiUseSrc/Src/ir.c
+++ b/Externals/WiiUseSrc/Src/ir.c
@@ -40,111 +40,8 @@
#include "definitions.h"
#include "wiiuse_internal.h"
-#include "ir.h"
static int get_ir_sens(struct wiimote_t* wm, const char** block1, const char** block2);
-static void interpret_ir_data(struct wiimote_t* wm);
-static void fix_rotated_ir_dots(struct ir_dot_t* dot, float ang);
-static void get_ir_dot_avg(struct ir_dot_t* dot, int* x, int* y);
-static void reorder_ir_dots(struct ir_dot_t* dot);
-static float ir_distance(struct ir_dot_t* dot);
-static int ir_correct_for_bounds(int* x, int* y, enum aspect_t aspect, int offset_x, int offset_y);
-static void ir_convert_to_vres(int* x, int* y, enum aspect_t aspect, unsigned int vx, unsigned int vy);
-
-
-/**
- * @brief Set if the wiimote should track IR targets.
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param status 1 to enable, 0 to disable.
- */
-void wiiuse_set_ir(struct wiimote_t* wm, int status) {
- byte buf;
- const char* block1 = NULL;
- const char* block2 = NULL;
- int ir_level;
-
- if (!wm)
- return;
-
- /*
- * Wait for the handshake to finish first.
- * When it handshake finishes and sees that
- * IR is enabled, it will call this function
- * again to actually enable IR.
- */
- if (!WIIMOTE_IS_SET(wm, WIIMOTE_STATE_HANDSHAKE_COMPLETE)) {
- WIIUSE_DEBUG("Tried to enable IR, will wait until handshake finishes.");
- WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_IR);
- return;
- }
-
- /*
- * Check to make sure a sensitivity setting is selected.
- */
- ir_level = get_ir_sens(wm, &block1, &block2);
- if (!ir_level) {
- WIIUSE_ERROR("No IR sensitivity setting selected.");
- return;
- }
-
- if (status) {
- /* if already enabled then stop */
- if (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_IR))
- return;
- WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_IR);
- } else {
- /* if already disabled then stop */
- if (!WIIMOTE_IS_SET(wm, WIIMOTE_STATE_IR))
- return;
- WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_IR);
- }
-
- /* set camera 1 and 2 */
- buf = (status ? 0x04 : 0x00);
- wiiuse_send(wm, WM_CMD_IR, &buf, 1);
- wiiuse_send(wm, WM_CMD_IR_2, &buf, 1);
-
- if (!status) {
- WIIUSE_DEBUG("Disabled IR cameras for wiimote id %i.", wm->unid);
- wiiuse_set_report_type(wm);
- return;
- }
-
- /* enable IR, set sensitivity */
- buf = 0x08;
- wiiuse_write_data(wm, WM_REG_IR, &buf, 1);
-
- /* wait for the wiimote to catch up */
- #ifndef WIN32
- usleep(50000);
- #else
- Sleep(50);
- #endif
-
- /* write sensitivity blocks */
- wiiuse_write_data(wm, WM_REG_IR_BLOCK1, (byte*)block1, 9);
- wiiuse_write_data(wm, WM_REG_IR_BLOCK2, (byte*)block2, 2);
-
- /* set the IR mode */
- if (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_EXP))
- buf = WM_IR_TYPE_BASIC;
- else
- buf = WM_IR_TYPE_EXTENDED;
- wiiuse_write_data(wm, WM_REG_IR_MODENUM, &buf, 1);
-
- #ifndef WIN32
- usleep(50000);
- #else
- Sleep(50);
- #endif
-
- /* set the wiimote report type */
- wiiuse_set_report_type(wm);
-
- WIIUSE_DEBUG("Enabled IR camera for wiimote id %i (sensitivity level %i).", wm->unid, ir_level);
-}
-
/**
* @brief Get the IR sensitivity settings.
@@ -184,19 +81,6 @@ static int get_ir_sens(struct wiimote_t* wm, const char** block1, const char** b
}
-/**
- * @brief Set the virtual screen resolution for IR tracking.
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param status 1 to enable, 0 to disable.
- */
-void wiiuse_set_ir_vres(struct wiimote_t* wm, unsigned int x, unsigned int y) {
- if (!wm) return;
-
- wm->ir.vres[0] = (x-1);
- wm->ir.vres[1] = (y-1);
-}
-
/**
* @brief Set the XY position for the IR cursor.
@@ -312,437 +196,3 @@ void wiiuse_set_ir_sensitivity(struct wiimote_t* wm, int level) {
WIIUSE_DEBUG("Set IR sensitivity to level %i (unid %i)", level, wm->unid);
}
-
-
-/**
- * @brief Calculate the data from the IR spots. Basic IR mode.
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param data Data returned by the wiimote for the IR spots.
- */
-void calculate_basic_ir(struct wiimote_t* wm, byte* data) {
- struct ir_dot_t* dot = wm->ir.dot;
- int i;
-
- dot[0].rx = 1023 - (data[0] | ((data[2] & 0x30) << 4));
- dot[0].ry = data[1] | ((data[2] & 0xC0) << 2);
-
- dot[1].rx = 1023 - (data[3] | ((data[2] & 0x03) << 8));
- dot[1].ry = data[4] | ((data[2] & 0x0C) << 6);
-
- dot[2].rx = 1023 - (data[5] | ((data[7] & 0x30) << 4));
- dot[2].ry = data[6] | ((data[7] & 0xC0) << 2);
-
- dot[3].rx = 1023 - (data[8] | ((data[7] & 0x03) << 8));
- dot[3].ry = data[9] | ((data[7] & 0x0C) << 6);
-
- /* set each IR spot to visible if spot is in range */
- for (i = 0; i < 4; ++i) {
- if (dot[i].ry == 1023)
- dot[i].visible = 0;
- else {
- dot[i].visible = 1;
- dot[i].size = 0; /* since we don't know the size, set it as 0 */
- }
- }
-
- interpret_ir_data(wm);
-}
-
-
-/**
- * @brief Calculate the data from the IR spots. Extended IR mode.
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param data Data returned by the wiimote for the IR spots.
- */
-void calculate_extended_ir(struct wiimote_t* wm, byte* data) {
- struct ir_dot_t* dot = wm->ir.dot;
- int i;
-
- for (i = 0; i < 4; ++i) {
- dot[i].rx = 1023 - (data[3*i] | ((data[(3*i)+2] & 0x30) << 4));
- dot[i].ry = data[(3*i)+1] | ((data[(3*i)+2] & 0xC0) << 2);
-
- dot[i].size = data[(3*i)+2] & 0x0F;
-
- /* if in range set to visible */
- if (dot[i].ry == 1023)
- dot[i].visible = 0;
- else
- dot[i].visible = 1;
- }
-
- interpret_ir_data(wm);
-}
-
-
-/**
- * @brief Interpret IR data into more user friendly variables.
- *
- * @param wm Pointer to a wiimote_t structure.
- */
-static void interpret_ir_data(struct wiimote_t* wm) {
- struct ir_dot_t* dot = wm->ir.dot;
- int i;
- float roll = 0.0f;
- int last_num_dots = wm->ir.num_dots;
-
- if (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_ACC))
- roll = wm->orient.roll;
-
- /* count visible dots */
- wm->ir.num_dots = 0;
- for (i = 0; i < 4; ++i) {
- if (dot[i].visible)
- wm->ir.num_dots++;
- }
-
- switch (wm->ir.num_dots) {
- case 0:
- {
- wm->ir.state = 0;
-
- /* reset the dot ordering */
- for (i = 0; i < 4; ++i)
- dot[i].order = 0;
-
- wm->ir.x = 0;
- wm->ir.y = 0;
- wm->ir.z = 0.0f;
-
- return;
- }
- case 1:
- {
- fix_rotated_ir_dots(wm->ir.dot, roll);
-
- if (wm->ir.state < 2) {
- /*
- * Only 1 known dot, so use just that.
- */
- for (i = 0; i < 4; ++i) {
- if (dot[i].visible) {
- wm->ir.x = dot[i].x;
- wm->ir.y = dot[i].y;
-
- wm->ir.ax = wm->ir.x;
- wm->ir.ay = wm->ir.y;
-
- /* can't calculate yaw because we don't have the distance */
- //wm->orient.yaw = calc_yaw(&wm->ir);
-
- ir_convert_to_vres(&wm->ir.x, &wm->ir.y, wm->ir.aspect, wm->ir.vres[0], wm->ir.vres[1]);
- break;
- }
- }
- } else {
- /*
- * Only see 1 dot but know theres 2.
- * Try to estimate where the other one
- * should be and use that.
- */
- for (i = 0; i < 4; ++i) {
- if (dot[i].visible) {
- int ox = 0;
- int x, y;
-
- if (dot[i].order == 1)
- /* visible is the left dot - estimate where the right is */
- ox = dot[i].x + wm->ir.distance;
- else if (dot[i].order == 2)
- /* visible is the right dot - estimate where the left is */
- ox = dot[i].x - wm->ir.distance;
-
- x = ((signed int)dot[i].x + ox) / 2;
- y = dot[i].y;
-
- wm->ir.ax = x;
- wm->ir.ay = y;
- wm->orient.yaw = calc_yaw(&wm->ir);
-
- if (ir_correct_for_bounds(&x, &y, wm->ir.aspect, wm->ir.offset[0], wm->ir.offset[1])) {
- ir_convert_to_vres(&x, &y, wm->ir.aspect, wm->ir.vres[0], wm->ir.vres[1]);
- wm->ir.x = x;
- wm->ir.y = y;
- }
-
- break;
- }
- }
- }
-
- break;
- }
- case 2:
- case 3:
- case 4:
- {
- /*
- * Two (or more) dots known and seen.
- * Average them together to estimate the true location.
- */
- int x, y;
- wm->ir.state = 2;
-
- fix_rotated_ir_dots(wm->ir.dot, roll);
-
- /* if there is at least 1 new dot, reorder them all */
- if (wm->ir.num_dots > last_num_dots) {
- reorder_ir_dots(dot);
- wm->ir.x = 0;
- wm->ir.y = 0;
- }
-
- wm->ir.distance = ir_distance(dot);
- wm->ir.z = 1023 - wm->ir.distance;
-
- get_ir_dot_avg(wm->ir.dot, &x, &y);
-
- wm->ir.ax = x;
- wm->ir.ay = y;
- wm->orient.yaw = calc_yaw(&wm->ir);
-
- if (ir_correct_for_bounds(&x, &y, wm->ir.aspect, wm->ir.offset[0], wm->ir.offset[1])) {
- ir_convert_to_vres(&x, &y, wm->ir.aspect, wm->ir.vres[0], wm->ir.vres[1]);
- wm->ir.x = x;
- wm->ir.y = y;
- }
-
- break;
- }
- default:
- {
- break;
- }
- }
-
- #ifdef WITH_WIIUSE_DEBUG
- {
- int ir_level;
- WIIUSE_GET_IR_SENSITIVITY(wm, &ir_level);
- WIIUSE_DEBUG("IR sensitivity: %i", ir_level);
- WIIUSE_DEBUG("IR visible dots: %i", wm->ir.num_dots);
- for (i = 0; i < 4; ++i)
- if (dot[i].visible)
- WIIUSE_DEBUG("IR[%i][order %i] (%.3i, %.3i) -> (%.3i, %.3i)", i, dot[i].order, dot[i].rx, dot[i].ry, dot[i].x, dot[i].y);
- WIIUSE_DEBUG("IR[absolute]: (%i, %i)", wm->ir.x, wm->ir.y);
- }
- #endif
-}
-
-
-
-/**
- * @brief Fix the rotation of the IR dots.
- *
- * @param dot An array of 4 ir_dot_t objects.
- * @param ang The roll angle to correct by (-180, 180)
- *
- * If there is roll then the dots are rotated
- * around the origin and give a false cursor
- * position. Correct for the roll.
- *
- * If the accelerometer is off then obviously
- * this will not do anything and the cursor
- * position may be inaccurate.
- */
-static void fix_rotated_ir_dots(struct ir_dot_t* dot, float ang) {
- float s, c;
- int x, y;
- int i;
-
- if (!ang) {
- for (i = 0; i < 4; ++i) {
- dot[i].x = dot[i].rx;
- dot[i].y = dot[i].ry;
- }
- return;
- }
-
- s = sin(DEGREE_TO_RAD(ang));
- c = cos(DEGREE_TO_RAD(ang));
-
- /*
- * [ cos(theta) -sin(theta) ][ ir->rx ]
- * [ sin(theta) cos(theta) ][ ir->ry ]
- */
-
- for (i = 0; i < 4; ++i) {
- if (!dot[i].visible)
- continue;
-
- x = dot[i].rx - (1024/2);
- y = dot[i].ry - (768/2);
-
- dot[i].x = (c * x) + (-s * y);
- dot[i].y = (s * x) + (c * y);
-
- dot[i].x += (1024/2);
- dot[i].y += (768/2);
- }
-}
-
-
-/**
- * @brief Average IR dots.
- *
- * @param dot An array of 4 ir_dot_t objects.
- * @param x [out] Average X
- * @param y [out] Average Y
- */
-static void get_ir_dot_avg(struct ir_dot_t* dot, int* x, int* y) {
- int vis = 0, i = 0;
-
- *x = 0;
- *y = 0;
-
- for (; i < 4; ++i) {
- if (dot[i].visible) {
- *x += dot[i].x;
- *y += dot[i].y;
- ++vis;
- }
- }
-
- *x /= vis;
- *y /= vis;
-}
-
-
-/**
- * @brief Reorder the IR dots.
- *
- * @param dot An array of 4 ir_dot_t objects.
- */
-static void reorder_ir_dots(struct ir_dot_t* dot) {
- int i, j, order;
-
- /* reset the dot ordering */
- for (i = 0; i < 4; ++i)
- dot[i].order = 0;
-
- for (order = 1; order < 5; ++order) {
- i = 0;
-
- for (; !dot[i].visible || dot[i].order; ++i)
- if (i == 4)
- return;
-
- for (j = 0; j < 4; ++j) {
- if (dot[j].visible && !dot[j].order && (dot[j].x < dot[i].x))
- i = j;
- }
-
- dot[i].order = order;
- }
-}
-
-
-/**
- * @brief Calculate the distance between the first 2 visible IR dots.
- *
- * @param dot An array of 4 ir_dot_t objects.
- */
-static float ir_distance(struct ir_dot_t* dot) {
- int i1, i2;
- int xd, yd;
-
- for (i1 = 0; i1 < 4; ++i1)
- if (dot[i1].visible)
- break;
- if (i1 == 4)
- return 0.0f;
-
- for (i2 = i1+1; i2 < 4; ++i2)
- if (dot[i2].visible)
- break;
- if (i2 == 4)
- return 0.0f;
-
- xd = dot[i2].x - dot[i1].x;
- yd = dot[i2].y - dot[i1].y;
-
- return sqrt(xd*xd + yd*yd);
-}
-
-
-/**
- * @brief Correct for the IR bounding box.
- *
- * @param x [out] The current X, it will be updated if valid.
- * @param y [out] The current Y, it will be updated if valid.
- * @param aspect Aspect ratio of the screen.
- * @param offset_x The X offset of the bounding box.
- * @param offset_y The Y offset of the bounding box.
- *
- * @return Returns 1 if the point is valid and was updated.
- *
- * Nintendo was smart with this bit. They sacrifice a little
- * precision for a big increase in usability.
- */
-static int ir_correct_for_bounds(int* x, int* y, enum aspect_t aspect, int offset_x, int offset_y) {
- int xzero, yzero;
- int xs, ys;
-
- if (aspect == WIIUSE_ASPECT_16_9) {
- xs = WM_ASPECT_16_9_X;
- ys = WM_ASPECT_16_9_Y;
- } else {
- xs = WM_ASPECT_4_3_X;
- ys = WM_ASPECT_4_3_Y;
- }
-
- xzero = ((1024 - xs) / 2) + offset_x;
- yzero = ((768 - ys) / 2) + offset_y;
-
- if ((*x >= xzero)
- && (*x <= (xzero + xs))
- && (*y >= yzero)
- && (*y <= (yzero + ys)))
- {
- *x -= offset_x;
- *y -= offset_y;
-
- return 1;
- }
-
- return 0;
-}
-
-
-/**
- * @brief Interpolate the point to the user defined virtual screen resolution.
- */
-static void ir_convert_to_vres(int* x, int* y, enum aspect_t aspect, unsigned int vx, unsigned int vy) {
- int xs, ys;
-
- if (aspect == WIIUSE_ASPECT_16_9) {
- xs = WM_ASPECT_16_9_X;
- ys = WM_ASPECT_16_9_Y;
- } else {
- xs = WM_ASPECT_4_3_X;
- ys = WM_ASPECT_4_3_Y;
- }
-
- *x -= ((1024-xs)/2);
- *y -= ((768-ys)/2);
-
- *x = (*x / (float)xs) * vx;
- *y = (*y / (float)ys) * vy;
-}
-
-
-/**
- * @brief Calculate yaw given the IR data.
- *
- * @param ir IR data structure.
- */
-float calc_yaw(struct ir_t* ir) {
- float x;
-
- x = ir->ax - 512;
- x = x * (ir->z / 1024.0f);
-
- return RAD_TO_DEGREE( atanf(x / ir->z) );
-}
diff --git a/Externals/WiiUseSrc/Src/ir.h b/Externals/WiiUseSrc/Src/ir.h
deleted file mode 100644
index 9082492987..0000000000
--- a/Externals/WiiUseSrc/Src/ir.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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 .
- *
- * $Header$
- *
- */
-
-/**
- * @file
- * @brief Handles IR data.
- */
-
-#ifndef IR_H_INCLUDED
-#define IR_H_INCLUDED
-
-#include "wiiuse_internal.h"
-
-#define WII_VRES_X 560
-#define WII_VRES_Y 340
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void calculate_basic_ir(struct wiimote_t* wm, byte* data);
-void calculate_extended_ir(struct wiimote_t* wm, byte* data);
-float calc_yaw(struct ir_t* ir);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // IR_H_INCLUDED
-
-
diff --git a/Externals/WiiUseSrc/Src/nunchuk.c b/Externals/WiiUseSrc/Src/nunchuk.c
deleted file mode 100644
index c8db5a9467..0000000000
--- a/Externals/WiiUseSrc/Src/nunchuk.c
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * 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 .
- *
- * $Header$
- *
- */
-
-/**
- * @file
- * @brief Nunchuk expansion device.
- */
-
-#include
-#include
-#include
-
-#include "definitions.h"
-#include "wiiuse_internal.h"
-#include "dynamics.h"
-#include "events.h"
-#include "nunchuk.h"
-
-static void nunchuk_pressed_buttons(struct nunchuk_t* nc, byte now);
-
-/**
- * @brief Handle the handshake data from the nunchuk.
- *
- * @param nc A pointer to a nunchuk_t structure.
- * @param data The data read in from the device.
- * @param len The length of the data block, in bytes.
- *
- * @return Returns 1 if handshake was successful, 0 if not.
- */
-int nunchuk_handshake(struct wiimote_t* wm, struct nunchuk_t* nc, byte* data, unsigned short len) {
- int i;
- int offset = 0;
-
- nc->btns = 0;
- nc->btns_held = 0;
- nc->btns_released = 0;
-
- /* set the smoothing to the same as the wiimote */
- nc->flags = &wm->flags;
- nc->accel_calib.st_alpha = wm->accel_calib.st_alpha;
-
- /* decrypt data */
- for (i = 0; i < len; ++i)
- data[i] = (data[i] ^ 0x17) + 0x17;
-
- if (data[offset] == 0xFF) {
- /*
- * Sometimes the data returned here is not correct.
- * This might happen because the wiimote is lagging
- * behind our initialization sequence.
- * To fix this just request the handshake again.
- *
- * Other times it's just the first 16 bytes are 0xFF,
- * but since the next 16 bytes are the same, just use
- * those.
- */
- if (data[offset + 16] == 0xFF) {
- /* get the calibration data */
- byte* handshake_buf = (byte *)malloc(EXP_HANDSHAKE_LEN * sizeof(byte));
-
- WIIUSE_DEBUG("Nunchuk handshake appears invalid, trying again.");
- wiiuse_read_data_cb(wm, handshake_expansion, handshake_buf, WM_EXP_MEM_CALIBR, EXP_HANDSHAKE_LEN);
-
- return 0;
- } else
- offset += 16;
- }
-
- nc->accel_calib.cal_zero.x = data[offset + 0];
- nc->accel_calib.cal_zero.y = data[offset + 1];
- nc->accel_calib.cal_zero.z = data[offset + 2];
- nc->accel_calib.cal_g.x = data[offset + 4];
- nc->accel_calib.cal_g.y = data[offset + 5];
- nc->accel_calib.cal_g.z = data[offset + 6];
- nc->js.max.x = data[offset + 8];
- nc->js.min.x = data[offset + 9];
- nc->js.center.x = data[offset + 10];
- nc->js.max.y = data[offset + 11];
- nc->js.min.y = data[offset + 12];
- nc->js.center.y = data[offset + 13];
-
- /* default the thresholds to the same as the wiimote */
- nc->orient_threshold = wm->orient_threshold;
- nc->accel_threshold = wm->accel_threshold;
-
- /* handshake done */
- wm->expansion.type = EXP_NUNCHUK;
-
- /* if min and max are reported as 0, initialize them to usable values based on center, and fine tune in nunchuck_event() */
- if (nc->js.center.x) {
- if (nc->js.min.x == 0) nc->js.min.x = nc->js.center.x - 80;
- if (nc->js.max.x == 0) nc->js.max.x = nc->js.center.x + 80;
- }
- if (nc->js.center.y) {
- if (nc->js.min.y == 0) nc->js.min.y = nc->js.center.y - 80;
- if (nc->js.max.y == 0) nc->js.max.y = nc->js.center.y + 80;
- }
-
- wm->timeout = WIIMOTE_DEFAULT_TIMEOUT;
-
- return 1;
-}
-
-
-/**
- * @brief The nunchuk disconnected.
- *
- * @param nc A pointer to a nunchuk_t structure.
- */
-void nunchuk_disconnected(struct nunchuk_t* nc) {
- memset(nc, 0, sizeof(struct nunchuk_t));
-}
-
-
-
-/**
- * @brief Handle nunchuk event.
- *
- * @param nc A pointer to a nunchuk_t structure.
- * @param msg The message specified in the event packet.
- */
-void nunchuk_event(struct nunchuk_t* nc, byte* msg) {
- int i;
-
- /* decrypt data */
- for (i = 0; i < 6; ++i)
- msg[i] = (msg[i] ^ 0x17) + 0x17;
-
- /* get button states */
- nunchuk_pressed_buttons(nc, msg[5]);
-
- nc->js.pos.x = msg[0];
- nc->js.pos.y = msg[1];
-
- /* extend min and max values to physical range of motion */
- if (nc->js.center.x) {
- if (nc->js.min.x > nc->js.pos.x) nc->js.min.x = nc->js.pos.x;
- if (nc->js.max.x < nc->js.pos.x) nc->js.max.x = nc->js.pos.x;
- }
- if (nc->js.center.y) {
- if (nc->js.min.y > nc->js.pos.y) nc->js.min.y = nc->js.pos.y;
- if (nc->js.max.y < nc->js.pos.y) nc->js.max.y = nc->js.pos.y;
- }
-
- /* calculate joystick state */
- calc_joystick_state(&nc->js, nc->js.pos.x, nc->js.pos.y);
-
- /* calculate orientation */
- nc->accel.x = msg[2];
- nc->accel.y = msg[3];
- nc->accel.z = msg[4];
-
- calculate_orientation(&nc->accel_calib, &nc->accel, &nc->orient, NUNCHUK_IS_FLAG_SET(nc, WIIUSE_SMOOTHING));
- calculate_gforce(&nc->accel_calib, &nc->accel, &nc->gforce);
-}
-
-
-/**
- * @brief Find what buttons are pressed.
- *
- * @param nc Pointer to a nunchuk_t structure.
- * @param msg The message byte specified in the event packet.
- */
-static void nunchuk_pressed_buttons(struct nunchuk_t* nc, byte now) {
- /* message is inverted (0 is active, 1 is inactive) */
- now = ~now & NUNCHUK_BUTTON_ALL;
-
- /* pressed now & were pressed, then held */
- nc->btns_held = (now & nc->btns);
-
- /* were pressed or were held & not pressed now, then released */
- nc->btns_released = ((nc->btns | nc->btns_held) & ~now);
-
- /* buttons pressed now */
- nc->btns = now;
-}
-
-
-/**
- * @brief Set the orientation event threshold for the nunchuk.
- *
- * @param wm Pointer to a wiimote_t structure with a nunchuk attached.
- * @param threshold The decimal place that should be considered a significant change.
- *
- * See wiiuse_set_orient_threshold() for details.
- */
-void wiiuse_set_nunchuk_orient_threshold(struct wiimote_t* wm, float threshold) {
- if (!wm) return;
-
- wm->expansion.nunchuk.orient_threshold = threshold;
-}
-
-
-/**
- * @brief Set the accelerometer event threshold for the nunchuk.
- *
- * @param wm Pointer to a wiimote_t structure with a nunchuk attached.
- * @param threshold The decimal place that should be considered a significant change.
- *
- * See wiiuse_set_orient_threshold() for details.
- */
-void wiiuse_set_nunchuk_accel_threshold(struct wiimote_t* wm, int threshold) {
- if (!wm) return;
-
- wm->expansion.nunchuk.accel_threshold = threshold;
-}
diff --git a/Externals/WiiUseSrc/Src/nunchuk.h b/Externals/WiiUseSrc/Src/nunchuk.h
deleted file mode 100644
index f036073d64..0000000000
--- a/Externals/WiiUseSrc/Src/nunchuk.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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 .
- *
- * $Header$
- *
- */
-
-/**
- * @file
- * @brief Nunchuk expansion device.
- */
-
-#ifndef NUNCHUK_H_INCLUDED
-#define NUNCHUK_H_INCLUDED
-
-#include "wiiuse_internal.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int nunchuk_handshake(struct wiimote_t* wm, struct nunchuk_t* nc, byte* data, unsigned short len);
-
-void nunchuk_disconnected(struct nunchuk_t* nc);
-
-void nunchuk_event(struct nunchuk_t* nc, byte* msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // NUNCHUK_H_INCLUDED
diff --git a/Externals/WiiUseSrc/Src/wiiboard.c b/Externals/WiiUseSrc/Src/wiiboard.c
deleted file mode 100644
index 5e2b57157b..0000000000
--- a/Externals/WiiUseSrc/Src/wiiboard.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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 .
- *
- * $Header$
- *
- */
-
-/**
- * @file
- * @brief Wiiboard expansion device.
- */
-
-#include
-#include
-#include
-
-#ifdef WIN32
- #include
-#endif
-
-#include "definitions.h"
-#include "wiiuse_internal.h"
-#include "dynamics.h"
-#include "events.h"
-#include "wiiboard.h"
-
-/**
- * @brief Handle the handshake data from the guitar.
- *
- * @param cc A pointer to a classic_ctrl_t structure.
- * @param data The data read in from the device.
- * @param len The length of the data block, in bytes.
- *
- * @return Returns 1 if handshake was successful, 0 if not.
- */
-
-int wii_board_handshake(struct wiimote_t* wm, struct wii_board_t* wb, byte* data, unsigned short len) {
-
- int offset = 0;
- if (data[offset]==0xff) {
- if (data[offset+16]==0xff) {
- WIIUSE_DEBUG("Wii Balance Board handshake appears invalid, trying again.");
- wiiuse_read_data(wm, data, WM_EXP_MEM_CALIBR, EXP_HANDSHAKE_LEN);
- return 0;
- }
- offset += 16;
- }
-
- wb->ctr[0] = (data[offset+4]<<8)|data[offset+5];
- wb->cbr[0] = (data[offset+6]<<8)|data[offset+7];
- wb->ctl[0] = (data[offset+8]<<8)|data[offset+9];
- wb->cbl[0] = (data[offset+10]<<8)|data[offset+11];
-
- wb->ctr[1] = (data[offset+12]<<8)|data[offset+13];
- wb->cbr[1] = (data[offset+14]<<8)|data[offset+15];
- wb->ctl[1] = (data[offset+16]<<8)|data[offset+17];
- wb->cbl[1] = (data[offset+18]<<8)|data[offset+19];
-
- wb->ctr[2] = (data[offset+20]<<8)|data[offset+21];
- wb->cbr[2] = (data[offset+22]<<8)|data[offset+23];
- wb->ctl[2] = (data[offset+24]<<8)|data[offset+25];
- wb->cbl[2] = (data[offset+26]<<8)|data[offset+27];
-
- /* handshake done */
- wm->event = WIIUSE_WII_BOARD_CTRL_INSERTED;
- wm->expansion.type = EXP_WII_BOARD;
-
- return 1;
-}
-
-
-/**
- * @brief The wii board disconnected.
- *
- * @param cc A pointer to a wii_board_t structure.
- */
-void wii_board_disconnected(struct wii_board_t* wb) {
- memset(wb, 0, sizeof(struct wii_board_t));
-}
-
-/**
- * @brief Handle guitar event.
- *
- * @param cc A pointer to a classic_ctrl_t structure.
- * @param msg The message specified in the event packet.
- */
-void wii_board_event(struct wii_board_t* wb, byte* msg) {
- wb->rtr = (msg[0]<<8)|msg[1];
- wb->rbr = (msg[2]<<8)|msg[3];
- wb->rtl = (msg[4]<<8)|msg[5];
- wb->rbl = (msg[6]<<8)|msg[7];
- calc_balanceboard_state(wb);
-}
diff --git a/Externals/WiiUseSrc/Src/wiiboard.h b/Externals/WiiUseSrc/Src/wiiboard.h
deleted file mode 100644
index eabbcf6998..0000000000
--- a/Externals/WiiUseSrc/Src/wiiboard.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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 .
- *
- * $Header$
- *
- */
-
-/**
- * @file
- * @brief Guitar Hero 3 expansion device.
- */
-
-#ifndef WII_BOARD_H_INCLUDED
-#define WII_BOARD_H_INCLUDED
-
-#include "wiiuse_internal.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int wii_board_handshake(struct wiimote_t* wm, struct wii_board_t* wb, byte* data, unsigned short len);
-
-void wii_board_disconnected(struct wii_board_t* wb);
-
-void wii_board_event(struct wii_board_t* wb, byte* msg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Externals/WiiUseSrc/Src/wiiuse.c b/Externals/WiiUseSrc/Src/wiiuse.c
index 9757d0a5dd..f3b89e5849 100644
--- a/Externals/WiiUseSrc/Src/wiiuse.c
+++ b/Externals/WiiUseSrc/Src/wiiuse.c
@@ -46,7 +46,6 @@
#include "definitions.h"
#include "wiiuse_internal.h"
-#include "events.h"
#include "io.h"
static int g_banner = 1;
@@ -222,19 +221,6 @@ void wiiuse_rumble(struct wiimote_t* wm, int status) {
wiiuse_send(wm, WM_CMD_RUMBLE, &buf, 1);
}
-
-/**
- * @brief Toggle the state of the rumble.
- *
- * @param wm Pointer to a wiimote_t structure.
- */
-void wiiuse_toggle_rumble(struct wiimote_t* wm) {
- if (!wm) return;
-
- wiiuse_rumble(wm, !WIIMOTE_IS_SET(wm, WIIMOTE_STATE_RUMBLE));
-}
-
-
/**
* @brief Set the enabled LEDs.
*
@@ -262,26 +248,6 @@ void wiiuse_set_leds(struct wiimote_t* wm, int leds) {
}
-/**
- * @brief Set if the wiimote should report motion sensing.
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param status 1 to enable, 0 to disable.
- *
- * Since reporting motion sensing sends a lot of data,
- * the wiimote saves power by not transmitting it
- * by default.
- */
-void wiiuse_motion_sensing(struct wiimote_t* wm, int status) {
- if (status)
- WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_ACC);
- else
- WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_ACC);
-
- wiiuse_set_report_type(wm);
-}
-
-
/**
* @brief Set the report type based on the current wiimote state.
*
@@ -387,60 +353,6 @@ int wiiuse_read_data_cb(struct wiimote_t* wm, wiiuse_read_cb read_cb, byte* buff
}
-/**
- * @brief Read data from the wiimote (event version).
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param buffer An allocated buffer to store the data as it arrives from the wiimote.
- * Must be persistent in memory and large enough to hold the data.
- * @param addr The address of wiimote memory to read from.
- * @param len The length of the block to be read.
- *
- * The library can only handle one data read request at a time
- * because it must keep track of the buffer and other
- * events that are specific to that request. So if a request
- * has already been made, subsequent requests will be added
- * to a pending list and be sent out when the previous
- * finishes.
- */
-int wiiuse_read_data(struct wiimote_t* wm, byte* buffer, unsigned int addr, unsigned short len) {
- struct read_req_t* req;
-
- if (!wm || !WIIMOTE_IS_CONNECTED(wm))
- return 0;
- if (!buffer || !len)
- return 0;
-
- /* make this request structure */
- req = (struct read_req_t*)malloc(sizeof(struct read_req_t));
- req->cb = NULL;
- req->buf = buffer;
- req->addr = addr;
- req->size = len;
- req->wait = len;
- req->dirty = 0;
- req->next = NULL;
-
- /* add this to the request list */
- if (!wm->read_req) {
- /* root node */
- wm->read_req = req;
-
- WIIUSE_DEBUG("Data read request can be sent out immediately.");
-
- /* send the request out immediately */
- wiiuse_send_next_pending_read_request(wm);
- } else {
- struct read_req_t* nptr = wm->read_req;
- for (; nptr->next; nptr = nptr->next);
- nptr->next = req;
-
- WIIUSE_DEBUG("Added pending data read request.");
- }
-
- return 1;
-}
-
/**
* @brief Send the next pending data read request to the wiimote.
@@ -477,46 +389,6 @@ void wiiuse_send_next_pending_read_request(struct wiimote_t* wm) {
}
-/**
- * @brief Request the wiimote controller status.
- *
- * @param wm Pointer to a wiimote_t structure.
- *
- * Controller status includes: battery level, LED status, expansions
- */
-void wiiuse_status(struct wiimote_t* wm) {
- byte buf = 0;
-
- if (!wm || !WIIMOTE_IS_CONNECTED(wm))
- return;
-
- WIIUSE_DEBUG("Requested wiimote status.");
-
- wiiuse_send(wm, WM_CMD_CTRL_STATUS, &buf, 1);
-}
-
-
-/**
- * @brief Find a wiimote_t structure by its unique identifier.
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param wiimotes The number of wiimote_t structures in \a wm.
- * @param unid The unique identifier to search for.
- *
- * @return Pointer to a wiimote_t structure, or NULL if not found.
- */
-struct wiimote_t* wiiuse_get_by_id(struct wiimote_t** wm, int wiimotes, int unid) {
- int i = 0;
-
- for (; i < wiimotes; ++i) {
- if (wm[i]->unid == unid)
- return wm[i];
- }
-
- return NULL;
-}
-
-
/**
* @brief Write data to the wiimote.
*
@@ -612,60 +484,6 @@ int wiiuse_send(struct wiimote_t* wm, byte report_type, byte* msg, int len) {
}
-/**
- * @brief Set flags for the specified wiimote.
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param enable Flags to enable.
- * @param disable Flags to disable.
- *
- * @return The flags set after 'enable' and 'disable' have been applied.
- *
- * The values 'enable' and 'disable' may be any flags OR'ed together.
- * Flags are defined in wiiuse.h.
- */
-int wiiuse_set_flags(struct wiimote_t* wm, int enable, int disable) {
- if (!wm) return 0;
-
- /* remove mutually exclusive flags */
- enable &= ~disable;
- disable &= ~enable;
-
- wm->flags |= enable;
- wm->flags &= ~disable;
-
- return wm->flags;
-}
-
-
-/**
- * @brief Set the wiimote smoothing alpha value.
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param alpha The alpha value to set. Between 0 and 1.
- *
- * @return Returns the old alpha value.
- *
- * The alpha value is between 0 and 1 and is used in an exponential
- * smoothing algorithm.
- *
- * Smoothing is only performed if the WIIMOTE_USE_SMOOTHING is set.
- */
-float wiiuse_set_smooth_alpha(struct wiimote_t* wm, float alpha) {
- float old;
-
- if (!wm) return 0.0f;
-
- old = wm->accel_calib.st_alpha;
-
- wm->accel_calib.st_alpha = alpha;
-
- /* if there is a nunchuk set that too */
- if (wm->expansion.type == EXP_NUNCHUK)
- wm->expansion.nunchuk.accel_calib.st_alpha = alpha;
-
- return old;
-}
/**
@@ -686,50 +504,6 @@ void wiiuse_set_bluetooth_stack(struct wiimote_t** wm, int wiimotes, enum win_bt
#endif
}
-
-/**
- * @brief Set the orientation event threshold.
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param threshold The decimal place that should be considered a significant change.
- *
- * If threshold is 0.01, and any angle changes by 0.01 then a significant change
- * has occured and the event callback will be invoked. If threshold is 1 then
- * the angle has to change by a full degree to generate an event.
- */
-void wiiuse_set_orient_threshold(struct wiimote_t* wm, float threshold) {
- if (!wm) return;
-
- wm->orient_threshold = threshold;
-}
-
-
-/**
- * @brief Set the accelerometer event threshold.
- *
- * @param wm Pointer to a wiimote_t structure.
- * @param threshold The decimal place that should be considered a significant change.
- */
-void wiiuse_set_accel_threshold(struct wiimote_t* wm, int threshold) {
- if (!wm) return;
-
- wm->accel_threshold = threshold;
-}
-
-
-/**
- * @brief Try to resync with the wiimote by starting a new handshake.
- *
- * @param wm Pointer to a wiimote_t structure.
- */
-void wiiuse_resync(struct wiimote_t* wm) {
- if (!wm) return;
-
- wm->handshake_state = 0;
- wiiuse_handshake(wm, NULL, 0);
-}
-
-
/**
* @brief Set the normal and expansion handshake timeouts.
*
diff --git a/Externals/WiiUseSrc/Src/wiiuse.h b/Externals/WiiUseSrc/Src/wiiuse.h
index 623658b2d8..afd58a1574 100644
--- a/Externals/WiiUseSrc/Src/wiiuse.h
+++ b/Externals/WiiUseSrc/Src/wiiuse.h
@@ -140,6 +140,8 @@
#define EXP_CLASSIC 2
#define EXP_GUITAR_HERO_3 3
#define EXP_WII_BOARD 4
+#define EXP_WII_MOTION_PLUS 5
+#define EXP_WII_MOTION_PLUS_NUNCHUK 6
/* IR correction types */
typedef enum ir_position_t {
@@ -276,6 +278,13 @@ typedef struct vec3b_t {
byte x, y, z;
} vec3b_t;
+/**
+ * @struct vec3f_t
+ * @brief unsigned orientation short struct.
+ */
+typedef struct vec3s_t {
+ unsigned pitch, roll, yaw;
+} vec3s_t;
/**
* @struct vec3f_t
@@ -493,6 +502,24 @@ typedef struct wii_board_t {
float y;
} wii_board_t;
+
+/**
+ * @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;
+
+
/**
* @struct expansion_t
* @brief Generic expansion device plugged into wiimote.
@@ -567,7 +594,9 @@ typedef enum WIIUSE_EVENT_TYPE {
WIIUSE_GUITAR_HERO_3_CTRL_INSERTED,
WIIUSE_GUITAR_HERO_3_CTRL_REMOVED,
WIIUSE_WII_BOARD_CTRL_INSERTED,
- WIIUSE_WII_BOARD_CTRL_REMOVED
+ WIIUSE_WII_BOARD_CTRL_REMOVED,
+ WIIUSE_MOTION_PLUS_INSERTED,
+ WIIUSE_MOTION_PLUS_REMOVED
} WIIUSE_EVENT_TYPE;
/**
@@ -658,50 +687,29 @@ 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_toggle_rumble(struct wiimote_t* wm);
WIIUSE_EXPORT extern void wiiuse_set_leds(struct wiimote_t* wm, int leds);
-WIIUSE_EXPORT extern void wiiuse_motion_sensing(struct wiimote_t* wm, int status);
-WIIUSE_EXPORT extern int wiiuse_read_data(struct wiimote_t* wm, byte* buffer, unsigned int offset, unsigned short len);
-WIIUSE_EXPORT extern int wiiuse_write_data(struct wiimote_t* wm, unsigned int addr, byte* data, byte len);
-WIIUSE_EXPORT extern void wiiuse_status(struct wiimote_t* wm);
-WIIUSE_EXPORT extern struct wiimote_t* wiiuse_get_by_id(struct wiimote_t** wm, int wiimotes, int unid);
-WIIUSE_EXPORT extern int wiiuse_set_flags(struct wiimote_t* wm, int enable, int disable);
-WIIUSE_EXPORT extern float wiiuse_set_smooth_alpha(struct wiimote_t* wm, float alpha);
-WIIUSE_EXPORT extern void wiiuse_set_bluetooth_stack(struct wiimote_t** wm, int wiimotes, enum win_bt_stack_t type);
-WIIUSE_EXPORT extern void wiiuse_set_orient_threshold(struct wiimote_t* wm, float threshold);
-WIIUSE_EXPORT extern void wiiuse_resync(struct wiimote_t* wm);
-WIIUSE_EXPORT extern void wiiuse_set_timeout(struct wiimote_t** wm, int wiimotes, byte normal_timeout, byte exp_timeout);
-WIIUSE_EXPORT extern void wiiuse_set_accel_threshold(struct wiimote_t* wm, int threshold);
/* connect.c / io_win.c */
WIIUSE_EXPORT extern int wiiuse_find(struct wiimote_t** wm, int max_wiimotes, int timeout);
WIIUSE_EXPORT extern int wiiuse_connect(struct wiimote_t** wm, int wiimotes);
WIIUSE_EXPORT extern void wiiuse_disconnect(struct wiimote_t* wm);
+WIIUSE_EXPORT extern void wiiuse_set_timeout(struct wiimote_t** wm, int wiimotes, byte normal_timeout, byte exp_timeout);
+
#ifdef WIN32
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);
#endif
-/* events.c */
-WIIUSE_EXPORT extern int wiiuse_poll(struct wiimote_t** wm, int wiimotes);
-
/* ir.c */
WIIUSE_EXPORT extern void wiiuse_set_ir(struct wiimote_t* wm, int status);
-WIIUSE_EXPORT extern void wiiuse_set_ir_vres(struct wiimote_t* wm, unsigned int x, unsigned int y);
WIIUSE_EXPORT extern void wiiuse_set_ir_position(struct wiimote_t* wm, enum ir_position_t pos);
WIIUSE_EXPORT extern void wiiuse_set_aspect_ratio(struct wiimote_t* wm, enum aspect_t aspect);
WIIUSE_EXPORT extern void wiiuse_set_ir_sensitivity(struct wiimote_t* wm, int level);
-/* nunchuk.c */
-WIIUSE_EXPORT extern void wiiuse_set_nunchuk_orient_threshold(struct wiimote_t* wm, float threshold);
-WIIUSE_EXPORT extern void wiiuse_set_nunchuk_accel_threshold(struct wiimote_t* wm, int threshold);
-
/* 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);
-/* Balance Board */
-WIIUSE_EXPORT extern void wiiuse_set_wii_board_calib(struct wiimote_t *wm);
#ifdef __cplusplus
}
diff --git a/Externals/WiiUseSrc/Src/wiiuse_internal.h b/Externals/WiiUseSrc/Src/wiiuse_internal.h
index 3f4c4ff9be..9e1e2a5b39 100644
--- a/Externals/WiiUseSrc/Src/wiiuse_internal.h
+++ b/Externals/WiiUseSrc/Src/wiiuse_internal.h
@@ -109,12 +109,19 @@
#define WM_EXP_MEM_BASE 0x04A40000
#define WM_EXP_MEM_ENABLE 0x04A40040
#define WM_EXP_MEM_CALIBR 0x04A40020
+#define WM_EXP_MEM_ENABLE1 0x04A400F0
+#define WM_EXP_MEM_ENABLE2 0x04A400FB
#define WM_REG_IR 0x04B00030
#define WM_REG_IR_BLOCK1 0x04B00000
#define WM_REG_IR_BLOCK2 0x04B0001A
#define WM_REG_IR_MODENUM 0x04B00033
+#define WM_EXT_MP_MEM_BASE 0x04A60000
+#define WM_EXT_MP_MEM_ENABLE1 0x04A600F0
+#define WM_EXT_MP_MEM_ENABLE2 0x04A600FE
+#define WM_EXT_MP_MEM_ENABLE3 0x04A400FB
+
/* ir block data */
#define WM_IR_BLOCK1_LEVEL1 "\x02\x00\x00\x71\x01\x00\x64\x00\xfe"
#define WM_IR_BLOCK2_LEVEL1 "\xfd\x05"
@@ -153,10 +160,16 @@
*/
/* encrypted expansion id codes (located at 0x04A400FC) */
-#define EXP_ID_CODE_NUNCHUK 0x9A1EFEFE
-#define EXP_ID_CODE_WII_BOARD 0xa4200402 //Find the encrypted epansion id code
+/*#define EXP_ID_CODE_NUNCHUK 0x9A1EFEFE
#define EXP_ID_CODE_CLASSIC_CONTROLLER 0x9A1EFDFD
#define EXP_ID_CODE_GUITAR 0x9A1EFDFB
+*/
+#define EXP_ID_CODE_NUNCHUK 0xa4200000
+#define EXP_ID_CODE_CLASSIC_CONTROLLER 0xa4200101
+#define EXP_ID_CODE_GUITAR 0xa4200103 // 4 bytes are not unique enough
+#define EXP_ID_CODE_WII_BOARD 0xa4200402
+#define EXP_ID_CODE_MOTIONPLUS 0xa4200405
+#define EXP_ID_CODE_MOTIONPLUS_EXT 0xa4200505
#define EXP_HANDSHAKE_LEN 224
diff --git a/Externals/WiiUseSrc/wiiuse.vcproj b/Externals/WiiUseSrc/wiiuse.vcproj
index a4a1a41d7a..0953b69309 100644
--- a/Externals/WiiUseSrc/wiiuse.vcproj
+++ b/Externals/WiiUseSrc/wiiuse.vcproj
@@ -1,7 +1,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -471,30 +435,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
@@ -640,18 +636,6 @@
RelativePath=".\Src\ConfigPadDlg.h"
>
-
-
-
-
-
-
ChangeSelection(g_Config.CurrentPage);
UpdateGUI();
break;
- case ID_BUTTONRECORDING:
- m_RecordingConfigFrame = new WiimoteRecordingConfigDialog(this);
- m_RecordingConfigFrame->ShowModal();
- m_RecordingConfigFrame->Destroy();
- m_RecordingConfigFrame = NULL;
- break;
#ifdef _WIN32
case IDB_PAIRUP_REAL:
if (g_EmulatorState != PLUGIN_EMUSTATE_PLAY)
@@ -327,7 +320,6 @@ void WiimoteBasicConfigDialog::CreateGUIControls()
}
m_ButtonMapping = new wxButton(this, ID_BUTTONMAPPING, wxT("Button Mapping"));
- m_Recording = new wxButton(this, ID_BUTTONRECORDING, wxT("Recording"));
m_OK = new wxButton(this, wxID_OK, wxT("OK"));
m_OK->SetToolTip(wxT("Save changes and close"));
@@ -336,7 +328,6 @@ void WiimoteBasicConfigDialog::CreateGUIControls()
wxBoxSizer* sButtons = new wxBoxSizer(wxHORIZONTAL);
sButtons->Add(m_ButtonMapping, 0, (wxALL), 0);
- sButtons->Add(m_Recording, 0, (wxALL), 0);
sButtons->AddStretchSpacer();
sButtons->Add(m_OK, 0, (wxALL), 0);
sButtons->Add(m_Cancel, 0, (wxLEFT), 5);
diff --git a/Source/Plugins/Plugin_Wiimote/Src/ConfigRecording.cpp b/Source/Plugins/Plugin_Wiimote/Src/ConfigRecording.cpp
deleted file mode 100644
index 4fd5f206ed..0000000000
--- a/Source/Plugins/Plugin_Wiimote/Src/ConfigRecording.cpp
+++ /dev/null
@@ -1,541 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// 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, version 2.0.
-
-// 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 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#include "IniFile.h"
-#include "Timer.h"
-
-#include "wiimote_real.h" // Local
-#include "wiimote_hid.h"
-#include "main.h"
-#include "ConfigRecordingDlg.h"
-#include "ConfigBasicDlg.h"
-#include "Config.h"
-#include "EmuMain.h" // for LoadRecordedMovements()
-#include "EmuSubroutines.h" // for WmRequestStatus
-
-void WiimoteRecordingConfigDialog::LoadFile()
-{
- DEBUG_LOG(WIIMOTE, "LoadFile()");
-
- IniFile file;
- file.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "WiimoteMovement.ini").c_str());
-
- for (int i = 1; i < (RECORDING_ROWS + 1); i++)
- {
- // Temporary storage
- int iTmp;
- std::string STmp;
-
- // Get row name
- std::string SaveName = StringFromFormat("Recording%i", i);
-
- // HotKey
- file.Get(SaveName.c_str(), "HotKeySwitch", &iTmp, 3); m_RecordHotKeySwitch[i]->SetSelection(iTmp);
- file.Get(SaveName.c_str(), "HotKeyWiimote", &iTmp, 10); m_RecordHotKeyWiimote[i]->SetSelection(iTmp);
- file.Get(SaveName.c_str(), "HotKeyNunchuck", &iTmp, 10); m_RecordHotKeyNunchuck[i]->SetSelection(iTmp);
- file.Get(SaveName.c_str(), "HotKeyIR", &iTmp, 10); m_RecordHotKeyIR[i]->SetSelection(iTmp);
-
- // Movement name
- file.Get(SaveName.c_str(), "MovementName", &STmp, ""); m_RecordText[i]->SetValue(wxString::FromAscii(STmp.c_str()));
-
- // Game name
- file.Get(SaveName.c_str(), "GameName", &STmp, ""); m_RecordGameText[i]->SetValue(wxString::FromAscii(STmp.c_str()));
-
- // IR Bytes
- file.Get(SaveName.c_str(), "IRBytes", &STmp, ""); m_RecordIRBytesText[i]->SetValue(wxString::FromAscii(STmp.c_str()));
-
- // Recording speed
- file.Get(SaveName.c_str(), "RecordingSpeed", &iTmp, -1);
- if(iTmp != -1)
- m_RecordSpeed[i]->SetValue(wxString::Format(wxT("%i"), iTmp));
- else
- m_RecordSpeed[i]->SetValue(wxT(""));
-
- // Playback speed (currently always saved directly after a recording)
- file.Get(SaveName.c_str(), "PlaybackSpeed", &iTmp, -1); m_RecordPlayBackSpeed[i]->SetSelection(iTmp);
- }
-}
-
-void WiimoteRecordingConfigDialog::SaveFile()
-{
- DEBUG_LOG(WIIMOTE, "SaveFile");
-
- IniFile file;
- file.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "WiimoteMovement.ini").c_str());
-
- for(int i = 1; i < (RECORDING_ROWS + 1); i++)
- {
- // Get row name
- std::string SaveName = StringFromFormat("Recording%i", i);
-
- // HotKey
- file.Set(SaveName.c_str(), "HotKeySwitch", m_RecordHotKeySwitch[i]->GetSelection());
- file.Set(SaveName.c_str(), "HotKeyWiimote", m_RecordHotKeyWiimote[i]->GetSelection());
- file.Set(SaveName.c_str(), "HotKeyNunchuck", m_RecordHotKeyNunchuck[i]->GetSelection());
- file.Set(SaveName.c_str(), "HotKeyIR", m_RecordHotKeyIR[i]->GetSelection());
-
- // Movement name
- file.Set(SaveName.c_str(), "MovementName", (const char*)m_RecordText[i]->GetValue().mb_str(wxConvUTF8));
-
- // Game name
- file.Set(SaveName.c_str(), "GameName", (const char*)m_RecordGameText[i]->GetValue().mb_str(wxConvUTF8));
-
- // Recording speed (currently always saved directly after a recording)
- /*
- wxString TmpRecordSpeed = m_RecordSpeed[i]->GetValue();
- if(TmpRecordSpeed.length() > 0)
- int TmpRecordSpeed; file.Set(SaveName.c_str(), "RecordingSpeed", TmpRecordSpeed);
- else
- int TmpRecordSpeed; file.Set(SaveName.c_str(), "RecordingSpeed", "-1");
- */
-
- // Playback speed (currently always saved directly after a recording)
- file.Set(SaveName.c_str(), "PlaybackSpeed", m_RecordPlayBackSpeed[i]->GetSelection());
- }
-
- file.Save((std::string(File::GetUserPath(D_CONFIG_IDX)) + "WiimoteMovement.ini").c_str());
- DEBUG_LOG(WIIMOTE, "SaveFile()");
-}
-
-void WiimoteRecordingConfigDialog::CreateGUIControlsRecording()
-{
- m_PageRecording = new wxPanel(this, ID_RECORDINGPAGE, wxDefaultPosition, wxDefaultSize);
-
- m_TextUpdateRate = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Update rate: 000 times/s"));
- m_UpdateMeters = new wxCheckBox(m_PageRecording, ID_UPDATE_REAL, wxT("Update gauges"));
-
- m_UpdateMeters->SetValue(g_Config.bUpdateRealWiimote);
-
- m_UpdateMeters->SetToolTip(
- wxT("You can turn this off when a game is running to avoid a potential slowdown that may come from redrawing the\n")
- wxT("configuration screen. Remember that you also need to press '+' on your Wiimote before you can record movements."));
-
- // Width and height of the gauges
- static const int Gw = 35, Gh = 110; //ugly
-
- m_GaugeBattery = new wxGauge( m_PageRecording, wxID_ANY, 100, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeRoll[0] = new wxGauge( m_PageRecording, wxID_ANY, 360, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeRoll[1] = new wxGauge( m_PageRecording, wxID_ANY, 360, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeGForce[0] = new wxGauge( m_PageRecording, wxID_ANY, 600, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeGForce[1] = new wxGauge( m_PageRecording, wxID_ANY, 600, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeGForce[2] = new wxGauge( m_PageRecording, wxID_ANY, 600, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeAccel[0] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeAccel[1] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeAccel[2] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
-
- m_GaugeAccelNunchuk[0] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeAccelNunchuk[1] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeAccelNunchuk[2] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeGForceNunchuk[0] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeGForceNunchuk[1] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeGForceNunchuk[2] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
-
- // The text controls
- m_TextIR = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Cursor: 000 000\nDistance: 0000"));
-
- wxBoxSizer * sBoxBattery = new wxBoxSizer(wxVERTICAL);
- wxBoxSizer * sBoxRoll[2];
- sBoxRoll[0] = new wxBoxSizer(wxVERTICAL);
- sBoxRoll[1] = new wxBoxSizer(wxVERTICAL);
- wxBoxSizer * sBoxGForce[3];
- sBoxGForce[0] = new wxBoxSizer(wxVERTICAL);
- sBoxGForce[1] = new wxBoxSizer(wxVERTICAL);
- sBoxGForce[2] = new wxBoxSizer(wxVERTICAL);
- wxBoxSizer * sBoxAccel[3];
- sBoxAccel[0] = new wxBoxSizer(wxVERTICAL);
- sBoxAccel[1] = new wxBoxSizer(wxVERTICAL);
- sBoxAccel[2] = new wxBoxSizer(wxVERTICAL);
- wxBoxSizer * sBoxAccelNunchuk[3];
- sBoxAccelNunchuk[0] = new wxBoxSizer(wxVERTICAL);
- sBoxAccelNunchuk[1] = new wxBoxSizer(wxVERTICAL);
- sBoxAccelNunchuk[2] = new wxBoxSizer(wxVERTICAL);
- wxBoxSizer * sBoxGForceNunchuk[3];
- sBoxGForceNunchuk[0] = new wxBoxSizer(wxVERTICAL);
- sBoxGForceNunchuk[1] = new wxBoxSizer(wxVERTICAL);
- sBoxGForceNunchuk[2] = new wxBoxSizer(wxVERTICAL);
-
- wxStaticText * m_TextBattery = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Batt."), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- wxStaticText * m_TextRoll = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Roll"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- wxStaticText * m_TextPitch = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Pitch"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- wxStaticText *m_TextX[4], *m_TextY[4], *m_TextZ[4];
- m_TextX[0] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("X"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextX[1] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("X"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextX[2] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("X"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextX[3] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("X"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- m_TextY[0] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Y"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextY[1] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Y"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextY[2] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Y"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextY[3] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Y"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- m_TextZ[0] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Z"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextZ[1] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Z"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextZ[2] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Z"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextZ[3] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Z"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
-
- sBoxBattery->Add(m_GaugeBattery, 0, wxEXPAND | (wxALL), 0); sBoxBattery->Add(m_TextBattery, 0, wxEXPAND | (wxUP), 5);
-
- sBoxRoll[0]->Add(m_GaugeRoll[0], 0, wxEXPAND | (wxUP | wxDOWN | wxLEFT), 0); sBoxRoll[0]->Add(m_TextRoll, 0, wxEXPAND | (wxUP), 5);
- sBoxRoll[1]->Add(m_GaugeRoll[1], 0, wxEXPAND | (wxUP | wxDOWN | wxRIGHT), 0); sBoxRoll[1]->Add(m_TextPitch, 0, wxEXPAND | (wxUP), 5);
-
- sBoxGForce[0]->Add(m_GaugeGForce[0], 0, wxEXPAND | (wxUP | wxDOWN | wxLEFT), 0); sBoxGForce[0]->Add(m_TextX[0], 0, wxEXPAND | (wxUP), 5);
- sBoxGForce[1]->Add(m_GaugeGForce[1], 0, wxEXPAND | (wxUP | wxDOWN), 0); sBoxGForce[1]->Add(m_TextY[0], 0, wxEXPAND | (wxUP), 5);
- sBoxGForce[2]->Add(m_GaugeGForce[2], 0, wxEXPAND | (wxUP | wxDOWN | wxRIGHT), 0); sBoxGForce[2]->Add(m_TextZ[0], 0, wxEXPAND | (wxUP), 5);
-
- sBoxAccel[0]->Add(m_GaugeAccel[0], 0, wxEXPAND | (wxUP | wxDOWN | wxLEFT), 0); sBoxAccel[0]->Add(m_TextX[1], 0, wxEXPAND | (wxUP), 5);
- sBoxAccel[1]->Add(m_GaugeAccel[1], 0, wxEXPAND | (wxUP | wxDOWN), 0); sBoxAccel[1]->Add(m_TextY[1], 0, wxEXPAND | (wxUP), 5);
- sBoxAccel[2]->Add(m_GaugeAccel[2], 0, wxEXPAND | (wxUP | wxDOWN | wxRIGHT), 0); sBoxAccel[2]->Add(m_TextZ[1], 0, wxEXPAND | (wxUP), 5);
-
- sBoxGForceNunchuk[0]->Add(m_GaugeGForceNunchuk[0], 0, wxEXPAND | (wxUP | wxDOWN | wxLEFT), 0); sBoxGForceNunchuk[0]->Add(m_TextX[2], 0, wxEXPAND | (wxUP), 5);
- sBoxGForceNunchuk[1]->Add(m_GaugeGForceNunchuk[1], 0, wxEXPAND | (wxUP | wxDOWN), 0); sBoxGForceNunchuk[1]->Add(m_TextY[2], 0, wxEXPAND | (wxUP), 5);
- sBoxGForceNunchuk[2]->Add(m_GaugeGForceNunchuk[2], 0, wxEXPAND | (wxUP | wxDOWN | wxRIGHT), 0); sBoxGForceNunchuk[2]->Add(m_TextZ[2], 0, wxEXPAND | (wxUP), 5);
-
- sBoxAccelNunchuk[0]->Add(m_GaugeAccelNunchuk[0], 0, wxEXPAND | (wxUP | wxDOWN | wxLEFT), 0); sBoxAccelNunchuk[0]->Add(m_TextX[3], 0, wxEXPAND | (wxUP), 5);
- sBoxAccelNunchuk[1]->Add(m_GaugeAccelNunchuk[1], 0, wxEXPAND | (wxUP | wxDOWN), 0); sBoxAccelNunchuk[1]->Add(m_TextY[3], 0, wxEXPAND | (wxUP), 5);
- sBoxAccelNunchuk[2]->Add(m_GaugeAccelNunchuk[2], 0, wxEXPAND | (wxUP | wxDOWN | wxRIGHT), 0); sBoxAccelNunchuk[2]->Add(m_TextZ[3], 0, wxEXPAND | (wxUP), 5);
-
-
-
- wxStaticBoxSizer * sbRealStatus = new wxStaticBoxSizer(wxVERTICAL, m_PageRecording, wxT("Status"));
- wxStaticBoxSizer * sbRealIR = new wxStaticBoxSizer(wxHORIZONTAL, m_PageRecording, wxT("IR"));
- wxStaticBoxSizer * sbRealBattery = new wxStaticBoxSizer(wxVERTICAL, m_PageRecording, wxT("Battery"));
- wxStaticBoxSizer * sbRealRoll = new wxStaticBoxSizer(wxHORIZONTAL, m_PageRecording, wxT("Roll and Pitch"));
- wxStaticBoxSizer * sbRealGForce = new wxStaticBoxSizer(wxHORIZONTAL, m_PageRecording, wxT("G-Force"));
- wxStaticBoxSizer * sbRealAccel = new wxStaticBoxSizer(wxHORIZONTAL, m_PageRecording, wxT("Accelerometer"));
- wxStaticBoxSizer * sbRealGForceNunchuk = new wxStaticBoxSizer(wxHORIZONTAL, m_PageRecording, wxT("G-Force NC"));
- wxStaticBoxSizer * sbRealAccelNunchuk = new wxStaticBoxSizer(wxHORIZONTAL, m_PageRecording, wxT("Accelerometer NC"));
-
-
-
-
- // Status
- sbRealStatus->Add(m_TextUpdateRate, 0, wxEXPAND | (wxALL), 5);
- sbRealStatus->Add(m_UpdateMeters, 0, wxEXPAND | (wxLEFT | wxRIGHT | wxDOWN), 5);
-
- sbRealIR->Add(m_TextIR, 0, wxEXPAND | (wxALL), 5);
- sbRealBattery->Add(sBoxBattery, 0, wxEXPAND | (wxALL), 5);
- sbRealRoll->Add(sBoxRoll[0], 0, wxEXPAND | (wxALL), 5); sbRealRoll->Add(sBoxRoll[1], 0, wxEXPAND | (wxALL), 5);
- sbRealGForce->Add(sBoxGForce[0], 0, wxEXPAND | (wxALL), 5); sbRealGForce->Add(sBoxGForce[1], 0, wxEXPAND | (wxALL), 5); sbRealGForce->Add(sBoxGForce[2], 0, wxEXPAND | (wxALL), 5);
- sbRealAccel->Add(sBoxAccel[0], 0, wxEXPAND | (wxALL), 5); sbRealAccel->Add(sBoxAccel[1], 0, wxEXPAND | (wxALL), 5); sbRealAccel->Add(sBoxAccel[2], 0, wxEXPAND | (wxALL), 5);
- sbRealAccelNunchuk->Add(sBoxAccelNunchuk[0], 0, wxEXPAND | (wxALL), 5); sbRealAccelNunchuk->Add(sBoxAccelNunchuk[1], 0, wxEXPAND | (wxALL), 5); sbRealAccelNunchuk->Add(sBoxAccelNunchuk[2], 0, wxEXPAND | (wxALL), 5);
- sbRealGForceNunchuk->Add(sBoxGForceNunchuk[0], 0, wxEXPAND | (wxALL), 5); sbRealGForceNunchuk->Add(sBoxGForceNunchuk[1], 0, wxEXPAND | (wxALL), 5); sbRealGForceNunchuk->Add(sBoxGForceNunchuk[2], 0, wxEXPAND | (wxALL), 5);
-
- // Vertical leftmost status
- wxBoxSizer * sbStatusLeft = new wxBoxSizer(wxVERTICAL);
- sbStatusLeft->Add(sbRealStatus, 0, wxEXPAND | (wxLEFT), 0);
- sbStatusLeft->Add(sbRealIR, 0, wxEXPAND | (wxLEFT), 0);
-
- wxBoxSizer * sbRealWiimoteStatus = new wxBoxSizer(wxHORIZONTAL);
- sbRealWiimoteStatus->Add(sbStatusLeft, 0, wxEXPAND | (wxLEFT), 0);
- sbRealWiimoteStatus->Add(sbRealBattery, 0, wxEXPAND | (wxLEFT), 5);
- sbRealWiimoteStatus->Add(sbRealRoll, 0, wxEXPAND | (wxLEFT), 5);
- sbRealWiimoteStatus->Add(sbRealGForce, 0, wxEXPAND | (wxLEFT), 5);
- sbRealWiimoteStatus->Add(sbRealAccel, 0, wxEXPAND | (wxLEFT), 5);
- sbRealWiimoteStatus->Add(sbRealAccelNunchuk, 0, wxEXPAND | (wxLEFT), 5);
- sbRealWiimoteStatus->Add(sbRealGForceNunchuk, 0, wxEXPAND | (wxLEFT), 5);
-
- m_GaugeBattery->SetToolTip(wxT("Press '+' to show the current status. Press '-' to stop recording the status."));
-
- wxStaticBoxSizer * sbRealRecord = new wxStaticBoxSizer(wxVERTICAL, m_PageRecording, wxT("Record movements"));
-
- wxArrayString StrHotKeySwitch;
- StrHotKeySwitch.Add(wxT("Shift"));
- StrHotKeySwitch.Add(wxT("Ctrl"));
- StrHotKeySwitch.Add(wxT("Alt"));
- StrHotKeySwitch.Add(wxT(" "));
-
- wxArrayString StrHotKey;
- for(int i = 0; i < 10; i++) StrHotKey.Add(wxString::Format(wxT("%i"), i));
- StrHotKey.Add(wxT(" "));
-
- wxArrayString StrPlayBackSpeed;
- for(int i = 1; i <= 20; i++) StrPlayBackSpeed.Add(wxString::Format(wxT("%i"), i*25));
-
- wxBoxSizer * sRealRecord[RECORDING_ROWS + 1];
-
- wxStaticText * m_TextRec = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Rec."), wxDefaultPosition, wxSize(80, -1), wxALIGN_CENTRE);
- wxStaticText * m_TextHotKeyWm = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Wiim."), wxDefaultPosition, wxSize(32, -1), wxALIGN_CENTRE);
- wxStaticText * m_TextHotKeyNc = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Nunc."), wxDefaultPosition, wxSize(32, -1), wxALIGN_CENTRE);
- wxStaticText * m_TextHotKeyIR = new wxStaticText(m_PageRecording, wxID_ANY, wxT("IR"), wxDefaultPosition, wxSize(32, -1), wxALIGN_CENTRE);
- wxStaticText * m_TextMovement = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Movement name"), wxDefaultPosition, wxSize(200, -1), wxALIGN_CENTRE);
- wxStaticText * m_TextGame = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Game name"), wxDefaultPosition, wxSize(200, -1), wxALIGN_CENTRE);
- wxStaticText * m_TextIRBytes = new wxStaticText(m_PageRecording, wxID_ANY, wxT("IR"), wxDefaultPosition, wxSize(20, -1), wxALIGN_CENTRE);
- wxStaticText * m_TextRecSpeed = new wxStaticText(m_PageRecording, wxID_ANY, wxT("R. s."), wxDefaultPosition, wxSize(33, -1), wxALIGN_CENTRE);
- wxStaticText * m_TextPlaySpeed = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Pl. s."), wxDefaultPosition, wxSize(40, -1), wxALIGN_CENTRE);
-
- // Tool tips
- m_TextRec->SetToolTip(
- wxT("To record a movement first press this button, then start the recording by pressing 'A' on the Wiimote and stop the recording\n")
- wxT("by letting go of 'A'"));
- m_TextHotKeyWm->SetToolTip(
- wxT("Select a hotkey for playback of Wiimote movements. You can combine it with an")
- wxT(" optional Shift, Ctrl, or Alt switch."));
- m_TextHotKeyNc->SetToolTip(wxT(
- "Select a hotkey for playback of Nunchuck movements"));
- m_TextHotKeyIR->SetToolTip(wxT(
- "Select a hotkey for playback of Nunchuck movements"));
- m_TextRecSpeed->SetToolTip(wxT(
- "Recording speed in average measurements per second"));
- m_TextPlaySpeed->SetToolTip(
- wxT("Playback speed: A playback speed of 100 means that the playback occurs at the same rate as it was recorded. (You can see the\n")
- wxT("current update rate in the Status window above when a game is running.) However, if your framerate is only at 50% of full speed\n")
- wxT("you may want to select a playback rate of 50, because then the game might perceive the playback as a full speed playback. (This\n")
- wxT("holds if Wiimote_Update() is tied to the framerate, I'm not sure that this is the case. It seemed to vary somewhat with different\n")
- wxT("framerates but perhaps not enough to say that it was exactly tied to the framerate.) So until this is better understood you'll have\n")
- wxT("to try different playback rates and see which one that works."));
-
- sRealRecord[0] = new wxBoxSizer(wxHORIZONTAL);
- sRealRecord[0]->Add(m_TextRec, 0, wxEXPAND | (wxLEFT), 5);
- sRealRecord[0]->Add(m_TextHotKeyWm, 0, wxEXPAND | (wxLEFT), 62);
- sRealRecord[0]->Add(m_TextHotKeyNc, 0, wxEXPAND | (wxLEFT), 5);
- sRealRecord[0]->Add(m_TextHotKeyIR, 0, wxEXPAND | (wxLEFT), 5);
- sRealRecord[0]->Add(m_TextMovement, 0, wxEXPAND | (wxLEFT), 5);
- sRealRecord[0]->Add(m_TextGame, 0, wxEXPAND | (wxLEFT), 5);
- sRealRecord[0]->Add(m_TextIRBytes, 0, wxEXPAND | (wxLEFT), 5);
- sRealRecord[0]->Add(m_TextRecSpeed, 0, wxEXPAND | (wxLEFT), 5);
- sRealRecord[0]->Add(m_TextPlaySpeed, 0, wxEXPAND | (wxLEFT), 5);
- sbRealRecord->Add(sRealRecord[0], 0, wxEXPAND | (wxALL), 0);
-
- for(int i = 1; i < (RECORDING_ROWS + 1); i++)
- {
- sRealRecord[i] = new wxBoxSizer(wxHORIZONTAL);
- m_RecordButton[i] = new wxButton(m_PageRecording, IDB_RECORD + i, wxEmptyString, wxDefaultPosition, wxSize(80, 20), 0, wxDefaultValidator, wxEmptyString);
- m_RecordHotKeySwitch[i] = new wxChoice(m_PageRecording, IDC_RECORD + i, wxDefaultPosition, wxDefaultSize, StrHotKeySwitch);
- m_RecordHotKeyWiimote[i] = new wxChoice(m_PageRecording, IDC_RECORD + i, wxDefaultPosition, wxDefaultSize, StrHotKey);
- m_RecordHotKeyNunchuck[i] = new wxChoice(m_PageRecording, IDC_RECORD + i, wxDefaultPosition, wxDefaultSize, StrHotKey);
- m_RecordHotKeyIR[i] = new wxChoice(m_PageRecording, IDC_RECORD + i, wxDefaultPosition, wxDefaultSize, StrHotKey);
- m_RecordText[i] = new wxTextCtrl(m_PageRecording, IDT_RECORD_TEXT, wxT(""), wxDefaultPosition, wxSize(200, 19));
- m_RecordGameText[i] = new wxTextCtrl(m_PageRecording, IDT_RECORD_GAMETEXT, wxT(""), wxDefaultPosition, wxSize(200, 19));
- m_RecordIRBytesText[i] = new wxTextCtrl(m_PageRecording, IDT_RECORD_IRBYTESTEXT, wxT(""), wxDefaultPosition, wxSize(25, 19));
- m_RecordSpeed[i] = new wxTextCtrl(m_PageRecording, IDT_RECORD_SPEED, wxT(""), wxDefaultPosition, wxSize(30, 19), wxTE_READONLY | wxTE_CENTRE);
- m_RecordPlayBackSpeed[i] = new wxChoice(m_PageRecording, IDT_RECORD_PLAYSPEED, wxDefaultPosition, wxDefaultSize, StrPlayBackSpeed);
-
- m_RecordText[i]->SetMaxLength(35);
- m_RecordGameText[i]->SetMaxLength(35);
- m_RecordIRBytesText[i]->Enable(false);
- m_RecordSpeed[i]->Enable(false);
-
- // Row 2 Sizers
- sRealRecord[i]->Add(m_RecordButton[i], 0, wxEXPAND | (wxLEFT), 5);
- sRealRecord[i]->Add(m_RecordHotKeySwitch[i], 0, wxEXPAND | (wxLEFT), 5);
- sRealRecord[i]->Add(m_RecordHotKeyWiimote[i], 0, wxEXPAND | (wxLEFT), 2);
- sRealRecord[i]->Add(m_RecordHotKeyNunchuck[i], 0, wxEXPAND | (wxLEFT), 2);
- sRealRecord[i]->Add(m_RecordHotKeyIR[i], 0, wxEXPAND | (wxLEFT), 2);
- sRealRecord[i]->Add(m_RecordText[i], 0, wxEXPAND | (wxLEFT), 5);
- sRealRecord[i]->Add(m_RecordGameText[i], 0, wxEXPAND | (wxLEFT), 5);
- sRealRecord[i]->Add(m_RecordIRBytesText[i], 0, wxEXPAND | (wxLEFT), 5);
- sRealRecord[i]->Add(m_RecordSpeed[i], 0, wxEXPAND | (wxLEFT), 5);
- sRealRecord[i]->Add(m_RecordPlayBackSpeed[i], 0, wxEXPAND | (wxLEFT), 5);
-
- sbRealRecord->Add(sRealRecord[i], 0, wxEXPAND | (wxTOP), 2);
- }
-
- m_sRecordingMain = new wxBoxSizer(wxVERTICAL);
- m_sRecordingMain->Add(sbRealWiimoteStatus, 0, wxEXPAND | (wxLEFT | wxRIGHT | wxUP), 5);
- m_sRecordingMain->Add(sbRealRecord, 0, wxEXPAND | (wxLEFT | wxRIGHT | wxDOWN), 5);
-
- m_PageRecording->SetSizer(m_sRecordingMain);
-
- m_Apply = new wxButton(this, wxID_APPLY, wxT("Apply"));
- m_Close = new wxButton(this, wxID_CLOSE, wxT("Close"));
- m_Close->SetToolTip(wxT("Apply and Close"));
-
- wxBoxSizer* sButtons = new wxBoxSizer(wxHORIZONTAL);
- sButtons->AddStretchSpacer();
- sButtons->Add(m_Apply, 0, (wxALL), 0);
- sButtons->Add(m_Close, 0, (wxLEFT), 5);
-
- m_MainSizer = new wxBoxSizer(wxVERTICAL);
- m_MainSizer->Add(m_PageRecording, 1, wxEXPAND | wxALL, 5);
- m_MainSizer->Add(sButtons, 0, wxEXPAND | (wxLEFT | wxRIGHT | wxDOWN), 5);
-
- this->SetSizer(m_MainSizer);
- this->Layout();
-
- Fit();
-
- // Center the window if there is room for it
- #ifdef _WIN32
- if (GetSystemMetrics(SM_CYFULLSCREEN) > 800)
- Center();
- #endif
-
- ControlsCreated = true;
-}
-
-void WiimoteRecordingConfigDialog::ConvertToString()
-{
- IniFile file;
- file.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "WiimoteMovement.ini").c_str());
- std::string TmpStr = "", TmpIR = "", TmpTime = "";
-
- for (int i = 0; i < (int)m_vRecording.size(); i++)
- {
- // Write the movement data
- TmpStr += StringFromFormat("%s", m_vRecording.at(i).x >= 0 ? StringFromFormat("+%03i", m_vRecording.at(i).x).c_str() : StringFromFormat("%04i", m_vRecording.at(i).x).c_str());
- TmpStr += StringFromFormat("%s", m_vRecording.at(i).y >= 0 ? StringFromFormat("+%03i", m_vRecording.at(i).y).c_str() : StringFromFormat("%04i", m_vRecording.at(i).y).c_str());
- TmpStr += StringFromFormat("%s", m_vRecording.at(i).z >= 0 ? StringFromFormat("+%03i", m_vRecording.at(i).z).c_str() : StringFromFormat("%04i", m_vRecording.at(i).z).c_str());
- if (i < ((int)m_vRecording.size() - 1)) TmpStr += ",";
-
- DEBUG_LOG(WIIMOTE, "%s", TmpStr.c_str());
-
- // Write the IR data
- TmpIR += ArrayToString(m_vRecording.at(i).IR, IRBytes, 0, 30, false);
- if (i < ((int)m_vRecording.size() - 1)) TmpIR += ",";
-
- // Write the timestamps. The upper limit is 99 seconds.
- int Time = (int)((m_vRecording.at(i).Time - m_vRecording.at(0).Time) * 1000);
- TmpTime += StringFromFormat("%05i", Time);
- if (i < ((int)m_vRecording.size() - 1)) TmpTime += ",";
-
- /* Break just short of the IniFile.cpp byte limit so that we don't
- crash file.Load() the next time. This limit should never be hit
- because of the recording limit below. I keep it here just in
- case. */
- if(TmpStr.length() > (1024*10 - 10) || TmpIR.length() > (1024*10 - 10) || TmpTime.length() > (1024*10 - 10))
- {
- break;
- PanicAlert("Your recording was to long, the entire recording was not saved.");
- }
-
- // Debug
- DEBUG_LOG(WIIMOTE, "Saved: [%i / %i] %03i %03i %03i", i, m_vRecording.size(), m_vRecording.at(i).x, m_vRecording.at(i).y, m_vRecording.at(i).z);
- }
-
- // Recordings per second
- double Recordings = (double)m_vRecording.size();
- double Time = m_vRecording.at(m_vRecording.size() - 1).Time - m_vRecording.at(0).Time;
- int Rate = (int)(Recordings / Time);
-
- // If time or the number of recordings are zero we set the Rate to zero
- if (Time == 0 || m_vRecording.size() == 0) Rate = 0;
-
- // Update GUI
- m_RecordIRBytesText[m_iRecordTo]->SetValue(wxString::Format(wxT("%i"), IRBytes));
- m_RecordSpeed[m_iRecordTo]->SetValue(wxString::Format(wxT("%i"), Rate));
-
- // Save file
- std::string SaveName = StringFromFormat("Recording%i", m_iRecordTo);
- file.Set(SaveName.c_str(), "Movement", TmpStr.c_str());
- file.Set(SaveName.c_str(), "IR", TmpIR.c_str());
- file.Set(SaveName.c_str(), "Time", TmpTime.c_str());
- file.Set(SaveName.c_str(), "IRBytes", IRBytes);
- file.Set(SaveName.c_str(), "RecordingSpeed", Rate);
-
- // Set a default playback speed if none is set already
- int TmpPlaySpeed; file.Get(SaveName.c_str(), "PlaybackSpeed", &TmpPlaySpeed, -1);
- if (TmpPlaySpeed == -1)
- {
- file.Set(SaveName.c_str(), "PlaybackSpeed", 3);
- m_RecordPlayBackSpeed[m_iRecordTo]->SetSelection(3);
- }
-
- file.Save((std::string(File::GetUserPath(D_CONFIG_IDX)) + "WiimoteMovement.ini").c_str());
-
- DEBUG_LOG(WIIMOTE, "Save recording to WiimoteMovement.ini");
-}
-
-// Timeout the recording
-void WiimoteRecordingConfigDialog::Update(wxTimerEvent& WXUNUSED(event))
-{
- m_bWaitForRecording = false;
- m_bRecording = false;
- m_RecordButton[m_iRecordTo]->SetLabel(wxT(""));
- UpdateRecordingGUI();
-}
-
-void WiimoteRecordingConfigDialog::RecordMovement(wxCommandEvent& event)
-{
- m_iRecordTo = event.GetId() - 2000;
-
- if(WiiMoteReal::g_MotionSensing)
- {
- // Check if there already is a recording here
- if(m_RecordSpeed[m_iRecordTo]->GetLineLength(0) > 0)
- {
- if(!AskYesNo("Do you want to replace the current recording?")) return;
- }
- m_RecordButton[m_iRecordTo]->SetLabel(wxT("Hold A"));
- }
- else
- {
- m_RecordButton[m_iRecordTo]->SetLabel(wxT("Press +"));
- return;
- }
-
- m_bWaitForRecording = true;
- m_bRecording = false;
-
- UpdateRecordingGUI();
-
- m_TimeoutTimer->Start(5000, true);
-}
-
-void WiimoteRecordingConfigDialog::DoRecordA(bool Pressed)
-{
- // Return if we are not waiting or recording
- if (! (m_bWaitForRecording || m_bRecording)) return;
-
- // Return if we are waiting but have not pressed A
- if (m_bWaitForRecording && !Pressed) return;
-
- // Return if we are recording but are still pressing A
- if (m_bRecording && Pressed) return;
-
- //m_bAllowA = false;
- m_bRecording = Pressed;
-
- // Start recording, only run this once
- if(m_bRecording && m_bWaitForRecording)
- {
- m_RecordButton[m_iRecordTo]->SetLabel(wxT("Recording..."));
- m_vRecording.clear(); // Clear the list
- m_TimeoutTimer->Stop();
- m_bWaitForRecording = false;
- }
- // The recording is done
- else
- {
- m_RecordButton[m_iRecordTo]->SetLabel(wxT("Done"));
- DEBUG_LOG(WIIMOTE, "Done: %i %i", m_bWaitForRecording, m_bRecording);
- //m_bAllowA = true;
- ConvertToString();
- }
-
- UpdateRecordingGUI();
-}
-
-void WiimoteRecordingConfigDialog::DoRecordMovement(int _x, int _y, int _z, const u8 *_IR, int _IRBytes)
-{
- //std::string Tmp1 = ArrayToString(_IR, 20, 0, 30);
- //DEBUG_LOG(WIIMOTE, "DoRecordMovement: %s", Tmp1.c_str());
-
- if (!m_bRecording) return;
-
- //DEBUG_LOG(WIIMOTE, "DoRecordMovement: %03i %03i %03i", _x, _y, _z);
-
- SRecording Tmp;
- Tmp.x = _x;
- Tmp.y = _y;
- Tmp.z = _z;
- Tmp.Time = Common::Timer::GetDoubleTime();
- memcpy(Tmp.IR, _IR, _IRBytes);
- m_vRecording.push_back(Tmp);
-
- // Save the number of IR bytes
- IRBytes = _IRBytes;
-
- // The upper limit of a recording coincides with the IniFile.cpp limit, each list element
- // is 7 bytes, therefore be divide by 7
- if (m_vRecording.size() > (10*1024 / 7 - 2) )
- {
- m_bRecording = false;
- m_RecordButton[m_iRecordTo]->SetLabel(wxT("Done"));
- ConvertToString();
- UpdateRecordingGUI();
- }
-}
-
diff --git a/Source/Plugins/Plugin_Wiimote/Src/ConfigRecordingDlg.cpp b/Source/Plugins/Plugin_Wiimote/Src/ConfigRecordingDlg.cpp
deleted file mode 100644
index 69d7955b19..0000000000
--- a/Source/Plugins/Plugin_Wiimote/Src/ConfigRecordingDlg.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// 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, version 2.0.
-
-// 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 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#include "wiimote_hid.h"
-#include "main.h"
-#include "ConfigRecordingDlg.h"
-#include "ConfigBasicDlg.h"
-#include "Config.h"
-#include "EmuMain.h" // for LoadRecordedMovements()
-#include "wiimote_real.h"
-
-
-BEGIN_EVENT_TABLE(WiimoteRecordingConfigDialog,wxDialog)
- EVT_CLOSE(WiimoteRecordingConfigDialog::OnClose)
- EVT_BUTTON(wxID_CLOSE, WiimoteRecordingConfigDialog::CloseClick)
- EVT_BUTTON(wxID_APPLY, WiimoteRecordingConfigDialog::CloseClick)
-
- EVT_CHOICE(IDC_RECORD + 1, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 2, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 3, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 4, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 5, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 6, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 7, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 8, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 9, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 10, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 11, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 12, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 13, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 14, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_CHOICE(IDC_RECORD + 15, WiimoteRecordingConfigDialog::RecordingChanged)
- EVT_BUTTON(IDB_RECORD + 1, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 2, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 3, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 4, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 5, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 6, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 7, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 8, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 9, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 10, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 11, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 12, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 13, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 14, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_BUTTON(IDB_RECORD + 15, WiimoteRecordingConfigDialog::RecordMovement)
- EVT_TIMER(IDTM_UPDATE, WiimoteRecordingConfigDialog::Update)
-END_EVENT_TABLE()
-
-
-WiimoteRecordingConfigDialog::WiimoteRecordingConfigDialog(wxWindow *parent, wxWindowID id, const wxString &title,
- const wxPoint &position, const wxSize& size, long style)
-: wxDialog(parent, id, title, position, size, style)
-{
-#if wxUSE_TIMER
- m_TimeoutTimer = new wxTimer(this, IDTM_UPDATE);
-#endif
-
- m_bWaitForRecording = false;
- m_bRecording = false;
-
- m_vRecording.resize(RECORDING_ROWS + 1);
-
- g_Config.Load();
- CreateGUIControlsRecording();
- SetBackgroundColour(m_PageRecording->GetBackgroundColour());
- LoadFile();
- // Set control values
- UpdateRecordingGUI();
-}
-
-void WiimoteRecordingConfigDialog::OnClose(wxCloseEvent& event)
-{
- SaveFile();
- EndModal(wxID_CLOSE);
-}
-
-
-void WiimoteRecordingConfigDialog::CloseClick(wxCommandEvent& event)
-{
- switch(event.GetId())
- {
- case wxID_CLOSE:
-#if HAVE_WIIUSE
- if (!WiiMoteReal::SafeClose())
-#endif
- Close();
- break;
- case wxID_APPLY:
- SaveFile();
- WiiMoteEmu::LoadRecordedMovements();
- break;
- }
-}
-
-void WiimoteRecordingConfigDialog::RecordingChanged(wxCommandEvent& event)
-{
-
- switch (event.GetId())
- {
- case ID_UPDATE_REAL:
- g_Config.bUpdateRealWiimote = m_UpdateMeters->IsChecked();
- break;
- default:
- // Check if any of the other choice boxes has the same hotkey
- for (int i = 1; i < (RECORDING_ROWS + 1); i++)
- {
- int CurrentChoiceBox = (event.GetId() - IDC_RECORD);
- if (i == CurrentChoiceBox) continue;
- if (m_RecordHotKeyWiimote[i]->GetSelection() == m_RecordHotKeyWiimote[CurrentChoiceBox]->GetSelection()) m_RecordHotKeyWiimote[i]->SetSelection(10);
- if (m_RecordHotKeyNunchuck[i]->GetSelection() == m_RecordHotKeyNunchuck[CurrentChoiceBox]->GetSelection()) m_RecordHotKeyNunchuck[i]->SetSelection(10);
- if (m_RecordHotKeyIR[i]->GetSelection() == m_RecordHotKeyIR[CurrentChoiceBox]->GetSelection()) m_RecordHotKeyIR[i]->SetSelection(10);
-
- //DEBUG_LOG(WIIMOTE, "HotKey: %i %i",
- // m_RecordHotKey[i]->GetSelection(), m_RecordHotKey[CurrentChoiceBox]->GetSelection());
- }
- break;
- }
- g_Config.Save();
- UpdateRecordingGUI();
-}
-
-
-void WiimoteRecordingConfigDialog::UpdateRecordingGUI(int Slot)
-{
- // Disable all recording buttons
- #ifdef _WIN32
- bool ActiveRecording = !(m_bWaitForRecording || m_bRecording);
- for(int i = IDB_RECORD + 1; i < (IDB_RECORD + RECORDING_ROWS + 1); i++)
- if(ControlsCreated) m_PageRecording->FindItem(i)->Enable(ActiveRecording);
- #endif
-}
diff --git a/Source/Plugins/Plugin_Wiimote/Src/ConfigRecordingDlg.h b/Source/Plugins/Plugin_Wiimote/Src/ConfigRecordingDlg.h
deleted file mode 100644
index 321c6e012b..0000000000
--- a/Source/Plugins/Plugin_Wiimote/Src/ConfigRecordingDlg.h
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// 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, version 2.0.
-
-// 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 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#ifndef __CONFIGDIALOG_h__
-#define __CONFIGDIALOG_h__
-
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "Thread.h"
-
-class WiimoteRecordingConfigDialog : public wxDialog
-{
- public:
- WiimoteRecordingConfigDialog(wxWindow *parent,
- wxWindowID id = wxID_ANY,
- const wxString &title = wxT("Wii Remote Plugin Configuration"),
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxDEFAULT_DIALOG_STYLE | wxWANTS_CHARS);
- virtual ~WiimoteRecordingConfigDialog(){;}
-
- void UpdateRecordingGUI(int Slot = 0);
- void LoadFile();
- void SaveFile();
- void DoRecordMovement(int _x, int _y, int _z, const u8 *_IR, int IRBytes);
- void DoRecordA(bool Pressed);
- void ConvertToString();
-
- void CloseClick(wxCommandEvent& event);
- void RecordMovement(wxCommandEvent& event);
- void Update(wxTimerEvent& WXUNUSED(event));
-
- bool m_bWaitForRecording,
- m_bRecording;
-
- int m_iRecordTo;
-
- wxTimer *m_TimeoutTimer;
-
- // General status
- wxStaticText * m_TextUpdateRate,
- *m_TextIR;
-
- // Wiimote status
- wxGauge *m_GaugeBattery,
- *m_GaugeRoll[2],
- *m_GaugeGForce[3],
- *m_GaugeAccel[3],
- *m_GaugeAccelNunchuk[3],
- *m_GaugeGForceNunchuk[3];
-
- private:
- DECLARE_EVENT_TABLE();
-
- bool ControlsCreated;
- THREAD_RETURN SafeCloseReadWiimote_ThreadFunc2(void* arg);
- Common::Thread* g_pReadThread2;
-
- wxPanel *m_PageRecording;
- wxButton *m_Close,
- *m_Apply;
-
- wxBoxSizer *m_MainSizer,
- *m_sRecordingMain;
-
- wxCheckBox *m_UpdateMeters;
-
- wxButton * m_RecordButton[RECORDING_ROWS + 1];
- wxChoice * m_RecordHotKeySwitch[RECORDING_ROWS + 1];
- wxChoice * m_RecordHotKeyWiimote[RECORDING_ROWS + 1];
- wxChoice * m_RecordHotKeyNunchuck[RECORDING_ROWS + 1];
- wxChoice * m_RecordHotKeyIR[RECORDING_ROWS + 1];
- wxTextCtrl * m_RecordText[RECORDING_ROWS + 1];
- wxTextCtrl * m_RecordGameText[RECORDING_ROWS + 1];
- wxTextCtrl * m_RecordIRBytesText[RECORDING_ROWS + 1];
- wxTextCtrl * m_RecordSpeed[RECORDING_ROWS + 1];
- wxChoice * m_RecordPlayBackSpeed[RECORDING_ROWS + 1];
-
- std::vector m_vRecording;
- int IRBytes;
-
- enum
- {
- ID_RECORDINGPAGE = 1000,
- IDTM_UPDATE,
-
- // Real
- ID_UPDATE_REAL,
- IDB_RECORD = 2000,
- IDC_RECORD = 3000,
- IDC_PLAY_WIIMOTE,
- IDC_PLAY_NUNCHUCK,
- IDC_PLAY_IR,
- IDT_RECORD_TEXT,
- IDT_RECORD_GAMETEXT,
- IDT_RECORD_IRBYTESTEXT,
- IDT_RECORD_SPEED,
- IDT_RECORD_PLAYSPEED
- };
-
- void OnClose(wxCloseEvent& event);
- void CreateGUIControlsRecording();
- void RecordingChanged(wxCommandEvent& event);
-};
-
-extern WiimoteRecordingConfigDialog *m_RecordingConfigFrame;
-#endif
diff --git a/Source/Plugins/Plugin_Wiimote/Src/ReadWiimote.cpp b/Source/Plugins/Plugin_Wiimote/Src/ReadWiimote.cpp
deleted file mode 100644
index d5a56bc4cd..0000000000
--- a/Source/Plugins/Plugin_Wiimote/Src/ReadWiimote.cpp
+++ /dev/null
@@ -1,417 +0,0 @@
-// Copyright (C) 2003 Dolphin Project.
-
-// 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, version 2.0.
-
-// 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 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#include // System
-
-#include "wiiuse.h" // Externals
-
-#include "StringUtil.h"
-#include "Timer.h"
-#include "pluginspecs_wiimote.h"
-
-#include "wiimote_real.h" // Local
-#include "wiimote_hid.h"
-#include "EmuDefinitions.h"
-#include "EmuMain.h"
-#include "main.h"
-#if defined(HAVE_WX) && HAVE_WX
- #include "ConfigBasicDlg.h"
- #include "ConfigRecordingDlg.h"
- #include "ConfigPadDlg.h"
-#endif
-#include "Config.h"
-
-namespace WiiMoteReal
-{
-int GetIRDataSize(struct wiimote_t* wm)
-{
- if (WIIUSE_USING_EXP(wm))
- return 10;
- else
- return 12;
-}
-
-void handle_ctrl_status(struct wiimote_t* wm)
-{
- DEBUG_LOG(WIIMOTE, "--- CONTROLLER STATUS [wiimote id %i] ---", wm->unid);
-
- DEBUG_LOG(WIIMOTE, "attachment: %i", wm->expansion.type);
- DEBUG_LOG(WIIMOTE, "speaker: %i", WIIUSE_USING_SPEAKER(wm));
- DEBUG_LOG(WIIMOTE, "ir: %i", WIIUSE_USING_IR(wm));
- DEBUG_LOG(WIIMOTE, "leds: %i %i %i %i", WIIUSE_IS_LED_SET(wm, 1), WIIUSE_IS_LED_SET(wm, 2), WIIUSE_IS_LED_SET(wm, 3), WIIUSE_IS_LED_SET(wm, 4));
- DEBUG_LOG(WIIMOTE, "battery: %f %%", wm->battery_level);
-}
-
-bool IRDataOK(struct wiimote_t* wm)
-{
- // This check is valid because 0 should only be returned if the data
- // hasn't been filled in by wiiuse
- int IRDataSize = GetIRDataSize(wm);
- for (int i = 7; i < IRDataSize; i++)
- if (wm->event_buf[i] == 0)
- return false;
-
- return true;
-}
-
-void handle_event(struct wiimote_t* wm)
-{
- //DEBUG_LOG(WIIMOTE, "--- EVENT [id %i] ---", wm->unid);
-
- // if a button is pressed, report it
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_A)) DEBUG_LOG(WIIMOTE, "A pressed");
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_B)) DEBUG_LOG(WIIMOTE, "B pressed");
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_UP)) DEBUG_LOG(WIIMOTE, "UP pressed");
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_DOWN)) DEBUG_LOG(WIIMOTE, "DOWN pressed");
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_LEFT)) DEBUG_LOG(WIIMOTE, "LEFT pressed");
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_RIGHT)) DEBUG_LOG(WIIMOTE, "RIGHT pressed");
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_MINUS)) DEBUG_LOG(WIIMOTE, "MINUS pressed");
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_PLUS)) DEBUG_LOG(WIIMOTE, "PLUS pressed");
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_ONE)) DEBUG_LOG(WIIMOTE, "ONE pressed");
- //if (IS_PRESSED(wm, WIIMOTE_BUTTON_ONE)) g_Run = false;
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_TWO)) DEBUG_LOG(WIIMOTE, "TWO pressed");
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_HOME)) DEBUG_LOG(WIIMOTE, "HOME pressed");
- // Create shortcut to the nunchuck
-
- struct nunchuk_t* nc = NULL;
-
- if (wm->expansion.type == EXP_NUNCHUK) {
-
- nc = (nunchuk_t*)&wm->expansion.nunchuk;
- if (IS_PRESSED(nc, NUNCHUK_BUTTON_C))
- DEBUG_LOG(WIIMOTE, "C pressed");
- if (IS_PRESSED(nc, NUNCHUK_BUTTON_Z))
- DEBUG_LOG(WIIMOTE, "Z pressed");
- }
-
-
-
-
-
- // Pressing minus will tell the wiimote we are no longer interested in movement.
- // This is useful because it saves battery power.
- if (IS_JUST_PRESSED(wm, WIIMOTE_BUTTON_MINUS))
- {
- wiiuse_motion_sensing(wm, 0);
- wiiuse_set_ir(wm, 0);
- g_MotionSensing = false;
- }
-
- // Turn aceelerometer and IR reporting on, there is some kind of bug that prevents us from turing these on
- // directly after each other, so we have to wait for another wiiuse_poll() this way
- if (IS_JUST_PRESSED(wm, WIIMOTE_BUTTON_PLUS))
- {
- wiiuse_motion_sensing(wm, 1);
- g_MotionSensing = true;
- }
- // Turn IR reporting on
- if (g_MotionSensing && !WIIUSE_USING_IR(wm))
- wiiuse_set_ir(wm, 1);
-
-#if defined(HAVE_WX) && HAVE_WX
- if (!m_RecordingConfigFrame) return;
-
- // Print battery status
- if(m_RecordingConfigFrame && g_Config.bUpdateRealWiimote)
- m_RecordingConfigFrame->m_GaugeBattery->SetValue((int)floor((wm->battery_level * 100) + 0.5));
-#endif
-
- // If the accelerometer is turned on then print angles
- if (WIIUSE_USING_ACC(wm) && WIIUSE_USING_IR(wm))
- {
- /*
- std::string Tmp;
- Tmp += StringFromFormat("Roll: %2.1f ", wm->orient.roll);
- Tmp += StringFromFormat("Pitch: %2.1f ", wm->orient.pitch);
- Tmp += StringFromFormat("Battery: %1.2f\n", wm->battery_level);
- Tmp += StringFromFormat("G-Force x, y, z: %1.2f %1.2f %1.2f\n", wm->gforce.x, wm->gforce.y, wm->gforce.z);
- Tmp += StringFromFormat("Accel x, y, z: %03i %03i %03i\n", wm->accel.x, wm->accel.y, wm->accel.z); */
-
- // wm->event_buf is cleared at the end of all wiiuse_poll(), so wm->event_buf will always be zero
- // after that. To get the raw IR data we need to read the wiimote again. This seems to work most of the time,
- // it seems to fails with a regular interval about each tenth read.
- if (wiiuse_io_read(wm))
- if (IRDataOK(wm))
- memcpy(g_EventBuffer, wm->event_buf, GetIRDataSize(wm));
-/*
- // Go through each of the 4 possible IR sources
- for (int i = 0; i < 4; ++i)
- {
- // Check if the source is visible
- if (wm->ir.dot[i].visible)
- Tmp += StringFromFormat("IR source %i: (%u, %u)\n", i, wm->ir.dot[i].x, wm->ir.dot[i].y);
- }
-
- Tmp += "\n";
- Tmp += StringFromFormat("IR cursor: (%u, %u)\n", wm->ir.x, wm->ir.y);
- Tmp += StringFromFormat("IR z distance: %f\n", wm->ir.z);
-
- if(wm->expansion.type == EXP_NUNCHUK)
- {
- Tmp += "\n";
- Tmp += StringFromFormat("Nunchuck accel x, y, z: %03i %03i %03i\n", nc->accel.x, nc->accel.y, nc->accel.z);
- } */
-
- //Tmp += "\n";
- //std::string TmpData = ArrayToString(g_EventBuffer, ReportSize, 0, 30);
- //Tmp += "Data: " + TmpData;
-
- //DEBUG_LOG(WIIMOTE, "%s", Tmp.c_str());
-
-#if defined(HAVE_WX) && HAVE_WX
- if(m_RecordingConfigFrame && g_Config.bUpdateRealWiimote)
- {
- // Produce adjusted accelerometer values
- float _Gx = (float)(wm->accel.x - wm->accel_calib.cal_zero.x) / (float)wm->accel_calib.cal_g.x;
- float _Gy = (float)(wm->accel.y - wm->accel_calib.cal_zero.y) / (float)wm->accel_calib.cal_g.y;
- float _Gz = (float)(wm->accel.z - wm->accel_calib.cal_zero.z) / (float)wm->accel_calib.cal_g.z;
-
- // Conver the data to integers
- int Gx = (int)(_Gx * 100);
- int Gy = (int)(_Gy * 100);
- int Gz = (int)(_Gz * 100);
-
-
- { //Updating Wiimote Gauges.
-
- m_RecordingConfigFrame->m_GaugeRoll[0]->SetValue(wm->orient.roll + 180);
- m_RecordingConfigFrame->m_GaugeRoll[1]->SetValue(wm->orient.pitch + 180);
-
- // Show g. forces between -3 and 3
- m_RecordingConfigFrame->m_GaugeGForce[0]->SetValue((int)floor((wm->gforce.x * 100) + 300.5));
- m_RecordingConfigFrame->m_GaugeGForce[1]->SetValue((int)floor((wm->gforce.y * 100) + 300.5));
- m_RecordingConfigFrame->m_GaugeGForce[2]->SetValue((int)floor((wm->gforce.z * 100) + 300.5));
-
- m_RecordingConfigFrame->m_GaugeAccel[0]->SetValue(wm->accel.x);
- m_RecordingConfigFrame->m_GaugeAccel[1]->SetValue(wm->accel.y);
- m_RecordingConfigFrame->m_GaugeAccel[2]->SetValue(wm->accel.z);
-
- int GNCx, GNCy, GNCz;
-
- if(wm->expansion.type == EXP_NUNCHUK) // Updating Nunchuck Gauges
- {
- m_RecordingConfigFrame->m_GaugeGForceNunchuk[0]->SetValue((int)floor((nc->gforce.x * 300) + 100.5));
- m_RecordingConfigFrame->m_GaugeGForceNunchuk[1]->SetValue((int)floor((nc->gforce.y * 300) + 100.5));
- m_RecordingConfigFrame->m_GaugeGForceNunchuk[2]->SetValue((int)floor((nc->gforce.z * 300) + 100.5));
-
- m_RecordingConfigFrame->m_GaugeAccelNunchuk[0]->SetValue(nc->accel.x);
- m_RecordingConfigFrame->m_GaugeAccelNunchuk[1]->SetValue(nc->accel.y);
- m_RecordingConfigFrame->m_GaugeAccelNunchuk[2]->SetValue(nc->accel.z);
-
- //Produce valid data for recording
- float _GNCx = (float)(nc->accel.x - nc->accel_calib.cal_zero.x) / (float)nc->accel_calib.cal_g.x;
- float _GNCy = (float)(nc->accel.y - nc->accel_calib.cal_zero.y) / (float)nc->accel_calib.cal_g.y;
- float _GNCz = (float)(nc->accel.z - nc->accel_calib.cal_zero.z) / (float)nc->accel_calib.cal_g.z;
-
- // Conver the data to integers
- GNCx = (int)(_GNCx * 100);
- GNCy = (int)(_GNCy * 100);
- GNCz = (int)(_GNCz * 100);
-
- }
-
- m_RecordingConfigFrame->m_TextIR->SetLabel(wxString::Format(
- wxT("Cursor: %03u %03u\nDistance:%4.0f"), wm->ir.x, wm->ir.y, wm->ir.z));
-
- //m_RecordingConfigFrame->m_TextAccNeutralCurrent->SetLabel(wxString::Format(
- // wxT("Current: %03u %03u %03u"), Gx, Gy, Gz));
-
- if(m_RecordingConfigFrame->m_bRecording) {
- if(wm->expansion.type != EXP_NUNCHUK) {
- DEBUG_LOG(WIIMOTE, "Wiiuse Recorded accel x, y, z: %03i %03i %03i", Gx, Gy, Gz);
- }
- else {
- DEBUG_LOG(WIIMOTE, "Wiiuse Recorded accel x, y, z: %03i %03i %03i; NCx, NCy, NCz: %03i %03i %03i",Gx,Gy,Gz, GNCx, GNCy, GNCz);
- }
- }
- }
-
-
- // Send the data to be saved //todo: passing nunchuck x,y,z vars as well
- m_RecordingConfigFrame->DoRecordMovement(Gx, Gy, Gz, g_EventBuffer + 6, GetIRDataSize(wm));
-
- // Turn recording on and off
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_A)) m_RecordingConfigFrame->DoRecordA(true);
- else m_RecordingConfigFrame->DoRecordA(false);
-
- // ------------------------------------
- // Show roll and pitch in the status box
- // --------------
- if(!g_DebugData)
- {
- DEBUG_LOG(WIIMOTE, "Roll:%03i Pitch:%03i", (int)wm->orient.roll, (int)wm->orient.pitch);
- }
- if(m_PadConfigFrame)
- {
- // Convert Roll and Pitch from 180 to 0x8000
- int Roll = (int)wm->orient.roll * (0x8000 / 180);
- int Pitch = (int)wm->orient.pitch * (0x8000 / 180);
- // Convert it to the box
- m_PadConfigFrame->Convert2Box(Roll);
- m_PadConfigFrame->Convert2Box(Pitch);
- // Show roll and pitch in the axis boxes
- m_PadConfigFrame->m_bmpDotRightOut[0]->SetPosition(wxPoint(Roll, Pitch));
- }
- }
-#endif
- }
- // Otherwise remove the values
- else
- {
-#if defined(HAVE_WX) && HAVE_WX
- if (m_RecordingConfigFrame)
- {
- NOTICE_LOG(BOOT, "readwiimote, reset bars to zero");
- m_RecordingConfigFrame->m_GaugeRoll[0]->SetValue(0);
- m_RecordingConfigFrame->m_GaugeRoll[1]->SetValue(0);
-
- m_RecordingConfigFrame->m_GaugeGForce[0]->SetValue(0);
- m_RecordingConfigFrame->m_GaugeGForce[1]->SetValue(0);
- m_RecordingConfigFrame->m_GaugeGForce[2]->SetValue(0);
-
- m_RecordingConfigFrame->m_GaugeAccel[0]->SetValue(0);
- m_RecordingConfigFrame->m_GaugeAccel[1]->SetValue(0);
- m_RecordingConfigFrame->m_GaugeAccel[2]->SetValue(0);
-
- m_RecordingConfigFrame->m_GaugeAccelNunchuk[0]->SetValue(0);
- m_RecordingConfigFrame->m_GaugeAccelNunchuk[1]->SetValue(0);
- m_RecordingConfigFrame->m_GaugeAccelNunchuk[2]->SetValue(0);
-
- m_RecordingConfigFrame->m_GaugeGForceNunchuk[0]->SetValue(0);
- m_RecordingConfigFrame->m_GaugeGForceNunchuk[1]->SetValue(0);
- m_RecordingConfigFrame->m_GaugeGForceNunchuk[2]->SetValue(0);
-
- m_RecordingConfigFrame->m_TextIR->SetLabel(wxT("Cursor:\nDistance:"));
- }
-#endif
- }
-}
-
-void ReadWiimote()
-{
- /* I place this outside wiiuse_poll() to produce a continous recording regardless of the status
- change of the Wiimote, wiiuse_poll() is only true if the status has changed. However, this the
- timing functions for recording playback that checks the time of the recording this should not
- be needed. But I still use it becase it seemed like state_changed() or the threshold values or
- something else might fail so that only huge status changed were reported. */
- for (int i = 0; i < g_NumberOfWiiMotes; i++)
- {
- handle_event(g_WiiMotesFromWiiUse[i]);
- }
- // Declaration
- std::string Temp;
-
- /* Timeout for data reading. This is used in Initialize() to read the Eeprom, if we have not gotten
- what we wanted in the WIIUSE_READ_DATA case we stop this loop and enable the regular
- wiiuse_io_read() and wiiuse_io_write() loop again. */
- if (g_RunTemporary)
- {
- // The SecondsToWait holds if the update rate of wiiuse_poll() is kept at the default value of 10 ms
- static const int SecondsToWait = 2;
- g_RunTemporaryCountdown++;
- if(g_RunTemporaryCountdown > (SecondsToWait * 100))
- {
- g_RunTemporaryCountdown = 0;
- g_RunTemporary = false;
- }
- }
-
- // Read formatted Wiimote data
- if (wiiuse_poll(g_WiiMotesFromWiiUse, MAX_WIIMOTES))
- {
- /*
- * This happens if something happened on any wiimote.
- * So go through each one and check if anything happened.
- */
- int i = 0;
- for (; i < MAX_WIIMOTES; ++i)
- {
- switch (g_WiiMotesFromWiiUse[i]->event)
- {
- case WIIUSE_EVENT:
- /* a generic event occured */
- //handle_event(g_WiiMotesFromWiiUse[i]);
- break;
-
- case WIIUSE_STATUS:
- /* a status event occured */
- //handle_ctrl_status(g_WiiMotesFromWiiUse[i]);
- break;
-
- case WIIUSE_DISCONNECT:
- case WIIUSE_UNEXPECTED_DISCONNECT:
- /* the wiimote disconnected */
- //handle_disconnect(wiimotes[i]);
- break;
-
- case WIIUSE_READ_DATA:
- /*
- * Data we requested to read was returned.
- * Take a look at wiimotes[i]->read_req
- * for the data.
- */
- if(g_WiiMotesFromWiiUse[i]->read_req->size == sizeof(WiiMoteEmu::EepromData_0)
- && g_WiiMotesFromWiiUse[i]->read_req->addr == 0)
- {
- Temp = ArrayToString(g_WiiMotesFromWiiUse[i]->read_req->buf, sizeof(WiiMoteEmu::EepromData_0), 0, 30);
- //memcpy(WiiMoteEmu::g_Eeprom[i], g_WiiMotesFromWiiUse[i]->read_req->buf, sizeof(WiiMoteEmu::EepromData_0));
- DEBUG_LOG(WIIMOTE, "EEPROM: %s", Temp.c_str());
- g_RunTemporary = false;
- }
- break;
-
- case WIIUSE_NUNCHUK_INSERTED:
- /*
- * a nunchuk was inserted
- * This is a good place to set any nunchuk specific
- * threshold values. By default they are the same
- * as the wiimote.
- */
- //wiiuse_set_nunchuk_orient_threshold(g_WiiMotesFromWiiUse[i], 90.0f);
- //wiiuse_set_nunchuk_accel_threshold(g_WiiMotesFromWiiUse[i], 100);
- break;
-
- case WIIUSE_CLASSIC_CTRL_INSERTED:
- DEBUG_LOG(WIIMOTE, "Classic controller inserted.");
- break;
-
- case WIIUSE_GUITAR_HERO_3_CTRL_INSERTED:
- // some expansion was inserted
- //handle_ctrl_status(wiimotes[i]);
- DEBUG_LOG(WIIMOTE, "Guitar Hero 3 controller inserted.");
- break;
-
- case WIIUSE_NUNCHUK_REMOVED:
- DEBUG_LOG(WIIMOTE, "Nunchuck was removed.");
- break;
-
- case WIIUSE_CLASSIC_CTRL_REMOVED:
- case WIIUSE_GUITAR_HERO_3_CTRL_REMOVED:
- // some expansion was removed
- //handle_ctrl_status(wiimotes[i]);
- DEBUG_LOG(WIIMOTE, "An expansion was removed.");
- break;
-
- default:
- break;
- }
- }
- }
-}
-
-
-}; // end of namespace
diff --git a/Source/Plugins/Plugin_Wiimote/Src/main.cpp b/Source/Plugins/Plugin_Wiimote/Src/main.cpp
index 03ab1c7f28..f0430bf4c0 100644
--- a/Source/Plugins/Plugin_Wiimote/Src/main.cpp
+++ b/Source/Plugins/Plugin_Wiimote/Src/main.cpp
@@ -27,11 +27,9 @@
#include "main.h"
#if defined(HAVE_WX) && HAVE_WX
#include "ConfigPadDlg.h"
- #include "ConfigRecordingDlg.h"
#include "ConfigBasicDlg.h"
WiimotePadConfigDialog *m_PadConfigFrame = NULL;
- WiimoteRecordingConfigDialog *m_RecordingConfigFrame = NULL;
WiimoteBasicConfigDialog *m_BasicConfigFrame = NULL;
#endif
#include "Config.h"
@@ -358,20 +356,6 @@ void Wiimote_ControlChannel(int _number, u16 _channelID, const void* _pData, u32
// This sends a Data Report from the Wiimote. See SystemTimers.cpp for the documentation of this update.
void Wiimote_Update(int _number)
{
- // Tell us about the update rate, but only about once every second to avoid a major slowdown
-#if defined(HAVE_WX) && HAVE_WX
- if (m_RecordingConfigFrame)
- {
- GetUpdateRate();
- if (g_UpdateWriteScreen > g_UpdateRate)
- {
- m_RecordingConfigFrame->m_TextUpdateRate->SetLabel(wxString::Format(wxT("Update rate: %03i times/s"), g_UpdateRate));
- g_UpdateWriteScreen = 0;
- }
- g_UpdateWriteScreen++;
- }
-#endif
-
// This functions will send:
// Emulated Wiimote: Only data reports 0x30-0x37
// Real Wiimote: Both data reports 0x30-0x37 and all other read reports
@@ -437,40 +421,3 @@ bool IsFocus()
of the form seconds.milleseconds for example 1234.123. The leding seconds have no particular meaning
but are just there to enable use to tell if we have entered a new second or now. */
// -----------------
-
-/* Calculate the current update frequency. Calculate the time between ten updates, and average
- five such rates. If we assume there are 60 updates per second if the game is running at full
- speed then we get this measure on average once every second. The reason to have a few updates
- between each measurement is becase the milliseconds may not be perfectly accurate and may return
- the same time even when a milliseconds has actually passed, for example.*/
-int GetUpdateRate()
-{
-#if defined(HAVE_WX) && HAVE_WX
- if(g_UpdateCounter == 10)
- {
- // Erase the old ones
- if(g_UpdateTimeList.size() == 5) g_UpdateTimeList.erase(g_UpdateTimeList.begin() + 0);
-
- // Calculate the time and save it
- int Time = (int)(10 / (Common::Timer::GetDoubleTime() - g_UpdateTime));
- g_UpdateTimeList.push_back(Time);
- //DEBUG_LOG(WIIMOTE, "Time: %i %f", Time, Common::Timer::GetDoubleTime());
-
- int TotalTime = 0;
- for (int i = 0; i < (int)g_UpdateTimeList.size(); i++)
- TotalTime += g_UpdateTimeList.at(i);
- g_UpdateRate = TotalTime / 5;
-
- // Write the new update time
- g_UpdateTime = Common::Timer::GetDoubleTime();
-
- g_UpdateCounter = 0;
- }
-
- g_UpdateCounter++;
-
- return g_UpdateRate;
-#else
- return 0;
-#endif
-}
diff --git a/Source/Plugins/Plugin_Wiimote/Src/main.h b/Source/Plugins/Plugin_Wiimote/Src/main.h
index 8680a14ba4..4a88dc7676 100644
--- a/Source/Plugins/Plugin_Wiimote/Src/main.h
+++ b/Source/Plugins/Plugin_Wiimote/Src/main.h
@@ -32,7 +32,6 @@
#endif
// Definitions and declarations
bool IsFocus();
-int GetUpdateRate();
//void InterruptDebugging(bool Emu, const void* _pData);
//void ReadDebugging(bool Emu, const void* _pData, int Size);
diff --git a/Source/Plugins/Plugin_Wiimote/Src/wiimote_real.cpp b/Source/Plugins/Plugin_Wiimote/Src/wiimote_real.cpp
index 8652dd4e16..d5d035e9c4 100644
--- a/Source/Plugins/Plugin_Wiimote/Src/wiimote_real.cpp
+++ b/Source/Plugins/Plugin_Wiimote/Src/wiimote_real.cpp
@@ -35,7 +35,6 @@
#define EXCLUDE_H // Avoid certain declarations in wiimote_real.h
#include "wiimote_real.h"
#if defined(HAVE_WX) && HAVE_WX
-#include "ConfigRecordingDlg.h"
#include "ConfigBasicDlg.h"
#endif
@@ -64,16 +63,6 @@ Common::Thread* g_pReadThread = NULL;
int g_NumberOfWiiMotes;
CWiiMote* g_WiiMotes[MAX_WIIMOTES];
volatile bool g_Shutdown = false;
-Common::Event g_StartThread;
-Common::Event g_StopThreadTemporary;
-bool g_LocalThread = true;
-bool g_IRSensing = false;
-bool g_MotionSensing = false;
-u64 g_UpdateTime = 0;
-int g_UpdateCounter = 0;
-bool g_RunTemporary = false;
-int g_RunTemporaryCountdown = 0;
-u8 g_EventBuffer[32];
bool g_WiimoteInUse[MAX_WIIMOTES];
Common::Event NeedsConnect;
Common::Event Connected;
@@ -94,7 +83,6 @@ THREAD_RETURN RunInvisibleMessageWindow_ThreadFunc(void* arg);
#endif
THREAD_RETURN ReadWiimote_ThreadFunc(void* arg);
-THREAD_RETURN SafeCloseReadWiimote_ThreadFunc(void* arg);
// Probably this class should be in its own file
@@ -377,6 +365,13 @@ int Initialize()
DEBUG_LOG(WIIMOTE, "Found No of Wiimotes: %i", g_NumberOfWiiMotes);
if (g_NumberOfWiiMotes > 0)
{
+ /*
+ //TODO: We need here to re-order the wiimote structure, after we shutdown() and re-init().
+ // If we don't do this Wiimotes will change slots on addition of a new real wiimote during a game,
+ // causing a disconnect as well.
+ if (g_EmulatorState == PLUGIN_EMUSTATE_PAUSE)
+ SortWiimotes();
+ */
g_RealWiiMotePresent = true;
// Create a new thread for listening for Wiimote data
// and also connecting in Linux/OSX.
@@ -384,6 +379,8 @@ int Initialize()
g_pReadThread = new Common::Thread(ReadWiimote_ThreadFunc, NULL);
// Don't run the Wiimote thread if no wiimotes were found
g_Shutdown = false;
+
+ //Hack for OSX
NeedsConnect.Set();
Connected.Wait();
}
@@ -391,10 +388,7 @@ int Initialize()
return 0;
for (i = 0; i < g_NumberOfWiiMotes; i++)
- {
- // Remove the wiiuse_poll() threshold
- wiiuse_set_accel_threshold(g_WiiMotesFromWiiUse[i], 0);
-
+ {
// Set the ir sensor sensitivity.
if (g_Config.iIRLevel) {
wiiuse_set_ir_sensitivity(g_WiiMotesFromWiiUse[i], g_Config.iIRLevel);
@@ -402,33 +396,13 @@ int Initialize()
// Set the sensor bar position, this should only affect the internal wiiuse api functions
wiiuse_set_ir_position(g_WiiMotesFromWiiUse[i], WIIUSE_IR_ABOVE);
-
- // Set flags
- //wiiuse_set_flags(g_WiiMotesFromWiiUse[i], NULL, WIIUSE_SMOOTHING);
}
-
- // psyjoe reports this allows majority of lost packets to be transferred.
- // Will test soon
- if (g_Config.bWiiReadTimeout != 10)
+ if (g_Config.bWiiReadTimeout != 10)
wiiuse_set_timeout(g_WiiMotesFromWiiUse, g_NumberOfWiiMotes, g_Config.bWiiReadTimeout, g_Config.bWiiReadTimeout);
// If we are connecting from the config window without a game running we set the LEDs
if (g_EmulatorState != PLUGIN_EMUSTATE_PLAY && g_RealWiiMotePresent)
FlashLights(true);
-
-
- /* Allocate memory and copy the Wiimote eeprom accelerometer neutral values
- to g_Eeprom. Unlike with and extension we have to do this here, because
- this data is only read once when the Wiimote is connected. Also, we
- can't change the neutral values the wiimote will report, I think, unless
- we update its eeprom? In any case it's probably better to let the
- current calibration be where it is and adjust the global values after
- that to avoid overwriting critical data on any Wiimote. */
- for (i = 0; i < g_NumberOfWiiMotes; i++)
- {
- byte *data = (byte*)malloc(sizeof(byte) * sizeof(WiiMoteEmu::EepromData_0));
- wiiuse_read_data(g_WiiMotesFromWiiUse[i], data, 0, sizeof(WiiMoteEmu::EepromData_0));
- }
// Initialized, even if we didn't find a Wiimote
g_RealWiiMoteInitialized = true;
@@ -508,10 +482,6 @@ void Allocate()
DEBUG_LOG(WIIMOTE, "Using %i Real Wiimote(s) and %i Emu Wiimote(s)", g_Config.bNumberRealWiimotes, g_Config.bNumberEmuWiimotes);
- // If we are not using any emulated wiimotes we can run the thread temporary until the data has beeen copied
- if (g_Config.bNumberEmuWiimotes == 0)
- g_RunTemporary = true;
-
g_RealWiiMoteAllocated = true;
}
@@ -546,6 +516,11 @@ void Shutdown(void)
if (g_EmulatorState != PLUGIN_EMUSTATE_PLAY && g_RealWiiMotePresent)
FlashLights(false);
+
+ // TODOE: Save Wiimote-order here to restore it after an Init()
+ // we should best use the btaddress for this purpose, unfortunately it is a bit of a work to make wiiuse_find()
+ // get the btaddress of a bt device on windows with only a createfile() handle etc., but it wiiuse_find() is already doing that on linux
+
// Clean up wiiuse
wiiuse_cleanup(g_WiiMotesFromWiiUse, g_NumberOfWiiMotes);
@@ -580,8 +555,6 @@ void Update(int _WiimoteNumber)
time to avoid a potential collision. */
THREAD_RETURN ReadWiimote_ThreadFunc(void* arg)
{
- g_StopThreadTemporary.Init();
- g_StartThread.Init();
NeedsConnect.Wait();
#ifndef _WIN32
int Connect;
@@ -594,58 +567,18 @@ THREAD_RETURN ReadWiimote_ThreadFunc(void* arg)
while (!g_Shutdown)
{
- // There is at least one Real Wiimote in use
-
- if (g_Config.bNumberRealWiimotes > 0 && !g_RunTemporary)
+ // Usually, there is at least one Real Wiimote in use,
+ // except a wiimote gets disconnected unexpectly ingame or wiimote input type gets changed from real to none
+
+ if (g_Config.bNumberRealWiimotes > 0)
{
for (int i = 0; i < MAX_WIIMOTES; i++)
if (g_WiimoteInUse[i])
g_WiiMotes[i]->ReadData();
- }
- else {
-
- if (!g_StopThreadTemporary.Wait(0))
- {
- // Event object was signaled, exiting thread to close ConfigRecordingDlg
- new Common::Thread(SafeCloseReadWiimote_ThreadFunc, NULL);
- g_StartThread.Set(); //tell the new thread to get going
- return 0;
- }
- else
- ReadWiimote();
- }
+ }
+ //else { idle }
}
- return 0;
-}
-
-// Returns whether SafeClose_ThreadFunc will take over closing of Recording dialog.
-// FIXME: this whole threading stuff is bad, and should be removed.
-// OSX is having problems with the threading anyways, since WiiUse is used
-// from multiple threads, and not just the one where it was created on.
-bool SafeClose()
-{
- if (!g_RealWiiMoteInitialized)
- return false;
-
- g_StopThreadTemporary.Set();
- return true;
-}
-
-// Thread to avoid racing conditions by directly closing of ReadWiimote_ThreadFunc() resp. ReadWiimote()
-// shutting down the Dlg while still beeing @ReadWiimote will result in a crash;
-THREAD_RETURN SafeCloseReadWiimote_ThreadFunc(void* arg)
-{
- g_Shutdown = true;
- g_StartThread.Wait(); //Ready to start cleaning
-
- if (g_RealWiiMoteInitialized)
- Shutdown();
-#if defined(HAVE_WX) && HAVE_WX
- m_RecordingConfigFrame->Close(true);
-#endif
- if (!g_RealWiiMoteInitialized)
- Initialize();
return 0;
}
diff --git a/Source/Plugins/Plugin_Wiimote/Src/wiimote_real.h b/Source/Plugins/Plugin_Wiimote/Src/wiimote_real.h
index 0708ebb25b..294316ea28 100644
--- a/Source/Plugins/Plugin_Wiimote/Src/wiimote_real.h
+++ b/Source/Plugins/Plugin_Wiimote/Src/wiimote_real.h
@@ -44,28 +44,13 @@ void ControlChannel(int _WiimoteNumber, u16 _channelID, const void* _pData, u32
void Update(int _WiimoteNumber);
void SendAcc(u8 _ReportID);
-void SetDataReportingMode(u8 ReportingMode = 0);
void ClearEvents();
-bool SafeClose();
-
-// The alternative Wiimote loop
-void ReadWiimote();
-bool IRDataOK(struct wiimote_t* wm);
#ifndef EXCLUDE_H
extern wiimote_t** g_WiiMotesFromWiiUse;
extern bool g_Shutdown;
- extern Common::Event g_StartThread;
- extern Common::Event g_StopThreadTemporary;
extern int g_NumberOfWiiMotes;
- extern bool g_MotionSensing;
- extern bool g_IRSensing;
- extern u64 g_UpdateTime;
- extern int g_UpdateCounter;
- extern bool g_RunTemporary;
- extern int g_RunTemporaryCountdown;
- extern u8 g_EventBuffer[32];
#ifdef _WIN32
extern Common::Thread* g_AutoPairUpInvisibleWindow;
extern Common::Thread* g_AutoPairUpMonitoring;