slackbuilds/misc/cwiid/add_other_plugins_#487498.p...

395 lines
11 KiB
Diff

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]