Browse Source

qam mappings update

Jariullah Safi 4 months ago
parent
commit
091dc21cb3

+ 1 - 1
OpenPuck/config.h

@@ -63,7 +63,7 @@ void armDebugCdcNextBoot();          // persist the one-shot (caller reboots)
 extern int     g_mDiv, g_mFric; // xbox/lizard mouse sensitivity divisor / friction%
 
 extern uint8_t g_abSwap;        // 1 = swap A/B and X/Y (Nintendo face-button layout)
-extern uint8_t g_back[4];       // back paddles L4,R4,L5,R5 -> button codes (0..11 buttons, 12..15 D-pad U/D/L/R)
+extern uint8_t g_back[4];       // back paddles L4,R4,L5,R5 -> button codes (0..15 standard, 16=PS Touch Click, 17=PS5 Mute)
 
 #define POLL_US_DEFAULT 4000u   // 250 Hz -- matches SC2 input report rate (1000000/250 = 4000 us)
 #define USB_STREAM_MS   4u      // host-side HID stream cadence for translated modes (~250 Hz)

+ 2 - 1
OpenPuck/gamepad_util.cpp

@@ -56,7 +56,8 @@ 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 12:*b|=TB_DUP; break; case 13:*b|=TB_DDN; break; case 14:*b|=TB_DLF; break; case 15:*b|=TB_DRT; break; default: 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;

+ 1 - 1
OpenPuck/mode_hidgyro.cpp

