mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2026-06-17 14:21:30 +00:00
Correctly transmit the number of controllers attached to the client
This commit is contained in:
+1
-2
@@ -55,7 +55,6 @@ typedef struct _NV_CONTROLLER_PACKET {
|
|||||||
#define PACKET_TYPE_MULTI_CONTROLLER 0x1E
|
#define PACKET_TYPE_MULTI_CONTROLLER 0x1E
|
||||||
#define MC_HEADER_A 0x0000000D
|
#define MC_HEADER_A 0x0000000D
|
||||||
#define MC_HEADER_B 0x001A
|
#define MC_HEADER_B 0x001A
|
||||||
#define MC_ACTIVE_CONTROLLER_FLAGS 0x000F
|
|
||||||
#define MC_MID_B 0x0014
|
#define MC_MID_B 0x0014
|
||||||
#define MC_TAIL_A 0x0000009C
|
#define MC_TAIL_A 0x0000009C
|
||||||
#define MC_TAIL_B 0x0055
|
#define MC_TAIL_B 0x0055
|
||||||
@@ -64,7 +63,7 @@ typedef struct _NV_MULTI_CONTROLLER_PACKET {
|
|||||||
int headerA;
|
int headerA;
|
||||||
short headerB;
|
short headerB;
|
||||||
short controllerNumber;
|
short controllerNumber;
|
||||||
short midA;
|
short activeGamepadMask;
|
||||||
short midB;
|
short midB;
|
||||||
short buttonFlags;
|
short buttonFlags;
|
||||||
unsigned char leftTrigger;
|
unsigned char leftTrigger;
|
||||||
|
|||||||
+9
-5
@@ -241,6 +241,7 @@ static void inputSendThreadProc(void* context) {
|
|||||||
newPkt = &controllerBatchHolder->packet.multiController;
|
newPkt = &controllerBatchHolder->packet.multiController;
|
||||||
if (newPkt->buttonFlags != origPkt->buttonFlags ||
|
if (newPkt->buttonFlags != origPkt->buttonFlags ||
|
||||||
newPkt->controllerNumber != origPkt->controllerNumber ||
|
newPkt->controllerNumber != origPkt->controllerNumber ||
|
||||||
|
newPkt->activeGamepadMask != origPkt->activeGamepadMask ||
|
||||||
!checkDirs(origPkt->leftTrigger, newPkt->leftTrigger, &dirs[0]) ||
|
!checkDirs(origPkt->leftTrigger, newPkt->leftTrigger, &dirs[0]) ||
|
||||||
!checkDirs(origPkt->rightTrigger, newPkt->rightTrigger, &dirs[1]) ||
|
!checkDirs(origPkt->rightTrigger, newPkt->rightTrigger, &dirs[1]) ||
|
||||||
!checkDirs(origPkt->leftStickX, newPkt->leftStickX, &dirs[2]) ||
|
!checkDirs(origPkt->leftStickX, newPkt->leftStickX, &dirs[2]) ||
|
||||||
@@ -500,7 +501,8 @@ int LiSendKeyboardEvent(short keyCode, char keyAction, char modifiers) {
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sendControllerEventInternal(short controllerNumber, short buttonFlags, unsigned char leftTrigger, unsigned char rightTrigger,
|
static int sendControllerEventInternal(short controllerNumber, short activeGamepadMask,
|
||||||
|
short buttonFlags, unsigned char leftTrigger, unsigned char rightTrigger,
|
||||||
short leftStickX, short leftStickY, short rightStickX, short rightStickY)
|
short leftStickX, short leftStickY, short rightStickX, short rightStickY)
|
||||||
{
|
{
|
||||||
PPACKET_HOLDER holder;
|
PPACKET_HOLDER holder;
|
||||||
@@ -543,7 +545,7 @@ static int sendControllerEventInternal(short controllerNumber, short buttonFlags
|
|||||||
}
|
}
|
||||||
holder->packet.multiController.headerB = MC_HEADER_B;
|
holder->packet.multiController.headerB = MC_HEADER_B;
|
||||||
holder->packet.multiController.controllerNumber = controllerNumber;
|
holder->packet.multiController.controllerNumber = controllerNumber;
|
||||||
holder->packet.multiController.midA = MC_ACTIVE_CONTROLLER_FLAGS;
|
holder->packet.multiController.activeGamepadMask = activeGamepadMask;
|
||||||
holder->packet.multiController.midB = MC_MID_B;
|
holder->packet.multiController.midB = MC_MID_B;
|
||||||
holder->packet.multiController.buttonFlags = buttonFlags;
|
holder->packet.multiController.buttonFlags = buttonFlags;
|
||||||
holder->packet.multiController.leftTrigger = leftTrigger;
|
holder->packet.multiController.leftTrigger = leftTrigger;
|
||||||
@@ -568,15 +570,17 @@ static int sendControllerEventInternal(short controllerNumber, short buttonFlags
|
|||||||
int LiSendControllerEvent(short buttonFlags, unsigned char leftTrigger, unsigned char rightTrigger,
|
int LiSendControllerEvent(short buttonFlags, unsigned char leftTrigger, unsigned char rightTrigger,
|
||||||
short leftStickX, short leftStickY, short rightStickX, short rightStickY)
|
short leftStickX, short leftStickY, short rightStickX, short rightStickY)
|
||||||
{
|
{
|
||||||
return sendControllerEventInternal(0, buttonFlags, leftTrigger, rightTrigger,
|
return sendControllerEventInternal(0, 0x1, buttonFlags, leftTrigger, rightTrigger,
|
||||||
leftStickX, leftStickY, rightStickX, rightStickY);
|
leftStickX, leftStickY, rightStickX, rightStickY);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send a controller event to the streaming machine
|
// Send a controller event to the streaming machine
|
||||||
int LiSendMultiControllerEvent(short controllerNumber, short buttonFlags, unsigned char leftTrigger, unsigned char rightTrigger,
|
int LiSendMultiControllerEvent(short controllerNumber, short activeGamepadMask,
|
||||||
|
short buttonFlags, unsigned char leftTrigger, unsigned char rightTrigger,
|
||||||
short leftStickX, short leftStickY, short rightStickX, short rightStickY)
|
short leftStickX, short leftStickY, short rightStickX, short rightStickY)
|
||||||
{
|
{
|
||||||
return sendControllerEventInternal(controllerNumber, buttonFlags, leftTrigger, rightTrigger,
|
return sendControllerEventInternal(controllerNumber, activeGamepadMask,
|
||||||
|
buttonFlags, leftTrigger, rightTrigger,
|
||||||
leftStickX, leftStickY, rightStickX, rightStickY);
|
leftStickX, leftStickY, rightStickX, rightStickY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -288,8 +288,10 @@ int LiSendControllerEvent(short buttonFlags, unsigned char leftTrigger, unsigned
|
|||||||
// This function queues a controller event to be sent to the remote server. The controllerNumber
|
// This function queues a controller event to be sent to the remote server. The controllerNumber
|
||||||
// parameter is a zero-based index of which controller this event corresponds to. The largest legal
|
// parameter is a zero-based index of which controller this event corresponds to. The largest legal
|
||||||
// controller number is 3 (for a total of 4 controllers, the Xinput maximum). On generation 3 servers (GFE 2.1.x),
|
// controller number is 3 (for a total of 4 controllers, the Xinput maximum). On generation 3 servers (GFE 2.1.x),
|
||||||
// these will be sent as controller 0 regardless of the controllerNumber parameter.
|
// these will be sent as controller 0 regardless of the controllerNumber parameter. The activeGamepadMask
|
||||||
int LiSendMultiControllerEvent(short controllerNumber, short buttonFlags, unsigned char leftTrigger, unsigned char rightTrigger,
|
// parameter is a bitfield with bits set for each controller present up to a maximum of 4 (0xF).
|
||||||
|
int LiSendMultiControllerEvent(short controllerNumber, short activeGamepadMask,
|
||||||
|
short buttonFlags, unsigned char leftTrigger, unsigned char rightTrigger,
|
||||||
short leftStickX, short leftStickY, short rightStickX, short rightStickY);
|
short leftStickX, short leftStickY, short rightStickX, short rightStickY);
|
||||||
|
|
||||||
// This function queues a vertical scroll event to the remote server.
|
// This function queues a vertical scroll event to the remote server.
|
||||||
|
|||||||
Reference in New Issue
Block a user