/// <summary> /// Serves as a hash function for a <see cref="OpenTK.Input.JoystickCapabilities"/> object. /// </summary> /// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a /// hash table.</returns> public override int GetHashCode() { return (AxisCount.GetHashCode() ^ ButtonCount.GetHashCode() ^ HatCount.GetHashCode() ^ IsConnected.GetHashCode()); }
/// <summary> /// ctor and init /// </summary> /// <param name="device">A DXInput device</param> /// <param name="hwnd">The WinHandle of the main window</param> /// <param name="joystickNum">The 0.. n-1 Joystick from DX enum</param> /// <param name="panel">The respective JS panel to show the properties</param> /// <param name="tabIndex">The Tab index in the GUI</param> public JoystickCls(SharpDX.DirectInput.Joystick device, Control hwnd, int joystickNum, UC_JoyPanel panel, int tabIndex) { log.DebugFormat("JoystickCls ctor - Entry with {0}", device.Information.ProductName); m_device = device; m_hwnd = hwnd; m_joystickNumber = joystickNum; // this remains fixed m_xmlInstance = joystickNum + 1; // initial assignment (is 1 based..) m_jPanel = panel; MyTabPageIndex = tabIndex; Activated_low = false; m_senseLimit = AppConfiguration.AppConfig.jsSenseLimit; // can be changed in the app.config file if it is still too little // Set BufferSize in order to use buffered data. m_device.Properties.BufferSize = 128; m_jPanel.Caption = m_device.Properties.ProductName; m_jPanel.nAxis = AxisCount.ToString( ); m_jPanel.nButtons = ButtonCount.ToString( ); m_jPanel.nPOVs = POVCount.ToString( ); m_jPanel.JsAssignment = 0; // default is no assignment m_ignoreButtons = new bool[m_state.Buttons.Length]; ResetButtons(m_ignoreButtons); m_modifierButtons = new bool[m_state.Buttons.Length]; ResetButtons(m_modifierButtons); log.Debug("Get JS Objects"); try { // Set the data format to the c_dfDIJoystick pre-defined format. //m_device.SetDataFormat( DeviceDataFormat.Joystick ); // Set the cooperative level for the device. m_device.SetCooperativeLevel(m_hwnd, CooperativeLevel.NonExclusive | CooperativeLevel.Background); // Enumerate all the objects on the device. foreach (DeviceObjectInstance d in m_device.GetObjects( )) { // For axes that are returned, set the DIPROP_RANGE property for the // enumerated axis in order to scale min/max values. if ((0 != (d.ObjectId.Flags & DeviceObjectTypeFlags.Axis))) { // Set the range for the axis. m_device.Properties.Range = new InputRange(-1000, +1000); } // Update the controls to reflect what objects the device supports. UpdateControls(d); } } catch (Exception ex) { log.Error("Get JS Objects failed", ex); } ApplySettings_low( ); // get whatever is needed here from Settings JoystickCls.RegisteredDevices++; Activated_low = true; }