Esempio n. 1
0
 /// <summary>
 /// Finds and releases the joystick identified and authorized by JoyCapabilities struct.
 /// </summary>
 /// <param name="capabilities">Struct containing a token which is checked for safety
 /// - to make sure that the current owner of joystick wants to release the joystick</param>
 /// <returns>Success of disconnect operation</returns>
 public bool Disconnect(JoyCapabilities capabilities)
 {
     foreach (var joy in _joystics.Where(joy => joy.IsBusy && joy.Capabilities.Token == capabilities.Token))
     {
         return(joy.Disconnect());
     }
     return(false);
 }
Esempio n. 2
0
 /// <summary>
 /// Finds and releases the joystick identified and authorized by JoyCapabilities struct.
 /// </summary>
 /// <param name="capabilities">Struct containing a token which is checked for safety
 /// - to make sure that the current owner of joystick wants to release the joystick</param>
 /// <returns>Success of disconnect operation</returns>
 public bool Disconnect(JoyCapabilities capabilities)
 {
     foreach (var joy in _joystics.Where(joy => joy.IsBusy && joy.Capabilities.Token == capabilities.Token))
     {
         return joy.Disconnect();
     }
     return false;
 }
Esempio n. 3
0
        /// <summary>
        /// Tries to connect to the current instance of JoyControl which manages a specific virtual joystick
        /// </summary>
        /// <returns>Struct containing information about engaged joystick or (in case of error)
        /// information describing eventual problems with request</returns>
        public JoyCapabilities TryConnect()
        {
            if (IsBusy)
            {
                throw new Exception("Cannot connect to a joystick already connected.");
            }

            /* Creating a new instance every time when we start a new connection
             * because we have to refresh the access token to preserve the uniqueness
             * among all connection attempts */
            Capabilities = new JoyCapabilities();

            /* Checking if the vJoy driver is enabled */
            if (!_joystick.vJoyEnabled())
            {
                Capabilities.ErrorInfo = "vJoy driver not enabled.";
                return(Capabilities);
            }

            /* For information purposes only */
            Capabilities.JoyInfo = String.Format("Vendor: {0}, Product :{1}, Version Number:{2}.",
                                                 _joystick.GetvJoyManufacturerString(), _joystick.GetvJoyProductString(),
                                                 _joystick.GetvJoySerialNumberString());

            /* Checking eventual problems with occupied or not installed joystick */
            var status = _joystick.GetVJDStatus(_joyId);

            switch (status)
            {
            case VjdStat.VJD_STAT_OWN:
            case VjdStat.VJD_STAT_FREE:
                break;

            case VjdStat.VJD_STAT_BUSY:
                Capabilities.ErrorInfo = String.Format("vJoy Device {0} is already owned by another feeder. Cannot continue.", _joyId);
                return(Capabilities);

            case VjdStat.VJD_STAT_MISS:
                Capabilities.ErrorInfo = String.Format("vJoy Device {0} is not installed or disabled. Cannot continue.", _joyId);
                return(Capabilities);

            default:
                Capabilities.ErrorInfo = String.Format("vJoy Device {0} general error. Cannot continue.", _joyId);
                return(Capabilities);
            }

            /* ##### Remark #####
             * Generally a situation that in this moment the joystick is in state VJD_STAT_OWN shouldn't be possible
             * and we can consider to throw an exception when the situation occurs. */

            /* Engaging joystick with specified id with the current instance of JoyControl */
            if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!_joystick.AcquireVJD(_joyId))))
            {
                Capabilities.ErrorInfo = String.Format("Failed to acquire vJoy device number {0}.", _joyId);
                return(Capabilities);
            }

            IsBusy = true;
            _joystick.ResetVJD(_joyId);

            Capabilities.JoyId = _joyId;

            Capabilities.AxisXExists  = _joystick.GetVJDAxisExist(_joyId, HID_USAGES.HID_USAGE_X);
            Capabilities.AxisXExists  = _joystick.GetVJDAxisExist(_joyId, HID_USAGES.HID_USAGE_Y);
            Capabilities.ButtonsCount = _joystick.GetVJDButtonNumber(_joyId);

            long max = 0;

            _joystick.GetVJDAxisMax(_joyId, HID_USAGES.HID_USAGE_X, ref max);
            Capabilities.AxisXMax = max;

            _joystick.GetVJDAxisMax(_joyId, HID_USAGES.HID_USAGE_X, ref max);
            Capabilities.AxisYMax = max;

            return(Capabilities);
        }
