forked from elitak/PPJoy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPPJoyAPI.cpp
148 lines (119 loc) · 4.62 KB
/
PPJoyAPI.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/***************************************************************************
* PPJoy Virtual Joystick for Microsoft Windows *
* Copyright (C) 2011 Deon van der Westhuysen *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
***************************************************************************/
#include <windows.h>
#include <stdafx.h>
#include "PPJoyAPI.h"
#include <JoyBus.h>
#include <JoyDefs.h>
#include <Mapping.h>
#include <ConfigMan.h>
#include <branding.h>
int PPJoy_OpenDriver (void)
{
return OpenPPJoyBusDriver();
}
void PPJoy_CloseDriver (void)
{
ClosePPJoyBusDriver();
}
int PPJoy_GetJoystickList (JOYENTRY *JoystickList, int ListSize)
{
int Count;
RescanJoysticks();
if (!pEnumData)
return -1;
if (ListSize>(int)pEnumData->Count)
ListSize= (int)pEnumData->Count;
for (Count=0;Count<ListSize;Count++)
{
JoystickList->JoyType= pEnumData->Joysticks[Count].JoyType;
JoystickList->JoySubType= pEnumData->Joysticks[Count].JoySubType;
JoystickList->LPTNumber= pEnumData->Joysticks[Count].LPTNumber;
JoystickList->UnitNumber= pEnumData->Joysticks[Count].UnitNumber;
JoystickList++;
}
return Count;
}
int PPJoy_AddJoystick (char LPTNumber, char UnitNumber, char JoyType, char JoySubType)
{
USHORT VendorID;
USHORT ProductID;
ULONG Count;
RescanJoysticks();
if (!pEnumData)
return 0;
VendorID= JOY_VENDOR_ID; /* defined in branding.h */
for (ProductID=JOY_PRODUCT_ID_BASE;ProductID<(JOY_PRODUCT_ID_BASE+16);ProductID++)
{
for (Count=0;Count<pEnumData->Count;Count++)
if ((pEnumData->Joysticks[Count].VendorID==VendorID)&&(pEnumData->Joysticks[Count].ProductID==ProductID))
break;
if (Count==pEnumData->Count)
break;
}
if (ProductID>=(JOY_PRODUCT_ID_BASE+16))
return 0;
return AddJoystick (LPTNumber,JoyType,UnitNumber,JoySubType,VendorID,ProductID);
}
int PPJoy_DeleteJoystick (char LPTNumber, char UnitNumber, char JoyType)
{
return DeleteJoystick (LPTNumber,JoyType,UnitNumber);
}
char* PPJoy_GetSubTypeName (char JoyType, char JoySubType)
{
return GetSubTypeName(JoyType,JoySubType);
}
char* PPJoy_GetJoyTypeName (char JoyType)
{
return GetJoyTypeName(JoyType);
}
int PPJoy_ReadMappings (char LPTNumber, char UnitNumber, char JoyType, JOYMAPPING **DefaultMapping, JOYMAPPING **DriverMapping, JOYMAPPING **DeviceMapping)
{
*DefaultMapping= NULL;
*DriverMapping= NULL;
*DeviceMapping= NULL;
return ReadJoystickMappings (LPTNumber,JoyType,UnitNumber,(JOYSTICK_MAP**)DefaultMapping,(JOYSTICK_MAP**)DriverMapping,(JOYSTICK_MAP**)DeviceMapping);
}
void PPJoy_FreeMapping (JOYMAPPING *Mapping)
{
if (Mapping)
free (Mapping);
}
int PPJoy_WriteMapping (char LPTNumber, char UnitNumber, char JoyType, JOYMAPPING *Mapping, int MapSize, int Scope)
{
int rc;
DWORD Count;
char DeviceID[256];
rc= WriteJoystickMapping (LPTNumber,JoyType,UnitNumber,(JOYSTICK_MAP*)Mapping,MapSize,Scope);
RescanJoysticks();
if (!pEnumData)
return rc;
for (Count=0;Count<pEnumData->Count;Count++)
if (((JoyType==pEnumData->Joysticks[Count].JoyType)&&(Scope==MAP_SCOPE_DRIVER))||
(((DWORD)LPTNumber==pEnumData->Joysticks[Count].LPTNumber)&&(UnitNumber==pEnumData->Joysticks[Count].UnitNumber)))
{
MakeDeviceID (DeviceID,pEnumData->Joysticks[Count].VendorID,pEnumData->Joysticks[Count].ProductID);
RestartDevice (DeviceID);
}
return rc;
}
int PPJoy_DeleteMapping (char LPTNumber, char UnitNumber, char JoyType, int Scope)
{
return DeleteJoystickMapping (LPTNumber,JoyType,UnitNumber,Scope);
}