Add support for vertical scrolling

This commit is contained in:
Cameron Gutman 2014-10-12 11:59:42 -07:00
parent 3dee3a60d5
commit a0d9174e75
3 changed files with 45 additions and 0 deletions

View File

@ -52,4 +52,16 @@ typedef struct _NV_CONTROLLER_PACKET {
short tailB; short tailB;
} NV_CONTROLLER_PACKET, *PNV_CONTROLLER_PACKET; } 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) #pragma pack(pop)

View File

@ -25,6 +25,7 @@ typedef struct _PACKET_HOLDER {
NV_MOUSE_MOVE_PACKET mouseMove; NV_MOUSE_MOVE_PACKET mouseMove;
NV_MOUSE_BUTTON_PACKET mouseButton; NV_MOUSE_BUTTON_PACKET mouseButton;
NV_CONTROLLER_PACKET controller; NV_CONTROLLER_PACKET controller;
NV_SCROLL_PACKET scroll;
} packet; } packet;
} PACKET_HOLDER, *PPACKET_HOLDER; } PACKET_HOLDER, *PPACKET_HOLDER;
@ -282,3 +283,33 @@ int LiSendControllerEvent(short buttonFlags, char leftTrigger, char rightTrigger
return err; 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;
}

View File

@ -129,6 +129,8 @@ int LiSendKeyboardEvent(short keyCode, char keyAction, char modifiers);
int LiSendControllerEvent(short buttonFlags, char leftTrigger, char rightTrigger, int LiSendControllerEvent(short buttonFlags, char leftTrigger, char rightTrigger,
short leftStickX, short leftStickY, short rightStickX, short rightStickY); short leftStickX, short leftStickY, short rightStickX, short rightStickY);
int LiSendScrollEvent(char scrollClicks);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif