Fix detection for rumble interface
authorretro-wertz <retro-wertz@users.noreply.github.com>
Thu, 7 Mar 2019 09:50:31 +0000 (17:50 +0800)
committerretro-wertz <retro-wertz@users.noreply.github.com>
Thu, 7 Mar 2019 09:50:31 +0000 (17:50 +0800)
frontend/libretro.c

index 7fa63cb..5e5d88c 100644 (file)
@@ -57,7 +57,7 @@ static retro_input_poll_t input_poll_cb;
 static retro_input_state_t input_state_cb;
 static retro_environment_t environ_cb;
 static retro_audio_sample_batch_t audio_batch_cb;
-static struct retro_rumble_interface rumble;
+static retro_set_rumble_state_t rumble_cb;
 static struct retro_log_callback logging;
 static retro_log_printf_t log_cb;
 
@@ -430,10 +430,13 @@ void pl_timing_prepare(int is_pal)
 
 void plat_trigger_vibrate(int pad, int low, int high)
 {
-       if(in_enable_vibration)
+       if (!rumble_cb)
+               return;
+
+       if (in_enable_vibration)
        {
-       rumble.set_rumble_state(pad, RETRO_RUMBLE_STRONG, high << 8);
-       rumble.set_rumble_state(pad, RETRO_RUMBLE_WEAK, low ? 0xffff : 0x0);
+               rumble_cb(pad, RETRO_RUMBLE_STRONG, high << 8);
+               rumble_cb(pad, RETRO_RUMBLE_WEAK, low ? 0xffff : 0x0);
     }
 }
 
@@ -1883,6 +1886,7 @@ static int init_memcards(void)
 
 void retro_init(void)
 {
+       struct retro_rumble_interface rumble;
        const char *bios[] = {
                "SCPH101", "SCPH7001", "SCPH5501", "SCPH1001",
                "scph101", "scph7001", "scph5501", "scph1001"
@@ -1962,7 +1966,10 @@ void retro_init(void)
 
        environ_cb(RETRO_ENVIRONMENT_GET_CAN_DUPE, &vout_can_dupe);
        environ_cb(RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE, &disk_control);
-       environ_cb(RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE, &rumble);
+
+       rumble_cb = NULL;
+       if (environ_cb(RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE, &rumble))
+               rumble_cb = rumble.set_rumble_state;
 
        /* Set how much slower PSX CPU runs * 100 (so that 200 is 2 times)
         * we have to do this because cache misses and some IO penalties