From da319963b62c9563fff7865c9aa8a0eeb3d6dbb2 Mon Sep 17 00:00:00 2001 From: CTurt Date: Sat, 25 Jul 2015 22:42:55 +0100 Subject: [PATCH] Update for latest compilers and libraries --- PC/include/keys.h | 13 ++++++ PC/include/public.h | 81 ++++++++++++++++++++++++++++++++------ PC/include/vjoyinterface.h | 33 +++++++++++++++- PC/source/keys.c | 4 ++ 4 files changed, 117 insertions(+), 14 deletions(-) diff --git a/PC/include/keys.h b/PC/include/keys.h index 40baacc..95555fd 100644 --- a/PC/include/keys.h +++ b/PC/include/keys.h @@ -1,6 +1,19 @@ #pragma once #include +#include +#include + +// For some reason, these are not defined in winuser.h like they used to be... +#ifndef VK_OEM_MINUS +#define VK_OEM_MINUS 0xBD +#endif +#ifndef VK_OEM_COMMA +#define VK_OEM_COMMA 0xBC +#endif +#ifndef KEYEVENTF_SCANCODE +#define KEYEVENTF_SCANCODE 0x08 +#endif #define MAPVK_VK_TO_VSC 0 diff --git a/PC/include/public.h b/PC/include/public.h index 38342a8..32dc016 100644 --- a/PC/include/public.h +++ b/PC/include/public.h @@ -1,4 +1,37 @@ -#pragma once +/*++ + +Copyright (c) Shaul Eizikovich. All rights reserved. + + THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY + KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR + PURPOSE. + +Module Name: + + public.h + +Abstract: + + Public header file for the vJoy project + Developpers that need to interface with vJoy need to include this file + +Author: + + +Environment: + + kernel mode and User mode + +Notes: + + +Revision History: + + +--*/ +#ifndef _PUBLIC_H +#define _PUBLIC_H // Compilation directives #define PPJOY_MODE @@ -10,10 +43,6 @@ #include // Definitions for controlling GUID initialization -// Sideband comunication with vJoy Device -//{781EF630-72B2-11d2-B852-00C04FAD5101} -DEFINE_GUID(GUID_DEVINTERFACE_VJOY, 0x781EF630, 0x72B2, 0x11d2, 0xB8, 0x52, 0x00, 0xC0, 0x4F, 0xAD, 0x51, 0x01); - // // Usage example: // CreateFile(TEXT("\\\\.\\vJoy"), GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); @@ -31,7 +60,7 @@ DEFINE_GUID(GUID_DEVINTERFACE_VJOY, 0x781EF630, 0x72B2, 0x11d2, 0xB8, 0x52, 0x00 #define VER_X_ 0 #define VER_H_ 2 #define VER_M_ 0 -#define VER_L_ 4 +#define VER_L_ 5 #define STRINGIFY_1(x) #x #define STRINGIFY(x) STRINGIFY_1(x) @@ -51,15 +80,34 @@ DEFINE_GUID(GUID_DEVINTERFACE_VJOY, 0x781EF630, 0x72B2, 0x11d2, 0xB8, 0x52, 0x00 #define SERIALNUMBER_STR MAKEWIDE(STRINGIFY(VER_H_)) L"." MAKEWIDE(STRINGIFY(VER_M_)) L"." MAKEWIDE(STRINGIFY(VER_L_)) // Function codes; -#define LOAD_POSITIONS 0x910 -#define GETATTRIB 0x911 - +//#define LOAD_POSITIONS 0x910 +//#define GETATTRIB 0x911 +// #define GET_FFB_DATA 0x00222912 // METHOD_OUT_DIRECT + FILE_DEVICE_UNKNOWN + FILE_ANY_ACCESS +//#define SET_FFB_STAT 0x913 // METHOD_NEITHER +//#define GET_FFB_STAT 0x916 +#define F_LOAD_POSITIONS 0x910 +#define F_GETATTRIB 0x911 +#define F_GET_FFB_DATA 0x912 +#define F_SET_FFB_STAT 0x913 +#define F_GET_FFB_STAT 0x916 +#define F_GET_DEV_INFO 0x917 // IO Device Control codes; -#define IOCTL_VJOY_GET_ATTRIB CTL_CODE (FILE_DEVICE_UNKNOWN, GETATTRIB, METHOD_BUFFERED, FILE_WRITE_ACCESS) +#define IOCTL_VJOY_GET_ATTRIB CTL_CODE (FILE_DEVICE_UNKNOWN, GETATTRIB, METHOD_BUFFERED, FILE_WRITE_ACCESS) +#define LOAD_POSITIONS CTL_CODE (FILE_DEVICE_UNKNOWN, F_LOAD_POSITIONS, METHOD_BUFFERED, FILE_WRITE_ACCESS) +#define GET_FFB_DATA CTL_CODE (FILE_DEVICE_UNKNOWN, F_GET_FFB_DATA, METHOD_OUT_DIRECT, FILE_ANY_ACCESS) +#define SET_FFB_STAT CTL_CODE (FILE_DEVICE_UNKNOWN, F_SET_FFB_STAT, METHOD_NEITHER, FILE_ANY_ACCESS) +#define GET_FFB_STAT CTL_CODE (FILE_DEVICE_UNKNOWN, F_GET_FFB_STAT, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define GET_DEV_INFO CTL_CODE (FILE_DEVICE_UNKNOWN, F_GET_DEV_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) #ifndef __HIDPORT_H__ // Copied from hidport.h +#define IOCTL_HID_SET_FEATURE 0xB0191 +#define IOCTL_HID_WRITE_REPORT 0xB000F + +#define MAX_N_DEVICES 16 // Maximum number of vJoy devices + + typedef struct _HID_DEVICE_ATTRIBUTES { ULONG Size; @@ -153,12 +201,14 @@ typedef struct _JOYSTICK_POSITION_V2 DWORD bHatsEx1; // Lower 4 bits: HAT switch or 16-bit of continuous HAT switch DWORD bHatsEx2; // Lower 4 bits: HAT switch or 16-bit of continuous HAT switch DWORD bHatsEx3; // Lower 4 bits: HAT switch or 16-bit of continuous HAT switch LONG lButtonsEx1; // Buttons 33-64 + /// JOYSTICK_POSITION_V2 Extenssion - LONG lButtonsEx1; // Buttons 33-64 - LONG lButtonsEx2; // Buttons 65-96 - LONG lButtonsEx3; // Buttons 97-128 + LONG lButtonsEx1; // Buttons 33-64 + LONG lButtonsEx2; // Buttons 65-96 + LONG lButtonsEx3; // Buttons 97-128 } JOYSTICK_POSITION_V2, *PJOYSTICK_POSITION_V2; + // HID Descriptor definitions #define HID_USAGE_X 0x30 #define HID_USAGE_Y 0x31 @@ -170,3 +220,8 @@ typedef struct _JOYSTICK_POSITION_V2 #define HID_USAGE_SL1 0x37 #define HID_USAGE_WHL 0x38 #define HID_USAGE_POV 0x39 + + +#endif + + diff --git a/PC/include/vjoyinterface.h b/PC/include/vjoyinterface.h index 4a53b8f..0127577 100644 --- a/PC/include/vjoyinterface.h +++ b/PC/include/vjoyinterface.h @@ -21,6 +21,35 @@ enum VjdStat /* Declares an enumeration data type called BOOLEAN */ VJD_STAT_MISS, // The vJoy Device is missing. It either does not exist or the driver is down. VJD_STAT_UNKN // Unknown }; + +/* Error codes for some of the functions */ +#define NO_HANDLE_BY_INDEX -1 +#define BAD_PREPARSED_DATA -2 +#define NO_CAPS -3 +#define BAD_N_BTN_CAPS -4 +#define BAD_CALLOC -5 +#define BAD_BTN_CAPS -6 +#define BAD_BTN_RANGE -7 +#define BAD_N_VAL_CAPS -8 +#define BAD_ID_RANGE -9 +#define NO_SUCH_AXIS -10 + +/* Environment Variables */ +#define INTERFACE_LOG_LEVEL "VJOYINTERFACELOGLEVEL" +#define INTERFACE_LOG_FILE "VJOYINTERFACELOGFILE" +#define INTERFACE_DEF_LOG_FILE "vJoyInterface.log" + +struct DEV_INFO { + BYTE DeviceID; // Device ID: Valid values are 1-16 + BYTE nImplemented; // Number of implemented device: Valid values are 1-16 + BYTE isImplemented; // Is this device implemented? + BYTE MaxDevices; // Maximum number of devices that may be implemented (16) + BYTE DriverFFB; // Does this driver support FFB (False) + BYTE DeviceFFB; // Does this device support FFB (False) +} ; + +typedef void (CALLBACK *RemovalCB)(BOOL, BOOL, PVOID); + #endif ///////////////////////////// vJoy device (collection) Control interface ///////////////////////////////// /* @@ -40,6 +69,8 @@ VJOYINTERFACE_API BOOL __cdecl vJoyEnabled(void); VJOYINTERFACE_API PVOID __cdecl GetvJoyProductString(void); VJOYINTERFACE_API PVOID __cdecl GetvJoyManufacturerString(void); VJOYINTERFACE_API PVOID __cdecl GetvJoySerialNumberString(void); +VJOYINTERFACE_API BOOL __cdecl DriverMatch(WORD * DllVer, WORD * DrvVer); +VJOYINTERFACE_API VOID __cdecl RegisterRemovalCB(RemovalCB cb, PVOID data); ///// vJoy Device properties @@ -70,4 +101,4 @@ VJOYINTERFACE_API BOOL __cdecl ResetPovs(UINT rID); // Reset all POV Switches VJOYINTERFACE_API BOOL __cdecl SetAxis(LONG Value, UINT rID, UINT Axis); // Write Value to a given axis defined in the specified VDJ VJOYINTERFACE_API BOOL __cdecl SetBtn(BOOL Value, UINT rID, UCHAR nBtn); // Write Value to a given button defined in the specified VDJ VJOYINTERFACE_API BOOL __cdecl SetDiscPov(int Value, UINT rID, UCHAR nPov); // Write Value to a given descrete POV defined in the specified VDJ -VJOYINTERFACE_API BOOL __cdecl SetContPov(DWORD Value, UINT rID, UCHAR nPov); // Write Value to a given continuous POV defined in the specified VDJ \ No newline at end of file +VJOYINTERFACE_API BOOL __cdecl SetContPov(DWORD Value, UINT rID, UCHAR nPov); // Write Value to a given continuous POV defined in the specified VDJ diff --git a/PC/source/keys.c b/PC/source/keys.c index 1eecb2f..5f24212 100644 --- a/PC/source/keys.c +++ b/PC/source/keys.c @@ -1,5 +1,9 @@ #include "keys.h" +// Sideband comunication with vJoy Device +//{781EF630-72B2-11d2-B852-00C04FAD5101} +DEFINE_GUID(GUID_DEVINTERFACE_VJOY, 0x781EF630, 0x72B2, 0x11d2, 0xB8, 0x52, 0x00, 0xC0, 0x4F, 0xAD, 0x51, 0x01); + unsigned int lastKeys; unsigned int currentKeys;