diff --git a/limelight-common/Input.h b/limelight-common/Input.h index b0dc0cf..72a8f96 100644 --- a/limelight-common/Input.h +++ b/limelight-common/Input.h @@ -52,4 +52,16 @@ typedef struct _NV_CONTROLLER_PACKET { short tailB; } NV_CONTROLLER_PACKET, *PNV_CONTROLLER_PACKET; +#define PACKET_TYPE_SCROLL 0xA +#define MAGIC_A 0x09 +typedef struct _NV_SCROLL_PACKET { + NV_INPUT_HEADER header; + char magicA; + char zero1; + short zero2; + short scrollAmt1; + short scrollAmt2; + short zero3; +} NV_SCROLL_PACKET, *PNV_SCROLL_PACKET; + #pragma pack(pop) \ No newline at end of file diff --git a/limelight-common/InputStream.c b/limelight-common/InputStream.c index e509e5d..ace45fc 100644 --- a/limelight-common/InputStream.c +++ b/limelight-common/InputStream.c @@ -25,6 +25,7 @@ typedef struct _PACKET_HOLDER { NV_MOUSE_MOVE_PACKET mouseMove; NV_MOUSE_BUTTON_PACKET mouseButton; NV_CONTROLLER_PACKET controller; + NV_SCROLL_PACKET scroll; } packet; } PACKET_HOLDER, *PPACKET_HOLDER; @@ -282,3 +283,33 @@ int LiSendControllerEvent(short buttonFlags, char leftTrigger, char rightTrigger return err; } + +int LiSendScrollEvent(char scrollClicks) { + PPACKET_HOLDER holder; + int err; + + if (!initialized) { + return -2; + } + + holder = malloc(sizeof(*holder)); + if (holder == NULL) { + return -1; + } + + holder->packetLength = sizeof(NV_SCROLL_PACKET); + holder->packet.scroll.header.packetType = htonl(PACKET_TYPE_SCROLL); + holder->packet.scroll.magicA = MAGIC_A; + holder->packet.scroll.zero1 = 0; + holder->packet.scroll.zero2 = 0; + holder->packet.scroll.scrollAmt1 = htons(scrollClicks * 120); + holder->packet.scroll.scrollAmt2 = holder->packet.scroll.scrollAmt1; + holder->packet.scroll.zero3 = 0; + + err = LbqOfferQueueItem(&packetQueue, holder); + if (err != LBQ_SUCCESS) { + free(holder); + } + + return err; +} \ No newline at end of file diff --git a/limelight-common/Limelight.h b/limelight-common/Limelight.h index 19e0c4c..19dc49d 100644 --- a/limelight-common/Limelight.h +++ b/limelight-common/Limelight.h @@ -129,6 +129,8 @@ int LiSendKeyboardEvent(short keyCode, char keyAction, char modifiers); int LiSendControllerEvent(short buttonFlags, char leftTrigger, char rightTrigger, short leftStickX, short leftStickY, short rightStickX, short rightStickY); +int LiSendScrollEvent(char scrollClicks); + #ifdef __cplusplus } #endif \ No newline at end of file