..maybe, not tested much.
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/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
readme.txt COPYING
rm -rf out
mkdir -p out/pcsx_rearmed/plugins
-void plat_trigger_vibrate(void)
+void plat_trigger_vibrate(int is_strong)
-void plat_trigger_vibrate(void)
+void plat_trigger_vibrate(int is_strong)
#define HAPTIC_SET_VIB_LEVEL _IOW(HAPTIC_IOCTL_MAGIC, 9, unsigned int)
static int hapticdev = -1;
#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;
{
int i, ret, v1, v2;
char buf[128], *p;
FILE *f;
- f = fopen("haptic.txt", "r");
- perror("fopen(haptic.txt)");
+ fprintf("fopen(%s)", fname);
+ perror("");
- 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;
p = fgets(buf, sizeof(buf), f);
if (p == NULL)
break;
- 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) {
i++;
}
fclose(f);
if (i == 0) {
- fprintf(stderr, "bad haptic.txt\n");
+ fprintf(stderr, "bad haptic file: %s\n", fname);
+ 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) {
hapticdev = open("/dev/isa1200", O_RDWR | O_NONBLOCK);
if (hapticdev == -1) {
-void plat_trigger_vibrate(void)
+void plat_trigger_vibrate(int is_strong)
- ioctl(hapticdev, HAPTIC_PLAY_PATTERN, &haptic_seq);
+ ioctl(hapticdev, HAPTIC_PLAY_PATTERN, &haptic_seq[!!is_strong]);
-void plat_trigger_vibrate(void)
+void plat_trigger_vibrate(int is_strong)
/* vibration trigger to frontend */
extern int in_enable_vibration;
/* vibration trigger to frontend */
extern int in_enable_vibration;
-extern void plat_trigger_vibrate(void);
+extern void plat_trigger_vibrate(int is_strong);
case CMD_READ_DATA_AND_VIBRATE:
if (value == 1 && CurPad == 0 && in_enable_vibration)
case CMD_READ_DATA_AND_VIBRATE:
if (value == 1 && CurPad == 0 && in_enable_vibration)
- plat_trigger_vibrate();
+ plat_trigger_vibrate(0);
+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);
#if 0
#include <stdio.h>
unsigned char PADpoll_(unsigned char value);
unsigned char PADpoll_pad(unsigned char value) {
unsigned char PADpoll_pad(unsigned char value) {
+ switch (CurByte) {
+ case 0:
CurCmd = value;
CurByte++;
CurCmd = value;
CurByte++;
CurCmd = CMD_READ_DATA_AND_VIBRATE;
return do_cmd();
CurCmd = CMD_READ_DATA_AND_VIBRATE;
return do_cmd();
- }
-
- if (CurByte == 2)
+ break;
+ case 3:
+ do_cmd3(value);
+ break;
+ }
if (CurByte >= CmdLen)
return 0xff; // verified
if (CurByte >= CmdLen)
return 0xff; // verified