Orxonox  0.0.5 Codename: Arcturus
Win32ForceFeedback.h
Go to the documentation of this file.
1 /*
2 The zlib/libpng License
3 
4 Copyright (c) 2005-2007 Phillip Castaneda (pjcast -- www.wreckedgames.com)
5 
6 This software is provided 'as-is', without any express or implied warranty. In no event will
7 the authors be held liable for any damages arising from the use of this software.
8 
9 Permission is granted to anyone to use this software for any purpose, including commercial
10 applications, and to alter it and redistribute it freely, subject to the following
11 restrictions:
12 
13  1. The origin of this software must not be misrepresented; you must not claim that
14  you wrote the original software. If you use this software in a product,
15  an acknowledgment in the product documentation would be appreciated but is
16  not required.
17 
18  2. Altered source versions must be plainly marked as such, and must not be
19  misrepresented as being the original software.
20 
21  3. This notice may not be removed or altered from any source distribution.
22 */
23 #ifndef OIS_Win32ForceFeedBack_H
24 #define OIS_Win32ForceFeedBack_H
25 
26 #include "OISPrereqs.h"
27 #include "OISForceFeedback.h"
28 #include "win32/Win32Prereqs.h"
29 
30 namespace OIS
31 {
33  {
35  public:
36  Win32ForceFeedback(IDirectInputDevice8* pDIJoy, const DIDEVCAPS* pDIJoyCaps);
38 
40  void upload( const Effect* effect );
41 
43  void modify( const Effect* effect );
44 
46  void remove( const Effect* effect );
47 
49  void setMasterGain( float level );
50 
52  void setAutoCenterMode( bool auto_on );
53 
55  short getFFAxesNumber();
56 
58  unsigned short getFFMemoryLoad();
59 
65  void _addEffectSupport( LPCDIEFFECTINFO pdei );
66 
72  void _addFFAxis();
73 
74  protected:
75 
76  //Specific Effect Settings
77  void _updateConstantEffect( const Effect* effect );
78  void _updateRampEffect( const Effect* effect );
79  void _updatePeriodicEffect( const Effect* effect );
80  void _updateConditionalEffect( const Effect* effect );
81  void _updateCustomEffect( const Effect* effect );
82 
83  //Sets the common properties to all effects
84  void _setCommonProperties( DIEFFECT* diEffect, DWORD* rgdwAxes,
85  LONG* rglDirection, DIENVELOPE* diEnvelope, DWORD struct_size,
86  LPVOID struct_type, const Effect* effect, const Envelope* envelope );
87  //Actually do the upload
88  void _upload( GUID, DIEFFECT*, const Effect* );
89 
90  // Map of currently uploaded effects (handle => effect)
91  typedef std::map<int,LPDIRECTINPUTEFFECT> EffectList;
92  EffectList mEffectList;
93 
94  //Simple unique handle creation - allows for upto 2+ billion effects
95  //during the lifetime of application. Hopefully, that is enough.
96  int mHandles;
97 
98  // Joystick device descriptor.
99  IDirectInputDevice8* mJoyStick;
100 
101  // Joystick capabilities.
102  const DIDEVCAPS* mpDIJoyCaps;
103 
104  // Number of axis supporting FF.
105  short mFFAxes;
106  };
107 }
108 #endif //OIS_Win32ForceFeedBack_H
Interface class for dealing with Force Feedback devices.
Definition: OISForceFeedback.h:35
Definition: Win32ForceFeedback.h:32
void _updateConditionalEffect(const Effect *effect)
Definition: Win32ForceFeedback.cpp:268
void _addEffectSupport(LPCDIEFFECTINFO pdei)
Definition: Win32ForceFeedback.cpp:433
int mHandles
Definition: Win32ForceFeedback.h:96
IDirectInputDevice8 * mJoyStick
Definition: Win32ForceFeedback.h:99
short mFFAxes
Definition: Win32ForceFeedback.h:105
Force Feedback is a relatively complex set of properties to upload to a device.
Definition: OISEffect.h:47
void modify(const Effect *effect)
Definition: Win32ForceFeedback.cpp:110
void _updateRampEffect(const Effect *effect)
Definition: Win32ForceFeedback.cpp:219
const DIDEVCAPS * mpDIJoyCaps
Definition: Win32ForceFeedback.h:102
An optional envelope to be applied to the start/end of an effect.
Definition: OISEffect.h:181
void _updatePeriodicEffect(const Effect *effect)
Definition: Win32ForceFeedback.cpp:238
void _addFFAxis()
Definition: Win32ForceFeedback.cpp:541
void setAutoCenterMode(bool auto_on)
Definition: Win32ForceFeedback.cpp:172
void upload(const Effect *effect)
Definition: Win32ForceFeedback.cpp:96
void _setCommonProperties(DIEFFECT *diEffect, DWORD *rgdwAxes, LONG *rglDirection, DIENVELOPE *diEnvelope, DWORD struct_size, LPVOID struct_type, const Effect *effect, const Envelope *envelope)
Definition: Win32ForceFeedback.cpp:316
void setMasterGain(float level)
Definition: Win32ForceFeedback.cpp:141
void _updateCustomEffect(const Effect *effect)
Definition: Win32ForceFeedback.cpp:298
void _upload(GUID, DIEFFECT *, const Effect *)
Definition: Win32ForceFeedback.cpp:395
short getFFAxesNumber()
Definition: Win32ForceFeedback.cpp:68
std::map< int, LPDIRECTINPUTEFFECT > EffectList
Definition: Win32ForceFeedback.h:91
Definition: EventHelpers.h:31
~Win32ForceFeedback()
Definition: Win32ForceFeedback.cpp:51
void _updateConstantEffect(const Effect *effect)
Definition: Win32ForceFeedback.cpp:195
unsigned short getFFMemoryLoad()
Definition: Win32ForceFeedback.cpp:74
Win32ForceFeedback()
Definition: Win32ForceFeedback.h:34
EffectList mEffectList
Definition: Win32ForceFeedback.h:92