Esempio n. 4
0
        /// <summary>
        /// Tries to connect to the current instance of JoyControl which manages a specific virtual joystick
        /// </summary>
        /// <returns>Struct containing information about engaged joystick or (in case of error)
        /// information describing eventual problems with request</returns>
        public JoyCapabilities TryConnect()
        {
            if (IsBusy)
                throw new Exception("Cannot connect to a joystick already connected.");

            /* Creating a new instance every time when we start a new connection
             * because we have to refresh the access token to preserve the uniqueness
             * among all connection attempts */
            Capabilities = new JoyCapabilities();

            /* Checking if the vJoy driver is enabled */
            if (!_joystick.vJoyEnabled())
            {
                Capabilities.ErrorInfo = "vJoy driver not enabled.";
                return Capabilities;
            }

            /* For information purposes only */
            Capabilities.JoyInfo = String.Format("Vendor: {0}, Product :{1}, Version Number:{2}.",
                _joystick.GetvJoyManufacturerString(), _joystick.GetvJoyProductString(),
                _joystick.GetvJoySerialNumberString());

            /* Checking eventual problems with occupied or not installed joystick */
            var status = _joystick.GetVJDStatus(_joyId);

            switch (status)
            {
                case VjdStat.VJD_STAT_OWN:
                case VjdStat.VJD_STAT_FREE:
                    break;
                case VjdStat.VJD_STAT_BUSY:
                    Capabilities.ErrorInfo = String.Format("vJoy Device {0} is already owned by another feeder. Cannot continue.", _joyId);
                    return Capabilities;
                case VjdStat.VJD_STAT_MISS:
                    Capabilities.ErrorInfo = String.Format("vJoy Device {0} is not installed or disabled. Cannot continue.", _joyId);
                    return Capabilities;
                default:
                    Capabilities.ErrorInfo = String.Format("vJoy Device {0} general error. Cannot continue.", _joyId);
                    return Capabilities;
            }

            /* ##### Remark #####
             * Generally a situation that in this moment the joystick is in state VJD_STAT_OWN shouldn't be possible
             * and we can consider to throw an exception when the situation occurs. */

            /* Engaging joystick with specified id with the current instance of JoyControl */
            if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!_joystick.AcquireVJD(_joyId))))
            {
                Capabilities.ErrorInfo = String.Format("Failed to acquire vJoy device number {0}.", _joyId);
                return Capabilities;
            }

            IsBusy = true;
            _joystick.ResetVJD(_joyId);

            Capabilities.JoyId = _joyId;

            Capabilities.AxisXExists = _joystick.GetVJDAxisExist(_joyId, HID_USAGES.HID_USAGE_X);
            Capabilities.AxisXExists = _joystick.GetVJDAxisExist(_joyId, HID_USAGES.HID_USAGE_Y);
            Capabilities.ButtonsCount = _joystick.GetVJDButtonNumber(_joyId);

            long max = 0;

            _joystick.GetVJDAxisMax(_joyId, HID_USAGES.HID_USAGE_X, ref max);
            Capabilities.AxisXMax = max;

            _joystick.GetVJDAxisMax(_joyId, HID_USAGES.HID_USAGE_X, ref max);
            Capabilities.AxisYMax = max;

            return Capabilities;
        }