aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotaz2012-03-01 23:34:16 +0200
committernotaz2012-03-01 23:34:16 +0200
commit3a40ff141abca7d9c5a1e3f47e41c26d9bc3b3ff (patch)
treec6fcccf114319e52684848ff59f243b3a22a22dc
parent76720f7ff171a7d13d010d7f0af1ae546f781c9c (diff)
downloadpcsx_rearmed-3a40ff141abca7d9c5a1e3f47e41c26d9bc3b3ff.tar.gz
pcsx_rearmed-3a40ff141abca7d9c5a1e3f47e41c26d9bc3b3ff.tar.bz2
pcsx_rearmed-3a40ff141abca7d9c5a1e3f47e41c26d9bc3b3ff.zip
improve vibration support for Caanoo
..maybe, not tested much.
-rw-r--r--Makefile.caanoo3
-rw-r--r--frontend/320240/haptic_s.cfg (renamed from frontend/320240/haptic.txt)0
-rw-r--r--frontend/320240/haptic_w.cfg3
-rw-r--r--frontend/plat_dummy.c2
-rw-r--r--frontend/plat_omap.c2
-rw-r--r--frontend/plat_pollux.c37
-rw-r--r--maemo/hildon.c2
-rw-r--r--plugins/dfinput/main.h2
-rw-r--r--plugins/dfinput/pad.c24
9 files changed, 54 insertions, 21 deletions
diff --git a/Makefile.caanoo b/Makefile.caanoo
index a937f19..290ca9c 100644
--- a/Makefile.caanoo
+++ b/Makefile.caanoo
@@ -18,7 +18,8 @@ rel_caanoo: pcsx $(PLUGINS) \
frontend/320240/caanoo.gpe frontend/320240/pcsx26.png \
frontend/320240/pcsxb.png frontend/320240/skin \
frontend/warm/bin/warm_2.6.24.ko frontend/320240/pollux_set \
- frontend/320240/pcsx_rearmed.ini frontend/320240/haptic.txt \
+ frontend/320240/pcsx_rearmed.ini frontend/320240/haptic_w.cfg \
+ frontend/320240/haptic_s.cfg \
readme.txt COPYING
rm -rf out
mkdir -p out/pcsx_rearmed/plugins
diff --git a/frontend/320240/haptic.txt b/frontend/320240/haptic_s.cfg
index 624056d..624056d 100644
--- a/frontend/320240/haptic.txt
+++ b/frontend/320240/haptic_s.cfg
diff --git a/frontend/320240/haptic_w.cfg b/frontend/320240/haptic_w.cfg
new file mode 100644
index 0000000..3585a71
--- /dev/null
+++ b/frontend/320240/haptic_w.cfg
@@ -0,0 +1,3 @@
+0 54
+100 -126
+105 0
diff --git a/frontend/plat_dummy.c b/frontend/plat_dummy.c
index 7929015..6249df5 100644
--- a/frontend/plat_dummy.c
+++ b/frontend/plat_dummy.c
@@ -68,7 +68,7 @@ void plat_step_volume(int is_up)
{
}
-void plat_trigger_vibrate(void)
+void plat_trigger_vibrate(int is_strong)
{
}
diff --git a/frontend/plat_omap.c b/frontend/plat_omap.c
index 998e1df..3a6a948 100644
--- a/frontend/plat_omap.c
+++ b/frontend/plat_omap.c
@@ -132,7 +132,7 @@ void plat_step_volume(int is_up)
{
}
-void plat_trigger_vibrate(void)
+void plat_trigger_vibrate(int is_strong)
{
}
diff --git a/frontend/plat_pollux.c b/frontend/plat_pollux.c
index d402e84..c03173e 100644
--- a/frontend/plat_pollux.c
+++ b/frontend/plat_pollux.c
@@ -689,21 +689,22 @@ struct haptic_data {
#define HAPTIC_SET_VIB_LEVEL _IOW(HAPTIC_IOCTL_MAGIC, 9, unsigned int)
static int hapticdev = -1;
-static struct haptic_data haptic_seq;
+static struct haptic_data haptic_seq[2];
-static int haptic_init(void)
+static int haptic_read(const char *fname, struct haptic_data *data)
{
int i, ret, v1, v2;
char buf[128], *p;
FILE *f;
- f = fopen("haptic.txt", "r");
+ f = fopen(fname, "r");
if (f == NULL) {
- perror("fopen(haptic.txt)");
+ fprintf("fopen(%s)", fname);
+ perror("");
return -1;
}
- for (i = 0; i < sizeof(haptic_seq.actions) / sizeof(haptic_seq.actions[0]); ) {
+ for (i = 0; i < sizeof(data->actions) / sizeof(data->actions[0]); ) {
p = fgets(buf, sizeof(buf), f);
if (p == NULL)
break;
@@ -718,17 +719,31 @@ static int haptic_init(void)
continue;
}
- haptic_seq.actions[i].time = v1;
- haptic_seq.actions[i].strength = v2;
+ data->actions[i].time = v1;
+ data->actions[i].strength = v2;
i++;
}
fclose(f);
if (i == 0) {
- fprintf(stderr, "bad haptic.txt\n");
+ fprintf(stderr, "bad haptic file: %s\n", fname);
return -1;
}
- haptic_seq.count = i;
+ data->count = i;
+
+ return 0;
+}
+
+static int haptic_init(void)
+{
+ int ret, i;
+
+ ret = haptic_read("haptic_w.cfg", &haptic_seq[0]);
+ if (ret != 0)
+ return -1;
+ ret = haptic_read("haptic_s.cfg", &haptic_seq[1]);
+ if (ret != 0)
+ return -1;
hapticdev = open("/dev/isa1200", O_RDWR | O_NONBLOCK);
if (hapticdev == -1) {
@@ -750,7 +765,7 @@ static int haptic_init(void)
return 0;
}
-void plat_trigger_vibrate(void)
+void plat_trigger_vibrate(int is_strong)
{
int ret;
@@ -764,7 +779,7 @@ void plat_trigger_vibrate(void)
}
}
- ioctl(hapticdev, HAPTIC_PLAY_PATTERN, &haptic_seq);
+ ioctl(hapticdev, HAPTIC_PLAY_PATTERN, &haptic_seq[!!is_strong]);
}
/* Wiz stuff */
diff --git a/maemo/hildon.c b/maemo/hildon.c
index 0399909..08949ff 100644
--- a/maemo/hildon.c
+++ b/maemo/hildon.c
@@ -262,7 +262,7 @@ void plat_step_volume(int is_up)
{
}
-void plat_trigger_vibrate(void)
+void plat_trigger_vibrate(int is_strong)
{
}
diff --git a/plugins/dfinput/main.h b/plugins/dfinput/main.h
index 3492170..8e2d5ae 100644
--- a/plugins/dfinput/main.h
+++ b/plugins/dfinput/main.h
@@ -27,4 +27,4 @@ extern void pl_update_gun(int *xn, int *xres, int *y, int *in);
/* vibration trigger to frontend */
extern int in_enable_vibration;
-extern void plat_trigger_vibrate(void);
+extern void plat_trigger_vibrate(int is_strong);
diff --git a/plugins/dfinput/pad.c b/plugins/dfinput/pad.c
index ab55db0..a8019b9 100644
--- a/plugins/dfinput/pad.c
+++ b/plugins/dfinput/pad.c
@@ -206,11 +206,21 @@ static void do_cmd2(unsigned char value)
case CMD_READ_DATA_AND_VIBRATE:
if (value == 1 && CurPad == 0 && in_enable_vibration)
- plat_trigger_vibrate();
+ plat_trigger_vibrate(0);
break;
}
}
+static void do_cmd3(unsigned char value)
+{
+ if (in_enable_vibration && CurCmd == CMD_READ_DATA_AND_VIBRATE && CurPad == 0) {
+ if (value >= 0xf0)
+ plat_trigger_vibrate(1);
+ else if (value > 0x40)
+ plat_trigger_vibrate(0);
+ }
+}
+
#if 0
#include <stdio.h>
unsigned char PADpoll_(unsigned char value);
@@ -224,7 +234,8 @@ unsigned char PADpoll(unsigned char value) {
unsigned char PADpoll_pad(unsigned char value) {
- if (CurByte == 0) {
+ switch (CurByte) {
+ case 0:
CurCmd = value;
CurByte++;
@@ -233,10 +244,13 @@ unsigned char PADpoll_pad(unsigned char value) {
CurCmd = CMD_READ_DATA_AND_VIBRATE;
return do_cmd();
- }
-
- if (CurByte == 2)
+ case 2:
do_cmd2(value);
+ break;
+ case 3:
+ do_cmd3(value);
+ break;
+ }
if (CurByte >= CmdLen)
return 0xff; // verified