Skip to content

Commit

Permalink
[Input] Added JoystickCapabilities.HatCount
Browse files Browse the repository at this point in the history
  • Loading branch information
thefiddler committed Jan 31, 2014
1 parent 168c45f commit a722827
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 21 deletions.
35 changes: 19 additions & 16 deletions Source/OpenTK/Input/JoystickCapabilities.cs
Expand Up @@ -40,21 +40,23 @@ public struct JoystickCapabilities : IEquatable<JoystickCapabilities>
{ {
byte axis_count; byte axis_count;
byte button_count; byte button_count;
byte dpad_count; byte hat_count;
bool is_connected; bool is_connected;


#region Constructors #region Constructors


internal JoystickCapabilities(int axis_count, int button_count, bool is_connected) internal JoystickCapabilities(int axis_count, int button_count, int hat_count, bool is_connected)
{ {
if (axis_count < 0 || axis_count >= JoystickState.MaxAxes) if (axis_count < 0 || axis_count > JoystickState.MaxAxes)
throw new ArgumentOutOfRangeException("axis_count"); throw new ArgumentOutOfRangeException("axis_count");
if (button_count < 0 || button_count >= JoystickState.MaxButtons) if (button_count < 0 || button_count > JoystickState.MaxButtons)
throw new ArgumentOutOfRangeException("axis_count"); throw new ArgumentOutOfRangeException("axis_count");
if (hat_count < 0 || hat_count > JoystickState.MaxHats)
throw new ArgumentOutOfRangeException("hat_count");


this.axis_count = (byte)axis_count; this.axis_count = (byte)axis_count;
this.button_count = (byte)button_count; this.button_count = (byte)button_count;
this.dpad_count = 0; // Todo: either remove dpad_count or add it as a parameter this.hat_count = (byte)hat_count;
this.is_connected = is_connected; this.is_connected = is_connected;
} }


Expand All @@ -78,6 +80,14 @@ public int ButtonCount
get { return button_count; } get { return button_count; }
} }


/// <summary>
/// Gets the number of hats supported by this <see cref="JoystickDevice"/>.
/// </summary>
public int HatCount
{
get { return hat_count; }
}

/// <summary> /// <summary>
/// Gets a value indicating whether this <see cref="JoystickDevice"/> is connected. /// Gets a value indicating whether this <see cref="JoystickDevice"/> is connected.
/// </summary> /// </summary>
Expand All @@ -94,8 +104,8 @@ public bool IsConnected
public override string ToString() public override string ToString()
{ {
return String.Format( return String.Format(
"{{Axes: {0}; Buttons: {1}; IsConnected: {2}}}", "{{Axes: {0}; Buttons: {1}; Hats: {2}; IsConnected: {2}}}",
AxisCount, ButtonCount, IsConnected); AxisCount, ButtonCount, HatCount, IsConnected);
} }


/// <summary> /// <summary>
Expand All @@ -108,6 +118,7 @@ public override int GetHashCode()
return return
AxisCount.GetHashCode() ^ AxisCount.GetHashCode() ^
ButtonCount.GetHashCode() ^ ButtonCount.GetHashCode() ^
HatCount.GetHashCode() ^
IsConnected.GetHashCode(); IsConnected.GetHashCode();
} }


Expand All @@ -126,15 +137,6 @@ public override bool Equals(object obj)


#endregion #endregion


#region Private Members

int DPadCount
{
get { return dpad_count; }
}

#endregion

#region IEquatable<JoystickCapabilities> Members #region IEquatable<JoystickCapabilities> Members


/// <summary> /// <summary>
Expand All @@ -148,6 +150,7 @@ public bool Equals(JoystickCapabilities other)
return return
AxisCount == other.AxisCount && AxisCount == other.AxisCount &&
ButtonCount == other.ButtonCount && ButtonCount == other.ButtonCount &&
HatCount == other.HatCount &&
IsConnected == other.IsConnected; IsConnected == other.IsConnected;
} }


