summaryrefslogtreecommitdiff
path: root/misc/cwiid/add_other_plugins_#487498.patch
diff options
context:
space:
mode:
Diffstat (limited to 'misc/cwiid/add_other_plugins_#487498.patch')
-rw-r--r--misc/cwiid/add_other_plugins_#487498.patch394
1 files changed, 394 insertions, 0 deletions
diff --git a/misc/cwiid/add_other_plugins_#487498.patch b/misc/cwiid/add_other_plugins_#487498.patch
new file mode 100644
index 0000000000..c9d28963a1
--- /dev/null
+++ b/misc/cwiid/add_other_plugins_#487498.patch
@@ -0,0 +1,394 @@
+Index: cwiid-0.6.00+svn184.orig/wminput/plugins/Makefile.in
+===================================================================
+--- cwiid-0.6.00+svn184.orig.orig/wminput/plugins/Makefile.in 2008-06-24 21:43:05.000000000 +0200
++++ cwiid-0.6.00+svn184.orig/wminput/plugins/Makefile.in 2009-03-27 13:15:50.000000000 +0100
+@@ -2,7 +2,7 @@
+
+ include @top_builddir@/defs.mak
+
+-PLUGINS = ir_ptr acc nunchuk_acc led nunchuk_stick2btn
++PLUGINS = ir_ptr ir_fps acc nunchuk_acc led nunchuk_stick2btn nunchuk_kb
+
+ all install clean distclean uninstall: TARGET += $(MAKECMDGOALS)
+
+Index: cwiid-0.6.00+svn184.orig/wminput/plugins/ir_fps/Makefile.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ cwiid-0.6.00+svn184.orig/wminput/plugins/ir_fps/Makefile.in 2009-03-27 13:15:50.000000000 +0100
+@@ -0,0 +1,15 @@
++#Copyright (C) 2007 L. Donnie Smith
++
++include @top_builddir@/defs.mak
++
++PLUGIN_NAME = ir_fps
++SOURCES = ir_fps.c
++CFLAGS += -I@top_builddir@/wminput -I@top_builddir@/libcwiid
++INST_DIR = $(CWIID_PLUGINS_DIR)
++
++include $(COMMON)/include/plugin.mak
++
++distclean: clean
++ rm Makefile
++
++.PHONY: distclean
+Index: cwiid-0.6.00+svn184.orig/wminput/plugins/ir_fps/ir_fps.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ cwiid-0.6.00+svn184.orig/wminput/plugins/ir_fps/ir_fps.c 2009-03-27 13:15:50.000000000 +0100
+@@ -0,0 +1,162 @@
++/* Copyright (C) 2007 L. Donnie Smith <cwiidabstrakraft.org>
++ *
++ * 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 2 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, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ *
++ */
++
++#include "wmplugin.h"
++
++#define DEBOUNCE_THRESHOLD 50
++
++//deadzone is a circle of diameter a 10th of the screen
++#define DEADZONE (CWIID_IR_X_MAX*CWIID_IR_X_MAX+CWIID_IR_Y_MAX*CWIID_IR_Y_MAX)/100
++
++//speed is here
++#define XSPEED 10/(CWIID_IR_X_MAX/2)
++#define YSPEED 10/(CWIID_IR_Y_MAX/2)
++
++cwiid_wiimote_t *wiimote;
++
++static struct wmplugin_info info;
++static struct wmplugin_data data;
++
++wmplugin_info_t wmplugin_info;
++wmplugin_init_t wmplugin_init;
++wmplugin_exec_t wmplugin_exec;
++
++struct wmplugin_info *wmplugin_info() {
++ static unsigned char info_init = 0;
++
++ if (!info_init) {
++ info.button_count = 0;
++ info.axis_count = 2;
++ info.axis_info[0].name = "X";
++ info.axis_info[0].type = WMPLUGIN_REL;
++ info.axis_info[0].max = CWIID_IR_X_MAX;
++ info.axis_info[0].min = 0;
++ info.axis_info[0].fuzz = 0;
++ info.axis_info[0].flat = 0;
++ info.axis_info[1].name = "Y";
++ info.axis_info[1].type = WMPLUGIN_REL;
++ info.axis_info[1].max = CWIID_IR_Y_MAX;
++ info.axis_info[1].min = 0;
++ info.axis_info[1].fuzz = 0;
++ info.axis_info[1].flat = 0;
++ info.param_count = 0;
++ info_init = 1;
++ }
++ return &info;
++}
++
++int wmplugin_init(int id, cwiid_wiimote_t *arg_wiimote)
++{
++ wiimote = arg_wiimote;
++
++ data.buttons = 0;
++
++ if (wmplugin_set_rpt_mode(id, CWIID_RPT_IR)) {
++ return -1;
++ }
++
++ return 0;
++}
++
++struct wmplugin_data *wmplugin_exec(int mesg_count, union cwiid_mesg mesg[])
++{
++ static int src_index = -1;
++ static int debounce = 0;
++ static uint8_t old_flag;
++
++ int i;
++ uint8_t flag;
++ struct cwiid_ir_mesg *ir_mesg;
++ int dx, dy;
++
++ ir_mesg = NULL;
++ for (i=0; i < mesg_count; i++) {
++ if (mesg[i].type == CWIID_MESG_IR) {
++ ir_mesg = &mesg[i].ir_mesg;
++ }
++ }
++
++ if (!ir_mesg) {
++ return NULL;
++ }
++
++ /* invalidate src index if source is no longer present */
++ if ((src_index != -1) && !ir_mesg->src[src_index].valid) {
++ if (debounce > DEBOUNCE_THRESHOLD) {
++ src_index = -1;
++ }
++ else {
++ debounce++;
++ }
++ }
++ else {
++ debounce = 0;
++ }
++
++ /* of not set, pick largest available source */
++ if (src_index == -1) {
++ for (i=0; i < CWIID_IR_SRC_COUNT; i++) {
++ if (ir_mesg->src[i].valid) {
++ if ((src_index == -1) ||
++ (ir_mesg->src[i].size > ir_mesg->src[src_index].size)) {
++ src_index = i;
++ }
++ }
++ }
++ }
++
++ /* LEDs */
++ switch (src_index) {
++ case 0:
++ flag = CWIID_LED1_ON;
++ break;
++ case 1:
++ flag = CWIID_LED2_ON;
++ break;
++ case 2:
++ flag = CWIID_LED3_ON;
++ break;
++ case 3:
++ flag = CWIID_LED4_ON;
++ break;
++ default:
++ flag = 0;
++ break;
++ }
++ if (flag != old_flag) {
++ cwiid_set_led(wiimote, flag);
++ old_flag = flag;
++ }
++
++ if ((src_index == -1) || !ir_mesg->src[src_index].valid) {
++ data.axes[0].valid = data.axes[1].valid = 0;
++ }
++ else {
++ data.axes[0].valid = data.axes[1].valid = 1;
++ dx = CWIID_IR_X_MAX/2 - ir_mesg->src[src_index].pos[CWIID_X];
++ dy = ir_mesg->src[src_index].pos[CWIID_Y] - CWIID_IR_Y_MAX/2;
++ if (dx*dx+dy*dy > DEADZONE){
++ data.axes[0].value = dx*XSPEED;
++ data.axes[1].value = dy*YSPEED;
++ }else {
++ data.axes[0].value = 0;
++ data.axes[1].value = 0;
++ }
++ }
++ return &data;
++}
+Index: cwiid-0.6.00+svn184.orig/wminput/plugins/nunchuk_kb/Makefile.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ cwiid-0.6.00+svn184.orig/wminput/plugins/nunchuk_kb/Makefile.in 2009-03-27 13:15:50.000000000 +0100
+@@ -0,0 +1,16 @@
++#Copyright (C) 2007 L. Donnie Smith
++
++include @top_builddir@/defs.mak
++
++PLUGIN_NAME = nunchuk_kb
++SOURCES = nunchuk_kb.c
++CFLAGS += -I@top_builddir@/wminput -I@top_builddir@/libcwiid
++LDLIBS += -lm
++INST_DIR = $(CWIID_PLUGINS_DIR)
++
++include $(COMMON)/include/plugin.mak
++
++distclean: clean
++ rm Makefile
++
++.PHONY: distclean
+Index: cwiid-0.6.00+svn184.orig/wminput/plugins/nunchuk_kb/nunchuk_kb.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ cwiid-0.6.00+svn184.orig/wminput/plugins/nunchuk_kb/nunchuk_kb.c 2009-03-27 13:15:50.000000000 +0100
+@@ -0,0 +1,116 @@
++/* Copyright (C) 2007 L. Donnie Smith <cwiid@abstrakraft.org>
++ *
++ * 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 2 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, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ *
++ */
++
++#include <math.h>
++
++#include "wmplugin.h"
++
++/* Button flags */
++#define STICK_KEY_UP 0x0001
++#define STICK_KEY_DOWN 0x0002
++#define STICK_KEY_RIGHT 0x0004
++#define STICK_KEY_LEFT 0x0008
++#define STICK_MID_VAL 128
++#define STICK_NEUTRAL 20
++
++static unsigned char info_init = 0;
++static struct wmplugin_info info;
++static struct wmplugin_data data;
++
++static cwiid_wiimote_t *wiimote;
++
++static struct acc_cal acc_cal;
++static int plugin_id;
++
++wmplugin_info_t wmplugin_info;
++wmplugin_init_t wmplugin_init;
++wmplugin_exec_t wmplugin_exec;
++static void process_nunchuk(struct cwiid_nunchuk_mesg *mesg);
++
++static float Roll_Scale = 1.0;
++static float Pitch_Scale = 1.0;
++static float X_Scale = 1.0;
++static float Y_Scale = 1.0;
++
++struct wmplugin_info *wmplugin_info() {
++ if (!info_init) {
++ info.button_count = 4;
++ info.button_info[0].name = "Up";
++ info.button_info[1].name = "Down";
++ info.button_info[2].name = "Right";
++ info.button_info[3].name = "Left";
++ info.axis_count = 0;
++ info_init = 1;
++ }
++ return &info;
++}
++
++int wmplugin_init(int id, cwiid_wiimote_t *arg_wiimote)
++{
++ plugin_id = id;
++ wiimote = arg_wiimote;
++ data.buttons = 0;
++ data.axes[0].valid = 1;
++ data.axes[1].valid = 1;
++ if (wmplugin_set_rpt_mode(id, CWIID_RPT_STATUS | CWIID_RPT_NUNCHUK)) {
++ return -1;
++ }
++
++ return 0;
++}
++
++struct wmplugin_data *wmplugin_exec(int mesg_count, union cwiid_mesg mesg[])
++{
++ int i;
++ enum cwiid_ext_type ext_type = CWIID_EXT_NONE;
++ struct wmplugin_data *ret = NULL;
++
++ for (i=0; i < mesg_count; i++) {
++ switch (mesg[i].type) {
++ case CWIID_MESG_STATUS:
++ if ((mesg[i].status_mesg.ext_type == CWIID_EXT_NUNCHUK) &&
++ (ext_type != CWIID_EXT_NUNCHUK)) {
++ if (cwiid_get_acc_cal(wiimote, CWIID_EXT_NUNCHUK, &acc_cal)) {
++ wmplugin_err(plugin_id, "calibration error");
++ }
++ }
++ ext_type = mesg[i].status_mesg.ext_type;
++ break;
++ case CWIID_MESG_NUNCHUK:
++ process_nunchuk(&mesg[i].nunchuk_mesg);
++ ret = &data;
++ break;
++ default:
++ break;
++ }
++ }
++
++ return ret;
++}
++
++static void process_nunchuk(struct cwiid_nunchuk_mesg *mesg)
++{
++ double stx=(double)mesg->stick[CWIID_X];
++ double sty=(double)mesg->stick[CWIID_Y];
++ data.buttons=0;
++ if (sty > STICK_MID_VAL+STICK_NEUTRAL) data.buttons |= STICK_KEY_UP;
++ if (sty < STICK_MID_VAL-STICK_NEUTRAL) data.buttons |= STICK_KEY_DOWN;
++ if (stx > STICK_MID_VAL+STICK_NEUTRAL) data.buttons |= STICK_KEY_RIGHT;
++ if (stx < STICK_MID_VAL-STICK_NEUTRAL) data.buttons |= STICK_KEY_LEFT;
++}
++
+Index: cwiid-0.6.00+svn184.orig/wminput/configs/fps_config
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ cwiid-0.6.00+svn184.orig/wminput/configs/fps_config 2009-03-27 13:15:50.000000000 +0100
+@@ -0,0 +1,32 @@
++# Fps config for wminput by kyrlian
++# needs plugins ir_fps and nunchuk_kb
++# available from http://kyrlian.free.fr/binaries/cwiid/latest/
++# wminput source and info at http://abstrakraft.org/cwiid/
++
++# IR for mouse REL - fps style
++Plugin.ir_fps.X = REL_X
++Plugin.ir_fps.Y = REL_Y
++
++#custom buttons
++Wiimote.A = BTN_LEFT
++Wiimote.B = BTN_RIGHT
++Wiimote.Up = KEY_UP
++Wiimote.Down = KEY_DOWN
++Wiimote.Left = KEY_LEFT
++Wiimote.Right = KEY_RIGHT
++Wiimote.Minus = KEY_PAGEDOWN
++Wiimote.Plus = KEY_PAGEUP
++Wiimote.Home = KEY_ESC
++
++Wiimote.1 = KEY_TAB
++Wiimote.2 = KEY_ESC
++
++Nunchuk.C = KEY_C
++Nunchuk.Z = KEY_SPACE
++
++#plugin for nunchuk stick
++Plugin.nunchuk_kb.Up = KEY_W
++Plugin.nunchuk_kb.Down = KEY_S
++Plugin.nunchuk_kb.Left = KEY_A
++Plugin.nunchuk_kb.Right = KEY_D
++
+Index: cwiid-0.6.00+svn184.orig/configure.ac
+===================================================================
+--- cwiid-0.6.00+svn184.orig.orig/configure.ac 2008-06-24 21:43:05.000000000 +0200
++++ cwiid-0.6.00+svn184.orig/configure.ac 2009-03-27 13:15:50.000000000 +0100
+@@ -142,8 +142,10 @@
+ [wminput/Makefile]
+ [wminput/plugins/Makefile]
+ [wminput/plugins/ir_ptr/Makefile]
++ [wminput/plugins/ir_fps/Makefile]
+ [wminput/plugins/acc/Makefile]
+ [wminput/plugins/nunchuk_acc/Makefile]
++ [wminput/plugins/nunchuk_kb/Makefile]
+ [wminput/plugins/led/Makefile]
+ [wminput/plugins/nunchuk_stick2btn/Makefile]
+ [lswm/Makefile]