From d9bbe53681054edebf9c6a2ce8097a053fefe915 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 30 Aug 2014 10:58:43 -0700 Subject: [PATCH] Implement LiSendControllerEvent --- limelight-common/Input.h | 20 ++++++++++++++++++++ limelight-common/InputStream.c | 32 ++++++++++++++++++++++++++++++++ limelight-common/Limelight.h | 18 ++++++++++++++++++ 3 files changed, 70 insertions(+) diff --git a/limelight-common/Input.h b/limelight-common/Input.h index 0fb92ef..b0dc0cf 100644 --- a/limelight-common/Input.h +++ b/limelight-common/Input.h @@ -32,4 +32,24 @@ typedef struct _NV_MOUSE_BUTTON_PACKET { int button; } NV_MOUSE_BUTTON_PACKET, *PNV_MOUSE_BUTTON_PACKET; +#define PACKET_TYPE_CONTROLLER 0x18 +#define HEADER_A 0x0000000A +#define HEADER_B 0x1400 +#define TAIL_A 0x0000009C +#define TAIL_B 0x0055 +typedef struct _NV_CONTROLLER_PACKET { + NV_INPUT_HEADER header; + int headerA; + short headerB; + short buttonFlags; + char leftTrigger; + char rightTrigger; + short leftStickX; + short leftStickY; + short rightStickX; + short rightStickY; + int tailA; + short tailB; +} NV_CONTROLLER_PACKET, *PNV_CONTROLLER_PACKET; + #pragma pack(pop) \ No newline at end of file diff --git a/limelight-common/InputStream.c b/limelight-common/InputStream.c index 99ea77f..7c9611c 100644 --- a/limelight-common/InputStream.c +++ b/limelight-common/InputStream.c @@ -23,6 +23,7 @@ typedef struct _PACKET_HOLDER { NV_KEYBOARD_PACKET keyboard; NV_MOUSE_MOVE_PACKET mouseMove; NV_MOUSE_BUTTON_PACKET mouseButton; + NV_CONTROLLER_PACKET controller; } packet; } PACKET_HOLDER, *PPACKET_HOLDER; @@ -229,3 +230,34 @@ int LiSendKeyboardEvent(short keyCode, char keyAction, char modifiers) { return err; } +int LiSendControllerEvent(short buttonFlags, char leftTrigger, char rightTrigger, + short leftStickX, short leftStickY, short rightStickX, short rightStickY) +{ + PPACKET_HOLDER holder; + int err; + + holder = malloc(sizeof(*holder)); + if (holder == NULL) { + return -1; + } + + holder->packetLength = sizeof(NV_CONTROLLER_PACKET); + holder->packet.controller.header.packetType = PACKET_TYPE_CONTROLLER; + holder->packet.controller.headerA = HEADER_A; + holder->packet.controller.headerB = HEADER_B; + holder->packet.controller.buttonFlags = buttonFlags; + holder->packet.controller.leftTrigger = leftTrigger; + holder->packet.controller.rightTrigger = rightTrigger; + holder->packet.controller.leftStickX = leftStickX; + holder->packet.controller.leftStickY = leftStickY; + holder->packet.controller.rightStickX = rightStickX; + holder->packet.controller.rightStickY = rightStickY; + holder->packet.controller.tailA = TAIL_A; + holder->packet.controller.tailB = TAIL_B; + err = LbqOfferQueueItem(&packetQueue, holder); + if (err != LBQ_SUCCESS) { + free(holder); + } + + return err; +} diff --git a/limelight-common/Limelight.h b/limelight-common/Limelight.h index 1ee9803..19e0c4c 100644 --- a/limelight-common/Limelight.h +++ b/limelight-common/Limelight.h @@ -111,6 +111,24 @@ int LiSendMouseButtonEvent(char action, int button); #define MODIFIER_ALT 0x04 int LiSendKeyboardEvent(short keyCode, char keyAction, char modifiers); +#define A_FLAG 0x1000 +#define B_FLAG 0x2000 +#define X_FLAG 0x4000 +#define Y_FLAG 0x8000 +#define UP_FLAG 0x0001 +#define DOWN_FLAG 0x0002 +#define LEFT_FLAG 0x0004 +#define RIGHT_FLAG 0x0008 +#define LB_FLAG 0x0100 +#define RB_FLAG 0x0200 +#define PLAY_FLAG 0x0010 +#define BACK_FLAG 0x0020 +#define LS_CLK_FLAG 0x0040 +#define RS_CLK_FLAG 0x0080 +#define SPECIAL_FLAG 0x0400 +int LiSendControllerEvent(short buttonFlags, char leftTrigger, char rightTrigger, + short leftStickX, short leftStickY, short rightStickX, short rightStickY); + #ifdef __cplusplus } #endif \ No newline at end of file