mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2026-04-03 06:16:04 +00:00
Correctly transmit the number of controllers attached to the client
This commit is contained in:
@@ -55,7 +55,6 @@ typedef struct _NV_CONTROLLER_PACKET {
|
||||
#define PACKET_TYPE_MULTI_CONTROLLER 0x1E
|
||||
#define MC_HEADER_A 0x0000000D
|
||||
#define MC_HEADER_B 0x001A
|
||||
#define MC_ACTIVE_CONTROLLER_FLAGS 0x000F
|
||||
#define MC_MID_B 0x0014
|
||||
#define MC_TAIL_A 0x0000009C
|
||||
#define MC_TAIL_B 0x0055
|
||||
@@ -64,7 +63,7 @@ typedef struct _NV_MULTI_CONTROLLER_PACKET {
|
||||
int headerA;
|
||||
short headerB;
|
||||
short controllerNumber;
|
||||
short midA;
|
||||
short activeGamepadMask;
|
||||
short midB;
|
||||
short buttonFlags;
|
||||
unsigned char leftTrigger;
|
||||
|
||||
@@ -241,6 +241,7 @@ static void inputSendThreadProc(void* context) {
|
||||
newPkt = &controllerBatchHolder->packet.multiController;
|
||||
if (newPkt->buttonFlags != origPkt->buttonFlags ||
|
||||
newPkt->controllerNumber != origPkt->controllerNumber ||
|
||||
newPkt->activeGamepadMask != origPkt->activeGamepadMask ||
|
||||
!checkDirs(origPkt->leftTrigger, newPkt->leftTrigger, &dirs[0]) ||
|
||||
!checkDirs(origPkt->rightTrigger, newPkt->rightTrigger, &dirs[1]) ||
|
||||
!checkDirs(origPkt->leftStickX, newPkt->leftStickX, &dirs[2]) ||
|
||||
@@ -500,7 +501,8 @@ int LiSendKeyboardEvent(short keyCode, char keyAction, char modifiers) {
|
||||
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)
|
||||
{
|
||||
PPACKET_HOLDER holder;
|
||||
@@ -543,7 +545,7 @@ static int sendControllerEventInternal(short controllerNumber, short buttonFlags
|
||||
}
|
||||
holder->packet.multiController.headerB = MC_HEADER_B;
|
||||
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.buttonFlags = buttonFlags;
|
||||
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,
|
||||
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);
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
return sendControllerEventInternal(controllerNumber, buttonFlags, leftTrigger, rightTrigger,
|
||||
return sendControllerEventInternal(controllerNumber, activeGamepadMask,
|
||||
buttonFlags, leftTrigger, rightTrigger,
|
||||
leftStickX, leftStickY, rightStickX, rightStickY);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
// 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),
|
||||
// these will be sent as controller 0 regardless of the controllerNumber parameter.
|
||||
int LiSendMultiControllerEvent(short controllerNumber, short buttonFlags, unsigned char leftTrigger, unsigned char rightTrigger,
|
||||
// these will be sent as controller 0 regardless of the controllerNumber parameter. The activeGamepadMask
|
||||
// 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);
|
||||
|
||||
// This function queues a vertical scroll event to the remote server.
|
||||
|
||||
Reference in New Issue
Block a user