@@ -32,7 +32,7 @@ static void hidGyroBuild(uint8_t out[63]){
   out[2]=swStick(g_in.rx,false); out[3]=swStick(g_in.ry,true);
   out[4]=psHatNibble(b)|psFaceNibble(b);
   out[5]=psShouldersByte(b);
-  static uint8_t ctr=0; out[6]=((ctr++&0x0F)<<4)|((b&TB_LPADC||b&TB_RPADC)?0x02:0)|((b&TB_STEAM)?0x01:0);
+  static uint8_t ctr=0;   out[6]=((ctr++&0x0F)<<4)|((b&TB_TOUCH||b&TB_LPADC||b&TB_RPADC)?0x02:0)|((b&TB_STEAM)?0x01:0);
   out[7]=g_in.lt; out[8]=g_in.rt;
   out[12]=g_in.gx&0xFF; out[13]=g_in.gx>>8;
   out[14]=g_in.gy&0xFF; out[15]=g_in.gy>>8;

+ 3 - 4
OpenPuck/mode_lizard.cpp

@@ -38,16 +38,15 @@ void rfLizard(const uint8_t* r, Adafruit_USBD_HID* mdev, Adafruit_USBD_HID* kdev
   LZK(b&TB_B,    HID_KEY_ESCAPE);
   LZK(b&TB_X,    HID_KEY_PAGE_UP);
   LZK(b&TB_Y,    HID_KEY_PAGE_DOWN);
-  LZK(b&TB_VIEW, HID_KEY_TAB);
-  LZK(b&TB_MENU, HID_KEY_ESCAPE);
+  LZK(b&TB_VIEW, HID_KEY_ESCAPE);
+  LZK(b&TB_MENU, HID_KEY_TAB);
   int sx=s16off(r,8), sy=s16off(r,10);   // left stick (XInput sign: +Y = up); deflect ~37% acts as a d-pad
   LZK((b&TB_DUP)||sy> 12000, HID_KEY_ARROW_UP);
   LZK((b&TB_DDN)||sy<-12000, HID_KEY_ARROW_DOWN);
   LZK((b&TB_DLF)||sx<-12000, HID_KEY_ARROW_LEFT);
   LZK((b&TB_DRT)||sx> 12000, HID_KEY_ARROW_RIGHT);
   #undef LZK
-  // --- LB = Alt+Tab ---
-  if(b&TB_LB){ mod|=KEYBOARD_MODIFIER_LEFTALT; kc[0]=HID_KEY_TAB; kc[1]=0; kc[2]=0; kc[3]=0; kc[4]=0; kc[5]=0; nk=1; }
+  if(b&TB_LB) mod|=KEYBOARD_MODIFIER_LEFTCTRL;
   // --- Steam/QAM chords ---
   { static bool prevL5=false, prevR5=false;
     bool mh = (b & (TB_STEAM|TB_MENU)) != 0;

+ 1 - 1
OpenPuck/mode_ps5.cpp

@@ -42,7 +42,7 @@ static void ps5Build(uint8_t out[63]){
   static uint8_t seq=0; out[6]=seq++;
   out[7]=psHatNibble(b)|psFaceNibble(b);
   out[8]=psShouldersByte(b);
-  out[9]=((b&TB_STEAM)?0x01:0)|((b&TB_LPADC||b&TB_RPADC)?0x02:0);
+  out[9]=((b&TB_STEAM)?0x01:0)|((b&TB_TOUCH||b&TB_LPADC||b&TB_RPADC)?0x02:0)|((b&TB_MUTE)?0x04:0);
   out[15]=g_in.gx&0xFF; out[16]=g_in.gx>>8;
    out[17]=(-g_in.gz)&0xFF; out[18]=(-g_in.gz)>>8;
   out[19]=g_in.gy&0xFF; out[20]=g_in.gy>>8;

+ 1 - 1
OpenPuck/serial_console.cpp

@@ -59,7 +59,7 @@ void serialConsolePoll(){
       else if (line[0]=='E'){ g_mDiv=strtoul(line+1,0,10); if(g_mDiv<4)g_mDiv=4; saveCfg(); Serial.printf("# xbox-mouse sensitivity divisor=%d (lower=faster)\n",g_mDiv); }
       else if (line[0]=='F'){ g_mFric=strtoul(line+1,0,10); if(g_mFric>99)g_mFric=99; saveCfg(); Serial.printf("# xbox-mouse friction=%d%% (higher=more glide/momentum)\n",g_mFric); }
       else if (line[0]=='W'){ g_abSwap=!g_abSwap; saveCfg(); Serial.printf("# A/B + X/Y swap %s (Nintendo layout)\n",g_abSwap?"ON":"off"); }
-      else if (line[0]=='K'){ int i=line[1]-'0'; uint8_t code=strtoul(line+2,0,10); if(i>=0&&i<4){ g_back[i]=code; saveCfg(); Serial.printf("# back[%d] (%s) -> code %u  [0=none 1=A 2=B 3=X 4=Y 5=LB 6=RB 7=L3 8=R3 9=Back 10=Start 11=Guide 12=Dup 13=Ddown 14=Dleft 15=Dright]\n",i,(const char*[]){"L4","R4","L5","R5"}[i],code); } else Serial.println("# usage: K<0-3> <code>  (0=L4 1=R4 2=L5 3=R5)"); }
+      else if (line[0]=='K'){ int i=line[1]-'0'; uint8_t code=strtoul(line+2,0,10); if(i>=0&&i<4){ g_back[i]=code; saveCfg(); Serial.printf("# back[%d] (%s) -> code %u  [0=none 1=A 2=B 3=X 4=Y 5=LB 6=RB 7=L3 8=R3 9=Back 10=QAM 11=Guide 12=Dup 13=Ddown 14=Dleft 15=Dright 16=TouchClick 17=Mute]\n",i,(const char*[]){"L4","R4","L5","R5"}[i],code); } else Serial.println("# usage: K<0-3> <code>  (0=L4 1=R4 2=L5 3=R5)"); }
       else if (line[0]=='J'){ char* sp=0; uint8_t id=strtoul(line+1,&sp,0); uint16_t val=sp?strtoul(sp,0,0):0;  // inject SET-SETTINGS to controller: report 0x87 [id][val u16 LE]
         uint8_t pl[3]={id,(uint8_t)(val&0xFF),(uint8_t)(val>>8)}; relayEnqueue(0x87,pl,3);
         Serial.printf("# queued SET-SETTINGS id=0x%02X val=%u (relay 0x87) — watch new=/s\n",id,val); }

+ 2 - 0
OpenPuck/triton.h

@@ -29,6 +29,8 @@
 #define TB_LB     0x80000u
 #define TB_RPADT  0x200000u
 #define TB_RPADC  0x400000u
+#define TB_TOUCH  0x800000u      // virtual: PS Touch Click (back-paddle target, not a real Triton button)
+#define TB_MUTE   0x1000000u     // virtual: PS5 Mute button (back-paddle target, not a real Triton button)
 #define TB_LPADT  0x2000000u
 #define TB_LPADC  0x4000000u
 

+ 1 - 1
docs/index.html

@@ -143,7 +143,7 @@
 <script>
 const MODE_NAMES = ["Steam (puck)","Xbox 360","Switch (HORIPAD)","Lizard (always)","Switch Pro + gyro","PS5 DualSense","HID gyro (DS4)"];
 const CHORD_FIELD = [17, 18, 19];
-const BTN_CODES = [[0,"— none —"],[1,"A"],[2,"B"],[3,"X"],[4,"Y"],[5,"LB"],[6,"RB"],[7,"L3"],[8,"R3"],[9,"Back"],[10,"Start"],[11,"Guide"],[12,"D-pad Up"],[13,"D-pad Down"],[14,"D-pad Left"],[15,"D-pad Right"]];
+const BTN_CODES = [[0,"— none —"],[1,"A"],[2,"B"],[3,"X"],[4,"Y"],[5,"LB"],[6,"RB"],[7,"L3"],[8,"R3"],[9,"Back"],[10,"Quick Access Menu"],[11,"Guide"],[12,"D-pad Up"],[13,"D-pad Down"],[14,"D-pad Left"],[15,"D-pad Right"],[16,"PS Touch Click"],[17,"PS5 Mute"]];
 let dev=null, epIn=0, epOut=0, ifNum=0, polling=false, capturing=false;
 const $ = s=>document.querySelector(s);
 function log(m){ const l=$("#log"); l.textContent=(new Date().toLocaleTimeString()+"  "+m+"\n"+l.textContent).slice(0,2000); }