Jariullah Safi 4 месяцев назад
Родитель
Сommit
05ea971e36

+ 2 - 2
OpenPuck/gamepad_util.cpp

@@ -55,13 +55,13 @@ void steamPadsToTouch(uint32_t b, uint16_t touchH, int16_t lpx, int16_t lpy, int
 static void psOrBackCode(uint32_t* b, uint8_t c){
   switch(c){ case 1:*b|=TB_A; break; case 2:*b|=TB_B; break; case 3:*b|=TB_X; break; case 4:*b|=TB_Y; break;
     case 5:*b|=TB_LB; break; case 6:*b|=TB_RB; break; case 7:*b|=TB_L3; break; case 8:*b|=TB_R3; break;
-    case 9:*b|=TB_VIEW; break; case 10:*b|=TB_MENU; break; case 11:*b|=TB_STEAM; break;
+    case 9:*b|=TB_VIEW; break; case 10:*b|=TB_QAM; break; case 11:*b|=TB_STEAM; break;
     case 12:*b|=TB_DUP; break; case 13:*b|=TB_DDN; break; case 14:*b|=TB_DLF; break; case 15:*b|=TB_DRT; break;
     case 16:*b|=TB_TOUCH; break; case 17:*b|=TB_MUTE; break; default: break; }
 }
 uint32_t psButtonsFromSteam(uint32_t raw){
   uint32_t b=raw;
-  if(g_qamMap && (b&TB_MENU)){ b &= ~(uint32_t)TB_MENU; b |= tritonFromCode(g_qamMap); }
+  if(g_qamMap && (b&TB_QAM)){ b &= ~(uint32_t)TB_QAM; b |= tritonFromCode(g_qamMap); }
   if((b&CHORD_BACK4)==CHORD_BACK4) b&=~(uint32_t)(TB_A|TB_B|TB_X|TB_Y);
   if(b&TB_L4) psOrBackCode(&b, g_back[0]); if(b&TB_R4) psOrBackCode(&b, g_back[1]);
   if(b&TB_L5) psOrBackCode(&b, g_back[2]); if(b&TB_R5) psOrBackCode(&b, g_back[3]);

+ 1 - 1
OpenPuck/gamepad_util.h

@@ -27,7 +27,7 @@ void steamPadsToTouch(uint32_t b, uint16_t touchH, int16_t lpx, int16_t lpy, int
 static inline uint32_t tritonFromCode(uint8_t c){
   switch(c){ case 1:return TB_A; case 2:return TB_B; case 3:return TB_X; case 4:return TB_Y;
     case 5:return TB_LB; case 6:return TB_RB; case 7:return TB_L3; case 8:return TB_R3;
-    case 9:return TB_VIEW; case 10:return TB_MENU; case 11:return TB_STEAM;
+    case 9:return TB_VIEW; case 10:return TB_QAM; case 11:return TB_STEAM;
     case 12:return TB_DUP; case 13:return TB_DDN; case 14:return TB_DLF; case 15:return TB_DRT;
     case 16:return TB_TOUCH; case 17:return TB_MUTE; default:return 0; }
 }

+ 2 - 3
OpenPuck/mode_lizard.cpp

@@ -1,11 +1,10 @@
 #include "mode_lizard.h"
 #include "triton.h"
 #include "config.h"
-#include "gamepad_util.h"
 
 void rfLizard(const uint8_t* r, Adafruit_USBD_HID* mdev, Adafruit_USBD_HID* kdev, uint8_t mrid, uint8_t krid){
   uint32_t b=btnsOf(r);
-  if(g_qamMap && (b&TB_MENU)){ b &= ~(uint32_t)TB_MENU; b |= tritonFromCode(g_qamMap); }
+  bool qamHeld = (b & TB_QAM) != 0;
   // --- right pad -> mouse motion with glide (mirrors mode_xinput's rfXboxMouse) ---
   static int prx=0,pry=0; static bool prt=false; static float vx=0,vy=0,rmx=0,rmy=0;
   bool rtouch=b&TB_RPADT; int rx=s16off(r,22), ry=s16off(r,24);
@@ -51,7 +50,7 @@ void rfLizard(const uint8_t* r, Adafruit_USBD_HID* mdev, Adafruit_USBD_HID* kdev
   #undef LZK
   if(g_usbMode == MODE_LIZARD){
     static bool prevL5=false, prevR5=false;
-    bool mh = (b & (TB_STEAM|TB_MENU)) != 0;
+    bool mh = (b & TB_STEAM) || qamHeld;
     bool nL5 = mh && (b & TB_L5), nR5 = mh && (b & TB_R5);
     if (nL5 && !prevL5){ uint8_t cc=0x02; if(mdev->ready()) mdev->sendReport(0x03,&cc,1); }
     if (nR5 && !prevR5){ uint8_t cc=0x01; if(mdev->ready()) mdev->sendReport(0x03,&cc,1); }

+ 1 - 1
OpenPuck/mode_switch_hori.cpp

@@ -38,7 +38,7 @@ static inline void backCodeToHatDirs(uint8_t c, bool& u, bool& d, bool& l, bool&
 // HORIPAD/Switch button bits: Y=1 B=2 A=4 X=8 L=10 R=20 ZL=40 ZR=80 Minus=100 Plus=200 LClick=400 RClick=800 Home=1000 Capture=2000
 static void switchBuildHoripad(uint8_t out[8]){
   uint32_t b=g_in.buttons; uint16_t btn=0;
-  if(g_qamMap && (b&TB_MENU)){ b &= ~(uint32_t)TB_MENU; b |= tritonFromCode(g_qamMap); }
+  if(g_qamMap && (b&TB_QAM)){ b &= ~(uint32_t)TB_QAM; b |= tritonFromCode(g_qamMap); }
   // Mode-switch chord (all 4 back + A/X/Y): don't pass the face press to the console while the back-4 are held.
   if((b&CHORD_BACK4)==CHORD_BACK4) b &= ~(uint32_t)(TB_A|TB_X|TB_Y);
   // face buttons with optional A/B + X/Y swap (Nintendo physical-vs-label layout)

+ 1 - 1
OpenPuck/mode_switch_pro.cpp

@@ -65,7 +65,7 @@ static void jcPackStick(uint8_t s[3], int16_t x, int16_t y){   // pack two 12-bi
 static uint8_t g_jcTimer=0;
 static void jcInputPrefix(uint8_t* out){
   uint32_t b=g_in.buttons;
-  if(g_qamMap && (b&TB_MENU)){ b &= ~(uint32_t)TB_MENU; b |= tritonFromCode(g_qamMap); }
+  if(g_qamMap && (b&TB_QAM)){ b &= ~(uint32_t)TB_QAM; b |= tritonFromCode(g_qamMap); }
   if((b&CHORD_BACK4)==CHORD_BACK4) b&=~(uint32_t)(TB_A|TB_B|TB_X|TB_Y);
   uint32_t fA=g_abSwap?JC_BTN_B:JC_BTN_A, fB=g_abSwap?JC_BTN_A:JC_BTN_B;
   uint32_t fX=g_abSwap?JC_BTN_Y:JC_BTN_X, fY=g_abSwap?JC_BTN_X:JC_BTN_Y;

+ 1 - 1
OpenPuck/mode_xinput.cpp

@@ -106,7 +106,7 @@ static uint16_t codeToXB(uint8_t c){
 }
 static void rfXboxGamepad(const uint8_t* r){
   uint32_t b=btnsOf(r);
-  if(g_qamMap && (b&TB_MENU)){ b &= ~(uint32_t)TB_MENU; b |= tritonFromCode(g_qamMap); }
+  if(g_qamMap && (b&TB_QAM)){ b &= ~(uint32_t)TB_QAM; b |= tritonFromCode(g_qamMap); }
   uint16_t btn=0;                                   // map Triton buttons -> XInput button word
   if(b&TB_DUP)btn|=XB_DUP;   if(b&TB_DDN)btn|=XB_DDOWN; if(b&TB_DLF)btn|=XB_DLEFT; if(b&TB_DRT)btn|=XB_DRIGHT;
   if(b&TB_VIEW)btn|=XB_START; if(b&TB_MENU)btn|=XB_BACK; if(b&TB_STEAM)btn|=XB_GUIDE;

+ 1 - 0
OpenPuck/triton.h

@@ -12,6 +12,7 @@
 #define TB_B      0x2u
 #define TB_X      0x4u
 #define TB_Y      0x8u
+#define TB_QAM    0x10u
 #define TB_R3     0x20u
 #define TB_VIEW   0x40u
 #define TB_R4     0x80u