public void Update()
        {
            foreach (var monitor in _joystickMonitors)
            {
                monitor.Update();

                bool         isInverted;
                JoystickAxis axis;

                var axisFound = IsAxisRecognized(monitor, _alreadyAssignedAxes, out axis, out isInverted);
                if (!axisFound ||
                    _alreadyAssignedAxes.Contains(axis))
                {
                    continue;
                }

                _alreadyAssignedAxes.Add(axis);

                var map = new AxisMapping();
                map.Axis = axis;

                if (isInverted)
                {
                    map.Negative = CurrentAction;
                    map.Positive = CurrentOppositeAction;
                }
                else
                {
                    map.Positive = CurrentAction;
                    map.Negative = CurrentOppositeAction;
                }

                AxisToMapping[map.Axis] = map;

                var finished = !Next();
                if (finished)
                {
                    if (ConfigurationComplete != null)
                    {
                        ConfigurationComplete();
                    }
                }
                else
                {
                    if (StepCompleted != null)
                    {
                        StepCompleted(map.Positive, map.Negative);
                    }
                }
            }
        }
        public void Update()
        {
            foreach (var monitor in _joystickMonitors)
            {
                monitor.Update();

                bool isInverted;
                JoystickAxis axis;

                var axisFound = IsAxisRecognized(monitor, _alreadyAssignedAxes, out axis, out isInverted);
                if (!axisFound || 
                    _alreadyAssignedAxes.Contains(axis))
                    continue;

                _alreadyAssignedAxes.Add(axis);

                var map = new AxisMapping();
                map.Axis = axis;

                if (isInverted)
                {
                    map.Negative = CurrentAction;
                    map.Positive = CurrentOppositeAction;
                }
                else
                {
                    map.Positive = CurrentAction;
                    map.Negative = CurrentOppositeAction;
                }

                AxisToMapping[map.Axis] = map;

                var finished = !Next();
                if (finished)
                {
                    if (ConfigurationComplete != null)
                        ConfigurationComplete();
                }
                else
                {
                    if (StepCompleted != null)
                        StepCompleted(map.Positive, map.Negative);
                }
            }
        }