Remove old SDK completely
This commit is contained in:
parent
962c5fd412
commit
a70d7ca3c4
17 changed files with 0 additions and 2231 deletions
Binary file not shown.
|
@ -1,89 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.21022</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{CCA62E05-B035-49F6-A3B4-ACD21CD562E4}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>FeederDemoCS</RootNamespace>
|
||||
<AssemblyName>FeederDemoCS</AssemblyName>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
<UpdateEnabled>false</UpdateEnabled>
|
||||
<UpdateMode>Foreground</UpdateMode>
|
||||
<UpdateInterval>7</UpdateInterval>
|
||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||
<UpdatePeriodically>false</UpdatePeriodically>
|
||||
<UpdateRequired>false</UpdateRequired>
|
||||
<MapFileExtensions>true</MapFileExtensions>
|
||||
<ApplicationRevision>0</ApplicationRevision>
|
||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="vJoyInterfaceWrap, Version=0.2.0.5, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\x64\vJoyInterfaceWrap.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>copy $(SolutionDir)..\x64\vJoyInterface.dll $(TargetDir).</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,20 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||
# Visual C# Express 2008
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FeederDemoCS", "FeederDemoCS.csproj", "{CCA62E05-B035-49F6-A3B4-ACD21CD562E4}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{CCA62E05-B035-49F6-A3B4-ACD21CD562E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CCA62E05-B035-49F6-A3B4-ACD21CD562E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CCA62E05-B035-49F6-A3B4-ACD21CD562E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CCA62E05-B035-49F6-A3B4-ACD21CD562E4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -1,284 +0,0 @@
|
|||
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// This project demonstrates how to write a simple vJoy feeder in C#
|
||||
//
|
||||
// You can compile it with either #define ROBUST OR #define EFFICIENT
|
||||
// The fuctionality is similar -
|
||||
// The ROBUST section demonstrate the usage of functions that are easy and safe to use but are less efficient
|
||||
// The EFFICIENT ection demonstrate the usage of functions that are more efficient
|
||||
//
|
||||
// Functionality:
|
||||
// The program starts with creating one joystick object.
|
||||
// Then it petches the device id from the command-line and makes sure that it is within range
|
||||
// After testing that the driver is enabled it gets information about the driver
|
||||
// Gets information about the specified virtual device
|
||||
// This feeder uses only a few axes. It checks their existence and
|
||||
// checks the number of buttons and POV Hat switches.
|
||||
// Then the feeder acquires the virtual device
|
||||
// Here starts and endless loop that feedes data into the virtual device
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#define ROBUST
|
||||
//#define EFFICIENT
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
// Don't forget to add this
|
||||
using vJoyInterfaceWrap;
|
||||
|
||||
namespace FeederDemoCS
|
||||
{
|
||||
class Program
|
||||
{
|
||||
// Declaring one joystick (Device id 1) and a position structure.
|
||||
static public vJoy joystick;
|
||||
static public vJoy.JoystickState iReport;
|
||||
static public uint id = 1;
|
||||
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
// Create one joystick object and a position structure.
|
||||
joystick = new vJoy();
|
||||
iReport = new vJoy.JoystickState();
|
||||
|
||||
|
||||
// Device ID can only be in the range 1-16
|
||||
if (args.Length>0 && !String.IsNullOrEmpty(args[0]))
|
||||
id = Convert.ToUInt32(args[0]);
|
||||
if (id <= 0 || id > 16)
|
||||
{
|
||||
Console.WriteLine("Illegal device ID {0}\nExit!",id);
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the driver attributes (Vendor ID, Product ID, Version Number)
|
||||
if (!joystick.vJoyEnabled())
|
||||
{
|
||||
Console.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n");
|
||||
return;
|
||||
}
|
||||
else
|
||||
Console.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", joystick.GetvJoyManufacturerString(), joystick.GetvJoyProductString(), joystick.GetvJoySerialNumberString());
|
||||
|
||||
// Get the state of the requested device
|
||||
VjdStat status = joystick.GetVJDStatus(id);
|
||||
switch (status)
|
||||
{
|
||||
case VjdStat.VJD_STAT_OWN:
|
||||
Console.WriteLine("vJoy Device {0} is already owned by this feeder\n", id);
|
||||
break;
|
||||
case VjdStat.VJD_STAT_FREE:
|
||||
Console.WriteLine("vJoy Device {0} is free\n", id);
|
||||
break;
|
||||
case VjdStat.VJD_STAT_BUSY:
|
||||
Console.WriteLine("vJoy Device {0} is already owned by another feeder\nCannot continue\n", id);
|
||||
return;
|
||||
case VjdStat.VJD_STAT_MISS:
|
||||
Console.WriteLine("vJoy Device {0} is not installed or disabled\nCannot continue\n", id);
|
||||
return;
|
||||
default:
|
||||
Console.WriteLine("vJoy Device {0} general error\nCannot continue\n", id);
|
||||
return;
|
||||
};
|
||||
|
||||
// Check which axes are supported
|
||||
bool AxisX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X);
|
||||
bool AxisY = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y);
|
||||
bool AxisZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z);
|
||||
bool AxisRX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX);
|
||||
bool AxisRZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ);
|
||||
// Get the number of buttons and POV Hat switchessupported by this vJoy device
|
||||
int nButtons = joystick.GetVJDButtonNumber(id);
|
||||
int ContPovNumber = joystick.GetVJDContPovNumber(id);
|
||||
int DiscPovNumber = joystick.GetVJDDiscPovNumber(id);
|
||||
|
||||
// Print results
|
||||
Console.WriteLine("\nvJoy Device {0} capabilities:\n", id);
|
||||
Console.WriteLine("Numner of buttons\t\t{0}\n", nButtons);
|
||||
Console.WriteLine("Numner of Continuous POVs\t{0}\n", ContPovNumber);
|
||||
Console.WriteLine("Numner of Descrete POVs\t\t{0}\n", DiscPovNumber);
|
||||
Console.WriteLine("Axis X\t\t{0}\n", AxisX ? "Yes" : "No");
|
||||
Console.WriteLine("Axis Y\t\t{0}\n", AxisX ? "Yes" : "No");
|
||||
Console.WriteLine("Axis Z\t\t{0}\n", AxisX ? "Yes" : "No");
|
||||
Console.WriteLine("Axis Rx\t\t{0}\n", AxisRX ? "Yes" : "No");
|
||||
Console.WriteLine("Axis Rz\t\t{0}\n", AxisRZ ? "Yes" : "No");
|
||||
|
||||
// Test if DLL matches the driver
|
||||
UInt32 DllVer = 0, DrvVer = 0;
|
||||
bool match = joystick.DriverMatch(ref DllVer, ref DrvVer);
|
||||
if (match)
|
||||
Console.WriteLine("Version of Driver Matches DLL Version ({0:X})\n", DllVer);
|
||||
else
|
||||
Console.WriteLine("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})\n", DrvVer, DllVer);
|
||||
|
||||
|
||||
// Acquire the target
|
||||
if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id))))
|
||||
{
|
||||
Console.WriteLine("Failed to acquire vJoy device number {0}.\n", id);
|
||||
return ;
|
||||
}
|
||||
else
|
||||
Console.WriteLine("Acquired: vJoy device number {0}.\n", id);
|
||||
|
||||
Console.WriteLine("\npress enter to stat feeding");
|
||||
Console.ReadKey(true);
|
||||
|
||||
int X, Y, Z, ZR, XR;
|
||||
uint count = 0;
|
||||
long maxval = 0;
|
||||
|
||||
X = 20;
|
||||
Y = 30;
|
||||
Z = 40;
|
||||
XR = 60;
|
||||
ZR = 80;
|
||||
|
||||
joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval);
|
||||
|
||||
#if ROBUST
|
||||
bool res;
|
||||
// Reset this device to default values
|
||||
joystick.ResetVJD(id);
|
||||
|
||||
// Feed the device in endless loop
|
||||
while (true)
|
||||
{
|
||||
// Set position of 4 axes
|
||||
res = joystick.SetAxis(X, id, HID_USAGES.HID_USAGE_X);
|
||||
res = joystick.SetAxis(Y, id, HID_USAGES.HID_USAGE_Y);
|
||||
res = joystick.SetAxis(Z, id, HID_USAGES.HID_USAGE_Z);
|
||||
res = joystick.SetAxis(XR, id, HID_USAGES.HID_USAGE_RX);
|
||||
res = joystick.SetAxis(ZR, id, HID_USAGES.HID_USAGE_RZ);
|
||||
|
||||
// Press/Release Buttons
|
||||
res = joystick.SetBtn(true, id, count / 50);
|
||||
res = joystick.SetBtn(false, id, 1 + count / 50);
|
||||
|
||||
// If Continuous POV hat switches installed - make them go round
|
||||
// For high values - put the switches in neutral state
|
||||
if (ContPovNumber>0)
|
||||
{
|
||||
if ((count * 70) < 30000)
|
||||
{
|
||||
res = joystick.SetContPov(((int)count * 70), id, 1);
|
||||
res = joystick.SetContPov(((int)count * 70) + 2000, id, 2);
|
||||
res = joystick.SetContPov(((int)count * 70) + 4000, id, 3);
|
||||
res = joystick.SetContPov(((int)count * 70) + 6000, id, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
res = joystick.SetContPov(-1, id, 1);
|
||||
res = joystick.SetContPov(-1, id, 2);
|
||||
res = joystick.SetContPov(-1, id, 3);
|
||||
res = joystick.SetContPov(-1, id, 4);
|
||||
};
|
||||
};
|
||||
|
||||
// If Discrete POV hat switches installed - make them go round
|
||||
// From time to time - put the switches in neutral state
|
||||
if (DiscPovNumber>0)
|
||||
{
|
||||
if (count < 550)
|
||||
{
|
||||
joystick.SetDiscPov((((int)count / 20) + 0) % 4, id, 1);
|
||||
joystick.SetDiscPov((((int)count / 20) + 1) % 4, id, 2);
|
||||
joystick.SetDiscPov((((int)count / 20) + 2) % 4, id, 3);
|
||||
joystick.SetDiscPov((((int)count / 20) + 3) % 4, id, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
joystick.SetDiscPov(-1, id, 1);
|
||||
joystick.SetDiscPov(-1, id, 2);
|
||||
joystick.SetDiscPov(-1, id, 3);
|
||||
joystick.SetDiscPov(-1, id, 4);
|
||||
};
|
||||
};
|
||||
|
||||
System.Threading.Thread.Sleep(20);
|
||||
X += 150; if (X > maxval) X = 0;
|
||||
Y += 250; if (Y > maxval) Y = 0;
|
||||
Z += 350; if (Z > maxval) Z = 0;
|
||||
XR += 220; if (XR > maxval) XR = 0;
|
||||
ZR += 200; if (ZR > maxval) ZR = 0;
|
||||
count++;
|
||||
|
||||
if (count > 640)
|
||||
count = 0;
|
||||
|
||||
} // While (Robust)
|
||||
|
||||
#endif // ROBUST
|
||||
#if EFFICIENT
|
||||
|
||||
byte[] pov = new byte[4];
|
||||
|
||||
while (true)
|
||||
{
|
||||
iReport.bDevice = (byte)id;
|
||||
iReport.AxisX = X;
|
||||
iReport.AxisY = Y;
|
||||
iReport.AxisZ = Z;
|
||||
iReport.AxisZRot = ZR;
|
||||
iReport.AxisXRot = XR;
|
||||
|
||||
// Set buttons one by one
|
||||
iReport.Buttons = (uint)(0x1 << (int)(count / 20));
|
||||
|
||||
if (ContPovNumber>0)
|
||||
{
|
||||
// Make Continuous POV Hat spin
|
||||
iReport.bHats = (count*70);
|
||||
iReport.bHatsEx1 = (count*70)+3000;
|
||||
iReport.bHatsEx2 = (count*70)+5000;
|
||||
iReport.bHatsEx3 = 15000 - (count*70);
|
||||
if ((count*70) > 36000)
|
||||
{
|
||||
iReport.bHats = 0xFFFFFFFF; // Neutral state
|
||||
iReport.bHatsEx1 = 0xFFFFFFFF; // Neutral state
|
||||
iReport.bHatsEx2 = 0xFFFFFFFF; // Neutral state
|
||||
iReport.bHatsEx3 = 0xFFFFFFFF; // Neutral state
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
// Make 5-position POV Hat spin
|
||||
|
||||
pov[0] = (byte)(((count / 20) + 0)%4);
|
||||
pov[1] = (byte)(((count / 20) + 1) % 4);
|
||||
pov[2] = (byte)(((count / 20) + 2) % 4);
|
||||
pov[3] = (byte)(((count / 20) + 3) % 4);
|
||||
|
||||
iReport.bHats = (uint)(pov[3]<<12) | (uint)(pov[2]<<8) | (uint)(pov[1]<<4) | (uint)pov[0];
|
||||
if ((count) > 550)
|
||||
iReport.bHats = 0xFFFFFFFF; // Neutral state
|
||||
};
|
||||
|
||||
/*** Feed the driver with the position packet - is fails then wait for input then try to re-acquire device ***/
|
||||
if (!joystick.UpdateVJD(id, ref iReport))
|
||||
{
|
||||
Console.WriteLine("Feeding vJoy device number {0} failed - try to enable device then press enter\n", id);
|
||||
Console.ReadKey(true);
|
||||
joystick.AcquireVJD(id);
|
||||
}
|
||||
|
||||
System.Threading.Thread.Sleep(20);
|
||||
count++;
|
||||
if (count > 640) count = 0;
|
||||
|
||||
X += 150; if (X > maxval) X = 0;
|
||||
Y += 250; if (Y > maxval) Y = 0;
|
||||
Z += 350; if (Z > maxval) Z = 0;
|
||||
XR += 220; if (XR > maxval) XR = 0;
|
||||
ZR += 200; if (ZR > maxval) ZR = 0;
|
||||
|
||||
}; // While
|
||||
|
||||
#endif // EFFICIENT
|
||||
|
||||
} // Main
|
||||
} // class Program
|
||||
} // namespace FeederDemoCS
|
|
@ -1,36 +0,0 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("FeederDemoCS")]
|
||||
[assembly: AssemblyDescription("C# Demo Feeder")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("FeederDemoCS")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2014")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("05b30ba2-93f6-465e-bc70-0e01acc9ea17")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("2.0.1.0")]
|
||||
[assembly: AssemblyFileVersion("2.0.1.0")]
|
Binary file not shown.
Binary file not shown.
|
@ -1,283 +0,0 @@
|
|||
/*++
|
||||
|
||||
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
|
||||
#undef PPJOY_MODE // Comment-out for compatibility mode
|
||||
|
||||
#ifdef PPJOY_MODE
|
||||
#include "PPJIoctl.h"
|
||||
#endif
|
||||
|
||||
#include <INITGUID.H> // 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);
|
||||
#ifdef PPJOY_MODE
|
||||
#define DEVICENAME_STRING "PPJoyIOCTL1"
|
||||
#else
|
||||
#define DEVICENAME_STRING "vJoy"
|
||||
#endif
|
||||
#define NTDEVICE_NAME_STRING "\\Device\\"DEVICENAME_STRING
|
||||
#define SYMBOLIC_NAME_STRING "\\DosDevices\\"DEVICENAME_STRING
|
||||
#define DOS_FILE_NAME "\\\\.\\"DEVICENAME_STRING
|
||||
#define VJOY_INTERFACE L"Device_"
|
||||
|
||||
// Version parts
|
||||
#define VER_X_ 0
|
||||
#define VER_H_ 2
|
||||
#define VER_M_ 1
|
||||
#define VER_L_ 8
|
||||
|
||||
#define STRINGIFY_1(x) #x
|
||||
#define STRINGIFY(x) STRINGIFY_1(x)
|
||||
#define PASTE(x, y) x##y
|
||||
#define MAKEWIDE(x) PASTE(L,x)
|
||||
|
||||
// Device Attributes
|
||||
//
|
||||
#define VENDOR_N_ID 0x1234
|
||||
#define PRODUCT_N_ID 0xBEAD
|
||||
#define VERSION_N (VER_L_ + 0x10*VER_M_ + 0x100*VER_H_ + 0x1000*VER_X_)
|
||||
|
||||
// Device Strings
|
||||
//
|
||||
#define VENDOR_STR_ID L"Shaul Eizikovich"
|
||||
#define PRODUCT_STR_ID L"vJoy - Virtual Joystick"
|
||||
#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 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
|
||||
#define F_IS_DRV_FFB_CAP 0x918
|
||||
#define F_IS_DRV_FFB_EN 0x919
|
||||
#define F_GET_DRV_DEV_MAX 0x91A
|
||||
#define F_GET_DRV_DEV_EN 0x91B
|
||||
#define F_IS_DEV_FFB_START 0x91C
|
||||
#define F_GET_DEV_STAT 0x91D
|
||||
#define F_GET_DRV_INFO 0x91E
|
||||
#define F_RESET_DEV 0x91F
|
||||
#define F_GET_POSITIONS 0x920
|
||||
|
||||
// IO Device Control codes;
|
||||
#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_POSITIONS CTL_CODE (FILE_DEVICE_UNKNOWN, F_GET_POSITIONS, METHOD_BUFFERED, FILE_READ_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)
|
||||
#define IS_DRV_FFB_CAP CTL_CODE (FILE_DEVICE_UNKNOWN, F_IS_DRV_FFB_CAP, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define IS_DRV_FFB_EN CTL_CODE (FILE_DEVICE_UNKNOWN, F_IS_DRV_FFB_EN, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define GET_DRV_DEV_MAX CTL_CODE (FILE_DEVICE_UNKNOWN, F_GET_DRV_DEV_MAX, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define GET_DRV_DEV_EN CTL_CODE (FILE_DEVICE_UNKNOWN, F_GET_DRV_DEV_EN, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define IS_DEV_FFB_START CTL_CODE (FILE_DEVICE_UNKNOWN, F_IS_DEV_FFB_START, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define GET_DEV_STAT CTL_CODE (FILE_DEVICE_UNKNOWN, F_GET_DEV_STAT, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define GET_DRV_INFO CTL_CODE (FILE_DEVICE_UNKNOWN, F_GET_DRV_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
#define RESET_DEV CTL_CODE (FILE_DEVICE_UNKNOWN, F_RESET_DEV, METHOD_BUFFERED, FILE_WRITE_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;
|
||||
//
|
||||
// sizeof (struct _HID_DEVICE_ATTRIBUTES)
|
||||
//
|
||||
|
||||
//
|
||||
// Vendor ids of this hid device
|
||||
//
|
||||
USHORT VendorID;
|
||||
USHORT ProductID;
|
||||
USHORT VersionNumber;
|
||||
USHORT Reserved[11];
|
||||
|
||||
} HID_DEVICE_ATTRIBUTES, * PHID_DEVICE_ATTRIBUTES;
|
||||
#endif
|
||||
|
||||
// Device Type
|
||||
//enum DevType { vJoy, vXbox };
|
||||
|
||||
// Error levels for status report
|
||||
enum ERRLEVEL {INFO, WARN, ERR, FATAL, APP};
|
||||
// Status report function prototype
|
||||
#ifdef WINAPI
|
||||
typedef BOOL (WINAPI *StatusMessageFunc)(void * output, TCHAR * buffer, enum ERRLEVEL level);
|
||||
#endif
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/////////////////////// Joystick Position ///////////////////////
|
||||
//
|
||||
// This structure holds data that is passed to the device from
|
||||
// an external application such as SmartPropoPlus.
|
||||
//
|
||||
// Usage example:
|
||||
// JOYSTICK_POSITION iReport;
|
||||
// :
|
||||
// DeviceIoControl (hDevice, 100, &iReport, sizeof(HID_INPUT_REPORT), NULL, 0, &bytes, NULL)
|
||||
typedef struct _JOYSTICK_POSITION
|
||||
{
|
||||
BYTE bDevice; // Index of device. 1-based.
|
||||
LONG wThrottle;
|
||||
LONG wRudder;
|
||||
LONG wAileron;
|
||||
LONG wAxisX;
|
||||
LONG wAxisY;
|
||||
LONG wAxisZ;
|
||||
LONG wAxisXRot;
|
||||
LONG wAxisYRot;
|
||||
LONG wAxisZRot;
|
||||
LONG wSlider;
|
||||
LONG wDial;
|
||||
LONG wWheel;
|
||||
LONG wAxisVX;
|
||||
LONG wAxisVY;
|
||||
LONG wAxisVZ;
|
||||
LONG wAxisVBRX;
|
||||
LONG wAxisVBRY;
|
||||
LONG wAxisVBRZ;
|
||||
LONG lButtons; // 32 buttons: 0x00000001 means button1 is pressed, 0x80000000 -> button32 is pressed
|
||||
DWORD bHats; // Lower 4 bits: HAT switch or 16-bit of continuous HAT switch
|
||||
DWORD bHatsEx1; // 16-bit of continuous HAT switch
|
||||
DWORD bHatsEx2; // 16-bit of continuous HAT switch
|
||||
DWORD bHatsEx3; // 16-bit of continuous HAT switch
|
||||
} JOYSTICK_POSITION, *PJOYSTICK_POSITION;
|
||||
|
||||
// Superset of JOYSTICK_POSITION
|
||||
// Extension of JOYSTICK_POSITION with Buttons 33-128 appended to the end of the structure.
|
||||
typedef struct _JOYSTICK_POSITION_V2
|
||||
{
|
||||
/// JOYSTICK_POSITION
|
||||
BYTE bDevice; // Index of device. 1-based.
|
||||
LONG wThrottle;
|
||||
LONG wRudder;
|
||||
LONG wAileron;
|
||||
LONG wAxisX;
|
||||
LONG wAxisY;
|
||||
LONG wAxisZ;
|
||||
LONG wAxisXRot;
|
||||
LONG wAxisYRot;
|
||||
LONG wAxisZRot;
|
||||
LONG wSlider;
|
||||
LONG wDial;
|
||||
LONG wWheel;
|
||||
LONG wAxisVX;
|
||||
LONG wAxisVY;
|
||||
LONG wAxisVZ;
|
||||
LONG wAxisVBRX;
|
||||
LONG wAxisVBRY;
|
||||
LONG wAxisVBRZ;
|
||||
LONG lButtons; // 32 buttons: 0x00000001 means button1 is pressed, 0x80000000 -> button32 is pressed
|
||||
DWORD bHats; // Lower 4 bits: HAT switch or 16-bit of continuous HAT switch
|
||||
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
|
||||
} JOYSTICK_POSITION_V2, *PJOYSTICK_POSITION_V2;
|
||||
|
||||
|
||||
// HID Descriptor definitions - Axes
|
||||
#define HID_USAGE_X 0x30
|
||||
#define HID_USAGE_Y 0x31
|
||||
#define HID_USAGE_Z 0x32
|
||||
#define HID_USAGE_RX 0x33
|
||||
#define HID_USAGE_RY 0x34
|
||||
#define HID_USAGE_RZ 0x35
|
||||
#define HID_USAGE_SL0 0x36
|
||||
#define HID_USAGE_SL1 0x37
|
||||
#define HID_USAGE_WHL 0x38
|
||||
#define HID_USAGE_POV 0x39
|
||||
|
||||
// HID Descriptor definitions - FFB Effects
|
||||
#define HID_USAGE_CONST 0x26 // Usage ET Constant Force
|
||||
#define HID_USAGE_RAMP 0x27 // Usage ET Ramp
|
||||
#define HID_USAGE_SQUR 0x30 // Usage ET Square
|
||||
#define HID_USAGE_SINE 0x31 // Usage ET Sine
|
||||
#define HID_USAGE_TRNG 0x32 // Usage ET Triangle
|
||||
#define HID_USAGE_STUP 0x33 // Usage ET Sawtooth Up
|
||||
#define HID_USAGE_STDN 0x34 // Usage ET Sawtooth Down
|
||||
#define HID_USAGE_SPRNG 0x40 // Usage ET Spring
|
||||
#define HID_USAGE_DMPR 0x41 // Usage ET Damper
|
||||
#define HID_USAGE_INRT 0x42 // Usage ET Inertia
|
||||
#define HID_USAGE_FRIC 0x43 // Usage ET Friction
|
||||
|
||||
|
||||
// HID Descriptor definitions - FFB Report IDs
|
||||
#define HID_ID_STATE 0x02 // Usage PID State report
|
||||
#define HID_ID_EFFREP 0x01 // Usage Set Effect Report
|
||||
#define HID_ID_ENVREP 0x02 // Usage Set Envelope Report
|
||||
#define HID_ID_CONDREP 0x03 // Usage Set Condition Report
|
||||
#define HID_ID_PRIDREP 0x04 // Usage Set Periodic Report
|
||||
#define HID_ID_CONSTREP 0x05 // Usage Set Constant Force Report
|
||||
#define HID_ID_RAMPREP 0x06 // Usage Set Ramp Force Report
|
||||
#define HID_ID_CSTMREP 0x07 // Usage Custom Force Data Report
|
||||
#define HID_ID_SMPLREP 0x08 // Usage Download Force Sample
|
||||
#define HID_ID_EFOPREP 0x0A // Usage Effect Operation Report
|
||||
#define HID_ID_BLKFRREP 0x0B // Usage PID Block Free Report
|
||||
#define HID_ID_CTRLREP 0x0C // Usage PID Device Control
|
||||
#define HID_ID_GAINREP 0x0D // Usage Device Gain Report
|
||||
#define HID_ID_SETCREP 0x0E // Usage Set Custom Force Report
|
||||
#define HID_ID_NEWEFREP 0x01 // Usage Create New Effect Report
|
||||
#define HID_ID_BLKLDREP 0x02 // Usage Block Load Report
|
||||
#define HID_ID_POOLREP 0x03 // Usage PID Pool Report
|
||||
|
||||
#endif
|
|
@ -1,366 +0,0 @@
|
|||
// The following ifdef block is the standard way of creating macros which make exporting
|
||||
// from a DLL simpler. All files within this DLL are compiled with the VJOYINTERFACE_EXPORTS
|
||||
// symbol defined on the command line. this symbol should not be defined on any project
|
||||
// that uses this DLL. This way any other project whose source files include this file see
|
||||
// VJOYINTERFACE_API functions as being imported from a DLL, whereas this DLL sees symbols
|
||||
// defined with this macro as being exported.
|
||||
#ifdef VJOYINTERFACE_EXPORTS
|
||||
#define VJOYINTERFACE_API __declspec(dllexport)
|
||||
#else
|
||||
#define VJOYINTERFACE_API __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
#ifdef STATIC
|
||||
#undef VJOYINTERFACE_API
|
||||
#define VJOYINTERFACE_API
|
||||
#endif
|
||||
|
||||
///////////////////////////// vJoy device (collection) status ////////////////////////////////////////////
|
||||
#ifndef VJDSTAT
|
||||
#define VJDSTAT
|
||||
enum VjdStat /* Declares an enumeration data type */
|
||||
{
|
||||
VJD_STAT_OWN, // The vJoy Device is owned by this application.
|
||||
VJD_STAT_FREE, // The vJoy Device is NOT owned by any application (including this one).
|
||||
VJD_STAT_BUSY, // The vJoy Device is owned by another application. It cannot be acquired by this application.
|
||||
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
|
||||
#define BAD_DEV_STAT -11
|
||||
#define NO_DEV_EXIST -12
|
||||
#define NO_FILE_EXIST -13
|
||||
|
||||
/* Registry Constants */
|
||||
#define REG_PARAM L"SYSTEM\\CurrentControlSet\\services\\vjoy\\Parameters"
|
||||
#define REG_PARAM_DEV0 L"SYSTEM\\CurrentControlSet\\services\\vjoy\\Parameters\\Device0"
|
||||
#define REG_PARAM_DEV L"SYSTEM\\CurrentControlSet\\services\\vjoy\\Parameters\\Device"
|
||||
#define REG_DEVICE L"Device"
|
||||
#define REG_INIT L"Init"
|
||||
#define BTN_INIT L"BTNS"
|
||||
|
||||
/* Environment Variables */
|
||||
#define INTERFACE_LOG_LEVEL "VJOYINTERFACELOGLEVEL"
|
||||
#define INTERFACE_LOG_FILE "VJOYINTERFACELOGFILE"
|
||||
#define INTERFACE_DEF_LOG_FILE "vJoyInterface.log"
|
||||
|
||||
/* Compatibility definitions */
|
||||
#define FFB_EFF_CONST FFB_EFF_REPORT
|
||||
#define PFFB_EFF_CONST PFFB_EFF_REPORT
|
||||
#define Ffb_h_Eff_Const Ffb_h_Eff_Report
|
||||
|
||||
// Device Axis/POVs/Buttons
|
||||
struct DEVCTRLS {
|
||||
BOOL Init;
|
||||
BOOL Rudder;
|
||||
BOOL Aileron;
|
||||
BOOL AxisX;
|
||||
BOOL AxisY;
|
||||
BOOL AxisZ;
|
||||
BOOL AxisXRot;
|
||||
BOOL AxisYRot;
|
||||
BOOL AxisZRot;
|
||||
BOOL Slider;
|
||||
BOOL Dial;
|
||||
BOOL Wheel;
|
||||
BOOL AxisVX;
|
||||
BOOL AxisVY;
|
||||
BOOL AxisVZ;
|
||||
BOOL AxisVBRX;
|
||||
BOOL AxisVBRY;
|
||||
BOOL AxisVBRZ;
|
||||
INT nButtons;
|
||||
INT nDescHats;
|
||||
INT nContHats;
|
||||
};
|
||||
|
||||
struct DeviceStat {
|
||||
HANDLE h; // Handle to the PDO interface that represents the virtual device
|
||||
VjdStat stat; // Status of the device
|
||||
JOYSTICK_POSITION_V2 position; // Current Position of the device
|
||||
HDEVNOTIFY hDeviceNotifyHandle; // Device Notification Handle
|
||||
DEVCTRLS DeviceControls; // Structure Holding the data about the device's controls
|
||||
PVOID pPreParsedData; // structure contains a top-level collection's preparsed data.
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
|
||||
enum FFBEType // FFB Effect Type
|
||||
{
|
||||
|
||||
// Effect Type
|
||||
ET_NONE = 0, // No Force
|
||||
ET_CONST = 1, // Constant Force
|
||||
ET_RAMP = 2, // Ramp
|
||||
ET_SQR = 3, // Square
|
||||
ET_SINE = 4, // Sine
|
||||
ET_TRNGL = 5, // Triangle
|
||||
ET_STUP = 6, // Sawtooth Up
|
||||
ET_STDN = 7, // Sawtooth Down
|
||||
ET_SPRNG = 8, // Spring
|
||||
ET_DMPR = 9, // Damper
|
||||
ET_INRT = 10, // Inertia
|
||||
ET_FRCTN = 11, // Friction
|
||||
ET_CSTM = 12, // Custom Force Data
|
||||
};
|
||||
|
||||
enum FFBPType // FFB Packet Type
|
||||
{
|
||||
// Write
|
||||
PT_EFFREP = HID_ID_EFFREP, // Usage Set Effect Report
|
||||
PT_ENVREP = HID_ID_ENVREP, // Usage Set Envelope Report
|
||||
PT_CONDREP = HID_ID_CONDREP, // Usage Set Condition Report
|
||||
PT_PRIDREP = HID_ID_PRIDREP, // Usage Set Periodic Report
|
||||
PT_CONSTREP = HID_ID_CONSTREP, // Usage Set Constant Force Report
|
||||
PT_RAMPREP = HID_ID_RAMPREP, // Usage Set Ramp Force Report
|
||||
PT_CSTMREP = HID_ID_CSTMREP, // Usage Custom Force Data Report
|
||||
PT_SMPLREP = HID_ID_SMPLREP, // Usage Download Force Sample
|
||||
PT_EFOPREP = HID_ID_EFOPREP, // Usage Effect Operation Report
|
||||
PT_BLKFRREP = HID_ID_BLKFRREP, // Usage PID Block Free Report
|
||||
PT_CTRLREP = HID_ID_CTRLREP, // Usage PID Device Control
|
||||
PT_GAINREP = HID_ID_GAINREP, // Usage Device Gain Report
|
||||
PT_SETCREP = HID_ID_SETCREP, // Usage Set Custom Force Report
|
||||
|
||||
// Feature
|
||||
PT_NEWEFREP = HID_ID_NEWEFREP+0x10, // Usage Create New Effect Report
|
||||
PT_BLKLDREP = HID_ID_BLKLDREP+0x10, // Usage Block Load Report
|
||||
PT_POOLREP = HID_ID_POOLREP+0x10, // Usage PID Pool Report
|
||||
};
|
||||
|
||||
enum FFBOP
|
||||
{
|
||||
EFF_START = 1, // EFFECT START
|
||||
EFF_SOLO = 2, // EFFECT SOLO START
|
||||
EFF_STOP = 3, // EFFECT STOP
|
||||
};
|
||||
|
||||
enum FFB_CTRL
|
||||
{
|
||||
CTRL_ENACT = 1, // Enable all device actuators.
|
||||
CTRL_DISACT = 2, // Disable all the device actuators.
|
||||
CTRL_STOPALL = 3, // Stop All Effects Issues a stop on every running effect.
|
||||
CTRL_DEVRST = 4, // Device Reset– Clears any device paused condition, enables all actuators and clears all effects from memory.
|
||||
CTRL_DEVPAUSE = 5, // Device Pause– The all effects on the device are paused at the current time step.
|
||||
CTRL_DEVCONT = 6, // Device Continue– The all effects that running when the device was paused are restarted from their last time step.
|
||||
};
|
||||
|
||||
enum FFB_EFFECTS {
|
||||
Constant = 0x0001,
|
||||
Ramp = 0x0002,
|
||||
Square = 0x0004,
|
||||
Sine = 0x0008,
|
||||
Triangle = 0x0010,
|
||||
Sawtooth_Up = 0x0020,
|
||||
Sawtooth_Dn = 0x0040,
|
||||
Spring = 0x0080,
|
||||
Damper = 0x0100,
|
||||
Inertia = 0x0200,
|
||||
Friction = 0x0400,
|
||||
Custom = 0x0800,
|
||||
};
|
||||
|
||||
typedef struct _FFB_DATA {
|
||||
ULONG size;
|
||||
ULONG cmd;
|
||||
UCHAR *data;
|
||||
} FFB_DATA, * PFFB_DATA;
|
||||
|
||||
typedef struct _FFB_EFF_CONSTANT {
|
||||
BYTE EffectBlockIndex;
|
||||
LONG Magnitude; // Constant force magnitude: -10000 - 10000
|
||||
} FFB_EFF_CONSTANT, *PFFB_EFF_CONSTANT;
|
||||
|
||||
typedef struct _FFB_EFF_RAMP {
|
||||
BYTE EffectBlockIndex;
|
||||
LONG Start; // The Normalized magnitude at the start of the effect (-10000 - 10000)
|
||||
LONG End; // The Normalized magnitude at the end of the effect (-10000 - 10000)
|
||||
} FFB_EFF_RAMP, *PFFB_EFF_RAMP;
|
||||
|
||||
//typedef struct _FFB_EFF_CONST {
|
||||
typedef struct _FFB_EFF_REPORT {
|
||||
BYTE EffectBlockIndex;
|
||||
FFBEType EffectType;
|
||||
WORD Duration;// Value in milliseconds. 0xFFFF means infinite
|
||||
WORD TrigerRpt;
|
||||
WORD SamplePrd;
|
||||
BYTE Gain;
|
||||
BYTE TrigerBtn;
|
||||
BOOL Polar; // How to interpret force direction Polar (0-360°) or Cartesian (X,Y)
|
||||
union
|
||||
{
|
||||
BYTE Direction; // Polar direction: (0x00-0xFF correspond to 0-360°)
|
||||
BYTE DirX; // X direction: Positive values are To the right of the center (X); Negative are Two's complement
|
||||
};
|
||||
BYTE DirY; // Y direction: Positive values are below the center (Y); Negative are Two's complement
|
||||
} FFB_EFF_REPORT, *PFFB_EFF_REPORT;
|
||||
//} FFB_EFF_CONST, *PFFB_EFF_CONST;
|
||||
|
||||
typedef struct _FFB_EFF_OP {
|
||||
BYTE EffectBlockIndex;
|
||||
FFBOP EffectOp;
|
||||
BYTE LoopCount;
|
||||
} FFB_EFF_OP, *PFFB_EFF_OP;
|
||||
|
||||
typedef struct _FFB_EFF_PERIOD {
|
||||
BYTE EffectBlockIndex;
|
||||
DWORD Magnitude; // Range: 0 - 10000
|
||||
LONG Offset; // Range: –10000 - 10000
|
||||
DWORD Phase; // Range: 0 - 35999
|
||||
DWORD Period; // Range: 0 - 32767
|
||||
} FFB_EFF_PERIOD, *PFFB_EFF_PERIOD;
|
||||
|
||||
typedef struct _FFB_EFF_COND {
|
||||
BYTE EffectBlockIndex;
|
||||
BOOL isY;
|
||||
LONG CenterPointOffset; // CP Offset: Range -10000 - 10000
|
||||
LONG PosCoeff; // Positive Coefficient: Range -10000 - 10000
|
||||
LONG NegCoeff; // Negative Coefficient: Range -10000 - 10000
|
||||
DWORD PosSatur; // Positive Saturation: Range 0 – 10000
|
||||
DWORD NegSatur; // Negative Saturation: Range 0 – 10000
|
||||
LONG DeadBand; // Dead Band: : Range 0 – 1000
|
||||
} FFB_EFF_COND, *PFFB_EFF_COND;
|
||||
|
||||
typedef struct _FFB_EFF_ENVLP {
|
||||
BYTE EffectBlockIndex;
|
||||
DWORD AttackLevel; // The Normalized magnitude of the stating point: 0 - 10000
|
||||
DWORD FadeLevel; // The Normalized magnitude of the stopping point: 0 - 10000
|
||||
DWORD AttackTime; // Time of the attack: 0 - 4294967295
|
||||
DWORD FadeTime; // Time of the fading: 0 - 4294967295
|
||||
} FFB_EFF_ENVLP, *PFFB_EFF_ENVLP;
|
||||
|
||||
#define FFB_DATA_READY WM_USER+31
|
||||
|
||||
typedef void (CALLBACK *FfbGenCB)(PVOID, PVOID);
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef STATIC
|
||||
extern "C" {
|
||||
#else
|
||||
namespace vJoyNS {
|
||||
#endif
|
||||
///////////////////////////// vJoy device (collection) Control interface /////////////////////////////////
|
||||
/*
|
||||
These functions allow writing feeders and other applications that interface with vJoy
|
||||
It is assumed that only one vJoy top-device (= Raw PDO) exists.
|
||||
This top-level device can have up to 16 siblings (=top-level Reports/collections)
|
||||
Each sibling is refered to as a "vJoy Device" and is attributed a unique Report ID (Range: 1-16).
|
||||
|
||||
Naming convetion:
|
||||
VJD = vJoy Device
|
||||
rID = Report ID
|
||||
*/
|
||||
#pragma warning( push )
|
||||
#pragma warning( disable : 4995 )
|
||||
///// General driver data
|
||||
VJOYINTERFACE_API SHORT __cdecl GetvJoyVersion(void);
|
||||
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);
|
||||
VJOYINTERFACE_API BOOL __cdecl vJoyFfbCap(BOOL * Supported); // Is this version of vJoy capable of FFB?
|
||||
VJOYINTERFACE_API BOOL __cdecl GetvJoyMaxDevices(int * n); // What is the maximum possible number of vJoy devices
|
||||
VJOYINTERFACE_API BOOL __cdecl GetNumberExistingVJD(int * n); // What is the number of vJoy devices currently enabled
|
||||
|
||||
|
||||
///// vJoy Device properties
|
||||
VJOYINTERFACE_API int __cdecl GetVJDButtonNumber(UINT rID); // Get the number of buttons defined in the specified VDJ
|
||||
VJOYINTERFACE_API int __cdecl GetVJDDiscPovNumber(UINT rID); // Get the number of descrete-type POV hats defined in the specified VDJ
|
||||
VJOYINTERFACE_API int __cdecl GetVJDContPovNumber(UINT rID); // Get the number of descrete-type POV hats defined in the specified VDJ
|
||||
VJOYINTERFACE_API BOOL __cdecl GetVJDAxisExist(UINT rID, UINT Axis); // Test if given axis defined in the specified VDJ
|
||||
VJOYINTERFACE_API BOOL __cdecl GetVJDAxisMax(UINT rID, UINT Axis, LONG * Max); // Get logical Maximum value for a given axis defined in the specified VDJ
|
||||
VJOYINTERFACE_API BOOL __cdecl GetVJDAxisMin(UINT rID, UINT Axis, LONG * Min); // Get logical Minimum value for a given axis defined in the specified VDJ
|
||||
VJOYINTERFACE_API enum VjdStat __cdecl GetVJDStatus(UINT rID); // Get the status of the specified vJoy Device.
|
||||
// Added in 2.1.6
|
||||
VJOYINTERFACE_API BOOL __cdecl isVJDExists(UINT rID); // TRUE if the specified vJoy Device exists
|
||||
// Added in 2.1.8
|
||||
VJOYINTERFACE_API int __cdecl GetOwnerPid(UINT rID); // Reurn owner's Process ID if the specified vJoy Device exists
|
||||
|
||||
|
||||
///// Write access to vJoy Device - Basic
|
||||
VJOYINTERFACE_API BOOL __cdecl AcquireVJD(UINT rID); // Acquire the specified vJoy Device.
|
||||
VJOYINTERFACE_API VOID __cdecl RelinquishVJD(UINT rID); // Relinquish the specified vJoy Device.
|
||||
VJOYINTERFACE_API BOOL __cdecl UpdateVJD(UINT rID, PVOID pData); // Update the position data of the specified vJoy Device.
|
||||
|
||||
///// Write access to vJoy Device - Modifyiers
|
||||
// This group of functions modify the current value of the position data
|
||||
// They replace the need to create a structure of position data then call UpdateVJD
|
||||
|
||||
//// Reset functions
|
||||
VJOYINTERFACE_API BOOL __cdecl ResetVJD(UINT rID); // Reset all controls to predefined values in the specified VDJ
|
||||
VJOYINTERFACE_API VOID __cdecl ResetAll(void); // Reset all controls to predefined values in all VDJ
|
||||
VJOYINTERFACE_API BOOL __cdecl ResetButtons(UINT rID); // Reset all buttons (To 0) in the specified VDJ
|
||||
VJOYINTERFACE_API BOOL __cdecl ResetPovs(UINT rID); // Reset all POV Switches (To -1) in the specified VDJ
|
||||
|
||||
// Write data
|
||||
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
|
||||
|
||||
|
||||
#pragma region FFB Function prototypes
|
||||
// Force Feedback (FFB) functions
|
||||
VJOYINTERFACE_API FFBEType __cdecl FfbGetEffect(); // Returns effect serial number if active, 0 if inactive
|
||||
VJOYINTERFACE_API VOID __cdecl FfbRegisterGenCB(FfbGenCB cb, PVOID data);
|
||||
__declspec(deprecated("** FfbStart function was deprecated - you can remove it from your code **")) \
|
||||
VJOYINTERFACE_API BOOL __cdecl FfbStart(UINT rID); // Start the FFB queues of the specified vJoy Device.
|
||||
__declspec(deprecated("** FfbStop function was deprecated - you can remove it from your code **")) \
|
||||
VJOYINTERFACE_API VOID __cdecl FfbStop(UINT rID); // Stop the FFB queues of the specified vJoy Device.
|
||||
|
||||
// Added in 2.1.6
|
||||
VJOYINTERFACE_API BOOL __cdecl IsDeviceFfb(UINT rID);
|
||||
VJOYINTERFACE_API BOOL __cdecl IsDeviceFfbEffect(UINT rID, UINT Effect);
|
||||
|
||||
// Force Feedback (FFB) helper functions
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_DeviceID(const FFB_DATA * Packet, int *DeviceID);
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_Type(const FFB_DATA * Packet, FFBPType *Type);
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_Packet(const FFB_DATA * Packet, WORD *Type, int *DataSize, BYTE *Data[]);
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_EBI(const FFB_DATA * Packet, int *Index);
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_Eff_Report(const FFB_DATA * Packet, FFB_EFF_REPORT* Effect);
|
||||
__declspec(deprecated("** Ffb_h_Eff_Const function was deprecated - Use function Ffb_h_Eff_Report **")) \
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_Eff_Const(const FFB_DATA * Packet, FFB_EFF_CONST* Effect);
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_Eff_Ramp(const FFB_DATA * Packet, FFB_EFF_RAMP* RampEffect);
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_EffOp(const FFB_DATA * Packet, FFB_EFF_OP* Operation);
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_DevCtrl(const FFB_DATA * Packet, FFB_CTRL * Control);
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_Eff_Period(const FFB_DATA * Packet, FFB_EFF_PERIOD* Effect);
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_Eff_Cond(const FFB_DATA * Packet, FFB_EFF_COND* Condition);
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_DevGain(const FFB_DATA * Packet, BYTE * Gain);
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_Eff_Envlp(const FFB_DATA * Packet, FFB_EFF_ENVLP* Envelope);
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_EffNew(const FFB_DATA * Packet, FFBEType * Effect);
|
||||
|
||||
// Added in 2.1.6
|
||||
VJOYINTERFACE_API DWORD __cdecl Ffb_h_Eff_Constant(const FFB_DATA * Packet, FFB_EFF_CONSTANT * ConstantEffect);
|
||||
#pragma endregion
|
||||
|
||||
#pragma warning( pop )
|
||||
#ifndef STATIC
|
||||
} // extern "C"
|
||||
#else
|
||||
} // Namespace vJoyNS
|
||||
#endif
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,21 +0,0 @@
|
|||
// stdafx.h : include file for standard system include files,
|
||||
// or project specific include files that are used frequently, but
|
||||
// are changed infrequently
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdio.h>
|
||||
#include <tchar.h>
|
||||
|
||||
#include <windows.h>
|
||||
#include <basetyps.h>
|
||||
#include <cfgmgr32.h>
|
||||
#include <Setupapi.h>
|
||||
#include <strsafe.h>
|
||||
#include <Newdev.h>
|
||||
#include <INITGUID.H>
|
||||
|
||||
|
||||
|
||||
// TODO: reference additional headers your program requires here
|
|
@ -1,571 +0,0 @@
|
|||
// vJoyClient.cpp : Simple feeder application with a FFB demo
|
||||
//
|
||||
|
||||
|
||||
// Monitor Force Feedback (FFB) vJoy device
|
||||
#include "stdafx.h"
|
||||
//#include "Devioctl.h"
|
||||
#include "public.h"
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "vjoyinterface.h"
|
||||
#include "Math.h"
|
||||
|
||||
// Default device ID (Used when ID not specified)
|
||||
#define DEV_ID 1
|
||||
|
||||
// Prototypes
|
||||
void CALLBACK FfbFunction(PVOID data);
|
||||
void CALLBACK FfbFunction1(PVOID cb, PVOID data);
|
||||
|
||||
BOOL PacketType2Str(FFBPType Type, LPTSTR Str);
|
||||
BOOL EffectType2Str(FFBEType Ctrl, LPTSTR Str);
|
||||
BOOL DevCtrl2Str(FFB_CTRL Type, LPTSTR Str);
|
||||
BOOL EffectOpStr(FFBOP Op, LPTSTR Str);
|
||||
int Polar2Deg(BYTE Polar);
|
||||
int Byte2Percent(BYTE InByte);
|
||||
int TwosCompByte2Int(BYTE in);
|
||||
|
||||
|
||||
int ffb_direction = 0;
|
||||
int ffb_strenght = 0;
|
||||
int serial_result = 0;
|
||||
|
||||
|
||||
JOYSTICK_POSITION_V2 iReport; // The structure that holds the full position data
|
||||
|
||||
int
|
||||
__cdecl
|
||||
_tmain(int argc, _TCHAR* argv[])
|
||||
{
|
||||
int stat = 0;
|
||||
UINT DevID = DEV_ID;
|
||||
USHORT X = 0;
|
||||
USHORT Y = 0;
|
||||
USHORT Z = 0;
|
||||
LONG Btns = 0;
|
||||
|
||||
|
||||
PVOID pPositionMessage;
|
||||
UINT IoCode = LOAD_POSITIONS;
|
||||
UINT IoSize = sizeof(JOYSTICK_POSITION);
|
||||
// HID_DEVICE_ATTRIBUTES attrib;
|
||||
BYTE id = 1;
|
||||
UINT iInterface = 1;
|
||||
|
||||
// Define the effect names
|
||||
static FFBEType FfbEffect= (FFBEType)-1;
|
||||
LPCTSTR FfbEffectName[] =
|
||||
{"NONE", "Constant Force", "Ramp", "Square", "Sine", "Triangle", "Sawtooth Up",\
|
||||
"Sawtooth Down", "Spring", "Damper", "Inertia", "Friction", "Custom Force"};
|
||||
|
||||
// Set the target Joystick - get it from the command-line
|
||||
if (argc>1)
|
||||
DevID = _tstoi(argv[1]);
|
||||
|
||||
// Get the driver attributes (Vendor ID, Product ID, Version Number)
|
||||
if (!vJoyEnabled())
|
||||
{
|
||||
_tprintf("Function vJoyEnabled Failed - make sure that vJoy is installed and enabled\n");
|
||||
int dummy = getchar();
|
||||
stat = - 2;
|
||||
goto Exit;
|
||||
}
|
||||
else
|
||||
{
|
||||
wprintf(L"Vendor: %s\nProduct :%s\nVersion Number:%s\n", static_cast<TCHAR *> (GetvJoyManufacturerString()), static_cast<TCHAR *>(GetvJoyProductString()), static_cast<TCHAR *>(GetvJoySerialNumberString()));
|
||||
};
|
||||
|
||||
// Get the status of the vJoy device before trying to acquire it
|
||||
VjdStat status = GetVJDStatus(DevID);
|
||||
|
||||
switch (status)
|
||||
{
|
||||
case VJD_STAT_OWN:
|
||||
_tprintf("vJoy device %d is already owned by this feeder\n", DevID);
|
||||
break;
|
||||
case VJD_STAT_FREE:
|
||||
_tprintf("vJoy device %d is free\n", DevID);
|
||||
break;
|
||||
case VJD_STAT_BUSY:
|
||||
_tprintf("vJoy device %d is already owned by another feeder\nCannot continue\n", DevID);
|
||||
return -3;
|
||||
case VJD_STAT_MISS:
|
||||
_tprintf("vJoy device %d is not installed or disabled\nCannot continue\n", DevID);
|
||||
return -4;
|
||||
default:
|
||||
_tprintf("vJoy device %d general error\nCannot continue\n", DevID);
|
||||
return -1;
|
||||
};
|
||||
|
||||
// Acquire the vJoy device
|
||||
if (!AcquireVJD(DevID))
|
||||
{
|
||||
_tprintf("Failed to acquire vJoy device number %d.\n", DevID);
|
||||
int dummy = getchar();
|
||||
stat = -1;
|
||||
goto Exit;
|
||||
}
|
||||
else
|
||||
_tprintf("Acquired device number %d - OK\n", DevID);
|
||||
|
||||
|
||||
|
||||
// Start FFB
|
||||
#if 1
|
||||
BOOL Ffbstarted = FfbStart(DevID);
|
||||
if (!Ffbstarted)
|
||||
{
|
||||
_tprintf("Failed to start FFB on vJoy device number %d.\n", DevID);
|
||||
int dummy = getchar();
|
||||
stat = -3;
|
||||
goto Exit;
|
||||
}
|
||||
else
|
||||
_tprintf("Started FFB on vJoy device number %d - OK\n", DevID);
|
||||
|
||||
#endif // 1
|
||||
|
||||
// Register Generic callback function
|
||||
// At this point you instruct the Receptor which callback function to call with every FFB packet it receives
|
||||
// It is the role of the designer to register the right FFB callback function
|
||||
FfbRegisterGenCB(FfbFunction1, NULL);
|
||||
|
||||
|
||||
|
||||
|
||||
// Start endless loop
|
||||
// The loop injects position data to the vJoy device
|
||||
// If it fails it let's the user try again
|
||||
//
|
||||
// FFB Note:
|
||||
// All FFB activity is performed in a separate thread created when registered the callback function
|
||||
while (1)
|
||||
{
|
||||
|
||||
// Set destenition vJoy device
|
||||
id = (BYTE)DevID;
|
||||
iReport.bDevice = id;
|
||||
|
||||
// Set position data of 3 first axes
|
||||
if (Z>35000) Z=0;
|
||||
Z += 200;
|
||||
iReport.wAxisZ = Z;
|
||||
iReport.wAxisX = 32000-Z;
|
||||
iReport.wAxisY = Z/2+7000;
|
||||
|
||||
// Set position data of first 8 buttons
|
||||
Btns = 1<<(Z/4000);
|
||||
iReport.lButtons = Btns;
|
||||
|
||||
// Send position data to vJoy device
|
||||
pPositionMessage = (PVOID)(&iReport);
|
||||
if (!UpdateVJD(DevID, pPositionMessage))
|
||||
{
|
||||
printf("Feeding vJoy device number %d failed - try to enable device then press enter\n", DevID);
|
||||
getchar();
|
||||
AcquireVJD(DevID);
|
||||
}
|
||||
Sleep(2);
|
||||
}
|
||||
|
||||
Exit:
|
||||
RelinquishVJD(DevID);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// Generic callback function
|
||||
void CALLBACK FfbFunction(PVOID data)
|
||||
{
|
||||
FFB_DATA * FfbData = (FFB_DATA *)data;
|
||||
int size = FfbData->size;
|
||||
_tprintf("\nFFB Size %d\n", size);
|
||||
|
||||
_tprintf("Cmd:%08.8X ", FfbData->cmd);
|
||||
_tprintf("ID:%02.2X ", FfbData->data[0]);
|
||||
_tprintf("Size:%02.2d ", static_cast<int>(FfbData->size - 8));
|
||||
_tprintf(" - ");
|
||||
for (UINT i = 0; i < FfbData->size - 8; i++)
|
||||
_tprintf(" %02.2X", (UINT)FfbData->data);
|
||||
_tprintf("\n");
|
||||
}
|
||||
|
||||
void CALLBACK FfbFunction1(PVOID data, PVOID userdata)
|
||||
{
|
||||
// Packet Header
|
||||
_tprintf("\n ============= FFB Packet size Size %d =============\n", static_cast<int>(((FFB_DATA *)data)->size));
|
||||
|
||||
/////// Packet Device ID, and Type Block Index (if exists)
|
||||
#pragma region Packet Device ID, and Type Block Index
|
||||
int DeviceID, BlockIndex;
|
||||
FFBPType Type;
|
||||
TCHAR TypeStr[100];
|
||||
|
||||
if (ERROR_SUCCESS == Ffb_h_DeviceID((FFB_DATA *)data, &DeviceID))
|
||||
_tprintf("\n > Device ID: %d", DeviceID);
|
||||
if (ERROR_SUCCESS == Ffb_h_Type((FFB_DATA *)data, &Type))
|
||||
{
|
||||
if (!PacketType2Str(Type, TypeStr))
|
||||
_tprintf("\n > Packet Type: %d", Type);
|
||||
else
|
||||
_tprintf("\n > Packet Type: %s", TypeStr);
|
||||
|
||||
}
|
||||
if (ERROR_SUCCESS == Ffb_h_EBI((FFB_DATA *)data, &BlockIndex))
|
||||
_tprintf("\n > Effect Block Index: %d", BlockIndex);
|
||||
#pragma endregion
|
||||
|
||||
|
||||
/////// Effect Report
|
||||
#pragma region Effect Report
|
||||
FFB_EFF_CONST Effect;
|
||||
if (ERROR_SUCCESS == Ffb_h_Eff_Report((FFB_DATA *)data, &Effect))
|
||||
{
|
||||
if (!EffectType2Str(Effect.EffectType, TypeStr))
|
||||
_tprintf("\n >> Effect Report: %02x", Effect.EffectType);
|
||||
else
|
||||
_tprintf("\n >> Effect Report: %s", TypeStr);
|
||||
|
||||
if (Effect.Polar)
|
||||
{
|
||||
_tprintf("\n >> Direction: %d deg (%02x)", Polar2Deg(Effect.Direction), Effect.Direction);
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
_tprintf("\n >> X Direction: %02x", Effect.DirX);
|
||||
_tprintf("\n >> Y Direction: %02x", Effect.DirY);
|
||||
};
|
||||
|
||||
if (Effect.Duration == 0xFFFF)
|
||||
_tprintf("\n >> Duration: Infinit");
|
||||
else
|
||||
_tprintf("\n >> Duration: %d MilliSec", static_cast<int>(Effect.Duration));
|
||||
|
||||
if (Effect.TrigerRpt == 0xFFFF)
|
||||
_tprintf("\n >> Trigger Repeat: Infinit");
|
||||
else
|
||||
_tprintf("\n >> Trigger Repeat: %d", static_cast<int>(Effect.TrigerRpt));
|
||||
|
||||
if (Effect.SamplePrd == 0xFFFF)
|
||||
_tprintf("\n >> Sample Period: Infinit");
|
||||
else
|
||||
_tprintf("\n >> Sample Period: %d", static_cast<int>(Effect.SamplePrd));
|
||||
|
||||
|
||||
_tprintf("\n >> Gain: %d%%", Byte2Percent(Effect.Gain));
|
||||
|
||||
};
|
||||
#pragma endregion
|
||||
#pragma region PID Device Control
|
||||
FFB_CTRL Control;
|
||||
TCHAR CtrlStr[100];
|
||||
if (ERROR_SUCCESS == Ffb_h_DevCtrl((FFB_DATA *)data, &Control) && DevCtrl2Str(Control, CtrlStr))
|
||||
_tprintf("\n >> PID Device Control: %s", CtrlStr);
|
||||
|
||||
#pragma endregion
|
||||
#pragma region Effect Operation
|
||||
FFB_EFF_OP Operation;
|
||||
TCHAR EffOpStr[100];
|
||||
if (ERROR_SUCCESS == Ffb_h_EffOp((FFB_DATA *)data, &Operation) && EffectOpStr(Operation.EffectOp, EffOpStr))
|
||||
{
|
||||
_tprintf("\n >> Effect Operation: %s", EffOpStr);
|
||||
if (Operation.LoopCount == 0xFF)
|
||||
_tprintf("\n >> Loop until stopped");
|
||||
else
|
||||
_tprintf("\n >> Loop %d times", static_cast<int>(Operation.LoopCount));
|
||||
|
||||
};
|
||||
#pragma endregion
|
||||
#pragma region Global Device Gain
|
||||
BYTE Gain;
|
||||
if (ERROR_SUCCESS == Ffb_h_DevGain((FFB_DATA *)data, &Gain))
|
||||
_tprintf("\n >> Global Device Gain: %d", Byte2Percent(Gain));
|
||||
|
||||
#pragma endregion
|
||||
#pragma region Condition
|
||||
FFB_EFF_COND Condition;
|
||||
if (ERROR_SUCCESS == Ffb_h_Eff_Cond((FFB_DATA *)data, &Condition))
|
||||
{
|
||||
if (Condition.isY)
|
||||
_tprintf("\n >> Y Axis");
|
||||
else
|
||||
_tprintf("\n >> X Axis");
|
||||
_tprintf("\n >> Center Point Offset: %d", TwosCompByte2Int(Condition.CenterPointOffset)*10000/127);
|
||||
_tprintf("\n >> Positive Coefficient: %d", TwosCompByte2Int(Condition.PosCoeff)*10000/127);
|
||||
_tprintf("\n >> Negative Coefficient: %d", TwosCompByte2Int(Condition.NegCoeff)*10000/127);
|
||||
_tprintf("\n >> Positive Saturation: %d", Condition.PosSatur*10000/255);
|
||||
_tprintf("\n >> Negative Saturation: %d", Condition.NegSatur*10000/255);
|
||||
_tprintf("\n >> Dead Band: %d", Condition.DeadBand*10000/255);
|
||||
}
|
||||
#pragma endregion
|
||||
#pragma region Envelope
|
||||
FFB_EFF_ENVLP Envelope;
|
||||
if (ERROR_SUCCESS == Ffb_h_Eff_Envlp((FFB_DATA *)data, &Envelope))
|
||||
{
|
||||
_tprintf("\n >> Attack Level: %d", Envelope.AttackLevel*10000/255);
|
||||
_tprintf("\n >> Fade Level: %d", Envelope.FadeLevel*10000/255);
|
||||
_tprintf("\n >> Attack Time: %d", static_cast<int>(Envelope.AttackTime));
|
||||
_tprintf("\n >> Fade Time: %d", static_cast<int>(Envelope.FadeTime));
|
||||
};
|
||||
|
||||
#pragma endregion
|
||||
#pragma region Periodic
|
||||
FFB_EFF_PERIOD EffPrd;
|
||||
if (ERROR_SUCCESS == Ffb_h_Eff_Period((FFB_DATA *)data, &EffPrd))
|
||||
{
|
||||
_tprintf("\n >> Magnitude: %d", EffPrd.Magnitude * 10000 / 255);
|
||||
_tprintf("\n >> Offset: %d", TwosCompByte2Int(EffPrd.Offset) * 10000 / 127);
|
||||
_tprintf("\n >> Phase: %d", EffPrd.Phase * 3600 / 255);
|
||||
_tprintf("\n >> Period: %d", static_cast<int>(EffPrd.Period));
|
||||
};
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Effect Type
|
||||
FFBEType EffectType;
|
||||
if (ERROR_SUCCESS == Ffb_h_EffNew((FFB_DATA *)data, &EffectType))
|
||||
{
|
||||
if (EffectType2Str(EffectType, TypeStr))
|
||||
_tprintf("\n >> Effect Type: %s", TypeStr);
|
||||
else
|
||||
_tprintf("\n >> Effect Type: Unknown");
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Ramp Effect
|
||||
FFB_EFF_RAMP RampEffect;
|
||||
if (ERROR_SUCCESS == Ffb_h_Eff_Ramp((FFB_DATA *)data, &RampEffect))
|
||||
{
|
||||
_tprintf("\n >> Ramp Start: %d", TwosCompByte2Int(RampEffect.Start) * 10000 / 127);
|
||||
_tprintf("\n >> Ramp End: %d", TwosCompByte2Int(RampEffect.End) * 10000 / 127);
|
||||
};
|
||||
|
||||
#pragma endregion
|
||||
|
||||
_tprintf("\n");
|
||||
FfbFunction(data);
|
||||
_tprintf("\n ====================================================\n");
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Convert Packet type to String
|
||||
BOOL PacketType2Str(FFBPType Type, LPTSTR OutStr)
|
||||
{
|
||||
BOOL stat = TRUE;
|
||||
LPTSTR Str="";
|
||||
|
||||
switch (Type)
|
||||
{
|
||||
case PT_EFFREP:
|
||||
Str = "Effect Report";
|
||||
break;
|
||||
case PT_ENVREP:
|
||||
Str = "Envelope Report";
|
||||
break;
|
||||
case PT_CONDREP:
|
||||
Str = "Condition Report";
|
||||
break;
|
||||
case PT_PRIDREP:
|
||||
Str = "Periodic Report";
|
||||
break;
|
||||
case PT_CONSTREP:
|
||||
Str = "Constant Force Report";
|
||||
break;
|
||||
case PT_RAMPREP:
|
||||
Str = "Ramp Force Report";
|
||||
break;
|
||||
case PT_CSTMREP:
|
||||
Str = "Custom Force Data Report";
|
||||
break;
|
||||
case PT_SMPLREP:
|
||||
Str = "Download Force Sample";
|
||||
break;
|
||||
case PT_EFOPREP:
|
||||
Str = "Effect Operation Report";
|
||||
break;
|
||||
case PT_BLKFRREP:
|
||||
Str = "PID Block Free Report";
|
||||
break;
|
||||
case PT_CTRLREP:
|
||||
Str = "PID Device Contro";
|
||||
break;
|
||||
case PT_GAINREP:
|
||||
Str = "Device Gain Report";
|
||||
break;
|
||||
case PT_SETCREP:
|
||||
Str = "Set Custom Force Report";
|
||||
break;
|
||||
case PT_NEWEFREP:
|
||||
Str = "Create New Effect Report";
|
||||
break;
|
||||
case PT_BLKLDREP:
|
||||
Str = "Block Load Report";
|
||||
break;
|
||||
case PT_POOLREP:
|
||||
Str = "PID Pool Report";
|
||||
break;
|
||||
default:
|
||||
stat = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (stat)
|
||||
_tcscpy_s(OutStr, 100, Str);
|
||||
|
||||
return stat;
|
||||
}
|
||||
|
||||
// Convert Effect type to String
|
||||
BOOL EffectType2Str(FFBEType Type, LPTSTR OutStr)
|
||||
{
|
||||
BOOL stat = TRUE;
|
||||
LPTSTR Str="";
|
||||
|
||||
switch (Type)
|
||||
{
|
||||
case ET_NONE:
|
||||
stat = FALSE;
|
||||
break;
|
||||
case ET_CONST:
|
||||
Str="Constant Force";
|
||||
break;
|
||||
case ET_RAMP:
|
||||
Str="Ramp";
|
||||
break;
|
||||
case ET_SQR:
|
||||
Str="Square";
|
||||
break;
|
||||
case ET_SINE:
|
||||
Str="Sine";
|
||||
break;
|
||||
case ET_TRNGL:
|
||||
Str="Triangle";
|
||||
break;
|
||||
case ET_STUP:
|
||||
Str="Sawtooth Up";
|
||||
break;
|
||||
case ET_STDN:
|
||||
Str="Sawtooth Down";
|
||||
break;
|
||||
case ET_SPRNG:
|
||||
Str="Spring";
|
||||
break;
|
||||
case ET_DMPR:
|
||||
Str="Damper";
|
||||
break;
|
||||
case ET_INRT:
|
||||
Str="Inertia";
|
||||
break;
|
||||
case ET_FRCTN:
|
||||
Str="Friction";
|
||||
break;
|
||||
case ET_CSTM:
|
||||
Str="Custom Force";
|
||||
break;
|
||||
default:
|
||||
stat = FALSE;
|
||||
break;
|
||||
};
|
||||
|
||||
if (stat)
|
||||
_tcscpy_s(OutStr, 100, Str);
|
||||
|
||||
return stat;
|
||||
}
|
||||
|
||||
// Convert PID Device Control to String
|
||||
BOOL DevCtrl2Str(FFB_CTRL Ctrl, LPTSTR OutStr)
|
||||
{
|
||||
BOOL stat = TRUE;
|
||||
LPTSTR Str="";
|
||||
|
||||
switch (Ctrl)
|
||||
{
|
||||
case CTRL_ENACT:
|
||||
Str="Enable Actuators";
|
||||
break;
|
||||
case CTRL_DISACT:
|
||||
Str="Disable Actuators";
|
||||
break;
|
||||
case CTRL_STOPALL:
|
||||
Str="Stop All Effects";
|
||||
break;
|
||||
case CTRL_DEVRST:
|
||||
Str="Device Reset";
|
||||
break;
|
||||
case CTRL_DEVPAUSE:
|
||||
Str="Device Pause";
|
||||
break;
|
||||
case CTRL_DEVCONT:
|
||||
Str="Device Continue";
|
||||
break;
|
||||
default:
|
||||
stat = FALSE;
|
||||
break;
|
||||
}
|
||||
if (stat)
|
||||
_tcscpy_s(OutStr, 100, Str);
|
||||
|
||||
return stat;
|
||||
}
|
||||
|
||||
// Convert Effect operation to string
|
||||
BOOL EffectOpStr(FFBOP Op, LPTSTR OutStr)
|
||||
{
|
||||
BOOL stat = TRUE;
|
||||
LPTSTR Str="";
|
||||
|
||||
switch (Op)
|
||||
{
|
||||
case EFF_START:
|
||||
Str="Effect Start";
|
||||
break;
|
||||
case EFF_SOLO:
|
||||
Str="Effect Solo Start";
|
||||
break;
|
||||
case EFF_STOP:
|
||||
Str="Effect Stop";
|
||||
break;
|
||||
default:
|
||||
stat = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (stat)
|
||||
_tcscpy_s(OutStr, 100, Str);
|
||||
|
||||
return stat;
|
||||
}
|
||||
|
||||
// Polar values (0x00-0xFF) to Degrees (0-360)
|
||||
int Polar2Deg(BYTE Polar)
|
||||
{
|
||||
return ((UINT)Polar*360)/255;
|
||||
}
|
||||
|
||||
// Convert range 0x00-0xFF to 0%-100%
|
||||
int Byte2Percent(BYTE InByte)
|
||||
{
|
||||
return ((UINT)InByte*100)/255;
|
||||
}
|
||||
|
||||
// Convert One-Byte 2's complement input to integer
|
||||
int TwosCompByte2Int(BYTE in)
|
||||
{
|
||||
int tmp;
|
||||
BYTE inv = ~in;
|
||||
BOOL isNeg = in>>7;
|
||||
if (isNeg)
|
||||
{
|
||||
tmp = (int)(inv);
|
||||
tmp = -1*tmp;
|
||||
return tmp;
|
||||
}
|
||||
else
|
||||
return (int)in;
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||
# Visual C++ Express 2008
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vJoyClient", "vJoyClient.vcproj", "{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Debug|x64 = Debug|x64
|
||||
Rel64|Win32 = Rel64|Win32
|
||||
Rel64|x64 = Rel64|x64
|
||||
Release|Win32 = Release|Win32
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}.Debug|x64.Build.0 = Debug|x64
|
||||
{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}.Rel64|Win32.ActiveCfg = Rel64|Win32
|
||||
{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}.Rel64|Win32.Build.0 = Rel64|Win32
|
||||
{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}.Rel64|x64.ActiveCfg = Rel64|x64
|
||||
{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}.Rel64|x64.Build.0 = Rel64|x64
|
||||
{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}.Release|Win32.Build.0 = Release|Win32
|
||||
{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}.Release|x64.ActiveCfg = Release|x64
|
||||
{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -1,529 +0,0 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="vJoyClient"
|
||||
ProjectGUID="{A3C0D9FE-F4A3-45F9-874A-AC2E6806477C}"
|
||||
RootNamespace="vJoyClient"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UseUnicodeResponseFiles="true"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\inc"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Setupapi.lib vJoyInterface.lib"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories="..\lib"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
Description=""
|
||||
CommandLine="Copy /y ..\lib\vjoyinterface.dll $(OutDir)\."
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UseUnicodeResponseFiles="true"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\inc"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Setupapi.lib vJoyInterface.lib"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories="..\lib\amd64"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
CommandLine="copy /y ..\lib\amd64\vjoyinterface.dll $(OutDir)\."
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="0"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
AdditionalIncludeDirectories="..\inc"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Setupapi.lib vJoyInterface.lib"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\lib"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
CommandLine="Copy /y ..\lib\vjoyinterface.dll $(OutDir)\."
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="0"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
AdditionalIncludeDirectories="..\inc"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Setupapi.lib vJoyInterface.lib"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\lib\amd64"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
CommandLine="copy /y ..\lib\amd64\vjoyinterface.dll $(OutDir)\."
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Rel64|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="0"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
AdditionalIncludeDirectories="..\inc"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Setupapi.lib"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\lib"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Rel64|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="0"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
AdditionalIncludeDirectories="..\inc"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Setupapi.lib"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\lib"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\vJoyClient.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\inc\public.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\stdafx.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\inc\vjoyinterface.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
Loading…
Reference in a new issue