some lightgun selection mechanism
authornotaz <notasas@gmail.com>
Wed, 6 Sep 2023 20:47:23 +0000 (23:47 +0300)
committernotaz <notasas@gmail.com>
Wed, 6 Sep 2023 20:47:23 +0000 (23:47 +0300)
frontend/libretro.c
frontend/plugin_lib.c
include/psemu_plugin_defs.h
libpcsxcore/plugins.c
plugins/dfinput/externals.h

index 32d27f5..b64c3ca 100644 (file)
@@ -518,6 +518,10 @@ void pl_update_gun(int *xn, int *yn, int *xres, int *yres, int *in)
 {
 }
 
+void pl_gun_byte2(int port, unsigned char byte)
+{
+}
+
 /* sound calls */
 static void snd_feed(void *buf, int bytes)
 {
index bdf09c7..2a417a4 100644 (file)
@@ -634,6 +634,10 @@ void pl_update_gun(int *xn, int *yn, int *xres, int *yres, int *in)
        *yres = psx_h;
 }
 
+void pl_gun_byte2(int port, unsigned char byte)
+{
+}
+
 #define MAX_LAG_FRAMES 3
 
 #define tvdiff(tv, tv_old) \
index b855eac..8645eab 100644 (file)
@@ -222,7 +222,9 @@ typedef struct
        
        //configuration mode Request 0x43
        int configMode;
-       unsigned char reserved[87];
+
+       unsigned char txData[32];
+       unsigned char reserved[56];
        
        //Lightgun values 
        int absoluteX,absoluteY;
index 6886a6a..4516b5c 100644 (file)
@@ -745,10 +745,18 @@ unsigned char _PADpoll(int port, unsigned char value) {
                }
        }
 
+       if (reqPos < sizeof(pad[port].txData))
+               pad[port].txData[reqPos] = value;
+
        //if no new request the pad return 0xff, for signaling connected
        if (reqPos >= respSize)
                return 0xff;
 
+       if (in_type[port] == PSE_PAD_TYPE_GUN) {
+               if (reqPos == 2)
+                       pl_gun_byte2(port, value);
+       }
+       else
        switch(reqPos){
                case 2:
                        reqIndex2Treatment(port, value);
index 2e216fd..822fa2c 100644 (file)
@@ -10,6 +10,7 @@ void dfinput_activate(void);
 #define GUNIN_BTNB     (1<<2)
 #define GUNIN_TRIGGER2 (1<<3)  /* offscreen trigger */
 extern void pl_update_gun(int *xn, int *yn, int *xres, int *yres, int *in);
+extern void pl_gun_byte2(int port, unsigned char byte);
 
 /* vibration trigger to frontend */
 extern int in_enable_vibration;