Expand Down
6 changes: 3 additions & 3 deletions Source/OpenTK/Platform/MacOS/HIDInput.cs
Expand Up @@ -441,7 +441,7 @@ JoystickData CreateJoystick(IntPtr sender, IntPtr device)
joy = new JoystickData(); joy = new JoystickData();
int axes = 0; int axes = 0;
int buttons = 0; int buttons = 0;
int dpads = 0; int hats = 0;


CFStringRef name_ref = NativeMethods.IOHIDDeviceGetProperty(device, NativeMethods.IOHIDProductKey); CFStringRef name_ref = NativeMethods.IOHIDDeviceGetProperty(device, NativeMethods.IOHIDProductKey);
string name = CF.CFStringGetCString(name_ref); string name = CF.CFStringGetCString(name_ref);
Expand Down Expand Up @@ -475,7 +475,7 @@ JoystickData CreateJoystick(IntPtr sender, IntPtr device)
break; break;


case HIDUsageGD.Hatswitch: case HIDUsageGD.Hatswitch:
dpads++; hats++;
break; break;
} }
break; break;
Expand All @@ -499,7 +499,7 @@ JoystickData CreateJoystick(IntPtr sender, IntPtr device)
joy.Name = name; joy.Name = name;
joy.Guid = guid; joy.Guid = guid;
joy.State.SetIsConnected(true); joy.State.SetIsConnected(true);
joy.Capabilities = new JoystickCapabilities(axes, buttons, true); joy.Capabilities = new JoystickCapabilities(axes, buttons, hats, true);


// Map button elements to JoystickButtons // Map button elements to JoystickButtons
for (int button = 0; button < button_elements.Count; button++) for (int button = 0; button < button_elements.Count; button++)
Expand Down
1 change: 1 addition & 0 deletions Source/OpenTK/Platform/SDL2/Sdl2JoystickDriver.cs
Expand Up @@ -656,6 +656,7 @@ JoystickCapabilities IJoystickDriver2.GetCapabilities(int index)
return new JoystickCapabilities( return new JoystickCapabilities(
joystick.Axis.Count, joystick.Axis.Count,
joystick.Button.Count, joystick.Button.Count,
joystick.Details.HatCount,
joystick.Details.IsConnected); joystick.Details.IsConnected);
} }
return new JoystickCapabilities(); return new JoystickCapabilities();
Expand Down
5 changes: 4 additions & 1 deletion Source/OpenTK/Platform/Windows/WinMMJoystick.cs
Expand Up @@ -269,7 +269,10 @@ public JoystickCapabilities GetCapabilities(int index)
if (result == JoystickError.NoError) if (result == JoystickError.NoError)
{ {
JoystickCapabilities caps = new JoystickCapabilities( JoystickCapabilities caps = new JoystickCapabilities(
mmcaps.NumAxes, mmcaps.NumButtons, true); mmcaps.NumAxes,
mmcaps.NumButtons,
(mmcaps.Capabilities & JoystCapsFlags.HasPov) != 0 ? 1 : 0,
true);
//if ((caps.Capabilities & JoystCapsFlags.HasPov) != 0) //if ((caps.Capabilities & JoystCapsFlags.HasPov) != 0)
// gpcaps.DPadCount++; // gpcaps.DPadCount++;
return caps; return caps;
Expand Down
5 changes: 4 additions & 1 deletion Source/OpenTK/Platform/X11/X11Joystick.cs
Expand Up @@ -484,7 +484,10 @@ JoystickCapabilities IJoystickDriver2.GetCapabilities(int index)
{ {
JoystickDevice<X11JoyDetails> js = sticks[index_to_stick[index]]; JoystickDevice<X11JoyDetails> js = sticks[index_to_stick[index]];
caps = new JoystickCapabilities( caps = new JoystickCapabilities(
js.Axis.Count, js.Button.Count, js.Details.State.IsConnected); js.Axis.Count,
js.Button.Count,
0, // hats not supported by /dev/js
js.Details.State.IsConnected);
} }
return caps; return caps;
} }
Expand Down

0 comments on commit a722827

Please sign in to comment.