Implement LiSendControllerEvent

This commit is contained in:
Cameron Gutman 2014-08-30 10:58:43 -07:00
parent 51b78b628b
commit d9bbe53681
3 changed files with 70 additions and 0 deletions

View File

@ -32,4 +32,24 @@ typedef struct _NV_MOUSE_BUTTON_PACKET {
int button; int button;
} NV_MOUSE_BUTTON_PACKET, *PNV_MOUSE_BUTTON_PACKET; } 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) #pragma pack(pop)

View File

@ -23,6 +23,7 @@ typedef struct _PACKET_HOLDER {
NV_KEYBOARD_PACKET keyboard; NV_KEYBOARD_PACKET keyboard;
NV_MOUSE_MOVE_PACKET mouseMove; NV_MOUSE_MOVE_PACKET mouseMove;
NV_MOUSE_BUTTON_PACKET mouseButton; NV_MOUSE_BUTTON_PACKET mouseButton;
NV_CONTROLLER_PACKET controller;
} packet; } packet;
} PACKET_HOLDER, *PPACKET_HOLDER; } PACKET_HOLDER, *PPACKET_HOLDER;
@ -229,3 +230,34 @@ int LiSendKeyboardEvent(short keyCode, char keyAction, char modifiers) {
return err; 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;
}

View File

@ -111,6 +111,24 @@ int LiSendMouseButtonEvent(char action, int button);
#define MODIFIER_ALT 0x04 #define MODIFIER_ALT 0x04
int LiSendKeyboardEvent(short keyCode, char keyAction, char modifiers); 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 #ifdef __cplusplus
} }
#endif #endif